{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/AppError/AppErrorTracker.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/visibility.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/trackInfo.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/isomorphic-util/src/DOMHelpers.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/constants/Constants.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/telemetryDataTypes.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/app/HeadData.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/render-cache/src/Constants.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/reducers/ActionDispatchHelper.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/reducers/ActionSenderBase.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/reducers/ActionDispatchCancellationToken.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/reducers/ActionSender.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/reducers/GlobalActionSender.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/reducers/ActionMap.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/AppError/AppErrors.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/UrlUtility.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/telemetryconstants.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/dom.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-constants/src/AppTypes.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/constants/ConnectorConstants.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/mediator.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/isomorphic-util/src/requestData.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/Parsing.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/WebStorage.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/extend.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/app/AppEnvironment.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/logging/Logger.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/pageInstance.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/Utility.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/telemetryReadyCallback.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/reducers/DynamicReducer.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/pages/PageHelper.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/pages/PageBase.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/performance/PageTimings.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/app/Environment.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-base/src/utilities/ColumnWidths.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/milestone-data/src/data-model/ExperienceLoadingState.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/auth/src/AadAuthHelper.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-base/src/utilities/BreakpointManager.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/CookieUtility.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/pages/index.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-constants/src/PageTypes.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/app/Enterprise.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/oneservice/src/OneServiceUtility.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/reducers/DataConnectorInjector.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/render-cache/src/Helper.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/wpo-common/src/Constants.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/wpo-common/src/WpoHelper.ts","webpack:///./src/integration/RequireAsync.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/performance/PerfMarker.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/performance/PerfTimeline.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/performance/AppPerfTrace.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/performance/ExperienceDiagnostics.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/performance/AppPerfTraceConfig.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/events.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/escape.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/navigation.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/trackingHelper.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/track.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/src/Icon.tsx","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/src/Icon.styles.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/src/index.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/src/icons/GlyphInline.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/app/HostPage.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/app/Market.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/telemetry-transitional/src/msnews-telemetry-transitional/guidGen.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-constants/src/AuthCookieNames.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/milestone-data/src/MilestoneData.actions.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/UserNavigation.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/ServerCacheMock.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-constants/src/ConnectorNamespaces.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/views-helpers/src/IntraArticle.types.ts","webpack:///./src/integration/PrimeTrack.ts","webpack:///./src/integration/PrimeTelemetry.ts","webpack:///./src/integration/PrimeTrackExtensionComplete.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/logging/ErrorHelper.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-base/src/tracking/Telemetry.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/SingletonResetManager.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/reducers/ActionHandler.ts","webpack:///./src/integration/SubnavTabId.ts","webpack:///./src/integration/MediatorEventNames.ts","webpack:///./src/integration/PrimeMediator.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/views-helpers/src/ViewsStringResource.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/AdChoices.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/AlertWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/BingCardDefaultHotelImage.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/BingHotelSeePrice.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/BingLogo.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/BingRatingDarkLightStar.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/BingRatingDarkStar.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/BingRatingLightStar.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/BlowingHail.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/BlowingHailWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/BlowingHailV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/BlowingSnow.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/BlowingSnowWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/BlowingSnowV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Check.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Chevron.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ChevronDown.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ChevronRight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ChevronWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/CircleChevron.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/CircleClose.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ClearNight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ClearNightWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ClearNightV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Close.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/CloseThin.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Cloudy.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/CloudyWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/CloudyV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Copy.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/DarkModeHotel.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/DayTime.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Delete.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Discover.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Dislike.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/DislikeText.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Disliked.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/DislikedLight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/DislikedText.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Docx.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Download.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/DownloadNoFill.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Edit.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/EditNoFill.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Edited.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/EditedNoFill.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Ellipses.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/EllipsesLight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Excel.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Facebook.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/FacebookText.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/FacebookTextBlack.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Fog.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/FogWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/FogV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Folder.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/FolderNoFill.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/FolderOpen.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Form.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/FreezingRain.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/FreezingRainWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/FreezingRainV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/GalleryFullscreen.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/GalleryMediaIcon.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/GenericFile.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/GridView.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HailDay.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HailDayWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HailDayV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HailNight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HailNightWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HailNightV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HazeSmoke.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HazeSmokeWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HazeSmokeV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HeavySnow.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HeavySnowWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HeavySnowV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Hide.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/HideStory.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Hotel.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Information.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/InteractionRequiredDark.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/InteractionRequiredLight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Interested.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ListMenu.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LightRain.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LightRainWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LightRainV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LightSnow.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LightSnowWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LightSnowV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Like.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LikeText.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Liked.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LikedText.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Line.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Link.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LinkedIn.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LinkedInBlack.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LinkedInText.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Locate.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LocateWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/LocationDetect.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Mail.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/MailBlack.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/MailNoFill.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ManagedBriefcase.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/MapZoomIn.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/MapZoomOut.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Message.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/MessageNoFill.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Messages.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/MicrosoftLogo.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/MicrosoftNews.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/MicrosoftNewsFull.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/MicrosoftNewsFull_FR.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/MicrosoftNewsFull_ZH.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ModerateRain.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ModerateRainWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ModerateRainV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Movie.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/MsnLogo.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/NightTime.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/OfficeFormsLogo.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/OneDrive.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/OneNote.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Onetoc.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Outlook.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/PartlyCloudyDay.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/PartlyCloudyDayWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/PartlyCloudyDayV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/PartlyCloudyNight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/PartlyCloudyNightWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/PartlyCloudyNightV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Pdf.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/People.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Pencil.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Pin.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/PowerBI.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/PowerPoint.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Pptx.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/PriceDrop.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/PriceDropBlue.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Project.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Radar.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainShowersDay.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainShowersDayWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainShowersDayV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainShowersNight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainShowersNightWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainShowersNightV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainSnow.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainSnowV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainSnowShowersDay.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainSnowShowersDayWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainSnowShowersNight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainSnowShowersNightWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainSnowShowersNightV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/RainSnowWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Refresh.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Remove.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Save.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Saved.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Search.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Share.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ShareLight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ShareNoFill.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Sharepoint.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Shopping.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ShoppingDealsDark.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ShoppingDealsLight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Skype.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/SkypeOffice.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/SnowShowersDay.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/SnowShowersDayWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/SnowShowersDayV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/SnowShowersNight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/SnowShowersNightWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/SnowShowersNightV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Stars.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/SunnyDay.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/SunnyDayWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/SunnyDayV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Sway.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/SwayApp.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Teams.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ThumbnailView.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Thunderstorms.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ThunderstormsWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/ThunderstormsV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Trending.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Twitter.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/TwitterBlack.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/TwitterText.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Unpin.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Upload.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/VerticalSeparator.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/VideoMediaIcon.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/VideoPlay.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Visio.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Vkcom.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Vsdx.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WaterDropL2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WeatherAlert.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WeatherExpand.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WeatherIcon.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WeatherPrecipitation.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WeatherTemperature.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WeatherWind.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WeeklyAdsDark.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WeeklyAdsLight.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WhatsApp.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WhatsAppBlack.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Windy.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WindyWhite.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/WindyV2.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Word.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/World.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Xlsx.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/icon/icons/Yammer.svg","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-constants/src/SignedInStatus.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/PublicPath/index.ts","webpack:///./src/publicPath.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-base/src/tracking/Telemetry.types.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/WebWorkerUtility.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/telemetry-base/TelemetryBase.ts","webpack:///./src/integration/SubnavTabName.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/services/ExponentialBackoffRetry.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/oneservice/src/ServiceRequest.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/actions/CommonActions.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/config/configs/ExperienceState.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/config/configs/ChildExperiencesDeferRenderType.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/config/configs/ChildExperienceValidator.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/config-validator/src/ConfigProcessor.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-connector/src/experience-loader/ExperienceLoader.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-connector/src/connectors/ComponentConnector.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-connector/src/connectors/ExperiencePerfTimeline.tsx","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/app/ScreenWidth.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/oneservice/src/UrlUtility.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/IndexedDb.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-base/src/utilities/FastBreakpointManager.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/node_modules/@msnews/ssr-server/dist/interop/RequestData.js","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/isomorphic-util/src/SSRInteropContract.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/request/RequestContext.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/milestone-data/src/data-management/MilestoneTrackerHelper.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/render-cache/src/PersistRenderCache.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/ServerCache.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-constants/src/ExperienceIds.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-redux/src/connectors/DataConnector.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/milestone-data/src/data-model/ExperienceDeferralHandlerSignature.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/milestone-data/src/data-model/ExperienceMilestoneEventTypes.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/config/configs/ExperienceCompositionTypes.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/config/configs/composition/ChildrenTypes.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/bundles/Bundles.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/milestone-data/src/data-model/ExperienceDeferralEventTypes.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/milestone-data/src/data-management/ExperienceDeferralDependencyTrackerState.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/milestone-data/src/MilestoneData.Helper.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/milestone-data/src/MilestoneData.Constants.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experimentation-helpers/src/GetPeregrineFlights.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/config/Resolver.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/performance/PerfTracker.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/experiences-base/src/base/BaseExperience.tsx","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/performance/PerfMarkerWait.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/diagnostics/src/performance/PerfMarkerConstants.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/views-helpers/src/SocialMediaConfig.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/image-url-generator/ImageUrlGenerator.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/views-helpers/src/ViewsUtility.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/services/ImageServiceConfig.ts","webpack:///./src/integration/Constants.ts","webpack:///./src/integration/Mediator.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/UrlSearchParamsHelper.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/pop-over/src/PopOver.tsx","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/pop-over/src/PopOver.styles.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/pop-over/src/index.ts","webpack:///./src/integration/SubnavTabHelper.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/ZIndex.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/card-context-menu/src/CardContextMenu.tsx","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/card-context-menu/src/CardContextMenu.style.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/card-context-menu/src/index.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/social-media-icon/src/SocialMediaIcon.styles.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/social-media-icon/src/SocialMediaIcon.tsx","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/social-media-icon/src/index.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/core/src/utilities/ShallowCompare.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/share-dialog/src/ShareDialog.styles.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/share-dialog/src/StringResource.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/share-dialog/src/ShareDialog.tsx","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/share-dialog/src/index.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/components/article-card/src/ArticleCard.tsx","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/libs/views-helpers/src/SocialMediaHelper.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/ContentActionsToolbar.constants.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/components/sharing-toolbar/SharingToolbar.props.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/ContentActionsToolbar.actions.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/components/sharing-toolbar/SharingToolbar.constants.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/ContentActionsToolbar.inspector.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/services/ContentActionsToolbarServiceClient.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/ContentActionsToolbar.connector.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/ContentActionsToolbar.telemetry.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/ContentActionsToolbar.props.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/ContentActionsToolbar.reducer.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/components/sharing-toolbar/SharingToolbar.styles.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/components/dialog-article-card/DialogArticleCard.tsx","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/components/dialog-article-card/DialogArticleCard.styles.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/components/dialog-article-card/index.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/components/sharing-toolbar/SharingToolbar.tsx","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/components/sharing-toolbar/index.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/ContentActionsToolbar.tsx","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/ContentActionsToolbar.styles.ts","webpack:///C:/agents/peregrineAgent_selfhostw0001FX_a0/_work/1/s/experiences/content-actions-toolbar/src/index.ts","webpack:///./src/content-actions-toolbar/ContentActionsToolbar.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","19","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","Severity","Deferred","callbacks","isResolved","resolvedArgs","flushCallbacks","errors","index","args","then","callback","always","this","visibilityDeferred","visibilityProperty","prefixes","hidden","prospectivePropertyName","getHiddenPropertyName","isUnloadEventInProgress","addEventListener","wasBrowserHidden","evtname","replace","visibilityChanged","isHidden","notifyWhenPageVisible","isElementTrulyVisible","element","windowRight","windowLeft","windowHeight","contentArea","getElementById","contentRect","getBoundingClientRect","right","left","boxVisible","rec","elementHeightVisible","top","bottom","elementWidthVisible","height","width","wasBrowserHiddenAtLeastOnce","clientClientId","browserWidth","browserHeight","eventIndex","clientIdTypeValue","isFirstEventIndex","eventTransientCustomTags","baseUrl","userDefinedCustomTags","Module","visible","compress","moduleTelemetryData","getAttribute","JSON","parse","getBrowserSize","outerWidth","documentElement","clientWidth","outerHeight","clientHeight","joinTelemetryValuesForTmpl","separator","currentTmplValue","newTmplValue","combinedTelemetryVal","isDuplicateKeyExist","newTmplValueSplited","split","newKeyVal","indexOf","currentTmplValueSplited","currentKeyVal","val","trackInfo","notrack","cmSeparator","defaultModule","defaultFormHeadline","piitxt","piiurl","wrapperId","MUIDCookie","gestureKey","gestureType","tap","rightclick","eventTypes","click","nonNavClckEvt","submit","contextmenu","mouseenter","imprUpdate","adPlay","contentPlay","videoClickNonNav","imprUpdateMechanisms","load","scroll","auto","resize","swipe","partial","view","sitePage","userStatic","overrideClientParams","persistOverriddenParams","customTags","defaultCustomTags","adsEnabled","adoni","getDefaultCustomTags","trackingDisabled","shouldFireTelemetry","appErrorEnabled","shouldFireAppError","getCurrentTime","Date","timeToInteract","eventTime","eventTiming","performance","timing","navigationStart","telemetryModuleTypes","Undefined","Header","Footer","topNavBar","navBar","dropDown","Section","Carousel","searchBox","inputBox","actionButton","Interaction","Headline","Navigation","Entity","structuredData","appStore","appLaunch","cmsPromotions","microsoftWebStore","xboxStore","officeStore","appInstall","PartnerLinks","SponsoredContent","contentPlacedBySource","Editorial","PersonalizationAlgo","BingAlgo","Taboola","Outbrain","telemetryDataAttribute","telemetryHLAttribute","client","clientId","requestId","clientIdType","gesture","dom","getTarget","trackInfoEvent","originalEvent","ctrlKey","shiftKey","getMuid","getAnonCookieName","AnonCookieName","AuthCookieName","getSsoComplete","SsoComplete","toLowerCase","getAadAuthentication","AadState","AadAccount","NonAadAccount","accountInfo","ResolvedAccountInfo","account_type","AAD","orientation","screen","OTFTelemetry","mechanism","telemetryData","body","querySelectorAll","innerHeight","innerWidth","infopane","querySelector","infopaneVisible","telemetryTracking","isVisible","visibles","context","formatModules","vc","sendImprUpdateEvent","pageTitle","title","pageUrl","ocid","msnocid","hasQueryString","referrer","referrerOverride","screenResolution","join","userAgent","navigator","visibility","userDynamic","timeStamp","slideType","elem","containsClass","parent","firstEventIndex","currentEventIndex","pageInstance","getRequestId","resetEventIndex","custom","addCustomTags","combinedTags","extend","stringify","addCustomTagsForClickEvent","setupParameters","evt","trackInfoSitePage","anonckName","rid","di","domainId","clid","issso","aadState","afd","anoncknm","page_product","page_type","page_name","page_configuration","topLevelContainerType","parameters","winht","docht","Math","max","scrollHeight","offsetHeight","scrollOff","pageYOffset","scrollTop","wbh","tmpl","templ","mkt","localeCode","TTI","feedId","fid","fn","feedName","ft","feedType","flightid","tlcType","sendUpdate","formattedModules","mData","y","ct","telemetryDataTypes","getTelemetryContentType","telemetryReadyCallback","otfURL","idx","beaconData","url","requestType","POST","eventType","impressionUpdate","params","trackingType","OTF","mediator","pub","FireTelemetry","updateTemplValue","templToAdd","updateSitePage","flightId","currentSitePage","currentFlightIds","leftTmplValue","rightTemplValue","updatePageName","pageName","overridePageType","doOverridePageType","telemetryPageName","getTelemetryPageInfo","PageName","PageType","updateFeedMetadata","updatePagePivot","pagePivot","TelemetryPagePivot","validateTelemetryDataType","updateReferrer","referrerType","TelemetryContentType","setCustomTagsForClickEvent","updatePageUserTypeAndUserId","userType","userId","pageUserId","pageUserType","TelemetryUserType","trackCustomProperty","updateExtendedFlightId","namespace","flightIds","TelemetryPartnerNamespace","extflightid","canUseDOM","getLocationHref","location","href","getLocationHostname","hostname","getLocationHost","host","getLocationOrigin","origin","getLocationSearch","search","getLocationProtocol","protocol","getDocumentElementById","elementId","getDocumentElementsByTagName","tagName","getElementsByTagName","getIndexedDB","indexedDB","getInnerWidth","getInnerHeight","getDevicePixelRatio","devicePixelRatio","createScriptTag","id","loadAsync","scriptElement","async","NONCE_ID","nonce","ariaLabelAttribute","rootElementId","htmlElementIds","html","applicationCacheConstants","manifestAttributeName","pagesRefreshData","storedHeadDataKey","storedLastUsedActivityIdKey","clientSettings","pagetypeSettings","info","js","lang","dir","serviceUrl","telemetryId","trackPageProduct","trackPageType","minimumHostPagePathSegments","anonCookieName","appAnonCookieExistsCookieName","childCookieName","nurturingAcceptedStateKey","oneServiceHeaders","activityId","authorization","oneServiceQueryStringKeys","apiKey","complexInfoPaneEnabled","contentType","delta","disableTypeSerialization","infopaneCount","fdhead","feedLayoutRequestType","filter","ids","market","parentContentId","parentNamespace","parentTitle","queryQ","query","queryType","qScope","responseSchema","select","session","signInCookieName","skip","source","timeOut","user","wrapOData","AriaRoles","DeviceOrientation","EnterpriseOneServiceApi","CoreLocalStorageKeys","pageVersions","defaultOneServiceApiKey","PageNamePageTypeMappingList","TelemetryTypeContentTypeMappingList","TelemetryTypeBehaviorTypeMappingList","TelemetryPageType","Unspecified","DHP","NTP","HomePage","VerticalHomePage","StructuredDataPage","SectionFront","SiteSearch","Article","Gallery","Video","SubjectSection","CustomColumn","TelemetryType","TopNavBar","NavBar","DropDown","SearchBox","InputBox","ActionButton","StructuredData","AppStore","AppLaunch","CmsPromotions","MicrosoftWebStore","XboxStore","OfficeStore","AppInstall","Follow","Unfollow","MoreFrom","Topic","Provider","Spotlight","ShareClose","Share","Like","Dislike","Unlike","Undislike","Mute","Unmute","MuteCancel","Manage","NewStories","AutoSuggest","BingCard","Tile","TrendingNews","AllCoverage","Report","AdChoice","Hide","Unhide","App","Feed","AppStorePromo","Settings","StructuredDataCard","Webview","Activity","Win32","OfficeDocument","LocalFile","CardAction","TelemetryBehaviorType","Navigate","ContextMenu","Pin","Unpin","Rearrange","Remove","Add","Open","View","More","Close","Cancel","Launch","Install","Show","Save","Customize","TelemetryPageName","StartPage","DefaultPage","EduPage","ChildModePage","Office","Discover","MyInterests","CombinedInterests","ArticlePageNames","ArticleVNext","ArticleListicle","ArticleCollection","ArticleFullScreen","FlexibleArticle","FlexibleArticleMobile","ArticleGalleryFullScreen","GalleryPageNames","GalleryVNext","GalleryFullScreen","GalleryClassic","GalleryClassicFullScreen","GallerySearch","GallerySearchFullScreen","FlexibleGallery","FlexibleGalleryMobile","GalleryImmersive","GalleryImmersiveFullScreen","GallerySponsored","GallerySponsoredFullScreen","GalleryInline","VideoPageNames","ChannelPlayerPage","PartnerPlayerPage","VerticalHomePageNames","HomePageToday","StructuredDataPageNames","Gamecenter","Schedule","Scores","Stocksummary","Stocksummaryoneriver","Weatherxplatmaps","Standings","Markets","Watchlistpage","Data_modelpage","Immersivechartspage","Currencies","Indexdetailspage","Data_makepage","Weatherfullscreenmaps","Weatherthresholdmaps","Stockanalysisdetails","Data_yearoverview","Data_segmenthub","Weathermaps","Playerstats","Funddetailspage","Exercisedetails","Teams","Etfdetailspage","Binganswermaps","Workoutdetails","Competitionstats","Polls","Data_photos","Videocategorylistpage","Stockfinancialsdetails","Commoditydetailspage","Data_yearoverview_trim","Worldwidepage","Data_photos_trim","Stockcompanydetails","Retirementplanner","Livecoverage","Teamroster","Stockhistorydetails","Filterresultspage","Data_carcompare","Stockownershipdetails","Driverstandings","Timevalueofmoney","Savingscalculator","Iccmatches","Other_flightsearchresult","Stockrelateddetails","Data_specs_trim","Stockoptionsdetails","HomepageAlerts","HomepageRecordsandAverages","HomepageWeatherTraffic","Data_specs","Data_pricing","Mortgagecalculator","Data_performance_trim","Theatershowtimes","Data_pricing_trim","Data_photosInterior","Indexdetailsanalysispage","Data_photosInterior_trim","Data_photosColors","Data_carReviews_trim","Data_carReviews","Racecalendar","Teamstandings","Data_photosColors_trim","Stockdetails","Data_interiorFeatures_trim","Data_exteriorFeatures_trim","Calendar","TeamStats","Movieshowtimes","Drafts","Data_technologyFeatures_trim","Data_workoutdetails_collection","Data_photosExterior","Data_photosExterior_trim","Data_photos360Interior","Immersivechartsmarketspage","Returnoninvestment","Indexdetailsrelatedpage","Gonepage","Data_compare","Data_compare_trim","Data_options_trim","Entitiespage","Workoutdetailsprint","Data_photos360Exterior","HomepageDatacarfinder","Data_photos360Interior_trim","Data_skeleton","Mortgagerates","Brackets","Data_photos360Exterior_trim","Data_photocompare","HomepageWeather10day","Data_performance","HomepageWeatherextendedforecast","Savings","Data_exteriorFeatures","Data_interiorFeatures","Data_options","Travelgonepage","Recipe","Getportfoliodatapage","Brokercenterpage","Data_technologyFeatures","Tvlistings","Ownerstandings","Entitydetailspage","Creditcards","Cmssitemap","Externalnativeadpage","Autoloans","Externalcontent","Htmlsitemap","CustomColumnPageNames","TrendingTopics","GlobalSettingsPage","MyTopics","WeatherPlaces","MyFavorites","TopicResult","Collections","Rouxbe","ShoppingList","MyHealthReportsPage","Error404page","AppsPromotion","Error500page","DietTrackerPreSigninPage","ExerciseTrackerPreSigninPage","WebSlicePage","Error200Page","AboutUsPage","UnSupport","Disclaimer","TermsOfService","SevereWeather","SubjectSectionPageNames","TeamhomePage","PlayerPage","MarketMoversPage","CommoditiesPage","ChefPage","NutritionIndexPage","FinanceTechnologyPage","MedicalindexPage","SiteSearchPageNames","SearchResultsPage","VideoSearchResultsPage","PartnerVideolistPage","HomepageBingserpIframepage","SitesearchSitesearch","SearchResults","SerpPage","FindaMoviePage","SectionFrontPageNames","Competitionhub","Local","Stockscreener","Toolslandingpage","Showtimes","FinanceRealEstatepage","CookingSchool","Allcompetitions","Newspage","CocktailHub","Travelflightsearchhubpage","Hotelshubpage","WineHub","ChefHub","Travelflightstatushubpage","HomepageCompetitionhub","SecfrontHotel","SecfrontTNews","TelemetryProduct","Spartan","Prime","PrimeMobile","IEext","SpartanMobile","TabbedShell","ChromeExt","Downlevel","Xbox","ContentPlacedBySource","Editor","Bing","AutoCuration","User","AppNexus","OtherSponconProvider","TelemetryPageConfiguration","NoContent","OneBox","TopSites","Suggested","ContentFeed","WinFre","StripeLayout","TelemetryPageMode","Default","Trial","Subscription","Apps","News","Timeline","StartMenu","MMX","Shell","Edge","Cortana","Aad","Msa","MsaKids","telemetryType","prop","keys","getTelemetryBehavior","TelemetryActionType","Click","Hover","Submit","RightClick","pageType","telemetryPageNameObject","HeadData","clientData","enableCMSPPEConfigs","initializeHeadData","locale","marketDir","currentFlights","userIsSignedIn","isPreload","isAppcache","isEnterprise","isOfficeDefaultPivot","isServiceWorkerCache","lastKnownAppVersion","ssoComplete","_instance","headData","initializeFromData","locationSearch","htmlElement","headElement","initializeFromDom","initializeFromStorage","serviceWorker","controller","updateStorageActivityId","language","toLocaleLowerCase","setQueryItemProvidedValues","headDataJs","headJs","anonckname","signedin","getQueryParameterByName","setIsEnterprise","setIsOfficeDefaultPivot","storedActivities","getItem","storedActivityIds","ClientSettings","pagetype","setFlights","clientInfo","dataClientSettings","pageTypeFromSettings","storedVersions","getObject","bundleInfo","currentDomVersion","v","setObject","log","logPrefix","responseFromStorage","parsedResponseFromStorage","currentPageStoredHeadData","storedClientSettings","storedFlights","domQueryParams","queryparams","currentPageVersion","assign","aid","existingLastUsedActivityIds","currentPageLastUsedActivityId","previouslyUsed","activityIdToStore","ts","getTime","setItem","flightString","exec","IsEnterprise","includes","audienceMode","Enterprise","queryItems","getParamsWithItems","cmsItem","find","item","setCurrentFlightsTestOverride","flights","IsOfficeDefaultPivot","getHeadData","getInstance","resetInstance","locationHref","defaultExpirationTimeMs","defaultForceExpirationTimeMs","expirationPrefix","forceTimestampPrefix","jssMapSuffix","keysPrefix","renderCacheKeyOfNormalizedKeys","storagePrefix","riverRcClassName","getActionPayload","connector","experienceInstanceId","stateKey","dispatchAction","payload","store","dispatch","PageBase","observers","cancellationToken","isCancelled","isCancellationRequested","perfTimeline","tryGetPerfTimeline","actionEndMeasure","startMeasure","endMeasure","getDispatchResult","forEach","observer","renderActionPayload","ConnectorConstants","renderAction","super","connectorInstance","rootReducer","severity","Alert","pb","build","BUILD_NUMBER","updateAppErrorsPropertyBag","newPbInfo","getAppErrorsPropertyBag","createError","baseError","customMessage","NoAlert","ServiceUiError","OneServiceCardProviderAppErrors","EmptyMyFeed","OneServiceResponseWasNullOrErroneous","ErrorFetchingOneServiceResponse","HighImpact","InvalidJsonInOneServiceResponse","InvalidFeedListInOneServiceResponse","RiverConfigurationIssue","QueryInterestContentFetchError","StaticContentLoaded","ContentPreviewAppErrors","ErrorWhileFetchingContentPreviewContent","InvalidResponseFromContentPreviewFetch","InvalidResponseFromContentPreviewResponseJson","ErrorWhileInitializingAsyncContentPreviewContent","InvalidOrMissingContentId","MissingDataForExternalContent","MissingPartnerLink","RiverSourceFile","RiverAppErrors","UnknownMetadataReceivedFromRiverCardProvider","RiverContentProviderFetchException","SkipPositionedCardsFallbackStrategyFailed","InvalidConfig","MissingExperienceTypeMap","ChildLoadError","InitialDataLoadError","DuplicateInstanceIdWarning","FullHeightFallbackStrategyFailed","UserInitiatedPageRefreshErrors","SportsCardError","SportsLeaguePdpFetchError","SportsLeaguePdpInvalidResponse","SportsPlayersPdpFetchError","SportsPlayersPdpInvalidResponse","SportsTeamsPdpFetchError","SportsTeamsPdpInvalidResponse","SportsCardConfigFetchError","SportsCardGetFavoriteTeamDataError","SportsCardGetPlayerBioError","SportsCardGetLeaguesGamesArrayError","SportsCardGetPdpDataFailure","SportsCardGetLeagueSeasonYearDataFailure","SportsCardGetLocalizedTeamNameDataFailure","SportsCardGetTeamDataFailure","SportsCardGetLeagueDataFailure","MoneyCardError","MoneyQuoteSummaryGetError","MoneyQuoteSummariesGetError","MoneyPdpDataGetErrorFromService","MoneyPdpInvalidResponseFromService","MoneyQuoteSummaryGetErrorFromService","MoneyQuoteSummaryInvalidResponseFromService","TrendingNewsErrors","DataFetchError","BackupDataFetchError","GridSectionAppErrors","GridSectionCardGenerationError","PageClickTrackerErrors","InvalidResponse","FetchFailure","CoachmarkAppErrors","GeneralError","NotPlaceable","NotFoundComponent","CoachmarkDataConnectorUndefined","InvalidCTAType","CTATypeNotDefined","ConfigDataUndefined","FailedToFetchConfigData","ExceptionFetchingConfigData","EventNotDefined","CoachmarkStateNotDefined","CoachmarkDataAppErrors","InvalidCoachmarkMessage","IrisDataConnectorUndefined","ErrorFoundForSurface","TelemetryInfoUndefined","EventTypeUndefined","IrisActionUndefined","SpotlightPreviewAppErrors","ErrorWhileFetchingSpotlightPreviewCardInfo","NoServiceContextMetadata","SpotlightErrors","UnknownError","ContentFetchError","PartnerFetchFail","CardActionErrors","CardActionBaseExperienceError","CardActionPostActionError","CardActionDeleteActionError","CardActionGetActionError","CookieRelatedErrors","SharedStateConnectorNull","OverlayErrors","LoadExperienceError","ViewsCommonAppErrors","InvalidIntraArticleDataError","InvalidDocumentContentError","ViewsPaddleDataLoadError","ViewsErrorPage","ProviderMapperError","ContentActionsToolbarAppErrors","ContentActionsSharingToolbarLoadError","ContentActionsArticleDatafetchError","ContentActionsBaseExperienceError","ContentActionsGetDocumentDataError","ContentActionsGetContentStatusActionError","ContentActionsDeleteActionError","ContentActionsPostActionError","ContentActionsExperienceLoadError","ContentActionsFlipToolbarError","ContentActionsContentStatusFetchError","ContentActionsContentPreviewFetchError","ContentSharingToolbarAppErrors","ContentSharingToolbarInitializationError","ContentProviderAppErrors","InvalidSourceIdError","ProviderDetailsFetchError","ProviderFeedFetchError","InvalidLayoutTemplate","ViewsGalleryAppErrors","InvalidGalleryIdError","GalleryDataLoadError","GalleryImagesLoadError","VideoListAppErrors","VideoListDataLoadError","ViewsArticleAppErrors","InvalidArticleIdError","ArticleDataLoadError","IntraArticleComponentLoadError","InlineGalleryInvokeError","InterestsSearchAppErrors","ErrorResponseFromOneService","ErrorResponseFromOneServiceIsInvalid","InvalidUrlFoundForElement","SelectedItemNotFoundInSuggestions","SelectedItemIsInvalid","InterestsAppErrors","InterestsRetrieveTopicsError","InterestsRetrieveFollowedTopicsError","InterestsRetrieveMutedPublishersError","InterestsUnMutePublisherError","InterestsFollowTopicError","InterestsUnfollowTopicError","InterestsTopicStateUndefined","InterestsShouldHaveRendered","InterestsRetrieveTopicError","InterestsRetrieveSavedStoriesError","InterestsSavedStoriesInvalidConfigError","InterestsSavedStoriesChildLoadError","InterestsSavedStoriesInvalidJsonError","InterestsSavedStoriesInvalidListError","InterestsRetrieveRecommendedTopicsError","UndefinedTopicDataConnector","InterestsRetrieveReadStoriesError","InterestsReadStoriesInvalidConfigError","InterestsReadStoriesChildLoadError","InterestsReadStoriesInvalidJsonError","InterestsReadStoriesInvalidListError","FailedRestoringDefaultTopicsError","TopicsFailedIndexedDBConnection","TopicsFailedGettingIndexedDB","TopicsFailedUpdatingIndexedDB","ComponentConnectorAppErrors","DuplicateChildInstanceFound","BundleLoadError","ChildConfigInfoListNull","ListStartPositionInvalid","ChildDelayLoadError","ExperienceDependencyTimeout","ExperienceLoaderAppErrors","InsufficientLoadArgs","SearchError","MissingFormCode","RecommendedSearchErrors","ResponseParsingFailed","InvalidJsonResponse","ServiceCallFailed","RenderFailed","Timeout","PollsCardAppErrors","PollsListFetchError","PollDataFetchError","PollsCardInvalidPoll","PollsCardInvalidQuizPoll","PollsCardVoteError","PollsCardMapStateToPropsError","PollsUnknownError","MonetizationAppErrors","PlacementManagerLoadError","ArrangementPositionLoadError","GetCMSContentError","GetSAMRTBResponseError","MediaNetEOABError","InvalidPromoModuleConfig","CookieSyncDownloadExternalScriptError","CookieSyncMissingExternalScriptUrl","CookieSyncTimeout","CookieSyncPartnerScriptError","CookieSyncPixelPartnerDownloadError","CMSOrBackfillNativeAdLoadError","MissingRequiredPropertyPlacementManagerConfig","NativeAdTargetScopeError","RiverVideoAdPartnerError","JsTrackerPartnerScriptLoadError","ViglinkError","MissingTopicId","TopicIdNotFound","GetSAMRTBResponseErrorNoAlert","DisplayAdsOathLoadError","DisplayAdsApnLoadError","DisplayAdsApnEmptyProvider","DisplayAdsAdsDetectionNotInit","DisplayAdsMoatLoadError","DisplayAdsNoAdObjects","DisplayAdsProviderIdEncode","TaboolaRiverAppErrors","TaboolaRiverFetchError","CoreLibAppErrors","DeprecatedCompositionLayoutUsed","InvalidColumnInGridConfig","ErrorLoadingBundle","GenericJSException","LocalStorageDoesntExist","SessionStorageDoesntExist","ResolverAppErrors","IndexedDbWriteFailed","IndexedDbReadFailed","CrsFetchFailed","ReceivedConfigFromCdnAsCrsFetchFailed","GetConfigException","IndexedDbBulkReadFailed","IndexedDbFailedToRemoveCachedConfig","IndexedDbFailedToClearAllCachedConfigs","RenderCachePurgedDueToChangesInConfig","FailedToPurgeRenderCache","RefreshConfigCacheFailed","IndexedDbInitFailed","DifferentCbid","PrgFlightLsWriteError","PrgFlightLsReadError","ResolverErrorConfigsDownloadedByCdn","BingCardsAppErrors","BingCardGetHotelAnswersError","BingCardGetHotelErrorFromService","BingCardGetAnswersError","BingCardInvalidEntityType","BingCardErrorOut","BingAnswersAppErrors","FailedToLoadData","NoCardsContentType","NoCardsRelated","BingShoppingLifestyleCardError","LifestyleShopCardServiceFetchError","LifestyleShopCardServiceFetchInvalidResponse","LifestyleShopCardServiceEmptyResponse","LifestyleShopCardServiceInvalidResponse","LifestyleShopCardCdnServiceFetchError","LifestyleShopCardCdnServiceFetchInvalidResponse","LifestyleShopCardCdnServiceInvalidResponse","LifestyleShopAutosuggestServiceFetchError","LifestyleShopAutosuggestServiceFetchInvalidResponse","LifestyleShopAutosuggestServiceEmptyResponse","LifestyleShopAutosuggestServiceInvalidResponse","LifestyleShopAutosuggestInvalidSuggestionUrl","BingMiniShoppingServiceClientSourceFile","BingMiniShoppingError","BingMiniShoppingServiceFetchError","BingMiniShoppingServiceEmptyResponse","BingMiniShoppingServiceInvalidResponse","BingMiniShoppingServiceInsufficientDealsItems","BingMiniShoppingServiceInsufficientActiveDealsItems","BingMiniShoppingServiceInsufficientTrendingItems","BingMiniShoppingServiceInsufficientTrendingCategories","ShoppingCarouselEntitiesDataServiceFetchError","ShoppingCarouselEntitiesDataServiceEmptyResponse","ShoppingCarouselEntitiesDataServiceInvalidResponse","ShoppingCarouselEntitiesDataServiceInsufficientItems","OneServiceContentDataConnector","FailedToUpdateBypassValueConnectorNotInitialized","FailedToGetBypassValueConnectorNotInitialized","NotificationBellErrors","JsonParseError","NewsItemDataFetchError","MalformedNewsItemResponseError","ElectionResultMapConnectorErrors","ElectionResultMapInspectorErrors","EmptyResultSummaryError","ElectionResultMapErrors","FetchAndUpdateElectionDataError","ElectionDelegateCounterErrors","WebWorkerErrors","FileNotFound","RuntimeError","MessageTimeout","HandledError","AppError_InvalidQParams_35001","AppError_ArcResponseNotOk_35003","AppError_ArcResponseUnparsable_35004","AppError_MissingAppEnv_35005","AppError_UnknownIrisErrorFound_35006","AppError_TimeoutIrisErrorFound_35007","AppError_TemplateIrisErrorFound_35008","AppError_ClientErrorIrisErrorFound_35009","AppError_DSourceIrisErrorFound_35010","AppError_ActionResponseFailure_35013","AppError_UncaughtErrorDetected_35014","AppError_UnconvertableCreative_35015","AppError_InvalidResponseFormat_35016","AppError_TimeoutErrorDiscovered_35017","AppError_UnparsableSingleResponseJSON_35018","IrisDataConnectorErrors","SubscriberNotFound","CreativeCountNegativeOrZero","ErrorFetchingSurfaceInfo","SubscriberNotFoundInIrisPlacementDictionary","FailedToReadNurturingAcceptedFlag","EdgeChromiumAPIsNotAvailable","AcquireAccessTokenFailed","RenderCacheErrors","JssStyleMismatchWarning","JssStyleCriticalMismatchError","PreloadReportingMessages","TtvrMissing","TfprMissing","TtvrSearchBoxMissing","TtfSearchBoxMissing","PushNotificationsLibErrors","FetchKeyError","SubscribeUnsubscribeError","ContentTruncationErrors","OverTruncationError","EmptyFeedWithFeedId","EmptySearchedFeedWithFeedId","EmptySearchedFeedWithFeedQuery","EmptyKidsModeFeed","FallingBackToSkipStrategy","FallingBackToFullHeightStrategy","UnknownBulkLoadGraphActionType","UrlUtility","primeForbiddenCharacters","getParamsFromUrl","decodeComponents","getParams","decodeURIComponentWithPlusSign","decodeURIComponent","queryString","startsWith","substring","queryArray","ndx","parts","queryKey","queryValue","newParam","existingParam","entry","encodeURIComponentForPrime","uriComponent","encodeURIComponent","findIndex","paramsObj","paramArray","keyValuePair","getParamsObj","isValidUrl","validateScheme","keyValueArrayToQueryString","kv","isKeyValuePair","map","joinSubpathToURL","subPath","trimmedEndSlashFromHref","trimmedStartSlashFromSubpath","URL","updateSearchParam","searchParams","set","appendSearchParam","fallback","append","getAbsoluteUrl","partialUrl","logSamplingRate","GET","Ctag","Comscore","Exp","ResetIdx","doc","otherWhitespaceRegex","trimRegex","attr","nodeName","text","textContent","innerText","children","parentNode","className","customTarget","srcElement","AppType","connectorStateKey","dataConnectorMergeInitAction","defaultPubSub","PublishSubscribe","channels","getChannel","channel","pubMap","sub","listeners","unsub","pubChannel","subChannel","unsubChannel","RequestData","canUseCssGrid","global","resetRequestData","getRequestData","tryParseJson","jsonString","tryParseInt","defaultValue","parseInt","isNaN","WebStorage","storage","supported","parsedObj","removeItem","logError","matchingKeys","storageKey","localStorage","ex","trackAppErrorEvent","storageTest","sessionStorage","obj","isRecursive","arr","Array","isArray","toString","AppEnvironment","_serviceUrl","_configServiceUrlBase","initializeAppEnvironment","environmentConfigUrl","process","env","WEBPACK_DEV_SERVER","URLSearchParams","searchParam","contentServiceUrlBase","currentRequestTargetScope","currentMarket","environment","assetsHost","hostPage","appType","authCookieName","useOneServiceAuthEndpoints","accountInfoPromise","resolvedAccountInfo","buildVersion","clarityEnabled","rootTelemetryId","getUserMuid","isDebug","showMnsCreatorDashboard","currentContentLinkHost","serviceUrlBase","feedServiceUrlBase","isFrePage","disableCachingConfigs","enableConfigService","EnableCMSPPEConfigs","isMultiConfigRetrievalEnabled","disableContentPreviewCache","sendFeedCallActivityIdInHeader","queryParamOverride","disableContentCacheIDBRead","disableContentListCache","disableContentListCacheIDBRead","configServiceBaseUrl","featureFlags","configRootUrl","cacheBustingIdentifier","countryCode","latitude","longitude","configServiceUrlBase","appEnvironment","environmentFromHeadData","tryReformatGuid","Locale","apps_locale","geo_country","geo_lat","geo_long","pcsInfo","setAccountInfoPromise","apptype","getAuthCookieName","disableActivityIdInHeader","Hub","cbid","pcsVersion","propertyBagPcsVersion","rootElement","locationOrigin","envQSOverwrite","prod","endsWith","defaultFeedBaseDomain","EdgeChromium","MicrosoftNews","feedBaseDomain","getHostPageFromUrl","Number","trackPageProd","trackPageTypeVal","createContentLinkHost","setTargetScope","useMultiConfigsRetrieval","getConfigServiceBaseUrl","1","true","muid","muidCookie","relativePath","int","urlQuery","param","FirstParty","Views","Weather","Anon","AppAnon","AccountInfoPromise","chrome","authPrivate","getPrimaryAccountInfo","startTime","round","now","endTime","ZHCN","guid","matches","match","Kids","Adult","browser","deviceFormFactor","domain","os","platform","Web","stringHasData","CurrentFlights","pageExperiments","addWpoFlights","wpoData","flightsCached","concat","getAppEnvironment","Logger","setupBrowserEnvironment","isDebugEnabled","webpackRequire","setupNodeEnvironment","windowObj","logger","Info","Browser","setupLogLevel","NodeJs","getMessage","infoCallback","setLevel","setupAppenders","removeAllAppenders","addAppender","getLevel","nameRegEx","queryNameValueMatches","RegExp","defaultInstance","updatePageInstance","form","refigInputs","setRequestId","newRequestId","eventName","Utility","isNotNullOrUndefined","isDefined","potentialKeyValuePair","isKey","isValue","isNonNullObject","isNotNull","isNullOrWhiteSpace","trim","toNumber","arrayHasData","constructor","objectToString","firstRun","attribute","queuedCalls","pageRevealed","trackValuesUpdated","checkAndFireQueuedCalls","visibilityState","onVisibilityChange","removeEventListener","_connectorMap","_globalConnectors","_allConnectors","_getDataConnectorPendingPromises","Map","reduce","dataConnector","pendingPromise","resolveCallback","rejectCallback","state","actionPayload","newState","stateChanged","typeIsString","statePropertyKey","connectorState","experienceFullNamespace","dataConnectorName","initializeExperience","isGlobal","merge","connectorReducerResult","computeNextStateForConnector","reportStateChange","fullNamespace","has","delete","connectorPreviousState","nextStateForConnector","subReduce","reducer","connectorStateChanged","previousState","reducedState","designSystemMap","WeakMap","designSystemIndexMap","createGenerateClassName","designSystem","dsName","dsIndex","rulesMap","rule","sheet","initialState","enhancer","middlewares","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","trace","traceLimit","_rootReducer","needsHydrate","hasPreHydrateState","_store","connectors","onApplicationStart","connectedTopLevelElement","hostElement","updateJss","updateJssManagerInstance","pageTimings","hydrate","SSR","startMark","render","jssInstance","plugins","jss","_pageTimings","_secondaryPageTimings","getPageTimings","incrementCounter","counterName","existingCount","Environment","getEnvironmentFromString","int1","intpr","intpef","Size1ColumnWidth","Size2ColumnWidth","Size3ColumnWidth","Size4ColumnWidth","GutterSize","ExperienceLoadingState","aadTokenQsKey","aadTokenQsVal","TokenFetchSecondaryErrors","useEnterpriseCompliance","sharedStateConnector","SharedState","getCurrentState","useEnterpriseDomain","getAadData","scopeOrResource","allowInteraction","resolveAccountInfo","tokenAcquireParameters","account_id","client_id","scope_or_resource","perfMarker","tokenAccessApi","acquireAccessTokenWithUserInteraction","acquireAccessTokenSilently","interactionString","acquireResult","is_success","status","success","error_info","secondary_error","kTokenFetchUserInteractionRequired","kInteractionRequired","mfaRequired","otherError","token","access_token","errorInfo","isSuccess","isValid","is_token_valid","ColumnArrangement","minViewportWidthOverrides","ColumnArrangementDefinition","arrangement","contentSizePx","isFirstBreakpoint","widthOverride","contentBufferPx","columnArrangements","c1","c2","c3","c4","columnArrangementMap","columnArrangementDefinition","getMediaQuery","minArragement","maxArrangement","queries","minWidthPx","minViewportWidthPx","maxArrangementDefinition","maxArrangementIndex","getMediaQueryFor","columnArrangement","getMediaQuerySelector","mediaQuery","getMediaQuerySelectorFor","getCookie","cookie","getMuidCookie","setRequireFunctionalCookie","expiryDays","path","secure","expiryDate","builder","date","setTime","toUTCString","AudienceModeType","AccessTokenStatus","oneServiceScope","OneServiceUtility","getOneServiceParamsWithoutAuth","ocidSpecifier","addPageInfoToOcid","ActivityId","getOneServiceOCID","TrackInfo","CurrentMarket","runningExperiments","getOneServiceHeaders","headers","aadData","authenticationTicketType","signedInCookieNameHeader","userLocationHeader","serviceRequestOnComplete","serviceRequest","callbackMethod","getOneServiceParamsWithAuth","toUpperCase","getOneServiceFeedCallHeaders","SendFeedCallActivityIdInHeader","getLocationParams","customizedLatitude","customizedLongitude","Latitude","Longitude","getBaseRequestData","method","getCommonParams","UserIsSignedIn","UserId","dataConnectorToExperienceKeyMap","createStatePropertyKey","dataConnectorInjector","registerInjection","experienceSet","Set","add","appState","experienceStatePropertyKey","initialDataConnectorState","dataConnectorNamespace","newDataConnectorState","experienceKeys","experienceKey","experiencePreviousState","renderCacheObject","batchCSS","batchCss","styles","dataset","innerHTML","scrapeDom","includeNewsFeed","root","rivers","getElementsByClassName","river","outerHTML","getStateFromRenderCache","renderCache","renderCacheKeys","renderCacheStoredKeys","keyn","expn","frcn","jssn","cacheExpirationTimestamp","parsedCacheExpirationTimestamp","renderCacheStorage","batch_css","getRenderCache","reduxStoreStringifyReviver","dataType","WpoConstant","isWpoEnabled","currentPageExperiments","getWpoStorageCacheKey","targetScope","getWpoFlights","treatments","requireAsync","moduleName","require","PerfMarker","endMarkSuffix","initialize","instance","singleMark","measureStartEnd","mark","getPromise","endMark","experienceName","perfMarkers","perfEntries","getEntriesByType","markerName","perfMarkerDetail","PerfMarkerDetail","processPerfEntry","measure","duration","perfEntry","firstStartTime","KeyCounter","timelineCount","timelineName","count","getCount","timelineKeyCount","instanceId","addPerfMarks","addPageTimings","markerCount","measures","qualifyKey","oldMeasureName","qualifyMeasureName","measureName","newMeasureName","from","to","coreMarkerName","dynamicMeasureName","timelineNameAtStart","measureNameCore","formatMeasureName","startMarkerName","updatedDynamicMeasureName","endMarkerName","funcName","func","bindingContext","_this","promiseName","coreMeasureName","dynamicMeasureSuffix","startMarker","endMarker","chromeMetadata","metadataType","pid","threadId","metadata","ph","tid","chromeInstantMarker","category","timeStampMs","chromeMarker","auxData","marker","cat","convertToMicroseconds","calculateTimelines","timelineGroups","groupBy","checkTime","timelineList","maxValue","groupName","timeline","sort","info1","info2","timeline1","timeline2","mergePageTimings","asyncExperiences","matchRegex","startSuffixRegex","endSuffixLookup","Start","start","processedKeysToRemove","startSuffixMatch","endKey","endValue","thisTimelineName","prefixSuffixMatch","fromValue","keyToRemove","tryCreateAsyncPID","nextPID","fromMs","toMs","uploadTrace","maxTime","configOverrides","config","perfTimelineInstances","enablePerfTimeline","experiencesForPerf","experiencesExcludedForPerf","trackAllExp","shouldTrackPerfTimeline","instanceKey","getInstanceKeyCore","addPerformanceMarks","getPerfTimeline","renamePerfTimeline","newExperienceName","oldInstanceKey","getInstanceKey","rename","newInstanceKey","getExperienceMeasures","pageMeasures","getPageMeasures","expPerfQsp","expPerfSkipQsp","parsedConfig","sampleRate","minimumTTVR","expName","tryParseAppTraceConfig","setAppPerfTraceConfigOverrides","_getAppPerfTrace","WW","Resolver","Ads","Telemetry","Images","JS","Configs","Services","nonZeroResources","regex","resourceGroup","remainingResources","entryIndex","pathname","mergeResourceTimings","destinationMeasures","sourceMeasures","mergeExperienceTimings","appTimings","_appTimings","chromeTrace","key1","key2","sort_index","timelineIndex","measureIndex","substr","lastPathIndex","lastIndexOf","truncateName","showInParentThread","chromeAsyncMeasure","durationMis","dur","chromeSyncMeasure","handler","unbind","sequenceTokens","sequenceValues","\"","urlPart","ch","navigation","getUrl","relativeUrl","navigate","getHostName","parseUrl","isLocal","supportMultiple","mergeQueryStringParams","newParams","urlParts","decodeURIComponentAndPlusSign","anchor","hostName","port","hash","locationHost","domainParts","reverse","hostDomain","domainMatchPattern","ocidMatchPattern","ccidMatchPattern","msnOcid","storeOcid","storeocid","addCcidToStoreUrl","tHref","emsAdId","ccidMatch","ccidOnUrl","hashIndex","hashValue","storeUrl","ccidData","webig","addOcidToHref","endOfScheme","locationOfStore","isStoreUrl","ocidMatch","ocidOnUrl","emsOnUrl","initStoreUrl","emsMatch","domainMatch","hrefHostName","linkUrl","modifyValuesForTrackPage","preventComscore","personalization","props","attachTaglineClickHandler","getActionResult","action","isSuccessful","domName","getParent","getChildren","recipients","refreshPageLoad","lastClickedTarget","regExpEventName","impressionCache","trackAll","implementationMethod","implementation","defOpts","defaultOpts","disableOnAutoRefresh","names","isInList","AR","isGeneratedEarly","depthFirstChildAttribute","attributeName","skipElement","altValue","localName","countAllTrackableLinks","getChildByTargetElement","depth","dataLength","subChild","trackAppErrorEventInternal","errorParams","report","errId","errMsg","errSource","msg","isError","setAppErrorTrackInfo","trackFormSubmitEvent","destination","headline","campaign","getSearchTerm","trackEvent","contentAction","jquery","customHandled","elemHref","dataHlValue","headlineElement","findCMValue","curId","previousCM","getContentElementIndex","clsGT1","$1","moduleInfo","nameLineage","ordinalLineage","lineageDelimiter","actionType","behaviorType","moduleInfoJson","moduleInfoHeader","elementTelemetryLineage","nameLineageArray","ordinalLineageArray","telemetryObject","parseDomAttributeJson","getLineage","time","duHostname","track","filterUrlParams","destinationUrl","contentModule","contentElement","campaignId","sourceIndex","nLineage","oLineage","trackPageInternal","overrideParams","paramPageType","telemetryPageType","ar","trackingHelper","preventBeacon","errorObject","onContextMenu","trackClickEvents","onClick","button","trackAdEvent","adParams","adWidth","w","adHeight","h","dst","den","pg","anAd","seqid","sdk","fen","trackVideoEvent","isInline","defaultParams","at","bt","bh","bw","cvs","canvas","serverImpressionGuid","department","subDepartment","subcvs","vertical","isVideo","cleanParam","removeNullOrEmptyParams","eventSource","trackFeedbackEvent","feedbackParams","submitValue","otfPackage","getFeedbackTrackingParams","createEvent","createEvt","sendPageViewCandidate","pvUrl","sendSinglePageViewBeacon","beaconId","clearImpressionCache","blackList","splitedUrl","outputUrl","paramsString","contains","trackPartialImpression","visibilityCheck","trackPartialImpressionInternal","trackPage","trackThirdPartyUpdate","register","trackingImplementation","samplingRate","getCurrentPageRequestId","mapTelemetryParams","common","commonMap","paramsMap","groupKey","trackInfoGroupKey","groupValue","clientParams","formElem","events","trackPageRefresh","dataAttr","array","elements","domElement","telemetryChildren","findTelemetryElements","impressionContent","mech","getClickEventFromUrl","targetUrl","evtName","curUrl","getEventFromUrl","targetElem","initEvent","createEventObject","useMap","activeElement","ServiceWaffleAutomaticClickTrackingDisabled","appLauncherElement","hasAttribute","currentTarget","isClickedTwice","preventDefault","returnValue","preventEventDefault","overrideClickTelemetry","scr","d_dgk","contentid","entityId","cu","isSignedIn","handledProps","ariaLabel","fill","glyphType","managedClasses","onError","wrapperClassName","svgClassName","renderSvgWithWrapper","svgComponent","setState","ReactComponent","prevProps","LazyLoadedSvgComponent","attrProps","generateClassNames","icon_inline","role","icon","unhandledProps","style","wrapperCss","renderSvgComponent","CDCSelfCheck","ClinicalTrialBot","CoronaVirusIcon","DoubleTap","EmptyMruDark","EmptyMruLight","EmptyPinnedDark","EmptyPinnedLight","EmptySharedDark","EmptySharedLight","RiverLayout","NotificationFivePlusSign","NotificationRefreshArrow","PollResults","WaterDrop","HostPage","pathnameSegments","topDomainName","originalUrl","categoryKey","verticalKey","topDomain","indexOffset","subcategoryKey","Market","guidGen","timestampSeed","seededRandom","random","floor","AuthCookieExistsCookieName","MilestoneDataActionsImpl","updateAboveTheFoldVisuallyReady","updateBelowTheFoldTransitionStart","updateExperienceLoadDeferralState","updateExperienceCurrentState","updateExperienceRenderDeferralState","updateInitTiming","updatePageComplete","updateRenderTiming","updateVisuallyReadyTiming","updateDomCompleteTiming","updateMilestonePlugins","MilestoneDataActions","userNavigatingAway","isUserNavigatingAway","MockLRUCache","cacheMap","maxAge","ConnectorNamespaces","IntraArticleComponentPosition","IntraArticleComponentType","getTrack","trackingResolved","trackingObject","trackExtCompleted","trackEventBuffer","trackImpressionBuffer","trackAppErrorEventBuffer","trackingPromiseCalled","sendTrackingCall","sendPartialPageRequest","sendTrackAppErrorEvent","appError","processPendingTrackingCall","eventObj","handleTelemetryCall","handlePartialPageImpressionCall","handleAppErrorEventCall","stringifyError","parentTelemetry","childTelemetry","parentIndex","telemetryName","initTelemetryProps","resultTelemetryProps","createProps","setChildProps","rootTelemetryIndex","rootIndex","getNewIndex","ordinalTracker","ordinal","childIndices","childOrdinalCounter","savedProps","componentProps","initializationProps","resetChildProps","f","headlineIndex","filteredResult","tags","userFacingText","telemetryIndex","oldProps","newProps","telemetry","0","resetCallbacks","registerResetCallback","ActionHandler","actionMap","actionMaps","actionPayloadType","String","SubnavTabId","MediatorEventNames","ContentActionsUpdated","FeedFollowed","ForcePageReload","FollowedTopicsUpdated","MediatedCoachMark","TabNavigation","TabNavigateTo","TopicAction","Msn360","CardActionInit","CardActionPost","InterestsRenderComplete","RenderXFeed","ShowPivotById","ResumeInfopaneAutoRotate","getMediator","ViewsStringResource","article","image","video","gallery","exitFullscreen","fullscreen","nextSlide","previousSlide","publishedSecondAgo","publishedSecondsAgo","publishedMinuteAgo","publishedMinutesAgo","publishedHourAgo","publishedHoursAgo","publishedDayAgo","publishedDaysAgo","gallerySlideError","sharingToolbarLoadFailure","invalidCMSIdErrorFormat","documentDataFetchErrorFormat","intraArticleComponentErrorFormat","gallerySlideCountFormat","gallerySlideCountFullScreenFormat","seeOnProviderSite","socialFeedNotSupported","articleReadMoreText","SignedInStatus","AccountType","AadAccountType","prodAssets","cnProdAssets","ENV","segments","initializeHybridPublicPath","TelemetryTypes","ContentTypes","isWebWorkerPresent","messages","logAppError","standbyMessages","getFromWebWorker","timeoutInMs","defaultResponse","fetched","endGetFromWebWorker","standbyMessageData","promiseTimeout","timeOutPromise","errorMessage","webWorkerPromise","response","webWorker","postMessage","race","sendToWebWorker","subscribeWebWorkerNotification","override","_isWebWorkerPresent","onmessage","pendingMessage","TelemetryBase","SubnavTabName","Interests","MyFeed","XFeed","loggingService","maxRetries","baseRetryDelayInMs","maxRetryDelayInMs","factor","minOffsetInMs","maxOffsetInMs","loggedExceptionManager","LoggedExceptionManager","logInvalidParams","defaultMaxRetries","defaultBaseRetryDelayInMs","maxAllowedRetryDelayInMs","defaultFactor","defaultMinOffsetInMs","defaultMaxOffsetInMs","minTimeout","maxTimeout","serviceCall","requestInfo","activity","tryRequest","maxAllowedRetries","fatal","currentRetry","timeoutServiceRequest","fractionDigit","offset","parseFloat","toFixed","half","plusOrMinus","delayWithOffset","min","pow","warnCallback","errorCallback","timeoutId","instrumentationService","exponentialBackoffRetry","sendRequest","activityName","getInstrumentationService","activityLoggingService","createActivity","getExponentialBackoffRetry","executeRequest","endActivity","activityService","ActivityLoggingService","BrowserConsoleAppender","LogLevel","InstrumentationService","getLoggingService","CommonActions","renderExperience","ActionMap","dataConnectorMergeInit","ExperienceState","ChildExperiencesDeferRenderType","ValidatorSectionName","apptypeValidator","expValidatorMap","getAllValidators","expConfig","size","childExpValidatorMap","expMap","originalConfig","tempConfig","validatorName","childExpValidator","validator","validationArgs","expConfigMap","cloneDeep","filterConfig","riverGridChildren","childElems","childExp","configInfo","childExperienceConfigInfo","experienceType","baseExperienceConfig","childrenConfigInfo","dataConnectors","dataConnectorForCurrentScreenType","getOrdinalObjectForCurrentBreakpoint","screenWidth","screenTypeObjList","ScreenWidth","Any","currentColumnArrangement","getMetadataByScreenWidth","OneColumn","TwoColumn","ThreeColumn","FourColumn","connectorProps","getCompositionIdOverride","composition","compositionOverrides","compositionOverrideResolver","ExperienceCompositionTypes","horizontalStack","layout","page","grid","column","childType","ChildrenTypes","peregrineExperience","child","rows","row","columns","itemType","customExperience","customConfig","experience","sectionName","removeFromRiverGridChildren","configIndexHref","parentStore","requestContext","experienceConnector","experienceComponent","$experienceType","ExperienceIds","earlyLoadBundlePromises","loadExperience","fullConfig","getConfig","getChildrenDataConnectorConfigInfos","properties","childConfig","earlyLoadBundles","getChildrenExperienceConfigInfos","isDataConnector","uniqueId","configResult","configPromise","instrumentPromise","loaderPromises","bundlePromise","bundleModule","initMeasureEnd","updateExperienceLoadedMilestone","ExperienceConnector","ExperienceReducer","app","experienceNamespace","experienceConfigInfo","experienceParentNamespace","experienceStore","configHref","loadConnector","connectComponent","milestoneDataConnector","getActionSender","send","loaded","ConfiglessConnectors","BingImageData","OneServiceContent","TelemetryData","TopicData","PageClickTrackerData","OfficeSharedData","pivotContentV2","DataConnector","childMap","telemetryProps","telemetryTags","$experienceGroup","$connectedComponent","$componentInstance","$renderIfOffline","$maxWaitToBatchRenderChildExperiences","$milestoneDataConnector","onExperienceMilestoneTimingUpdate","milestoneType","ExperienceMilestoneEventTypes","domComplete","updateTiming","initialized","rendered","visuallyReady","onAppError","selectComponentState","namespaceArray","configNamespace","processConfig","childComponentList","componentInstance","ownProps","stateProps","dispatchProps","mnsDashBoardProps","ShowMnsCreatorDashboard","componentToConnect","onLine","connectMeasureEnd","WrappedComponent","onComponentConnect","Component","lastRenderEndMeasure","mapStateToProps","instrumentFunc","mapDispatchToProps","mergeProps","connectedComponent","pure","experienceInfoList","mergeStartPosition","additionalChildExperiences","ordinalBlockForCurrentColumn","mergeEndPos","childArrangementMetadata","childExpArrangement","positionProps","experienceArrangement","startPosition","insertAt","experienceInfo","initialProps","$connectorProps","isEmpty","getChildTelemetryItem","onAppErrorCallback","loadDataConnectors","injectedDataConnector","injectedDataConnectors","onLoadChildExperiences","loadChildrenExperiences","childConnectorProps","childExpsToLoadImmediately","reRenderCallback","readyExperienceToRender","promiseDependency","startProcessingChildExperience","loadDataConnector","childConnector","getChildExperienceConnector","addConnectorToChildMap","Failed","childExperienceType","childExperienceInstanceId","loader","getConnectedExperience","getChildExperienceConnectorProps","getNewComponentInstance","removeCachedConfig","milestoneDependencyToLoadChildExp","shouldResolve","addTimeout","deferralType","CustomEventBasedDeferral","Unknown","resolveDependency","loadAndRenderExperience","childExpInfo","delayLoaded","milestoneDependencyToRenderChildExp","ReadyToRender","reRender","childExperiencesRenderType","batch","reRenderExperience","dependency","pending","timer","feedServiceUrl","getServiceUrl","initializationLogs","initializeServiceRequest","EnterpriseServiceUrlBase","ServiceUrlBase","getFeedServiceUrl","initializeFeedServiceRequest","FeedServiceUrlBase","getServiceUrlForSubpath","getFeedServiceUrlForSubpath","authEnabled","IndexedDb","idb","searchObj","IDBObjectStore","getAll","idbPromise","req","withIdbStore","storeCallback","isGetAllAllowed","returnArray","openCursor","onsuccess","cursor","continue","put","clear","idbVersion","idbStoreName","dbName","preInitializedIdbPromise","storeName","endOpen","openreq","open","onupgradeneeded","createObjectStore","operationName","db","endOperation","transaction","oncomplete","onabort","objectStore","FastBreakpointManager","callbackMap","refreshBreakpoints","defaultBreakpoint","breakpoints","indexToStandardConverter","currentBreakpoint","pop","breakpoint","update","managerCallback","subscribe","unsubscribe","_fastBreakpointManager","fastBreakpointManager","recreate","spec","qspPrefix","memo","objectFromSpecification","values","requestDataValue","clientValue","pv","cv","qsp","ver","qp","verParam","current","newValue","recurse","prefix","k","currentPrefix","getURLSearchParams","SSRContract","CSS","supports","pixelRatio","direction","requestData","loadQueryParams","trackingExperiences","shouldTrackExperience","shouldTrack","jssGeneratedClassesMap","jssCaptureCompleted","removeRenderCache","removeSubstringKeys","captureJssGeneratedClasses","renderCacheEnabled","serverCache","ServerCache","cache","reset","del","itemCount","_fullNamespace","selectState","_subspace","_perfTimeline","addSubReducerForConnector","_configHref","getState","globalConnectors","globalConnector","namespaceParts","connectorType","DeferralEventType","DynamicBundles","dynamicBundles","bundle","registerExperience","es6Import","CustomDeferralEventTypes","ExperienceDeferralEventTypes","experienceDeferralDependencyMap","isExperienceDependencyResolved","experienceDependency","deferralEventType","dependents","currentState","getMilestoneDataConnector","MilestoneData","getDefaultExperienceInstance","milestones","perExperienceMilestones","perInstanceMilestones","getExperienceLoadDelegate","deferralEventReady","loadAfter","aboveTheFoldVisuallyReady","isAboveTheFoldVisuallyReady","belowTheFoldTransitionStart","isBelowTheFoldTransitionStarted","getDeferralLoadEventReadyState","shouldLoad","getDeferralEventMetadata","waitForAboveTheFoldVisuallyReadyAsync","registerObserver","getExperienceRenderDelegate","renderAfter","getDeferralRenderEventReadyState","shouldRender","Boolean","deferralInfo","StandardEventBasedDeferral","createExperienceStateUpdate","experienceGroup","experienceInstance","createTimingUpdate","getPeregrineFlights","cleanedUpFlights","lowercaseItem","currentTargetScope","CurrentRequestTargetScope","configMap","promiseMap","stalenessCheckTimestamp","localOverrideMap","initializeIndexedDb","memoize","_initializeIndexedDb","populateConfigMapFromIndexedDbAsync","_populateConfigMapFromIndexedDbAsync","peregrineFlightsKey","initializeCaching","cdnConfigBaseUrl","ConfigRootUrl","EnvironmentConfigUrl","ConfigServiceBaseUrl","resolverErrors","configTimings","useWebWorkerToCache","indexedDb","useIndexedDb","enableIndexedDbInMainResolver","DisableCachingConfigs","isCachingAllowed","useServerCache","peregrineFlights","useConfigService","scopeWithPeregrineFlights","configServiceParameters","IsMultiConfigRetrievalEnabled","CacheBustingIdentifier","getConfigRetrievalMaxDepth","_cbid","containsDevOnlyQueryParameters","generateKey","configs","mergeWith","customizer","configIndex","configPaths","experienceRef","targetScopeMatched","overrideConfig","audienceModeMatched","browserTypeMatched","deviceTypeMatched","domainMatched","experimentMatched","marketMatched","osMatched","pageTypeMatched","platformMatched","browserType","version","isString","experimentId","lhs","rhs","localeCompare","sensitivity","targetLocale","currentLocale","stringsEqualCaseInsensitive","srcValue","objValue","overrideEnv","typeVersion","_name","cacheKey","getCacheKey","startGetConfig","configFromMemory","addConfigTiming","existingPromise","processed","configEndMeasure","configSource","serializedConfig","configFromServerCache","cacheFetchDuration","isServerCacheConfigStale","storageTimestamp","networkReadPromise","getConfigFromNetwork","networkConfig","readPromises","configFromMemoryAfterRace","mergedConfigsMap","configServiceRelativeUrl","removeCmsPathFromRelativeUrl","crsResponse","downloadFile","rootConfigIndexId","crsMergedConfig","configIndexKey","addConfigToConfigMap","crsConfig","cdnConfig","downloadMergeConfig","areConfigsEqual","experienceIndex","resolveConfigIndex","configObjects","downloadExperienceConfig","mergeConfig","baseConfigUrl","hrefs","promiseArray","fetch","ok","crsVersion","statusText","json","EnableConfigService","FeatureFlags","crsMaxDepth","segment","wwResponse","refreshConfigResponse","purgeRenderCacheUponConfigChanges","configsEqual","liveCbId","liveCbid","writeCbidInLocalStorage","pcsCbid","highestCbid","clearConfigCache","clearObjects","getAllConfigTimingsOverride","allConfigsCacheDuration","allConfigsNetworkDuration","configTiming","networkFetchDuration","IsDebug","configFetchTimings","clientSettingsCbid","cachedCbid","cacheSource","prgFlights","startBulkConfig","cachedConfigs","_idbConfigReadPromise","_idbConfigLookup","populateConfigMapFromCachedConfigs","_idbConfigOpenPromise","unusableCount","cachedConfig","isConfigStale","cbidKey","resolver","getConfigTimings","getResolverErrors","refreshConfigCache","overrideCurrentRequestTargetScope","overrideCurrentRequestEnvironment","clearInternalState","getConfigServiceParameters","setConfigTimingsObject","getHighestCbid","PerfTracker","InitialCommonExperienceProps","customField","visuallyReadyTracker","initializedTracker","domCompleteTracker","startInitializeMilestone","startVisuallyReadyMilestone","startDomCompleteMilestone","incrementExpCount","endDomCompleteMilestone","prevState","snapshot","endInitializeMilestone","shouldMarkTelemetryTtvr","aliasName","endVisuallyReadyMilestone","setStart","updateStartTiming","updateEndTiming","tracker","getStart","getEnd","setEnd","markerPrefix","renderCounterPrefix","ClarityEnabled","functionalonly_cookie_experience","PerfMarkersGroup","remainingMarkers","remainingSecondaryMarkers","remainingTtvrMarkers","ttvrMarkers","resolveTtvrCallback","perfMarkerResolveCallback","secondaryPerfMarkerResolveCallback","resolveTtvsCallback","primaryMarkers","secondaryMarkers","markTtf","markTimeNA","setMark","markTtvr","markTtvrRaf","requestAnimationFrame","setSecondaryPerfMarkerTime","existingMarker","getEntriesByName","getSecondaryMarkers","markerFullName","getTtvrMarkers","getMarkers","getMarkersWithType","SocialMediaProviderConfig","SocialMedia","SocialMediaTarget","apiUrl","attribution","FacebookEmbed","InstagramEmbed","TwitterEmbed","SocialMediaDefaultConfig","Email","backgroundColor","color","Mail","label","_self","Facebook","_blank","Line","LinkedIn","Skype","Twitter","WhatsApp","VK","Vkcom","cachedDevicePixelRatio","ImageFormat","ImageResizeMode","HighEndImageQuality","generateImageUrlFromId","generateImageUrlFromBaseUrl","focalRegion","format","JPG","auxQsp","focusX","midPoint","x1","x2","focusY","y1","y2","enableDpiScaling","ceil","quality","defaultImageWidth","htmlTagsRegEx","ViewsUtility","imgObj","alt","caption","imageCaption","altPrefix","altText","stripHtmlTags","linksCount","markup","partnerLinksCount","additionalProps","safeAny","list","dateTime","currentTime","publishTime","timeSpanInSeconds","trunc","timeSpanInMinutes","timeSpanInHours","timeSpanInDays","toLocaleDateString","cmsId","parser","nsParts","sections","charReplaceTable","charRegExp","pair","removeRegExp","dashRegExp","urlTitle","cc","urlData","getFriendlyTitleForUrl","q","input","replaceWith","applyTextTruncationStyles","numLines","display","inViewportPercentage","inViewportTopOffset","inViewportBottomOffset","allowZeroHeight","currentReference","bounds","ImageServiceConfig","PrimeIntegrationConstants","Mediator","getActiveTabValue","activeTabValue","activeTab","tabNameToTabId","registerForTabChangeEvent","shouldCallCallbackImmediately","sendActiveTabToCallback","None","tab","_perfMarker","tabIdToTabName","registerContentActionsUpdatedEvent","registerCardActionEnableEvent","initData","registerCardActionPostEvent","postData","registerForFollowButtonClickEvent","followButtonData","topicId","isFollowed","registerForInterestsRenderCompleteEvent","publishEventForPrime","renderUserActionErrorCoachmark","refElement","hideCoachMark","coachMarkId","UrlSearchParamsHelper","parseQueryString","charAt","keyValuePairs","autoFlipX","autoFocus","enable","onDismiss","staticPosition","zIndex","keyDownHandler","keyCode","focus","tabEventHandler","popOverRef","tabbable","determinePosition","scrollY","scrollX","createRef","zIndexStyle","onKeyDown","tabIndex","ref","popOver","getPlacementStyle","popOverPlaceholder","createPortal","pageDirection","position","windowWidth","documentHeight","displayOnLeft","displayOnRight","displayOnPrioritySide","displayOnNonPrioritySide","rtl","canFitPrioritySide","canFitNonPrioritySide","PopOverStyles","Flyout","outline","opacity","transform","TabsHelper","tabId","tabName","ZIndex","menuItems","enabled","buttonLabel","positionOffset","telemetryTag","handleUnfocus","node","containerRef","buttonContainerContainsNode","menuRef","menuPopoverContainsNode","closeMenu","buttonRef","menuOpened","menuContainer","settingButton","settingButtonIcon","onSettingClick","renderPopOver","dropDownLocation","isNil","contextMenu","enableAutoFocus","renderContextMenu","contextMenuItem","contextMenuItem_contentRegion","contextMenuItem_image","itemProps","onInvoke","onMenuItemClick","onSelect","onSelectCallback","posOffset","offsetX","x","offsetY","border","background","padding","outlineWidth","margin","ButtonStyle","button__justified","socialMedia","contentUrl","contentTitle","emailBody","hideLabel","socialMediaItemConfigOverride","onClickNewWindow","shareUrl","newWindowOptions","newWindowTelemetryCall","openNewWindow","itemConfig","getSocialMediaShareUrl","targetRelatedAtributes","newWindow","attributes","appearance","justified","jssStyleSheet","iconContainer","iconImage","iconLabel","ShallowCompare","a","b","ShareDialogColors","setStyleByZIndex","overrides","dialog_modalOverlay","dialog_contentRegion","StringResource","dialogButtonClose","dialogTitle","copyButton","copiedButton","copyButtonAriaLabel","copiedButtonAriaLabel","Dialog","dialog","Above","baseDialogProps","closeButtonTelemetryTags","copyButtonAttributes","copyButtonTelemetryProps","copyButtonTelemetryTags","copyLinkOcid","dialogStrings","onClose","renderOneColLayout","socialMediaConfigOverride","socialMediaItems","shareIconTelemetryProps","shareIconTelemetryTags","baseDialogStyleOverride","inputRef","onCopyLinkToClipboard","isLinkCopied","execCommand","setSocialMediaItemsConfig","coerceDialogProps","dialogContainer","header","_7","tag","h3","headerText","closeButton","closeIcon","renderSocialIconsList","renderCopyLink","buttonText","copyTelemetryTag","inputContainer","copyLinkInput","readOnly","copyLinkButton","socialMediaIcons","renderSocialIcon","iconListContainer","socialMediaItem","media","mediaKey","iconTelemetryTags","iconListItem","socialMediaItemsConfig","keyLower","modal","contentHeight","contentWidth","fallbackStyles","backgroundStyle","semibold","float","ArticleCard","anchorRef","headlineTitle","provider","nextProps","articleCard","renderContent","content","articleCard_content","renderImage","articleCard_textWrapper","renderTitle","renderProvider","articleCard_imageWrapper","articleCard_image","articleCard_imageOverlay","articleCard_headline","articleCard_headlineText","articleCard_headlineMask","providerImage","articleCard_providerImage","articleCard_provider","articleCard_providerTitle","SharedDocumentType","SharingHelper","sharingInfo","appId","getAppId","getSharingUrlBase","sharingUrl","shortUrlPathFormat","documentType","documentId","AppKeys","Base36AppIdString","articleUrl","currentBaseUrl","SharingProductionHosts","SharingBaseUrlDefault","overrideShareUrl","socialMediaItemConfig","appendQueryStringFormat","Format","refererUrl","options","finalOptions","entries","toolbar","resizable","scrollbars","BreakpointIndexToPx","ToolbarBreakpoints","TelemetryConstants","PlaceHolderId","LikeDislikeActionKey","SelectPropKey","Status","ButtonType","ContentActionsToolbarActions","initializeToolbar","ContentStatuReady","documentDataReady","likeContent","unlikeContent","dislikeContent","undislikeContent","sharingToolbarError","ViewportUpdate","moreOptionsIconColors","likeDislikeIconBackroundColor","moreOptionsMenuDefaultOffsetPos","OptionItemLike","like","OptionItemDislike","dislike","Disliked","OptionItemUndoLike","undoliked","OptionItemUndoDislike","undodisliked","inspect","localizedStrings","isContentStatusRequired","connectorArgs","sharingToolbar","sharingButtons","contentStatus","sharingError","sharingShortUrl","documentData","articleTitle","articleImageUrl","providerName","providerLogoUrl","buttonItem","newButtonItem","buttonType","buttonData","emailBodyText","ShareDialog","shareDialogProps","shareDialogTitleText","shareDialogCopyButtonText","shareDialogCopyButtonAriaLabelText","shareDialogCopiedButtonText","shareDialogCopiedButtonAriaLabelText","dialogArticleCardProps","articleId","shareDialogButtonAriaLabelText","LikeDislike","likeDislikeButtonAriaLabelText","MoreOptions","moreOptionsUnlikeText","moreOptionsUnlikeAriaLabelText","moreOptionsDislikeText","moreOptionsDislikeAriaLabelText","DisLike","moreOptionsUndislikeText","moreOptionsUndislikeAriaLabelText","moreOptionsLikeText","moreOptionsLikeAriaLabelText","moreOptionsButtonAriaLabelText","offsetPos","missingChildren","fetchImpl","contentActionsServiceEndpoint","contentPreviewApiEndpoint","targetId","GetContentStatusRequest","isLike","isDislike","contentPreviewData","GetContentPreviewData","TranslateContentPreviewDocumentData","PostContentActionRequest","DeleteContentActionRequest","requestParams","credentials","contentStatusData","ContentServiceUrlBase","deleteQueryParam","deleteResponse","targetType","postResponse","articleDataResponse","articleImageId","providerLogoId","ComponentConnector","some","contentActionsToolbarConnectorArgs","inspectorArgs","contentActionsToolbarProps","inspectorResponse","likeDislikeCallbacks","BuildLikeDislikeCallbacks","InjectCallbacksToMoreOptionsMenu","onDislike","onLike","sharingToolbarTelemetryProps","buttonTelemetryName","mediaType","mediaTelemetryProps","copyLinkTelemetryName","closeButtonTelemetryProps","closeDialogTelemetryName","mediaItem","mediaItemOverride","shareDialogTelemetryProps","shareDialogTelemetryName","articleTelemetryTags","shareArticleTelemetryName","InjectTelemetry","rootTelemetryTags","sharingToolbarTelemetryTags","contentId","isRSThree","CMS","actionServiceClient","generateTelemetryTags","getContentStatus","getDocumentData","initializeBreakpointTracker","GetPreferenceInitialState","GetDocumentData","shortUrlBuilder","moreOptionsButton","socialToolbarTelemetryName","moreOptionsTelemetryTags","UndoLike","UndoDislike","ToolbarPosition","handleAction","breakpointIndex","isRSThreeDevice","getToolbarPosition","Breakpoint3_2","Breakpoint3_3","horizontal","SharingToolbarStyles","icon_none","icon_like","icon_dislike","iconListHorizontal","iconListVertical","shareDialog","highContrast","moreOptions","iconContainerDimension","contextMenuStyles","e11","Scale","coerceTitleProps","coerceProviderProps","articleCard_noImage","coercedProps","_6","coercedProviderNameProps","_8","h5","flex","onShareDialogOpen","shareDialogOpened","onShareDialogClose","managedClass","appendHighContrastStyle","shareDialogButtonRef","_","getPositioningClassName","renderSharingButtons","renderShareDialog","buttonId","listItem","renderSocialMediaIcon","renderShareDialogIcon","renderLikeDislikeIcon","renderMoreOptionsIcon","shareDialogItem","articleCardStylesheet","LikedText","LikeText","DislikeText","iconClassName","BaseExperience","firstRenderCompleted","contentActionsToolbar","componentDidUpdate","shouldFlip","flipToolbar","stack","contentActionsToolbar_horizontal","contentActionsToolbar_vertical","currentHostId","hostElem","prevHostId","newHostId","prevHostElem","newHostElem","childNodes","defaultProps","RequestContext","createRootProps","RootTelemetryId","setupContentActionsInitialState","cmsDocumentId","documentid","isrsthree","verticalkey","categorykey","connectContentActionsComponent","contentActionsToolbarConfig","contentActionsExperience","renderRootElement","contentActionsConfig","experienceConfig","catch"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAKlC,IAFGe,GAAqBA,EAAoBhB,GAEtCO,EAASC,QACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrBiB,GAAI,GAGDZ,EAAkB,GAQtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU8B,QAGnC,IAAIC,EAASH,EAAiB5B,GAAY,CACzCK,EAAGL,EACHgC,GAAG,EACHF,QAAS,IAUV,OANAhB,EAAQd,GAAUW,KAAKoB,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAG/DK,EAAOC,GAAI,EAGJD,EAAOD,QAKfJ,EAAoBO,EAAI,SAAuBhC,GAC9C,IAAIiC,EAAW,GAKXC,EAAqBvB,EAAgBX,GACzC,GAA0B,IAAvBkC,EAGF,GAAGA,EACFD,EAASrB,KAAKsB,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAIC,SAAQ,SAASC,EAASC,GAC3CJ,EAAqBvB,EAAgBX,GAAW,CAACqC,EAASC,MAE3DL,EAASrB,KAAKsB,EAAmB,GAAKC,GAGtC,IACII,EADAC,EAASC,SAASC,cAAc,UAGpCF,EAAOG,QAAU,QACjBH,EAAOI,QAAU,IACbnB,EAAoBoB,IACvBL,EAAOM,aAAa,QAASrB,EAAoBoB,IAElDL,EAAOO,IA1DV,SAAwB/C,GACvB,OAAOyB,EAAoBuB,EAAI,IAAM,CAAC,GAAK,wBAAwB,GAAK,yBAAyB,GAAK,wCAAwC,GAAK,gCAAgC,GAAK,uBAAuB,GAAK,sCAAsC,GAAK,iCAAiC,GAAK,kCAAkC,IAAM,0BAA0B,IAAM,4BAA4B,IAAM,+BAA+B,IAAM,0BAA0B,IAAM,4BAA4B,IAAM,+BAA+B,IAAM,sBAAsB,IAAM,oBAAoB,IAAM,sBAAsB,IAAM,0BAA0B,IAAM,2BAA2B,IAAM,2BAA2B,IAAM,4BAA4B,IAAM,0BAA0B,IAAM,yBAAyB,IAAM,2BAA2B,IAAM,8BAA8B,IAAM,+BAA+B,IAAM,oBAAoB,IAAM,wBAAwB,IAAM,qBAAqB,IAAM,uBAAuB,IAAM,0BAA0B,IAAM,mBAAmB,IAAM,4BAA4B,IAAM,sBAAsB,IAAM,qBAAqB,IAAM,uBAAuB,IAAM,sBAAsB,IAAM,0BAA0B,IAAM,uBAAuB,IAAM,4BAA4B,IAAM,2BAA2B,IAAM,mBAAmB,IAAM,wBAAwB,IAAM,uBAAuB,IAAM,6BAA6B,IAAM,mBAAmB,IAAM,yBAAyB,IAAM,qBAAqB,IAAM,2BAA2B,IAAM,uBAAuB,IAAM,4BAA4B,IAAM,2BAA2B,IAAM,4BAA4B,IAAM,8BAA8B,IAAM,+BAA+B,IAAM,8BAA8B,IAAM,+BAA+B,IAAM,oBAAoB,IAAM,uBAAuB,IAAM,2BAA2B,IAAM,gCAAgC,IAAM,kBAAkB,IAAM,oBAAoB,IAAM,uBAAuB,IAAM,qBAAqB,IAAM,2BAA2B,IAAM,yBAAyB,IAAM,mBAAmB,IAAM,2BAA2B,IAAM,6BAA6B,IAAM,gCAAgC,IAAM,gCAAgC,IAAM,+BAA+B,IAAM,0BAA0B,IAAM,uBAAuB,IAAM,sBAAsB,IAAM,wBAAwB,IAAM,2BAA2B,IAAM,wBAAwB,IAAM,0BAA0B,IAAM,6BAA6B,IAAM,wBAAwB,IAAM,0BAA0B,IAAM,6BAA6B,IAAM,wBAAwB,IAAM,0BAA0B,IAAM,6BAA6B,IAAM,mBAAmB,IAAM,wBAAwB,IAAM,oBAAoB,IAAM,0BAA0B,IAAM,sCAAsC,IAAM,uCAAuC,IAAM,yBAAyB,IAAM,qBAAqB,IAAM,wBAAwB,IAAM,0BAA0B,IAAM,6BAA6B,IAAM,wBAAwB,IAAM,0BAA0B,IAAM,6BAA6B,IAAM,mBAAmB,IAAM,uBAAuB,IAAM,oBAAoB,IAAM,wBAAwB,IAAM,mBAAmB,IAAM,mBAAmB,IAAM,uBAAuB,IAAM,4BAA4B,IAAM,2BAA2B,IAAM,uBAAuB,IAAM,qBAAqB,IAAM,0BAA0B,IAAM,6BAA6B,IAAM,mBAAmB,IAAM,wBAAwB,IAAM,yBAAyB,IAAM,+BAA+B,IAAM,wBAAwB,IAAM,yBAAyB,IAAM,sBAAsB,IAAM,4BAA4B,IAAM,uBAAuB,IAAM,4BAA4B,IAAM,4BAA4B,IAAM,+BAA+B,IAAM,+BAA+B,IAAM,2BAA2B,IAAM,6BAA6B,IAAM,gCAAgC,IAAM,oBAAoB,IAAM,sBAAsB,IAAM,wBAAwB,IAAM,0CAA0C,IAAM,8BAA8B,IAAM,uBAAuB,IAAM,sBAAsB,IAAM,qBAAqB,IAAM,sBAAsB,IAAM,8BAA8B,IAAM,gCAAgC,IAAM,mCAAmC,IAAM,gCAAgC,IAAM,kCAAkC,IAAM,qCAAqC,IAAM,kBAAkB,IAAM,qBAAqB,IAAM,qBAAqB,IAAM,kBAAkB,IAAM,sBAAsB,IAAM,yBAAyB,IAAM,mBAAmB,IAAM,wBAAwB,IAAM,4BAA4B,IAAM,sBAAsB,IAAM,oBAAoB,IAAM,6BAA6B,IAAM,+BAA+B,IAAM,kCAAkC,IAAM,+BAA+B,IAAM,iCAAiC,IAAM,oCAAoC,IAAM,uBAAuB,IAAM,iCAAiC,IAAM,sCAAsC,IAAM,mCAAmC,IAAM,qCAAqC,IAAM,wCAAwC,IAAM,yBAAyB,IAAM,4BAA4B,IAAM,sBAAsB,IAAM,qBAAqB,IAAM,mBAAmB,IAAM,oBAAoB,IAAM,qBAAqB,IAAM,oBAAoB,IAAM,yBAAyB,IAAM,0BAA0B,IAAM,yBAAyB,IAAM,uBAAuB,IAAM,gCAAgC,IAAM,iCAAiC,IAAM,oBAAoB,IAAM,0BAA0B,IAAM,6BAA6B,IAAM,+BAA+B,IAAM,kCAAkC,IAAM,+BAA+B,IAAM,iCAAiC,IAAM,oCAAoC,IAAM,oBAAoB,IAAM,uBAAuB,IAAM,yBAAyB,IAAM,4BAA4B,IAAM,mBAAmB,IAAM,sBAAsB,IAAM,oBAAoB,IAAM,4BAA4B,IAAM,4BAA4B,IAAM,8BAA8B,IAAM,iCAAiC,IAAM,uBAAuB,IAAM,sBAAsB,IAAM,2BAA2B,IAAM,0BAA0B,IAAM,oBAAoB,IAAM,gCAAgC,IAAM,6BAA6B,IAAM,wBAAwB,IAAM,oBAAoB,IAAM,oBAAoB,IAAM,mBAAmB,IAAM,wBAAwB,IAAM,0BAA0B,IAAM,2BAA2B,IAAM,4BAA4B,IAAM,0BAA0B,IAAM,mCAAmC,IAAM,iCAAiC,IAAM,0BAA0B,IAAM,4BAA4B,IAAM,6BAA6B,IAAM,uBAAuB,IAAM,4BAA4B,IAAM,oBAAoB,IAAM,sBAAsB,IAAM,yBAAyB,IAAM,mBAAmB,IAAM,oBAAoB,IAAM,mBAAmB,IAAM,qBAAqB,IAAM,wBAAwB,IAAM,qBAAqBhD,IAAUA,GAAW,IAAM,CAAC,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,wBAAwBA,GAAW,MAyD77biD,CAAejD,GAG5B,IAAIkD,EAAQ,IAAIC,MAChBZ,EAAmB,SAAUa,GAE5BZ,EAAOa,QAAUb,EAAOc,OAAS,KACjCC,aAAaX,GACb,IAAIY,EAAQ7C,EAAgBX,GAC5B,GAAa,IAAVwD,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYL,IAAyB,SAAfA,EAAMM,KAAkB,UAAYN,EAAMM,MAChEC,EAAUP,GAASA,EAAMQ,QAAUR,EAAMQ,OAAOb,IACpDG,EAAMW,QAAU,iBAAmB7D,EAAU,cAAgByD,EAAY,KAAOE,EAAU,IAC1FT,EAAMY,KAAO,iBACbZ,EAAMQ,KAAOD,EACbP,EAAMa,QAAUJ,EAChBH,EAAM,GAAGN,GAEVvC,EAAgBX,QAAWgE,IAG7B,IAAIpB,EAAUqB,YAAW,WACxB1B,EAAiB,CAAEmB,KAAM,UAAWE,OAAQpB,MAC1C,MACHA,EAAOa,QAAUb,EAAOc,OAASf,EACjCE,SAASyB,KAAKC,YAAY3B,GAG5B,OAAOJ,QAAQgC,IAAInC,IAIpBR,EAAoB4C,EAAIxD,EAGxBY,EAAoB6C,EAAI3C,EAGxBF,EAAoB8C,EAAI,SAAS1C,EAASiC,EAAMU,GAC3C/C,EAAoBgD,EAAE5C,EAASiC,IAClCvD,OAAOmE,eAAe7C,EAASiC,EAAM,CAAEa,YAAY,EAAMC,IAAKJ,KAKhE/C,EAAoBoD,EAAI,SAAShD,GACX,oBAAXiD,QAA0BA,OAAOC,aAC1CxE,OAAOmE,eAAe7C,EAASiD,OAAOC,YAAa,CAAEC,MAAO,WAE7DzE,OAAOmE,eAAe7C,EAAS,aAAc,CAAEmD,OAAO,KAQvDvD,EAAoBwD,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQvD,EAAoBuD,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAK7E,OAAO8E,OAAO,MAGvB,GAFA5D,EAAoBoD,EAAEO,GACtB7E,OAAOmE,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOvD,EAAoB8C,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIR3D,EAAoB+D,EAAI,SAAS1D,GAChC,IAAI0C,EAAS1C,GAAUA,EAAOqD,WAC7B,WAAwB,OAAOrD,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAL,EAAoB8C,EAAEC,EAAQ,IAAKA,GAC5BA,GAIR/C,EAAoBgD,EAAI,SAASgB,EAAQC,GAAY,OAAOnF,OAAOC,UAAUC,eAAeC,KAAK+E,EAAQC,IAGzGjE,EAAoBuB,EAAI,mCAGxBvB,EAAoBkE,GAAK,SAASC,GAA2B,MAApBC,QAAQ3C,MAAM0C,GAAYA,GAEnE,IAAIE,EAAaC,OAAqB,aAAIA,OAAqB,cAAK,GAChEC,EAAmBF,EAAWlF,KAAK2E,KAAKO,GAC5CA,EAAWlF,KAAOf,EAClBiG,EAAaA,EAAWG,QACxB,IAAI,IAAI7F,EAAI,EAAGA,EAAI0F,EAAWxF,OAAQF,IAAKP,EAAqBiG,EAAW1F,IAC3E,IAAIU,EAAsBkF,EAI1BhF,EAAgBJ,KAAK,CAAC,KAAK,IAEpBM,I,+BCzJT,IAAYgF,EAnEZ,kCAmEA,SAAYA,GAIR,qBAKA,yBAKA,+BAKA,2BAnBJ,CAAYA,MAAQ,M,yJC5DpB,SAASC,IAEL,IAAIC,EAAY,GAGZC,GAAa,EAGbC,EAAe,KAGnB,SAASC,IAEL,GAAIF,EAAY,CACZ,MAAMG,EAAS,GAGf,IAAK,IAAIC,EAAQ,EAAGA,EAAQL,EAAU9F,OAAQmG,IAC1C,IACIL,EAAUK,GAAOH,GACnB,MAAOtE,GAELwE,EAAO5F,KAAKoB,GAQpB,GAHAoE,EAAY,GAGRI,EAAOlG,OACP,MAAMkG,GAgClB,MAAO,CAEHrE,QArBJ,YAAoBuE,GAChB,MAAO,CAGHC,KACI,SAAUC,GACNR,EAAUxF,KAAKgG,GACfL,KAIRM,OACI,WACI,OAAOC,KAAKH,KAAKD,MAU7BrE,QA9BJ,YAAoBqE,GAChBL,GAAa,EACbC,EAAeI,EACfH,MAiCR,IAAIQ,EAAqB,IAAIZ,EAG7B,MAAMa,EA8BN,WACI,IAAK,cACD,OAAO,KAGX,MAAMC,EAAW,CAAC,SAAU,MAAO,KAAM,KAGzC,QAA+B,IAApBxE,SAASyE,OAChB,MAAO,SAIX,IAAK,IAAIT,EAAQ,EAAGA,EAAQQ,EAAS3G,OAAQmG,IAAS,CAClD,MAAMU,EAA0BF,EAASR,GAAS,SAClD,GAAI,KAA6BhE,SAC7B,OAAO0E,GA9CQC,GAQ3B,IAAIC,GAA0B,EAE1B,eAAetB,OAAOuB,kBACtBvB,OAAOuB,iBAAiB,gBAAgB,WACpCD,GAA0B,KAKlC,IAAIE,GAAmB,EAEvB,GAAI,eAAeP,EAAoB,CAEnC,MAAMQ,EAAUR,EAAmBS,QAAQ,aAAc,IAAM,mBAC/DhF,SAAS6E,iBAAiBE,EAASE,GA8BvC,SAASC,IACL,SAAK,gBAAgBX,IAIdvE,SAASuE,GAIpB,SAASU,IACAC,KAKDZ,EAAqB,IAAIZ,EAGpBkB,IACDE,GAAmB,IARvBR,EAAmB1E,UArC3BqF,IA+Fe,OAEXC,SAAUA,EAEVC,sBAVJ,WAEI,OAAOb,EAAmB5E,WAU1B0F,sBA7CJ,SAA+BC,EAASC,EAAaC,EAAYC,GAC7D,GAAIN,MAAeG,EACf,OAAO,EAMX,GAHAG,EAAeA,GAAgB,cAC/BF,EAAcA,GAAe,eAExBC,GAA6B,IAAfA,EAAkB,CACjCA,EAAa,EACb,MAAME,EAAczF,SAAS0F,eAAe,WAE5C,GAAID,EAAa,CACb,MAAME,EAAcF,EAAYG,wBAChCN,EAAcK,EAAYE,MAC1BN,EAAaI,EAAYG,MAIjC,IAAIC,GAAa,EAEjB,MAAMC,EAAMX,EAAQO,wBAEdK,GAAwBD,EAAIE,KAAO,GAAKF,EAAIG,QAAU,KAAOH,EAAIE,IAAMV,GAAgBQ,EAAIG,OAASX,GACpGY,GAAuBJ,EAAIF,MAAQP,GAAcS,EAAIH,MAAQN,KAAgBS,EAAIF,KAAOR,GAAeU,EAAIH,OAASP,GAI1H,OAFAS,EAA4B,IAAfC,EAAIK,QAA8B,IAAdL,EAAIM,MAE9BP,GAAeE,GAAwBG,GAmB9CG,4BApDJ,WACI,OAAQzB,EAAmB,EAAI,I,SChJnC,IAAI0B,EACAC,EACAC,EAEJ,MAAMC,EAAa,CAAC,EAAG,GACvB,IAKIC,EALAC,GAAoB,EACpBC,EAA2B,GAE3B,EAAU,GACVC,EAAU,GAGVC,EAAwB,GAE5B,SAASC,EAAO5B,EAAS6B,GACrB7C,KAAKgB,QAAUA,EACfhB,KAAK6C,QAAUA,EAEX7C,KAAK6C,UACL7C,KAAK8C,SAAW,WACZ,MAAMC,EAAsB/C,KAAKgB,QAAQgC,aAAa,UACtD,IACI,OAAOC,KAAKC,MAAMH,GACpB,MAAO7H,GACL,OAAO6H,KAMvB,SAASI,IAKLf,EAAgB,WAAD,GAAiBnD,OAAOmE,YAAczH,SAAS0H,gBAAgBC,YAAe,EAC7FjB,EAAiB,WAAD,GAAiBpD,OAAOsE,aAAe5H,SAAS0H,gBAAgBG,aAAgB,EAwFpG,SAASC,EAA2BC,EAAWC,EAAkBC,GAa7D,IAAKA,EACD,OAAOD,GAAsC,GAEjD,IAAKA,EACD,OAAOC,GAA8B,GAEzC,MAAMC,EAAuB,GAE7B,IAAIC,GAAsB,EAC1B,MAAMC,EAAsBH,EAAaI,MAAMN,GAC/C,IAAK,IAAIpK,EAAI,EAAGA,EAAIyK,EAAoBvK,OAAQF,IAAK,CACjD,MAAM2K,EAAYF,EAAoBzK,GAAG0K,MAAM,KAC/C,GAAIC,EAAU,GAAI,CACd,IAAKH,GAEGG,EAAU,KAAkD,GAA3CN,EAAiBO,QAAQD,EAAU,IAAY,CAChE,MAAME,EAA0BR,EAAiBK,MAAMN,GACvD,IAAK,IAAIlJ,EAAI,EAAGA,EAAI2J,EAAwB3K,OAAQgB,IAChD,GAAI2J,EAAwB3J,GAAI,CAC5B,MAAM4J,EAAgBD,EAAwB3J,GAAGwJ,MAAM,KACvDH,EAAqBO,EAAc,IAAMA,EAAc,GAG/DN,GAAsB,EAG9BD,EAAqBI,EAAU,IAAMA,EAAU,IAIvD,IAAII,EAAM,GACV,IAAK,MAAM7F,KAAOqF,EACVrF,IACY,KAAR6F,IACAA,GAAOX,GAGXW,GAAO7F,EACHqF,EAAqBrF,KACrB6F,GAAO,IAAMR,EAAqBrF,KAS9C,OAJKsF,GAAuBH,IACxBU,EAAMA,EAAMA,EAAMX,EAAYC,EAAmBA,GAG9CU,EAGJ,MAAMC,EAAY,CACrBC,QAAS,UACTC,YAAa,IAEbC,cAAe,OACfC,oBAAqB,gBACrBC,OAAQ,cACRC,OAAQ,SACRC,UAAW,UACXC,WAAY,OACZC,WAAY,gBACZC,YACA,CACIC,IAAK,MACLC,WAAY,cAEhBC,WACA,CACIC,MAAO,QACPC,cAAe,eACfC,OAAQ,SACRC,YAAa,cACbC,WAAY,aACZC,WAAY,cACZC,OAAQ,SACRC,YAAa,cACbC,iBAAkB,iBAEtBC,qBACA,CACIC,KAAM,OACNC,OAAQ,SACRC,KAAM,OACNf,IAAK,MACLgB,OAAQ,SACRC,MAAO,QACPC,QAAS,UACTC,KAAM,QAEV9J,MAAO,GACP+J,SAAU,GACVC,WAAY,GACZC,qBAAsB,GACtBC,yBAAyB,EACzBC,WAjJJ,WAII,MAAMC,EAAoB,GAE1B,OAAK,eAKDzH,QAA+B,MAArBA,OAAO0H,aAEjBD,EAAkBE,OAAS3H,OAAO0H,YAG/BD,GATIA,EA0ICG,IAA0B,GACtCC,kBAAkB,EAClBC,oBAAqB,WAKjB,OAAQ/G,KAAK8G,kBAEjBE,iBAAiB,EACjBC,mBAAoB,WAKhB,OAAOjH,KAAKgH,iBAEhBE,eAAgB,WAMZ,OAAQ,IAAIC,MAEhBC,eAAgB,SAAUC,GAOtB,IAAK,cACD,OAAO,EAGX,IAAIC,EAMJ,OAJIA,EADAD,GAGc/C,EAAU4C,iBAExBI,GAAerI,OAAOsI,aAAetI,OAAOsI,YAAYC,QAAUvI,OAAOsI,YAAYC,OAAOC,gBACpFH,EAAcrI,OAAOsI,YAAYC,OAAOC,qBADpD,GAKJC,qBACA,CACIC,UAAW,EACXC,OAAQ,EACRC,OAAQ,EACRC,UAAW,EACXC,OAAQ,EACRC,SAAU,EACVC,QAAS,EACTC,SAAU,EACVtF,OAAQ,EACRuF,UAAW,EACXC,SAAU,GACVC,aAAc,GACdC,YAAa,GACbC,SAAU,GACVC,WAAY,GACZC,OAAQ,GACRC,eAAgB,GAChBC,SAAU,GACVC,UAAW,GACXC,cAAe,GACfC,kBAAmB,GACnBC,UAAW,GACXC,YAAa,GACbC,WAAY,GACZC,aAAc,GACdC,iBAAkB,IAEtBC,sBACA,CACIC,UAAW,EACXC,oBAAqB,EACrBC,SAAU,EACVC,QAAS,EACTC,SAAU,GAEdC,uBAAwB,SACxBC,qBAAsB,UACtBC,OACA,CAEIC,SAAU,WAMN,OALK1H,GAAqC,KAAnBA,IAEnBA,EAAiB,YAAUmC,EAAUQ,aAAeR,EAAU+B,SAASyD,WAAa,IAGjF3H,GAEX4H,aAAc,WAQV,OANI5H,IAAmBmC,EAAU+B,SAASyD,UACtCvH,EAAoB,aACM,KAAnBJ,IACPI,EAAoB,QAGjBA,GAEXyH,QAAS,WACL,MAAMhJ,EAAUiJ,EAAA,EAAIC,UAAU5F,EAAUhI,OACxC,GAAI0E,GAAWA,EAAQsD,EAAUS,YAC7B,OAAO/D,EAAQsD,EAAUS,YAE7B,MAAMoF,EAAsB7F,EAAUhI,MACtC,OAAI6N,IACKA,EAAeC,eAAiD,eAAhCD,EAAeC,eAAmCD,EAAeE,SAAWF,EAAeG,UACrHhG,EAAUU,YAAYE,WAG9B,IAGXqF,QAAS,WACL,OAAO,YAAUjG,EAAUQ,aAG/B0F,kBAAmB,WAMf,OAAO,IAASC,gBAAkB,IAAeC,gBAGrDC,eAAgB,WAQZ,OAAI,IAASC,aAA6D,UAA7C,IAASA,YAAc,IAAIC,cAC7C,EAGJ,GAOXC,qBAAsB,WAElB,IAA0B,IAAtB,IAASC,SAET,OAAO,IAAeC,WACnB,IAA0B,IAAtB,IAASD,SAEhB,OAAO,IAAeE,cAI1B,MAAMC,EAAc,IAAeC,oBAEnC,OAD+BD,GAAeA,EAAYE,cAAgBF,EAAYE,eAAiB,IAAYC,IAC7F,IAAeL,WAAa,IAAeC,eAMrEK,YAAa,WACT,OAAK,cAGEC,OAAOtJ,MAAQsJ,OAAOvJ,OAAS,YAAc,WAFzC,IAKfwJ,aAAc,SAAUC,GACpB,CACI,IAAK,cACD,OAGJ,QAAyB,IAAdA,EAIP,OAGa,MAAbA,IACAA,EAAY,IAGhB,EAAU,GACV,MAAMC,EAAgB/P,SAASgQ,KAAKC,iBAAiB,YAIrD,IAAI3K,EAEJ,MAAME,EAAelC,OAAO4M,YAC5B5K,EAAchC,OAAO6M,WAErB,IAAI5K,EAAa,EACjB,MAAME,EAAczF,SAAS0F,eAAe,WAE5C,GAAID,EAAa,CACb,MAAME,EAAcF,EAAYG,wBAChCN,EAAcK,EAAYE,MAC1BN,EAAaI,EAAYG,KAK7B,MAAMsK,EAAWpQ,SAASgQ,KAAKK,cAAc,QAAUrQ,SAASgQ,KAAKK,cAAc,SAAWrQ,SAASgQ,KAAKK,cAAc,QACpHC,EAAkBF,GAAYzH,EAAU4H,kBAAkBC,UAAUJ,EAAU9K,EAAaC,EAAYC,GAGvGiL,EAAW,GACjB,IAAK,IAAI9S,EAAI,EAAGA,EAAIoS,EAAclS,OAAQF,IAEoC,SAAtEoS,EAAcpS,GAAG0J,aAAa,oCAE9BoJ,EAAStS,KAAKwK,EAAU4H,kBAAkBC,UAAUT,EAAcpS,GAAI2F,OAAOgD,MAAO,EAAGd,EAAc8K,IAErGG,EAAStS,KAAKwK,EAAU4H,kBAAkBC,UAAUT,EAAcpS,GAAI2H,EAAaC,EAAYC,EAAc8K,IAIrH,IAAK,IAAIzR,EAAI,EAAGA,EAAIkR,EAAclS,OAAQgB,IACtC,EAAQV,KAAK,IAAI8I,EAAO8I,EAAclR,GAAI4R,EAAS5R,KAEvD,MAAM6R,EAAU/H,EAAU4H,kBAAkBI,gBAExCD,IAAaA,EAAQnR,GAAKmR,EAAQnR,EAAE1B,OAAS,GAAO6S,EAAQE,IAAMF,EAAQE,GAAG/S,OAAS,IACtF8K,EAAU4H,kBAAkBM,oBAAoBf,EAAWY,KAMvErK,OAAQ,WAIJ,OAHKK,GACDc,IAEGd,GAGXoK,UAAW,WAIP,OAAK,cAIE9Q,SAAS+Q,MAHL,IASfC,QAAS,WACL,IAAIA,EAAU,cAEd,MAAMC,EAAOtI,EAAU+B,SAASwG,QAChC,GAAID,EAAM,CAEN,MAAME,EAAiBH,EAAQzI,QAAQ,MAAQ,EAC/CyI,EAAUG,EAAiBH,EAAU,IAAMA,EAAU,IACrDA,EAAUA,EAAU,QAAUC,EAGlC,OAAOD,GAOXI,SAAU,WACN,OAAK,cAKEpR,SAASqR,kBAAoBrR,SAASoR,SAJlC,IAOfE,iBAAkB,WACd,IAAK,cACD,MAAO,GAKX,MAFyB,CAAC1B,OAAOtJ,MAAOsJ,OAAOvJ,QAAQkL,KAAK,MAKhEC,UAAW,WAIP,OAAK,cAIEC,UAAUD,UAHN,IAOflL,MAAO,WAIH,OAHKG,GACDe,IAEGf,GAGXF,4BAA6B,WACzB,OAAOmL,EAAkBnL,gCAGjCoL,YACA,CACIC,UAAW,WAMP,OAAOjJ,EAAU4C,kBAErBsG,UAAW,WAKP,IAAK,cACD,OAAO,KAIX,IAAIC,EAAOnJ,EAAUhI,MAAMQ,OAE3B,KAAO2Q,GAA0B,WAAlBxD,EAAA,EAAIjN,KAAKyQ,IAAoB,CACxC,GAAsB,MAAlBxD,EAAA,EAAIjN,KAAKyQ,IAAiBxD,EAAA,EAAIyD,cAAcD,EAF9B,YAGd,MAHc,WAKlBA,EAAOxD,EAAA,EAAI0D,OAAOF,GAEtB,OAAO,MAEXG,gBAAiB,WASb,QAAStL,EAAW,IAExBuL,kBAAmB,WAQf,OAAIrL,IACSF,EAAW,KAEXA,EAAW,IAG5BwH,UAAW,WAIP,OAAOgE,EAAA,EAAaC,gBAAwBzJ,EAAU+B,SAAUyD,WAEpEkE,gBAAiB,WAIb1L,EAAW,GAAK,EAChBE,GAAoB,IAG5ByL,OACA,CACIC,cAAe,WAOX,IAAIC,EAAe7J,EAAUmC,WAI7B,OAHA0H,EAAe,OAAAC,EAAA,GAAO,GAAI9J,EAAUmC,WAAYhE,GAEhDA,EAA2B,GACpBQ,KAAKoL,UAAUF,IAE1BG,2BAA4B,WAOxB,IAAI7H,EAAa,GACjB,GAAqC,iBAA1B9D,EACP,IAAK,MAAMnE,KAAOmE,EAAuB,CACrC8D,EAAaxD,KAAKoL,UAAU1L,GAC5B,MAKR,OADAA,EAAwB,GACjB8D,IAGfyF,kBACA,CACIqC,gBAAiB,SAAUC,GACvB,MAAMC,EAAoBnK,EAAU+B,SAC9BqI,EAAqB,IAAehE,eAEpCrQ,EAAS,CACXmU,IAAKA,EAELG,IAAKb,EAAA,EAAaC,gBAAkBU,EAAkB3E,UAEtD8E,GAAIH,EAAkBI,SACtBC,KAAMxK,EAAUsF,OAAOC,WACvBkF,MAAOzK,EAAUsF,OAAOe,iBACxBqE,SAAU1K,EAAUsF,OAAOkB,wBAwB/B,OApBI2D,EAAkBQ,MAElB5U,EAAO4U,IAAMR,EAAkBQ,KAG/BP,IAEArU,EAAO6U,SAAWR,GAKtBrU,EAAO,QAAUiK,EAAU+B,SAAS8I,aAEpC9U,EAAO,QAAUiK,EAAU+B,SAAS+I,UAEpC/U,EAAO,QAAUiK,EAAU+B,SAASgJ,UAEpChV,EAAO,QAAUiK,EAAU+B,SAASiJ,mBAE7BjV,GAEXmS,oBAAqB,SAAUf,EAAW1R,EAASwV,GAE/C,IAAK,eAA0BrS,MAAXnD,IAAuCmD,MAAbnD,EAAQmB,GAAkBnB,EAAQmB,EAAE1B,QAAU,KAAqB0D,MAAdnD,EAAQwS,IAAmBxS,EAAQwS,GAAG/S,QAAU,GAC/I,OAGJ,MAAMgW,EAAaxP,KAAKuO,gBAAgBjK,EAAUa,WAAWM,YACzD+J,IAEAA,EAAiB,KAAI/D,EAErB+D,EAAWC,MA1pBlB,gBAIExQ,OAAO4M,aACVlQ,SAAS0H,gBAAgBG,cACzB7H,SAASgQ,KAAKnI,eALP,EA0pBCgM,EAAWE,MA/nBlB,cAIEC,KAAKC,IACRjU,SAASgQ,KAAKkE,cAAgB,EAC9BlU,SAAS0H,gBAAgBwM,cAAgB,EACzClU,SAASgQ,KAAKmE,cAAgB,EAC9BnU,SAAS0H,gBAAgByM,cAAgB,EACzCnU,SAASgQ,KAAKnI,cAAgB,EAC9B7H,SAAS0H,gBAAgBG,cAAgB,GATlC,EA+nBCgM,EAAWO,UA9oBlB,gBAIE9Q,OAAO+Q,aACVrU,SAASgQ,KAAKsE,WACdtU,SAAS0H,gBAAgB4M,YALlB,EA+oBCT,EAAWU,IAAM7C,EAAkBnL,8BACnCsN,EAAe,GAAIzV,EAEnByV,EAAWW,KAAO7L,EAAU+B,SAAS+J,MAErCZ,EAAWa,IAAM/L,EAAU+B,SAASiK,WAChC7E,IAAcnH,EAAUuB,qBAAqBE,SAC7CyJ,EAAWe,IAAMjM,EAAU8C,kBAI3BnI,QAA+B,MAArBA,OAAO0H,aAEjB6I,EAAW5I,OAAS3H,OAAO0H,YAK3BrC,EAAU+B,SAASmK,SAEnBhB,EAAWiB,IAAMnM,EAAU+B,SAASmK,OAEpChB,EAAWkB,GAAKpM,EAAU+B,SAASsK,SAEnCnB,EAAWoB,GAAKtM,EAAU+B,SAASwK,UAInCvM,EAAU+B,SAASyK,WAEnBtB,EAAWsB,SAAWxM,EAAU+B,SAASyK,UAIzCvB,IACAC,EAAWuB,QAAUxB,GAGzBvP,KAAKgR,WAAWxB,KAGxBrD,UAAW,SAAUnL,EAASC,EAAcC,EAAaC,EAAe8K,GACpE,QAAKjL,GAIEqM,EAAkBtM,sBAAsBC,EAASC,EAAaC,EAAYC,IAErFmL,cAAe,WACX,MAAM2E,EAAmB,GAEzB,IAAK,MAAMtR,KAAS,EAAS,CACzB,MAAM3E,EAAS,EAAQ2E,GACvB,GAAI3E,GAAUA,EAAO8H,SAAU,CAC3B,MAAMoO,EAAQlW,EAAO8H,WAIrB,GAAIoO,GAASA,EAAMC,IAAMD,EAAME,GAAI,CAC/B,MAAMA,EAAKC,EAAA,EAAmBC,wBAAwBJ,EAAMC,GAExDC,IACAF,EAAME,GAAKA,GAInBH,EAAiBnX,KAAKoX,IAK9B,MAAM7E,EAAU,GAMhB,OALI4E,GAAoBA,EAAiBzX,OAAS,IAE9C6S,EAAQnR,EAAI+V,GAGT5E,GAEX2E,WAAY,SAAUxB,GAGlB,OAAA+B,EAAA,GAAuB,KACnB,IAAKjN,EAAUyC,sBACX,OAMJ,GADArE,EAAUA,IAAY4B,EAAU+B,UAAY,IAAImL,QAC3C9O,EAED,OAGJ,IAAK8M,EACD,OAIJA,EAAWiC,IAAMnN,EAAUgJ,YAAYO,oBAGvC,MAAM6D,EAAa,CACfC,IAAKjP,EACLkP,YAAa,IAAmBC,KAEhCC,UAAWtC,EAAWhB,KAAOlK,EAAUa,WAAW4M,iBAClDC,OAAQxC,EACRyC,aAAc,IAAmBC,KAGrCC,EAAA,EAASC,IAAI,IAAmBC,cAAeX,OAI3DY,iBAAkB,SAAUC,GAIxBjO,EAAUkO,eAAeD,IAE7BC,eAAgB,SAAUpC,EAAOqC,EAAW3I,GAMxC,IAAI4I,EAAkBpO,EAAU+B,SAC3BqM,IACDA,EAAkBpO,EAAU+B,SAAW,IAI3C,MAAMsM,EAAmBD,EAAgB5B,SAvuBjD,IAA6BpN,EAAWkP,EAAeC,EAwuB3CJ,KAAcE,GAAqBA,EAAiBzO,QAAQuO,GAAY,KAExEC,EAAgB5B,UA1uBCpN,EA0uB8B,IA1uBnBkP,EA0uBwBD,GA1uBTE,EA0uB2BJ,GA9tBxEG,EACI,CAACA,EAAeC,GAAiB3F,KAAKxJ,GACtCmP,EACJD,IA8tBFF,EAAgBtC,MAAQ3M,EAA2B,IAAKiP,EAAgBtC,MAAOA,GAE3EtG,IAEA4I,EAAgB5I,UAAYA,IAGpCgJ,eAAgB,SAAUC,EAAUC,GAIhC,IAAIC,EAAqBD,OACA9V,IAArB8V,IACAC,GAAqB,GAGzB,MAAMC,EAAoB7B,EAAA,EAAmB8B,qBAAqBJ,GAC9DG,GAAqB5O,EAAU+B,WAE/B/B,EAAU+B,SAASgJ,UAAY6D,EAAkBE,SAC7CH,IAEA3O,EAAU+B,SAAS+I,UAAY8D,EAAkBG,YAI7DC,mBAAoB,SAAU9C,EAAQG,EAAUE,GAKxCL,IAEAlM,EAAU+B,SAASmK,OAASA,EACxBG,IAEArM,EAAU+B,SAASsK,SAAWA,GAG9BE,IAEAvM,EAAU+B,SAASwK,SAAWA,KAI1C0C,gBAAiB,SAAUC,GAGnBA,IAAcnC,EAAA,EAAmBoC,mBAAmB9L,UAEpDrD,EAAU+B,SAASmN,UAAY,KACxBnC,EAAA,EAAmBqC,0BAA0BrC,EAAA,EAAmBoC,mBAAoBD,KAE3FlP,EAAU+B,SAASmN,UAAYA,IAGvCG,eAAgB,SAAU5G,EAAU6G,GAI5B,eAAe7G,IAEfpR,SAASqR,iBAAmBD,EAExB6G,GAAgBvC,EAAA,EAAmBqC,0BAA0BrC,EAAA,EAAmBwC,qBAAsBD,IACtGA,GAAgBvC,EAAA,EAAmBwC,qBAAqBlM,YAExDrD,EAAU+B,SAASuN,aAAeA,KAI9CE,2BAA4B,SAAUtV,EAAKN,GAMnCM,GAAON,GAAkBhB,MAATgB,IAChByE,EAAsBnE,GAAON,IAGrC6V,4BAA6B,SAAUC,EAAUC,GAQ7C3P,EAAU+B,SAAS6N,WAAa,KAEhC5P,EAAU+B,SAAS8N,aAAe,KAE9B9C,EAAA,EAAmBqC,0BAA0BrC,EAAA,EAAmB+C,kBAAmBJ,KAEnF1P,EAAU+B,SAAS8N,aAAeH,EAE9BC,IAEA3P,EAAU+B,SAAS6N,WAAaD,KAI5CI,oBAAqB,SAAU7V,EAAKN,GAI5BM,GAAgBtB,MAATgB,IACPM,EAAMA,EAAIqM,cACVpI,EAAyBjE,GAAON,IAGxCoW,uBAAwB,SAAUC,EAAWC,GAKzC,MAAM9B,EAAkBpO,EAAU+B,SAE9BqM,GAAmB8B,GAAaD,GAChClD,EAAA,EAAmBqC,0BAA0BrC,EAAA,EAAmBoD,0BAA2BF,KAE3F7B,EAAgBgC,YAAcjR,EAA2B,IAAKiP,EAAgBgC,YAAaH,EAAY,IAAMC,O,8BCl+BzH,weASO,SAASG,IACZ,QAA4B,oBAAX1V,SAA0BA,OAAOtD,WAAYsD,OAAOtD,SAASC,eAM3E,SAASgZ,IACZ,OAAOD,IAAc1V,OAAO4V,SAASC,KAAO,cAAiBnD,IAAImD,KAM9D,SAASC,IACZ,OAAOJ,IAAc1V,OAAO4V,SAASG,SAAW,cAAiBrD,IAAIqD,SAMlE,SAASC,IACZ,OAAON,IAAc1V,OAAO4V,SAASK,KAAO,cAAiBvD,IAAIuD,KAM9D,SAASC,IACZ,OAAOR,IAAc1V,OAAO4V,SAASO,OAAS,cAAiBzD,IAAIyD,OAMhE,SAASC,IACZ,OAAOV,IAAc1V,OAAO4V,SAASS,OAAS,cAAiB3D,IAAI2D,OAahE,SAASC,IACZ,OAAOZ,IAAc1V,OAAO4V,SAASW,SAAW,cAAiB7D,IAAI6D,SAalE,SAASC,EAAuBC,GACnC,IAAKf,IACD,MAAM,IAAItY,MAAM,kGAGpB,OAAO4C,OAAOtD,SAAS0F,eAAeqU,GAMnC,SAASC,EAA6BC,GACzC,IAAKjB,IACD,MAAM,IAAItY,MAAM,wGAGpB,OAAO4C,OAAOtD,SAASka,qBAAqBD,GAezC,SAASE,IACZ,OAAOnB,IAAc1V,OAAO8W,UAAY,KAOrC,SAASC,IACZ,OAAOrB,IAAc1V,OAAO6M,WAAa,cAAiBA,WAOvD,SAASmK,IACZ,OAAOtB,IAAc1V,OAAO4M,YAAc,cAAiBA,YAMxD,SAASqK,IACZ,OAAOvB,IAAc1V,OAAOkX,iBAAmB,cAAiBA,iBA8B7D,SAASC,EAAgBna,EAAyBoa,EAAgBC,GAAY,GACjF,IAAK3B,IACD,MAAM,IAAItY,MAAM,2FAGpB,MAAMka,EAAmC5a,SAASC,cAAc,UAehE,OAdIya,IACAE,EAAcF,GAAKA,GAEvBE,EAAc3Z,KAAO,kBACjBX,IACAsa,EAActa,IAAMA,EACpBsa,EAAcC,MAAQF,GAGtBrX,QAAUA,OAAOwX,WAEjBF,EAAcG,MAAQzX,OAAOwX,UAG1BF,I,6BCjLX,k1BAMO,MAAMI,EAAqB,aAOrBC,EAAgB,aAMhBC,EAAsB,CAC/BC,KAAM,OACN1Z,KAAM,OACNuO,KAAM,QAMGoL,EAA4B,CAIrCC,sBAAuB,WAMvBC,iBAAkB,SAKlBC,kBAAmB,SAKnBC,4BAA6B,UAOpBC,EAAiB,uBACjBC,EAAmB,gBAEnBC,EAAO,YACPC,EAAK,UACLha,EAAI,SACJia,EAAO,OACPC,EAAM,MACNC,EAAa,mBACbC,EAAc,oBACdC,EAAmB,oBACnBC,EAAgB,iBAchBC,EAA8B,EAK9BC,EAAiB,WAMjBC,EAAgC,OAKhCC,EAAkB,QAelBC,EAA4B,oBAK5BC,EAAoB,CAC7BC,WAAY,sBACZC,cAAe,iBAMNC,EAA4B,CACrCF,WAAY,aACZG,OAAQ,SACRC,uBAAwB,aACxBC,YAAa,cACbC,MAAO,QACPC,yBAA0B,2BAC1BC,cAAe,gBACfC,OAAQ,SACRC,sBAAuB,IACvBC,OAAQ,UACRC,IAAK,MACLnE,SAAU,WACVoE,OAAQ,SACRrM,KAAM,OACNsM,gBAAiB,oBACjBC,gBAAiB,YACjBC,YAAa,eACbC,OAAQ,IACRC,MAAO,QACPC,UAAW,YACXC,OAAQ,SACRC,eAAgB,iBAChBC,OAAQ,UACRC,QAAS,UACTC,iBAAkB,MAClBC,KAAM,QACNC,OAAQ,SACRC,QAAS,UACTlY,IAAK,OACLjF,KAAM,OACNod,KAAM,OACNC,UAAW,aAMf,IAAYC,EAUAC,GAVZ,SAAYD,GAIR,8BAJJ,CAAYA,MAAS,KAUrB,SAAYC,GACR,oBACA,sBACA,wBAHJ,CAAYA,MAAiB,KAStB,MAAMC,EAA0B,2BAK1BC,EAAuB,CAOhCC,aAAc,gBAMLC,EAA0B,8C,6BCvMvC,kCAUA,MAAMC,EAA8B,GAC9BC,EAAsC,GACtCC,EAAuC,GAgBvCC,EAAoB,CACtBC,YAAa,cACbC,IAAK,MACLC,IAAK,MACLC,SAAU,KACVC,iBAAkB,SAClBC,mBAAoB,OACpBC,aAAc,WACdC,WAAY,aACZC,QAAS,UACTC,QAAS,UACTC,MAAO,QACPC,eAAgB,aAChBC,aAAc,WAKZC,EAAgB,CAClB9T,UAAW,EACXC,OAAQ,EACRC,OAAQ,EACR6T,UAAW,EACXC,OAAQ,EACRC,SAAU,EACV3T,QAAS,EACTC,SAAU,EACVtF,OAAQ,EACRiZ,UAAW,EACXC,SAAU,GACVC,aAAc,GACdzT,YAAa,GACbC,SAAU,GACVC,WAAY,GACZC,OAAQ,GACRuT,eAAgB,GAChBC,SAAU,GACVC,UAAW,GACXC,cAAe,GACfC,kBAAmB,GACnBC,UAAW,GACXC,YAAa,GACbC,WAAY,GACZrT,aAAc,GACdC,iBAAkB,GAClBqT,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVC,MAAO,GACPC,SAAU,GACVC,UAAW,GACXC,WAAY,GACZC,MAAO,GACPC,KAAM,GACNC,QAAS,GACTC,OAAQ,GACRC,UAAW,GACXC,KAAM,GACNC,OAAQ,GACRC,WAAY,GACZC,OAAQ,GACRC,WAAY,GACZC,YAAa,GACbC,SAAU,GACVC,KAAM,GACNC,aAAc,GACdC,YAAa,GACbC,OAAQ,GACRC,SAAU,GACVC,KAAM,GACNC,OAAQ,IAINpK,EAAuB,CACzBlM,UAAW,EACXuW,IAAK,EACL9C,QAAS,EACT+C,KAAM,EACN9C,QAAS,EACT+C,cAAe,EACfC,SAAU,EACVlV,iBAAkB,EAClBmV,mBAAoB,EACpBhD,MAAO,EACPiD,QAAS,GACTC,SAAU,GACVC,MAAO,GACPC,eAAgB,GAChBC,UAAW,GACXC,WAAY,IAIVC,EAAwB,CAC1BlX,UAAW,EACXmX,SAAU,EACVC,YAAa,EACbC,IAAK,EACLC,MAAO,EACPC,UAAW,EACXC,OAAQ,EACRC,IAAK,EACLC,KAAM,EACNC,KAAM,EACN9C,OAAQ,GACRC,SAAU,GACV8C,KAAM,GACNC,MAAO,GACPzC,MAAO,GACPC,KAAM,GACNC,QAAS,GACTC,OAAQ,GACRC,UAAW,GACXC,KAAM,GACNC,OAAQ,GACRoC,OAAQ,GACRC,OAAQ,GACRC,QAAS,GACTpC,OAAQ,GACRqC,KAAM,GACNtC,WAAY,GACZuC,KAAM,GACN7B,KAAM,GACNC,OAAQ,GACR6B,UAAW,IAsCTC,EAAoB,CACtBC,UAAW9M,EAAkB,YAAayH,EAAkBI,UAE5DkF,YAAa/M,EAAkB,WAE/BgN,QAAShN,EAAkB,OAE3BiN,cAAejN,EAAkB,SAEjCkN,OAAQlN,EAAkB,UAE1BiL,KAAMjL,EAAkB,SAExBmN,SAAUnN,EAAkB,YAE5BoN,YAAapN,EAAkB,eAE/BqN,kBAAmBrN,EAAkB,cACrCsN,iBACA,CACIpF,QAASlI,EAAkB,UAAWyH,EAAkBS,SACxDqF,aAAcvN,EAAkB,eAAgByH,EAAkBS,SAClEsF,gBAAiBxN,EAAkB,mBAAoByH,EAAkBS,SACzEuF,kBAAmBzN,EAAkB,oBAAqByH,EAAkBS,SAC5EwF,kBAAmB1N,EAAkB,oBAAqByH,EAAkBS,SAC5EyF,gBAAiB3N,EAAkB,cAAeyH,EAAkBS,SACpE0F,sBAAuB5N,EAAkB,oBAAqByH,EAAkBS,SAChF2F,yBAA0B7N,EAAkB,oBAAqByH,EAAkBS,UAEvF4F,iBACA,CACI3F,QAASnI,EAAkB,UAAWyH,EAAkBU,SACxD4F,aAAc/N,EAAkB,eAAgByH,EAAkBU,SAClE6F,kBAAmBhO,EAAkB,qBAAsByH,EAAkBU,SAC7E8F,eAAgBjO,EAAkB,kBAAmByH,EAAkBU,SACvE+F,yBAA0BlO,EAAkB,oBAAqByH,EAAkBU,SACnFgG,cAAenO,EAAkB,iBAAkByH,EAAkBU,SACrEiG,wBAAyBpO,EAAkB,mBAAoByH,EAAkBU,SACjFkG,gBAAiBrO,EAAkB,cAAeyH,EAAkBU,SACpEmG,sBAAuBtO,EAAkB,oBAAqByH,EAAkBU,SAChFoG,iBAAkBvO,EAAkB,oBAAqByH,EAAkBU,SAC3EqG,2BAA4BxO,EAAkB,sBAAuByH,EAAkBU,SACvFsG,iBAAkBzO,EAAkB,kBAAmByH,EAAkBU,SACzEuG,2BAA4B1O,EAAkB,oBAAqByH,EAAkBU,SACrFwG,cAAe3O,EAAkB,iBAAkByH,EAAkBU,UAEzEyG,eACA,CACIC,kBAAmB7O,EAAkB,oBAAqByH,EAAkBW,OAC5E0G,kBAAmB9O,EAAkB,oBAAqByH,EAAkBW,QAEhF2G,sBACA,CACIlH,SAAU7H,EAAkB,WAAYyH,EAAkBK,kBAC1DkH,cAAehP,EAAkB,iBAAkByH,EAAkBK,mBAEzEmH,wBACA,CACIC,WAAYlP,EAAkB,aAAcyH,EAAkBM,oBAC9DoH,SAAUnP,EAAkB,WAAYyH,EAAkBM,oBAC1DqH,OAAQpP,EAAkB,SAAUyH,EAAkBM,oBACtDsH,aAAcrP,EAAkB,eAAgByH,EAAkBM,oBAClEuH,qBAAsBtP,EAAkB,uBAAwByH,EAAkBM,oBAClFwH,iBAAkBvP,EAAkB,mBAAoByH,EAAkBM,oBAC1EyH,UAAWxP,EAAkB,YAAayH,EAAkBM,oBAC5D0H,QAASzP,EAAkB,UAAWyH,EAAkBM,oBACxD2H,cAAe1P,EAAkB,gBAAiByH,EAAkBM,oBACpE4H,eAAgB3P,EAAkB,iBAAkByH,EAAkBM,oBACtE6H,oBAAqB5P,EAAkB,sBAAuByH,EAAkBM,oBAChF8H,WAAY7P,EAAkB,aAAcyH,EAAkBM,oBAC9D+H,iBAAkB9P,EAAkB,mBAAoByH,EAAkBM,oBAC1EgI,cAAe/P,EAAkB,gBAAiByH,EAAkBM,oBACpEiI,sBAAuBhQ,EAAkB,wBAAyByH,EAAkBM,oBACpFkI,qBAAsBjQ,EAAkB,uBAAwByH,EAAkBM,oBAClFmI,qBAAsBlQ,EAAkB,uBAAwByH,EAAkBM,oBAClFoI,kBAAmBnQ,EAAkB,oBAAqByH,EAAkBM,oBAC5EqI,gBAAiBpQ,EAAkB,kBAAmByH,EAAkBM,oBACxEsI,YAAarQ,EAAkB,cAAeyH,EAAkBM,oBAChEuI,YAAatQ,EAAkB,cAAeyH,EAAkBM,oBAChEwI,gBAAiBvQ,EAAkB,kBAAmByH,EAAkBM,oBACxEyI,gBAAiBxQ,EAAkB,kBAAmByH,EAAkBM,oBACxE0I,MAAOzQ,EAAkB,QAASyH,EAAkBM,oBACpD2I,eAAgB1Q,EAAkB,iBAAkByH,EAAkBM,oBACtE4I,eAAgB3Q,EAAkB,iBAAkByH,EAAkBM,oBACtE6I,eAAgB5Q,EAAkB,iBAAkByH,EAAkBM,oBACtE8I,iBAAkB7Q,EAAkB,mBAAoByH,EAAkBM,oBAC1E+I,MAAO9Q,EAAkB,QAASyH,EAAkBM,oBACpDgJ,YAAa/Q,EAAkB,cAAeyH,EAAkBM,oBAChEiJ,sBAAuBhR,EAAkB,wBAAyByH,EAAkBM,oBACpFkJ,uBAAwBjR,EAAkB,yBAA0ByH,EAAkBM,oBACtFmJ,qBAAsBlR,EAAkB,uBAAwByH,EAAkBM,oBAClFoJ,uBAAwBnR,EAAkB,yBAA0ByH,EAAkBM,oBACtFqJ,cAAepR,EAAkB,gBAAiByH,EAAkBM,oBACpEsJ,iBAAkBrR,EAAkB,mBAAoByH,EAAkBM,oBAC1EuJ,oBAAqBtR,EAAkB,sBAAuByH,EAAkBM,oBAChFwJ,kBAAmBvR,EAAkB,oBAAqByH,EAAkBM,oBAC5EyJ,aAAcxR,EAAkB,eAAgByH,EAAkBM,oBAClE0J,WAAYzR,EAAkB,aAAcyH,EAAkBM,oBAC9D2J,oBAAqB1R,EAAkB,sBAAuByH,EAAkBM,oBAChF4J,kBAAmB3R,EAAkB,oBAAqByH,EAAkBM,oBAC5E6J,gBAAiB5R,EAAkB,kBAAmByH,EAAkBM,oBACxE8J,sBAAuB7R,EAAkB,wBAAyByH,EAAkBM,oBACpF+J,gBAAiB9R,EAAkB,kBAAmByH,EAAkBM,oBACxEgK,iBAAkB/R,EAAkB,mBAAoByH,EAAkBM,oBAC1EiK,kBAAmBhS,EAAkB,oBAAqByH,EAAkBM,oBAC5EkK,WAAYjS,EAAkB,aAAcyH,EAAkBM,oBAC9DmK,yBAA0BlS,EAAkB,2BAA4ByH,EAAkBM,oBAC1FoK,oBAAqBnS,EAAkB,sBAAuByH,EAAkBM,oBAChFqK,gBAAiBpS,EAAkB,kBAAmByH,EAAkBM,oBACxEsK,oBAAqBrS,EAAkB,sBAAuByH,EAAkBM,oBAChFuK,eAAgBtS,EAAkB,kBAAmByH,EAAkBM,oBACvEwK,2BAA4BvS,EAAkB,8BAA+ByH,EAAkBM,oBAC/FyK,uBAAwBxS,EAAkB,0BAA2ByH,EAAkBM,oBACvF0K,WAAYzS,EAAkB,aAAcyH,EAAkBM,oBAC9D2K,aAAc1S,EAAkB,eAAgByH,EAAkBM,oBAClE4K,mBAAoB3S,EAAkB,qBAAsByH,EAAkBM,oBAC9E6K,sBAAuB5S,EAAkB,wBAAyByH,EAAkBM,oBACpF8K,iBAAkB7S,EAAkB,mBAAoByH,EAAkBM,oBAC1E+K,kBAAmB9S,EAAkB,oBAAqByH,EAAkBM,oBAC5EgL,oBAAqB/S,EAAkB,uBAAwByH,EAAkBM,oBACjFiL,yBAA0BhT,EAAkB,2BAA4ByH,EAAkBM,oBAC1FkL,yBAA0BjT,EAAkB,4BAA6ByH,EAAkBM,oBAC3FmL,kBAAmBlT,EAAkB,qBAAsByH,EAAkBM,oBAC7EoL,qBAAsBnT,EAAkB,wBAAyByH,EAAkBM,oBACnFqL,gBAAiBpT,EAAkB,mBAAoByH,EAAkBM,oBACzEsL,aAAcrT,EAAkB,eAAgByH,EAAkBM,oBAClEuL,cAAetT,EAAkB,gBAAiByH,EAAkBM,oBACpEwL,uBAAwBvT,EAAkB,0BAA2ByH,EAAkBM,oBACvFyL,aAAcxT,EAAkB,eAAgByH,EAAkBM,oBAClE0L,2BAA4BzT,EAAkB,8BAA+ByH,EAAkBM,oBAC/F2L,2BAA4B1T,EAAkB,8BAA+ByH,EAAkBM,oBAC/F4L,SAAU3T,EAAkB,WAAYyH,EAAkBM,oBAC1D6L,UAAW5T,EAAkB,YAAayH,EAAkBM,oBAC5D8L,eAAgB7T,EAAkB,iBAAkByH,EAAkBM,oBACtE+L,OAAQ9T,EAAkB,SAAUyH,EAAkBM,oBACtDgM,6BAA8B/T,EAAkB,gCAAiCyH,EAAkBM,oBACnGiM,+BAAgChU,EAAkB,iCAAkCyH,EAAkBM,oBACtGkM,oBAAqBjU,EAAkB,uBAAwByH,EAAkBM,oBACjFmM,yBAA0BlU,EAAkB,4BAA6ByH,EAAkBM,oBAC3FoM,uBAAwBnU,EAAkB,2BAA4ByH,EAAkBM,oBACxFqM,2BAA4BpU,EAAkB,6BAA8ByH,EAAkBM,oBAC9FsM,mBAAoBrU,EAAkB,qBAAsByH,EAAkBM,oBAC9EuM,wBAAyBtU,EAAkB,0BAA2ByH,EAAkBM,oBACxFwM,SAAUvU,EAAkB,WAAYyH,EAAkBM,oBAC1DyM,aAAcxU,EAAkB,eAAgByH,EAAkBM,oBAClE0M,kBAAmBzU,EAAkB,oBAAqByH,EAAkBM,oBAC5E2M,kBAAmB1U,EAAkB,oBAAqByH,EAAkBM,oBAC5E4M,aAAc3U,EAAkB,eAAgByH,EAAkBM,oBAClE6M,oBAAqB5U,EAAkB,sBAAuByH,EAAkBM,oBAChF8M,uBAAwB7U,EAAkB,2BAA4ByH,EAAkBM,oBACxF+M,sBAAuB9U,EAAkB,yBAA0ByH,EAAkBM,oBACrFgN,4BAA6B/U,EAAkB,gCAAiCyH,EAAkBM,oBAClGiN,cAAehV,EAAkB,gBAAiByH,EAAkBM,oBACpEkN,cAAejV,EAAkB,gBAAiByH,EAAkBM,oBACpEmN,SAAUlV,EAAkB,WAAYyH,EAAkBM,oBAC1DoN,4BAA6BnV,EAAkB,gCAAiCyH,EAAkBM,oBAClGqN,kBAAmBpV,EAAkB,oBAAqByH,EAAkBM,oBAC5EsN,qBAAsBrV,EAAkB,wBAAyByH,EAAkBM,oBACnFuN,iBAAkBtV,EAAkB,mBAAoByH,EAAkBM,oBAC1EwN,gCAAiCvV,EAAkB,mCAAoCyH,EAAkBM,oBACzGyN,QAASxV,EAAkB,UAAWyH,EAAkBM,oBACxD0N,sBAAuBzV,EAAkB,yBAA0ByH,EAAkBM,oBACrF2N,sBAAuB1V,EAAkB,yBAA0ByH,EAAkBM,oBACrF4N,aAAc3V,EAAkB,eAAgByH,EAAkBM,oBAClE6N,eAAgB5V,EAAkB,iBAAkByH,EAAkBM,oBACtE8N,OAAQ7V,EAAkB,SAAUyH,EAAkBM,oBACtD+N,qBAAsB9V,EAAkB,uBAAwByH,EAAkBM,oBAClFgO,iBAAkB/V,EAAkB,mBAAoByH,EAAkBM,oBAC1EiO,wBAAyBhW,EAAkB,2BAA4ByH,EAAkBM,oBACzFkO,WAAYjW,EAAkB,aAAcyH,EAAkBM,oBAC9DmO,eAAgBlW,EAAkB,iBAAkByH,EAAkBM,oBACtEoO,kBAAmBnW,EAAkB,oBAAqByH,EAAkBM,oBAC5EqO,YAAapW,EAAkB,cAAeyH,EAAkBM,oBAChEsO,WAAYrW,EAAkB,aAAcyH,EAAkBM,oBAC9DuO,qBAAsBtW,EAAkB,uBAAwByH,EAAkBM,oBAClFwO,UAAWvW,EAAkB,YAAayH,EAAkBM,oBAC5DyO,gBAAiBxW,EAAkB,kBAAmByH,EAAkBM,oBACxE0O,YAAazW,EAAkB,cAAeyH,EAAkBM,qBAEpE2O,sBACA,CACIC,eAAgB3W,EAAkB,WAAYyH,EAAkBa,cAChEsO,mBAAoB5W,EAAkB,qBAAsByH,EAAkBa,cAC9EuO,SAAU7W,EAAkB,WAAYyH,EAAkBa,cAC1DwO,cAAe9W,EAAkB,gBAAiByH,EAAkBa,cACpEyO,YAAa/W,EAAkB,cAAeyH,EAAkBa,cAChE0O,YAAahX,EAAkB,cAAeyH,EAAkBa,cAChE2O,YAAajX,EAAkB,cAAeyH,EAAkBa,cAChE4O,OAAQlX,EAAkB,SAAUyH,EAAkBa,cACtD6O,aAAcnX,EAAkB,gBAAiByH,EAAkBa,cACnE8O,oBAAqBpX,EAAkB,sBAAuByH,EAAkBa,cAChF+O,aAAcrX,EAAkB,eAAgByH,EAAkBa,cAClEgP,cAAetX,EAAkB,gBAAiByH,EAAkBa,cACpEiP,aAAcvX,EAAkB,eAAgByH,EAAkBa,cAClEkP,yBAA0BxX,EAAkB,2BAA4ByH,EAAkBa,cAC1FmP,6BAA8BzX,EAAkB,+BAAgCyH,EAAkBa,cAClGoP,aAAc1X,EAAkB,iBAAkByH,EAAkBa,cACpEqP,aAAc3X,EAAkB,eAAgByH,EAAkBa,cAClEsP,YAAa5X,EAAkB,UAAWyH,EAAkBa,cAC5DuP,UAAW7X,EAAkB,YAAayH,EAAkBa,cAC5DwP,WAAY9X,EAAkB,aAAcyH,EAAkBa,cAC9DyP,eAAgB/X,EAAkB,iBAAkByH,EAAkBa,cACtE0P,cAAehY,EAAkB,gBAAiByH,EAAkBa,eAExE2P,wBACA,CACIC,aAAclY,EAAkB,WAAYyH,EAAkBY,gBAC9D8P,WAAYnY,EAAkB,SAAUyH,EAAkBY,gBAC1D+P,iBAAkBpY,EAAkB,eAAgByH,EAAkBY,gBACtEgQ,gBAAiBrY,EAAkB,kBAAmByH,EAAkBY,gBACxEiQ,SAAUtY,EAAkB,OAAQyH,EAAkBY,gBACtDkQ,mBAAoBvY,EAAkB,iBAAkByH,EAAkBY,gBAC1EmQ,sBAAuBxY,EAAkB,yBAA0ByH,EAAkBY,gBACrFoQ,iBAAkBzY,EAAkB,eAAgByH,EAAkBY,iBAE1EqQ,oBACA,CACIC,kBAAmB3Y,EAAkB,oBAAqByH,EAAkBQ,YAC5E2Q,uBAAwB5Y,EAAkB,yBAA0ByH,EAAkBQ,YACtF4Q,qBAAsB7Y,EAAkB,uBAAwByH,EAAkBQ,YAClF6Q,2BAA4B9Y,EAAkB,8BAA+ByH,EAAkBQ,YAC/F8Q,qBAAsB/Y,EAAkB,wBAAyByH,EAAkBQ,YACnF+Q,cAAehZ,EAAkB,iBAAkByH,EAAkBQ,YACrEgR,SAAUjZ,EAAkB,WAAYyH,EAAkBQ,YAC1DiR,eAAgBlZ,EAAkB,iBAAkByH,EAAkBQ,aAE1EkR,sBACA,CACIC,eAAgBpZ,EAAkB,iBAAkByH,EAAkBO,cACtEqR,MAAOrZ,EAAkB,QAASyH,EAAkBO,cACpDsR,cAAetZ,EAAkB,gBAAiByH,EAAkBO,cACpEuR,iBAAkBvZ,EAAkB,mBAAoByH,EAAkBO,cAC1EwR,UAAWxZ,EAAkB,YAAayH,EAAkBO,cAC5DyR,sBAAuBzZ,EAAkB,0BAA2ByH,EAAkBO,cACtF0R,cAAe1Z,EAAkB,iBAAkByH,EAAkBO,cACrE2R,gBAAiB3Z,EAAkB,kBAAmByH,EAAkBO,cACxE4R,SAAU5Z,EAAkB,WAAYyH,EAAkBO,cAC1D6R,YAAa7Z,EAAkB,eAAgByH,EAAkBO,cACjE8R,0BAA2B9Z,EAAkB,4BAA6ByH,EAAkBO,cAC5F+R,cAAe/Z,EAAkB,gBAAiByH,EAAkBO,cACpEgS,QAASha,EAAkB,WAAYyH,EAAkBO,cACzDiS,QAASja,EAAkB,WAAYyH,EAAkBO,cACzDkS,0BAA2Bla,EAAkB,4BAA6ByH,EAAkBO,cAC5FmS,uBAAwBna,EAAkB,0BAA2ByH,EAAkBO,cACvF7R,UAAW6J,EAAkB,YAAayH,EAAkBO,cAC5DoS,cAAepa,EAAkB,iBAAkByH,EAAkBO,cACrEqS,cAAera,EAAkB,iBAAkByH,EAAkBO,gBAqChE7J,EAAqB,CAC9Bmc,iBA5cqB,CACrBC,QAAS,UACTC,MAAO,QACPC,YAAa,eACbC,MAAO,QACPC,cAAe,iBACfC,YAAa,cACbC,UAAW,YACXC,UAAW,YACXC,KAAM,QAocNtT,kBAAmBA,EACnBc,cAAeA,EACf5H,qBAAsBA,EACtBgL,sBAAuBA,EACvBqP,sBAnU0B,CAC1BC,OAAQ,EACR7kB,oBAAqB,EACrB8kB,KAAM,EACN5kB,QAAS,EACTC,SAAU,EACV4kB,aAAc,EACdC,KAAM,EACNC,SAAU,EACVC,qBAAsB,GA2TtBC,2BAvT+B,CAC/BC,UAAW,EACXC,OAAQ,EACRC,SAAU,EACVC,UAAW,EACXC,YAAa,EACbC,OAAQ,GACRC,aAAc,MAiTdjP,kBAAmBA,EACnBkP,kBAzCsB,CACtBC,QAAS,EACTC,MAAO,EACPC,aAAc,GAuCd3b,mBAnCuB,CACvB9L,UAAW,YACXyY,OAAQ,SACRiP,KAAM,OACNC,KAAM,OACNC,SAAU,WACVC,UAAW,aA8BX/a,0BAhT8B,CAC9Bgb,IAAK,IACLC,MAAO,IACPC,KAAM,IACNvP,OAAQ,IACR5B,SAAU,IACVoR,QAAS,KA2STxb,kBA3BsB,CACtByb,IAAK,MACLC,IAAK,MACLC,QAAS,WACTxD,MAAO,SAwBPjb,wBAmEJ,SAAiC0e,GAC7B,GAAIvV,EAAoCuV,GACpC,OAAOvV,EAAoCuV,IApE/C7c,qBAWJ,SAA8BJ,GAC1B,GAAIA,GAAYyH,IACZzH,EAAWA,EAASlI,mBAC0B3N,IAA1Csd,EAA4BzH,IAC5B,OAAOyH,EAA4BzH,GAI3C,OAAO,MAlBPW,0BA2BJ,SAAmC9W,EAAMsB,GACrC,GAAItB,GAAQsB,EACR,IAAK,MAAM+xB,KAAQx2B,OAAOy2B,KAAKtzB,GAC3B,GAAqB,iBAATsB,GAAqBtB,EAAKqzB,KAAU/xB,EAAM2M,eAAkBjO,EAAKqzB,KAAU/xB,EACnF,OAAOtB,EAAKqzB,GAKxB,OAAO,MAnCPE,qBA2EJ,SAA8BH,GAC1B,OAAItV,EAAqCsV,GAC9BtV,EAAqCsV,GAErCnR,EAAsBlX,WA9EjCyoB,oBAzBwB,CACxBC,MAAO,QACPC,MAAO,aACPC,OAAQ,SACRjR,KAAM,OACNkR,WAAY,eAiEhB,SAAStd,EAAkBH,EAAU0d,GACjC,GAAI1d,EAAU,CACV,MAAM/V,EAAO+V,EAASlI,cAEhB6lB,EAA0B,CAAEtd,SAAUpW,EAAMqW,SADpCod,GAAY9V,EAAkBC,aAI5C,OAFAJ,EAA4Bxd,GAAQ0zB,EAE7BA,EAGX,OAAO,KAgCPjW,EAAoCgB,EAAcc,YAAc1I,EAAqBqK,IACrFzD,EAAoCgB,EAAcS,WAAarI,EAAqBqK,IACpFzD,EAAoCgB,EAActS,kBAAoB0K,EAAqB1K,iBAC3FsR,EAAoCgB,EAAcO,gBAAkBnI,EAAqByK,mBACzF7D,EAAoCgB,EAAcQ,UAAYpI,EAAqBuK,cAQnF1D,EAAqCe,EAAcc,YAAcsC,EAAsBc,QACvFjF,EAAqCe,EAAcS,WAAa2C,EAAsBa,OACtFhF,EAAqCe,EAAce,QAAUqC,EAAsBrC,OACnF9B,EAAqCe,EAAcgB,UAAYoC,EAAsBpC,SACrF/B,EAAqCe,EAAcuB,MAAQ6B,EAAsB7B,KACjFtC,EAAqCe,EAAcwB,SAAW4B,EAAsB5B,QACpFvC,EAAqCe,EAAcyB,QAAU2B,EAAsB3B,OACnFxC,EAAqCe,EAAc0B,WAAa0B,EAAsB1B,UACtFzC,EAAqCe,EAAc2B,MAAQyB,EAAsBzB,KACjF1C,EAAqCe,EAAc4B,QAAUwB,EAAsBxB,OACnF3C,EAAqCe,EAAc6B,YAAcuB,EAAsBvB,WACvF5C,EAAqCe,EAAc8B,QAAUsB,EAAsBtB,OACnF7C,EAAqCe,EAAcuC,MAAQa,EAAsBb,KACjFtD,EAAqCe,EAAcwC,QAAUY,EAAsBZ,Q,6BC3lBvF,8HAoGA,MAAM0S,EA8EF,YAAoBC,GAlEZ,KAAAC,qBAAsB,EAmE1B7wB,KAAK8wB,mBAAmBF,GAnD5B,aAA8B,OAAO5wB,KAAK+wB,OAE1C,gBAAiC,OAAO/wB,KAAKgxB,UAC7C,cAAqB9yB,GAAiB8B,KAAKgxB,UAAY9yB,EAEvD,qBAAsC,OAAO8B,KAAKixB,gBAAkB,GACpE,mBAA0B/yB,GAAiB8B,KAAKixB,eAAiB/yB,EAEjE,qBAA+C,OAAO8B,KAAKoX,eAC3D,mBAA0BlZ,GAA0B8B,KAAKoX,eAAiBlZ,EAE1E,0BAA4C,OAAO8B,KAAK6wB,oBAExD,qBAAuC,OAAO7wB,KAAKkxB,eACnD,mBAA0BhzB,GAAkB8B,KAAKkxB,eAAiBhzB,EAElE,gBAAkC,OAAO8B,KAAKmxB,UAC9C,cAAqBjzB,GAAkB8B,KAAKmxB,UAAYjzB,EAExD,iBAAmC,OAAO8B,KAAKoxB,WAE/C,mBAAqC,OAAOpxB,KAAKqxB,aACjD,iBAAwBnzB,GAAkB8B,KAAKqxB,aAAenzB,EAE9D,2BAA6C,OAAO8B,KAAKsxB,qBACzD,yBAAgCpzB,GAAkB8B,KAAKsxB,qBAAuBpzB,EAE9E,2BAA6C,OAAO8B,KAAKuxB,qBAMzD,0BAA2C,OAAOvxB,KAAKwxB,oBAGvD,qBAAsC,OAAOxxB,KAAK+X,eAClD,mBAA0B7Z,GAAiB8B,KAAK+X,eAAiB7Z,EAEjE,kBAAoC,OAAO8B,KAAKyxB,YAEhD,eAAiC,OAAOzxB,KAAKgP,SAC7C,aAAoB9Q,GAAkB8B,KAAKgP,SAAW9Q,EAEtD,eAAsBA,GAAiB8B,KAAK+wB,OAAS7yB,EAc9C,qBAAiC,OAAOyyB,EAASe,YAAcf,EAASe,UAAY,IAAIf,GAOxF,qBAAqBC,GAGxB,OAFAD,EAASe,UAAY,IAAIf,EAASC,GAClCe,EAAWhB,EAASe,UACbf,EAASe,UAOb,mBAAmBd,GAEtB,GAAIA,EAGA,YADA5wB,KAAK4xB,mBAAmBhB,GAQ5B,GAJA5wB,KAAK6xB,eAAiB,cACtB7xB,KAAK8xB,YAAc,cAAc,YAA6B,IAAehb,MAAM,GAAK,KACxF9W,KAAK+xB,YAAc,cAAc,YAA6B,IAAe30B,MAAM,GAAK,MAEnF4C,KAAK8xB,cAAgB9xB,KAAK+xB,YAC3B,OAMJ/xB,KAAKgyB,oBAIDhyB,KAAK8xB,YAAY9uB,aAAa,IAA0BgU,wBACxDhX,KAAKoxB,YAAa,EAClBpxB,KAAKiyB,yBACEhzB,QAAUA,OAAOmO,WAAanO,OAAOmO,UAAU8kB,eAAiBjzB,OAAOmO,UAAU8kB,cAAcC,aACtGnyB,KAAKuxB,sBAAuB,EAC5BvxB,KAAKoyB,2BAIT,MAAMC,EAAWryB,KAAK8xB,YAAY9uB,aAAa,KAC/ChD,KAAK+wB,OAASsB,GAAYA,EAASxnB,eAAiB,GAEpD,MAAMmmB,EAAYhxB,KAAK8xB,YAAY9uB,aAAa,KAChDhD,KAAKgxB,UAAYA,GAAaA,EAAUsB,qBAAuB,GAE/DtyB,KAAKuyB,6BAGL,MAAMC,EAAaxyB,KAAK+xB,YAAY/uB,aAAa,KACjD,GAAIwvB,EAAY,CACZ,MAAMC,EAAmD,YAAaD,GACtExyB,KAAK+X,eAAiB0a,EAAOC,WAC7B1yB,KAAKkxB,eAAqC,IAApBuB,EAAOE,UAI7B,IAAWC,wBAAwB,oBAAqB5yB,KAAK6xB,iBAC7D,IAAWe,wBAAwB,YAAa5yB,KAAK6xB,mBACrD7xB,KAAKmxB,WAAY,GAIrBnxB,KAAK6yB,kBAGL7yB,KAAK8yB,0BAMF,qCACH,MAAMC,EAAmB,IAAaC,QAAQ,IAA0B7b,8BAAgC,GAClG8b,EAAoB,YAAaF,GAEvC,OAAQE,GAAqBA,EAAkBtB,EAASuB,eAAeC,WAAc,KAOjF,mBAAmBvC,GACvB5wB,KAAKoX,eAAkC,YAAawZ,EAAWxZ,gBAE/DpX,KAAKozB,WAAWxC,EAAWyC,YAE3BrzB,KAAKuyB,6BAELvyB,KAAK+wB,OAASH,EAAWyB,UAAYzB,EAAWyB,SAASxnB,eAAiB,GAC1E7K,KAAKgxB,UAAYJ,EAAWI,WAAaJ,EAAWI,UAAUsB,qBAAuB,GAGrFtyB,KAAK6yB,kBAGL7yB,KAAK8yB,0BAMD,oBAEJ9yB,KAAKozB,WAAWpzB,KAAK+xB,YAAY/uB,aAAa,MAE9C,MAAMswB,EAAqBtzB,KAAK+xB,YAAY/uB,aAAa,KACzD,IAAKswB,EACD,OAIJ,GADAtzB,KAAKoX,eAAkC,YAAakc,IAC/CtzB,KAAKoX,eACN,OAGJ,MAAM,SAAE+b,GAAanzB,KAAKoX,eAK1B,IAAK+b,EAAU,CACX,MAAMI,EAAuBvzB,KAAK+xB,YAAY/uB,aAAa,KAC3DhD,KAAKoX,eAAe+b,SAAmC,MAAxBI,OAA+Br2B,EAAYq2B,EAK9E,GAAIJ,EACA,IACI,MAAMK,EAAiB,IAAaC,UAA2B,IAAqBnZ,eAAiB,GACrGta,KAAKwxB,oBAAsBgC,EAAeL,GAG1C,MAAQO,WAAYC,GAAsB3zB,KAAKoX,eAC3Cuc,GAAqB3zB,KAAKwxB,sBAAwBmC,IAClDH,EAAeL,GAAYQ,EAAkBC,EAC7C,IAAaC,UAAU,IAAqBvZ,aAAckZ,IAEhE,SACE,IAAOM,IAAO9zB,KAAK+zB,YAAR,uDASf,wBACJ,MAAMC,EAAsB,IAAahB,QAAQ,IAA0B9b,mBACrE+c,EAA4B,YAAaD,GAG/C,IAAKC,EACD,OAGJ,MAAMC,EAA4BD,EAA0Bj0B,KAAKoX,eAAe+b,UAGhF,IAAKe,EACD,OAGJ,MAAMC,EAAuBD,EAA0C,eACjEE,EAAgBF,EAAgC,KAGtD,IAAKC,IAAyBC,EAC1B,OAKJ,MAAMC,EAAiBr0B,KAAKoX,eAAekd,YAOrCC,EAAqBv0B,KAAKoX,gBAAkBpX,KAAKoX,eAAesc,YAAc1zB,KAAKoX,eAAesc,WAAWE,EACnH5zB,KAAKoX,eAAiB+c,EAGtBn0B,KAAKoX,eAAesc,WAAaj6B,OAAO+6B,OAAOx0B,KAAKoX,eAAesc,YAAc,GAAI,CAAEE,EAAGW,IAO1Fv0B,KAAKoX,eAAekd,YAAcD,EAElCr0B,KAAKozB,WAAWgB,GAChBp0B,KAAKoyB,0BAMD,0BACJ,IAAKpyB,KAAKoX,eAAeqd,IACrB,OAGJ,MAAMC,EAA8B,YAAa,IAAa1B,QAAQ,IAA0B7b,+BAAiC,GAC3Hwd,EAAkDD,EAA4B10B,KAAKoX,eAAe+b,UAIxG,GAAIwB,GAAkCA,EAA8Bte,KAAOrW,KAAKoX,eAAeqd,IAC3FE,EAA8BC,gBAAiB,EAC/CF,EAA4B10B,KAAKoX,eAAe+b,UAAYwB,MACzD,CAEH,MAAME,EAAsC,CAAExe,GAAIrW,KAAKoX,eAAeqd,IAAKK,IAAI,IAAK3tB,MAAQ4tB,WAC5FL,EAA4B10B,KAAKoX,eAAe+b,UAAY0B,EAIhE,IAAaG,QAAQ,IAA0B7d,4BAA6BlU,KAAKoL,UAAUqmB,IAOvF,WAAWO,GAEfj1B,KAAKixB,iBAAmB,gBAAgBiE,KAAKD,IAAiB,IAAI,IAAM,IAAIpqB,cAMxE,kBAGJ7K,KAAKm1B,aAAen1B,KAAKoX,gBACrBpX,KAAKixB,gBACLjxB,KAAKixB,eAAemE,SA3VC,4BA4VrBp1B,KAAKoX,eAAeie,eAAiB,IAAiBC,WAMtD,6BAEJ,MAAMC,EAAa,IAAWC,mBAAmB,eAC3CC,EAAUF,EAAWG,KAAKC,GAAqB,QAAbA,EAAKn3B,KAC7CwB,KAAK6wB,oBAAuB4E,GAA6B,QAAlBA,EAAQv3B,MAG/C8B,KAAK41B,8BAA8BL,GAM/B,8BAA8BA,GAClC,GAAI,cAAsB1qB,cAAcuqB,SAAS,cAAgBG,EAAY,CACzE,MAAMM,EAAUN,EAAWG,KAAKC,GAAqB,YAAbA,EAAKn3B,KACzCq3B,IACA71B,KAAKixB,eAAiB4E,EAAQ33B,QAQlC,0BAIJ8B,KAAK81B,qBAAuB91B,KAAKixB,gBAAkBjxB,KAAKixB,eAAemE,SA9XrC,uBAqY9B,YAEJ,MAAO,aAAa,cAAc,GAAK,UAAUp1B,KAAK+xB,0BAA0B/xB,KAAK8xB,iBAItF,MAAMiE,EAAcpF,EAASqF,YAG7B,IAAIrE,EAAWhB,EAASqF,cAKFrF,EAASsF,e,+BC/etC,oVAKO,MAAMC,EAAoC,oBAAb,OAA2Bj3B,OAAO4V,SAASC,KAAO,GAMzEqhB,EAA0B,MAM1BC,EAA+B,OAM/BC,EAAmB,aAMnBC,EAAuB,mBAMvBC,EAAe,UAMfC,EAAa,QAgBbC,EAAiC,GAAGD,IAAaN,IAMjDQ,EAAgB,aAKhBC,EAAmB,Y,4ECvDzB,SAASC,EAAiBC,EAAqCj6B,EAAcgD,EAAak3B,GAC7F,IAAIC,OAAmB75B,EASvB,OARI25B,IAIIE,EAHCF,EAAU1d,gBAGA0d,EAAU1d,gBAAkB,IAAM0d,EAAUtiB,UAF5CsiB,EAAUtiB,WAMtB,CACH/V,IAAKu4B,EACLD,qBAAsBA,EACtBl6B,KAAMA,EACNoV,OAAQpS,GAST,SAASo3B,EAAeH,EAAqCI,GAGhE,OAAIJ,EACOA,EAAUK,MAAMC,SAASF,GAEzBG,EAAA,EAASpB,cAAckB,MAAMC,SAASF,G,YC1B9C,MAAe,EAclB,YACcr6B,EACFy6B,EACAC,GAFE,KAAA16B,OACF,KAAAy6B,YACA,KAAAC,oBAbZ,WACI,OAAQt3B,KAAKg3B,iBA+BT,iBACJ,OAAmC,YAAap3B,GAC5C,IC9CL,MAUH,cACII,KAAKu3B,aAAc,EAUhB,+BAA+BD,GAClC,QAASA,UAAkEA,EAAkBE,yBAM1F,SACHx3B,KAAKu3B,aAAc,EAOvB,8BACI,OAAOv3B,KAAKu3B,cDS6BC,wBAAwBx3B,KAAKs3B,mBAAoB,CAElF,MAAMG,EAAez3B,KAAK03B,qBACpBC,EAAmBF,GAAgBA,EAAaG,aAAa,SAAU53B,KAAKpD,MAAMi7B,YAElF,QAAEZ,EAAO,OAAE58B,GAAW2F,KAAK83B,kBAAkBl4B,GAuBnD,OApBAI,KAAKq3B,UAAUU,QAAQp6B,IACnB,IAEIA,EAAEq6B,SAASf,GACb,MAAO76B,GACL2C,QAAQ+0B,IAAI,2BAA2B7wB,KAAKoL,UAAU1Q,mBAAmBvB,KAI7E,GAAIuB,EAAEk5B,UAAW,CACb,MAAMoB,EAAsBrB,EAAiBj5B,EAAEk5B,UAAWqB,EAAA,EAAmBC,aAAc,QAAIj7B,GAC/F85B,EAAer5B,EAAEk5B,UAAWoB,MAIhCN,GACAA,IAIGt9B,KElEhB,MAAM,UAAwD,EASjE,YACIuC,EACAy6B,EACQR,EACRS,GAEAc,MAAMx7B,EAAMy6B,EAAWC,GAHf,KAAAT,YAWF,kBAAkBj3B,GACxB,MAAMq3B,EAAUL,EAAiB52B,KAAK62B,UAAW72B,KAAKpD,KAAMgD,OAAM1C,GAElE,MAAO,CAAE+5B,UAAS58B,OADH28B,EAAeh3B,KAAK62B,UAAWI,IAOxC,qBACN,OAAOj3B,KAAK62B,UAAUY,c,YClCvB,MAAM,UAA8D,EASvE,YACI76B,EACAy6B,EACQP,EACRQ,GAEAc,MAAMx7B,EAAMy6B,EAAWC,GAHf,KAAAR,uBAWF,kBAAkBl3B,GACxB,MAAMq3B,EAAUL,OAAiB15B,EAAW8C,KAAKpD,KAAMgD,EAAMI,KAAK82B,sBAElE,MAAO,CAAEG,UAAS58B,OADH28B,OAAe95B,EAAW+5B,IAOnC,qBACN,OAAO,YAAmB,qBAAsBj3B,KAAK82B,sBAAwB,Y,YC/B9E,MAAM,EAYT,YAAmBl6B,GAAA,KAAAA,OAPX,KAAAy6B,UAAwB,GAkBzB,gBAAgBR,EAA8CS,GACjE,IAAIe,OAA8Cn7B,EAQlD,GALIm7B,EAFuB,iBAAhB,EAEa,IAASrC,cAAcsC,YAAYzB,UAAUA,GAE7CA,EAGpBwB,EACA,OAAO,IAAI,EAA+Br4B,KAAKpD,KAAMoD,KAAKq3B,UAAWgB,EAAmBf,GAYzF,sBAAsBR,EAA+BQ,GACxD,OAAO,IAAI,EAAqCt3B,KAAKpD,KAAMoD,KAAKq3B,UAAWP,EAAsBQ,GAQ9F,iBAAiBU,EAA0BnB,GAC9C72B,KAAKq3B,UAAUv9B,KAAK,CAAEk+B,SAAUA,EAAUnB,UAAWA,IAMlD,kBACH72B,KAAKq3B,UAAU79B,OAAS,K,8BC/EhC,i8FAgBA,MAAM++B,EAAW,IAASC,MAQpBC,EAA0B,CAC5BC,MAA+B,oBAAjBC,aACR,GACAA,cAGH,SAASC,EAA2BC,GACvCp/B,OAAO+6B,OAAOiE,EAAII,GAGf,SAASC,IACZ,OAAOL,EAUJ,SAASM,EAAYC,EAAqBj8B,EAAiBk8B,GAC9D,OAAO,OAAP,wBACOD,GAAS,CACZj8B,QAASA,GAAWi8B,EAAUj8B,QAC9B07B,GAAIQ,EACE,OAAD,wBAAMD,EAAUP,IAAE,CAAEQ,kBACnBD,EAAUP,KAWV,IAASS,QAHhB,MAQMC,EAA2B,CACpC9iB,GAAI,KACJyD,OAAQ,mBACRye,WACAE,MA6FSW,GA3DK,IAASF,QA0CT,IAASA,QAiBoB,CAC3CG,YAAuB,CACnBhjB,GAAI,KACJyD,OAL+B,4BAM/Bye,WACAE,MAGJa,qCAAgD,CAC5CjjB,GAAI,KACJyD,OAZ+B,4BAa/Bye,WACAE,MAGJc,gCAA2C,CACvCljB,GAAI,KACJyD,OAnB+B,4BAoB/Bye,SAAU,IAASiB,WACnBf,MAGJgB,gCAA2C,CACvCpjB,GAAI,KACJyD,OA1B+B,4BA2B/Bye,SAAU,IAASiB,WACnBf,MAGJiB,oCAA+C,CAC3CrjB,GAAI,KACJyD,OAjC+B,4BAkC/Bye,WACAE,MAGJkB,wBAAmC,CAC/BtjB,GAAI,KACJyD,OAxC+B,4BAyC/Bye,WACAE,MAIJmB,+BAA0C,CACtCvjB,GAAI,KACJyD,OAhD+B,4BAiD/Bye,WACAE,MAGJoB,oBAA+B,CAC3BxjB,GAAI,KACJyD,OAvD+B,4BAwD/Bye,SAAU,IAASW,QACnBT,QA0BKqB,EAA0B,CAEnCC,wCAAmD,CAC/C1jB,GAAI,KACJyD,OAP6B,wBAQ7Bye,SAAU,IAASW,QACnBT,MAGJuB,uCAAkD,CAC9C3jB,GAAI,KACJyD,OAd6B,wBAe7Bye,WACAE,MAGJwB,8CAAyD,CACrD5jB,GAAI,KACJyD,OArB6B,wBAsB7Bye,WACAE,MAGJyB,iDAA4D,CACxD7jB,GAAI,KACJyD,OA7ByB,8BA8BzBye,WACAE,MAGJ0B,0BAAqC,CACjC9jB,GAAI,KACJyD,OAnC6B,wBAoC7Bye,WACAE,MAGJ2B,8BAAyC,CACrC/jB,GAAI,KACJyD,OAzCgC,iCA0ChCye,SAAU,IAASW,QACnBT,OAIK4B,EAA+B,CACxChkB,GAAI,KACJyD,OAlDiC,wBAmDjCye,WACAE,MAGE6B,EAAkB,qBAEXC,EAAiB,CAC1BC,6CAAwD,CACpDnkB,GAAI,KACJyD,OAAQwgB,EACR/B,WACAE,MAGJgC,mCAA8C,CAC1CpkB,GAAI,KACJyD,OAAQwgB,EACR/B,WACAE,MAGJiC,0CAAqD,CACjDrkB,GAAI,KACJyD,OAAQwgB,EACR/B,WACAE,MAGJkC,cAAyB,CACrBtkB,GAAI,KACJyD,OAAQwgB,EACR/B,SAAU,IAASiB,WACnBf,MAGJmC,yBAAoC,CAChCvkB,GAAI,KACJyD,OAAQwgB,EACR/B,SAAU,IAASiB,WACnBf,MAGJoC,eAA0B,CACtBxkB,GAAI,KACJyD,OAAQwgB,EACR/B,WACAE,MAGJqC,qBAAgC,CAC5BzkB,GAAI,KACJyD,OAAQwgB,EACR/B,WACAE,MAIJsC,2BAAsC,CAClC1kB,GAAI,KACJyD,OAAQwgB,EACR/B,SAAU,IAASW,QACnBT,OAIKuC,EAA6C,CACtD3kB,GAAI,KACJyD,OAAQwgB,EACR/B,WACAE,MAISwC,EAAiC,CAC1C/L,QAAmB,CACf7Y,GAAI,KACJyD,OAJmC,8BAKnCye,WACAE,OA4LKyC,GAzEC,IAAShC,QAQT,IAASA,QAwBT,IAASA,QASL,IAASA,QAQT,IAASA,QAwBI,CAE3BiC,0BAAqC,CACjC9kB,GAAI,KACJyD,OALiC,4BAMjCye,WACAE,MAIJ2C,+BAA0C,CACtC/kB,GAAI,KACJyD,OAbiC,4BAcjCye,WACAE,MAIJ4C,2BAAsC,CAClChlB,GAAI,KACJyD,OArBiC,4BAsBjCye,WACAE,MAIJ6C,gCAA2C,CACvCjlB,GAAI,KACJyD,OA7BiC,4BA8BjCye,WACAE,MAIJ8C,yBAAoC,CAChCllB,GAAI,KACJyD,OArCiC,4BAsCjCye,WACAE,MAIJ+C,8BAAyC,CACrCnlB,GAAI,KACJyD,OA7CiC,4BA8CjCye,WACAE,MAIJgD,2BAAsC,CAClCplB,GAAI,KACJyD,OAAQ,4BACRye,WACAE,MAIJiD,mCAA8C,CAC1CrlB,GAAI,KACJyD,OAAQ,0BACRye,WACAE,MAIJkD,4BAAuC,CACnCtlB,GAAI,KACJyD,OAAQ,0BACRye,WACAE,MAEJmD,oCAA+C,CAC3CvlB,GAAI,KACJyD,OAAQ,0BACRye,WACAE,MAEJoD,4BAAuC,CACnCxlB,GAAI,KACJyD,OAAQ,0BACRye,WACAE,MAEJqD,yCAAoD,CAChDzlB,GAAI,KACJyD,OAAQ,6BACRye,WACAE,MAEJsD,0CAAqD,CACjD1lB,GAAI,KACJyD,OAAQ,6BACRye,WACAE,MAEJuD,6BAAwC,CACpC3lB,GAAI,KACJyD,OAAQ,6BACRye,WACAE,MAEJwD,+BAA0C,CACtC5lB,GAAI,KACJyD,OAAQ,6BACRye,WACAE,QAMKyD,EAAiB,CAE1BC,0BAAqC,CACjC9lB,GAAI,KACJyD,OANuB,yBAOvBye,WACAE,MAIJ2D,4BAAuC,CACnC/lB,GAAI,KACJyD,OAduB,yBAevBye,WACAE,MAIJ4D,gCAA2C,CACvChmB,GAAI,KACJyD,OArB0B,2BAsB1Bye,WACAE,MAIJ6D,mCAA8C,CAC1CjmB,GAAI,KACJyD,OA7B0B,2BA8B1Bye,WACAE,MAIJ8D,qCAAgD,CAC5ClmB,GAAI,KACJyD,OArC0B,2BAsC1Bye,WACAE,MAIJ+D,4CAAuD,CACnDnmB,GAAI,KACJyD,OA7C0B,2BA8C1Bye,WACAE,OAIKgE,EAAqB,CAE9BC,eAA0B,CACtBrmB,GAAI,KACJyD,OAAQ,4BACRye,WACAE,MAGJkE,qBAAgC,CAC5BtmB,GAAI,KACJyD,OAAQ,4BACRye,WACAE,OA0BKmE,GAXK,IAAS1D,QAWS,CAEhC2D,+BAA0C,CACtCxmB,GAAI,KACJyD,OAAQ,kBACRye,WACAE,QAkVKqE,GAzSK,IAAS5D,QAQT,IAASA,QA4PT,IAASM,WAqCW,CAClCuD,gBAA2B,CACvB1mB,GAAI,KACJkiB,SAAU,IAASW,QACnBpf,OAL0B,uBAM1B2e,MAEJuE,aAAwB,CACpB3mB,GAAI,KACJkiB,SAAU,IAASW,QACnBpf,OAX0B,uBAY1B2e,QA+CKwE,EAAqB,CAC9BC,aAAwB,CACpB7mB,GAAI,KACJyD,OALa,gBAMbye,WACAE,MAEJ0E,aAAwB,CACpB9mB,GAAI,KACJyD,OAXa,gBAYbye,SAAU,IAASW,QACnBT,MAEJ2E,kBAA6B,CACzB/mB,GAAI,KACJyD,OAjBa,gBAkBbye,SAAU,IAASW,QACnBT,MAEJ4E,gCAA2C,CACvChnB,GAAI,KACJyD,OAxBoB,yBAyBpBye,WACAE,MAEJ6E,eAA0B,CACtBjnB,GAAI,KACJyD,OA5Ba,mBA6Bbye,WACAE,MAEJ8E,kBAA6B,CACzBlnB,GAAI,KACJyD,OAlCa,mBAmCbye,WACAE,MAEJ+E,oBAA+B,CAC3BnnB,GAAI,KACJyD,OA1CoB,yBA2CpBye,WACAE,MAEJgF,wBAAmC,CAC/BpnB,GAAI,KACJyD,OAhDoB,yBAiDpBye,WACAE,MAEJiF,4BAAuC,CACnCrnB,GAAI,KACJyD,OAtDoB,yBAuDpBye,WACAE,MAEJkF,gBAA2B,CACvBtnB,GAAI,KACJyD,OA1Da,mBA2Dbye,WACAE,MAEJmF,yBAAoC,CAChCvnB,GAAI,KACJyD,OAhEa,mBAiEbye,WACAE,OAOKoF,EAAyB,CAClCC,wBAAmC,CAC/BznB,GAAI,KACJyD,OAL2B,sBAM3Bye,WACAE,MAEJsF,2BAAsC,CAClC1nB,GAAI,KACJyD,OAVsB,iBAWtBye,WACAE,MAEJuF,qBAAgC,CAC5B3nB,GAAI,KACJyD,OAhBsB,iBAiBtBye,WACAE,MAEJwF,uBAAkC,CAC9B5nB,GAAI,KACJyD,OAxBiC,6BAyBjCye,WACAE,MAEJyF,mBAA8B,CAC1B7nB,GAAI,KACJyD,OA9BiC,6BA+BjCye,WACAE,MAEJ0F,oBAA+B,CAC3B9nB,GAAI,KACJyD,OApCiC,6BAqCjCye,WACAE,OAqEK2F,EAA4B,CACrCC,2CAAsD,CAClDhoB,GAAI,KACJyD,OAL2B,gCAM3Bye,WACAE,MAGJ6F,yBAAoC,CAChCjoB,GAAI,KACJyD,OAZ2B,gCAa3Bye,WACAE,OAKK8F,EAAkB,CAC3BC,aAAwB,CACpBnoB,GAAI,KACJyD,OAJoB,yBAKpBye,WACAE,MAGJgG,kBAA6B,CACzBpoB,GAAI,KACJyD,OAXoB,yBAYpBye,WACAE,MAGJiG,iBAA4B,CACxBroB,GAAI,KACJyD,OAAQ,oBACRye,WACAE,OAaKkG,EAAmB,CAE5BC,8BAAyC,CACrCvoB,GAAI,KACJyD,OAAQ,iBACRye,WACAE,MAGJoG,0BAAqC,CACjCxoB,GAAI,KACJyD,OAAQ,6BACRye,WACAE,MAGJqG,4BAAuC,CACnCzoB,GAAI,KACJyD,OAAQ,8BACRye,WACAE,MAGJsG,yBAAoC,CAChC1oB,GAAI,KACJyD,OAAQ,8BACRye,WACAE,OA6FKuG,GAnDK,IAASxF,WAMT,IAASA,WAMT,IAASA,WAMT,IAASA,WAMT,IAASA,WAYT,IAASN,QAeQ,CAC/B+F,yBAAoC,CAChC5oB,GAAI,KACJyD,OAJQ,aAKRye,WACAE,QA+BKyG,EAA8C,CAEvDC,oBAAqB,CACjB9oB,GAAI,KACJyD,OAAQ,uBACRye,WACAE,OAIK2G,EAAuB,CAEhCC,6BAAwC,CACpChpB,GAAI,KACJyD,OAAQ,wBACRye,WACAE,MAIJiE,eAA0B,CACtBrmB,GAAI,KACJyD,OAAQ,wBACRye,WACAE,MAIJ6G,4BAAuC,CACnCjpB,GAAI,KACJyD,OAAQ,kBACRye,WACAE,MAIJ8G,yBAAoC,CAChClpB,GAAI,KACJyD,OAAQ,2BACRye,WACAE,MAIJ+G,eAA0B,CACtBnpB,GAAI,KACJyD,OAAQ,UACRye,WACAE,MAIJgH,oBAA+B,CAC3BppB,GAAI,KACJyD,OAAQ,iCACRye,WACAE,OAkCKiH,EAAiC,CAE1CC,sCAAiD,CAC7CtpB,GAAI,KACJyD,OAPyC,oCAQzCye,SAAU,IAASW,QACnBT,MAGJmH,oCAA+C,CAC3CvpB,GAAI,KACJyD,OAdyC,oCAezCye,SAAU,IAASW,QACnBT,MAGJoH,kCAA6C,CACzCxpB,GAAI,KACJyD,OApBgC,2BAqBhCye,SAAU,IAASW,QACnBT,MAGJqH,mCAA8C,CAC1CzpB,GAAI,KACJyD,OA1B6C,wCA2B7Cye,SAAU,IAASW,QACnBT,MAGJsH,0CAAqD,CACjD1pB,GAAI,KACJyD,OAjC6C,wCAkC7Cye,SAAU,IAASW,QACnBT,MAGJuH,gCAA2C,CACvC3pB,GAAI,KACJyD,OAxC6C,wCAyC7Cye,SAAU,IAASW,QACnBT,MAGJwH,8BAAyC,CACrC5pB,GAAI,KACJyD,OA/C6C,wCAgD7Cye,SAAU,IAASW,QACnBT,MAGJyH,kCAA6C,CACzC7pB,GAAI,KACJyD,OAvDgC,2BAwDhCye,SAAU,IAASW,QACnBT,MAGJ0H,+BAA0C,CACtC9pB,GAAI,KACJyD,OA9DgC,2BA+DhCye,SAAU,IAASW,QACnBT,MAGJ2H,sCAAiD,CAC7C/pB,GAAI,KACJyD,OApE6C,wCAqE7Cye,SAAU,IAASW,QACnBT,MAGJ4H,uCAAkD,CAC9ChqB,GAAI,KACJyD,OA3E6C,wCA4E7Cye,SAAU,IAASW,QACnBT,OAIK6H,EAAiC,CAC1CC,yCAAoD,CAChDlqB,GAAI,KACJyD,OAAQ,qCACRye,WACAE,OAIK+H,EAA2B,CAEpCC,qBAAgC,CAC5BpqB,GAAI,KACJyD,OAAQ,+BACRye,WACAE,MAIJiI,0BAAqC,CACjCrqB,GAAI,KACJyD,OAAQ,+BACRye,WACAE,MAIJkI,uBAAkC,CAC9BtqB,GAAI,KACJyD,OAAQ,+BACRye,WACAE,MAIJmI,sBAAiC,CAC7BvqB,GAAI,KACJyD,OAAQ,+BACRye,WACAE,OA8MKoI,GAtLK,IAAS3H,QAWT,IAASA,QAWT,IAASA,QA4BT,IAASA,QAMT,IAASA,QA8HU,CAEjC4H,sBAAiC,CAC7BzqB,GAAI,MACJyD,OALuB,4BAMvBye,WACAE,MAIJsI,qBAAgC,CAC5B1qB,GAAI,MACJyD,OAbuB,4BAcvBye,WACAE,MAIJuI,uBAAkC,CAC9B3qB,GAAI,MACJyD,OArBuB,4BAsBvBye,WACAE,QAgDKwI,EAAqB,CAE9BC,uBAAkC,CAC9B7qB,GAAI,MACJyD,OAAQ,yBACRye,WACAE,OAqBK0I,EAAwB,CAEjCC,sBAAiC,CAC7B/qB,GAAI,MACJyD,OALuB,4BAMvBye,WACAE,MAIJ4I,qBAAgC,CAC5BhrB,GAAI,MACJyD,OAbuB,4BAcvBye,WACAE,MAIJ6I,+BAA0C,CACtCjrB,GAAI,MACJyD,OArBuB,4BAsBvBye,WACAE,MAIJ8I,yBAAoC,CAChClrB,GAAI,MACJyD,OA7BuB,4BA8BvBye,WACAE,OAIK+I,EAA2B,CAEpCC,4BAAuC,CACnCprB,GAAI,KACJyD,OAAQ,kCACRye,WACAE,MAGJiJ,qCAAgD,CAC5CrrB,GAAI,MACJyD,OAAQ,kCACRye,WACAE,MAMJkJ,0BAAqC,CACjCtrB,GAAI,MACJyD,OAAQ,+BACRye,WACAE,MAMJmJ,kCAA6C,CACzCvrB,GAAI,MACJyD,OAAQ,+BACRye,WACAE,MAMJoJ,sBAAiC,CAC7BxrB,GAAI,MACJyD,OAAQ,+BACRye,WACAE,OAOKqJ,EAAqB,CAE9BC,6BAAwC,CACpC1rB,GAAI,MACJyD,OAP2B,yBAQ3Bye,WACAE,MAGJuJ,qCAAgD,CAC5C3rB,GAAI,MACJyD,OAd2B,yBAe3Bye,WACAE,MAGJwJ,sCAAiD,CAC7C5rB,GAAI,MACJyD,OArB2B,yBAsB3Bye,WACAE,MAGJyJ,8BAAyC,CACrC7rB,GAAI,MACJyD,OA5B2B,yBA6B3Bye,WACAE,MAGJ0J,0BAAqC,CACjC9rB,GAAI,MACJyD,OAnC2B,yBAoC3Bye,WACAE,MAGJ2J,4BAAuC,CACnC/rB,GAAI,MACJyD,OA1C2B,yBA2C3Bye,WACAE,MAGJ4J,6BAAwC,CACpChsB,GAAI,MACJyD,OAjD2B,yBAkD3Bye,WACAE,MAGJ6J,4BAAuC,CACnCjsB,GAAI,MACJyD,OAxD2B,yBAyD3Bye,WACAE,MAGJ8J,4BAAuC,CACnClsB,GAAI,MACJyD,OA7DuB,qBA8DvBye,WACAE,MAGJ+J,mCAA8C,CAC1CnsB,GAAI,MACJyD,OAtE2B,yBAuE3Bye,WACAE,MAGJgK,wCAAmD,CAC/CpsB,GAAI,MACJyD,OA7E2B,yBA8E3Bye,WACAE,MAGJiK,oCAA+C,CAC3CrsB,GAAI,MACJyD,OApF2B,yBAqF3Bye,WACAE,MAGJkK,sCAAiD,CAC7CtsB,GAAI,MACJyD,OA3F2B,yBA4F3Bye,WACAE,MAGJmK,sCAAiD,CAC7CvsB,GAAI,MACJyD,OAlG2B,yBAmG3Bye,WACAE,MAGJoK,wCAAmD,CAC/CxsB,GAAI,MACJyD,OAzG2B,yBA0G3Bye,WACAE,MAGJqK,4BAAuC,CACnCzsB,GAAI,MACJyD,OAhH2B,yBAiH3Bye,WACAE,MAGJsK,kCAA6C,CACzC1sB,GAAI,MACJyD,OAvH2B,yBAwH3Bye,WACAE,MAGJuK,uCAAkD,CAC9C3sB,GAAI,MACJyD,OA9H2B,yBA+H3Bye,WACAE,MAGJwK,mCAA8C,CAC1C5sB,GAAI,MACJyD,OArI2B,yBAsI3Bye,WACAE,MAGJyK,qCAAgD,CAC5C7sB,GAAI,MACJyD,OA5I2B,yBA6I3Bye,WACAE,MAGJ0K,qCAAgD,CAC5C9sB,GAAI,MACJyD,OAnJ2B,yBAoJ3Bye,WACAE,MAGJ2K,kCAA6C,CACzC/sB,GAAI,MACJyD,OA1J2B,yBA2J3Bye,WACAE,MAGJ4K,gCAA2C,CACvChtB,GAAI,MACJyD,OAhKmB,gBAiKnBye,WACAE,MAGJ6K,6BAAwC,CACpCjtB,GAAI,MACJyD,OAvKmB,gBAwKnBye,WACAE,MAGJ8K,8BAAyC,CACrCltB,GAAI,MACJyD,OA9KmB,gBA+KnBye,WACAE,OAKK+K,EAA8B,CAGvCC,4BAAuC,CACnCptB,GAAI,KACJyD,OAAQ,wBACRye,WACAE,MAIJiL,gBAA2B,CACvBrtB,GAAI,MACJyD,OAAQ,wBACRye,WACAE,MAIJkL,wBAAmC,CAC/BttB,GAAI,MACJyD,OAAQ,wBACRye,WACAE,MAIJmL,yBAAoC,CAChCvtB,GAAI,MACJyD,OAAQ,wBACRye,WACAE,MAIJoL,oBAA+B,CAC3BxtB,GAAI,MACJyD,OAAQ,wBACRye,WACAE,MAIJqL,4BAAuC,CACnCztB,GAAI,MACJyD,OAAQ,wBACRye,SAAU,IAASW,QACnBT,OAKKsL,EAA4B,CAErCC,qBAAgC,CAC5B3tB,GAAI,MACJyD,OAAQ,sBACRye,SAAU,IAASiB,WACnBf,OAyFKwL,GAbC,IAASzK,WAQT,IAASA,WAKc,CACjCnjB,GAAI,MACJyD,OAAQ,gBACRye,SAAU,IAASiB,WACnBf,OAISyL,EAA4B,CACrC7tB,GAAI,MACJyD,OAAQ,+BACRye,WACAE,MAKS0L,EAA0B,CAEnCC,sBAAiC,CAC7B/tB,GAAI,MACJyD,OAL4B,kCAM5Bye,SAAU,IAASW,QACnBT,MAIJ4L,oBAA+B,CAC3BhuB,GAAI,MACJyD,OAb4B,kCAc5Bye,SAAU,IAASW,QACnBT,MAIJ6L,kBAA6B,CACzBjuB,GAAI,MACJyD,OArB4B,kCAsB5Bye,SAAU,IAASW,QACnBT,MAIJ8L,aAAwB,CACpBluB,GAAI,MACJyD,OA7B4B,kCA8B5Bye,WACAE,MAIJ+L,QAAmB,CACfnuB,GAAI,MACJyD,OArC4B,kCAsC5Bye,SAAU,IAASW,QACnBT,MAIJgG,kBAA6B,CACzBpoB,GAAI,MACJyD,OA7C4B,kCA8C5Bye,WACAE,OAiCKgM,EAAqB,CAI9BC,oBAA+B,CAC3BruB,GAAI,KACJyD,OAP6B,yBAQ7Bye,WACAE,MAMJkM,mBAA8B,CAC1BtuB,GAAI,MACJyD,OAjB6B,yBAkB7Bye,WACAE,MAMJmM,qBAAgC,CAC5BvuB,GAAI,MACJyD,OA3B6B,yBA4B7Bye,WACAE,MAMJoM,yBAAoC,CAChCxuB,GAAI,MACJyD,OArC6B,yBAsC7Bye,WACAE,MAMJqM,mBAA8B,CAC1BzuB,GAAI,MACJyD,OA/C6B,yBAgD7Bye,WACAE,MAMJsM,8BAAyC,CACrC1uB,GAAI,MACJyD,OAzD6B,yBA0D7Bye,WACAE,MAMJuM,kBAA6B,CACzB3uB,GAAI,MACJyD,OAnE6B,yBAoE7Bye,WACAE,OAkGKwM,EAAwB,CAEjCC,0BAAqC,CACjC7uB,GAAI,IACJyD,OAb4B,wBAc5Bye,WACAE,MAIJ0M,6BAAwC,CACpC9uB,GAAI,MACJyD,OArB4B,wBAsB5Bye,WACAE,MAIJ2M,mBAA8B,CAC1B/uB,GAAI,MACJyD,OAzBqC,gCA0BrCye,WACAE,MAIJ4M,uBAAkC,CAC9BhvB,GAAI,MACJyD,OAnCoC,gCAoCpCye,WACAE,MAIJ6M,kBAA6B,CACzBjvB,GAAI,MACJyD,OAAQ,+BACRye,WACAE,MAIJ8M,yBAAoC,CAChClvB,GAAI,MACJyD,OArD4B,wBAsD5Bye,WACAE,MAIJ+M,sCAAiD,CAC7CnvB,GAAI,MACJyD,OA1DqC,gCA2DrCye,WACAE,MAIJgN,mCAA8C,CAC1CpvB,GAAI,MACJyD,OAlEqC,gCAmErCye,WACAE,MAIJiN,kBAA6B,CACzBrvB,GAAI,MACJyD,OA1EqC,gCA2ErCye,WACAE,MAIJkN,6BAAwC,CACpCtvB,GAAI,MACJyD,OAlFqC,gCAmFrCye,WACAE,MAIJmN,oCAA+C,CAC3CvvB,GAAI,MACJyD,OA1FqC,gCA2FrCye,WACAE,MAIJoN,+BAA0C,CACtCxvB,GAAI,MACJyD,OArG4B,wBAsG5Bye,WACAE,MAIJqN,8CAAyD,CACrDzvB,GAAI,MACJyD,OA3GoC,gCA4GpCye,WACAE,MAIJsN,yBAAoC,CAChC1vB,GAAI,MACJyD,OArH4B,wBAsH5Bye,WACAE,MAIJuN,yBAAoC,CAChC3vB,GAAI,MACJyD,OAvHwB,yBAwHxBye,WACAE,MAIJwN,gCAA2C,CACvC5vB,GAAI,MACJyD,OA9HyB,YA+HzBye,WACAE,MAIJyN,aAAwB,CACpB7vB,GAAI,MACJyD,OAvIwB,yBAwIxBye,WACAE,MAIJ0N,eAA0B,CACtB9vB,GAAI,MACJyD,OArJ4B,wBAsJ5Bye,WACAE,MAIJ2N,gBAA2B,CACvB/vB,GAAI,MACJyD,OA7J4B,wBA8J5Bye,WACAE,MAIJ4N,8BAAyC,CACrChwB,GAAI,MACJyD,OAnKoC,gCAoKpCye,SAAU,IAASW,QACnBT,MAIJ6N,wBAAmC,CAC/BjwB,GAAI,MACJyD,OA5KsB,oBA6KtBye,WACAE,MAIJ8N,uBAAkC,CAC9BlwB,GAAI,MACJyD,OAzLqB,qBA0LrBye,WACAE,MAIJ+N,2BAAsC,CAClCnwB,GAAI,MACJyD,OAjMqB,qBAkMrBye,SAAU,IAASC,OAIvBiO,8BAAyC,CACrCpwB,GAAI,MACJyD,OAvMiC,kBAwMjCye,SAAU,IAASC,MACnBC,MAIJiO,wBAAmC,CAC/BrwB,GAAI,MACJyD,OA7MqC,iCA8MrCye,WACAE,MAIJkO,sBAAiC,CAC7BtwB,GAAI,MACJyD,OAzNoB,gBA0NpBye,WACAE,MAIJmO,2BAAsC,CAClCvwB,GAAI,MACJyD,OA9N8B,0BA+N9Bye,WACAE,OAIKoO,EAAwB,CAEjCC,uBAAkC,CAC9BzwB,GAAI,MACJyD,OAAQ,4BACRye,WACAE,OAKKsO,EAAmB,CAE5BC,gCAA2C,CACvC3wB,GAAI,MACJyD,OAAQ,0BACRye,SAAU,IAASW,QACnBT,MAIJwO,0BAAqC,CACjC5wB,GAAI,MACJyD,OAAQ,wBACRye,WACAE,MAMJyO,mBAA8B,CAC1B7wB,GAAI,MACJyD,OAvBgB,kBAwBhBye,SAAU,IAASiB,WACnBf,MAMJ0O,mBAA8B,CAC1B9wB,GAAI,MACJyD,OAjCgB,kBAkChBye,WACAE,MAMJ2O,wBAAmC,CAC/B/wB,GAAI,MACJyD,OAAQ,gBACRye,SAAU,IAASW,QACnBT,MAMJ4O,0BAAqC,CACjChxB,GAAI,MACJyD,OAAQ,gBACRye,SAAU,IAASW,QACnBT,OAuBK6O,EAAoB,CAI7BC,qBAAgC,CAC5BlxB,GAAI,MACJyD,OAPmB,cAQnBye,WACAE,MAMJ+O,oBAA+B,CAC3BnxB,GAAI,MACJyD,OAjBmB,cAkBnBye,WACAE,MAMJgP,eAA0B,CACtBpxB,GAAI,MACJyD,OA3BmB,cA4BnBye,WACAE,MAMJiP,sCAAiD,CAC7CrxB,GAAI,MACJyD,OArCmB,cAsCnBye,WACAE,MAMJkP,mBAA8B,CAC1BtxB,GAAI,MACJyD,OA/CmB,cAgDnBye,SAAU,IAASiB,WACnBf,MAMJmP,wBAAmC,CAC/BvxB,GAAI,MACJyD,OAzDmB,cA0DnBye,WACAE,MAMJoP,oCAA+C,CAC3CxxB,GAAI,MACJyD,OAnEmB,cAoEnBye,WACAE,MAMJqP,uCAAkD,CAC9CzxB,GAAI,MACJyD,OA7EmB,cA8EnBye,WACAE,MAMJsP,sCAAiD,CAC7C1xB,GAAI,MACJyD,OAvFmB,cAwFnBye,SAAU,IAASW,QACnBT,MAMJuP,yBAAoC,CAChC3xB,GAAI,MACJyD,OAjGmB,cAkGnBye,WACAE,MAMJwP,yBAAoC,CAChC5xB,GAAI,MACJyD,OA3GmB,cA4GnBye,WACAE,MAMJyP,oBAA+B,CAC3B7xB,GAAI,MACJyD,OArHmB,cAsHnBye,WACAE,MAMJ0P,cAAyB,CACrB9xB,GAAI,MACJyD,OA/HmB,cAgInBye,SAAU,IAASW,QACnBT,MAMJ2P,sBAAiC,CAC7B/xB,GAAI,MACJyD,OAzImB,cA0InBye,SAAU,IAASW,QACnBT,MAMJ4P,qBAAgC,CAC5BhyB,GAAI,MACJyD,OAnJmB,cAoJnBye,SAAU,IAASW,QACnBT,OAOK6P,EAAgD,CACzDjyB,GAAI,MACJyD,OA9JuB,cA+JvBye,SAAU,IAASW,QACnBT,MA+CS8P,EAAqB,CAC9BC,6BAAwC,CACpCnyB,GAAI,MACJyD,OAAQ,4BACRye,WACAE,MAGJgQ,iCAA4C,CACxCpyB,GAAI,MACJyD,OAAQ,4BACRye,WACAE,MAGJiQ,wBAAmC,CAC/BryB,GAAI,MACJyD,OAAQ,mCACRye,WACAE,MAGJkQ,0BAAqC,CACjCtyB,GAAI,MACJyD,OAAQ,mCACRye,WACAE,MAGJmQ,iBAA4B,CACxBvyB,GAAI,MACJyD,OAAQ,mCACRye,WACAE,OAIKoQ,EAAuB,CAChCrK,aAAwB,CACpBnoB,GAAI,MACJyD,OAAQ,2BACRye,WACAE,MAEJqQ,iBAA4B,CACxBzyB,GAAI,MACJyD,OAAQ,2BACRye,WACAE,MAEJsQ,mBAA8B,CAC1B1yB,GAAI,MACJyD,OAAQ,2BACRye,WACAE,MAEJuQ,eAA0B,CACtB3yB,GAAI,MACJyD,OAAQ,2BACRye,SAAU,IAASW,QACnBT,OAyDKwQ,EAAiC,CAE1CC,mCAA8C,CAC1C7yB,GAAI,MACJyD,OAdJ,yEAeIye,WACAE,MAEJ0Q,6CAAwD,CACpD9yB,GAAI,MACJyD,OApBJ,yEAqBIye,WACAE,MAEJ2Q,sCAAiD,CAC7C/yB,GAAI,MACJyD,OA1BJ,yEA2BIye,WACAE,MAEJ4Q,wCAAmD,CAC/ChzB,GAAI,MACJyD,OAhCJ,yEAiCIye,WACAE,MAIJ6Q,sCAAiD,CAC7CjzB,GAAI,MACJyD,OArCJ,4EAsCIye,WACAE,MAEJ8Q,gDAA2D,CACvDlzB,GAAI,MACJyD,OA3CJ,4EA4CIye,WACAE,MAEJ+Q,2CAAsD,CAClDnzB,GAAI,MACJyD,OAjDJ,4EAkDIye,WACAE,MAIJgR,0CAAqD,CACjDpzB,GAAI,MACJyD,OAtDJ,gFAuDIye,WACAE,MAEJiR,oDAA+D,CAC3DrzB,GAAI,MACJyD,OA5DJ,gFA6DIye,WACAE,MAEJkR,6CAAwD,CACpDtzB,GAAI,MACJyD,OAlEJ,gFAmEIye,WACAE,MAEJmR,+CAA0D,CACtDvzB,GAAI,MACJyD,OAxEJ,gFAyEIye,WACAE,MAEJoR,6CAAwD,CACpDxzB,GAAI,MACJyD,OA3EJ,sEA4EIye,WACAE,OA2CFqR,EACF,sDAESC,EAAwB,CAEjCC,kCAA6C,CACzC3zB,GAAI,MACJyD,OAAQgwB,EACRvR,WACAE,MAEJwR,qCAAgD,CAC5C5zB,GAAI,MACJyD,OAAQgwB,EACRvR,WACAE,MAEJyR,uCAAkD,CAC9C7zB,GAAI,MACJyD,OAAQgwB,EACRvR,WACAE,MAEJ0R,8CAAyD,CACrD9zB,GAAI,MACJyD,OAAQgwB,EACRvR,WACAE,MAEJ2R,oDAA+D,CAC3D/zB,GAAI,MACJyD,OAAQgwB,EACRvR,WACAE,MAEJ4R,iDAA4D,CACxDh0B,GAAI,MACJyD,OAAQgwB,EACRvR,WACAE,MAEJ6R,sDAAiE,CAC7Dj0B,GAAI,MACJyD,OAAQgwB,EACRvR,WACAE,OAOK8R,GAA0D,CACnEl0B,GAAI,MACJyD,OAJA,qDAKAye,WACAE,MAGS+R,GAA6D,CACtEn0B,GAAI,MACJyD,OAXA,qDAYAye,WACAE,MAGSgS,GAA+D,CACxEp0B,GAAI,MACJyD,OAlBA,qDAmBAye,WACAE,MAGSiS,GAAiE,CAC1Er0B,GAAI,MACJyD,OAzBA,qDA0BAye,WACAE,MA8FSkS,IA7BK,IAASzR,QA6BmB,CAM1C0R,iDAA4D,CACxDv0B,GAAI,MACJyD,OAAQ,6BACRye,WACAE,MAOJoS,8CAAyD,CACrDx0B,GAAI,MACJyD,OAAQ,6BACRye,WACAE,QAgBKqS,GAAyB,CAElCpO,eAA0B,CACtBrmB,GAAI,MACJyD,OAAQ,gCACRye,WACAE,MAEJsS,eAA0B,CACtB10B,GAAI,MACJyD,OAAQ,0BACRye,SAAU,IAASW,QACnBT,MAEJuS,uBAAkC,CAC9B30B,GAAI,MACJyD,OAAQ,mCACRye,WACAE,MAEJwS,+BAA0C,CACtC50B,GAAI,MACJyD,OAAQ,mCACRye,WACAE,OA2FKyS,GAAmC,CAC5C1M,aAAwB,CACpBnoB,GAAI,MACJyD,OAJqC,iCAKrCye,YAGJkG,kBAA6B,CACzBpoB,GAAI,MACJyD,OAVqC,iCAWrCye,aAMK4S,GAAmC,CAC5CC,wBAAmC,CAC/B/0B,GAAI,MACJyD,OAJqC,iCAKrCye,aAKK8S,GAA0B,CACnCC,gCAA2C,CACvCj1B,GAAI,MACJyD,OAJ4B,wBAK5Bye,aAgBKgT,GAAgC,CACzC9M,kBAA6B,CACzBpoB,GAAI,MACJyD,OAAQ,uCACRye,WACAE,OAyDK+S,GAAkB,CAE3BC,aAAwB,CACpBp1B,GAAI,KACJyD,OALiB,sBAMjBye,WACAE,MAIJiT,aAAwB,CACpBr1B,GAAI,MACJyD,OAdgB,aAehBye,WACAE,MAIJkT,eAA0B,CACtBt1B,GAAI,MACJyD,OArBiB,sBAsBjBye,SAAU,IAASW,QACnBT,MAIJmT,aAAwB,CACpBv1B,GAAI,MACJyD,OA9BgB,aA+BhBye,WACAE,OA0NKoT,IA9MC,IAASrT,MAWT,IAASA,MA+IL,IAASU,QAoCb,IAASA,QAYT,IAASA,QAIgC,CACnD7iB,GAAI,MACJyD,OAd0B,oBAe1Bye,WACAE,OAQSqT,GAA4C,CACrDz1B,GAAI,MACJyD,OA1B0B,oBA2B1Bye,SAAU,IAASW,QACnBT,MAESsT,GAAiD,CAC1D11B,GAAI,MACJyD,OAhC0B,oBAiC1Bye,WACAE,MAESuT,GAAyC,CAClD31B,GAAI,MACJyD,OAtC0B,oBAuC1Bye,SAAU,IAASW,QACnBT,MAESwT,GAAiD,CAC1D51B,GAAI,MACJyD,OA3C0B,oBA4C1Bye,WACAE,MAESyT,GAAiD,CAC1D71B,GAAI,MACJyD,OAjD0B,oBAkD1Bye,WACAE,MAES0T,GAAkD,CAC3D91B,GAAI,MACJyD,OAvD0B,oBAwD1Bye,WACAE,MAES2T,GAAqD,CAC9D/1B,GAAI,MACJyD,OA7D0B,oBA8D1Bye,WACAE,MAES4T,GAAiD,CAC1Dh2B,GAAI,MACJyD,OAnE0B,oBAoE1Bye,WACAE,MAcS6T,GAAiD,CAC1Dj2B,GAAI,MACJyD,OAtF0B,oBAuF1Bye,SAAU,IAASW,QACnBT,MAES8T,GAAiD,CAC1Dl2B,GAAI,MACJyD,OA1FuB,iBA2FvBye,WACAE,MAES+T,GAAiD,CAC1Dn2B,GAAI,MACJyD,OAhGuB,iBAiGvBye,WACAE,MAESgU,GAAiD,CAC1Dp2B,GAAI,MACJyD,OAtGuB,iBAuGvBye,WACAE,MAESiU,GAAkD,CAC3Dr2B,GAAI,MACJyD,OA5GuB,iBA6GvBye,SAAU,IAASW,QACnBT,MAESkU,GAAwD,CACjEt2B,GAAI,MACJyD,OAlHuB,iBAmHvBye,WACAE,MAQSmU,GAA0B,CACnCC,mBAA8B,CAC1Bx2B,GAAI,MACJyD,OAN8B,yBAO9Bye,WACAE,MAEJqU,4BAAuC,CACnCz2B,GAAI,MACJyD,OAb4B,wBAc5Bye,WACAE,MAEJsU,yBAAoC,CAChC12B,GAAI,MACJyD,OAnB4B,wBAoB5Bye,WACAE,MAEJuF,qBAAgC,CAC5B3nB,GAAI,MACJyD,OAzB4B,wBA0B5Bye,WACAE,MAEJuU,4CAAuD,CACnD32B,GAAI,MACJyD,OA/B4B,wBAgC5Bye,WACAE,MAEJ+E,oBAA+B,CAC3BnnB,GAAI,MACJyD,OAnCiC,kCAoCjCye,WACAE,MAEJgF,wBAAmC,CAC/BpnB,GAAI,MACJyD,OAzCiC,kCA0CjCye,WACAE,MAEJiF,4BAAuC,CACnCrnB,GAAI,MACJyD,OA/CiC,kCAgDjCye,WACAE,MAEJwU,kCAA6C,CACzC52B,GAAI,MACJyD,OArDiC,kCAsDjCye,WACAE,OAOKyU,GAAyC,CAClD72B,GAAI,MACJyD,OAJ2B,mBAK3Bye,WACAE,MAGS0U,GAAqC,CAC9C92B,GAAI,MACJyD,OAX2B,mBAY3Bye,SAAU,IAASW,QACnBT,MAYS2U,IANC,IAASlU,QAMU,CAC7BmU,wBAAmC,CAC/Bh3B,GAAI,MACJyD,OAJuB,wBAKvBye,SAAU,IAASW,QACnBT,MAGJ6U,8BAAyC,CACrCj3B,GAAI,MACJyD,OAXuB,wBAYvBye,SAAU,IAASC,MACnBC,QA0BK8U,GAA2B,CACpCC,YAAuB,CACnBn3B,GAAI,MACJyD,OAJqB,0BAKrBye,SAAU,IAASW,QACnBT,MAEJgV,YAAuB,CACnBp3B,GAAI,MACJyD,OAVqB,0BAWrBye,SAAU,IAASW,QACnBT,MAEJiV,qBAAgC,CAC5Br3B,GAAI,MACJyD,OAhBqB,0BAiBrBye,SAAU,IAASW,QACnBT,MAEJkV,oBAA+B,CAC3Bt3B,GAAI,MACJyD,OAtBqB,0BAuBrBye,SAAU,IAASW,QACnBT,OAMKmV,GAA6B,CACtCC,cAAyB,CACrBx3B,GAAI,MACJyD,OAJyB,uBAKzBye,WACAE,MAEJqV,0BAAqC,CACjCz3B,GAAI,MACJyD,OAVyB,uBAWzBye,WACAE,OAMKsV,GAA0B,CACnCC,oBAA+B,CAC3B33B,GAAI,MACJyD,OAJ4B,uBAK5Bye,WACAE,OAuMKwV,IA3IC,IAAS/U,QAUT,IAASA,QAcT,IAASA,QAUT,IAASA,QAUT,IAASA,QAUT,IAASA,QAUT,IAASA,QA6CT,IAASM,WA8BsB,CACzCnjB,GAAI,MACJyD,OA73ImC,4BA83InCye,WACAE,OAGSyV,GAAwC,CACjD73B,GAAI,MACJyD,OAp4ImC,4BAq4InCye,WACAE,MAGS0V,GAA2C,CACpD93B,GAAI,MACJyD,OA34ImC,4BA44InCye,WACAE,MAGS2V,GAA8B,CACvC/3B,GAAI,MACJyD,OAl5ImC,4BAm5InCye,WACAE,MAIS4V,GAAsC,CAC/Ch4B,GAAI,MACJyD,OAAQwgB,EACR/B,WACAE,MAGS6V,GAA4C,CACrDj4B,GAAI,MACJyD,OAAQwgB,EACR/B,SAAU,IAASW,QACnBT,MA4KS8V,GAA2C,CACpDl4B,GAAI,MACJyD,OAAQ,sBACRye,SAAU,IAASW,QACnBT,O,6BCrvJJ,sCAQiB+V,EARjB,qEAQA,SAAiBA,GAab,MAAMC,EAA2B,iBAQjC,SAAgBC,EAAiB/8B,EAAag9B,GAAmB,GAC7D,IAAK,YAASh9B,GACV,OAAO,KAIX,OAAOi9B,GADsBj9B,GAAO,IAAI3N,MAAM,KAAK,GACrB2qC,GAQlC,SAASE,EAA+BxqC,GAGpC,OAFAA,EAAMA,EAAI1D,QAAQ,MAAO,KACzB0D,EAAMyqC,mBAAmBzqC,GAkB7B,SAAgBuqC,EAAUG,EAAqBJ,GAAmB,GAC9D,MAAM38B,EAAwC,GAM9C,GAJI+8B,GAAeA,EAAYC,WAAW,OACtCD,EAAcA,EAAYE,UAAU,IAGpCF,EAAa,CAGb,MAAMG,GADNH,EAAcA,EAAY/qC,MAAM,KAAK,IACNA,MAAM,KACrC,IAAK,IAAImrC,EAAM,EAAGA,EAAMD,EAAW11C,OAAQ21C,IAAO,CAC9C,MAAMC,EAAQF,EAAWC,GAAKnrC,MAAM,KACpC,IAAIqrC,EAAWD,EAAM,GACjBE,EAAaF,EAAM,GAEnBT,IACAU,EAAWR,EAA+BQ,GACtCC,IACAA,EAAaT,EAA+BS,KAKpD,MAAMC,EAAyC,CAAE/wC,IAAK6wC,EAAUnxC,MAAOoxC,GACjEE,EAAgB,YAAUx9B,EAASy9B,GAAUA,EAAMjxC,MAAQ+wC,EAAS/wC,MACnD,IAAnBgxC,EACAx9B,EAAOlY,KAAKy1C,GAEZv9B,EAAOw9B,GAAiBD,GAIpC,OAAOv9B,EAnEK,EAAA08B,iBAAgB,EAwBhB,EAAAgB,2BAAhB,SAA2CC,GACvC,OAAOC,mBAAmBD,EAAahvC,QAAQ8tC,EAA0B,OAS7D,EAAAG,UAAS,EA2CT,EAAApZ,mBAAhB,SAAmCuZ,GAC/B,MAAM/8B,EAAwC,GAI9C,GAAI+8B,EAAa,CAETA,EAAYC,WAAW,OACvBD,EAAcA,EAAYE,UAAU,IAKxC,MAAMC,GADNH,EAAcA,EAAY/qC,MAAM,KAAK,IACNA,MAAM,KACrC,IAAK,IAAImrC,EAAM,EAAGA,EAAMD,EAAW11C,OAAQ21C,IAAO,CAC9C,MAAMC,EAAQF,EAAWC,GAAKnrC,MAAM,KACpC,IAAIqrC,EAAWD,EAAM,GACjBE,EAAaF,EAAM,GAIvB,GAlBS,SAkBLC,EAASxkC,cAA4B,CACrC,MAAM0qB,EAAa+Z,EAAWtrC,MAAM,KAEpC,GAA0B,IAAtBuxB,EAAW/7B,OAAc,CACzB61C,EAAW9Z,EAAW,GACtB+Z,EAAa/Z,EAAW,GAGxB,MAAMga,EAAyC,CAAE/wC,IAAK6wC,EAAUnxC,MAAOoxC,IAEhD,IADDt9B,EAAO69B,UAAWJ,GAAUA,EAAMjxC,MAAQ+wC,EAAS/wC,MAErEwT,EAAOlY,KAAKy1C,MAMhC,OAAOv9B,GAUK,EAAA4gB,wBAAhB,SAAwC51B,EAAc8X,GAOlD,MAAM5W,EAqDV,SAAsByT,GAClB,MAAMm+B,EAAY,GACZC,EAAarB,EAAiB/8B,GAAK,GACrCo+B,GAAcA,EAAWv2C,QACzBu2C,EAAWhY,QAAQiY,GACfF,EAAUE,EAAaxxC,KAAOwxC,EAAa9xC,OAEnD,OAAO4xC,EA5DOG,CAAan7B,GAAM9X,GACjC,YAAkBE,IAAVgB,EACFA,EACA,MAYM,EAAAgyC,WAAhB,SAA2Bv+B,EAAaw+B,GACpC,OAAQ,YAASx+B,IACZA,EAAInY,OAAS,KACZ22C,GACEA,GAA0C,IAAxBx+B,EAAIzN,QAAQ,UAU1B,EAAAksC,2BAAhB,SAA2Cp+B,GAEvC,OAAK,YAAQA,IAAW,YAAQA,GACrB,GAKiBA,EAAO+G,OAAOs3B,GACtC,IAAQC,eACJD,EACC7xC,GAAyB,iBAAV,EACfN,GAA6B,iBAAZ,IACrBqyC,IAAIF,GAAMA,EAAG7xC,IAAM,IAAM6xC,EAAGnyC,OAC5BgP,KAAK,MA4BE,EAAAsjC,iBAAhB,SAAiC7+B,EAAU8+B,GACvC,MAAM37B,EAAOnD,EAAImD,KACX47B,EAA0B,YAAQ57B,EAAM,KACxC67B,EAA+B,YAAUF,EAAS,KACxD,OAAO,IAAIG,IAAI,GAAGF,KAA2BC,MAWjC,EAAAE,kBAAhB,SAAkCl/B,EAAUnT,EAAaN,GAOrD,OAJIyT,GAAOA,EAAIm/B,cAAgBn/B,EAAIm/B,aAAahzC,IAAIU,IAChDmT,EAAIm/B,aAAaC,IAAIvyC,EAAKN,GAGvByT,GAUK,EAAAq/B,kBAAhB,SAAkCr/B,EAAUnT,EAAaN,EAAe+yC,GAUpE,OATIt/B,IACIA,EAAIm/B,cAAgBG,EACpBt/B,EAAIm/B,aAAaI,OAAO1yC,EAAKN,GAG7ByT,EAAM,IAAIi/B,IAAIj/B,EAAImD,MAAQnD,EAAI2D,OAAOpR,QAAQ,MAAQ,EAAI,IAAM,KAAO1F,EAAM,IAAMN,IAInFyT,GAQK,EAAAw/B,eAAhB,SAA+BC,GAC3B,OAAIA,EAAWltC,QAAQ,OAAS,GAAkC,IAA7BktC,EAAWltC,QAAQ,MAC7CktC,EAEA,cAAsBA,GAtRzC,CAAiB5C,MAAU,M,6BCJZ,KAEX6C,gBAAiB,IACjBh/B,cAAe,sBACfi/B,IAAK,MACLz/B,KAAM,OACN0/B,KAAM,OACNC,SAAU,YACVt/B,IAAK,MACLu/B,IAAK,MACLC,SAAU,6B,8BCdd,WAKA,MAAMC,EAAM,cAAch2C,SAAW,KAC/Bi2C,EAAuB,UACvBC,EAAY,kBAGH,KACXC,KAAM,SAAUrkC,EAAMqkC,GAKlB,OAAOrkC,IAASA,EAAKzK,aAAeyK,EAAKzK,aAAa8uC,EAAM,GAAKrkC,EAAKqkC,KAAU,IAEpF90C,KAAM,SAAUyQ,GACZ,OAAOA,GAAQA,EAAKskC,UAAY,IAEpCC,KAAM,SAAUvkC,GACZ,OAAQA,IAASA,EAAKwkC,aAAexkC,EAAKykC,YAAc,IAAIvxC,QAAQkxC,EAAW,KAEnFM,SAAU,SAAU1kC,GAChB,OAAOA,GAAQA,EAAK0kC,UAAY,IAEpCxkC,OAAQ,SAAUF,GACd,OAAOA,GAAQA,EAAK2kC,YAExBv8B,qBAAsB,SAAU7Y,GAC5B,OAAO20C,EAAMA,EAAI97B,qBAAqB7Y,GAAQ,IAElDuB,OAAQ,SAAUvB,GACd,OAAO20C,EAAMA,EAAI/1C,cAAcoB,GAAQ,MAE3C0Q,cAAe,SAAU1M,EAASqxC,GAQ9B,OAAOrxC,IAAa,KAAOA,EAAQqxC,WAAarxC,EAAQgC,aAAa,UAAY,KAC5ErC,QAAQixC,EAAsB,KAAK1tC,QAAQ,IAAMmuC,EAAY,MAAQ,GAE9EnoC,UAAW,SAAU5N,GACjB,OAAOA,IAAUA,EAAMg2C,cAAgBh2C,EAAMQ,QAAUR,EAAMi2C,aAAeZ,K,6BC1CpF,IAAYa,EANZ,kCAMA,SAAYA,GACR,cACA,8BACA,oBACA,0BACA,YACA,gCACA,YACA,kBACA,gBACA,oBACA,oBACA,8BAZJ,CAAYA,MAAO,M,6BCDZ,IAAUta,EALjB,kCAKA,SAAiBA,GAIA,EAAAua,kBAAoB,YAEpB,EAAAta,aAAe,0BAEf,EAAAua,6BAA+B,8BARhD,CAAiBxa,MAAkB,M,6BCkBnC,MAAMya,EAAgB,IAAIC,EACpBC,EAAW,GA4BjB,SAASC,EAAWC,GAQhB,OAJKF,EAASE,KAEVF,EAASE,GAAW,IAAIH,GAErBC,EAASE,GAGpB,SAASH,IAGL,MAAMI,EAAS,GACf,MAAO,CACH5gC,IAAK,SAAU9V,EAAOtD,GAIlB,MAAMsG,EAAY0zC,EAAO12C,GAEzB,GAAIgD,EACA,IAAK,IAAI6vC,EAAM,EAAGA,EAAM7vC,EAAU9F,OAAQ21C,IACtC7vC,EAAU6vC,GAAKn2C,IAI3Bi6C,IAAK,SAAU32C,EAAOwD,GAIlB,GAAuB,mBAAZA,EAAwB,CAC/B,IAAIozC,EAAYF,EAAO12C,GAElB42C,IACDA,EAAY,GACZF,EAAO12C,GAAS42C,GAEpBA,EAAUp5C,KAAKgG,KAGvBqzC,MAAO,SAAU72C,EAAOwD,GAIpB,MAAMozC,EAAYF,EAAO12C,GAEzB,GAAI42C,EACA,IAAK,IAAI/D,EAAM,EAAGA,EAAM+D,EAAU15C,OAAQ21C,IAClC+D,EAAU/D,KAASrvC,GACnBozC,EAAUx4C,OAAOy0C,IAAO,KA9EjC,KACX/8B,IAAKugC,EAAcvgC,IACnB6gC,IAAKN,EAAcM,IACnBE,MAAOR,EAAcQ,MACrBC,WAAY,SAAU92C,EAAOy2C,EAAS/5C,GAKlC85C,EAAWC,GAAS3gC,IAAI9V,EAAOtD,IAEnCq6C,WAAY,SAAU/2C,EAAOy2C,EAASjzC,GAKlCgzC,EAAWC,GAASE,IAAI32C,EAAOwD,IAEnCwzC,aAAc,SAAUh3C,EAAOy2C,EAASjzC,GAKpCgzC,EAAWC,GAASI,MAAM72C,EAAOwD,M,8BChDzC,8CA4CA,MAAMyzC,EAwCF,YAAoBv6C,GAChBgH,KAAK2R,IAAM,IAAIi/B,IAAI53C,EAAK8b,MACxB9U,KAAK8L,WAAa9S,EAAK8S,WACvB9L,KAAK6L,YAAc7S,EAAK6S,YACxB7L,KAAKmW,iBAAmBnd,EAAKmd,iBAC7BnW,KAAKwzC,cAAgBx6C,EAAKw6C,cAC1BxzC,KAAK8J,UAAY9Q,EAAK8Q,UAOnB,qBAYH,GAXI2pC,EAAiB,WAAMF,EAAY7hB,WACnCgiB,EAAiB,CACb5+B,KAAM,yBACNhJ,WAAY,KACZD,YAAa,IACbsK,iBAAkB,EAClBq9B,eAAe,EACf1pC,UAAW,KAIdypC,EAAY7hB,UAIb,MAAM,IAAIr1B,MAAM,8DAEpB,OAAOk3C,EAAY7hB,UAOhB,qBAAqB14B,GAExB,OADAu6C,EAAY7hB,UAAY,IAAI6hB,EAAYv6C,GACjCu6C,EAAY7hB,WA3ER,EAAAA,UAAyB,KAmFrC,MAAMgiB,EAAmBH,EAAYtd,cAK/B0d,EAAiB,IAAOJ,EAAYvd,gB,kDClI1C,SAAS4d,EAAaC,GACzB,IACI,OAAO5wC,KAAKC,MAAM2wC,GACpB,SACE,OAAO,MASR,SAASC,EAAY51C,EAAe61C,GACvC,MAAMr1C,EAAIs1C,SAAS91C,GACnB,OAAO+1C,MAAMv1C,GAAKq1C,EAAer1C,EAtBrC,qE,+BCAA,uGAUO,MAAMw1C,EAIT,YAA6BC,GAAA,KAAAA,UAO7B,gBACI,QAASn0C,KAAKm0C,QAQX,QAAQ31C,GACX,GAAIwB,KAAKo0C,UACL,OAAOp0C,KAAKm0C,QAAQnhB,QAAQx0B,GAU7B,UAAaA,EAAau1C,GAC7B,MAAM71C,EAAQ8B,KAAKgzB,QAAQx0B,GAC3B,GAAa,MAATN,EAAe,CACf,MAAMm2C,EAAY,YAAan2C,GAC/B,GAAiB,MAAbm2C,EACA,OAAUA,EAIlB,OAAON,EAQJ,IAAIp0C,GACP,GAAIK,KAAKo0C,WAAaz0C,GAAS,EAC3B,OAAOK,KAAKm0C,QAAQ31C,IAAImB,GASzB,UAAanB,EAAaN,QAClBhB,IAAVgB,EACK8B,KAAKg1B,QAAQx2B,EAAKyE,KAAKoL,UAAUnQ,IACjC8B,KAAKs0C,WAAW91C,GAOnB,aAAgBA,GACnB,MAAMN,EAAQ8B,KAAKs0C,WAAW91C,GAC9B,GAAa,MAATN,EACA,OAAU,YAAaA,GASxB,QAAQM,EAAaN,GACxB,GAAI8B,KAAKo0C,UAEL,IACIp0C,KAAKm0C,QAAQnf,QAAQx2B,EAAKN,GAC5B,MAAOhD,GACL,IAAOq5C,SAASr5C,IAUrB,WAAWsD,GACd,GAAIwB,KAAKo0C,UAAW,CAChB,MAAMl2C,EAAQ8B,KAAKgzB,QAAQx0B,GAE3B,OADAwB,KAAKm0C,QAAQG,WAAW91C,GACjBN,GAQR,oBAAoB+wC,GACvB,IAAKjvC,KAAKo0C,YAAcnF,EACpB,OAGJ,MAAMuF,EAAe,GACrB,IAAK,IAAI70C,EAAQ,EAAGA,EAAQK,KAAKm0C,QAAQ36C,OAAQmG,IAAS,CACtD,MAAM80C,EAAaz0C,KAAKxB,IAAImB,GACxB80C,GAAcA,EAAWrf,SAAS6Z,IAClCuF,EAAa16C,KAAK26C,GAI1B,IAAK,IAAI90C,EAAQ,EAAGA,EAAQ60C,EAAah7C,OAAQmG,IAC7CK,KAAKs0C,WAAWE,EAAa70C,KA2FlC,MAAM+0C,EAAe,IAnFrB,cAA2BR,EAC9B,cACI,IAAIC,EAEJ,IACIA,EAAU,iBAAkBl1C,QAAUA,OAAOy1C,aAC/C,MAAOC,IAITvc,MAAM+b,GAUH,mBAAmBS,GACtB,GAAI,cAAa,CACb,MAAMC,EAAc,cACpB,IAGI,OAFA51C,OAAOy1C,aAAa1f,QAAQ6f,EAAaA,GACzC51C,OAAOy1C,aAAaJ,WAAWO,IACxB,EACT,MAAO35C,IACD05C,GAAoD,mBAAvBA,IAC7BA,EAAmB,OAAD,wBACX,IAAiBxN,yBAAuB,CAC3CrqC,QAAS,gCAAgC7B,MAKzD,OAAO,IAgDF45C,EAAiB,IAzCvB,cAA6BZ,EAChC,cACI,IAAIC,EAEJ,IACIA,EAAU,mBAAoBl1C,QAAUA,OAAO61C,eACjD,MAAOH,IAITvc,MAAM+b,GAUH,qBAAqBS,GACxB,GAAI,cAAa,CACb,MAAMC,EAAc,cACpB,IAGI,OAFA51C,OAAO61C,eAAe9f,QAAQ6f,EAAaA,GAC3C51C,OAAO61C,eAAeR,WAAWO,IAC1B,EACT,MAAO35C,IACD05C,GAAoD,mBAAvBA,IAC7BA,EAAmB,OAAD,wBACX,IAAiBvN,2BAAyB,CAC7CtqC,QAAS,mCAAmC7B,MAK5D,OAAO,K,8BC1KA,IAtCf,SAASkT,KAAUxO,GACf,IAEIpB,EACAu2C,EACAC,EACA/4C,EALAa,EAAS8C,EAAK,IAAM,GACpBuvC,EAAM,EAWV,IALqB,kBAAVryC,GAAwC,iBAAVA,IACrCk4C,IAAgBl4C,EAChBA,EAAS8C,EAAK,GACduvC,EAAM,GAEHA,EAAMvvC,EAAKpG,OAAQ21C,IAEtB,IAAK3wC,KADLu2C,EAAMn1C,EAAKuvC,GACC4F,OACS73C,IAAb63C,EAAIv2C,IAAmC,OAAbu2C,EAAIv2C,KAC1Bw2C,GAAkC,iBAAZD,EAAIv2C,IAC1BvC,EAAMa,EAAO0B,GACK,iBAAPvC,IA5Bdg5C,EA6BmBF,EAAIv2C,GACZvC,GA5BpBi5C,MAAMC,QACCD,MAAMC,QAAQF,GAEwC,mBAAtDx7C,OAAOC,UAAU07C,SAASx7C,KAAKq7C,GAAKpqC,eAyBjB,GAEA,IAIduD,GAAO,EAAMnS,EAAK84C,EAAIv2C,IACtB1B,EAAO0B,GAAOvC,GAEda,EAAO0B,GAAOu2C,EAAIv2C,IAvCtC,IAAiBy2C,EA4Cb,OAAOn4C,I,8BChDX,kOAuCO,MAAMu4C,EA8ZT,YAAoBC,EAAkBC,GAClCv1C,KAAKw1C,yBAAyBF,EAAaC,GAtT/C,iBAAkC,OAAOv1C,KAAKoY,WAC9C,eAAsBla,GAAiB8B,KAAKoY,WAAala,EAWzD,2BAGI,MAAMyT,EAAM,IAAIi/B,IAAI,GAAI5wC,KAAKy1C,uBAEzBC,EAAQC,IAAIC,oBAA8E,QAAxD,IAAIC,gBAAgB,eAAqB/3C,IAAI,SAC/E6T,EAAIm/B,aAAaC,IAAI,aAAc,OAGvC,MAAM+E,EAAc,IAAID,gBAAgB,eAAqB/3C,IAAI,cAKjE,OAJIg4C,GACAnkC,EAAIm/B,aAAaC,IAAI,aAAc+E,GAGhCnkC,EAYX,4BAGI,MAAMA,EAAM,IAAIi/B,IAAI,GAAI5wC,KAAK+1C,wBAEzBL,EAAQC,IAAIC,oBAA8E,QAAxD,IAAIC,gBAAgB,eAAqB/3C,IAAI,SAC/E6T,EAAIm/B,aAAaC,IAAI,cAAe,OAGxC,MAAM+E,EAAc,IAAID,gBAAgB,eAAqB/3C,IAAI,eAKjE,OAJIg4C,GACAnkC,EAAIm/B,aAAaC,IAAI,cAAe+E,GAGjCnkC,EAGX,gCAAiE,OAAO3R,KAAKg2C,0BAC7E,8BAAqC93C,GAAiC8B,KAAKg2C,0BAA4B93C,EAEvG,oBAAqC,OAAO8B,KAAKi2C,cACjD,kBAAyB/3C,GAAiB8B,KAAKi2C,cAAgB/3C,EAE/D,kBAAwC,OAAO8B,KAAKk2C,YACpD,gBAAuBh4C,GAAsB8B,KAAKk2C,YAAch4C,EAEhE,iBAAkC,OAAO8B,KAAKm2C,WAE9C,eAAmC,OAAOn2C,KAAKo2C,SAC/C,aAAoBl4C,GAAoB8B,KAAKo2C,SAAWl4C,EAExD,cAA+B,OAAO8B,KAAKq2C,QAE3C,qBAA8C,OAAOr2C,KAAKs2C,eAC1D,mBAA0Bp4C,GAAyB8B,KAAKs2C,eAAiBp4C,EAEzE,iCAAmD,OAAO8B,KAAKu2C,2BAC/D,+BAAsCr4C,GAAkB8B,KAAKu2C,2BAA6Br4C,EAE1F,yBAAwD,OAAO8B,KAAKw2C,mBACpE,uBAA8Bt4C,GAA+B8B,KAAKw2C,mBAAqBt4C,EAEvF,0BAAgD,OAAO8B,KAAKy2C,oBAC5D,wBAA+Bv4C,GAAsB8B,KAAKy2C,oBAAsBv4C,EAEhF,mBAAoC,OAAO8B,KAAK02C,aAEhD,qBAAuC,OAAO12C,KAAK22C,eACnD,mBAA0Bz4C,GAAkB8B,KAAK22C,eAAiBz4C,EAElE,sBAAuC,OAAO8B,KAAK42C,gBACnD,oBAA2B14C,GAAiB8B,KAAK42C,gBAAkB14C,EAEnE,gBAAqC,OAAO8B,KAAKsE,UACjD,cAAqBpG,GAAqB8B,KAAKsE,UAAYpG,EAE3D,aAA8B,OAAO8B,KAAK62C,eAAiB72C,KAAKiU,OAChE,WAAkB/V,GAAiB8B,KAAKiU,OAAS/V,EAGjD,cAAgC,OAAO8B,KAAK82C,QAG5C,8BAAgD,OAAO92C,KAAK+2C,wBAK5D,sBAAuC,OAAO/2C,KAAKg3C,uBAUnD,qBACI,MAAMrlC,EAAM,IAAIi/B,IAAI,GAAI5wC,KAAKi3C,iBAEzBvB,EAAQC,IAAIC,oBAA8E,QAAxD,IAAIC,gBAAgB,eAAqB/3C,IAAI,SAC/E6T,EAAIm/B,aAAaC,IAAI,cAAe,OAGxC,MAAM+E,EAAc,IAAID,gBAAgB,eAAqB/3C,IAAI,eAKjE,OAJIg4C,GACAnkC,EAAIm/B,aAAaC,IAAI,cAAe+E,GAGjCnkC,EAMX,yBACI,IAAK3R,KAAKk3C,mBACN,OAAO,KAGX,MAAMvlC,EAAM,IAAIi/B,IAAI,GAAI5wC,KAAKk3C,qBAEzBxB,EAAQC,IAAIC,oBAA8E,QAAxD,IAAIC,gBAAgB,eAAqB/3C,IAAI,SAC/E6T,EAAIm/B,aAAaC,IAAI,cAAe,OAGxC,MAAM+E,EAAc,IAAID,gBAAgB,eAAqB/3C,IAAI,eAKjE,OAJIg4C,GACAnkC,EAAIm/B,aAAaC,IAAI,cAAe+E,GAGjCnkC,EAMX,+BACI,MAAMA,EAAM,IAAIi/B,IAAI,GAAI,MAEpB8E,EAAQC,IAAIC,oBAA8E,QAAxD,IAAIC,gBAAgB,eAAqB/3C,IAAI,SAC/E6T,EAAIm/B,aAAaC,IAAI,cAAe,OAGxC,MAAM+E,EAAc,IAAID,gBAAgB,eAAqB/3C,IAAI,eAKjE,OAJIg4C,GACAnkC,EAAIm/B,aAAaC,IAAI,cAAe+E,GAGjCnkC,EAGX,gBAAkC,OAAO3R,KAAKm3C,UAK9C,4BAA8C,OAAOn3C,KAAKo3C,sBAK1D,0BAA4C,OAAOp3C,KAAKq3C,oBAKxD,0BAA4C,OAAO,KAAY,IAASC,oBAKxE,oCAAsD,OAAOt3C,KAAKu3C,8BAKlE,iCACI,OAAOv3C,KAAKw3C,2BAOhB,qCACI,OAAOx3C,KAAKy3C,+BAOhB,iCACI,MAAMC,EAAqB,IAAW9kB,wBAAwB,6BAA8B,eAE5F,OAAI8kB,EAC8B,SAAvBA,EAGJ13C,KAAK23C,2BAMhB,8BACI,OAAO33C,KAAK43C,wBAOhB,qCACI,MAAMF,EAAqB,IAAW9kB,wBAAwB,iCAAkC,eAEhG,OAAI8kB,EAC8B,SAAvBA,EAGJ13C,KAAK63C,+BAMhB,2BAAyC,OAAO73C,KAAK83C,qBAKrD,mBAAiC,OAAO93C,KAAK+3C,aAK7C,oBACI,IAAK/3C,KAAKg4C,cACN,OAAO,KAGX,MAAMrmC,EAAM,IAAIi/B,IAAI,GAAI5wC,KAAKg4C,gBAEzBtC,EAAQC,IAAIC,oBAA8E,QAAxD,IAAIC,gBAAgB,eAAqB/3C,IAAI,SAC/E6T,EAAIm/B,aAAaC,IAAI,aAAc,OAGvC,MAAM+E,EAAc,IAAID,gBAAgB,eAAqB/3C,IAAI,cAKjE,OAJIg4C,GACAnkC,EAAIm/B,aAAaC,IAAI,aAAc+E,GAGhCnkC,EAMX,6BAA8C,OAAO3R,KAAKi4C,uBAK1D,kBAAmC,OAAOj4C,KAAKk4C,YAC/C,gBAAuBh6C,GAAiB8B,KAAKk4C,YAAch6C,EAQ3D,kCAAmD,OAAS,KAAY,IAASg1B,gBAAkB,IAASA,eAAeuB,KAAQ,IAAI5pB,cAKvI,eAAgC,OAAO7K,KAAKm4C,SAK5C,gBAAiC,OAAOn4C,KAAKo4C,UAetC,mBAAmB1gC,EAAkB,KAAM2gC,EAA+B,MAC7E,OAAOhD,EAAe3jB,YAAc2jB,EAAe3jB,UAAY,IAAI2jB,EAAe39B,EAAY2gC,IAS3F,qBAAqB3gC,EAAkB,KAAM2gC,EAA+B,MAG/E,OAFAhD,EAAe3jB,UAAY,IAAI2jB,EAAe39B,EAAY2gC,GAC1DC,EAAiBjD,EAAe3jB,UACzB2jB,EAAe3jB,UAOnB,yBAAyB4jB,EAAmB+C,GAE/C,IAAIE,EAAuC,KAC3C,MAAMnhC,EAAiB,KAAY,IAAS8b,eAE5C,GAAI9b,IACApX,KAAKoY,WAAapY,KAAKw4C,gBAAgBphC,EAAeqd,KACtDz0B,KAAK02C,aAAet/B,EAAesc,YAActc,EAAesc,WAAWE,GAAK,GAChF5zB,KAAKi2C,cAAiB,IAASwC,QAAUrhC,EAAeshC,YACxD14C,KAAKk4C,YAAc9gC,EAAeuhC,YAClC34C,KAAKm4C,SAAW/gC,EAAewhC,QAC/B54C,KAAKo4C,UAAYhhC,EAAeyhC,SAChC74C,KAAKg4C,cAAgB5gC,EAAe4gC,cAAgB,IAAIpH,IAAI,GAAIx5B,EAAe4gC,eAAiB,KAChGO,EAA0B,YAAyBnhC,EAAe0hC,SAAW1hC,EAAe0hC,QAAQnD,KAAO,QAE3G31C,KAAK+4C,wBACL/4C,KAAKq2C,QAAUj/B,EAAe4hC,SAAW,GACzCh5C,KAAKs2C,eAAiBt2C,KAAKi5C,oBAC3Bj5C,KAAKu2C,4BAA6B,EAElCv2C,KAAK+3C,aAAe3gC,EAAe2gC,aAEnC/3C,KAAKo3C,yBACDp3C,KAAK+3C,eAAgB/3C,KAAK+3C,aAAaX,wBACW,SAA5Cp3C,KAAK+3C,aAAaX,sBAG5Bp3C,KAAKq3C,qBACDr3C,KAAK+3C,eAAgB/3C,KAAK+3C,aAAaV,qBACS,SAA1Cr3C,KAAK+3C,aAAaV,oBAG5Br3C,KAAKw3C,8BACDx3C,KAAK+3C,eAAgB/3C,KAAK+3C,aAAaP,6BACgB,SAAjDx3C,KAAK+3C,aAAaP,2BAG5Bx3C,KAAK23C,8BAA6B33C,KAAK+3C,eAAgB/3C,KAAK+3C,aAAaJ,6BAClB,SAAjD33C,KAAK+3C,aAAaJ,2BAGxB33C,KAAK43C,2BACD53C,KAAK+3C,eAAgB/3C,KAAK+3C,aAAaH,0BACa,SAA9C53C,KAAK+3C,aAAaH,wBAG5B53C,KAAK63C,kCAAiC73C,KAAK+3C,eAAgB/3C,KAAK+3C,aAAaF,iCAClB,SAArD73C,KAAK+3C,aAAaF,+BAIxB73C,KAAKy3C,iCAAiCz3C,KAAK+3C,eAAgB/3C,KAAK+3C,aAAamB,2BAA6E,SAAhDl5C,KAAK+3C,aAAamB,6BAEtHl5C,KAAKq2C,UAAY,IAAQ1mB,MAAQ3vB,KAAKq2C,UAAY,IAAQ8C,KAEhEn5C,KAAKi4C,uBAAyB7gC,EAAegiC,KAEzChiC,EAAe0hC,UAAY,eAA0BO,YAAY,CACjE,MAAMC,EAA6C,CAC/CD,WAAYjiC,EAAe0hC,QAAQllB,GAGvC,aAA2B0lB,GAInC,MAAMC,EAAc,cAAc,YAAuB,KAAiB,KACpErjB,EAAe,cACfsjB,EAAiB,cAMjBC,EAAiB,YAAyB,IAAW7mB,wBAAwB,MAAOsD,IAC1Fl2B,KAAKk2C,YACDuD,GACGlB,GACA,IAAYmB,KAGnB15C,KAAKm2C,WAAa,cAAsBwD,SAAS,OAAS,gBAAkB,iBAE5E35C,KAAKi3C,eAAiB3B,GAAgBiE,GAAeA,EAAYv2C,aAAa,MAAe,IAAI4tC,IAAI,GAAI2I,EAAYv2C,aAAa,OAAiB,IAAI4tC,IAAI,GAAI,WAAW5wC,KAAKm2C,uBAO/K,MAAMyD,EAAyB55C,KAAKq2C,UAAY,IAAQwD,cAAgB75C,KAAKq2C,UAAY,IAAQyD,eAAiB95C,KAAKq2C,UAAY,IAAQ1mB,KAAO,WAAW3vB,KAAKm2C,WAAeqD,EAIjLx5C,KAAKk3C,mBAAqB,IAAItG,IAAI,aAAcx5B,GAAkBA,EAAe2iC,eAAiB3iC,EAAe2iC,eAAiBH,GAGlI55C,KAAKo2C,SAAW,IAAS4D,mBAAmB9jB,GAG5Cl2B,KAAKm3C,UAAyE,MAA5D,IAAWvkB,wBAAwB,MAAOsD,GAE5Dl2B,KAAKiU,OAASjU,KAAK62C,cAInB72C,KAAK42C,gBAAkB2C,EAAcU,OAAOV,EAAYv2C,aAAa,MAAgB,EACrF,MAAMk3C,EAAgBX,GAAeA,EAAYv2C,aAAa,KACxDm3C,EAAmBZ,GAAeA,EAAYv2C,aAAa,KACjEhD,KAAKsE,UAAY,CAAE+B,SAAU,CAAE8I,aAAc+qC,EAAe9qC,UAAW+qC,IAEvEn6C,KAAK+1C,sBAAwB,IAAInF,IAAI,GAAI,WAAW5wC,KAAKm2C,uBAEzDn2C,KAAKg3C,uBAAyBh3C,KAAKo6C,wBAEnCp6C,KAAKq6C,iBAELr6C,KAAKu3C,8BAAgCv3C,KAAKs6C,2BAE1C,MAAM53C,EAAU1C,KAAKu6C,wBAAwBv6C,KAAKu3C,8BAA+Bc,GACjFr4C,KAAK83C,qBAAuBp1C,EAAU,IAAIkuC,IAAI,GAAIluC,GAAW,KAE7D1C,KAAKy1C,qBAAuB,IAAI7E,IAAI,GAAI,WAAW5wC,KAAKm2C,yBAExDn2C,KAAK82C,SAAY,IAAWlkB,wBAAwB,QAASsD,IAAiB,IAAIrrB,eAAiB,CAAE2vC,EAAG,EAAGC,KAAM,KACzG,IAAW7nB,wBAAwB,OAAQsD,IAAiB,IAAIrrB,cAAc3G,QAAQ,UAAY,EAE1GlE,KAAK+2C,wBAAyF,MAA/D,IAAWnkB,wBAAwB,UAAWsD,GAMzE,cACJ,IAAIwkB,EACJ,MAAMC,EAAqB,cAI3B,OAHI,YAASA,KACTD,EAAO,KAAOC,GAEXD,EASH,wBAAwBnD,GAAgC,EAAMc,GAClE,MAAMuC,EAAe,yBAAyBrD,EAAgC,MAAQ,iBAEtF,OAAIc,EAEOA,EAAuBuC,EACvBlF,EAAQC,IAAIC,oBAAsB51C,KAAKk2C,cAAgB,IAAY2E,IAEnE,sBAAwBD,EAExB,cAAsB,cAAsBA,EAAe,KAQlE,2BACJ,MAAME,EAAW,cACjB,GAAIA,EAAU,CACV,MAAMC,EAAQ,IAAWnoB,wBAAwB,gCAAiCkoB,GAClF,GAAIC,EACA,MAAqC,SAA9BA,EAAMzoB,oBAKrB,OAAItyB,KAAK+3C,eACF/3C,KAAK+3C,aAAaR,+BACsC,SAApDv3C,KAAK+3C,aAAaR,8BAUzB,oBAGJ,IAAIjB,EACJ,QAHuB,KAAY,IAASpjB,gBACH8lB,SAAW,IAGhD,KAAK,IAAQgC,WACb,KAAK,IAAQ7B,IACb,KAAK,IAAQW,cACb,KAAK,IAAQmB,MACb,KAAK,IAAQC,QACT5E,EAAiB,IAAe6E,KAChC,MACJ,KAAK,IAAQxrB,KACb,KAAK,IAAQkqB,aACb,KAAK,IAAQpqB,IACb,KAAK,IAAQrP,OACb,QACIk2B,EAAiB,IAAe8E,QAGxC,OAAO9E,EAOH,wBACJt2C,KAAKmL,oBAAsB,KAC3BnL,KAAKq7C,mBAAqB,IAAI//C,QAASC,IACnC,KAAK,eAAgB0D,OAAOq8C,QAAWr8C,OAAOq8C,OAAOC,aAAgBt8C,OAAOq8C,OAAOC,YAAYC,uBAC3F,OAAOjgD,EAAQ,MAGnB,MACMkgD,EAAY9rC,KAAK+rC,MAAMn0C,YAAYo0C,OAEzC18C,OAAOq8C,OAAOC,YAAYC,sBAAuBtwC,IAC7C,MAAM0wC,EAAUjsC,KAAK+rC,MAAMn0C,YAAYo0C,OAKvC,OAJoB,cALL,8BAMWC,EAAUH,EAEpCz7C,KAAKmL,oBAAsBD,EACpB3P,EAAQ2P,OAKvBlL,KAAKq7C,mBAOD,wBAEJ,MAAO,YADgBr7C,KAAKi2C,gBAAkB,IAAO4F,KAAO,KAAO,OAS/D,gBAAgBC,GACpB,GAAIA,GAAwB,KAAhBA,EAAKtiD,OAAe,CAE5B,MAAMuiD,EAAUD,EAAKE,MAAM,yCACvBD,IAEAD,EAAOC,EAAQ58C,MAAM,GAAG+N,KAAK,MAIrC,OAAO4uC,EAMH,iBACJ,IAAK,MAAa,IAAS5oB,eACvB,OAIJ,IAAImC,EAEAA,EADA,YAAU,MAAkC,YAAU,KACvC,IAAiB4mB,KAEjB,IAAS/oB,eAAemC,cAAgB,IAAiB6mB,MAG5E,MAAM,QAAEC,EAAO,iBAAEC,EAAgB,OAAEC,EAAM,OAAEtrB,EAAM,GAAEurB,EAAE,SAAEnpB,GAAa,IAASD,eAc7E,GAZAlzB,KAAKg2C,0BAA4B,CAC7B3gB,aAAcA,EACd8mB,QAASA,EACTC,iBAAkBA,EAClBC,OAAQA,EACRtrB,OAAQA,EACRurB,GAAIA,EACJC,SAAU,IAAaC,IACvB/rB,SAAU0C,IAITnzB,KAAKg2C,0BAA0BjlB,QAAU,IAAQ0rB,cAAc,IAAShE,QAAS,CAClF,MAAM1nB,EAAS,IAAS0nB,OAAOz0C,MAAM,KACjC+sB,EAAOv3B,OAAS,IAChBwG,KAAKg2C,0BAA0BjlB,OAAS,CACpCsB,SAAUtB,EAAO,GAEjB9X,OAAQ8X,EAAOA,EAAOv3B,OAAS,KAKvC,IAAQijD,cAAc,IAASC,kBAC/B18C,KAAKg2C,0BAA0B2G,gBAAkB,IAASD,eAAe14C,MAAM,MAGnFhE,KAAK48C,gBAMD,gBAEJ,IAAK,YAAa58C,KAAKg2C,0BAA0B2G,iBAC7C,OAGJ,MAAMn+C,EAAc,YAAsBwB,KAAKq2C,QAASr2C,KAAKg2C,2BACvD6G,EAAoB,IAAappB,UAAoBj1B,GACrDs+C,EAA0B,YAAcD,GAEzCC,IAIL98C,KAAKg2C,0BAA0B2G,gBAAkB38C,KAAKg2C,0BAA0B2G,gBAAgBI,OAAOD,KAIxG,MAAME,EAAoB3H,EAAerf,YAGzC,IAAIsiB,EAAiBjD,EAAerf,cAERqf,EAAepf,gB,iDCrzBlD,sFAWO,MAAMgnB,EAgBT,cACQ,eACAj9C,KAAKk9C,wBAAwBj+C,QAEzBe,KAAKm9C,iBAELl+C,OAAOm+C,eAAiBziD,IAG5BqF,KAAKq9C,uBAQN,wBAAwBC,GAC3Bt9C,KAAKu9C,OAAS,IAAevnB,YAAY,mBAAoB,IAASwnB,KAAM,IAAmBC,SAE/Fz9C,KAAKs9C,UAAYA,EAGjBt9C,KAAKm9C,gBAAmBn9C,KAAK4yB,wBAAwB0qB,EAAUzoC,SAASC,KAAM,UAAY,IAAIjK,eAAiB,CAAE2vC,EAAG,EAAGC,KAAM,GAE7Hz6C,KAAK09C,gBAMF,uBACH19C,KAAKu9C,OAAS,IAAevnB,YAAY,mBAAoB,IAASwnB,KAAM,IAAmBG,QAC/F39C,KAAKm9C,gBAAiB,EACtBn9C,KAAK09C,gBAOF,oBACH,OAAO19C,KAAKu9C,OAOT,UACH,OAAOv9C,KAAKm9C,eAMT,SAASrG,GACZ92C,KAAKm9C,eAAiBrG,EACtB92C,KAAK09C,gBAQF,IAAI3gD,GACHiD,KAAK82C,YACA,cAMD92C,KAAKu9C,OAAOjmC,KAAKva,GAFjBgC,QAAQ+0B,IAAI,eAAgB/2B,IAWjC,SAASA,GACZiD,KAAKu9C,OAAOnhD,MAAMW,GAQf,YAAY6gD,GACf59C,KAAKu9C,OAAOM,aAAaD,GAQtB,cAAc7gD,GACbiD,KAAK82C,YACD,eAAe92C,KAAKs9C,UACpBt9C,KAAKs9C,UAAUv+C,QAAQ+0B,OAAO/2B,GAE9BgC,QAAQ+0B,IAAI,wBAAyB/2B,IAQzC,gBAGJiD,KAAKu9C,OAAOO,SAAS99C,KAAK82C,UAAY,IAAS0G,KAAO,IAASnhD,OAC/D2D,KAAK+9C,iBAMD,iBACJ/9C,KAAKu9C,OAAOS,qBACR,cACAh+C,KAAKu9C,OAAOU,YAAY,IAAI,IAAuBj+C,KAAKu9C,OAAOW,aAE/Dl+C,KAAKu9C,OAAOU,YAAY,IAAI,IAAoBj+C,KAAKu9C,OAAOW,aAS5D,wBAAwBhoB,EAAsBl5B,GAElD,MAAMmhD,EAAYnhD,EAAK2D,QAAQ,SAAU,QAGnCy9C,EAFa,IAAIC,OAAO,OAASF,EAAY,qBAEVjpB,KAAKgB,GAC9C,IAAKkoB,EACD,OAAO,KAIX,MAAM9O,EAAa8O,EAAsB,GAEzC,OAAOtP,mBAAmBQ,EAAW3uC,QAAQ,MAAO,OAAS,IArK1C,EAAA29C,gBAA0B,IAAIrB,EAyKlD,MAAMM,EAASN,EAAOqB,iB,6BCtL7B,4BAYA,IAAI3vC,EACJ,MACM4vC,EAAqB,WACvB5vC,EAAM,cAAUhO,QAAQ,KAAM,IAE9B,IAASyR,IAAI,IAAmBs/B,UAGhC,MAAM8M,EAAO7iD,SAASgQ,KAAKK,cAAc,YACzC,GAAIwyC,EAAM,CACN,MAAMC,EAAcD,EAAK5yC,iBAAiB,uBACpCpS,EAASilD,EAAYjlD,OAC3B,IAAK,IAAIF,EAAI,EAAGA,EAAIE,EAAQF,IAExBmlD,EAAYnlD,GAAG4E,MAAQyQ,IAKnC,IAASskC,IAlBqB,qBAkBMsL,GAErB,KACPxwC,aAAc,WAAa,OAAOY,GAClC+vC,aAAc,SAAUC,GACpBhwC,EAAMgwC,EAGN,IAASvsC,IAAI,IAAmBs/B,WAEpCkN,UA5BsB,qBAgCtBL,mBAAoBA,I,6BC7C5B,sCAOiBM,EAPjB,kBAOA,SAAiBA,GAQb,SAAgBC,EAAqB5gD,GACjC,OAAO,MAAOA,EADF,EAAA4gD,qBAAoB,EAmBpB,EAAAC,UAAhB,SAA0B7gD,GACtB,YAAyB,IAAVA,GAUH,EAAAoyC,eAAhB,SAAqC0O,EACAC,EACAC,GACjC,OAAOL,EAAQM,gBAAgBH,IACxBC,EAAMD,EAAsBxgD,MAC5B0gD,EAAQF,EAAsB9gD,QAUzB,EAAAihD,gBAAhB,SAAgCjhD,GAC5B,OAAOA,GAA0B,iBAAVA,GAUX,EAAAkhD,UAAhB,SAA0BlhD,GACtB,OAAiB,OAAVA,GAUK,EAAAmhD,mBAAhB,SAAmCnhD,GAC/B,OAAQ,YAASA,IAA2B,KAAjBA,EAAMohD,QAWrB,EAAAC,SAAhB,SAAyBrhD,EAAe61C,GAAe,GACnD,IAAK71C,EACD,OAAO61C,EAGX,MAAM15C,EAAS,YAAU6D,GACzB,OAAK+1C,MAAM55C,GAGA05C,EAFA15C,GAcC,EAAAmlD,aAAhB,SAA6BthD,GACzB,QAAI4gD,EAAqB5gD,KACZA,EAAMuhD,cAAgBvK,OAAWh3C,EAAM1E,OAAS,IAcjD,EAAAijD,cAAhB,SAA8Bv+C,GAC1B,OAAQ,YAASA,IAAWA,EAAMohD,OAAO9lD,OAAS,GAQtC,EAAAkmD,eAAhB,SAAgBA,EAAe/gD,GAC3B,IAAIT,EAAQ,GACRyhD,GAAW,EAEf,GAAsB,iBAAXhhD,EACP,OAAOT,EAGX,IAAK,MAAM0hD,KAAajhD,EACa,iBAAtBA,EAAOihD,GACd1hD,GAASyhD,EAAW,GAAGD,EAAe/gD,EAAOihD,IAAgB,IAAIF,EAAe/gD,EAAOihD,IAEvF1hD,GAASyhD,EAAW,GAAGhhD,EAAOihD,GAAe,IAAIjhD,EAAOihD,GAG5DD,GAAW,EAGf,OAAOzhD,GAvJf,CAAiB2gD,MAAO,M,iCCPxB,6CAaA,MAAMgB,EAA0B,GAC1BhuB,EAAiB,cACjBV,EAAYU,IAAmBA,EAAemqB,MAAM,sBAAwBnqB,EAAemqB,MAAM,cACvG,IAAI8D,GAAe,EACfC,GAAqB,EA4BzB,SAASC,IACL,GAAID,GAAsBD,EACtB,KAAOD,EAAYrmD,QAAQ,CACvB,MAAMm8B,EAAOkqB,EAAY5lD,QACL,mBAAT07B,GACPA,KA0BT,SAASpkB,EAAuBzR,GAE/BggD,GAAgBC,EAChBjgD,IAEA+/C,EAAY/lD,KAAKgG,GA7DrB,eAAeqxB,GAA0C,YAA7Bx1B,SAASskD,gBACrCtkD,SAAS6E,iBAAiB,oBAM9B,SAAS0/C,IACD,eACAvkD,SAASwkD,oBAAoB,mBAAoBD,GAErDJ,GAAe,EACfE,OATAF,GAAe,G,qICkBZ,MAAM,EA2BT,cAtBiB,KAAAM,cAA2D,GAK3D,KAAAC,kBAAgD,GAKhD,KAAAC,eAA6C,GAK7C,KAAAC,iCAAyE,IAAIC,IAS1FxgD,KAAKygD,OAASzgD,KAAKygD,OAAOhiD,KAAKuB,MAQ5B,aACH,OAAOA,KAAKsgD,eAST,UAAU/rC,GACb,OAAQvU,KAAKogD,cAAc7rC,GAQxB,mBACH,OAAOvU,KAAKqgD,kBAST,iBAAiB9rC,GAEpB,MAAMmsC,EAAgB1gD,KAAK62B,UAAUtiB,GACrC,GAAImsC,EACA,OAAOplD,QAAQC,QAAQmlD,GAI3B,MAAMC,EAAiB3gD,KAAKugD,iCAAiCziD,IAAIyW,GACjE,GAAIosC,EACA,OAAOA,EAAetlD,QAI1B,IAAIulD,EACAC,EACJ,MAAMxlD,EAAU,IAAIC,QAAkC,CAACC,EAASC,KAE5DolD,EAAkBrlD,EAClBslD,EAAiBrlD,IAOrB,OAHAwE,KAAKugD,iCAAiCxP,IAAIx8B,EAAW,CAAElZ,QAASA,EAASE,QAASqlD,EAAiBplD,OAAQqlD,IAGpGxlD,EAyBJ,OAAOylD,EAAYC,GAElB,4BAAkBD,KAClBA,EAAQ,IAGZ,IAAIE,EAAW,OAAH,UAAQF,GAChBG,GAAe,EAGnB,QAAsB/jD,IAAlB6jD,QAAqD7jD,IAAtB6jD,EAAcviD,IAAmB,CAEhE,MAAM0iD,EAAsD,iBAAvBH,EAAcnkD,KACnD,GAAIskD,GAAgBH,EAAcnkD,KAAK+8C,SAASzhB,EAAA,EAAmBC,cAAe,CAC9E,MAAMgpB,EAAmBJ,EAAcviD,IAAM,IAAM05B,EAAA,EAAmBua,kBAChE2O,EAAiB,YAAO,GAAI,OAAAtjD,EAAA,GAAIgjD,EAAOK,OAAkBjkD,IAC/D,OAAA6zC,EAAA,GAAIiQ,EAAUG,EAAkBC,GAChCH,GAAe,OACZ,GAAIC,GAAgBH,EAAcnkD,KAAK+8C,SAASzhB,EAAA,EAAmBwa,8BAA+B,CACrG,MAAM2O,EAAkCN,EAAcviD,IAChD8iD,EAAyCP,EAAc/uC,OAAO,GAEhEsvC,IACA,IAAsBC,qBAAqBP,EAAUK,EAAyBC,GAC9EL,GAAe,OAEhB,CAKCjhD,KAAKogD,cAAcW,EAAcviD,KAAKgjD,WACtCR,EAAW,OAAAS,EAAA,GAAM,GAAIT,IAGzB,MAAMU,EAAyB1hD,KAAK2hD,6BAA6BX,EAAUD,EAAcviD,IAAKuiD,GAC9FE,EAAeS,EAAuBT,aAElCA,GAEA,IAAsBW,kBAAkBZ,EAAUD,EAAcviD,IAAKkjD,EAAuBV,gBAMpGvnD,OAAOy2B,KAAKlwB,KAAKogD,eAAeroB,QAAQv5B,IAChCwB,KAAK2hD,6BAA6BX,EAAUxiD,EAAKuiD,GAAeE,eAChEA,GAAe,KAM3B,OAAIA,EACOD,EAEAF,EASR,0BAAoEjqB,GACvE,IAAKA,EACD,MAAM,IAAIx6B,MAAM,6CAIpB,MAAMmC,EAAMq4B,EAAUgrB,cAYtB,GAXA7hD,KAAKogD,cAAc5hD,GAAOq4B,EAG1B72B,KAAKsgD,eAAexmD,KAAK+8B,GAErBA,EAAU2qB,UACVxhD,KAAKqgD,kBAAkBvmD,KAAK+8B,GAK5B72B,KAAKugD,iCAAiCuB,IAAIjrB,EAAUtiB,WAAY,CAEhE,MAAMosC,EAAiB3gD,KAAKugD,iCAAiCziD,IAAI+4B,EAAUtiB,WAE3E,IACIosC,EAAeplD,QAAQs7B,GACzB,MAAOz6B,GACLukD,EAAenlD,OAAOY,GAI1B4D,KAAKugD,iCAAiCwB,OAAOlrB,EAAUtiB,WAG3DsiB,EAAUK,MAAMC,SAAS,CAAE34B,IAAKA,EAAK5B,KAAM,0BAWvC,6BAA6BkkD,EAAYtiD,EAAauiD,GAE1D,MAAMlqB,EAAY72B,KAAKogD,cAAc5hD,GAI/B2iD,EAAmB3iD,EAAM,IAAM05B,EAAA,EAAmBua,kBAClDuP,EAAyB,OAAAlkD,EAAA,GAAIgjD,EAAOK,OAAkBjkD,GAGtD+kD,EAAwBjiD,KAAKkiD,UAAUrrB,EAAUsrB,QAASH,EAAwBjB,GACxF,QAAqC,IAA1BkB,EACP,MAAM,IAAI5lD,MAAM,gBAAkBmC,EAAM,+BAI5C,MAAM4jD,EAAiCH,IAA0BD,EAKjE,OAJII,GACA,OAAArR,EAAA,GAAI+P,EAAOK,EAAkBc,GAG1B,CAAEjB,SAAUiB,EAAuBhB,aAAcmB,GASpD,UAA4BD,EAAqCE,EAAiCtB,GACtG,MAAMuB,EAAiCH,EAAQ1B,OAAO4B,EAAetB,GACrE,OAAIuB,IAAiBD,EACVC,EAEAD,G,wFCtSnB,IAAIE,EAAkB,IAAIC,QAKtBC,EAAuB,IAAIjC,IA4BxB,SAASkC,EAAwBC,GACpC,IAAKA,EACD,OAGJ,IAAI7iD,EAAWyiD,EAAgBzkD,IAAI6kD,GAEnC,IAAK7iD,EAAU,CACX,MAAM8iD,EAASD,EAAa3lD,MAAQ,UAC9B6lD,EAAUJ,EAAqB3kD,IAAI8kD,GAAU,GAAK,EAClDE,EAAgB,GACtBhjD,EAAW,CAACijD,EAAWC,KACnB,MAAMxkD,EAAMukD,EAAKvkD,IAEZskD,EAAStkD,GAGVskD,EAAStkD,KAFTskD,EAAStkD,GAAO,EAKpB,MAAMxB,EAAO,MAAM4lD,IAASC,KAAWC,EAAStkD,KAGhD,OAFA,YAA2BA,EAAKxB,GAEzB,GAAGwB,KAAOxB,KAGrBulD,EAAgBxR,IAAI4R,EAAc7iD,GAClC2iD,EAAqB1R,IAAI6R,EAAQC,GAGrC,OAAO/iD,EApDX,YAAsB,KAClByiD,EAAkB,IAAIC,QACtBC,EAAuB,IAAIjC,M,gDC+B/B,MAAM,EAyBF,YAAoByC,GAKhB,IAAIC,EACJ,MAAMC,EAAmB,GACzB,GAAK,eAAe,KAAU,IAAOrM,UAAmB,CAEpDoM,GADyBjkD,OAAOmkD,sCAAwCnkD,OAAOmkD,qCAAqC,CAAEC,OAAO,EAAMC,WAAY,MAAS,KAC5H,eAAmBH,SAG/CD,EAAW,eAAmBC,GAIlCnjD,KAAKujD,aAAe,IAAI,EAGxBN,EAAeA,GAAiB,eAAehkD,OAAOukD,cAAgB,eAA8B,GAChG,gBACAvkD,OAAOwkD,sBAAwBR,GAAqD,IAArCxpD,OAAOy2B,KAAK+yB,GAAczpD,SAI7EwG,KAAK0jD,OAAS,YAAY1jD,KAAKs4B,YAAYmoB,OAAQwC,EAAcC,GAO9D,6BAA6BD,GAChCjjD,KAAK0xB,UAAY,IAAI,EAASuxB,GAQlC,YACI,OAAOjjD,KAAK0jD,OAOhB,kBACI,OAAO1jD,KAAKujD,aAOT,mBAAmBN,GACtB,OAAOjjD,KAAK0xB,YAAc1xB,KAAK0xB,UAAY,IAAI1xB,KAAKijD,IAQjD,QAE+CjjD,KAAKs4B,YAAYqrB,aACrD5rB,QAAQlB,GAAaA,EAAU+sB,sBAa1C,kBAAkBC,EAAmDC,EAA0BhkD,EAAqBikD,GAAY,GAE/HA,GACA/jD,KAAKgkD,2BAKT,MAAMzK,EAAc,IAAM39C,cAAc,IAAU,CAAEs7B,MAAOl3B,KAAK0jD,QAAUG,GAGpEI,EAAc,cAEhBhlD,OAAOukD,cACP,IAASU,QAAQ3K,EAAauK,GAC9BG,EAAkC,qBAAI,EACtChlD,OAAOukD,cAAe,GACfvkD,OAAOklD,KACdF,EAAkC,qBAAI,EACtC,IAAWG,UAAU,eACrB,IAASF,QAAQ3K,EAAauK,EAAahkD,KAE3CmkD,EAAkC,qBAAI,EACtC,IAASI,OAAO9K,EAAauK,IAO9B,2BACH,MAAMQ,EAAkC,iBAAO,CAC3CC,QAAS,CAAC,MAAa,SAG3B,IAAW7B,wBAA0BA,EACrC,IAAW8B,IAAMF,GAIV,O,6BCvMf,+EAIA,MAAML,EAAc,cAAehlD,OAAOwlD,eAAiBxlD,OAAOwlD,aAAe,IAAO,KAC3D,gBAAexlD,OAAOylD,wBAA0BzlD,OAAOylD,sBAAwB,KAKrG,SAASC,IACZ,OAAOV,EAcJ,SAASW,EAAiBC,GAC7B,GAAIA,GAAeZ,EAAa,CAC5B,MAAMa,EAAgBb,EAAYY,KAAiBZ,EAAYY,GAAe,GAC9EZ,EAAYY,GAAeC,EAAgB,K,8BC1BnD,IAAYC,EAgBL,SAASC,EAAyB9O,GACrC,OAAQA,GACJ,KAAK6O,EAAYrL,KACb,OAAOqL,EAAYrL,KACvB,KAAKqL,EAAYE,KACb,OAAOF,EAAYE,KACvB,KAAKF,EAAYlK,IACjB,KAAKkK,EAAYG,MACjB,KAAKH,EAAYI,OACb,OAAOJ,EAAYlK,IACvB,QACI,OAAO,MA7BnB,oEAEA,SAAYkK,GACR,cACA,cACA,YACA,gBACA,kBALJ,CAAYA,MAAW,M,+BCFvB,0KAEO,MAAMK,EAAmB,IACzB,IAAIC,EAAmB,IACnBC,EAAmB,IACnBC,EAAmB,KACnBC,EAAa,I,6BCAxB,IAAYC,EANZ,kCAMA,SAAYA,GAKV,+BAKA,mCAKA,yCAKA,uBAKA,iCAKA,uCAKA,6CAKA,2BAKA,kCAMA,sCAKA,sBAxDF,CAAYA,MAAsB,M,6BCNlC,6OAoBO,MAAMC,EAAgB,MAGhBC,EAAgB,MAI7B,IAAYC,EAYL,SAASC,IAEZ,MAAMC,EAAwD,IAAS9vB,cAAcsC,YAAYzB,UAAU,IAAoBkvB,aAC/H,QAAOD,GAAuBA,EAAqBE,kBAAkBH,wBAQlE,SAASI,IAEZ,MAAMH,EAAwD,IAAS9vB,cAAcsC,YAAYzB,UAAU,IAAoBkvB,aAC/H,QAAOD,GAAuBA,EAAqBE,kBAAkBC,oBAgBlE,SAAeC,EAAWr8C,EAAkBs8C,EAAyBC,GAAmB,G,mDAC3F,MAAMl7C,QAmEH,W,mDACH,MAAMotC,EAAiB,cAEvB,OAAKA,EAAe+C,yBAIP/C,EAAe+C,mBAHjB,QAvEegL,GAE1B,OAAKn7C,EAaE,IAAI5P,QAASC,IAChB,MAAM+qD,EAAyB,CAC3BC,WAAYr7C,EAAYq7C,WACxBn7C,aAAcF,EAAYE,aAC1Bo7C,UAAW38C,EACX48C,kBAAmBN,GAIjBlC,EAAc,cACdyC,EAAazC,EAFA,2BAGbxI,EAAY9rC,KAAK+rC,MAAMn0C,YAAYo0C,OAEnCgL,EAAiBP,EAAmBnnD,OAAOq8C,OAAOC,YAAYqL,sCAAwC3nD,OAAOq8C,OAAOC,YAAYsL,2BAChIC,EAAoBV,EAAmB,mBAAqB,GAElEO,EAAeL,EAAyBS,IACpC,IAAKL,IAAeN,EAAkB,CAClC,MAAMxK,EAAUjsC,KAAK+rC,MAAMn0C,YAAYo0C,OACvCsI,EAXW,2BAWe8C,EAAcC,WAAapL,EAAUH,GAAa,EAGhF,IAAIwL,EAAS,IAAkBC,QAC1BH,EAAcC,aACf,IAAMpS,mBAAmB,OAAD,wBACjB,KAAwB,CAC3B73C,QAAS,6BACT07B,GAAI,OAAF,wBACK,IAAyBA,IAAE,CAC9BQ,cAAe,8BAA8B6tB,kBAAkCX,MAAoBljD,KAAKoL,UAAU04C,EAAcI,mBAIxIF,EAASF,EAAcI,WAAWC,kBAAoBxB,EAA0ByB,oCAC5EN,EAAcI,WAAWC,kBAAoBxB,EAA0B0B,qBACvE,IAAkBC,YAAc,IAAkBC,YAG1DjsD,EAAQ,CACJksD,MAAOV,EAAcW,aACrBC,UAAWZ,EAAcI,WACzBS,UAAWb,EAAcC,WACzBa,QAASd,EAAce,eACvBb,gBAvDR,IAAMrS,mBAAmB,OAAD,wBACjB,KAA4B,CAC/B73C,QAAS,yBACT07B,GAAI,OAAF,wBACK,IAA6BA,IAAE,CAClCQ,cAAe,8BAA8BktB,OAI9C,UAvDf,SAAYP,GAER,gFAEA,oDAJJ,CAAYA,MAAyB,M,+BC3BrC,gNAgBYmC,EAhBZ,yBAuBA,IAAIC,GAPJ,SAAYD,GACR,UACA,UACA,UACA,UAJJ,CAAYA,MAAiB,KAoBtB,MAAME,EAOT,YAAmBC,EAAuCC,EAA+BC,GAAtE,KAAAF,cAAuC,KAAAC,gBAA+B,KAAAC,oBAKzF,yBACI,GAAIpoD,KAAKooD,kBACL,OAAO,EAGX,GAAIJ,EAA2B,CAC3B,MAAMK,EAAgBL,EAA0BlqD,IAAIkC,KAAKkoD,aACzD,GAAIG,EACA,OAAOA,EAIf,OAAOroD,KAAKmoD,cAAgBG,GAQ7B,MAAMC,EAAoD,CAC7D,IAAIN,EAA4BF,EAAkBS,GAAI,KAAkB,GACxE,IAAIP,EAA4BF,EAAkBU,GAAI,KACtD,IAAIR,EAA4BF,EAAkBW,GAAI,KACtD,IAAIT,EAA4BF,EAAkBY,GAAI,MAMpDC,EAAmG,GACzG,IAAK,MAAMC,KAA+BN,EACtCK,EAAqBC,EAA4BX,aAAeW,EAQpE,MAAMP,EAAkB,GA2CjB,SAASQ,EAAcC,EAAyCC,GACnE,MAAMC,EAAU,GAEhB,GAAIF,EAAe,CACf,MACMG,EAD2BN,EAAqBG,GACVI,mBAExCD,EAAa,GACbD,EAAQnvD,KAAK,eAAe,YAAKovD,OAIzC,GAAIF,EAAgB,CAChB,MAAMI,EAA2BR,EAAqBI,GAChDK,EAAsBd,EAAmBrkD,QAAQklD,GAEnDC,EAAsBd,EAAmB/uD,OAAS,GAClDyvD,EAAQnvD,KAAK,eAAe,YAAKyuD,EAAmBc,EAAsB,GAAGF,mBAAqB,OAI1G,OAAOF,EAAQ/7C,KAAK,SAUjB,SAASo8C,EAAiBC,GAC7B,OAAOT,EAAcS,EAAmBA,GASrC,SAASC,EAAsBT,EAAyCC,GAC3E,MAAMS,EAAaX,EAAcC,EAAeC,GAChD,OAAOS,EAAa,UAAYA,EAAa,GAQ1C,SAASC,EAAyBH,GACrC,OAAOC,EAAsBD,EAAmBA,K,8BCvLpD,iHAUO,SAASI,EAAU3sD,GACtB,GAAI,eAAerB,UAAYA,SAASiuD,OAAQ,CAC5C,MACM5N,EADK,IAAIqC,OAAO,MAAQrhD,EAAO,mBAAoB,KACxCk4B,KAAKv5B,SAASiuD,QAC/B,OAAQ5N,GAASA,EAAMxiD,OAAS,EAAIwiD,EAAM,GAAK,KAGnD,OAAO,KAOJ,SAAS6N,IACZ,OAAOF,EAAU,QAed,SAASG,EAA2B9sD,EAAckB,EAAe6rD,EAAqB1N,EAAiB2N,EAAeC,GACzH,IAAIC,EACJ,MAAMC,EAAU,CAACntD,EAAM,IAAKkB,GAC5B,IAAK,IAAM6rD,EAEPG,EAAa,qCACV,GAAIH,EAAY,CACnB,MAAMK,EAAO,IAAIjjD,KACjBijD,EAAKC,QAAQD,EAAKr1B,UAA0B,MAAbg1B,GAC/BG,EAAaE,EAAKE,cAGlBJ,GAAcC,EAAQrwD,KAAK,YAAaowD,GACxC7N,GAAU8N,EAAQrwD,KAAK,WAAYuiD,GACnC2N,GAAQG,EAAQrwD,KAAK,SAAUkwD,GAC/BC,GAAUE,EAAQrwD,KAAK,WAEvB,eAAe6B,WACfA,SAASiuD,OAASO,EAAQj9C,KAAK,O,8BC1DvC,YAIe,MAAQ,G,gCCEvB,IAAYmG,EAcAk3C,EApBZ,oEAMA,SAAYl3C,GACR,oBACA,wCACA,YACA,oBACA,wCACA,YACA,YACA,gBACA,sBACA,yBAVJ,CAAYA,MAAQ,KAcpB,SAAYk3C,GACR,gBACA,0BACA,cAHJ,CAAYA,MAAgB,M,6BCoD5B,IAAYC,EAxEZ,sGAwEA,SAAYA,GACR,yBACA,iCACA,+BAHJ,CAAYA,MAAiB,KAStB,MAAM3gD,EAAW,uCAKX4gD,EAAkB,wC,8BCtF/B,sCAqBiBC,EArBjB,8DAqBA,SAAiBA,GAiDb,SAAgBC,EAA+B12C,EAAiB,KAAM22C,EAAuBC,GAAoB,GAC7G,MAAMvS,EAAiB,cACjBtmC,EAAS,CACX,CACIxT,IAAK,IAA0B+Z,OAC/Bra,MAAO,EAAAqa,QAEX,CAEI/Z,IAAK,IAA0B4Z,WAC/Bla,MAAOo6C,EAAewS,YAE1B,CACItsD,IAAK,IAA0BoO,KAC/B1O,MAAO2sD,EAAoBE,EAAkBzS,EAAe0S,UAAWJ,GAAiBA,GAE5F,CACIpsD,IAAK,IAA0Bya,OAC/B/a,MAAOo6C,EAAe2S,gBAK1Bh3C,GACAjC,EAAOlY,KAAK,CACR0E,IAAK,IAA0Bwb,KAC/B9b,MAAO+V,IAIf,MAAMi3C,EAAqB,cAAcxO,eAezC,OAdIwO,GACAl5C,EAAOlY,KAAK,CACR0E,IAAK,IAA0Bqa,OAC/B3a,MAAOgtD,IAIX,eACAl5C,EAAOlY,KAAK,CACR0E,IAAK,IACLN,MAAO,MAIR8T,EAkCX,SAAsBm5C,I,mDAClB,MAAMC,EAAU,GAEhB,GAAI,cAA2B,CAC3B,MAAMC,QAAgB,YAAW,IAAU,KACvCA,GAAWA,EAAQ5D,QACnB2D,EAAQ,IAAkB/yC,eAAiB,UAAUgzC,EAAQ5D,OAIrE,OAAO2D,KA4CX,SAAgBL,EAAkBzmD,EAAuBsmD,GACrD,OAAI,IAAQzL,gBAAgB76C,IACxB,IAAQ66C,gBAAgB76C,EAAU+B,WAClC,YAAS/B,EAAU+B,SAAS8I,eAC5B,YAAS7K,EAAU+B,SAAS+I,WACrB9K,EAAU+B,SAAS8I,aAAe,IAAM7K,EAAU+B,SAAS+I,WAAaw7C,EAAgB,IAAMA,EAAgB,IAE9GA,EAvLF,EAAAU,yBAA2B,KAK3B,EAAAC,yBAA2B,qBAK3B,EAAAC,mBAAqB,gBAKrB,EAAAjzC,OAAS,6CASA,EAAAkzC,yBAAtB,SAAkDC,EAAkCC,G,mDAChF,IACI,MAAMtxD,QAAeqxD,IAGrB,OAFAC,IAEOtxD,EACT,MAAO+B,GAEL,MADAuvD,IACMvvD,OAWE,EAAAuuD,+BAA8B,EA2D9B,EAAAiB,4BAAhB,SAA4C33C,EAAiB,KAAM22C,EAAuBC,GAAoB,GAC1G,MACMvU,EADiB,cACuB5rC,eACxCsH,EAAS,IAAI24C,EAA+B12C,EAAQ22C,EAAeC,IAQzE,OAPIvU,GACAtkC,EAAOlY,KAAK,CACR0E,IAAK,IAA0Bob,iBAC/B1b,MAAOo4C,EAAeuV,gBAIvB75C,GASW,EAAAm5C,qBAAoB,EAkBpB,EAAAW,6BAAtB,W,mDACI,MAAMV,QAAgBD,IAChB7S,EAAiB,cACjBlgC,EAAakgC,EAAewS,WAMlC,OAJIxS,EAAeyT,gCAAkC3zC,IACjDgzC,EAAQ,IAAkBhzC,YAAcA,GAGrCgzC,MASK,EAAAY,kBAAhB,SAAkCC,EAA6BC,GAC3D,MAAM5T,EAAiB,cACjBH,EAAW8T,GAAsB3T,EAAe6T,SAChD/T,EAAY8T,GAAuB5T,EAAe8T,UAExD,OAAIjU,GAAYC,EACL,CAAE55C,IAAK,IAA0BqW,SAAU3W,MAAO,GAAGi6C,KAAYC,KAGrE,MASK,EAAA2S,kBAAiB,EAgBX,EAAAsB,mBAAtB,SAAyCC,G,mDAMrC,MALgC,CAC5BlB,cAAeV,EAAkBS,uBACjCmB,cAWQ,EAAAC,gBAAhB,SAAgC3/C,GAC5B,OAAI,cAAc4/C,eACPxsD,KAAK4rD,4BAA4B,cAAoBa,OAAQ7/C,GAGjE5M,KAAK2qD,+BAA+B,cAAoB8B,OAAQ7/C,IAzN/E,CAAiB89C,MAAiB,M,6BCrBlC,8DAWA,MAAMgC,EAA4D,IAAIlM,IAsEtE,SAASmM,EAAuB9K,GAC5B,OAAOA,EAAgB,IAAM,IAAmBpP,kBAI7C,MAAMma,EAAwB,CACjCC,kBArEJ,SACIxL,EACAC,GACA,IAAIwL,EAA6BJ,EAAgC5uD,IAAIwjD,GAChEwL,IACDA,EAAgB,IAAIC,IACpBL,EAAgC3b,IAAIuQ,EAAmBwL,IAG3DA,EAAcE,IAAIL,EAAuBtL,KA6DzCE,qBApDJ,SACI0L,EACA5L,EACAC,GAIA,MAAM4L,EAA6BP,EAAuBtL,GACpDW,EAAyB,YAAIiL,EAAUC,OAA4BhwD,GAGnEiwD,EAA4B,YAAIF,EAAUN,EAAuBrL,QAAoBpkD,GAGrF+kD,EAAwB,OAAH,wBAAQD,GAAsB,CAAE,CAACV,GAAoB6L,IAChF,YAAIF,EAAUC,EAA4BjL,IAsC1CL,kBA7BJ,SACIqL,EACAG,EACAC,GAEA,MAAMC,EAA8BZ,EAAgC5uD,IAAIsvD,GACxE,GAAIE,EACA,IAAK,MAAMC,KAAiBD,EAAgB,CACxC,MAAME,EAA+B,YAAIP,EAAUM,OAAerwD,GAE9DswD,GACA,YAAIP,EAAUM,EAAe,OAAF,wBAAOC,GAAuB,CAAE,CAACJ,GAAyBC,S,6BCtErG,kHAKA,IAAII,EAgEG,SAASC,IACZ,IAAIC,EAAW,GAGf,MAAMC,EAASjyD,SAASka,qBAAqB,SACvCrc,EAASo0D,EAAOp0D,OAEtB,IAAK,IAAIF,EAAI,EAAGA,EAAIE,EAAQF,IAEK,MAAzBs0D,EAAOt0D,GAAGu0D,QAAQrJ,MAClBmJ,GAAYC,EAAOt0D,GAAGw0D,WAI9B,OAAOH,EAMJ,SAASI,EAAUC,GACtB,MAAMC,EAAOtyD,SAAS0F,eAAe,QAErC,IAAK4sD,IAASA,EAAKH,UACf,MAAO,GAKX,GAAIE,EACA,OAAOC,EAAKH,UAGhB,MAAMI,EAASvyD,SAASwyD,uBAAuB,KAE/C,IAAKD,IAAWA,EAAO10D,OACnB,OAAOy0D,EAAKH,UAGhB,MAAMM,EAAQF,EAAO,GAErB,OAAOD,EAAKH,UAAUntD,QAAQytD,EAAMC,UAAW,IAO5C,SAASC,IAEZ,MAAMC,EA5GH,WACH,GAAId,EACA,OAAOA,EAGX,IAAMxuD,SAAUA,OAAOy1C,aACnB,OAAO,KAIX,IAAI8Z,EACJ,MAAMC,EAAwBxvD,OAAOy1C,aAAa1hB,QAAQ,KAC1D,IACIw7B,EAAkBC,GAAyBxrD,KAAKC,MAAMurD,GACxD,MAAOryD,GACL,OAAO,KAGX,KAAKoyD,GAAoBA,EAAgBE,MAASF,EAAgBG,MAASH,EAAgBI,MAASJ,EAAgBK,MAChH,OAAO,KAGX,MAAMC,EAA2B7vD,OAAOy1C,aAAa1hB,QAAQw7B,EAAgBG,MAC7E,IAAKG,EACD,OAAO,KAGX,MAAMC,EAAiC/a,SAAS8a,GAChD,IAAKC,EACD,OAAO,KAIX,IADiC,IAAI5nD,MAAO4tB,WACpBg6B,EACpB,OAAO,KAGX,MAAMC,EAAqB/vD,OAAOy1C,aAAa1hB,QAAQw7B,EAAgBE,MACvE,IAAKM,EACD,OAAO,KAGX,IACIvB,EAAoBxqD,KAAKC,MAAM8rD,GACjC,MAAO5yD,GACL,OAAO,KAOX,OAJKqxD,GAAsBA,EAAkBxjD,KAAQwjD,EAAkBwB,YACnExB,EAAoB,MAGjBA,EAwDayB,GAEpB,IAAKX,IAAgBA,EAAYzN,MAC7B,OAAO,KAGX,IAAImC,EAEJ,IACIA,EAAehgD,KAAKC,MAAMqrD,EAAYzN,MAAOqO,GAC/C,MAAO/yD,IAIT,OAAO6mD,EAwBX,SAASkM,EAA2B3wD,EAAUN,GAE1C,MAAqB,iBAAVA,GAAgC,OAAVA,GAEN,QAAnBA,EAAMkxD,SACC,IAAI5O,IAAItiD,EAAMA,OAKtBA,I,mICnKJ,MAAMmxD,EAMY,kBCDlB,SAASC,EAAaC,GACzB,SAAKA,IAA2BA,EAAuB/1D,SAI/C+1D,EAAuBrrD,QAAQmrD,IAAqC,EASzE,SAASG,EAAsBnZ,EAAiBoZ,GACnD,MAAM,aAAEp6B,EAAe,GAAE,OAAEtE,EAAS,GAAE,SAAEN,EAAW,IAAOg/B,GAAe,IACnE,SAAEp9B,EAAQ,OAAEpZ,GAAW8X,EAE7B,MAAO,aAAasE,KAAgBhD,KAAYpZ,KAAUwX,KAAY4lB,IAQnE,SAASqZ,EAAc7S,GAC1B,OAAKA,GAAYA,EAAQ8S,WAIlB9S,EAAQ8S,WAAWpf,IAAI5a,GAAQA,EAAKtf,IAHhC,O,6BCtCf,6CASO,SAAeu5C,EAAsBC,EAAoBprD,G,mDAC5D,OAAO,IAAInJ,QAAQ,CAACC,EAAoCC,KAEtB,mBAAnByD,OAAO6wD,QACd7wD,OAAO6wD,QAAQ,CAACD,GAAat0D,GACtBkJ,GACP1F,QAAQ3C,MAAM,mEAAmEyzD,GACjFt0D,EAAQkJ,IAEPjJ,EAAO,mC,gCClBpB,qDAUA,MAAMu0D,EAaF,cALiB,KAAAC,cAAwB,OAMrChwD,KAAKiwD,WAAW1oD,aAOb,qBAKH,OAJKwoD,EAAWG,WACZH,EAAWG,SAAW,IAAIH,GAGvBA,EAAWG,SAOf,WAAW3oD,GACdvH,KAAKuH,YAAcA,EAOhB,UAAUvK,GACbgD,KAAKmwD,WAAWnzD,EA/CA,UAsDb,QAAQA,GACXgD,KAAKmwD,WAAWnzD,EAAOgD,KAAKgwD,eAC5BhwD,KAAKowD,gBAAgBpzD,GAOlB,WAAWA,GACd,MAAMuK,EAAcvH,KAAKuH,YACrBA,GAAeA,EAAY8oD,MAC3B9oD,EAAY8oD,KAAKrzD,GAUZ,eAAkBA,EAAcszD,G,mDACzCtwD,KAAKokD,UAAUpnD,GACf,MAAM3C,QAAei2D,IAErB,OADAtwD,KAAKuwD,QAAQvzD,GACN3C,KAQJ,kBAAkBm2D,GAErB,IAAKxwD,KAAKuH,YACN,OAGJ,MAAMkpD,EAAmD,GAGnDC,EAAc1wD,KAAKuH,YAAYopD,iBAAiB,QACtD,IAAKD,EACD,OAAOD,EAIX,IAAK,IAAIn3D,EAAI,EAAGA,EAAIo3D,EAAYl3D,OAAQF,IAAK,CAGzC,IAAIs3D,EAAqBF,EAAYp3D,GAAG0D,KACxC,IAAK4zD,GAA0C,MAA5BF,EAAYp3D,GAAGmiD,UAC9B,SAOJ,GAHAmV,EAAaA,EAAWjwD,QAAQ,iBAAkB,KAG7CiwD,EAAW5hB,WAAWwhB,GACvB,SAGJ,MAAMK,EAAmBJ,EAAYG,IAAe,IAAIE,EAAiBF,GACzEC,EAAiBE,iBAAiBL,EAAYp3D,IAC1Cu3D,EAAiBhJ,UACjB4I,EAAYG,GAAcC,GAIlC,OAAOJ,EAOH,gBAAgBzzD,GACpB,MAAMuK,EAAcvH,KAAKuH,YACzB,GAAIA,GAAeA,EAAYypD,QAC3B,IACIzpD,EAAYypD,QACRh0D,EACAA,EA3II,SA4IJA,EAAOgD,KAAKgwD,eAElB,MAAOrb,GAIL,IAAOJ,SAAS,mDAAmDv3C,cAAiB23C,OAM7F,MAAM+R,EAAaqJ,EAAW/5B,cAYrC,MAAM86B,EAaF,YAAYF,GALL,KAAAK,SAAW,EAMdjxD,KAAK4wD,WAAaA,EAOtB,cACI,OAAyB,MAAlB5wD,KAAKy7C,UAMT,iBAAiByV,GAGhBA,EAAUl0D,KAAK28C,SAnMH,WAsMP35C,KAAKmxD,iBACNnxD,KAAKmxD,eAAiBD,EAAUzV,WAIpCz7C,KAAKy7C,UAAYyV,EAAUzV,WAEF,MAAlBz7C,KAAKy7C,YAKZz7C,KAAKixD,UAAYC,EAAUzV,UAAYz7C,KAAKy7C,UAG5Cz7C,KAAKy7C,UAAY,S,kKCrN7B,MAAM,EAAc,cAMpB,MAAM2V,EAAN,cAGY,KAAAC,cAA4C,GAG7C,WAAWC,GAGd,MAAMC,EAAQvxD,KAAKwxD,SAASF,GAI5B,OAAIC,GAAS,EACFD,EAGJA,EAAeC,EAInB,QACHvxD,KAAKqxD,cAAgB,GAIjB,SAASC,GAGb,MAAMC,EAAQvxD,KAAKqxD,cAAcC,IAAiB,EAGlD,OAAOtxD,KAAKqxD,cAAcC,GAAgBC,EAAQ,GA4B1D,MAAME,EAAmB,IAAIL,EAWtB,MAAM,EAwBT,YACWE,EACSI,EACCC,EACAC,EACAp7C,GAJV,KAAA86C,eACS,KAAAI,aACC,KAAAC,eACA,KAAAC,iBACA,KAAAp7C,QAvBJ,KAAAq7C,YAA0B,IAAIT,EAK9B,KAAAU,SAAqD,GAoBlE9xD,KAAKsxD,aAAeG,EAAiBM,WAAW/xD,KAAKsxD,cAclD,cACHA,EACAI,EACAC,GAAe,EACfC,GAAiB,EACjBp7C,GAEA,OAAO,IAAI,EAAa86C,EAAcI,EAAYC,EAAcC,EAAgBp7C,GAS7E,OAAO86C,GAENtxD,KAAKsxD,eAAiBA,IAItBtxD,KAAK4xD,gBAEL5xD,KAAK8xD,SAAS/5B,QAAQi5B,IAClB,MAAMgB,EAAiBhyD,KAAKiyD,mBAAmBjB,EAAQkB,oBAChD,EAAYF,EA/Ef,iBAgFG,EAAYA,KAI3BhyD,KAAKsxD,aAAeA,EAEhBtxD,KAAK4xD,gBAEL5xD,KAAK8xD,SAAS/5B,QAAQi5B,IAClB,MAAMmB,EAAiBnyD,KAAKiyD,mBAAmBjB,EAAQkB,aACvD,EAAYC,EA1FR,UA0FwCnB,EAAQoB,KACpD,EAAYD,GAAkBnB,EAAQqB,GAAKrB,EAAQoB,QAiBxD,aAAaE,EAAwBC,EAA6B/7C,GAErE,MAAMilC,EAAYl0C,YAAYo0C,MAExB6W,EAAsBxyD,KAAKsxD,aACjC,IAAImB,EAAkBzyD,KAAK0yD,kBAAkBJ,EAAgBC,GACzDL,EAAclyD,KAAKiyD,mBAAmBQ,GAE1C,MAAME,EAAkBT,EApHZ,SA2HZ,OANAlyD,KAAKmwD,WAAWwC,GAEZ3yD,KAAK4xD,iBACL,EAAYe,GAAmBlX,GAG5B,CAIH5jB,WAAa+6B,IAET,MAAMhX,EAAUr0C,YAAYo0C,OAICiX,GACrBJ,IAAwBxyD,KAAKsxD,gBAIjCmB,EAAkBzyD,KAAK0yD,kBAAkBJ,EAAgBM,GACzDV,EAAclyD,KAAKiyD,mBAAmBQ,IAG1C,MAAMI,EAAgBX,EA3IpB,OA6IFlyD,KAAKmwD,WAAW0C,GAChB7yD,KAAKgxD,QAAQkB,EAAaS,EAAiBE,GAI3C7yD,KAAK8xD,SAASh4D,KAAK,CACfo4D,YAAaO,EACbj8C,MAAiB,MAATA,EAAiBA,EAAQxW,KAAKwW,MACtC47C,KAAM3W,EACN4W,GAAIzW,IAGJ57C,KAAK4xD,iBACL,EAAYM,GAAetW,EAAUH,KAU9C,kBACH,OAAOz7C,KAAK8xD,SAASvhB,IAAIygB,GAAY,OAAD,wBAC7BA,GAAO,CACVM,aAActxD,KAAKsxD,gBAWpB,eAAuCwB,EAAkBC,EAAaC,GAEzE,MAAMC,EAAQjzD,KAWd,OATgB,YAAaJ,GACzB,MAAMi4B,EAAao7B,EAAMr7B,aAAak7B,GAAUj7B,WAChD,IACI,OAAOk7B,EAAK54D,MAAM64D,EAAgBpzD,G,QAElCi4B,MAkBC,kBAA2Bq7B,EAAqB5C,EAAoC95C,G,mDAE7F,MAAMqhB,EAAa73B,KAAK43B,aAAas7B,EAAa,KAAM18C,GAAOqhB,WAC/D,IACI,aAAay4B,I,QAEbz4B,QASA,mBAAmBq6B,GACvB,MAAO,GAAGlyD,KAAKsxD,gBAAgBY,IAS3B,kBAAkBiB,EAAyBZ,GAC/C,MAAMa,EAAuBb,EAAsB,IAAMA,EAAsB,GAC/E,OAAOvyD,KAAK6xD,YAAYE,WAAW,GAAGoB,IAAkBC,KAOpD,WAAWxC,GACX5wD,KAAK2xD,cACLpqD,YAAY8oD,KAAKO,GAUjB,QAAQsB,EAAqBmB,EAAqBC,GACtD,GAAItzD,KAAK2xD,aACL,IAEIpqD,YAAYypD,QAAQkB,EAAamB,EAAaC,GAChD,MAAO3e,GACL,IAAOJ,SAASI,K,qBC9JhC,SAAS4e,EAAeC,EAAsBC,EAAa7zD,EAAc8zD,GAErE,MAAMC,EAAgB,CAClB32D,KAAMw2D,EACNI,GAAI,IACJH,MACA7zD,QAOJ,OAJgB,MAAZ8zD,IACAC,EAASE,IAAMH,GAGZC,EA8CX,SAASG,EAAoBl0D,EAA2Bm0D,EAAkB/2D,EAAcy2D,EAAaO,EAAqBp3D,GACtH,OAAOq3D,EAAar0D,EAAMm0D,EAAU/2D,EAAM,IAAKy2D,EAAK,KAAMO,EAAa,CAAEp5D,EAAGgC,IAchF,SAASq3D,EAAar0D,EAA2Bm0D,EAAkB/2D,EAAcJ,EAAc62D,EAAaC,EAAmB,KAAMM,EAAqBE,GAEtJ,MAAMC,EAAM,eACRC,IAAKL,EACL/2D,OACA42D,GAAIh3D,EACJ62D,MACAI,IAAKH,EACL5+B,GAAIu/B,EAAsBL,IACvBE,GAOP,OAJgB,MAAZR,IACAS,EAAON,IAAMH,GAGVS,EAYX,SAASG,EAAmB10D,EAA2BkyD,EAA8Bt7C,GAGjF,MAAM+9C,EAAiB,OAAAC,EAAA,GACnB1C,EAAS/4C,OAAOi4C,KACVA,EAAQx6C,QAAUA,GACjBi+C,EAAU70D,EAAMoxD,EAAQoB,KAAMpB,EAAQqB,KAE7C/6C,GAAQA,EAAKg6C,cAIXoD,EAAgC,GACtC,IAAIC,EAAW,EAqBf,OAnBAl7D,OAAOy2B,KAAKqkC,GAAgBx8B,QAAQ68B,IAGhC,MAAMC,EAAWN,EAAeK,GAAWE,KACvC,CAACC,EAAOC,IAAUD,EAAM3C,KAAO4C,EAAM5C,MAIzCuC,EAAWhlD,KAAKC,IAAI+kD,EAAUE,EAASA,EAASr7D,OAAS,GAAG64D,IAE5DqC,EAAa56D,KAAK,CACdkD,KAAM43D,EACN9C,SAAU+C,MAOXH,EAAaI,KAChB,CAACG,EAAWC,IAAcD,EAAUnD,SAAS,GAAGM,KAAO8C,EAAUpD,SAAS,GAAGM,MAerF,SAAS+C,EACLv1D,EACAkyD,EACA7N,EACAmR,EACAC,EACA/D,GAIA,MAAMgE,EAAmB,cAGnBC,EAAkB,CACpB,SAAU,OACV,SAAU,OACVC,MAAO,MACPC,MAAO,OAGLC,EAAwB,GAE9Bj8D,OAAOy2B,KAAK+zB,GACPlrC,OAAOva,GAAOA,EAAIw9C,MAAMqZ,IACxBt9B,QAAQv5B,IAEL,MAAMm3D,EAAmBn3D,EAAIw9C,MAAMsZ,GACnC,IAAKK,EACD,OAGJ,IAAIzD,EAAc1zD,EAAImC,QAAQ20D,EAAkB,IAChD,MAAMM,EAAS,GAAG1D,IAAcqD,EAAgBI,EAAiB,MAC3DE,EAAWF,GAAoB1R,EAAY2R,GAEjD,IAAKC,EACD,OAGJH,EAAsB57D,KAAK0E,GAC3Bk3D,EAAsB57D,KAAK87D,GAE3B,IAAIE,EAAmBxE,EAOvB,IAAKwE,EAAkB,CACnB,MAAMC,EAAoB7D,EAAYlW,MAAM,cAC5C,IAAI+Z,EAKA,OAJAD,EAAmBC,EAAkB,GACrC7D,EAAc6D,EAAkB,GAOxC,MAAMC,EAAY/R,EAAYzlD,GAEzBi2D,EAAU70D,EAAMo2D,EAAWH,IAIhC/D,EAASh4D,KAAK,CACV0c,QAAS4+C,EAAiBU,GAC1BxE,aAAcwE,EACd5D,cACAE,KAAM4D,EACN3D,GAAIwD,MAMhB,IAAK,MAAMI,KAAeP,SACfzR,EAAYgS,GAmH3B,SAASC,EAAkB5E,EAAsB8D,GAC7C,IAAKA,EAAiB9D,GAElB,OADA8D,EAAiB9D,GAAgB,CAAEmC,IAAK2B,EAAiBe,QAAQ1C,QAC1D,EASf,SAASY,EAAsBL,GAC3B,OAAOrkD,KAAK+rC,MAAoB,IAAdsY,GAQtB,SAASS,EAAU70D,EAA2Bw2D,EAAgBC,GAC1D,OAAQz2D,EAAK02D,cACL12D,EAAK22D,WACHH,GAAUA,GAAUx2D,EAAK22D,YACtBF,GAAQA,GAAQz2D,EAAK22D,SCzhBtC,IAAIC,EAMJ,MAAMC,EAA6B,GAQnC,IAAIC,EAQG,IAAmCxgC,EAiFnC,SAASwB,EAAmB84B,EAAwBkB,EAAoBl7C,GAC3E,OAwEJ,SAAiCg6C,GAC7B,IAAKiG,EAAOE,mBACR,OAAO,EAKX,MAAM,mBAAEC,GAAuBH,EAC/B,GAAIG,GAAsBA,EAAmBpG,GACzC,OAAO,EAIX,MAAM,2BAAEqG,GAA+BJ,EACvC,GAAII,GAA8BA,EAA2BrG,GACzD,OAAO,EAIX,OAAOiG,EAAOK,YA3FPC,CAAwBvG,GAc5B,SAAyBA,EAAwBkB,EAAoBl7C,GACxE,MAAMwgD,EAAcC,EAAmBzG,EAAgBkB,GAEjDj6B,EAAei/B,EAAsBM,GAC3C,GAAIv/B,EACA,OAAOA,EAGX,OAAOi/B,EAAsBM,GAAe,EAAaz4D,OACrDiyD,EACAkB,EACA+E,EAAOS,oBACPT,EAAO7E,eACPp7C,GA1BE2gD,CAAgB3G,EAAgBkB,EAAYl7C,QAC5CtZ,EAkCH,SAASk6D,EAAmB3/B,EAA4B4/B,GAE3D,MAAMC,EAAiBC,EAAe9/B,GAEtC,GAAIi/B,EAAsBY,KAAoB7/B,EAE1C,YADA,IAAO8c,SAAS,4EAA4E+iB,GAKhG7/B,EAAa+/B,OAAOH,UAGbX,EAAsBY,GAG7B,MAAMG,EAAiBF,EAAe9/B,GACtCi/B,EAAsBe,GAAkBhgC,EAMrC,SAASigC,IACZ,MAAMC,EAAmC,GAIzC,OAHAl+D,OAAOy2B,KAAKwmC,GAAuB3+B,QAAQi/B,GACvCW,EAAa79D,QAAQ48D,EAAsBM,GAAaY,oBAErDD,EAmCX,SAASJ,EAAe9/B,GACpB,MAAM,aAAE65B,EAAY,WAAEI,GAAej6B,EACrC,OAAOw/B,EAAmB3F,EAAcI,GAS5C,SAASuF,EAAmBzG,EAAwBkB,GAChD,MAAO,GAAGlB,KAAkBkB,GAAc,MA5L1C,gBALsCx7B,EAQZ,cAP1BwgC,EAAwB,GAsE5B,SAAwCxgC,GACpCz8B,OAAO+6B,OAAOiiC,EAAQD,ECjDnB,SAAgCtgC,GACnC,IACI,MAAM4a,EAAe,IAAKF,IAAI1a,GAAe4a,aACvC+mB,EAAa/mB,EAAahzC,IAAI,WAI9Bg6D,EAAiBhnB,EAAahzC,IAAI,eACxC,GAAsB,OAAlBg6D,EACA,MAAO,CACHnB,oBAAoB,GAM5B,IAAKmB,IAAmBD,EACpB,MAAO,GAGX,MAAME,EAA4C,CAC9CpB,oBAAoB,EAIpBL,aAAa,EACb0B,WAAY,EACZC,YAAa,GAGjB,GAAmB,QAAfJ,EAEAE,EAAajB,aAAc,EAC3BiB,EAAalB,2BAA6B,QAEvC,GAAIgB,EAAY,CAKnB,MAAMjB,EAAqBmB,EAAanB,mBAAqB,GAC7DiB,EAAW7zD,MAAM,KAAK+zB,QAAQmgC,GAC1BtB,EAAmBsB,IAAW,GAKtC,GAAIJ,EAAgB,CAChB,MAAMjB,EAA6BkB,EAAalB,2BAA6B,GAC7EiB,EAAe9zD,MAAM,KAAK+zB,QAAQmgC,GAC9BrB,EAA2BqB,IAAW,GAY9C,MARyC,SAArCpnB,EAAahzC,IAAI,kBACjBi6D,EAAab,qBAAsB,GAGI,SAAvCpmB,EAAahzC,IAAI,oBACjBi6D,EAAanG,gBAAiB,GAG3BmG,EAET,MAAO37D,GAGL,OADA,IAAOm4C,SAAS,mEAAqEn4C,GAC9E,IDlB6B+7D,CAAuBjiC,IAtE/DkiC,CAA+BliC,GAczBj3B,OAAQo5D,iBDGX,SAAyBz4D,EAA4B,IAExD,MAAMqkD,EAAc,OAAH,UAAQ,eAGnB6N,EAA+B,GAE/BsD,EAAmB,CAGrBkD,GAAI,CAAE7E,IAAK,GAGX8E,SAAU,CAAE9E,IAAK,GAGjB+E,IAAK,CAAE/E,IAAK,GACZgF,UAAW,CAAEhF,IAAK,GAClB,kBAAmB,CAAEA,IAAK,GAC1BiF,OAAQ,CAAEjF,IAAK,GACfkF,GAAI,CAAElF,IAAK,GACXmF,QAAS,CAAEnF,IAAK,GAChBoF,SAAU,CAAEpF,IAAK,GAKjB0C,QAAS,CAAE1C,IAAK,MAmVxB,SAA8B7zD,EAA2BkyD,EAA8BsD,GA8BnF,IAAI0D,EAAmBvxD,YAAYopD,iBAAiB,YAC/C53C,OAAO02B,IACJ,MAAM,SAAEwhB,EAAQ,UAAExV,GAAchM,EAChC,OAAQwhB,EAAW,GACZwD,EAAU70D,EAAM67C,EAAWA,EAAYwV,KA9B5B,CAGtB,CAAEj0D,KAAM,MAAO+7D,MAAO,gCAGtB,CAAE/7D,KAAM,YAAa+7D,MAAO,qBAI5B,CAAE/7D,KAAM,kBAAmB+7D,MAAO,uCAGlC,CAAE/7D,KAAM,SAAU+7D,MAAO,0BAIzB,CAAE/7D,KAAM,KAAM+7D,MAAO,SAGrB,CAAE/7D,KAAM,UAAW+7D,MAAO,aAG1B,CAAE/7D,KAAM,WAAY+7D,MAAO,qDAUbhhC,QAAQihC,IAGtB9C,EAAkB8C,EAAch8D,KAAMo4D,GAEtC,MAAM6D,EAAqB,GAE3BH,EACK//C,OAAO02B,IACJ,MAAMuM,EAAQvM,EAAMzyC,KAAKg/C,MAAMgd,EAAcD,OAI7C,OAHK/c,GACDid,EAAmBn/D,KAAK21C,GAErBuM,IAEVjkB,QAAQ,CAAC0X,EAAOypB,KAEb,MAAMvnD,EAAM,IAAIi/B,IAAInB,EAAMzyC,MACpBk1D,EAAcvgD,EAAIwnD,SAAS3/D,OAAS,EACpCmY,EAAIwnD,SACJxnD,EAAIqD,SAEV88C,EAASh4D,KAAK,CACV0c,OAAO,EACP86C,aAAc0H,EAAch8D,KAC5Bk1D,YAAa,GAAGA,KAAegH,IAC/B9G,KAAM3iB,EAAMgM,UACZ4W,GAAI5iB,EAAMgM,UAAYhM,EAAMwhB,aAKxC6H,EAAmBG,IAjZvBG,CAAqBx5D,EAAMkyD,EAAUsD,GA4ZzC,SACIx1D,EACAy5D,EACAC,EACAlE,GAGAkE,EAAevhC,QAAQi5B,IACnB,MAAM,MAAEx6C,EAAK,aAAE86C,GAAiBN,EAC5Bx6C,GACA0/C,EAAkB5E,EAAc8D,GAGhCX,EAAU70D,EAAMoxD,EAAQoB,KAAMpB,EAAQqB,KACtCgH,EAAoBv/D,KAAKk3D,KAvajCuI,CAAuB35D,EAAMkyD,EAAU4F,IAAyBtC,GAGhED,EAAiBv1D,EAAMkyD,EAAU7N,EAAamR,EAAkB,QAAS,MAIzE,MAAMoE,EAAa,OAAH,UAASv6D,OAAOw6D,aAAe,IAC/CtE,EAAiBv1D,EAAMkyD,EAAU0H,EAAYpE,EAAkB,MAG/D,MAAMsE,EAAc,GAGpBA,EAAY5/D,KAAKg6D,EAAoBl0D,EAAM,SAAU,WApBlC,IAoB0D,EAAG,MAGhFnG,OAAOy2B,KAAK+zB,GACPlrC,OAAO/b,GAAQA,EAAKg/C,MAAM,OAASyY,EAAU70D,EAAMqkD,EAAYjnD,KAC/D83D,KAAK,CAAC6E,EAAMC,IAAS3V,EAAY0V,GAAQ1V,EAAY2V,IACrD7hC,QAAQ/6B,GACL08D,EAAY5/D,KAAKg6D,EAAoBl0D,EAAM,SAAU5C,EA3B1C,IA2B4DinD,EAAYjnD,GAAO,OAIlGvD,OAAOy2B,KAAK+zB,GACPlrC,OAAO/b,GAAQA,EAAKg/C,MAAM,WAAayY,EAAU70D,EAAMqkD,EAAYjnD,KACnE83D,KAAK,CAAC6E,EAAMC,IAAS3V,EAAY0V,GAAQ1V,EAAY2V,IACrD7hC,QAAQ/6B,GACL08D,EAAY5/D,KAAKg6D,EAAoBl0D,EAAM,KAAM5C,EAAMo4D,EAAqB,GAAE3B,IAAKxP,EAAYjnD,GAAO,OAI9G08D,EAAY5/D,KAAKy5D,EAAe,eAvCb,IAuCyC,CAAEv2D,KAAM,UACpE08D,EAAY5/D,KAAKy5D,EAAe,qBAxCb,IAwC+C,CAAEsG,WAxCjD,OA0CnB,MAAM,YAAEvD,GAAgB12D,EA2CxB,OAxCA00D,EAAmB10D,EAAMkyD,GAAU,GAC9B/5B,QAAQ,CAAC88B,EAAUiF,KAEhB,MAAM,IAAErG,GAAQ2B,EAAiBP,EAAS73D,MAI1C63D,EAAS/C,SAAS/5B,QAAQ,CAACi5B,EAAS+I,KAEhC,MAAM,aAAEzI,EAAY,YAAEY,EAAW,KAAEE,EAAI,GAAEC,GAAOrB,EAG1Ch0D,EAAO,IAFe,MAAQ+8D,GAAcC,QAAQ,EAAG,MACtC1D,EAkavC,SAAsBt5D,GAGlB,MAAMi9D,EAAgBj9D,EAAKk9D,YAAY,KACvC,OAAQD,GAAiB,EACnBj9D,EAAKg9D,OAAOC,EAAgB,GAC5Bj9D,EAxa2Cm9D,CAAajI,GAAeA,IAIjEwH,EAAY5/D,QA+D5B,SAA4B8F,EAA2Bm0D,EAAkB/2D,EAAcy2D,EAAaC,EAAkBr9C,EAAY+/C,EAAgBC,EAAc+D,GAC5J,MAAO,CACHnG,EAAar0D,EAAMm0D,EAAU/2D,EAAMo9D,EAAqB,IAAM,IAAK3G,EAAKC,EAAU0C,EAAQ,CAAE//C,OAC5F49C,EAAar0D,EAAMm0D,EAAU/2D,EAAMo9D,EAAqB,IAAM,IAAK3G,EAAKC,EAAU2C,EAAM,CAAEhgD,QAlE9DgkD,CAAmBz6D,EAAM0xD,EAAct0D,EAAMy2D,EAAKqG,EAAeC,EAAc3H,EAAMC,MAI7GqH,EAAY5/D,KAAKy5D,EAAe,eAAgBE,EAAK,CAAEz2D,KAAM63D,EAAS73D,QACtE08D,EAAY5/D,KAAKy5D,EAAe,qBAAsBE,EAAK,CAAEoG,WAAYpG,KACzEiG,EAAY5/D,KAAKy5D,EAAe,cAAeE,EAAK,CAAEz2D,KAAM63D,EAAS73D,MAAQ88D,IAC7EJ,EAAY5/D,KAAKy5D,EAAe,oBAAqBE,EAAK,CAAEoG,WAAYC,GAAiBA,MAIjGxF,EAAmB10D,EAAMkyD,GAAU,GAC9B/5B,QAAQ,CAAC88B,EAAUiF,KAIhBjF,EAAS/C,SAAS/5B,QAAQi5B,IACtB,MAAM,aAAEM,EAAY,YAAEY,EAAW,KAAEE,EAAI,GAAEC,GAAOrB,EAChD0I,EAAY5/D,KA8D5B,SAA2B8F,EAA2Bm0D,EAAkB/2D,EAAcy2D,EAAaC,EAAkB0C,EAAgBC,GACjI,MAAMiE,EAAcjG,EAAsBgC,EAAOD,GACjD,OAAOnC,EAAar0D,EAAMm0D,EAAU/2D,EAAM,IAAKy2D,EAAKC,EAAU0C,EAAQ,CAAEmE,IAAKD,IAhEhDE,CAAkB56D,EAAM0xD,EAAcY,EA9EhD,IA8EkE4H,EAAe1H,EAAMC,MAGlGqH,EAAY5/D,KAAKy5D,EAAe,cAjFrB,IAiFyC,CAAEv2D,KAAM63D,EAAS73D,MAAQ88D,IAC7EJ,EAAY5/D,KAAKy5D,EAAe,oBAlFrB,IAkF+C,CAAEsG,WAAYC,GAAiBA,MAG1FJ,K,kGGlKI,GACXj7D,KAIJ,SAAmBuC,EAASpE,EAAM69D,GAC1Bz5D,EAAQR,kBACRQ,EAAQR,iBAAiB5D,EAAM69D,GAAS,IAL5CC,OASJ,SAAqB15D,EAASpE,EAAM69D,GAC5Bz5D,EAAQm/C,qBACRn/C,EAAQm/C,oBAAoBvjD,EAAM69D,GAAS,K,oBCRnD,MAAME,EAAiB,YAKjBC,EAAiB,CACnBC,IAAM,SACN,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,QAGM,OACXlpD,IAUJ,SAAS,EAAUqgC,GAGf,OAAgB,MAARA,GAAgB,EAAUA,IAAU,IAZ5C8oB,QAoBJ,SAA4B9oB,GAIxB,OAAgB,MAARA,GAAgB/yC,OAAO2wC,mBAAmBoC,IAAU,IAvB5Dl7B,KA+BJ,SAAoBk7B,GAOhB,OAAgB,MAARA,IAAiB,GAAKA,GAAMrxC,QAAQg6D,GAAgB,SAAUI,GAClE,OAAOH,EAAeG,IAAO,OAC1B,KCvDX,MAAMC,EAAa,CACfC,OAAQ,SAASC,GACb,OAAIF,EAAWjiD,OAEJiiD,EAAWjiD,OAAOmiD,GAGtBA,GAEXC,SAAU,SAAUxpD,EAAKhR,GACjBq6D,EAAWjiD,SAEXpH,EAAMqpD,EAAWjiD,OAAOpH,IAExBhR,EACAkU,SAASlU,QAAQgR,GAEjBkD,SAASC,KAAOnD,GAGxBypD,YAAaA,EACbC,SAAUA,EACVC,QAAS,SAAU3pD,GACf,MAAMqD,EAAWomD,EAAYzpD,GAC7B,OAAQqD,GAAaH,SAASG,UAAYA,GAE9C45B,UAAWA,EACXF,iBAAkB,SAAU/8B,EAAK4pD,EAAkB5sB,GAE/C,OAAOC,EADaj9B,EAAI3N,MAAM,KAAK,GACLu3D,EAAiB5sB,IAGnD6sB,uBAAwB,SAAU7pD,EAAK8pD,GACnC,GAAIA,EAAW,CACX,MAAMC,EAAW/pD,EAAI3N,MAAM,KAC3B,IAAIgO,EACJ,GAAI0pD,EAAS,GAAI,CAGb1pD,EAAS48B,EAAU8sB,EAAS,IAAI,GAAO,GACvC,IAAK,MAAM3gB,KAAS0gB,EAChBzpD,EAAO+oC,GAAS0gB,EAAU1gB,QAI9B/oC,EAASypD,EAIb9pD,EAAM+pD,EAAS,GACf,IAAIh4D,EAAY,IAChB,IAAK,MAAMq3C,KAAS/oC,EACZA,EAAO+oC,GACPppC,GAAOjO,EAAY,EAAOo3D,QAAQ/f,GAAS,IAAM,EAAO+f,QAAQ9oD,EAAO+oC,IAEvEppC,GAAOjO,EAAY,EAAOo3D,QAAQ/f,GAEtCr3C,EAAY,IAIpB,OAAOiO,GAEXoH,OAAQ,MAGG,QAEf,SAAS61B,EAAUG,EAAawsB,EAAkB5sB,GAC9C,MAAMgtB,EAAgC,SAAUt3D,GAG5C,OAFAA,EAAMA,EAAI1D,QAAQ,MAAO,KACzB0D,EAAMyqC,mBAAmBzqC,IAIvB2N,EAAS,GACf,GAAI+8B,EAAa,CAGb,MAAMG,GADNH,EAAcA,EAAY/qC,MAAM,KAAK,IACNA,MAAM,KACrC,IAAK,IAAImrC,EAAM,EAAGA,EAAMD,EAAW11C,OAAQ21C,IAAO,CAC9C,MAAMC,EAAQF,EAAWC,GAAKnrC,MAAM,KACpC,IAAIxF,EAAM4wC,EAAM,GACZlxC,EAAQkxC,EAAM,GAEdT,IACAnwC,EAAMm9D,EAA8Bn9D,GAChCN,IACAA,EAAQy9D,EAA8Bz9D,KAI1Cq9D,GACKvpD,EAAOxT,KACRwT,EAAOxT,GAAO,IAGlBwT,EAAOxT,GAAK1E,KAAKoE,IAEjB8T,EAAOxT,GAAON,GAK1B,OAAO8T,EAmBX,SAASqpD,EAAS1pD,GACd,MAAMiqD,EAASjgE,SAASC,cAAc,KAGtC,OAFAggE,EAAO9mD,KAAOnD,EAEP,CACH6D,SAAUomD,EAAOpmD,SACjBN,KAAM0mD,EAAO1mD,KACb2mD,SAAUD,EAAO5mD,SACjB8mD,KAAMF,EAAOE,KACb9R,KAAM4R,EAAOzC,SACb4C,KAAMH,EAAOG,KACbziD,MAAOsiD,EAAOtmD,OACdF,OAAQwmD,EAAOxmD,QAIvB,SAASgmD,EAAYzpD,GACjB,OAAO0pD,EAAS1pD,GAAKkqD,S,kDCvIzB,MAAMG,EAAe,cACfC,EAAcD,EAAeA,EAAah4D,MAAM,KAAKk4D,UAAY,GACjEC,EAAaF,EAAYziE,OAAS,EAAIyiE,EAAY,GAAK,IAAMA,EAAY,GAAKD,EAE9EI,EAAqB,0GACrBC,EAAmB,oBACnBC,EAAmB,oBAKzB,IAAIC,EAAUj4D,EAAA,EAAU+B,SAASwG,SAAW,GAExC2vD,EAAYl4D,EAAA,EAAU+B,SAASo2D,WAAa,GAsHhD,SAASC,EAAkBC,EAAOC,GAM9B,MAAMC,EAAYF,EAAM3gB,MAAMsgB,GACxBQ,EAAYD,GAAaA,EAAU,GACnCE,EAAYJ,EAAMz4D,QAAQ,KAChC,IAAI84D,EAAY,GAGhB,IAAKF,EAAW,CAERC,GAAa,IACbC,EAAYL,EAAM1tB,UAAU8tB,EAAWJ,EAAMnjE,QAC7CmjE,EAAQA,EAAM1tB,UAAU,EAAG8tB,IAK/B,IAAIE,EAAWN,EACfM,GAAY,SAEZ,MAAMC,EAAW,GAGbN,GACAM,EAASpjE,KAAK,WAAa8iE,GAI/B,MAAMO,EAAQrvD,EAAA,EAAaC,gBAAkBzJ,EAAA,EAAU+B,SAASyD,UAC5DqzD,GACAD,EAASpjE,KAAK,SAAWqjE,GAG7B,MAAMziB,EAAOp2C,EAAA,EAAUsF,OAAOC,WAK9B,OAJI6wC,GACAwiB,EAASpjE,KAAK,QAAU4gD,GAGrBuiB,EAAWC,EAAShwD,KAAK,KAAO8vD,EAG3C,OAAOL,EA6DI,OACXS,cA/NJ,SAAuBT,EAAO7/D,EAAQR,GAOlC,IAAKqgE,IAAU7/D,EACX,OAICy/D,IAEDA,EAAUj4D,EAAA,EAAU+B,SAASwG,SAG5B2vD,IAEDA,EAAYl4D,EAAA,EAAU+B,SAASo2D,WAInC,MAAMY,EAAcV,EAAMz4D,QAAQ,OAC5Bo5D,EAAkBX,EAAMz4D,QApCT,oBAqCfq5D,EAAaF,EAAc,GAAKC,GAAmB,GAAKA,EAAkBD,EAI1EG,EAAYb,EAAM3gB,MAAMqgB,GACxBQ,EAAYF,EAAM3gB,MAAMsgB,GAMxBmB,EAAYD,GAAaA,EAAU,GACnCV,EAAYD,GAAaA,EAAU,GACzC,IAAIa,EAEJ,GAAID,GAAaX,EAAW,CAExB,IAAIa,EAAehB,EACnB,MAAMiB,EAAWjB,EAAM3gB,MAAM,qBAS7B,OARA0hB,EAAWE,GAAYA,EAAS,QAG5BF,IAAaC,EAAa3hB,MAAM,oBAChC2hB,EAAejB,EAAkBiB,EAAah9D,QAAQ27D,EAAkB,IAAKO,EAAU,MAO/F,MAAME,EAAYJ,EAAMz4D,QAAQ,KAChC,IAAI84D,EAAY,GAIhB,IAAKS,EAAW,CAGZ,GAAIV,IAAcJ,EAAMnjE,OAAS,EAC7B,OAIJ,GAAI+iE,EAAS,CACT,MAAMsB,EAAczB,EAAmBlnC,KAAKynC,GACtCmB,EAAeD,GAAeA,EAAY,GAChD,IAAIE,EAAUpB,EACd,GAAImB,EAAc,CAEd,GADoBA,EAAa55D,QAAQi4D,IAAe,EAUpD,OARIY,GAAa,IACbC,EAAYL,EAAM1tB,UAAU8tB,EAAWJ,EAAMnjE,QAC7CukE,EAAUpB,EAAM1tB,UAAU,EAAG8tB,IAGjCgB,GAAWA,EAAQ75D,QAAQ,KAAO,EAAI,IAAM,IAC5C65D,EAAUA,EAAU,QAAUxB,OAC9Bz/D,EAAOgY,KAAOipD,GAAWf,GAAa,OAQtD,IAAKS,GAAcjB,IAIfe,EAAY,CAKRR,GAAa,IACbC,EAAYL,EAAM1tB,UAAU8tB,EAAWJ,EAAMnjE,QAC7CmjE,EAAQA,EAAM1tB,UAAU,EAAG8tB,IAK/B,IAAIE,EAAWN,EACVc,IACDR,GAAY,SAAWT,GAG3BS,EAAWP,EAAkBO,EAAUS,GACvC5gE,EAAOgY,KAAOmoD,EAAWD,IAgH7BgB,yBA5DJ,WAQI,IAAIC,GAAkB,EAEtB,GAAI35D,EAAA,EAAU+B,SAAU,EACD,IAKf43D,GAAkB,GAK1B,GAAI35D,EAAA,EAAUsF,SAENtF,EAAA,EAAUsF,OAAOs0D,gBAAiB,CAEtC,IAAIC,EAGAA,IAEA75D,EAAA,EAAUsF,OAAOs0D,gBAAkBj7D,KAAKoL,UAAU8vD,IAI1D,MAAO,CAAEF,gBAAiBA,IA2B1BG,0BAxBJ,SAAmCp9D,KAyB/B07D,kBAAmBA,EACnB2B,gBAlBJ,SAAyBC,EAAQC,GAU7B,OAAOA,EAAeD,EAAS,aAAeA,EAAS,YCtM3D,MAAMxsB,EAAO7nC,EAAA,EAAI6nC,KACX0sB,EAAUv0D,EAAA,EAAIjN,KACdyhE,EAAYx0D,EAAA,EAAI0D,OAChB+wD,EAAcz0D,EAAA,EAAIkoC,SAClBwsB,EAAa,GACnB,IAAIC,EACJ,MAAMjtB,EAAM,cAAch2C,SAAW,KAGrC,IAAIkjE,EAAoB,KAGxB,MAMMC,EAAkB,yCAIxB,IAAIC,EAAkB,GAGM,IAAmB1tB,gBAI/C,SAAS2tB,EAASC,GAGd,IAAIC,EAEJ,MAAM1vD,EAAa,cAAc,EAAWk/B,iBAAiB,eAAqB,GAGlF,IAAK,IAAIS,EAAM,EAAGA,EAAMwvB,EAAWnlE,OAAQ21C,IAAO,CAC9C+vB,EAAiBP,EAAWxvB,GAC5B,MAAMgwB,EAAUD,EAAeE,YAC/B,GAAID,EAAQE,qBAAsB,CAC9B,MAAMC,EAAQH,EAAQE,qBAAqBr7D,MAAM,KACjD,IAAIu7D,GAAW,EACf,IAAK,IAAIjmE,EAAI,EAAGA,EAAIgmE,EAAM9lE,OAAQF,IAC9B,GAAIgmE,EAAMhmE,IAAM6lE,EAAQ9oD,GAAI,CACxBkpD,GAAW,EACX,MAKR,GAAIA,GAAY/vD,EAAWgwD,GAAI,CAE3BL,EAAQM,kBAAmB,EAC3B,UAIR,GAAIN,EAAQM,iBAERN,EAAQM,kBAAmB,OACxB,GAAIP,EAAgB,CAERA,EAAeD,OAkC1C,SAASS,EAAyB1+D,EAAS2+D,EAAeC,GAKtD,MAAMztB,EAAWusB,EAAY19D,IAAY,GACzC,IACI6+D,EADA1wB,EAAM,EAKV,IAFAwwB,EAAgBA,GAAiB,MAE1BxwB,EAAMgD,EAAS34C,OAAQ21C,IAI1B,GAHA0wB,EAAW/tB,EAAKK,EAAShD,GAAMwwB,IACxBD,EAAyBvtB,EAAShD,GAAMwwB,EAAeC,GAE1DC,GAAcD,GAAeztB,EAAShD,GAAK2wB,UAC3C,OAAOD,EAsEnB,SAASE,EAAuB/+D,GAI5B,IAEImxC,EAFAof,EAAQ,EACRpiB,EAAM,EAEV,GAAInuC,IAAY8wC,EAAK9wC,EAAS,MAK1B,IAJAmxC,EAAWusB,EAAY19D,IAAY,GAC/B8wC,EAAK9wC,EAAS,UAAY8wC,EAAK9wC,EAASsD,EAAA,EAAUC,UAClDgtD,IAEGpiB,EAAMgD,EAAS34C,OAAQ21C,IAC1BoiB,GAASwO,EAAuB5tB,EAAShD,IAGjD,OAAOoiB,EAGX,SAASyO,EAAwBh/D,EAAS4U,EAASqqD,GAM/C,GAAIA,GAASj/D,GAAW4U,EAAS,CAC7B,GAAI5U,EAAQ4U,SAAWA,EAEnB,OAAO5U,EAGX,MAAMmxC,EAAWusB,EAAY19D,IAAY,GACzC,IAAK,IAAImuC,EAAM,EAAG+wB,EAAa/tB,EAAS34C,OAAQ21C,EAAM+wB,EAAY/wB,IAAO,CACrE,GAAIgD,EAAShD,GAAKv5B,SAAWA,EACzB,OAAOu8B,EAAShD,GACb,CACH,MAAMgxB,EAAWH,EAAwB7tB,EAAShD,GAAMv5B,EAASqqD,EAAQ,GACzE,GAAIE,EACA,OAAOA,IAKvB,OAAO,KAmHX,SAASC,EAA2BC,GAU3BA,GAKA/7D,EAAA,EAAU2C,uBAIVo5D,EAAY9nC,WACb8nC,EAAY9nC,SAAW,IAASC,OAOxC,SAA8B6nC,GAI1B/7D,EAAA,EAAUhI,MADU,CAAEM,KAAM,aAI5B,MAAM0jE,EAASh8D,EAAA,EAAUg8D,OACzB,CA+BIC,MAAOF,EAAYhqD,GACnBmqD,OAAQH,EAAYtjE,QACpB0jE,UAAWJ,EAAYvmD,OACvBye,SAAU8nC,EAAY9nC,SACtBE,GAAI4nC,EAAY5nC,IAotCPioC,EAjtCLz9D,KAAKoL,UAAUiyD,GAitCLK,GAjtCc,EAstC5BA,EACA,IAAOpsB,SAASmsB,GAEhB,IAAO5sC,IAAI4sC,GARnB,IAAiBA,EAAKC,EAnwClBC,CAAqBP,GACrBrB,EAAS,wBAoDb,SAAS6B,EAAqBvkE,EAAO0E,EAAS8/D,EAAaC,EAAU/lE,EAAQ2E,EAAOqhE,IA+BvEhgE,GAAW1E,IACZ0E,EAAU1E,EAAMQ,QAIfkE,IAAW8wC,EAAK9wC,EAASsD,EAAA,EAAUC,UANnB,YASdvD,EAAQqV,KAaf0qD,EAVJ,WACI,MAAM54D,EAAYxM,SAAS0F,eAAe,KAC1C,GAAI8G,EAEA,OAAOA,EAAUjK,MAMV+iE,IAGfC,EAAW5kE,EAAO0E,EAAS8/D,EAAaC,EAAU/lE,EAAQ2E,EAAOqhE,GAGrE,SAASE,EAAW5kE,EAAO0E,EAAU8/D,EAAcC,EAAW/lE,EAAS2E,EAAQqhE,EAAWG,GAsCtF,IALKngE,GAAW1E,IACZ0E,EAAU1E,EAAMQ,SAIfkE,GAAW8wC,EAAK9wC,EAASsD,EAAA,EAAUC,SACpC,OAMAvD,EAAQogE,SACRpgE,EAAUA,EAAQ,KAItB1E,EAAQA,GAAS,IAEX+kE,eAAgB,EAItB/8D,EAAA,EAAUhI,MAAQA,EAClB,IAAIglE,EAAWtgE,EAAQ8T,MAAQg9B,EAAK9wC,EAAS,QAG7B,KAAZsgE,IACAA,EAAWtgE,EAAc,MAI7B8/D,EAAcA,GAAehvB,EAAK9wC,EAASsD,EAAA,EAAUM,SACjD08D,GAAYxvB,EAAK9wC,EAAS,WAAa,GAI3C,MAAMugE,EAAczvB,EAAK9wC,EAAS,YAAc,GAChD,IAAK+/D,IAAaQ,EAAa,CAE3B,MAAMC,EAAkBxB,EAAwBh/D,EAAS,KAAM,IAAMg/D,EAAwBh/D,EAAS,KAAM,GACxGwgE,IACAT,EAAW92D,EAAA,EAAI+nC,KAAKwvB,IAIJ,iBAAbT,IACPA,EAAWQ,GAAezvB,EAAK9wC,EAASsD,EAAA,EAAUK,UAC7C,QAAU65D,EAAQx9D,GACbsD,EAAA,EAAUI,oBACVotC,EAAK9wC,EAAS,UAAY0+D,EAAyB1+D,EAAS,QAAS,QAAUiJ,EAAA,EAAI+nC,KAAKhxC,IAAY8wC,EAAK9wC,EAAS,QAAU0+D,EAAyB1+D,EAAS,QAAU,KAIjK9D,MAAjB6jE,EAASzhB,OACTyhB,EAAWA,EAASzhB,QAIxBtkD,EAASA,GAjcb,SAASymE,EAAYzgE,GAMjB,GAAIA,EAAS,CACT,MAAM2M,EAAS8wD,EAAUz9D,GACnB0gE,EAAQ5vB,EAAKnkC,EAAQ,MAC3B,GAAIrJ,EAAA,EAAUO,WAAa68D,EACvB,OAEJ,MAAMC,EAAaF,EAAY9zD,GAC/B,OAAIg0D,GAAcD,EACP,CAACC,EAAYD,GAAOx0D,KAAK5I,EAAA,EAAUE,aAEvCk9D,GAASC,GAibDF,CAAYzgE,IAAYsD,EAAA,EAAUG,cAGrD9E,EAAQA,IAAUmyC,EAAK9wC,EAAS,MAAQ,EAhb5C,SAAS4gE,EAAuB5gE,GAW5B,IAAKA,EACD,OAGJ,MAAM2M,EAAS8wD,EAAUz9D,GACzB,IAAIuwD,EAAQ,EACRpiB,EAAM,EAGV,IAAK2C,EAAKnkC,EAAQ,MAAO,CAErB,GADA4jD,EAAQqQ,EAAuBj0D,IAC3B4jD,EAOA,OAAO,EAJPA,IAQR,MAAMpf,EAAWusB,EAAY/wD,IAAW,GACxC,KAAOwhC,EAAMgD,EAAS34C,OAAQ21C,IAAO,CACjC,GAAIgD,EAAShD,IAAQnuC,EAAS,CAC1BuwD,IACA,MAEJA,GAASwO,EAAuB5tB,EAAShD,IAG7C,OAAOoiB,EAsYqCqQ,CAAuB5gE,IAMnE,MAAM6gE,EAAS7gE,EAAQqxC,WAAaP,EAAK9wC,EAAS,SAClDggE,EAAWA,IAAa,eAAe9rC,KAAK2sC,GAAUxjB,OAAOyjB,GAAK,MAC7D,mBAAmB5sC,KAAKosC,GAAYjjB,OAAOyjB,GAAK,IAErD,IAAIC,EAAa,GACbC,EAAc,GACdC,EAAiB,GACrB,MAAMC,EAAmB59D,EAAA,EAAUE,YACnC,IAAI6C,EACA86D,EACAC,EACAC,EAEJ,GAAI/lE,IAAUA,EAAMM,MAAQ0H,EAAA,EAAUa,WAAWC,OAAS9I,EAAMM,MAAQ0H,EAAA,EAAUa,WAAWE,eAAiB/I,EAAMM,MAAQ0H,EAAA,EAAUa,WAAWG,QAAUhJ,EAAMM,MAAQ0H,EAAA,EAAUa,WAAWI,aAAejJ,EAAMM,MAAQ0H,EAAA,EAAUa,WAAWK,YAAa,CACzP,MAAM88D,EAAmB,SAEzB,GADAP,EAAajwB,EAAK9wC,EAASshE,IACtBP,EAAY,CACb,MAAMp0D,EAAS8wD,EAAUz9D,GACzB+gE,EAAap0D,EAASmkC,EAAKnkC,EAAQ20D,GAAoB,GAG3D,IAII,GADAD,EAAiBp/D,KAAKC,MAAM6+D,GACxBM,GAAkBA,EAAelxD,IAAMkxD,EAAejxD,GAAI,CAC1D,MAAMA,EAAKC,EAAA,EAAmBC,wBAAwB+wD,EAAelxD,GAEjEC,IACAixD,EAAejxD,GAAKA,GAKxBixD,GAAkBA,EAAelxD,IACjCixD,EAAe/wD,EAAA,EAAmB8e,qBAAqBkyC,EAAelxD,IAItE7U,EAAM8N,gBAAkB9F,EAAA,EAAUa,WAAWI,aAC7C48D,EAAa9wD,EAAA,EAAmB+e,oBAAoBI,WACpD4xC,EAAe/wD,EAAA,EAAmBwN,sBAAsBE,aACjDziB,EAAMM,OAAS0H,EAAA,EAAUa,WAAWC,OAC3C+8D,EAAa9wD,EAAA,EAAmB+e,oBAAoBC,MACpD+xC,EAAe/wD,EAAA,EAAmBwN,sBAAsBC,UACjDxiB,EAAMM,OAAS0H,EAAA,EAAUa,WAAWE,cAC3C88D,EAAa9wD,EAAA,EAAmB+e,oBAAoBC,MAC7C/zB,EAAMM,OAAS0H,EAAA,EAAUa,WAAWG,SAC3C68D,EAAa9wD,EAAA,EAAmB+e,oBAAoBG,QAE1D,MAAOr1B,GACLmnE,EAAiB,GAGrB,MAAME,EAipBd,SAAoBvhE,GAChB,MAAM3G,EAAc,GACdmoE,EAAmB,GACnBC,EAAsB,GAE5B,KAAOzhE,GAAS,CACZ,MAAM0hE,EAAkBC,EAAsB3hE,EAAS,UACnD0hE,IACIA,EAAgBhkE,GAChB8jE,EAAiB1oE,KAAK4oE,EAAgBhkE,GAGtCgkE,EAAgB/kE,GAChB8kE,EAAoB3oE,KAAK4oE,EAAgB/kE,IAGjDqD,EAAUy9D,EAAUz9D,GAKxB,OAFA3G,EAAO2nE,YAAcQ,EACrBnoE,EAAO4nE,eAAiBQ,EACjBpoE,EAtqB6BuoE,CAAW5hE,GACvCuhE,IACAP,EAAcO,EAAwBP,YAAY9F,UAAUhvD,KAAKg1D,GACjED,EAAiBM,EAAwBN,eAAe/F,UAAUhvD,KAAKg1D,IAI3E76D,EAAY/K,EAAMumE,KAItB,MAAMC,EAAa,EAAW1H,YAAY0F,GACtCgC,GAAcA,EAAWj4D,cAAc3G,QAAQ,aAAe,IAE9D48D,EAAciC,EAAMC,gBAAgBlC,EAAa,CAAC,IAAK,OAGvDC,EAAW,IAIfz8D,EAAA,EAAUg8D,OACV,CA2CI2C,eAAgBnC,EAChBC,SAAUA,EACVmC,cAAeloE,EACfmoE,eAAgBxjE,EAChByjE,WAAYpC,EACZhmE,OAAQqnE,EACRgB,YAAariE,EAAQqiE,aAAe,GACpCtxB,SAAU/wC,EAAQ+wC,UAAY,GAC9BuxB,SAAUtB,EACVuB,SAAUtB,EACV76D,eAAgB9C,EAAA,EAAU8C,eAAeC,GACzC86D,WAAYA,EACZC,aAAcA,GAGlBpD,EAAS,uBAGb,SAASwE,EAAkBC,EAAgBj9D,GAWvCA,IAA4BA,SAGrBlC,EAAA,EAAUhI,aAIVgI,EAAA,EAAUgC,WAAWwD,iBAGrBxF,EAAA,EAAUiC,qBAEjB,MACMwM,EAAW0wD,GAAkBA,EADb,QAEtB,GAAI1wD,EAAU,CACV,MAAM2wD,EAAgB,OAChBxwD,EAAoB7B,EAAA,EAAmB8B,qBAAqBJ,GAClE,GAAIG,EAAmB,CACnBuwD,EANc,QAMkBvwD,EAAkBE,SAElD,MAAMqd,EAAWgzC,EAAeC,GAC1BC,EAAoBtyD,EAAA,EAAmBqC,0BAA0BrC,EAAA,EAAmBsJ,kBAAmB8V,GACzGkzC,EACAF,EAAeC,GAAiBC,EACzBzwD,EAAkBG,WAAahC,EAAA,EAAmBsJ,kBAAkBC,YAE3E6oD,EAAeC,GAAiBp/D,EAAA,EAAU+B,SAAS+I,UAEnDq0D,EAAeC,GAAiBxwD,EAAkBG,UAS1D,IAAe2f,QADY,4BAE3B,IAAeshB,WAFY,2BAG1BmvB,EAAiBA,GAAkB,IAAIG,GAAK,GAGjDt/D,EAAA,EAAUiC,qBAAuBk9D,EACjCn/D,EAAA,EAAUkC,wBAA0BA,EAEpC,MAAMnM,EAASwpE,EAAe7F,2BAC1B3jE,GAAUA,EAAO4jE,iBACjB8E,EAAMe,cAAc,IAAmBtyB,UAG3CwtB,EAAS,0BAOLJ,EACAzsD,EAAA,EAASC,IAAI,aAEbwsD,EAAkB,EAClBzsD,EAAA,EAASC,IAAI,0BAIV9N,EAAA,EAAUiC,qBA1vBrB4L,EAAA,EAAS8gC,IAAI,YA0Cb,SAAuB8wB,OAmtBhB,MAAMhB,EACb,CACIiB,cAgdJ,SAAuB1nE,GAOnB2nE,GAAiB3nE,IAtdjB4nE,QAydJ,SAAiB5nE,GAQb,GAAI,GAAKA,EAAM6nE,OACX,OAGJF,GAAiB3nE,IAnejB4kE,WAAYA,EACZL,qBAAsBA,EACtBuD,aA5gBJ,SAAsBC,GAsBlB//D,EAAA,EAAUhI,MAAQ,CAAEM,KAAM,iBAC1B,MAAM0nE,EAAUtwB,SAASqwB,EAASE,GAC5BC,EAAWxwB,SAASqwB,EAASI,GAGnCngE,EAAA,EAAUg8D,OACV,CAsBIoE,IAAKL,EAASK,IACdC,IAAKN,EAASM,IACdtuD,GAAIguD,EAAShuD,GACbuuD,GAAIP,EAASO,GACbL,EAAGtwB,MAAMqwB,GAAW,EAAIA,EACxBG,EAAGxwB,MAAMuwB,GAAY,EAAIA,EACzBvd,OAAQod,EAASpd,OACjB4d,KAAMR,EAASQ,KACfC,MAAOT,EAASS,MAChBC,IAAKV,EAASU,IACdC,IAAKX,EAASW,KAGlBhG,EAAS,wBA8cTiG,gBA8pBJ,SAAyBjzD,EAAQkzD,GAI7B,IAAKlzD,IAAWA,EAAY,MAAM1N,EAAA,EAAUyC,sBACxC,OAGJ,IAAIo7D,EACAC,EAEApwD,EAAY,MAAM1N,EAAA,EAAUa,WAAWS,mBACvCu8D,EAAa9wD,EAAA,EAAmB+e,oBAAoBC,MACpD+xC,EAAe/wD,EAAA,EAAmBwN,sBAAsBlX,WAIxDqK,EAAa,OACbA,EAAa,KAAIA,EAAa,KAAEojC,YAGpC,MAAM/uC,EAAW/B,EAAA,EAAU+B,SACrBuD,EAAStF,EAAA,EAAUsF,OACnB0D,EAAchJ,EAAA,EAAUgJ,YACxBiB,EAAkBjK,EAAA,EAAU4H,kBAAkBqC,gBAAgByD,EAAY,KAE1EmzD,EAAgB,CAClBC,GAAIjD,EACJkD,GAAIjD,EACJkD,GAAI17D,EAAO5H,SACXujE,GAAI37D,EAAO3H,QAEXujE,IAAKn/D,EAASo/D,OAEdp1D,IAAKhK,EAASiK,WAEd,OAAQjK,EAAS+I,UAEjB,OAAQ/I,EAASgJ,UAEjBV,IAAKtI,EAASq/D,qBAGd,SAAUr/D,EAASs/D,YAAc3zD,EAAO,WAAa,QAErD,UAAW3L,EAASu/D,eAAiB5zD,EAAO,YAAc,QAE1D6zD,OAAQx/D,EAASy/D,SAEjBh1D,SAAUzK,EAASyK,SAGnBi1D,SAAS,EACTt0D,IAAKyzD,EAAW53D,EAAYM,kBAAoBN,EAAYO,qBAK1Dm4D,EAAaC,GAFE,OAAA73D,EAAA,GAAO,GAAI4D,EAAQzD,EAAiB42D,IAInDzzD,EAAa,CAEfC,IAAKtL,EAASmL,OACdI,YAAa,IAAmB0/B,IAChCx/B,UAAWk0D,EAAgB,IAC3Bh0D,OAAQg0D,EACR/zD,aAAc,IAAmBC,IACjCg0D,YAAa,eAGjB/zD,EAAA,EAASC,IAAI,IAAmBC,cAAeX,IAnuB/Cy0D,mBAsuBJ,SAA4Bn0D,GAGxB,IAAKA,IAAW1N,EAAA,EAAUyC,sBACtB,OAIJ,MAAMq/D,EACN,CACI,cAAep0D,EAAO,eACtB,kBAAmBA,EAAO,mBAC1B,gBAAiBA,EAAO,iBACxB,gBAAiBA,EAAO,iBACxB,kBAAmBA,EAAO,mBAC1Bq0D,YAAar0D,EAAoB,YACjC7E,UAAW6E,EAAkB,WAGjC,IAAIs0D,EAAa,OAAAl4D,EAAA,IAAO,EAAM,GAAIg4D,EAAgBG,GAA0B,aAG5ED,EAAaL,GAAwBK,GAGrChiE,EAAA,EAAU4H,kBAAkB8E,WAAWs1D,IA7vBvCE,YAAaC,GACbC,sBAtiBJ,WAOI,MAAMC,EAAQ,cAAwB,KAAO,cAC7C,IAAKriE,EAAA,EAAUyC,sBACX,OAGJ,MAAM2K,EAAa,CACfC,IAAKg1D,EACL/0D,YAAa,IAAmB0/B,IAChCr/B,aAAc,IAAmBu/B,UAGrCr/B,EAAA,EAASC,IAAI,IAAmBC,cAAeX,IAqhB/Ck1D,yBAhkBJ,SAAkCC,GAS9B,GAAIA,EAAU,CAEV,IAAI3H,EACJ,MAAMD,EAAuB,yBAC7B,IAAI9vB,EAAM,EAEV,KAAOA,EAAMwvB,EAAWnlE,OAAQ21C,IAE5B,GADA+vB,EAAiBP,EAAWxvB,GACxB+vB,EAAeE,YAAY/oD,KAAOwwD,EAAU,CAC7B3H,EAAeD,KAC9B,SA+iBZ6H,qBAAsBA,GAEtBP,0BAA2BA,GAC3BvD,gBA2yBJ,SAAyBrxD,EAAKo1D,GAI1B,GAAIp1D,GAAOo1D,EAAW,CAClB,MAAMC,EAAar1D,EAAI3N,MAAM,KAC7B,GAAIgjE,EAAWxtE,OAAS,EAAG,CACvB,IAAIytE,EAAYD,EAAW,GAAK,IAChC,MAAME,EAAeF,EAAW,GAC1Bh1D,EAAS,EAAW48B,UAAUs4B,GACpC,GAAIA,EAAc,CACd,IAAK,IAAI5tE,EAAI,EAAGA,EAAIytE,EAAUvtE,OAAQF,IAClCytE,EAAUztE,GAAKytE,EAAUztE,GAAGuR,cAEhC,IAAK,MAAMkwC,KAAS/oC,EACXm1D,GAASpsB,EAAMlwC,cAAek8D,KAC/BE,EAAYA,EAAYlsB,EAAQ,IAAM/oC,EAAO+oC,GAAS,KAIlE,OAAOksB,EAAU9nE,MAAM,GAAI,IAGnC,OAAOwS,GAh0BPijC,mBAAoB,SAAUyrB,GAS1B,OAAA9uD,EAAA,GAAuB,KACnB6uD,EAA2BC,MAInC+G,uBAAwB,SAAU35D,EAAM45D,EAAiB57D,EAAW8D,GAOhE,OAAAgC,EAAA,GAAuB,KACnB+1D,GAA+B75D,EAAM45D,EAAiB57D,EAAW8D,MAIzEg4D,UAAW,SAAU9D,EAAiBj9D,GAOlC,OAAA+K,EAAA,GAAuB,KACnBiyD,EAAkBC,EAAgBj9D,MAI1CghE,sBAAuB,WAKnBr1D,EAAA,EAASC,IAAI,6BAGjBq1D,SAAU,YAAa7nE,GAenB,IACI8nE,EADAv4B,EAAM,EAKV,KAAQu4B,EAAyB9nE,EAAKuvC,MAC9B8E,MAAMyzB,EAAuBC,gBAC7BD,EAAuBC,aAAe,IAE1ChJ,EAAW7kE,KAAK4tE,IAIxBE,wBAAyB,WASrB,OAAO95D,EAAA,EAAaC,gBAAkBzJ,EAAA,EAAU+B,SAASyD,WAAa,IAG1E+9D,mBAAoB,SAAUC,EAAQC,EAAW/1D,EAAQg2D,GAwBrDh2D,EAAS,OAAA5D,EAAA,GAAO,GAAI05D,EAAQ91D,GAE5Bg2D,EAAY,OAAA55D,EAAA,IAAO,EAAM,GAAI25D,EAAWC,GACxC,IAAK,MAAMC,KAAYD,EAAW,CAC9B,MAAME,EAAoB5jE,EAAA,EAAU2jE,GACpC,GAAIC,EAAmB,CACnB,MAAMC,EAAaH,EAAUC,GAC7B,IAAK,MAAMzpE,KAAO2pE,EAAY,CAE1B,MAAMC,EAAe9jE,EAAA,EAAUiC,qBAC/B,IAAIrI,EACAM,GAAO4pE,QAAsClrE,IAAtBkrE,EAAa5pE,IACpCN,EAAQkqE,EAAa5pE,GAEjB8F,EAAA,EAAUkC,0BACV0hE,EAAkBC,EAAW3pE,IAAQN,KAGzCA,EAAQgqE,EAAkBC,EAAW3pE,IAEjB,mBAATN,IACPA,EAAQA,MAKH,MAATA,IACA8T,EAAOxT,GAAON,KAM9B,OAAO8T,GAGX5D,OAAQ,SAAU2mC,GACd,OAAA3mC,EAAA,IAAO,EAAM9J,EAAA,EAAWywC,IAG5ByJ,KAAM,SAAU/wC,GAQZ,IAAI46D,EAHC56D,GAASA,EAAKjU,SACfiU,EAAO,CAACA,IAGZ,IAAI0hC,EAAM,EAIV,KAAQk5B,EAAW56D,EAAK0hC,MAIhB,QAAUqvB,EAAQ6J,IAAcv2B,EAAKu2B,EAAU,yBAC/CC,EAAO7pE,KAAK4pE,EAAU,SAAUxH,IAK5CiD,cAAe,SAAU+C,GAGrB,GAAIA,EAAU,CACVA,EAAWA,EAASh8D,cAGpB,IAAK,IAAIskC,EAAM,EAAGA,EAAMwvB,EAAWnlE,OAAQ21C,IAAO,CAC9C,MAAMgwB,EAAUR,EAAWxvB,GAAKiwB,YAChC,GAAIyH,IAAa1H,EAAQ9oD,GAAGxL,cAAe,CACvCs0D,EAAQM,kBAAmB,EAC3B,UAMhB8I,iBAAkB,SAAU9E,EAAiBj9D,GASzCsH,EAAA,EAAaywC,qBACbuoB,KACAtD,EAAkBC,EAAgBj9D,GAElCrJ,WACI,KACImqE,GAA+B3rE,SAAS0F,eAAe,SAAS,EAAM,OAAQ,OAElF,OA6BZ,SAASshE,EAAsB3hE,EAAS2+D,GACpC,MAAM6I,EAAW12B,EAAK9wC,EAAS2+D,GAC/B,GAAI6I,EACA,IACI,OAAOvlE,KAAKC,MAAMslE,GACpB,MAAOttE,GACL,OAAO,KAIf,OAAO,KAIX,SAASisE,GAASxxC,EAAM8yC,GACpB,GAAIA,EAAMvkE,QACN,OAAgC,IAAzBukE,EAAMvkE,QAAQyxB,GAGrB,IAAK,IAAIr8B,EAAI,EAAGA,EAAImvE,EAAMjvE,OAAQF,IAC9B,GAAImvE,EAAMnvE,KAAOq8B,EACb,OAAO,EAKnB,OAAO,EAGX,SAAS2xC,GAA+B75D,EAAM45D,EAAiB57D,EAAW8D,GAUtE,GAAI9B,EAAM,CACFA,EAAK2zD,SACL3zD,EAAOA,EAAK,IAIhB,MAAMi7D,EApEd,SAA+BC,GAC3B,MAAMD,EAAW,GAGjB,GAAIC,GAAcA,EAAW/8D,iBAAkB,CAC3C,MAAMg9D,EAAoBD,EAAW/8D,iBAAiB,YAGlDkmC,EAAK62B,EAAY,WACjBD,EAAS5uE,KAAK6uE,GAIlB,IAAK,IAAIhpE,EAAQ,EAAGA,EAAQipE,EAAkBpvE,OAAQmG,IAClD+oE,EAAS5uE,KAAK8uE,EAAkBjpE,IAKxC,OAAO+oE,EAiDcG,CAAsBp7D,GACjCwD,EAAmB,GAEzB,IAAK,IAAItR,EAAQ,EAAGA,EAAQ+oE,EAASlvE,OAAQmG,IAAS,CAClD,MAAMqB,EAAU0nE,EAAS/oE,GACzB,GAAI0nE,IAAoB/iE,EAAA,EAAU4H,kBAAkBC,UAAUnL,GAC1D,SAGJ,MAAM8nE,EAAoBnG,EAAsB3hE,EAAS,UACnDqV,EAAKyyD,EAAoBA,EAAkBxvE,OAAI4D,EAGrD,QAAWA,IAAPmZ,IAAqB8wD,GAAS9wD,EAAI0oD,KAElCA,EAAgBjlE,KAAKuc,GACrBpF,EAAiBnX,KAAKgvE,GAIlBA,EAAkB33D,IAAM23D,EAAkB13D,IAAI,CAC9C,MAAMA,EAAKC,EAAA,EAAmBC,wBAAwBw3D,EAAkB33D,GAEpEC,IACA03D,EAAkB13D,GAAKA,IAMvC,MAAM/E,EAAU,GAQhB,GAPI4E,GAAoBA,EAAiBzX,OAAS,IAE9C6S,EAAQnR,EAAI+V,GAKZ5E,GAAWA,EAAQnR,GAAKmR,EAAQnR,EAAE1B,OAAS,EAAG,CAC9C,MAAMuvE,EAAO,GAA0BzkE,EAAA,EAAUuB,qBAAqBM,QACtE7B,EAAA,EAAU4H,kBAAkBM,oBAAoBu8D,EAAM18D,EAASkD,KAK3E,SAASu3D,KACL/H,EAAkB,GA6BtB,SAASiK,GAAqBC,GAkB1B,IAAIC,EAAU,KACd,GAAID,EAEA,IAAmC,GAA/BA,EAAU/kE,QAtpCN,SAspC8B,CAGlC,MAAMxB,EAAUumE,EAAUh6B,UAAU,EAAGg6B,EAAU/kE,QAAQ,MAAM2G,cACzDs+D,EAAS,cAAkBt+D,cAC7Bs+D,GAAUzmE,GAAWymE,EAAOl6B,UAAU,EAAGk6B,EAAOjlE,QAAQ,OAASxB,IACjEwmE,EAAU5kE,EAAA,EAAUa,WAAWE,oBAInC6jE,EAzDZ,SAAyBD,GAsBrB,MAAM5uE,EAAS,IAAIgkD,OAAOygB,GAAiB5pC,KAAK+zC,GAChD,OAAQ5uE,GAAUA,EAAOb,QAAUa,EAAO,IAAO,KAkC/B+uE,CAAgBH,GAIlC,OAAOC,EAGX,SAASzC,GAAUnqE,EAAOsiD,EAAWyqB,GAejC,IAAI76D,EAAM,KAoBV,OAlBImjC,GAAOA,EAAI60B,aACXh4D,EAAMmjC,EAAI60B,YAAY,UACtBh4D,EAAI86D,UAAU1qB,GAAW,GAAO,EAAMyqB,GAAcpqE,OAChD,EAAG,EAAG,EAAG,EAAG,GAAG,GAAO,GAAO,GAAO,EAAO,EAAG,OAE3C0yC,GAAOA,EAAI43B,oBAElB/6D,EAAMmjC,EAAI43B,kBAAkBjtE,GAC5BkS,EAAI5R,KAAOgiD,GAGXpwC,IACAA,EAAI8jC,aAAe+2B,EAGnB76D,EAAIpE,cAAgB9N,GAASA,EAAMM,MAGhC4R,EA8FX,SAASy1D,GAAiB3nE,GAOtB,IAAKA,EACD,OAKJ,GAAIA,EAAM+kE,eAAkB/kE,EAAM8N,eAAiB9N,EAAM8N,cAAci3D,cACnE,OAOJ,IAEI/kE,EAAMumE,KAAOv+D,EAAA,EAAU4C,iBACnB5K,EAAMg2C,cAAgBh2C,EAAMg2C,aAAak3B,SACzCltE,EAAMg2C,aAAeh2C,EAAMg2C,aAAa32C,SAAS8tE,cACjDntE,EAAMQ,OAASR,EAAMg2C,cAE3B,MAAOqC,IAMT,IAAI73C,EAASmN,EAAA,EAAIC,UAAU5N,GAC3B,KAAOQ,IAAWg1C,EAAKh1C,EAAQ,SAA8B,UAAnBA,EAAOi1C,UAA2C,YAAnBj1C,EAAOi1C,UAC5Ej1C,EAAS2hE,EAAU3hE,GAIvB,GAAIA,GAAWmC,OAAeyqE,4CAA6C,CACvE,MAAMC,EAAqBhuE,SAAS0F,eAAe,eACnD,GAAIvE,EAAOu1C,UAAUjd,SAAS,kBAAqBu0C,GAAsBA,EAAmBxC,SAASrqE,GACjG,OAKR,KAAIA,GAAUA,EAAO8sE,cAAgB9sE,EAAO8sE,aAAa,uBAKrD9sE,GA7ER,SAAwB+sE,GAQpB,IACI,GAAIA,GAAiBhL,GAAqBA,IAAsBgL,EAC5D,OAAO,EAEXhL,EAAoBgL,EACpB1sE,YAAW,WAEP0hE,EAAoB,OAlyCI,KAoyC9B,MAAOlqB,GAEL,OADAkqB,EAAoB,MACb,EAEX,OAAO,EAwDOiL,CAAehtE,IAA7B,CAIA,GAAIR,EAAMmK,WAAY,CAClB,MAAMA,EAAanK,EAAMmK,WACzB,GAA0B,iBAAfA,EACP,IAAK,MAAMjI,KAAOiI,EACd,GAAIjI,EAAK,CACL,MAAM6F,EAAMoC,EAAWjI,GACnB6F,GAAc,aAAPA,GACPC,EAAA,EAAUwP,2BAA2BtV,EAAK6F,IAS9D,GAAIvH,IAAWA,EAAO0hD,KAAM,CACxB,IAAIhwC,EAAMlS,EAENA,EAAMM,MAAQ0H,EAAA,EAAUa,WAAWI,cACnCiJ,EAAMi4D,GAAUnqE,EAAOgI,EAAA,EAAUa,WAAWC,MAAOtI,IAIvD,MAAM6/D,EAAQ7/D,EAAa,KAC3B,GAAI6/D,GAASA,EAAMnjE,OAAQ,CAEvB,GAAImjE,EAAMz4D,QAAQ,MAAQy4D,EAAMnjE,OAAS,GAAKmjE,EAAMz4D,QA53ChD,UA43CoE,EAGpE,GAAI5H,EAAMM,MAAQ0H,EAAA,EAAUa,WAAWC,MAAO,CAC1B4jE,GAAqBrM,KAEjCnuD,EAAMi4D,GAAUnqE,EAAOgI,EAAA,EAAUa,WAAWE,cAAevI,SAE5D,GAAIR,EAAMM,MAAQ0H,EAAA,EAAUa,WAAWI,YAC1C,OAKJiJ,EAAI5R,MAAQ0H,EAAA,EAAUa,WAAWE,eA7LjD,SAA6B/I,GAOrBA,EAAMytE,eACNztE,EAAMytE,iBAENztE,EAAM0tE,aAAc,EAoLZC,CAAoB3tE,GAIpBA,EAAM6kE,gBACN3yD,EAAI2yD,cAAgB7kE,EAAM6kE,eAG9B0C,EAAezG,cAAcT,EAAO7/D,EAAQ0R,GAC5C0yD,EAAW1yD,EAAK1R,OACb,CAEH,IAAIotE,EAAyB5tE,EAAMQ,OAAOkG,aAAa,sBAClDknE,IAEDA,EAAyBzL,EAAUniE,EAAMQ,SAAW2hE,EAAUniE,EAAMQ,QAAQkG,aAAa,sBACpFknE,IAEDA,EAAyBzL,EAAUniE,EAAMQ,SAAW2hE,EAAUA,EAAUniE,EAAMQ,UAAY2hE,EAAUA,EAAUniE,EAAMQ,SAASkG,aAAa,wBAK9I1G,EAAMM,MAAQ0H,EAAA,EAAUa,WAAWI,cAC/BjJ,EAAM6kE,cACND,EAAW,CAAEtkE,KAAM0H,EAAA,EAAUa,WAAWE,cAAevI,OAAQA,EAAQqkE,cAAe7kE,EAAM6kE,gBAE5FD,EADkC,UAA3BgJ,EACI,CAAEttE,KAAM0H,EAAA,EAAUa,WAAWC,MAAOtI,OAAQA,GAE5C,CAAEF,KAAM0H,EAAA,EAAUa,WAAWE,cAAevI,OAAQA,QA4GnF,SAASypE,GAA0B/3D,GAG/B,MAAMD,EAAkBjK,EAAA,EAAU4H,kBAAkBqC,gBAAgBC,GAC9DnI,EAAW/B,EAAA,EAAU+B,SAE3B,IAAI2L,EACJ,CACIm4D,IAAK7lE,EAAA,EAAUsF,OAAStF,EAAA,EAAUsF,OAAOqD,mBAAqB,GAE9D,qBAAsB5G,EAAS+jE,MAE/B35C,SAAUpqB,EAASgJ,UAEnBw2D,OAAQx/D,EAASy/D,SAEjBN,IAAKn/D,EAASo/D,OAEd4E,UAAWhkE,EAASikE,SAEpBC,GAAIjmE,EAAA,EAAUsF,OAASgmC,mBAAmBtrC,EAAA,EAAUsF,OAAO+C,WAAatG,EAASsG,QAEjF0D,IAAKhK,EAASiK,WAEdQ,SAAUzK,EAASyK,SAEnB6hB,SAAUruB,EAAA,EAAUgC,WAAahC,EAAA,EAAUgC,WAAWkkE,WAAa,IAQvE,OAJIj8D,UACAyD,EAAS,OAAA5D,EAAA,IAAO,EAAM,GAAI4D,EAAQzD,IAG/ByD,EAGX,SAASi0D,GAAwBj0D,GAG7B,MAAMg0D,EAAa,GACnB,IAAK,MAAMjrB,KAAS/oC,EACK9U,MAAjB8U,EAAO+oC,KACPirB,EAAWjrB,GAAS/oC,EAAO+oC,IAInC,OAAOirB,I,2GC5mDJ,MAAM,UAAa,IAkBtB,YAAY7H,GACR/lC,MAAM+lC,GAfA,KAAAsM,aAAmD,CACzDC,eAAWxtE,EACXytE,UAAMztE,EACN0tE,eAAW1tE,EACX8E,YAAQ9E,EACR2tE,oBAAgB3tE,EAChB4tE,aAAS5tE,EACTgnE,aAAShnE,EACT+E,WAAO/E,EACP6tE,sBAAkB7tE,EAClB8tE,kBAAc9tE,EACd+tE,0BAAsB/tE,GAKtB8C,KAAK8gD,MAAQ,CACToqB,aAAc,MASf,oBACH,MAAM,UAAEN,GAAc5qE,KAAKm+D,MAEF,mBAAdyM,GACPA,IAAY/qE,KAAMtC,IACdyC,KAAKmrE,SAAS,CAAED,aAAc3tE,EAAE6tE,mBAWrC,mBAAmBC,GACtB,MAAM,UAAET,GAAc5qE,KAAKm+D,MAEF,mBAAdyM,GAA4BA,IAAcS,EAAUT,WAC3DA,IAAY/qE,KAAMtC,IACdyC,KAAKmrE,SAAS,CAAED,aAAc3tE,EAAE6tE,mBAarC,gCAAgCjN,EAAkBrd,GACrD,MAAM,UAAE8pB,GAAczM,EAEtB,OAAIyM,EACO9pB,EAGJ,CACHoqB,aAAc,MAUd,mBAAmBI,GACvB,MAAM,OAAEtpE,EAAM,MAAEC,EAAK,KAAE0oE,EAAI,eAAEE,EAAc,aAAEG,GAAiBhrE,KAAKm+D,MAC7DoN,EAAgD,GAUtD,OARItpE,IACAspE,EAAUtpE,MAAQA,GAGlBD,IACAupE,EAAUvpE,OAASA,GAGf,kBAACspE,EAAsB,eAC3BX,KAAMA,EACNt4B,UAAW24B,GAAgBhrE,KAAKwrE,mBAAmBX,EAAeY,cAC9DF,IASL,SACH,MAAM,UAAEb,EAAS,OAAE1oE,EAAM,eAAE6oE,EAAc,UAAED,EAAS,MAAE3oE,EAAK,iBAAE8oE,EAAgB,qBAAEE,EAAoB,QAAE/G,GAAYlkE,KAAKm+D,MACtH,IAAKyM,EACD,OAAO,KAEX,MAAMc,EAAOhB,EAAY,MAAQ,eAEjC,GAAyB,iBAAdE,EAAwB,CAE/B,IAAIe,EAAOf,EAIX,OAHI,IAAMe,KACNA,EAAO,IAAMA,IAET,yCACA3rE,KAAK4rE,iBAAgB,CACzB3vE,IAAK0vE,EACLzH,QAASA,EACT2H,MAAO,CAAE5pE,QAAOD,UAChBqwC,UAAWryC,KAAKwrE,mBAAmBX,EAAec,MAClDj/D,MAAOg+D,GAAa,KAAI,aACZA,GAAa,KACzBgB,KAAMA,EAAI,eACIhB,KAGtB,IAAIoB,EAA4B,GAYhC,OAXI7pE,IACA6pE,EAAW7pE,MAAQA,GAEnBD,IACA8pE,EAAW9pE,OAASA,GAGnB8pE,EAAW7pE,OAAU6pE,EAAW9pE,SACjC8pE,OAAa5uE,IAGY,IAAzB+tE,EACOjrE,KAAK8gD,MAAMoqB,aAAelrE,KAAK+rE,mBAAmB/rE,KAAK8gD,MAAMoqB,cAAgB,KAIpF,0CACQlrE,KAAK4rE,iBAAgB,CACzB1H,QAASA,EACTx3D,MAAOg+D,GAAa,KAAI,aACZA,GAAa,KACzBgB,KAAMA,EAAI,eACIhB,EACdr4B,UAAW04B,EACXc,MAAOC,IACN9rE,KAAK8gD,MAAMoqB,aAAelrE,KAAK+rE,mBAAmB/rE,KAAK8gD,MAAMoqB,cAAiB,iCCvKxF,MCJD,EAAO,YDI4D,CACrES,KAAM,CACF,aAAc,OACd,YAAa,QAEjBF,YAAa,CACT,KAAM,CACFxpE,MAAO,OACPD,OAAQ,UCZP,CAAsB,I,uoyBCN5B,MAAM,GAAY,IAAM,gCAClB,GAAa,IAAM,gCACnB,GAA4B,IAAM,gCAClC,GAAoB,IAAM,gCAC1B,GAAW,IAAM,gCACjB,GAAqB,IAAM,gCAC3B,GAAsB,IAAM,gCAC5B,GAA0B,IAAM,gCAChC,GAAc,IAAM,iCACpB,GAAmB,IAAM,iCACzB,GAAgB,IAAM,iCACtB,GAAc,IAAM,iCACpB,GAAmB,IAAM,iCACzB,GAAgB,IAAM,iCACtBgqE,GAAe,IAAM,iCACrB,GAAQ,IAAM,iCACd,GAAU,IAAM,iCAChB,GAAc,IAAM,iCACpB,GAAe,IAAM,iCACrB,GAAe,IAAM,iCACrB,GAAc,IAAM,iCACpB,GAAgB,IAAM,iCACtB,GAAa,IAAM,iCACnB,GAAkB,IAAM,iCACxB,GAAe,IAAM,iCACrBC,GAAmB,IAAM,iCACzB,GAAQ,IAAM,iCACd,GAAY,IAAM,iCAClB,GAAS,IAAM,iCACf,GAAc,IAAM,iCACpB,GAAW,IAAM,iCACjB,GAAO,IAAM,iCACbC,GAAkB,IAAM,iCACxB,GAAgB,IAAM,iCACtB,GAAU,IAAM,iCAChB,GAAS,IAAM,iCACf,GAAW,IAAM,iCACjB,GAAU,IAAM,iCAChB,GAAc,IAAM,iCACpB,GAAW,IAAM,iCACjB,GAAe,IAAM,iCACrB,GAAgB,IAAM,iCACtB,GAAO,IAAM,iCACbC,GAAY,IAAM,iCAClB,GAAW,IAAM,iCACjB,GAAiB,IAAM,iCACvB,GAAO,IAAM,iCACb,GAAa,IAAM,iCACnB,GAAS,IAAM,iCACf,GAAe,IAAM,iCACrB,GAAW,IAAM,iCACjB,GAAgB,IAAM,iCACtBC,GAAe,IAAM,iCACrBC,GAAgB,IAAM,iCACtBC,GAAkB,IAAM,iCACxBC,GAAmB,IAAM,iCACzBC,GAAkB,IAAM,iCACxBC,GAAmB,IAAM,iCACzB,GAAQ,IAAM,iCACd,GAAW,IAAM,iCACjB,GAAe,IAAM,iCACrB,GAAoB,IAAM,iCAC1B,GAAM,IAAM,iCACZ,GAAW,IAAM,iCACjB,GAAQ,IAAM,iCACd,GAAO,IAAM,iCACb,GAAS,IAAM,iCACf,GAAe,IAAM,iCACrB,GAAa,IAAM,iCACnB,GAAe,IAAM,iCACrB,GAAoB,IAAM,iCAC1B,GAAiB,IAAM,iCACvB,GAAoB,IAAM,iCAC1B,GAAmB,IAAM,iCACzB,GAAc,IAAM,iCACpB,GAAW,IAAM,iCACjB,GAAU,IAAM,iCAChB,GAAe,IAAM,iCACrB,GAAY,IAAM,iCAClB,GAAY,IAAM,iCAClB,GAAiB,IAAM,iCACvB,GAAc,IAAM,iCACpB,GAAY,IAAM,iCAClB,GAAiB,IAAM,iCACvB,GAAc,IAAM,iCACpB,GAAY,IAAM,iCAClB,GAAiB,IAAM,iCACvB,GAAc,IAAM,iCACpB,GAAO,IAAM,iCACb,GAAY,IAAM,iCAClB,GAAQ,IAAM,iCACd,GAAc,IAAM,iCACpB,GAA0B,IAAM,iCAChC,GAA2B,IAAM,iCACjC,GAAa,IAAM,iCACnBC,GAAc,IAAM,iCACpB19C,GAAe,IAAM,iCACrB,GAAW,IAAM,iCACjB,GAAY,IAAM,iCAClB,GAAiB,IAAM,iCACvB,GAAc,IAAM,iCACpB,GAAY,IAAM,iCAClB,GAAiB,IAAM,iCACvB,GAAc,IAAM,iCACpB,GAAO,IAAM,iCACb,GAAW,IAAM,iCACjB,GAAQ,IAAM,iCACd,GAAY,IAAM,iCAClB,GAAO,IAAM,iCACb,GAAO,IAAM,iCACb,GAAW,IAAM,iCACjB,GAAgB,IAAM,iCACtB,GAAe,IAAM,iCACrB,GAAS,IAAM,iCACf,GAAc,IAAM,iCACpB,GAAiB,IAAM,iCACvB,GAAO,IAAM,iCACb,GAAa,IAAM,iCACnB,GAAY,IAAM,iCAClB,GAAmB,IAAM,iCACzB,GAAY,IAAM,iCAClB,GAAa,IAAM,iCACnB,GAAU,IAAM,iCAChB,GAAgB,IAAM,iCACtB,GAAW,IAAM,iCACjB,GAAU,IAAM,iCAChB,GAAgB,IAAM,iCACtB,GAAgB,IAAM,iCACtB,GAAoB,IAAM,iCAC1B,GAAuB,IAAM,iCAC7B,GAAuB,IAAM,iCAC7B,GAAe,IAAM,iCACrB,GAAoB,IAAM,iCAC1B,GAAiB,IAAM,iCACvB,GAAQ,IAAM,iCACd,GAAY,IAAM,iCAClB29C,GAA2B,IAAM,iCACjCC,GAA2B,IAAM,iCACjC,GAAW,IAAM,iCACjB,GAAkB,IAAM,iCACxB,GAAU,IAAM,iCAChB,GAAS,IAAM,iCACf,GAAU,IAAM,iCAChB,GAAkB,IAAM,iCACxB,GAAuB,IAAM,iCAC7B,GAAoB,IAAM,iCAC1B,GAAoB,IAAM,iCAC1B,GAAyB,IAAM,iCAC/B,GAAsB,IAAM,iCAC5B,GAAM,IAAM,iCACZ,GAAS,IAAM,iCACf,GAAS,IAAM,iCACf,GAAM,IAAM,iCACZ,GAAU,IAAM,iCAChB,GAAa,IAAM,iCACnBC,GAAc,IAAM,iCACpB,GAAO,IAAM,iCACb,GAAY,IAAM,iCAClB,GAAgB,IAAM,iCACtB,GAAU,IAAM,iCAChB,GAAQ,IAAM,iCACd,GAAiB,IAAM,iCACvB,GAAsB,IAAM,iCAC5B,GAAmB,IAAM,iCACzB,GAAmB,IAAM,iCACzB,GAAwB,IAAM,iCAC9B,GAAqB,IAAM,iCAC3B,GAAW,IAAM,iCACjB,GAAgB,IAAM,iCACtB,GAAa,IAAM,iCACnB,GAAqB,IAAM,iCAC3B,GAA0B,IAAM,iCAChC,GAAuB,IAAM,iCAC7B,GAA4B,IAAM,iCAClC,GAAyB,IAAM,iCAC/B,GAAU,IAAM,iCAChB,GAAS,IAAM,iCACf,GAAiB,IAAM,iCACvB,GAAY,IAAM,iCAClB,GAAO,IAAM,iCACb,GAAQ,IAAM,iCACd,GAAS,IAAM,iCACf,GAAQ,IAAM,iCACd,GAAa,IAAM,iCACnB,GAAc,IAAM,iCACpB,GAAa,IAAM,iCACnB,GAAW,IAAM,iCACjB,GAAoB,IAAM,iCAC1B,GAAqB,IAAM,iCAC3B,GAAQ,IAAM,iCACd,GAAc,IAAM,iCACpB,GAAiB,IAAM,iCACvB,GAAsB,IAAM,iCAC5B,GAAmB,IAAM,iCACzB,GAAmB,IAAM,iCACzB,GAAwB,IAAM,iCAC9B,GAAqB,IAAM,iCAC3B,GAAQ,IAAM,iCACd,GAAW,IAAM,iCACjB,GAAgB,IAAM,iCACtB,GAAa,IAAM,iCACnB,GAAO,IAAM,iCACb,GAAU,IAAM,iCAChB,GAAQ,IAAM,iCACd,GAAgB,IAAM,iCACtB,GAAgB,IAAM,iCACtB,GAAqB,IAAM,iCAC3B,GAAkB,IAAM,iCACxB,GAAW,IAAM,iCACjB,GAAU,IAAM,iCAChB,GAAe,IAAM,iCACrB,GAAc,IAAM,iCACpB,GAAQ,IAAM,iCACd,GAAoB,IAAM,iCAC1B,GAAQ,IAAM,iCACd,GAAQ,IAAM,iCACd,GAAO,IAAM,iCACbC,GAAY,IAAM,iCAClB,GAAc,IAAM,iCACpB,GAAe,IAAM,iCACrB,GAAgB,IAAM,iCACtB,GAAc,IAAM,iCACpB,GAAuB,IAAM,iCAC7B,GAAqB,IAAM,iCAC3B,GAAc,IAAM,iCACpB,GAAgB,IAAM,iCACtB,GAAiB,IAAM,iCACvB,GAAW,IAAM,iCACjB,GAAgB,IAAM,iCACtB,GAAQ,IAAM,iCACd,GAAa,IAAM,iCACnB,GAAU,IAAM,iCAChB,GAAO,IAAM,iCACb,GAAQ,IAAM,iCACd,GAAO,IAAM,iCACb,GAAS,IAAM,kC,uCCjP5B,sCAiBiBC,EAjBjB,QAiBA,SAAiBA,GAQG,EAAA/yB,mBAAhB,SAAmCllC,GAC/B,MAAMnD,EAAM,IAAIi/B,IAAI97B,GAEdI,EAAOvD,EAAIqD,SACXg4D,EAAmBr7D,EAAIwnD,SAASn1D,MAAM,KAGtCipE,GAAiB/3D,EAAK8mC,MAAM,oBAAsB,IAAI,IAAM,GAMlE,GAAIgxB,EAAiBxzE,QAAU,IAC3B,MAAO,CACH0zE,YAAap4D,EACbq4D,YAAa,KACbC,YAAa,KACbvR,SAAU3mD,EACVm4D,UAAWJ,GAUnB,MACMK,EADiD,IAA/BN,EAAiB,GAAGxzE,QAA0D,IAA1CwzE,EAAiB,GAAGhpE,MAAM,KAAKxK,OACrD,EAAI,EAEpC48C,EAAsB,CACxB82B,YAAap4D,EACbq4D,YAAaH,EAAiB,EAAIM,GAClCF,YAAaJ,EAAiB,EAAIM,GAClCzR,SAAU3mD,EACVm4D,UAAWJ,GAMf,OAHID,EAAiBxzE,QAAU,MAC3B48C,EAASm3B,eAAiBP,EAAiB,EAAIM,IAE5Cl3B,GAnDf,CAAiB22B,MAAQ,M,6BCfzB,IAAYS,EAFZ,kCAEA,SAAYA,GACR,aACA,eACA,eACA,eACA,aACA,eACA,eAPJ,CAAYA,MAAM,M,6BCGH,SAASC,IAQpB,IAAIC,GAAgB,IAAIvmE,MAAO4tB,UAC/B,MAAO,uCAAuCp0B,QAAQ,SAEtD,SAAkBnD,GAEd,MAAMmwE,GAAgBD,EAAgC,GAAhB/9D,KAAKi+D,UAAiB,GAAK,EAQjE,OALAF,EAAgB/9D,KAAKk+D,MAAMH,EAAgB,KAK9B,KAALlwE,EAAWmwE,EAA+B,EAAfA,EAAqB,GAAMv4B,SAAS,OA1B/E,mC,6BCMA,IAAY1qC,EASAojE,EAfZ,kCAMA,SAAYpjE,GACR,cACA,qBACA,aAHJ,CAAYA,MAAc,KAS1B,SAAYojE,GACR,yBACA,6BAFJ,CAAYA,MAA0B,M,8BCftC,8CA0DO,MAAMC,EAAb,cAGW,KAAAC,gCACD,IAAI,IAAqC,mCAGxC,KAAAC,kCACD,IAAI,IAAiD,qCAGpD,KAAAC,kCACD,IAAI,IAA6C,qCAGhD,KAAAC,6BACD,IAAI,IAAiD,gCAGpD,KAAAC,oCACD,IAAI,IAA6C,uCAGhD,KAAAC,iBACD,IAAI,IAAiC,oBAGpC,KAAAC,mBACD,IAAI,IAAqC,4BAGxC,KAAAC,mBACD,IAAI,IAAiC,sBAGpC,KAAAC,0BACD,IAAI,IAAiC,6BAGpC,KAAAC,wBACD,IAAI,IAAiC,2BAGpC,KAAAC,uBACD,IAAI,IAAiC,yBAGpC,gBACHC,EAAuB,IAAIZ,GAK5B,IAAIY,EAAuB,IAAIZ,G,8BC/GtC,6CAOA,IAAIa,GAAqB,EAalB,SAASC,IACZ,OAAOD,EAZP,eAEA3vE,OAAOuB,iBAAiB,gBAAgB,WACpCouE,GAAqB,M,6BCZ7B,6CAUO,MAAME,EAAb,cAEY,KAAAC,SAA6B,IAAIvuB,IAG5B,IAAIhiD,G,mDACb,QAASwB,KAAK+uE,SAASvwE,MAGd,IAAIA,G,mDACb,OAAOwB,KAAK+uE,SAASvwE,MAGZ,IAAIA,EAAaN,EAAY8wE,G,mDAEtC,OADAhvE,KAAK+uE,SAASvwE,GAAON,GACd,KAGE,IAAIM,G,0DACNwB,KAAK+uE,SAASvwE,MAGZ,Y,mDACT,OAAO/E,OAAOy2B,KAAKlwB,KAAK+uE,UAAUv1E,UAGzB,Q,mDACTwG,KAAK+uE,SAAW,IAAIvuB,U,6BC7B5B,IAAYyuB,EARZ,kCAQA,SAAYA,GACR,0BACA,gCACA,8BACA,8CACA,gCACA,oDACA,wCACA,kEACA,gDACA,wDACA,gEACA,8DACA,oEACA,gEACA,sDACA,0EACA,4DACA,0DACA,8DACA,8DACA,wEACA,8BACA,sBACA,8CACA,kCACA,gCACA,8CACA,0CACA,kCACA,sCACA,wCACA,8CACA,0BACA,sCACA,sCACA,gCACA,oBACA,4BACA,4BACA,4CACA,gCACA,wDACA,wBACA,8CACA,sCACA,4BACA,sCA/CJ,CAAYA,MAAmB,M,6BCE/B,IAAYC,EAWAC,EArBZ,oEAUA,SAAYD,GACR,kBACA,cAFJ,CAAYA,MAA6B,KAWzC,SAAYC,GACR,gCACA,4BACA,oCACA,4BACA,gCACA,8BACA,kCACA,0BACA,8BACA,kCACA,gCACA,oBAZJ,CAAYA,MAAyB,M,6BCrBrC,8CAUO,MAAMC,EAAsB,IACxB,YAAiC,U,uJCD5C,IAAIC,GAAmB,EACnBC,EAAqC,KACrCC,EAAyB,KACzBC,EAAwC,GACxCC,EAAkD,GAClDC,EAAuC,GACvCC,GAAwB,EAW5B,SAASC,EAAiBtzE,EAAc0E,EAAsB8/D,EAAqBC,GAC/EuO,EAAepO,WAAW5kE,EAAO0E,EAAS8/D,EAAaC,GAW3D,SAAS8O,EAAuBpiE,EAAoB45D,EAA2B57D,EAA4B8D,GACvG+/D,EAAelI,uBAAuB35D,EAAM45D,EAAiB57D,EAAW8D,GAO5E,SAASugE,EAAuBC,GAC5BT,EAAe16B,mBAAmB,CAAE2rB,MAAOwP,EAAS15D,GAAIoqD,UAAWsP,EAASj2D,OAAQ0mD,OAAQuP,EAAShzE,UAQzG,SAASizE,IACL10E,QAAQgC,IAAI,CAAC,cC9CN,YAAqB,wBD+C3BuC,KAAK9F,KACDu1E,EAAgBC,GAAqBx1E,EAGtCs1E,GAAmB,EACfG,EAAiBh2E,OAAS,IAC1Bg2E,EAAiBz3C,QAAQk4C,IACrB,IACIL,EAAiBK,EAAS3zE,MAAO2zE,EAASjvE,QAASivE,EAASnP,YAAamP,EAASlP,UACpF,aAONyO,EAAmB,IAGnBC,EAAsBj2E,OAAS,IAC/Bi2E,EAAsB13C,QAAQk4C,IAC1BJ,EAAuBI,EAASxiE,KAAMwiE,EAAS5I,gBAAiB4I,EAASxkE,UAAWwkE,EAAS1gE,yBAIjGkgE,EAAwB,IAGxBC,EAAyBl2E,OAAS,IAClCk2E,EAAyB33C,QAAQg4C,IAC7BD,EAAuBC,KAI3BL,EAA2B,MAahC,SAASQ,EAAoB5zE,EAAc0E,EAAsB8/D,EAAqBC,GACrFsO,EACAO,EAAiBtzE,EAAO0E,EAAS8/D,EAAaC,IAE9CyO,EAAiB11E,KAAK,CAAEwC,MAAOA,EAAO0E,QAASA,EAAS8/D,YAAaA,EAAaC,SAAUA,IAEvF4O,IACDA,GAAwB,EAGxBK,MAaL,SAASG,EAAgC1iE,EAAoB45D,EAA2B57D,EAA4B8D,GACnH8/D,EACAQ,EAAuBpiE,EAAM45D,EAAiB57D,EAAW8D,IAEzDkgE,EAAsB31E,KAAK,CAAE2T,KAAMA,EAAM45D,gBAAiBA,EAAiB57D,UAAWA,EAAW8D,sBAAuBA,IAEnHogE,IACDA,GAAwB,EAGxBK,MAUL,SAASI,EAAwBL,GAChCV,EACAS,EAAuBC,IAEvBL,EAAyB51E,KAAK,OAAD,UAAMi2E,IAC9BJ,IACDA,GAAwB,EAGxBK,Q,gCErJL,SAASK,EAAej0E,GAC3B,OAAQA,aAAiBC,MACnBD,EAAMg5C,WACW,iBAAVh5C,EACHA,EACA6G,KAAKoL,UAAUjS,GAb7B,mC,mCCAA,wEAgBO,MAAMq8D,EA4BF,qBAAqB6X,EAAiCC,GACzD,IAAKD,EACD,KAAM,4CAGV,IAAKC,EACD,KAAM,2CAIVA,EAAeC,YAAcF,EAAgB3wE,OAAS2wE,EAAgBE,aAAe,EAiBlF,6BAA6BF,EAAiCG,EAAuBzgD,GACxF,MAAM0gD,EAAqC,CACvC1zE,KAAMyzE,EACNzgD,cAAeA,GAGb2gD,EAAuBlY,EAAUmY,YAAYF,EAAoBJ,EAAiBI,GAGxF,OAFAjY,EAAUoY,cAAcP,EAAiBK,GAElCA,EAQJ,sBAAsBL,GACzB,IAAKA,EACD,KAAM,4CAIV,OAAOA,EAAgB3wE,OAAS2wE,EAAgBE,YAQ7C,8BAA8BF,GACjC,IAAKA,EACD,KAAM,4CAKV,OAAO3gE,KAAKi+D,SAWT,uBAAuB5wE,EAAeqZ,EAAay6D,GACtD,MAGMC,EAAYD,GAAsBrY,EAAUuY,cAQlD,OANAvY,EAAUwY,eAAeF,GAAa,CAClCG,QANY,EAOZC,aAAc,GACdC,oBAAqB,GAGlB,CACH/6D,GAAIA,EACJ1W,MAAOoxE,EACP/zE,KAAMA,EACNk0E,QAfY,EAgBZV,YAAa,GAYd,mBAAmBa,EAA4BC,EAAgCC,EAAsC,IAExH,MAAMf,EAAcc,EAAed,aAAe,EAElD,KAAMA,KAAe/X,EAAUwY,gBAC5B,KAAM,4CAGT,IAAItxE,EACAuxE,EAIAvxE,EADA0xE,IAAe,YAAMA,EAAW1xE,OACxB0xE,EAAW1xE,MAEX84D,EAAUuY,cAGtBvY,EAAU+Y,gBAAgB7xE,GAgB1B,OAdwCA,KAAS84D,EAAUwY,eAAeT,GAAaW,aAEnFD,EAAUzY,EAAUwY,eAAeT,GAAaW,aAAaxxE,IAE7DuxE,IAAYzY,EAAUwY,eAAeT,GAAaY,oBAClD3Y,EAAUwY,eAAeT,GAAaW,aAAaxxE,GAASuxE,GAGhEzY,EAAUwY,eAAetxE,GAAS,CAC9BuxE,UACAC,aAAc,GACdC,oBAAqB,GAGlB,OAAP,wBAAYG,GAAmB,CAAE5xE,QAAOuxE,UAASV,gBAS9C,cAAcrS,GACjB,IAAKA,IAAUA,EAAMx+D,MACjB,OAAO,KAGX,MAAMtF,EAAc,CAChBmD,EAAG2gE,EAAMpK,SACT3iD,GAAI+sD,EAAM1lD,YACVg5D,EAAGtT,EAAM3tD,QAAU2tD,EAAM9nD,GACzBouD,EAAGtG,EAAMuT,cACTp4E,EAAG6kE,EAAMx+D,MACT1E,EAAGkjE,EAAM9nD,GACT3X,EAAGy/D,EAAMnhE,KACTW,EAAGwgE,EAAM+S,QACTh1E,EAAGiiE,EAAMqS,YACTr/D,EAAGgtD,EAAMnuC,cACT4D,EAAGuqC,EAAM2H,UAGP6L,EAAiB,YAAOt3E,EAAQ,KAEhCu3E,EAAsB,CACxB,SAAU3uE,KAAKoL,UAAUsjE,GACzB,UAAWA,EAAer4E,GAO9B,OAJI,YAAS6kE,EAAM0T,kBACfD,EAAK,WAAazT,EAAM0T,gBAGrBD,EASJ,uBAAuBE,GAC1B,KAAMA,KAAkBrZ,EAAUwY,gBAC9B,OAGJ,MAAME,EAAe1Y,EAAUwY,eAAea,GAAgBX,aAC9D13E,OAAOy2B,KAAKihD,GAAc5gC,IAAK5wC,GAAUK,KAAKwxE,gBAAgB,IAAQjyB,SAAS5/C,YACxE84D,EAAUwY,eAAea,GAW7B,6BAA6BC,EAA0BC,EAA0BC,GACpF,OAAQF,EAASvB,cAAgBwB,EAASxB,aAClCyB,KAAeA,EAAUtyE,SAAS84D,EAAUwY,eAAec,EAASvB,aAAaW,cASrF,qBACJ,QAAS1Y,EAAUqZ,gBA9OT,EAAAb,eAA4D,CACtEiB,EAAG,CACCf,aAAc,GACdC,oBAAqB,EACrBF,QAAS,IASH,EAAAY,eAAiB,G,kCCpCnC,kCAUA,MAAMK,EAAkC,GAOjC,SAASC,EAAsBtyE,GAClCqyE,EAAer4E,KAAKgG,K,6BClBxB,wDAeO,MAAMuyE,EAmBF,oBACHtxB,EACAuxB,EACAxyE,GAQA,QAAIuyE,EAAc14B,SAASoH,EAAcnkD,KAAO,GAAI01E,EAAU11E,QAC1DkD,EAAS3F,MAAM2F,EAAUihD,EAAc/uC,SAChC,GAcR,qBACH+uC,EACAwxB,EACAzyE,GAEA,MAAM0yE,EAAoBzxB,EAAcnkD,KAAO,GAG/C,QAFuB,YAAM21E,EAAaD,GAAcD,EAAc14B,SAAS64B,EAAmBF,EAAU11E,SAGxGkD,EAAS3F,MAAM2F,EAAUihD,EAAc/uC,SAChC,GAeR,wBACH+uC,EACAuxB,EACAxyE,GAEA,IAAKuyE,EAAc14B,SAASoH,EAAcnkD,KAAO,GAAI01E,EAAU11E,MAC3D,KAAM,qDAIV,OADAkD,EAAS3F,MAAM2F,EAAUihD,EAAc/uC,SAChC,GA1EI,EAAA2nC,SAAqB84B,OAAO/4E,UAAUigD,SAC/C,SAAUrkC,EAAgBxY,GAA2B,OAAOwY,EAAOqkC,SAAS78C,IAC5E,K,gCCdV,IAAY41E,EAVZ,kCAUA,SAAYA,GACR,mBACA,uBACA,qBACA,6BAJJ,CAAYA,MAAW,M,+BCVvB,kCAOO,MAAMC,EAAqB,CAE9BC,sBAAuB,wBAEvBC,aAAc,eAGdC,gBAAiB,kBAEjBC,sBAAuB,wBAEvBC,kBAAmB,sBAEnBC,cAAe,iBAEfC,cAAe,kBAEfC,YAAa,eAEbC,OAAQ,SAERC,eAAgB,iBAEhBC,eAAgB,sBAEhBC,wBAAyB,+BAEzBC,YAAa,qBAEbC,cAAe,mBAEfC,yBAA0B,6B,6BCtC9B,8CAUO,MAAMC,EAA4B,IAC9B,YAAoC,a,8BCX/C,kCAKA,MAAMC,EAAsB,CACxBC,QAAS,UACTC,MAAO,QACPC,MAAO,QACPC,QAAS,UACTC,eAAgB,mBAChBC,WAAY,cACZC,UAAW,aACXC,cAAe,iBACfC,mBAAoB,aACpBC,oBAAqB,cACrBC,mBAAoB,aACpBC,oBAAqB,cACrBC,iBAAkB,SAClBC,kBAAmB,UACnBC,gBAAiB,UACjBC,iBAAkB,WAClBC,kBAAmB,iDACnBC,0BAA2B,oCAC3BC,wBAAyB,oDACzBC,6BAA8B,gFAC9BC,iCAAkC,4CAClCC,wBAAyB,iBACzBC,kCAAmC,aACnCC,kBAAmB,aACnBC,uBAAwB,wCACxBC,oBAAqB,c,gBC/BzBt6E,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,kB,gBCA3CC,EAAOD,QAAU,IAA0B,iC,gBCA3CC,EAAOD,QAAU,IAA0B,yB,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,+B,gBCA3CC,EAAOD,QAAU,IAA0B,0B,gBCA3CC,EAAOD,QAAU,IAA0B,2B,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,wB,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,wB,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,kB,gBCA3CC,EAAOD,QAAU,IAA0B,uB,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,c,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,c,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,sB,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,kB,gBCA3CC,EAAOD,QAAU,IAA0B,c,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,yB,gBCA3CC,EAAOD,QAAU,IAA0B,W,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,c,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,kB,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,yB,gBCA3CC,EAAOD,QAAU,IAA0B,sB,gBCA3CC,EAAOD,QAAU,IAA0B,yB,gBCA3CC,EAAOD,QAAU,IAA0B,wB,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,sB,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,sB,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,sB,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,+B,gBCA3CC,EAAOD,QAAU,IAA0B,gC,gBCA3CC,EAAOD,QAAU,IAA0B,kB,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,sB,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,sB,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,c,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,sB,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,kB,gBCA3CC,EAAOD,QAAU,IAA0B,wB,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,kB,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,yB,gBCA3CC,EAAOD,QAAU,IAA0B,4B,gBCA3CC,EAAOD,QAAU,IAA0B,4B,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,yB,gBCA3CC,EAAOD,QAAU,IAA0B,sB,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,uB,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,c,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,uB,gBCA3CC,EAAOD,QAAU,IAA0B,4B,gBCA3CC,EAAOD,QAAU,IAA0B,yB,gBCA3CC,EAAOD,QAAU,IAA0B,yB,gBCA3CC,EAAOD,QAAU,IAA0B,8B,gBCA3CC,EAAOD,QAAU,IAA0B,2B,gBCA3CC,EAAOD,QAAU,IAA0B,W,gBCA3CC,EAAOD,QAAU,IAA0B,c,gBCA3CC,EAAOD,QAAU,IAA0B,c,gBCA3CC,EAAOD,QAAU,IAA0B,W,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,kB,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,sB,gBCA3CC,EAAOD,QAAU,IAA0B,2B,gBCA3CC,EAAOD,QAAU,IAA0B,wB,gBCA3CC,EAAOD,QAAU,IAA0B,wB,gBCA3CC,EAAOD,QAAU,IAA0B,6B,gBCA3CC,EAAOD,QAAU,IAA0B,0B,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,kB,gBCA3CC,EAAOD,QAAU,IAA0B,0B,gBCA3CC,EAAOD,QAAU,IAA0B,+B,gBCA3CC,EAAOD,QAAU,IAA0B,4B,gBCA3CC,EAAOD,QAAU,IAA0B,iC,gBCA3CC,EAAOD,QAAU,IAA0B,8B,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,c,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,c,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,kB,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,kB,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,yB,gBCA3CC,EAAOD,QAAU,IAA0B,0B,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,sB,gBCA3CC,EAAOD,QAAU,IAA0B,2B,gBCA3CC,EAAOD,QAAU,IAA0B,wB,gBCA3CC,EAAOD,QAAU,IAA0B,wB,gBCA3CC,EAAOD,QAAU,IAA0B,6B,gBCA3CC,EAAOD,QAAU,IAA0B,0B,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,kB,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,0B,gBCA3CC,EAAOD,QAAU,IAA0B,uB,gBCA3CC,EAAOD,QAAU,IAA0B,gB,gBCA3CC,EAAOD,QAAU,IAA0B,e,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,c,gBCA3CC,EAAOD,QAAU,IAA0B,yB,gBCA3CC,EAAOD,QAAU,IAA0B,sB,gBCA3CC,EAAOD,QAAU,IAA0B,iB,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,a,gBCA3CC,EAAOD,QAAU,IAA0B,Y,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,oB,gBCA3CC,EAAOD,QAAU,IAA0B,qB,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0B,4B,gBCA3CC,EAAOD,QAAU,IAA0B,0B,gBCA3CC,EAAOD,QAAU,IAA0B,mB,gBCA3CC,EAAOD,QAAU,IAA0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AjEJ,SAAoBi/B,GAChBF,EAAcE,GAiEdC,MAzDJ,W,yDACUH,EAAYG,YAyDlBp+C,IAhDJ,SAAmBvyC,EAAaN,EAAY8wE,G,yDAClCggB,EAAYj+C,IAAIvyC,EAAKN,EAAO8wE,OAgDlClxE,IAxCJ,SAAmBU,G,mDACf,aAAawwF,EAAYlxF,IAAIU,OAwC7BsjD,IAhCJ,SAAmBtjD,G,mDACf,aAAawwF,EAAYltC,IAAItjD,OAgC7B4wF,IAxBJ,SAAmB5wF,G,mDACf,aAAawwF,EAAYI,IAAI5wF,OAwB7B6wF,UAjBJ,W,mDACI,aAAaL,EAAYK,iBAoBzB57C,EAAiB,WAAM,eAKvBw7C,EAAYh/B,WAAW,IAAI,O,gDC5F/B,IAAY6vB,EAPZ,kCAOA,SAAYA,GACR,sBACA,wBACA,0CACA,gDACA,4CACA,oDACA,gCACA,0BACA,4BACA,kCACA,8BACA,wDACA,sCACA,0BACA,oBACA,8BACA,0BACA,wBACA,oBACA,sBACA,gDACA,wCACA,kCACA,oCACA,kCACA,gDACA,gDACA,0BACA,8BACA,0BACA,0BACA,0BACA,8BACA,sBACA,kCACA,kDACA,oDACA,4CACA,wCACA,4CACA,0CACA,0DACA,0BACA,0CACA,sCACA,oCACA,8BACA,kDACA,sCACA,4BACA,kCACA,0BACA,kCACA,8BACA,8BACA,wCACA,0CACA,wCACA,4BACA,kCACA,8CACA,gCACA,sBACA,kBACA,sBACA,wBACA,oCACA,0CACA,4BACA,kCACA,kCACA,8CACA,wBACA,4CACA,sCACA,sCACA,kCACA,wBACA,sBACA,oBACA,gCACA,wCACA,sCACA,sBACA,oBACA,4CACA,wBACA,0BACA,kCACA,wBACA,sCACA,sBACA,4BACA,sCACA,oCACA,kBACA,oCACA,0CACA,8CACA,wBACA,oBACA,4CACA,4BACA,gCACA,8BACA,kCACA,0BACA,wBACA,4BACA,wBACA,oCACA,oCACA,4BACA,8CACA,8CACA,wCACA,sCACA,wCACA,wBACA,wCACA,gBACA,sCACA,oCACA,gCACA,wCACA,4CACA,wCACA,gDACA,wCACA,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","file":"content-actions-toolbar.2c2a9ae9a4bc49aaf5f2.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t19: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"92\":\"icon-assets-AdChoices\",\"93\":\"icon-assets-AlertWhite\",\"94\":\"icon-assets-BingCardDefaultHotelImage\",\"95\":\"icon-assets-BingHotelSeePrice\",\"96\":\"icon-assets-BingLogo\",\"97\":\"icon-assets-BingRatingDarkLightStar\",\"98\":\"icon-assets-BingRatingDarkStar\",\"99\":\"icon-assets-BingRatingLightStar\",\"100\":\"icon-assets-BlowingHail\",\"101\":\"icon-assets-BlowingHailV2\",\"102\":\"icon-assets-BlowingHailWhite\",\"103\":\"icon-assets-BlowingSnow\",\"104\":\"icon-assets-BlowingSnowV2\",\"105\":\"icon-assets-BlowingSnowWhite\",\"106\":\"icon-assets-CDCLogo\",\"107\":\"icon-assets-Check\",\"108\":\"icon-assets-Chevron\",\"109\":\"icon-assets-ChevronDown\",\"110\":\"icon-assets-ChevronRight\",\"111\":\"icon-assets-ChevronWhite\",\"112\":\"icon-assets-CircleChevron\",\"113\":\"icon-assets-CircleClose\",\"114\":\"icon-assets-ClearNight\",\"115\":\"icon-assets-ClearNightV2\",\"116\":\"icon-assets-ClearNightWhite\",\"117\":\"icon-assets-ClinicalTrialBot\",\"118\":\"icon-assets-Close\",\"119\":\"icon-assets-CloseThin\",\"120\":\"icon-assets-Cloudy\",\"121\":\"icon-assets-CloudyV2\",\"122\":\"icon-assets-CloudyWhite\",\"123\":\"icon-assets-Copy\",\"124\":\"icon-assets-DarkModeHotel\",\"125\":\"icon-assets-DayTime\",\"126\":\"icon-assets-Delete\",\"127\":\"icon-assets-Discover\",\"128\":\"icon-assets-Dislike\",\"129\":\"icon-assets-DislikeText\",\"130\":\"icon-assets-Disliked\",\"131\":\"icon-assets-DislikedLight\",\"132\":\"icon-assets-DislikedText\",\"133\":\"icon-assets-Docx\",\"134\":\"icon-assets-DoubleTap\",\"135\":\"icon-assets-Download\",\"136\":\"icon-assets-DownloadNoFill\",\"137\":\"icon-assets-Edit\",\"138\":\"icon-assets-EditNoFill\",\"139\":\"icon-assets-Edited\",\"140\":\"icon-assets-EditedNoFill\",\"141\":\"icon-assets-Ellipses\",\"142\":\"icon-assets-EllipsesLight\",\"143\":\"icon-assets-EmptyMruDark\",\"144\":\"icon-assets-EmptyMruLight\",\"145\":\"icon-assets-EmptyPinnedDark\",\"146\":\"icon-assets-EmptyPinnedLight\",\"147\":\"icon-assets-EmptySharedDark\",\"148\":\"icon-assets-EmptySharedLight\",\"149\":\"icon-assets-Excel\",\"150\":\"icon-assets-Facebook\",\"151\":\"icon-assets-FacebookText\",\"152\":\"icon-assets-FacebookTextBlack\",\"153\":\"icon-assets-Fog\",\"154\":\"icon-assets-FogV2\",\"155\":\"icon-assets-FogWhite\",\"156\":\"icon-assets-Folder\",\"157\":\"icon-assets-FolderNoFill\",\"158\":\"icon-assets-FolderOpen\",\"159\":\"icon-assets-Form\",\"160\":\"icon-assets-FreezingRain\",\"161\":\"icon-assets-FreezingRainV2\",\"162\":\"icon-assets-FreezingRainWhite\",\"163\":\"icon-assets-GalleryFullscreen\",\"164\":\"icon-assets-GalleryMediaIcon\",\"165\":\"icon-assets-GenericFile\",\"166\":\"icon-assets-GridView\",\"167\":\"icon-assets-HailDay\",\"168\":\"icon-assets-HailDayV2\",\"169\":\"icon-assets-HailDayWhite\",\"170\":\"icon-assets-HailNight\",\"171\":\"icon-assets-HailNightV2\",\"172\":\"icon-assets-HailNightWhite\",\"173\":\"icon-assets-HazeSmoke\",\"174\":\"icon-assets-HazeSmokeV2\",\"175\":\"icon-assets-HazeSmokeWhite\",\"176\":\"icon-assets-HeavySnow\",\"177\":\"icon-assets-HeavySnowV2\",\"178\":\"icon-assets-HeavySnowWhite\",\"179\":\"icon-assets-Hide\",\"180\":\"icon-assets-HideStory\",\"181\":\"icon-assets-Hotel\",\"182\":\"icon-assets-Information\",\"183\":\"icon-assets-InteractionRequiredDark\",\"184\":\"icon-assets-InteractionRequiredLight\",\"185\":\"icon-assets-Interested\",\"186\":\"icon-assets-Layout\",\"187\":\"icon-assets-LightRain\",\"188\":\"icon-assets-LightRainV2\",\"189\":\"icon-assets-LightRainWhite\",\"190\":\"icon-assets-LightSnow\",\"191\":\"icon-assets-LightSnowV2\",\"192\":\"icon-assets-LightSnowWhite\",\"193\":\"icon-assets-Like\",\"194\":\"icon-assets-LikeText\",\"195\":\"icon-assets-Liked\",\"196\":\"icon-assets-LikedText\",\"197\":\"icon-assets-Line\",\"198\":\"icon-assets-Link\",\"199\":\"icon-assets-LinkedIn\",\"200\":\"icon-assets-LinkedInBlack\",\"201\":\"icon-assets-LinkedInText\",\"202\":\"icon-assets-ListMenu\",\"203\":\"icon-assets-Locate\",\"204\":\"icon-assets-LocateWhite\",\"205\":\"icon-assets-LocationDetect\",\"206\":\"icon-assets-Mail\",\"207\":\"icon-assets-MailBlack\",\"208\":\"icon-assets-MailNoFill\",\"209\":\"icon-assets-ManagedBriefcase\",\"210\":\"icon-assets-MapZoomIn\",\"211\":\"icon-assets-MapZoomOut\",\"212\":\"icon-assets-Message\",\"213\":\"icon-assets-MessageNoFill\",\"214\":\"icon-assets-Messages\",\"215\":\"icon-assets-MicrosoftLogo\",\"216\":\"icon-assets-MicrosoftNews\",\"217\":\"icon-assets-MicrosoftNews_FR\",\"218\":\"icon-assets-MicrosoftNews_ZH\",\"219\":\"icon-assets-ModerateRain\",\"220\":\"icon-assets-ModerateRainV2\",\"221\":\"icon-assets-ModerateRainWhite\",\"222\":\"icon-assets-Movie\",\"223\":\"icon-assets-MsnLogo\",\"224\":\"icon-assets-NightTime\",\"225\":\"icon-assets-Notification-Five-Plus-Sign\",\"226\":\"icon-assets-OfficeFormsLogo\",\"227\":\"icon-assets-OneDrive\",\"228\":\"icon-assets-OneNote\",\"229\":\"icon-assets-Onetoc\",\"230\":\"icon-assets-Outlook\",\"231\":\"icon-assets-PartlyCloudyDay\",\"232\":\"icon-assets-PartlyCloudyDayV2\",\"233\":\"icon-assets-PartlyCloudyDayWhite\",\"234\":\"icon-assets-PartlyCloudyNight\",\"235\":\"icon-assets-PartlyCloudyNightV2\",\"236\":\"icon-assets-PartlyCloudyNightWhite\",\"237\":\"icon-assets-Pdf\",\"238\":\"icon-assets-Pencil\",\"239\":\"icon-assets-People\",\"240\":\"icon-assets-Pin\",\"241\":\"icon-assets-PowerBI\",\"242\":\"icon-assets-PowerPoint\",\"243\":\"icon-assets-Pptx\",\"244\":\"icon-assets-PriceDrop\",\"245\":\"icon-assets-PriceDropBlue\",\"246\":\"icon-assets-Project\",\"247\":\"icon-assets-Radar\",\"248\":\"icon-assets-RainShowersDay\",\"249\":\"icon-assets-RainShowersDayV2\",\"250\":\"icon-assets-RainShowersDayWhite\",\"251\":\"icon-assets-RainShowersNight\",\"252\":\"icon-assets-RainShowersNightV2\",\"253\":\"icon-assets-RainShowersNightWhite\",\"254\":\"icon-assets-RainSnow\",\"255\":\"icon-assets-RainSnowShowersDay\",\"256\":\"icon-assets-RainSnowShowersDayWhite\",\"257\":\"icon-assets-RainSnowShowersNight\",\"258\":\"icon-assets-RainSnowShowersNightV2\",\"259\":\"icon-assets-RainSnowShowersNightWhite\",\"260\":\"icon-assets-RainSnowV2\",\"261\":\"icon-assets-RainSnowWhite\",\"262\":\"icon-assets-Refresh\",\"263\":\"icon-assets-Remove\",\"264\":\"icon-assets-Save\",\"265\":\"icon-assets-Saved\",\"266\":\"icon-assets-Search\",\"267\":\"icon-assets-Share\",\"268\":\"icon-assets-ShareLight\",\"269\":\"icon-assets-ShareNoFill\",\"270\":\"icon-assets-Sharepoint\",\"271\":\"icon-assets-Shopping\",\"272\":\"icon-assets-ShoppingDealsDark\",\"273\":\"icon-assets-ShoppingDealsLight\",\"274\":\"icon-assets-Skype\",\"275\":\"icon-assets-SkypeOffice\",\"276\":\"icon-assets-SnowShowersDay\",\"277\":\"icon-assets-SnowShowersDayV2\",\"278\":\"icon-assets-SnowShowersDayWhite\",\"279\":\"icon-assets-SnowShowersNight\",\"280\":\"icon-assets-SnowShowersNightV2\",\"281\":\"icon-assets-SnowShowersNightWhite\",\"282\":\"icon-assets-Stars\",\"283\":\"icon-assets-SunnyDay\",\"284\":\"icon-assets-SunnyDayV2\",\"285\":\"icon-assets-SunnyDayWhite\",\"286\":\"icon-assets-Sway\",\"287\":\"icon-assets-SwayApp\",\"288\":\"icon-assets-Teams\",\"289\":\"icon-assets-ThumbnailView\",\"290\":\"icon-assets-Thunderstorms\",\"291\":\"icon-assets-ThunderstormsV2\",\"292\":\"icon-assets-ThunderstormsWhite\",\"293\":\"icon-assets-Trending\",\"294\":\"icon-assets-Twitter\",\"295\":\"icon-assets-TwitterBlack\",\"296\":\"icon-assets-TwitterText\",\"297\":\"icon-assets-Unpin\",\"298\":\"icon-assets-VerticalSeparator\",\"299\":\"icon-assets-VideoMediaIcon\",\"300\":\"icon-assets-VideoPlay\",\"301\":\"icon-assets-Visio\",\"302\":\"icon-assets-Vkcom\",\"303\":\"icon-assets-Vsdx\",\"304\":\"icon-assets-WaterDrop\",\"305\":\"icon-assets-WaterDropL2\",\"306\":\"icon-assets-WeatherAlert\",\"307\":\"icon-assets-WeatherExpand\",\"308\":\"icon-assets-WeatherIcon\",\"309\":\"icon-assets-WeatherPrecipitation\",\"310\":\"icon-assets-WeatherTemperature\",\"311\":\"icon-assets-WeatherWind\",\"312\":\"icon-assets-WeeklyAdsDark\",\"313\":\"icon-assets-WeeklyAdsLight\",\"314\":\"icon-assets-WhatsApp\",\"315\":\"icon-assets-WhatsAppBlack\",\"316\":\"icon-assets-Windy\",\"317\":\"icon-assets-WindyV2\",\"318\":\"icon-assets-WindyWhite\",\"319\":\"icon-assets-Word\",\"320\":\"icon-assets-World\",\"321\":\"icon-assets-Xlsx\",\"322\":\"icon-assets-Yammer\",\"323\":\"icon-coronavirus-icon\",\"324\":\"icon-poll-results\"}[chunkId]||chunkId) + \".\" + {\"92\":\"52891e29667577089a46\",\"93\":\"885885e62601aadac210\",\"94\":\"73288985acc52f455f27\",\"95\":\"4c03835521c2807fe081\",\"96\":\"7d63d19cd913d210157a\",\"97\":\"4fba04f19638e4008290\",\"98\":\"254b50775ea466169a21\",\"99\":\"59cf10abb580458fafb2\",\"100\":\"ccb05aa42373d1e27db0\",\"101\":\"f5929c6587eb9d902e06\",\"102\":\"8385ee10439b017e5068\",\"103\":\"8698c5485ce040cd3fe2\",\"104\":\"a0f248782fcec37e6424\",\"105\":\"ccd69477a231e1a4f653\",\"106\":\"b4b5cf38ef7b5a74df7c\",\"107\":\"ef0b178d688fa8360601\",\"108\":\"3c31468ec0fff2f803b0\",\"109\":\"ae36176164d2934564e7\",\"110\":\"76d106f5d2908f7d5226\",\"111\":\"5527c80778af866d394a\",\"112\":\"f0120d06bc80c869d136\",\"113\":\"e52a8de8b04225db806b\",\"114\":\"28cba2a89b4f27835f3c\",\"115\":\"ea710193c16af78199e6\",\"116\":\"8d229a20e88215ec49e6\",\"117\":\"d1e18367dd3b18d3b95c\",\"118\":\"8cd887ff6d6202a3761e\",\"119\":\"7d6c57576670f2057771\",\"120\":\"2adc5fc7bb504efb5085\",\"121\":\"b0672b37f0764a7b5424\",\"122\":\"e3b5e8dd99310cdd815b\",\"123\":\"ad904d1357f64bb0da06\",\"124\":\"567673424ca40af393cb\",\"125\":\"dd90042b12cf829aa444\",\"126\":\"5c1cede25f1eff87dbf4\",\"127\":\"95956d29d60ec96a36f9\",\"128\":\"cbe90904609d4e5d3326\",\"129\":\"cc4c6e7f385c2595a68d\",\"130\":\"78e6f49d96a6bb9c80db\",\"131\":\"ad52558946e15c3cd219\",\"132\":\"1eb176016ee2d4d4a852\",\"133\":\"9cb5b15cd6aa81ce5a36\",\"134\":\"39fd95e42741d3000303\",\"135\":\"ff955d4a944ac036d97c\",\"136\":\"f3f39a7adb9d1c1cf9d0\",\"137\":\"374958a4dac1eae7a303\",\"138\":\"0634976ce77c4e586912\",\"139\":\"546f57ee4a0de478ebaf\",\"140\":\"d84e358f2943728d8734\",\"141\":\"d7695410889bc373a92d\",\"142\":\"2055d1779b5f230ed3ea\",\"143\":\"17dd3cab3e96a8356bbc\",\"144\":\"95012070c29009c98bf0\",\"145\":\"fbe91453ac7a78f3be89\",\"146\":\"72546ea564d56a4d1536\",\"147\":\"725e115f565fad430d26\",\"148\":\"6f2629d63a95be618011\",\"149\":\"b671296b09207ab00a49\",\"150\":\"b7dd715b5b9a9a43d3bc\",\"151\":\"3377e800fa60409905d7\",\"152\":\"162f5d80849effd6e827\",\"153\":\"57f9f83ccd1415b1e110\",\"154\":\"81dcb5d792151e914bdf\",\"155\":\"2a752b71a01158d4845c\",\"156\":\"b85e489b4a35d068d3d5\",\"157\":\"d5b635470d3cabb88072\",\"158\":\"9a46fda420e65bda69ac\",\"159\":\"155272409aebf10b7e05\",\"160\":\"b6f61338f2a52ce8541c\",\"161\":\"3e0d63b7ab881edfdbbc\",\"162\":\"a72be3a191d4975b1513\",\"163\":\"ac0d187a8fd337970ff8\",\"164\":\"caa013520761ec3633c8\",\"165\":\"8ff4da296d70a205226d\",\"166\":\"82f63e091effd1d5562d\",\"167\":\"03a00f8aad8b31ef0cdf\",\"168\":\"f37dca9de8cf2c1f996b\",\"169\":\"3ac0ed5c84e9a4e8c2a4\",\"170\":\"e77f2fc465a4c7cb3d63\",\"171\":\"cb7064cdd495765fc4a0\",\"172\":\"9e88852e8637e7769aca\",\"173\":\"c6fcf0c481fe6e2e4ba5\",\"174\":\"508cdad2650b83855a77\",\"175\":\"65b19a8231875a063098\",\"176\":\"b9d39f0beea0ce62b42d\",\"177\":\"eb52865b84d516b8fe07\",\"178\":\"a294001370afab46f8d1\",\"179\":\"b7e8a2bc04a8d2f4554c\",\"180\":\"322e0ccf2c2779f49fea\",\"181\":\"33c2db6f77a34976257a\",\"182\":\"779be1d658ec95654a2d\",\"183\":\"66dd89e0bed1067a5240\",\"184\":\"0e8618d7042e74d1c3ff\",\"185\":\"f8fcb24e05fbfe32f88f\",\"186\":\"448474c52f318b510c11\",\"187\":\"17610d36070fa58a0a7d\",\"188\":\"f95122b21fd25ba719fe\",\"189\":\"126b68eb489b172fb0f9\",\"190\":\"d86b592f4a1ba9ec37f6\",\"191\":\"ecd5960d4b2797745fde\",\"192\":\"fa915522e15785ec7f9f\",\"193\":\"4902fbffbe90e62e1ce6\",\"194\":\"c6b3bcdd4115125c6c85\",\"195\":\"caa1614769d0e322f756\",\"196\":\"435d996faa88532e2677\",\"197\":\"18dedd4ba1fc3a5a46c9\",\"198\":\"3ba5b2dac2034d4aa4ee\",\"199\":\"d186423460949257c10d\",\"200\":\"3c230065a29f8968c5e6\",\"201\":\"a18d1c2bc2187dff39a3\",\"202\":\"0d2b50207a0ac209e1bb\",\"203\":\"17c10ebabd593fef1229\",\"204\":\"e1dc134978cf7e9294a5\",\"205\":\"de573bf358e4d2294808\",\"206\":\"aef09b26dfd694590db7\",\"207\":\"91388dcd09653683c046\",\"208\":\"ec7f3b133f24624e89ca\",\"209\":\"b7bfe84c2082f6cd05bb\",\"210\":\"b2d707293f988efb511f\",\"211\":\"5853a22d0dea814adde0\",\"212\":\"fb02146c149ef8fbf339\",\"213\":\"8f625adbab2271f8e56c\",\"214\":\"46a99e7ba93ead505c33\",\"215\":\"2ac81c184266c6a1c706\",\"216\":\"110b3ad2106962404209\",\"217\":\"c49d0f275856651ccd12\",\"218\":\"bcb1ac7c5d2c1ac40672\",\"219\":\"9b793d7323fbfbc9fe46\",\"220\":\"9c542ed7e552c1c37383\",\"221\":\"ef51e85e0f04bae8083a\",\"222\":\"e59eec63d5bd6d929439\",\"223\":\"4af045807a990c928b1d\",\"224\":\"61140603b53c204bb092\",\"225\":\"bf145e94824bb3ca162b\",\"226\":\"51b36339fed95a253d89\",\"227\":\"f6ef747a1a088fdb818a\",\"228\":\"429011debc030adeea6c\",\"229\":\"1006cbe2ee87372ba784\",\"230\":\"d054ad45f1bad349e9c6\",\"231\":\"cab6017ebd3b5595ad81\",\"232\":\"b199f5ae021eabe1e907\",\"233\":\"d2443036c9042109e669\",\"234\":\"65b8152b55b53121b7d0\",\"235\":\"fed81ddef9ec0b3704eb\",\"236\":\"5a3cfc52fc6e65343c6e\",\"237\":\"17dca431e386d47ad96b\",\"238\":\"3aa921bc1b8e68efbb72\",\"239\":\"66752135167896502e9d\",\"240\":\"157bb0ec89574f4187d9\",\"241\":\"52828ea1fcea4a08b6cd\",\"242\":\"3196e531aea7d9524a18\",\"243\":\"51cd06632d21ffb65552\",\"244\":\"354a1b782f613a43edf9\",\"245\":\"e7a37ad47d26011adb71\",\"246\":\"83b2570c3d3478ebd644\",\"247\":\"951012faf1c0a96e792a\",\"248\":\"45a24fd494ae714eeec1\",\"249\":\"014cc6950bf95c78a19b\",\"250\":\"f8a707f22574b9b98562\",\"251\":\"44cf53c0df14722d9430\",\"252\":\"474a5d7ad789fdd20bd2\",\"253\":\"3ba341fb553df950fee0\",\"254\":\"5bec11ad20463d4613dd\",\"255\":\"fe9a11f751c54bda2aa3\",\"256\":\"e028b2a363401a793967\",\"257\":\"66a13e2dacf2db5cf126\",\"258\":\"7397abc432538cabd0af\",\"259\":\"9f31c4345adc0d5ccee9\",\"260\":\"0943d958ab55641a39df\",\"261\":\"5883e4fe4ea968bd0eee\",\"262\":\"1632a8bef4400670e723\",\"263\":\"074bfa70f58634545840\",\"264\":\"867ade9dd3ec892b07cc\",\"265\":\"e0771af54ea181fb50a6\",\"266\":\"14f0aa720b3d581edd5e\",\"267\":\"7b513cdf607313b7da19\",\"268\":\"f6e6dec888d8a4be8983\",\"269\":\"8e05f942a0bcd33c73e9\",\"270\":\"92b2d0402b591b8cf856\",\"271\":\"00b0e42963db05b8baac\",\"272\":\"e665324f9c15c169f91c\",\"273\":\"0745f2a2289139bb3538\",\"274\":\"a77ea0af50f47f38b44a\",\"275\":\"a96d9c0f99e844bd5be8\",\"276\":\"43ff568325cbb1e36bd2\",\"277\":\"8cc3c1e32a2cb48ce84c\",\"278\":\"72660d6a423e3bfa1312\",\"279\":\"781d9eb2abe76e90636f\",\"280\":\"1376efafc83cd2b7663f\",\"281\":\"29a5a8a012ca986b713e\",\"282\":\"6e5470ae36b2471f4e98\",\"283\":\"c73d9c10ff5134102428\",\"284\":\"24d7c07c8c7782ea3dff\",\"285\":\"59bb090b8cf2773f9c01\",\"286\":\"37e8c4c80d6fdb171b86\",\"287\":\"daad976e04f632fb8edb\",\"288\":\"6e89b52d0dbaaef44c1e\",\"289\":\"1ebc85f9b3353f1b54e8\",\"290\":\"e55637b5ece3f61544ed\",\"291\":\"ae3cc737ddbda01aa743\",\"292\":\"374cd732feddd766f4e1\",\"293\":\"16a991a93766ff4fec45\",\"294\":\"9591de1fd8962aa9f8c6\",\"295\":\"50e56c72b65ede506d15\",\"296\":\"254d1beaa73b1e101f92\",\"297\":\"e2b2ad382e6a67b4054e\",\"298\":\"2cbd92db8cb66f5b2c2d\",\"299\":\"67c8c348a271f620a2d9\",\"300\":\"6d5e0b1aaab361d50f94\",\"301\":\"3c8c66dbf5945cc25b36\",\"302\":\"fcad1e9fa735406ca5ee\",\"303\":\"24bdb94b9803784dbb61\",\"304\":\"2de027ff9e509a0ce54d\",\"305\":\"c2ddd2efe3380c1b44e4\",\"306\":\"e645dbf7014098cad656\",\"307\":\"80323a0867dd698dd416\",\"308\":\"b04d1ca3f5ce14ae5568\",\"309\":\"8e94f67005da9a669817\",\"310\":\"41a697f36d7f246af268\",\"311\":\"7040c0f23be2d3d27a77\",\"312\":\"b801a6bd3e403121a46d\",\"313\":\"cfd959ab94ac5bf929a1\",\"314\":\"2c0dc4034e73ae9a343a\",\"315\":\"c5c9a02fa3351230fa62\",\"316\":\"1e9253142b9ff40ce13e\",\"317\":\"ae63497b71afd1b2fe8b\",\"318\":\"7602d5c7ce642cdd0eca\",\"319\":\"ad7a83bce2ea972bede8\",\"320\":\"12928b08668ed0d5c271\",\"321\":\"8ddcd39b16ae83f04bb4\",\"322\":\"d930f02b7f59f3cbbc4b\",\"323\":\"78675202c9ccff969e91\",\"324\":\"b06b0a6af0f9f174429f\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/bundles/v1/hybrid/20200729.106/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1018,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * The app error object that contains the data of an app error\r\n */\r\nexport interface AppError {\r\n /** error id */\r\n id: number;\r\n\r\n /** source file */\r\n source?: string;\r\n\r\n /** Message or data */\r\n message?: string;\r\n\r\n /** severity */\r\n severity?: Severity;\r\n\r\n /** Property Bag */\r\n pb?: AppErrorPropertyBag;\r\n\r\n /** optional property: Bug meta data for auto bug creation from app error */\r\n bug?: any;\r\n}\r\n\r\n/**\r\n * The app error property bag that will be used for build number etc.\r\n */\r\nexport interface AppErrorPropertyBag {\r\n /** build number */\r\n build?: string;\r\n\r\n /** custom message */\r\n customMessage?: string;\r\n\r\n /** PCS build version */\r\n pcsVersion?: string;\r\n\r\n /** The error source. */\r\n source?: string;\r\n\r\n /** The line number of the error. */\r\n line?: number;\r\n\r\n /** The column number of the error. */\r\n column?: number;\r\n\r\n /** The stack trace for the error. */\r\n stack?: string;\r\n}\r\n\r\n/**\r\n * The interface that defines a generic app error tracker\r\n */\r\nexport interface AppErrorTracker {\r\n /**\r\n * Report an app error\r\n * @param {AppError} error - the app error to report\r\n */\r\n trackError(error: AppError): Promise;\r\n}\r\n\r\n/**\r\n * This will decide whether to create Alert for this app error or no alert. This can generate IcM ticket.\r\n * Alerts ones are tracked at http://aka.ms/AppErrors\r\n * NoAlerts will have separate tab just next to Errors aka Warnings. IcM ticket won't be generated when NoAlert is set.\r\n */\r\nexport enum Severity {\r\n /**\r\n * This is app error with default severity\r\n */\r\n Alert,\r\n\r\n /**\r\n * This is app warning\r\n */\r\n NoAlert,\r\n\r\n /**\r\n * This app error has high user impact\r\n */\r\n HighImpact,\r\n\r\n /**\r\n * This is fatal app error\r\n */\r\n Critical\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { canUseDOM, getInnerHeight, getInnerWidth } from \"@msnews/isomorphic-util\";\r\n\r\n// Wraps modern visibility api, as well as defines visibility for elements based on viewbox.\r\n\r\n// a simple deferred promise object that delays execution of callbacks until the owner resolves. (see $.Deferred for jQuery's implementation, this is a subset)\r\nfunction Deferred() {\r\n // the callbacks to execute when resolved\r\n let callbacks = [];\r\n\r\n // the state of the promise. If we have already resolved we execute the delegates immediately.\r\n let isResolved = false;\r\n\r\n // the arguments used to resolve the promise.\r\n let resolvedArgs = null;\r\n\r\n // executes all the callbacks that need to be notified, giving them a ref to the arguments supplied.\r\n function flushCallbacks() {\r\n // we only flush if we are resolved\r\n if (isResolved) {\r\n const errors = [];\r\n\r\n // loop through the callbacks and execute.\r\n for (let index = 0; index < callbacks.length; index++) {\r\n try {\r\n callbacks[index](resolvedArgs);\r\n } catch (e) {\r\n // delay propagation of errors until all callbacks have been notified\r\n errors.push(e);\r\n }\r\n }\r\n\r\n // clear the callbacks array\r\n callbacks = [];\r\n\r\n // throw the error collection if we received any.\r\n if (errors.length) {\r\n throw errors;\r\n }\r\n }\r\n }\r\n\r\n // resolves the promise\r\n function resolve(...args: unknown[]) {\r\n isResolved = true;\r\n resolvedArgs = args;\r\n flushCallbacks();\r\n }\r\n\r\n // the promise function\r\n function promise(...args: unknown[]) {\r\n return {\r\n\r\n // the happy path for callbacks\r\n then:\r\n function (callback) {\r\n callbacks.push(callback);\r\n flushCallbacks();\r\n },\r\n\r\n // subscribers listen here for when the promise was denied or resolved.\r\n always:\r\n function () {\r\n return this.then(args);\r\n }\r\n };\r\n }\r\n\r\n // lets return our deferred object that.\r\n return {\r\n // the promise object\r\n promise: promise,\r\n // the resolve method.\r\n resolve: resolve\r\n };\r\n}\r\n\r\n// create our visibility deferred\r\n// @ts-ignore\r\nlet visibilityDeferred = new Deferred();\r\n\r\n// initialize the visibility property name\r\nconst visibilityProperty = getHiddenPropertyName();\r\n\r\n// Flag to check if unload event has been triggered\r\n// Page Visibility API removed 'unloaded' visbility state and now reports 'hidden' when browser is being unloaded.This breaks the wasBrowserHiddenAtLeastOnce logic.\r\n// Flag is used to detect & ignore state change if unload event caused the 'hidden' visibilityState.\r\n// Chrome 56 (as of 2/21/2017) has implemented the spec change and would probably land in Edge in the future releases.\r\n// Link to spec - https://w3c.github.io/page-visibility/\r\n\r\nlet isUnloadEventInProgress = false;\r\n\r\nif (canUseDOM() && window.addEventListener) {\r\n window.addEventListener(\"beforeunload\", function () {\r\n isUnloadEventInProgress = true;\r\n });\r\n}\r\n\r\n// flag to indicate if Browser was hidden even once in a page impression\r\nlet wasBrowserHidden = false;\r\n\r\nif (canUseDOM() && visibilityProperty) {\r\n // this preserves our vendor prefix\r\n const evtname = visibilityProperty.replace(/[H|h]idden/, \"\") + \"visibilitychange\";\r\n document.addEventListener(evtname, visibilityChanged);\r\n}\r\n\r\n// call it immediately to prime the deferred if we are already visibile.\r\nvisibilityChanged();\r\n\r\n// returns the property name for document.hidden, which can contain the browser specific prefix, or null if not defined.\r\n// hidden is part of modern browsers visibility api.\r\nfunction getHiddenPropertyName() {\r\n if (!canUseDOM()) {\r\n return null;\r\n }\r\n\r\n const prefixes = [\"webkit\", \"moz\", \"ms\", \"o\"];\r\n\r\n // if 'hidden' is natively supported just return it\r\n if (typeof document.hidden !== \"undefined\") {\r\n return \"hidden\";\r\n }\r\n\r\n // otherwise loop over all the known prefixes until we find one\r\n for (let index = 0; index < prefixes.length; index++) {\r\n const prospectivePropertyName = prefixes[index] + \"Hidden\";\r\n if ((prospectivePropertyName) in document) {\r\n return prospectivePropertyName;\r\n }\r\n }\r\n}\r\n\r\n// determines if the page is hidden.\r\nfunction isHidden() {\r\n if (!canUseDOM() || !visibilityProperty) {\r\n return false;\r\n }\r\n\r\n return document[visibilityProperty];\r\n}\r\n\r\n// handler for visibility changes. Determines if we should resolve the promise.\r\nfunction visibilityChanged() {\r\n if (!isHidden()) {\r\n visibilityDeferred.resolve();\r\n } else {\r\n // create a new one so we can fire when we are back.\r\n // @ts-ignore\r\n visibilityDeferred = new Deferred();\r\n // flag indicates that browser was minimised or hidden during the page impression\r\n\r\n if (!isUnloadEventInProgress) {\r\n wasBrowserHidden = true;\r\n }\r\n }\r\n}\r\n\r\n// returns if the browser was hidden at least once\r\nfunction wasBrowserHiddenAtLeastOnce() {\r\n return (wasBrowserHidden ? 1 : 0);\r\n}\r\n\r\n// determines if an element is currently visible to the user\r\nfunction isElementTrulyVisible(element, windowRight, windowLeft, windowHeight) {\r\n if (isHidden() || !element) {\r\n return false;\r\n }\r\n\r\n windowHeight = windowHeight || getInnerHeight();\r\n windowRight = windowRight || getInnerWidth();\r\n\r\n if (!windowLeft && windowLeft !== 0) {\r\n windowLeft = 0;\r\n const contentArea = document.getElementById(\"content\");\r\n\r\n if (contentArea) {\r\n const contentRect = contentArea.getBoundingClientRect();\r\n windowRight = contentRect.right;\r\n windowLeft = contentRect.left;\r\n }\r\n }\r\n\r\n let boxVisible = false;\r\n\r\n const rec = element.getBoundingClientRect();\r\n\r\n const elementHeightVisible = (rec.top >= 0 || rec.bottom >= 0) && (rec.top < windowHeight || rec.bottom < windowHeight);\r\n const elementWidthVisible = (rec.left >= windowLeft || rec.right > windowLeft) && (rec.left < windowRight || rec.right <= windowRight);\r\n\r\n boxVisible = rec.height !== 0 || rec.width !== 0;\r\n\r\n return boxVisible && (elementHeightVisible && elementWidthVisible);\r\n}\r\n\r\n/// Notifies the callee when we return to visibile state. Returns immediately if we are currently visible\r\n/// A JQuery Promise that resolves when visible\r\nfunction notifyWhenPageVisible() {\r\n // return our current promise.\r\n return visibilityDeferred.promise();\r\n}\r\n\r\n// return the visibility object being returned\r\nexport default {\r\n // returns true if the document is hidden\r\n isHidden: isHidden,\r\n // returns a jquery promise that resolves the next time (or immediately) the page becomes visible\r\n notifyWhenPageVisible: notifyWhenPageVisible,\r\n // returns true if the page is visible && element within viewport\r\n isElementTrulyVisible: isElementTrulyVisible,\r\n // returns true if page was hidden even once\r\n wasBrowserHiddenAtLeastOnce: wasBrowserHiddenAtLeastOnce\r\n};\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n// Tracking information aggregate object.\r\n// used by all the tracking systems to get common info sent via tracking\r\n\r\nimport dom from \"./dom\";\r\nimport extend from \"./extend\";\r\nimport { headData, getCookie, appEnvironment } from \"@msnews/core\";\r\nimport mediator from \"./mediator\";\r\nimport pageInstance from \"./pageInstance\";\r\nimport telemetryConstants from \"./telemetryconstants\";\r\nimport { telemetryDataTypes } from \"./telemetryDataTypes\";\r\nimport { telemetryReadyCallback } from \"./telemetryReadyCallback\";\r\nimport visibilityService from \"./visibility\";\r\nimport { AadAccountType, AccountType } from \"@msnews/experiences-constants\";\r\nimport { canUseDOM, getLocationHref } from \"@msnews/isomorphic-util\";\r\n\r\nlet clientClientId;\r\nlet browserWidth;\r\nlet browserHeight;\r\n// eventIndex[0] is for the first rid and eventIndex[1] is for the current rid\r\nconst eventIndex = [0, 0];\r\nlet isFirstEventIndex = true;\r\nlet eventTransientCustomTags = {}; // eventTransientCustomTags is applied to each specific events.\r\n\r\nlet modules = [];\r\nlet baseUrl = \"\";\r\nlet clientIdTypeValue;\r\n\r\nlet userDefinedCustomTags = {};\r\n\r\nfunction Module(element, visible) {\r\n this.element = element;\r\n this.visible = visible;\r\n\r\n if (this.visible) {\r\n this.compress = function () {\r\n const moduleTelemetryData = this.element.getAttribute(\"data-m\");\r\n try {\r\n return JSON.parse(moduleTelemetryData);\r\n } catch (e) {\r\n return moduleTelemetryData;\r\n }\r\n };\r\n }\r\n}\r\n\r\nfunction getBrowserSize() {\r\n /// \r\n /// Helper function used to get the browser height and width\r\n /// \r\n\r\n browserWidth = (canUseDOM()) ? (window.outerWidth || document.documentElement.clientWidth) : 0;\r\n browserHeight = (canUseDOM()) ? (window.outerHeight || document.documentElement.clientHeight) : 0;\r\n\r\n}\r\n\r\nfunction getWindowHeight() {\r\n /// \r\n /// Get current browser viewpane height\r\n /// \r\n\r\n if (!canUseDOM()) {\r\n return 0;\r\n }\r\n\r\n return window.innerHeight ||\r\n document.documentElement.clientHeight ||\r\n document.body.clientHeight || 0;\r\n}\r\n\r\nfunction getWindowYscroll() {\r\n /// \r\n /// Get current absolute window scroll position\r\n /// \r\n\r\n if (!canUseDOM()) {\r\n return 0;\r\n }\r\n\r\n return window.pageYOffset ||\r\n document.body.scrollTop ||\r\n document.documentElement.scrollTop || 0;\r\n}\r\n\r\nfunction getDocHeight() {\r\n /// \r\n /// Get current absolute document height\r\n /// \r\n\r\n if (!canUseDOM()) {\r\n return 0;\r\n }\r\n\r\n return Math.max(\r\n document.body.scrollHeight || 0,\r\n document.documentElement.scrollHeight || 0,\r\n document.body.offsetHeight || 0,\r\n document.documentElement.offsetHeight || 0,\r\n document.body.clientHeight || 0,\r\n document.documentElement.clientHeight || 0\r\n );\r\n}\r\n\r\nfunction getDefaultCustomTags() {\r\n /// \r\n /// Get the default custom tags.\r\n /// \r\n const defaultCustomTags = {};\r\n\r\n if (!canUseDOM()) {\r\n return defaultCustomTags;\r\n }\r\n\r\n // @ts-ignore\r\n if (window && window.adsEnabled != null) {\r\n // @ts-ignore\r\n defaultCustomTags.adoni = +window.adsEnabled;\r\n }\r\n\r\n return defaultCustomTags;\r\n}\r\n\r\nfunction joinTelemetryValues(separator, leftTmplValue, rightTemplValue) {\r\n /// Composes a new template value from an exisiting one and a new one.\r\n /// The separator.\r\n /// The left tmpl value string, may be null or empty.\r\n /// The right tmpl value string, may be null or empty.\r\n /// \r\n /// A new string composed of the right and left values with a semi-colon separator if both values are non-null and not empty.\r\n /// If the right templ value is null or empty (or otherwise falsey), the left templ value is returned.\r\n /// If only the left templ value is falsey, only the right templ value is returned.\r\n /// \r\n\r\n return rightTemplValue\r\n ? leftTmplValue\r\n ? [leftTmplValue, rightTemplValue].join(separator)\r\n : rightTemplValue\r\n : leftTmplValue;\r\n}\r\n\r\nfunction joinTelemetryValuesForTmpl(separator, currentTmplValue, newTmplValue) {\r\n /// Composes a new template value from an exisiting one and a new one.\r\n /// The separator.\r\n /// The currentTmplValue, may be null or empty.\r\n /// The newTmplValue, may be null or empty.\r\n /// \r\n /// A new string composed of the newTmplValue and currentTmplValue with a semi-colon separator if both values are non-null and not empty.\r\n /// If the newTmplValue is null or empty (or otherwise falsey), the currentTmplValue is returned.\r\n /// If only the currentTmplValue is falsey, only the newTmplValue is returned.\r\n /// Duplicate key will override the value even if the value is empty string.\r\n /// Value without any key will be ignored.\r\n /// \r\n\r\n if (!newTmplValue) {\r\n return currentTmplValue ? currentTmplValue : \"\";\r\n }\r\n if (!currentTmplValue) {\r\n return newTmplValue ? newTmplValue : \"\";\r\n }\r\n const combinedTelemetryVal = {};\r\n const array = [];\r\n let isDuplicateKeyExist = false;\r\n const newTmplValueSplited = newTmplValue.split(separator);\r\n for (let i = 0; i < newTmplValueSplited.length; i++) {\r\n const newKeyVal = newTmplValueSplited[i].split(\":\");\r\n if (newKeyVal[0]) {\r\n if (!isDuplicateKeyExist) {\r\n // 'currentTmplValue' will be split out only if 'newTmplValue' contains any key which is exist in 'currentTmplValue'\r\n if (newKeyVal[0] && (currentTmplValue.indexOf(newKeyVal[0]) != -1)) {\r\n const currentTmplValueSplited = currentTmplValue.split(separator);\r\n for (let j = 0; j < currentTmplValueSplited.length; j++) {\r\n if (currentTmplValueSplited[j]) {\r\n const currentKeyVal = currentTmplValueSplited[j].split(\":\");\r\n combinedTelemetryVal[currentKeyVal[0]] = currentKeyVal[1];\r\n }\r\n }\r\n isDuplicateKeyExist = true;\r\n }\r\n }\r\n combinedTelemetryVal[newKeyVal[0]] = newKeyVal[1];\r\n }\r\n }\r\n\r\n let val = \"\";\r\n for (const key in combinedTelemetryVal) {\r\n if (key) {\r\n if (val !== \"\") {\r\n val += separator;\r\n }\r\n\r\n val += key;\r\n if (combinedTelemetryVal[key]) {\r\n val += \":\" + combinedTelemetryVal[key];\r\n }\r\n }\r\n }\r\n\r\n if (!isDuplicateKeyExist && currentTmplValue) {\r\n val = val ? val + separator + currentTmplValue : currentTmplValue;\r\n }\r\n\r\n return val;\r\n}\r\n\r\nexport const trackInfo = {\r\n notrack: \"notrack\",\r\n cmSeparator: \">\",\r\n // TODO: (nubenja) To be removed. Make sure all dependecies get removed\r\n defaultModule: \"body\",\r\n defaultFormHeadline: \"[form submit]\",\r\n piitxt: \"data-piitxt\",\r\n piiurl: \"piiurl\",\r\n wrapperId: \"wrapper\",\r\n MUIDCookie: \"MUID\", // This is used for client id. If MUID exists, then we will use MUID as client id otherwise use request id.\r\n gestureKey: \"touch_gesture\",\r\n gestureType:\r\n {\r\n tap: \"tap\",\r\n rightclick: \"rightclick\"\r\n },\r\n eventTypes:\r\n {\r\n click: \"click\",\r\n nonNavClckEvt: \"click_nonnav\",\r\n submit: \"submit\",\r\n contextmenu: \"contextmenu\",\r\n mouseenter: \"mouseenter\",\r\n imprUpdate: \"impr_update\",\r\n adPlay: \"AdPlay\",\r\n contentPlay: \"ContentPlay\",\r\n videoClickNonNav: \"Click_Non-nav\"\r\n },\r\n imprUpdateMechanisms:\r\n {\r\n load: \"load\",\r\n scroll: \"scroll\",\r\n auto: \"auto\",\r\n tap: \"tap\",\r\n resize: \"resize\",\r\n swipe: \"swipe\",\r\n partial: \"partial\",\r\n view: \"view\"\r\n },\r\n event: {},\r\n sitePage: {},\r\n userStatic: {},\r\n overrideClientParams: {},\r\n persistOverriddenParams: false,\r\n customTags: getDefaultCustomTags() || {}, // customTags is applied to all events.\r\n trackingDisabled: false, // used by NTP/DHP to disable tracking in \"enterprise mode\",\r\n shouldFireTelemetry: function () {\r\n /// \r\n /// Return whether telemetry beacons should get fired or not.\r\n /// \r\n\r\n return !this.trackingDisabled;\r\n },\r\n appErrorEnabled: true, // should not send app error when user is navigating away from page.\r\n shouldFireAppError: function () {\r\n /// \r\n /// Return whether app error beacons should get fired or not.\r\n /// \r\n\r\n return this.appErrorEnabled;\r\n },\r\n getCurrentTime: function () {\r\n /// \r\n /// gets the current timestamp\r\n /// \r\n /// \r\n /// \r\n return +new Date();\r\n },\r\n timeToInteract: function (eventTime?) {\r\n /// \r\n /// gets the time to interact for the event by substracting it from navigationStart.\r\n /// https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming/navigationStart\r\n /// \r\n /// \r\n /// \r\n if (!canUseDOM()) {\r\n return 0;\r\n }\r\n\r\n let eventTiming;\r\n if (eventTime) {\r\n eventTiming = eventTime;\r\n } else {\r\n eventTiming = trackInfo.getCurrentTime();\r\n }\r\n if (eventTiming && window.performance && window.performance.timing && window.performance.timing.navigationStart) {\r\n return (eventTiming - window.performance.timing.navigationStart);\r\n }\r\n },\r\n // This will be deprecated in upcoming iterations, so please use telemetryDataTypes.TelemetryType. Please follow these new definitions: https://microsoft.sharepoint.com/:x:/t/IDXTelemetryandDatafabric/EbMw_1_6OCtNtyXkbb2YcjoBxY2iFtWOW-kfQZLJmnErEw\r\n telemetryModuleTypes:\r\n {\r\n Undefined: 0,\r\n Header: 1,\r\n Footer: 2,\r\n topNavBar: 3,\r\n navBar: 4,\r\n dropDown: 5,\r\n Section: 6,\r\n Carousel: 7,\r\n Module: 8,\r\n searchBox: 9,\r\n inputBox: 10,\r\n actionButton: 11,\r\n Interaction: 12,\r\n Headline: 13,\r\n Navigation: 14,\r\n Entity: 15,\r\n structuredData: 16,\r\n appStore: 17,\r\n appLaunch: 18,\r\n cmsPromotions: 19,\r\n microsoftWebStore: 20,\r\n xboxStore: 21,\r\n officeStore: 22,\r\n appInstall: 23,\r\n PartnerLinks: 24,\r\n SponsoredContent: 25\r\n },\r\n contentPlacedBySource:\r\n {\r\n Editorial: 0,\r\n PersonalizationAlgo: 1,\r\n BingAlgo: 2,\r\n Taboola: 3,\r\n Outbrain: 4\r\n },\r\n telemetryDataAttribute: \"data-m\",\r\n telemetryHLAttribute: \"data-hl\",\r\n client:\r\n {\r\n // client id\r\n clientId: function () {\r\n if (!clientClientId && clientClientId !== \"\") {\r\n // @ts-ignore\r\n clientClientId = getCookie(trackInfo.MUIDCookie) || trackInfo.sitePage.requestId || \"\";\r\n }\r\n\r\n return clientClientId;\r\n },\r\n clientIdType: function () {\r\n // @ts-ignore\r\n if (clientClientId === trackInfo.sitePage.requestId) {\r\n clientIdTypeValue = \"activityId\";\r\n } else if (clientClientId !== \"\") {\r\n clientIdTypeValue = \"muid\";\r\n }\r\n\r\n return clientIdTypeValue;\r\n },\r\n gesture: function () {\r\n const element = dom.getTarget(trackInfo.event);\r\n if (element && element[trackInfo.gestureKey]) {\r\n return element[trackInfo.gestureKey];\r\n }\r\n const trackInfoEvent: any = trackInfo.event;\r\n if (trackInfoEvent) {\r\n if ((trackInfoEvent.originalEvent && trackInfoEvent.originalEvent == \"contextmenu\") || trackInfoEvent.ctrlKey || trackInfoEvent.shiftKey) {\r\n return trackInfo.gestureType.rightclick;\r\n }\r\n }\r\n return \"\";\r\n },\r\n\r\n getMuid: function () {\r\n return getCookie(trackInfo.MUIDCookie);\r\n },\r\n\r\n getAnonCookieName: function () {\r\n /// \r\n /// Gets the anonCookieName from the headData (hybrid) or the appEnvironment. ANON for Pages with manual sign in, else APP_ANON.\r\n /// \r\n /// \r\n /// \r\n return headData.AnonCookieName || appEnvironment.AuthCookieName;\r\n },\r\n\r\n getSsoComplete: function () {\r\n /// \r\n /// Gets the SsoComplete state from the headData. true if sso completes otherwise false.\r\n /// Used only for prime. DHP/NTP does not have anon.\r\n /// \r\n /// \r\n /// \r\n\r\n if (headData.SsoComplete && (headData.SsoComplete + \"\").toLowerCase() === \"true\") {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n },\r\n\r\n /**\r\n * Gets the Aad state from the headData or appEnvironment\r\n * @returns {number} The AAD authenticated state.\r\n */\r\n getAadAuthentication: function (): AadAccountType {\r\n // Check the head data for the hybrid page\r\n if (headData.AadState === true) {\r\n // AAD AuthenticatedState\r\n return AadAccountType.AadAccount;\r\n } else if (headData.AadState === false) {\r\n // AAD UnauthenticatedState\r\n return AadAccountType.NonAadAccount;\r\n }\r\n\r\n // Check the headData first for the Hybrid page, else use appEnvironment\r\n const accountInfo = appEnvironment.ResolvedAccountInfo;\r\n const isAadAccount: boolean = (accountInfo && accountInfo.account_type && accountInfo.account_type === AccountType.AAD);\r\n return isAadAccount ? AadAccountType.AadAccount : AadAccountType.NonAadAccount;\r\n },\r\n\r\n /**\r\n * Gets the device orientation\r\n */\r\n orientation: function () {\r\n if (!canUseDOM()) {\r\n return \"\";\r\n }\r\n return screen.width > screen.height ? \"landscape\" : \"portrait\";\r\n },\r\n\r\n OTFTelemetry: function (mechanism?: string): void {\r\n {\r\n if (!canUseDOM()) {\r\n return;\r\n }\r\n\r\n if (typeof mechanism === \"undefined\") {\r\n // mechanism is only undefined on page load.\r\n // Peregrine already sends an impression update on page load through\r\n // EntryPoint.connector#onVisuallyReady, so this one can be skipped.\r\n return;\r\n }\r\n\r\n if (mechanism == null) {\r\n mechanism = \"\";\r\n }\r\n\r\n modules = [];\r\n const telemetryData = document.body.querySelectorAll(\"[data-m]\");\r\n\r\n // calculate windowRight, windowLeft, and windowHeight upfront to avoid multiple calls to getBoundingClientRect() and\r\n // reduce performance impact\r\n let windowRight;\r\n\r\n const windowHeight = window.innerHeight;\r\n windowRight = window.innerWidth;\r\n\r\n let windowLeft = 0;\r\n const contentArea = document.getElementById(\"content\");\r\n\r\n if (contentArea) {\r\n const contentRect = contentArea.getBoundingClientRect();\r\n windowRight = contentRect.right;\r\n windowLeft = contentRect.left;\r\n }\r\n\r\n // Everything inside infopane is considered visible as long as infopane itself is visible due to auto rotation\r\n // First get infopane itself (\"mip\" is for infopane in mid-level, \"sip\" is for spartan infopane).\r\n const infopane = document.body.querySelector(\".ip\") || document.body.querySelector(\".mip\") || document.body.querySelector(\".sip\");\r\n const infopaneVisible = infopane && trackInfo.telemetryTracking.isVisible(infopane, windowRight, windowLeft, windowHeight);\r\n\r\n // cache result of IsVisible() to reduce performance impact caused by getBoundingClientRect()\r\n const visibles = [];\r\n for (let i = 0; i < telemetryData.length; i++) {\r\n // if otfUseViewportForVisibility is true, we will use the whole viewport to determine the visibility of the element\r\n if (telemetryData[i].getAttribute(\"data-otfUseViewportForVisibility\") === \"true\") {\r\n // @ts-ignore window.width\r\n visibles.push(trackInfo.telemetryTracking.isVisible(telemetryData[i], window.width, 0, windowHeight, infopaneVisible));\r\n } else {\r\n visibles.push(trackInfo.telemetryTracking.isVisible(telemetryData[i], windowRight, windowLeft, windowHeight, infopaneVisible));\r\n }\r\n }\r\n\r\n for (let j = 0; j < telemetryData.length; j++) {\r\n modules.push(new Module(telemetryData[j], visibles[j]));\r\n }\r\n const context = trackInfo.telemetryTracking.formatModules();\r\n // @ts-ignore\r\n if (context && ((context.e && context.e.length > 0) || (context.vc && context.vc.length > 0))) {\r\n trackInfo.telemetryTracking.sendImprUpdateEvent(mechanism, context);\r\n }\r\n }\r\n },\r\n\r\n // browser height\r\n height: function () {\r\n if (!browserHeight) {\r\n getBrowserSize();\r\n }\r\n return browserHeight;\r\n },\r\n\r\n pageTitle: function () {\r\n /**\r\n * returns the page title\r\n */\r\n if (!canUseDOM()) {\r\n return \"\";\r\n }\r\n\r\n return document.title;\r\n },\r\n\r\n // entire url of the current page\r\n // use a function because we may virtually change the page by manipulating the history stack\r\n // (for example, in a gallery when changing slides).\r\n pageUrl: function () {\r\n let pageUrl = getLocationHref();\r\n // @ts-ignore\r\n const ocid = trackInfo.sitePage.msnocid;\r\n if (ocid) {\r\n // This is the DHP or NTP page - need to add the OCID to pageUrl.\r\n const hasQueryString = pageUrl.indexOf(\"?\") >= 0;\r\n pageUrl = hasQueryString ? pageUrl + \"&\" : pageUrl + \"?\";\r\n pageUrl = pageUrl + \"ocid=\" + ocid;\r\n }\r\n\r\n return pageUrl;\r\n },\r\n\r\n // URL of the document that loaded the current document\r\n // first check for an override property that we may set during virtual page changes, and if\r\n // that's not set, use the real referrer.\r\n // @ts-ignore\r\n referrer: function () {\r\n if (!canUseDOM()) {\r\n return \"\";\r\n }\r\n\r\n // @ts-ignore\r\n return document.referrerOverride || document.referrer;\r\n },\r\n // screen resolution\r\n screenResolution: function () {\r\n if (!canUseDOM()) {\r\n return \"\";\r\n }\r\n\r\n const screenResolution = [screen.width, screen.height].join(\"x\");\r\n\r\n return screenResolution;\r\n },\r\n\r\n userAgent: function () {\r\n /**\r\n * gets the user agent\r\n */\r\n if (!canUseDOM()) {\r\n return \"\";\r\n }\r\n\r\n return navigator.userAgent;\r\n },\r\n\r\n // browser width\r\n width: function () {\r\n if (!browserWidth) {\r\n getBrowserSize();\r\n }\r\n return browserWidth;\r\n },\r\n // sends the Browser Hidden Field on window\r\n wasBrowserHiddenAtLeastOnce: function () {\r\n return visibilityService.wasBrowserHiddenAtLeastOnce();\r\n }\r\n },\r\n userDynamic:\r\n {\r\n timeStamp: function () {\r\n /// \r\n /// generates the timestamp for the url\r\n /// \r\n /// \r\n /// \r\n return trackInfo.getCurrentTime();\r\n },\r\n slideType: function () {\r\n /// \r\n /// Finds the slide type if any (and if a slide)\r\n /// \r\n /// \"halfpane\" or null\r\n if (!canUseDOM()) {\r\n return null;\r\n }\r\n\r\n // @ts-ignore\r\n let elem = trackInfo.event.target;\r\n const halfpaneClass = \"halfpane\";\r\n while (elem && dom.name(elem) != \"SECTION\") {\r\n if (dom.name(elem) == \"LI\" && dom.containsClass(elem, halfpaneClass)) {\r\n return halfpaneClass;\r\n }\r\n elem = dom.parent(elem);\r\n }\r\n return null;\r\n },\r\n firstEventIndex: function () {\r\n /// \r\n /// The first rid event index.\r\n /// This value gets incremented for each event of the first rid that is triggered\r\n /// \r\n /// \r\n /// Sequential number of the current event\r\n /// \r\n\r\n return ++eventIndex[0];\r\n },\r\n currentEventIndex: function () {\r\n /// \r\n /// The current event index.\r\n /// This value gets incremented for each event that is triggered\r\n /// \r\n /// \r\n /// Sequential number of the current event\r\n /// \r\n if (isFirstEventIndex) {\r\n return ++eventIndex[0];\r\n } else {\r\n return ++eventIndex[1];\r\n }\r\n },\r\n requestId: function () {\r\n /// \r\n /// return the requestId\r\n /// \r\n return pageInstance.getRequestId() || (trackInfo.sitePage).requestId;\r\n },\r\n resetEventIndex: function () {\r\n /// \r\n /// reset the event index\r\n /// \r\n eventIndex[1] = 0;\r\n isFirstEventIndex = false;\r\n }\r\n },\r\n custom:\r\n {\r\n addCustomTags: function () {\r\n /// \r\n /// Adds the custom tags inside the otf beacon url.\r\n /// \r\n /// \r\n /// \r\n\r\n let combinedTags = trackInfo.customTags;\r\n combinedTags = extend({}, trackInfo.customTags, eventTransientCustomTags);\r\n // reset so the next events gets its own transient custom tags\r\n eventTransientCustomTags = {};\r\n return JSON.stringify(combinedTags);\r\n },\r\n addCustomTagsForClickEvent: function () {\r\n /// \r\n /// Adds the custom tags for click event inside the otf beacon url.\r\n /// \r\n /// \r\n /// \r\n\r\n let customTags = \"\";\r\n if (typeof userDefinedCustomTags === \"object\") {\r\n for (const key in userDefinedCustomTags) {\r\n customTags = JSON.stringify(userDefinedCustomTags);\r\n break;\r\n }\r\n }\r\n // reset so the next events gets its own custom tags\r\n userDefinedCustomTags = {};\r\n return customTags;\r\n }\r\n },\r\n telemetryTracking:\r\n {\r\n setupParameters: function (evt) {\r\n const trackInfoSitePage = trackInfo.sitePage;\r\n const anonckName: string = appEnvironment.AuthCookieName as string;\r\n\r\n const result = {\r\n evt: evt,\r\n // @ts-ignore\r\n rid: pageInstance.getRequestId() || trackInfoSitePage.requestId,\r\n // @ts-ignore\r\n di: trackInfoSitePage.domainId,\r\n clid: trackInfo.client.clientId(),\r\n issso: trackInfo.client.getSsoComplete(),\r\n aadState: trackInfo.client.getAadAuthentication()\r\n };\r\n\r\n // @ts-ignore\r\n if (trackInfoSitePage.afd) {\r\n // @ts-ignore\r\n result.afd = trackInfoSitePage.afd;\r\n }\r\n\r\n if (anonckName) {\r\n // @ts-ignore\r\n result.anoncknm = anonckName;\r\n }\r\n\r\n // Set the new page parameters for all post events\r\n // @ts-ignore\r\n result[\"pg.p\"] = trackInfo.sitePage.page_product;\r\n // @ts-ignore\r\n result[\"pg.t\"] = trackInfo.sitePage.page_type;\r\n // @ts-ignore\r\n result[\"pg.n\"] = trackInfo.sitePage.page_name;\r\n // @ts-ignore\r\n result[\"pg.c\"] = trackInfo.sitePage.page_configuration;\r\n\r\n return result;\r\n },\r\n sendImprUpdateEvent: function (mechanism, modules, topLevelContainerType?) {\r\n // Prevent empty impr_update\r\n if (!canUseDOM() || modules == undefined || ((modules.e == undefined || modules.e.length <= 0) && (modules.vc == undefined || modules.vc.length <= 0))) {\r\n return;\r\n }\r\n\r\n const parameters = this.setupParameters(trackInfo.eventTypes.imprUpdate);\r\n if (parameters) {\r\n // mechanism to trigger the viewability event. ex: load, swipe, click, tap, scroll, and resize\r\n parameters[\"mech\"] = mechanism;\r\n\r\n parameters.winht = getWindowHeight();\r\n parameters.docht = getDocHeight();\r\n parameters.scrollOff = getWindowYscroll();\r\n\r\n parameters.wbh = visibilityService.wasBrowserHiddenAtLeastOnce();\r\n parameters[\"e1\"] = modules;\r\n // @ts-ignore\r\n parameters.tmpl = trackInfo.sitePage.templ;\r\n // @ts-ignore\r\n parameters.mkt = trackInfo.sitePage.localeCode;\r\n if (mechanism === trackInfo.imprUpdateMechanisms.scroll) {\r\n parameters.TTI = trackInfo.timeToInteract();\r\n }\r\n\r\n // @ts-ignore\r\n if (window && window.adsEnabled != null) {\r\n // @ts-ignore\r\n parameters.adoni = +window.adsEnabled;\r\n }\r\n\r\n // Feed parameters\r\n // @ts-ignore\r\n if (trackInfo.sitePage.feedId) {\r\n // @ts-ignore\r\n parameters.fid = trackInfo.sitePage.feedId;\r\n // @ts-ignore\r\n parameters.fn = trackInfo.sitePage.feedName;\r\n // @ts-ignore\r\n parameters.ft = trackInfo.sitePage.feedType;\r\n }\r\n\r\n // @ts-ignore\r\n if (trackInfo.sitePage.flightid) {\r\n // @ts-ignore\r\n parameters.flightid = trackInfo.sitePage.flightid;\r\n }\r\n\r\n // If toplevel container is passed to impression update then create a new parameter which will eventually be replaced by tlc.\r\n if (topLevelContainerType) {\r\n parameters.tlcType = topLevelContainerType;\r\n }\r\n\r\n this.sendUpdate(parameters);\r\n }\r\n },\r\n isVisible: function (element, windowRight?, windowLeft?, windowHeight?, infopaneVisible?) {\r\n if (!element) {\r\n return false;\r\n }\r\n\r\n return visibilityService.isElementTrulyVisible(element, windowRight, windowLeft, windowHeight);\r\n },\r\n formatModules: function () {\r\n const formattedModules = [];\r\n\r\n for (const index in modules) {\r\n const module = modules[index];\r\n if (module && module.compress) {\r\n const mData = module.compress();\r\n\r\n // TODO: (nubenja) Remove this once data-m.y is deprecated\r\n // Convertion from telemetryType (data-m.y) to telemetryContentType and telemetryContentAction (data-m.ct/ca)\r\n if (mData && mData.y && !mData.ct) {\r\n const ct = telemetryDataTypes.getTelemetryContentType(mData.y);\r\n\r\n if (ct) {\r\n mData.ct = ct;\r\n }\r\n }\r\n\r\n formattedModules.push(mData);\r\n }\r\n\r\n }\r\n\r\n const context = {};\r\n if (formattedModules && formattedModules.length > 0) {\r\n // @ts-ignore\r\n context.e = formattedModules;\r\n }\r\n\r\n return context;\r\n },\r\n sendUpdate: function (parameters) {\r\n // For the preloaded pages, the code inside requestPageRevealAsync is called when page is revealed,\r\n // otherwise it is called right away.\r\n telemetryReadyCallback((): void => {\r\n if (!trackInfo.shouldFireTelemetry()) {\r\n return;\r\n }\r\n\r\n // An ad call may send this without setting up the baseUrl correctly.\r\n // @ts-ignore\r\n baseUrl = baseUrl || (trackInfo.sitePage || {}).otfURL;\r\n if (!baseUrl) {\r\n // The value of sitePage.otfURL was empty!\r\n return;\r\n }\r\n\r\n if (!parameters) {\r\n return;\r\n }\r\n\r\n // increment the event index and set the idx parameter\r\n parameters.idx = trackInfo.userDynamic.currentEventIndex();\r\n\r\n // An ad call may send this without setting up the baseUrl correctly.\r\n const beaconData = {\r\n url: baseUrl,\r\n requestType: telemetryConstants.POST,\r\n // @ts-ignore\r\n eventType: parameters.evt || trackInfo.eventTypes.impressionUpdate,\r\n params: parameters,\r\n trackingType: telemetryConstants.OTF\r\n };\r\n\r\n mediator.pub(telemetryConstants.FireTelemetry, beaconData);\r\n });\r\n }\r\n },\r\n updateTemplValue: function (templToAdd) {\r\n /// Updates the templ value with the specified value\r\n /// The templ value to add\r\n\r\n trackInfo.updateSitePage(templToAdd);\r\n },\r\n updateSitePage: function (templ, flightId?, requestId?) {\r\n /// Updates the trackInfo.sitePage values with the specified values\r\n /// The new templ value to add\r\n /// The new flightId to add\r\n /// The new trackInfo object\r\n\r\n let currentSitePage = trackInfo.sitePage;\r\n if (!currentSitePage) {\r\n currentSitePage = trackInfo.sitePage = {};\r\n }\r\n\r\n // @ts-ignore\r\n const currentFlightIds = currentSitePage.flightid;\r\n if (flightId && (!currentFlightIds || (currentFlightIds.indexOf(flightId) < 0))) {\r\n // @ts-ignore\r\n currentSitePage.flightid = joinTelemetryValues(\",\", currentFlightIds, flightId);\r\n }\r\n // @ts-ignore\r\n currentSitePage.templ = joinTelemetryValuesForTmpl(\";\", currentSitePage.templ, templ);\r\n\r\n if (requestId) {\r\n // @ts-ignore\r\n currentSitePage.requestId = requestId;\r\n }\r\n },\r\n updatePageName: function (pageName, overridePageType) {\r\n /// Updates the pageName and pageType in the trackInfo.SitePage for the given pageName\r\n /// The pageName to update\r\n /// Boolean flag to determine to override pagetype or not. Default is true\r\n let doOverridePageType = overridePageType;\r\n if (overridePageType === undefined) {\r\n doOverridePageType = true;\r\n }\r\n\r\n const telemetryPageName = telemetryDataTypes.getTelemetryPageInfo(pageName);\r\n if (telemetryPageName && trackInfo.sitePage) {\r\n // @ts-ignore\r\n trackInfo.sitePage.page_name = telemetryPageName.PageName;\r\n if (doOverridePageType) {\r\n // @ts-ignore\r\n trackInfo.sitePage.page_type = telemetryPageName.PageType;\r\n }\r\n }\r\n },\r\n updateFeedMetadata: function (feedId, feedName, feedType) {\r\n /// Updates the feedid, feedname and feedType in the trackInfo.SitePage for the given feed\r\n /// The feedId to update\r\n /// The feedName to update\r\n /// The feedType to update\r\n if (feedId) {\r\n // @ts-ignore\r\n trackInfo.sitePage.feedId = feedId;\r\n if (feedName) {\r\n // @ts-ignore\r\n trackInfo.sitePage.feedName = feedName;\r\n }\r\n\r\n if (feedType) {\r\n // @ts-ignore\r\n trackInfo.sitePage.feedType = feedType;\r\n }\r\n }\r\n },\r\n updatePagePivot: function (pagePivot) {\r\n /// Updates the pagePivot in the trackInfo.SitePage\r\n /// The pagePivot to update\r\n if (pagePivot === telemetryDataTypes.TelemetryPagePivot.Undefined) {\r\n // @ts-ignore\r\n trackInfo.sitePage.pagePivot = null;\r\n } else if (telemetryDataTypes.validateTelemetryDataType(telemetryDataTypes.TelemetryPagePivot, pagePivot)) {\r\n // @ts-ignore\r\n trackInfo.sitePage.pagePivot = pagePivot;\r\n }\r\n },\r\n updateReferrer: function (referrer, referrerType) {\r\n /// Updates referrer and referrerType\r\n /// referrer\r\n /// TelemetryContentType of the referrer\r\n if (canUseDOM() && referrer) {\r\n // @ts-ignore\r\n document.referrerOverride = referrer;\r\n\r\n if (referrerType && telemetryDataTypes.validateTelemetryDataType(telemetryDataTypes.TelemetryContentType, referrerType) &&\r\n referrerType != telemetryDataTypes.TelemetryContentType.Undefined) {\r\n // @ts-ignore\r\n trackInfo.sitePage.referrerType = referrerType;\r\n }\r\n }\r\n },\r\n setCustomTagsForClickEvent: function (key, value) {\r\n /// \r\n /// Set user defined custom tags.\r\n /// \r\n /// The key\r\n /// The value\r\n if (key && value && value != undefined) {\r\n userDefinedCustomTags[key] = value;\r\n }\r\n },\r\n updatePageUserTypeAndUserId: function (userType, userId) {\r\n /// \r\n /// Set user id and user id type.\r\n /// \r\n /// The user id type\r\n /// The user id\r\n\r\n // @ts-ignore\r\n trackInfo.sitePage.pageUserId = null;\r\n // @ts-ignore\r\n trackInfo.sitePage.pageUserType = null;\r\n\r\n if (telemetryDataTypes.validateTelemetryDataType(telemetryDataTypes.TelemetryUserType, userType)) {\r\n // @ts-ignore\r\n trackInfo.sitePage.pageUserType = userType;\r\n\r\n if (userId) {\r\n // @ts-ignore\r\n trackInfo.sitePage.pageUserId = userId;\r\n }\r\n }\r\n },\r\n trackCustomProperty: function (key, value) {\r\n /// Adds or updates the transient per event custom tags properties\r\n /// key to add\r\n /// value to add\r\n if (key && value != undefined) {\r\n key = key.toLowerCase();\r\n eventTransientCustomTags[key] = value;\r\n }\r\n },\r\n updateExtendedFlightId: function (namespace, flightIds) {\r\n /// Adds or updates extended flightId\r\n /// Partner namespace enum\r\n /// flightIds to add\r\n\r\n const currentSitePage = trackInfo.sitePage;\r\n\r\n if (currentSitePage && flightIds && namespace &&\r\n telemetryDataTypes.validateTelemetryDataType(telemetryDataTypes.TelemetryPartnerNamespace, namespace)) {\r\n // @ts-ignore\r\n currentSitePage.extflightid = joinTelemetryValuesForTmpl(\"|\", currentSitePage.extflightid, namespace + \":\" + flightIds);\r\n }\r\n }\r\n};\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { getRequestData } from \"./requestData\";\r\n\r\n/**\r\n * Checks if the DOM is available to access and use.\r\n * @returns {boolean} - true if DOM is available, or false if it is not. This is typically true for\r\n * client side rendering and false for server side rendering.\r\n */\r\nexport function canUseDOM(): boolean {\r\n return !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\r\n}\r\n\r\n/**\r\n * Get window.location.href in an isomorphic manner.\r\n */\r\nexport function getLocationHref(): string {\r\n return canUseDOM() ? window.location.href : getRequestData().url.href;\r\n}\r\n\r\n/**\r\n * Get window.location.hostname in an isomorphic manner.\r\n */\r\nexport function getLocationHostname(): string {\r\n return canUseDOM() ? window.location.hostname : getRequestData().url.hostname;\r\n}\r\n\r\n/**\r\n * Get window.location.host in an isomorphic manner.\r\n */\r\nexport function getLocationHost(): string {\r\n return canUseDOM() ? window.location.host : getRequestData().url.host;\r\n}\r\n\r\n/**\r\n * Get window.location.origin in an isomorphic manner.\r\n */\r\nexport function getLocationOrigin(): string {\r\n return canUseDOM() ? window.location.origin : getRequestData().url.origin;\r\n}\r\n\r\n/**\r\n * Get window.location.search in an isomorphic manner.\r\n */\r\nexport function getLocationSearch(): string {\r\n return canUseDOM() ? window.location.search : getRequestData().url.search;\r\n}\r\n\r\n/**\r\n * Get window.location.pathname in an isomorphic manner.\r\n */\r\nexport function getLocationPathname(): string {\r\n return canUseDOM() ? window.location.pathname : getRequestData().url.pathname;\r\n}\r\n\r\n/**\r\n * Get window.location.protocol in an isomorphic manner.\r\n */\r\nexport function getLocationProtocol(): string {\r\n return canUseDOM() ? window.location.protocol : getRequestData().url.protocol;\r\n}\r\n\r\n/**\r\n * Get window.location.hash in an isomorphic manner.\r\n */\r\nexport function getLocationHash(): string {\r\n return canUseDOM() ? window.location.hash : getRequestData().url.hash;\r\n}\r\n\r\n/**\r\n * Get window.document.getElementById(elementId).\r\n */\r\nexport function getDocumentElementById(elementId: string): HTMLElement {\r\n if (!canUseDOM()) {\r\n throw new Error(\"getDocumentElementById is unsupported server side. This call should be wrapped in canUseDOM().\");\r\n }\r\n\r\n return window.document.getElementById(elementId);\r\n}\r\n\r\n/**\r\n * Get window.document.getDocumentElementsByTagName(elementId).\r\n */\r\nexport function getDocumentElementsByTagName(tagName: string): HTMLCollectionOf {\r\n if (!canUseDOM()) {\r\n throw new Error(\"getDocumentElementsByTagName is unsupported server side. This call should be wrapped in canUseDOM().\");\r\n }\r\n\r\n return window.document.getElementsByTagName(tagName);\r\n}\r\n\r\n/**\r\n * Get localStorage in an isomorphic manner.\r\n * Todo (http://osgvsowi/23753462), provide actual functionality for localStorage on the server side.\r\n */\r\nexport function getLocalStorage(): Storage {\r\n return canUseDOM() ? window.localStorage : null;\r\n}\r\n\r\n/**\r\n * Get indexedDB in an isomorphic manner.\r\n * Todo (http://osgvsowi/23753462), provide actual functionality for indexedDB on the server side.\r\n */\r\nexport function getIndexedDB(): IDBFactory {\r\n return canUseDOM() ? window.indexedDB : null;\r\n}\r\n\r\n/**\r\n * Get window.innerWidth in an isomorphic manner.\r\n * Todo (http://osgvsowi/23876778), remove the need for server to know about innerWidth by limiting layout options or use CSS based solution.\r\n */\r\nexport function getInnerWidth(): number {\r\n return canUseDOM() ? window.innerWidth : getRequestData().innerWidth;\r\n}\r\n\r\n/**\r\n * Get window.innerWidth in an isomorphic manner.\r\n * Todo (http://osgvsowi/23876778), remove the need for server to know about innerWidth by limiting layout options or use CSS based solution.\r\n */\r\nexport function getInnerHeight(): number {\r\n return canUseDOM() ? window.innerHeight : getRequestData().innerHeight;\r\n}\r\n\r\n/**\r\n * Get window.devicePixelRatio in an isomorphic manner.\r\n */\r\nexport function getDevicePixelRatio(): number {\r\n return canUseDOM() ? window.devicePixelRatio : getRequestData().devicePixelRatio;\r\n}\r\n\r\n/**\r\n * Get CSS Grid support in an isomorphic manner\r\n */\r\nexport function getCssGridSupport(): boolean {\r\n return !!(canUseDOM() ? (window.CSS && window.CSS.supports && CSS.supports(\"display\", \"grid\")) : getRequestData().canUseCssGrid);\r\n}\r\n\r\n/**\r\n * Get variable font support in an isomorphic manner\r\n * TODO: SSR currently does not support custom fonts.\r\n */\r\nexport function getVariableFontSupport(): boolean {\r\n if (!canUseDOM()) {\r\n throw new Error(\"SSR currently does not support custom fonts.\");\r\n }\r\n\r\n return !!(window.CSS && window.CSS.supports && CSS.supports(\"(font-variation-settings: normal)\"));\r\n}\r\n\r\n/**\r\n * Returns a script element using several default values.\r\n * Not supported server side.\r\n * @param src The absolute URL for the script src. Default is undefined, blank is okay.\r\n * @param id The id to assign the script element. default is \"\" so no id.\r\n * @param loadAsync Should the script load asynchronously. Default is true.\r\n * @returns {HTMLScriptElement} the script element. not using const so it can be overridden by caller.\r\n */\r\nexport function createScriptTag(src: string = undefined, id = undefined, loadAsync = true): HTMLScriptElement {\r\n if (!canUseDOM()) {\r\n throw new Error(\"createScriptTag is unsupported server side. This call should be wrapped in canUseDOM().\");\r\n }\r\n\r\n const scriptElement: HTMLScriptElement = document.createElement(\"script\");\r\n if (id) {\r\n scriptElement.id = id;\r\n }\r\n scriptElement.type = \"text/javascript\";\r\n if (src) {\r\n scriptElement.src = src;\r\n scriptElement.async = loadAsync;\r\n }\r\n // @ts-ignore\r\n if (window && window.NONCE_ID) {\r\n // @ts-ignore\r\n scriptElement.nonce = window.NONCE_ID;\r\n }\r\n\r\n return scriptElement;\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * The aria-label html attribute\r\n * @type {string}\r\n */\r\nexport const ariaLabelAttribute = \"aria-label\";\r\n\r\n/**\r\n * The id attribute on the
element that is the root element for Peregrine Pages / Experiences.\r\n * There is only ever 1 root element on a page\r\n * @type {string}\r\n */\r\nexport const rootElementId = \"msnewsroot\";\r\n\r\n/**\r\n * Element names that are commonly used in Peregrine pages and experiences\r\n * @type {object}\r\n */\r\nexport const htmlElementIds: any = {\r\n html: \"html\",\r\n head: \"head\",\r\n body: \"body\"\r\n};\r\n\r\n/**\r\n * Constants used by application cache related scenarios\r\n */\r\nexport const applicationCacheConstants = {\r\n /**\r\n * Attribute name on html tag that is set when appcache is being used on the page\r\n */\r\n manifestAttributeName: \"manifest\",\r\n\r\n /**\r\n * Local storage key that holds the appcache info used to determine page refresh needs\r\n * for different page types.\r\n */\r\n pagesRefreshData: \"ac_prd\",\r\n\r\n /**\r\n * Local storage key that holds the appcache stored head data entries\r\n */\r\n storedHeadDataKey: \"ac_shd\",\r\n\r\n /**\r\n * Local storage key that holds the appcache stored activity IDs\r\n */\r\n storedLastUsedActivityIdKey: \"ac_sai\"\r\n\r\n};\r\n\r\n/**\r\n * The attributes that are part of markup elements that we care about\r\n */\r\nexport const clientSettings = \"data-client-settings\";\r\nexport const pagetypeSettings = \"data-pagetype\";\r\nexport const id = \"data-id\";\r\nexport const info = \"data-info\";\r\nexport const js = \"data-js\";\r\nexport const m = \"data-m\";\r\nexport const lang = \"lang\";\r\nexport const dir = \"dir\";\r\nexport const serviceUrl = \"data-service-url\";\r\nexport const telemetryId = \"data-telemetry-id\";\r\nexport const trackPageProduct = \"data-page-product\";\r\nexport const trackPageType = \"data-page-type\";\r\n\r\n/**\r\n * The number of characters that our Service Request Ids must have. This is currently defined by OneService\r\n * @type {number}\r\n */\r\nexport const numberOfCharactersNeededForUniqueRequestId = 32;\r\n\r\n/**\r\n * The minimum number of path segments that will be in the URL which hosts MS News Experience pages.\r\n * The first path segment should be the vertical key, e.g. spartan and the second path segment\r\n * should be the the category key, e.g. ntp\r\n * @type {number}\r\n */\r\nexport const minimumHostPagePathSegments = 2;\r\n\r\n/**\r\n * Default value we use for the name of the cookie that holds the ANID\r\n */\r\nexport const anonCookieName = \"APP_ANON\";\r\n\r\n/**\r\n * App Anon Cookie Exists Cookie Name. This cookie is a marker if APP_ANON exist or not.\r\n * This is necessary because APP_ANON is HTTP cookie and not accessible by JS.\r\n */\r\nexport const appAnonCookieExistsCookieName = \"aace\";\r\n\r\n/**\r\n * Child cookie name, used to signal if rpsUser is child account.\r\n */\r\nexport const childCookieName = \"child\";\r\n\r\n/**\r\n * Migration consent state cookie, indicates user has already granted or denied migration consent\r\n */\r\nexport const migrationConsentStateKey = \"migration-state\";\r\n\r\n/**\r\n * Id of MSCC cookie banner container element.\r\n */\r\nexport const msccCookieBannerElementId = \"consent-banner-container\";\r\n\r\n/**\r\n * Nurturing accepted state key is intended to be used in local storage, indicates user has opted in or out of Iris targeted content.\r\n */\r\nexport const nurturingAcceptedStateKey = \"nurturingAccepted\";\r\n\r\n/**\r\n * Headers used for one service requests\r\n */\r\nexport const oneServiceHeaders = {\r\n activityId: \"x-client-activityid\",\r\n authorization: \"Authorization\"\r\n};\r\n\r\n/**\r\n * used query string params in OneService requests\r\n */\r\nexport const oneServiceQueryStringKeys = {\r\n activityId: \"activityId\",\r\n apiKey: \"apikey\",\r\n complexInfoPaneEnabled: \"cipenabled\",\r\n contentType: \"contentType\",\r\n delta: \"delta\",\r\n disableTypeSerialization: \"DisableTypeSerialization\",\r\n infopaneCount: \"infopaneCount\",\r\n fdhead: \"fdhead\",\r\n feedLayoutRequestType: \"t\",\r\n filter: \"$filter\",\r\n ids: \"ids\",\r\n location: \"location\",\r\n market: \"market\",\r\n ocid: \"ocid\",\r\n parentContentId: \"parent-content-id\",\r\n parentNamespace: \"parent-ns\",\r\n parentTitle: \"parent-title\",\r\n queryQ: \"q\",\r\n query: \"query\",\r\n queryType: \"queryType\",\r\n qScope: \"qscope\",\r\n responseSchema: \"responseschema\",\r\n select: \"$select\",\r\n session: \"session\",\r\n signInCookieName: \"scn\",\r\n skip: \"$skip\",\r\n source: \"source\",\r\n timeOut: \"timeOut\",\r\n top: \"$top\",\r\n type: \"type\",\r\n user: \"user\",\r\n wrapOData: \"wrapodata\"\r\n};\r\n\r\n/**\r\n * Constants to use as role attribute value for elements\r\n */\r\nexport enum AriaRoles {\r\n /**\r\n * Presentation role is used to remove semantic meaning from an element and any of its related child elements.\r\n */\r\n Presentation = \"presentation\"\r\n}\r\n\r\n/**\r\n * Basic enum values for mobile device orientation\r\n */\r\nexport enum DeviceOrientation {\r\n Unknown = \"Unknown\",\r\n Portrait = \"Portrait\",\r\n Landscape = \"Landscape\"\r\n}\r\n\r\n/**\r\n * Enterprise compliant domain for One Service api\r\n */\r\nexport const EnterpriseOneServiceApi = \"https://ent-api.msn.com/\";\r\n\r\n/**\r\n * Common local storage keys\r\n */\r\nexport const CoreLocalStorageKeys = {\r\n /**\r\n * This key is used to store a dictionary of app versions per app type based on the current page version from the DOM.\r\n * Note that the version value will represent the current **loaded page** version and **not the new version** in scenarios\r\n * where the page is cached and require a new version to be loaded upon version detection (i.e., appcache, or service worker).\r\n * In these cached/refresh scenarios, we still want to store the version that the page was actually loaded from.\r\n */\r\n pageVersions: \"pageVersions\"\r\n};\r\n\r\n/**\r\n * The default APIKey for OneService requests\r\n */\r\nexport const defaultOneServiceApiKey = \"0QfOX3Vn51YCzitbLaRkTTBadtWpgTN8NZLW0C1SEM\";\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n// Defines constants used in telemetry beacons\r\n// \r\n// This is a auto-generated file using MSNTelemetryCodeGen (https://microsoft.visualstudio.com/DefaultCollection/Universal%20Store/_git/MSN.Tool.Telemetry?path=%2FMSNTelemetryDimensionsCodeGen/)\r\n// \r\n\r\n// \r\n// This is a auto-generated file using MSNTelemetryDimensionsCodeGen (https://microsoft.visualstudio.com/DefaultCollection/Universal%20Store/_git/MSN.Tool.Telemetry?path=%2FMSNTelemetryDimensionsCodeGen/)\r\n// \r\nconst PageNamePageTypeMappingList = {};\r\nconst TelemetryTypeContentTypeMappingList = {};\r\nconst TelemetryTypeBehaviorTypeMappingList = {};\r\n\r\n/// Telemetry Product \r\nconst TelemetryProduct = {\r\n Spartan: \"spartan\",\r\n Prime: \"prime\",\r\n PrimeMobile: \"prime_mobile\",\r\n IEext: \"ieext\",\r\n SpartanMobile: \"spartan_mobile\",\r\n TabbedShell: \"tabbedshell\",\r\n ChromeExt: \"chromeext\",\r\n Downlevel: \"downlevel\",\r\n Xbox: \"xbox\"\r\n};\r\n\r\n/// Telemetry PageType \r\nconst TelemetryPageType = {\r\n Unspecified: \"unspecified\",\r\n DHP: \"dhp\",\r\n NTP: \"ntp\",\r\n HomePage: \"hp\",\r\n VerticalHomePage: \"verthp\",\r\n StructuredDataPage: \"data\",\r\n SectionFront: \"secfront\",\r\n SiteSearch: \"sitesearch\",\r\n Article: \"article\",\r\n Gallery: \"gallery\",\r\n Video: \"video\",\r\n SubjectSection: \"subjectsec\",\r\n CustomColumn: \"custcol\"\r\n};\r\n\r\n// TODO: (nubenja) Remove this once all partners moves from TelemetryType to ContentType and ContentAction\r\n/// Telemetry Type \r\nconst TelemetryType = {\r\n Undefined: 0,\r\n Header: 1,\r\n Footer: 2,\r\n TopNavBar: 3,\r\n NavBar: 4,\r\n DropDown: 5,\r\n Section: 6,\r\n Carousel: 7,\r\n Module: 8,\r\n SearchBox: 9,\r\n InputBox: 10,\r\n ActionButton: 11,\r\n Interaction: 12,\r\n Headline: 13,\r\n Navigation: 14,\r\n Entity: 15,\r\n StructuredData: 16,\r\n AppStore: 17,\r\n AppLaunch: 18,\r\n CmsPromotions: 19,\r\n MicrosoftWebStore: 20,\r\n XboxStore: 21,\r\n OfficeStore: 22,\r\n AppInstall: 23,\r\n PartnerLinks: 24,\r\n SponsoredContent: 25,\r\n Follow: 26,\r\n Unfollow: 27,\r\n MoreFrom: 28,\r\n Topic: 29,\r\n Provider: 30,\r\n Spotlight: 33,\r\n ShareClose: 36,\r\n Share: 37,\r\n Like: 38,\r\n Dislike: 39,\r\n Unlike: 40,\r\n Undislike: 41,\r\n Mute: 42,\r\n Unmute: 43,\r\n MuteCancel: 44,\r\n Manage: 45,\r\n NewStories: 46,\r\n AutoSuggest: 47,\r\n BingCard: 48,\r\n Tile: 49,\r\n TrendingNews: 50,\r\n AllCoverage: 51,\r\n Report: 52,\r\n AdChoice: 53,\r\n Hide: 55,\r\n Unhide: 56\r\n};\r\n\r\n/// Telemetry Content Type \r\nconst TelemetryContentType = {\r\n Undefined: 0,\r\n App: 1,\r\n Article: 2,\r\n Feed: 3,\r\n Gallery: 4,\r\n AppStorePromo: 5,\r\n Settings: 6,\r\n SponsoredContent: 7,\r\n StructuredDataCard: 8,\r\n Video: 9,\r\n Webview: 10,\r\n Activity: 11,\r\n Win32: 12,\r\n OfficeDocument: 13,\r\n LocalFile: 14,\r\n CardAction: 15\r\n};\r\n\r\n/// Telemetry Behavior Type \r\nconst TelemetryBehaviorType = {\r\n Undefined: 0,\r\n Navigate: 1,\r\n ContextMenu: 2,\r\n Pin: 3,\r\n Unpin: 4,\r\n Rearrange: 5,\r\n Remove: 6,\r\n Add: 7,\r\n Open: 8,\r\n View: 9,\r\n Follow: 10,\r\n Unfollow: 11,\r\n More: 12,\r\n Close: 13,\r\n Share: 14,\r\n Like: 15,\r\n Dislike: 16,\r\n Unlike: 17,\r\n Undislike: 18,\r\n Mute: 19,\r\n Unmute: 20,\r\n Cancel: 21,\r\n Launch: 22,\r\n Install: 23,\r\n Manage: 24,\r\n Show: 25,\r\n MuteCancel: 26,\r\n Save: 27,\r\n Hide: 28,\r\n Unhide: 29,\r\n Customize: 30\r\n};\r\n\r\n/// Telemetry ContentPlacedBySource \r\nconst ContentPlacedBySource = {\r\n Editor: 0,\r\n PersonalizationAlgo: 1,\r\n Bing: 2,\r\n Taboola: 3,\r\n Outbrain: 4,\r\n AutoCuration: 5,\r\n User: 6,\r\n AppNexus: 7,\r\n OtherSponconProvider: 8\r\n};\r\n\r\n/// Telemetry Page Configuration \r\nconst TelemetryPageConfiguration = {\r\n NoContent: 0,\r\n OneBox: 1,\r\n TopSites: 2,\r\n Suggested: 4,\r\n ContentFeed: 8,\r\n WinFre: 16,\r\n StripeLayout: 1024\r\n};\r\n\r\n/// Telemetry Partner Namespace \r\nconst TelemetryPartnerNamespace = {\r\n MMX: \"m\",\r\n Shell: \"s\",\r\n Edge: \"e\",\r\n Office: \"o\",\r\n Activity: \"a\",\r\n Cortana: \"c\"\r\n};\r\n\r\n/// Telemetry PageName \r\nconst TelemetryPageName = {\r\n StartPage: telemetryPageName(\"startpage\", TelemetryPageType.HomePage),\r\n // @ts-ignore\r\n DefaultPage: telemetryPageName(\"default\"),\r\n // @ts-ignore\r\n EduPage: telemetryPageName(\"edu\"),\r\n // @ts-ignore\r\n ChildModePage: telemetryPageName(\"child\"),\r\n // @ts-ignore\r\n Office: telemetryPageName(\"office\"),\r\n // @ts-ignore\r\n Feed: telemetryPageName(\"xfeed\"),\r\n // @ts-ignore\r\n Discover: telemetryPageName(\"discover\"),\r\n // @ts-ignore\r\n MyInterests: telemetryPageName(\"myinterests\"),\r\n // @ts-ignore\r\n CombinedInterests: telemetryPageName(\"cinterests\"),\r\n ArticlePageNames:\r\n {\r\n Article: telemetryPageName(\"article\", TelemetryPageType.Article),\r\n ArticleVNext: telemetryPageName(\"articlevnext\", TelemetryPageType.Article),\r\n ArticleListicle: telemetryPageName(\"article_listicle\", TelemetryPageType.Article),\r\n ArticleCollection: telemetryPageName(\"articlecollection\", TelemetryPageType.Article),\r\n ArticleFullScreen: telemetryPageName(\"articlefullscreen\", TelemetryPageType.Article),\r\n FlexibleArticle: telemetryPageName(\"articleflex\", TelemetryPageType.Article),\r\n FlexibleArticleMobile: telemetryPageName(\"articleflexmobile\", TelemetryPageType.Article),\r\n ArticleGalleryFullScreen: telemetryPageName(\"article_galleryfs\", TelemetryPageType.Article)\r\n },\r\n GalleryPageNames:\r\n {\r\n Gallery: telemetryPageName(\"gallery\", TelemetryPageType.Gallery),\r\n GalleryVNext: telemetryPageName(\"galleryvnext\", TelemetryPageType.Gallery),\r\n GalleryFullScreen: telemetryPageName(\"gallery_fullscreen\", TelemetryPageType.Gallery),\r\n GalleryClassic: telemetryPageName(\"gallery_classic\", TelemetryPageType.Gallery),\r\n GalleryClassicFullScreen: telemetryPageName(\"gallery_classicfs\", TelemetryPageType.Gallery),\r\n GallerySearch: telemetryPageName(\"gallery_search\", TelemetryPageType.Gallery),\r\n GallerySearchFullScreen: telemetryPageName(\"gallery_searchfs\", TelemetryPageType.Gallery),\r\n FlexibleGallery: telemetryPageName(\"galleryflex\", TelemetryPageType.Gallery),\r\n FlexibleGalleryMobile: telemetryPageName(\"galleryflexmobile\", TelemetryPageType.Gallery),\r\n GalleryImmersive: telemetryPageName(\"gallery_immersive\", TelemetryPageType.Gallery),\r\n GalleryImmersiveFullScreen: telemetryPageName(\"gallery_immersivefs\", TelemetryPageType.Gallery),\r\n GallerySponsored: telemetryPageName(\"gallery_sponsor\", TelemetryPageType.Gallery),\r\n GallerySponsoredFullScreen: telemetryPageName(\"gallery_sponsorfs\", TelemetryPageType.Gallery),\r\n GalleryInline: telemetryPageName(\"gallery_inline\", TelemetryPageType.Gallery)\r\n },\r\n VideoPageNames:\r\n {\r\n ChannelPlayerPage: telemetryPageName(\"channelplayerpage\", TelemetryPageType.Video),\r\n PartnerPlayerPage: telemetryPageName(\"partnerplayerpage\", TelemetryPageType.Video)\r\n },\r\n VerticalHomePageNames:\r\n {\r\n HomePage: telemetryPageName(\"homepage\", TelemetryPageType.VerticalHomePage),\r\n HomePageToday: telemetryPageName(\"homepage-today\", TelemetryPageType.VerticalHomePage)\r\n },\r\n StructuredDataPageNames:\r\n {\r\n Gamecenter: telemetryPageName(\"gamecenter\", TelemetryPageType.StructuredDataPage),\r\n Schedule: telemetryPageName(\"schedule\", TelemetryPageType.StructuredDataPage),\r\n Scores: telemetryPageName(\"scores\", TelemetryPageType.StructuredDataPage),\r\n Stocksummary: telemetryPageName(\"stocksummary\", TelemetryPageType.StructuredDataPage),\r\n Stocksummaryoneriver: telemetryPageName(\"stocksummaryoneriver\", TelemetryPageType.StructuredDataPage),\r\n Weatherxplatmaps: telemetryPageName(\"weatherxplatmaps\", TelemetryPageType.StructuredDataPage),\r\n Standings: telemetryPageName(\"standings\", TelemetryPageType.StructuredDataPage),\r\n Markets: telemetryPageName(\"markets\", TelemetryPageType.StructuredDataPage),\r\n Watchlistpage: telemetryPageName(\"watchlistpage\", TelemetryPageType.StructuredDataPage),\r\n Data_modelpage: telemetryPageName(\"data_modelpage\", TelemetryPageType.StructuredDataPage),\r\n Immersivechartspage: telemetryPageName(\"immersivechartspage\", TelemetryPageType.StructuredDataPage),\r\n Currencies: telemetryPageName(\"currencies\", TelemetryPageType.StructuredDataPage),\r\n Indexdetailspage: telemetryPageName(\"indexdetailspage\", TelemetryPageType.StructuredDataPage),\r\n Data_makepage: telemetryPageName(\"data_makepage\", TelemetryPageType.StructuredDataPage),\r\n Weatherfullscreenmaps: telemetryPageName(\"weatherfullscreenmaps\", TelemetryPageType.StructuredDataPage),\r\n Weatherthresholdmaps: telemetryPageName(\"weatherthresholdmaps\", TelemetryPageType.StructuredDataPage),\r\n Stockanalysisdetails: telemetryPageName(\"stockanalysisdetails\", TelemetryPageType.StructuredDataPage),\r\n Data_yearoverview: telemetryPageName(\"data_yearoverview\", TelemetryPageType.StructuredDataPage),\r\n Data_segmenthub: telemetryPageName(\"data_segmenthub\", TelemetryPageType.StructuredDataPage),\r\n Weathermaps: telemetryPageName(\"weathermaps\", TelemetryPageType.StructuredDataPage),\r\n Playerstats: telemetryPageName(\"playerstats\", TelemetryPageType.StructuredDataPage),\r\n Funddetailspage: telemetryPageName(\"funddetailspage\", TelemetryPageType.StructuredDataPage),\r\n Exercisedetails: telemetryPageName(\"exercisedetails\", TelemetryPageType.StructuredDataPage),\r\n Teams: telemetryPageName(\"teams\", TelemetryPageType.StructuredDataPage),\r\n Etfdetailspage: telemetryPageName(\"etfdetailspage\", TelemetryPageType.StructuredDataPage),\r\n Binganswermaps: telemetryPageName(\"binganswermaps\", TelemetryPageType.StructuredDataPage),\r\n Workoutdetails: telemetryPageName(\"workoutdetails\", TelemetryPageType.StructuredDataPage),\r\n Competitionstats: telemetryPageName(\"competitionstats\", TelemetryPageType.StructuredDataPage),\r\n Polls: telemetryPageName(\"polls\", TelemetryPageType.StructuredDataPage),\r\n Data_photos: telemetryPageName(\"data_photos\", TelemetryPageType.StructuredDataPage),\r\n Videocategorylistpage: telemetryPageName(\"videocategorylistpage\", TelemetryPageType.StructuredDataPage),\r\n Stockfinancialsdetails: telemetryPageName(\"stockfinancialsdetails\", TelemetryPageType.StructuredDataPage),\r\n Commoditydetailspage: telemetryPageName(\"commoditydetailspage\", TelemetryPageType.StructuredDataPage),\r\n Data_yearoverview_trim: telemetryPageName(\"data_yearoverview_trim\", TelemetryPageType.StructuredDataPage),\r\n Worldwidepage: telemetryPageName(\"worldwidepage\", TelemetryPageType.StructuredDataPage),\r\n Data_photos_trim: telemetryPageName(\"data_photos_trim\", TelemetryPageType.StructuredDataPage),\r\n Stockcompanydetails: telemetryPageName(\"stockcompanydetails\", TelemetryPageType.StructuredDataPage),\r\n Retirementplanner: telemetryPageName(\"retirementplanner\", TelemetryPageType.StructuredDataPage),\r\n Livecoverage: telemetryPageName(\"livecoverage\", TelemetryPageType.StructuredDataPage),\r\n Teamroster: telemetryPageName(\"teamroster\", TelemetryPageType.StructuredDataPage),\r\n Stockhistorydetails: telemetryPageName(\"stockhistorydetails\", TelemetryPageType.StructuredDataPage),\r\n Filterresultspage: telemetryPageName(\"filterresultspage\", TelemetryPageType.StructuredDataPage),\r\n Data_carcompare: telemetryPageName(\"data_carcompare\", TelemetryPageType.StructuredDataPage),\r\n Stockownershipdetails: telemetryPageName(\"stockownershipdetails\", TelemetryPageType.StructuredDataPage),\r\n Driverstandings: telemetryPageName(\"driverstandings\", TelemetryPageType.StructuredDataPage),\r\n Timevalueofmoney: telemetryPageName(\"timevalueofmoney\", TelemetryPageType.StructuredDataPage),\r\n Savingscalculator: telemetryPageName(\"savingscalculator\", TelemetryPageType.StructuredDataPage),\r\n Iccmatches: telemetryPageName(\"iccmatches\", TelemetryPageType.StructuredDataPage),\r\n Other_flightsearchresult: telemetryPageName(\"other_flightsearchresult\", TelemetryPageType.StructuredDataPage),\r\n Stockrelateddetails: telemetryPageName(\"stockrelateddetails\", TelemetryPageType.StructuredDataPage),\r\n Data_specs_trim: telemetryPageName(\"data_specs_trim\", TelemetryPageType.StructuredDataPage),\r\n Stockoptionsdetails: telemetryPageName(\"stockoptionsdetails\", TelemetryPageType.StructuredDataPage),\r\n HomepageAlerts: telemetryPageName(\"homepage-alerts\", TelemetryPageType.StructuredDataPage),\r\n HomepageRecordsandAverages: telemetryPageName(\"homepage-recordsandaverages\", TelemetryPageType.StructuredDataPage),\r\n HomepageWeatherTraffic: telemetryPageName(\"homepage-weathertraffic\", TelemetryPageType.StructuredDataPage),\r\n Data_specs: telemetryPageName(\"data_specs\", TelemetryPageType.StructuredDataPage),\r\n Data_pricing: telemetryPageName(\"data_pricing\", TelemetryPageType.StructuredDataPage),\r\n Mortgagecalculator: telemetryPageName(\"mortgagecalculator\", TelemetryPageType.StructuredDataPage),\r\n Data_performance_trim: telemetryPageName(\"data_performance_trim\", TelemetryPageType.StructuredDataPage),\r\n Theatershowtimes: telemetryPageName(\"theatershowtimes\", TelemetryPageType.StructuredDataPage),\r\n Data_pricing_trim: telemetryPageName(\"data_pricing_trim\", TelemetryPageType.StructuredDataPage),\r\n Data_photosInterior: telemetryPageName(\"data_photos-interior\", TelemetryPageType.StructuredDataPage),\r\n Indexdetailsanalysispage: telemetryPageName(\"indexdetailsanalysispage\", TelemetryPageType.StructuredDataPage),\r\n Data_photosInterior_trim: telemetryPageName(\"data_photos-interior_trim\", TelemetryPageType.StructuredDataPage),\r\n Data_photosColors: telemetryPageName(\"data_photos-colors\", TelemetryPageType.StructuredDataPage),\r\n Data_carReviews_trim: telemetryPageName(\"data_car-reviews_trim\", TelemetryPageType.StructuredDataPage),\r\n Data_carReviews: telemetryPageName(\"data_car-reviews\", TelemetryPageType.StructuredDataPage),\r\n Racecalendar: telemetryPageName(\"racecalendar\", TelemetryPageType.StructuredDataPage),\r\n Teamstandings: telemetryPageName(\"teamstandings\", TelemetryPageType.StructuredDataPage),\r\n Data_photosColors_trim: telemetryPageName(\"data_photos-colors_trim\", TelemetryPageType.StructuredDataPage),\r\n Stockdetails: telemetryPageName(\"stockdetails\", TelemetryPageType.StructuredDataPage),\r\n Data_interiorFeatures_trim: telemetryPageName(\"data_interior-features_trim\", TelemetryPageType.StructuredDataPage),\r\n Data_exteriorFeatures_trim: telemetryPageName(\"data_exterior-features_trim\", TelemetryPageType.StructuredDataPage),\r\n Calendar: telemetryPageName(\"calendar\", TelemetryPageType.StructuredDataPage),\r\n TeamStats: telemetryPageName(\"teamstats\", TelemetryPageType.StructuredDataPage),\r\n Movieshowtimes: telemetryPageName(\"movieshowtimes\", TelemetryPageType.StructuredDataPage),\r\n Drafts: telemetryPageName(\"drafts\", TelemetryPageType.StructuredDataPage),\r\n Data_technologyFeatures_trim: telemetryPageName(\"data_technology-features_trim\", TelemetryPageType.StructuredDataPage),\r\n Data_workoutdetails_collection: telemetryPageName(\"data_workoutdetails_collection\", TelemetryPageType.StructuredDataPage),\r\n Data_photosExterior: telemetryPageName(\"data_photos-exterior\", TelemetryPageType.StructuredDataPage),\r\n Data_photosExterior_trim: telemetryPageName(\"data_photos-exterior_trim\", TelemetryPageType.StructuredDataPage),\r\n Data_photos360Interior: telemetryPageName(\"data_photos-360-interior\", TelemetryPageType.StructuredDataPage),\r\n Immersivechartsmarketspage: telemetryPageName(\"immersivechartsmarketspage\", TelemetryPageType.StructuredDataPage),\r\n Returnoninvestment: telemetryPageName(\"returnoninvestment\", TelemetryPageType.StructuredDataPage),\r\n Indexdetailsrelatedpage: telemetryPageName(\"indexdetailsrelatedpage\", TelemetryPageType.StructuredDataPage),\r\n Gonepage: telemetryPageName(\"gonepage\", TelemetryPageType.StructuredDataPage),\r\n Data_compare: telemetryPageName(\"data_compare\", TelemetryPageType.StructuredDataPage),\r\n Data_compare_trim: telemetryPageName(\"data_compare_trim\", TelemetryPageType.StructuredDataPage),\r\n Data_options_trim: telemetryPageName(\"data_options_trim\", TelemetryPageType.StructuredDataPage),\r\n Entitiespage: telemetryPageName(\"entitiespage\", TelemetryPageType.StructuredDataPage),\r\n Workoutdetailsprint: telemetryPageName(\"workoutdetailsprint\", TelemetryPageType.StructuredDataPage),\r\n Data_photos360Exterior: telemetryPageName(\"data_photos-360-exterior\", TelemetryPageType.StructuredDataPage),\r\n HomepageDatacarfinder: telemetryPageName(\"homepage-datacarfinder\", TelemetryPageType.StructuredDataPage),\r\n Data_photos360Interior_trim: telemetryPageName(\"data_photos-360-interior_trim\", TelemetryPageType.StructuredDataPage),\r\n Data_skeleton: telemetryPageName(\"data_skeleton\", TelemetryPageType.StructuredDataPage),\r\n Mortgagerates: telemetryPageName(\"mortgagerates\", TelemetryPageType.StructuredDataPage),\r\n Brackets: telemetryPageName(\"brackets\", TelemetryPageType.StructuredDataPage),\r\n Data_photos360Exterior_trim: telemetryPageName(\"data_photos-360-exterior_trim\", TelemetryPageType.StructuredDataPage),\r\n Data_photocompare: telemetryPageName(\"data_photocompare\", TelemetryPageType.StructuredDataPage),\r\n HomepageWeather10day: telemetryPageName(\"homepage-weather10day\", TelemetryPageType.StructuredDataPage),\r\n Data_performance: telemetryPageName(\"data_performance\", TelemetryPageType.StructuredDataPage),\r\n HomepageWeatherextendedforecast: telemetryPageName(\"homepage-weatherextendedforecast\", TelemetryPageType.StructuredDataPage),\r\n Savings: telemetryPageName(\"savings\", TelemetryPageType.StructuredDataPage),\r\n Data_exteriorFeatures: telemetryPageName(\"data_exterior-features\", TelemetryPageType.StructuredDataPage),\r\n Data_interiorFeatures: telemetryPageName(\"data_interior-features\", TelemetryPageType.StructuredDataPage),\r\n Data_options: telemetryPageName(\"data_options\", TelemetryPageType.StructuredDataPage),\r\n Travelgonepage: telemetryPageName(\"travelgonepage\", TelemetryPageType.StructuredDataPage),\r\n Recipe: telemetryPageName(\"recipe\", TelemetryPageType.StructuredDataPage),\r\n Getportfoliodatapage: telemetryPageName(\"getportfoliodatapage\", TelemetryPageType.StructuredDataPage),\r\n Brokercenterpage: telemetryPageName(\"brokercenterpage\", TelemetryPageType.StructuredDataPage),\r\n Data_technologyFeatures: telemetryPageName(\"data_technology-features\", TelemetryPageType.StructuredDataPage),\r\n Tvlistings: telemetryPageName(\"tvlistings\", TelemetryPageType.StructuredDataPage),\r\n Ownerstandings: telemetryPageName(\"ownerstandings\", TelemetryPageType.StructuredDataPage),\r\n Entitydetailspage: telemetryPageName(\"entitydetailspage\", TelemetryPageType.StructuredDataPage),\r\n Creditcards: telemetryPageName(\"creditcards\", TelemetryPageType.StructuredDataPage),\r\n Cmssitemap: telemetryPageName(\"cmssitemap\", TelemetryPageType.StructuredDataPage),\r\n Externalnativeadpage: telemetryPageName(\"externalnativeadpage\", TelemetryPageType.StructuredDataPage),\r\n Autoloans: telemetryPageName(\"autoloans\", TelemetryPageType.StructuredDataPage),\r\n Externalcontent: telemetryPageName(\"externalcontent\", TelemetryPageType.StructuredDataPage),\r\n Htmlsitemap: telemetryPageName(\"htmlsitemap\", TelemetryPageType.StructuredDataPage)\r\n },\r\n CustomColumnPageNames:\r\n {\r\n TrendingTopics: telemetryPageName(\"topic_tt\", TelemetryPageType.CustomColumn),\r\n GlobalSettingsPage: telemetryPageName(\"globalsettingspage\", TelemetryPageType.CustomColumn),\r\n MyTopics: telemetryPageName(\"mytopics\", TelemetryPageType.CustomColumn),\r\n WeatherPlaces: telemetryPageName(\"weatherplaces\", TelemetryPageType.CustomColumn),\r\n MyFavorites: telemetryPageName(\"myfavorites\", TelemetryPageType.CustomColumn),\r\n TopicResult: telemetryPageName(\"topicresult\", TelemetryPageType.CustomColumn),\r\n Collections: telemetryPageName(\"collections\", TelemetryPageType.CustomColumn),\r\n Rouxbe: telemetryPageName(\"rouxbe\", TelemetryPageType.CustomColumn),\r\n ShoppingList: telemetryPageName(\"shopping list\", TelemetryPageType.CustomColumn),\r\n MyHealthReportsPage: telemetryPageName(\"myhealthreportspage\", TelemetryPageType.CustomColumn),\r\n Error404page: telemetryPageName(\"error404page\", TelemetryPageType.CustomColumn),\r\n AppsPromotion: telemetryPageName(\"appspromotion\", TelemetryPageType.CustomColumn),\r\n Error500page: telemetryPageName(\"error500page\", TelemetryPageType.CustomColumn),\r\n DietTrackerPreSigninPage: telemetryPageName(\"diettrackerpresigninpage\", TelemetryPageType.CustomColumn),\r\n ExerciseTrackerPreSigninPage: telemetryPageName(\"exercisetrackerpresigninpage\", TelemetryPageType.CustomColumn),\r\n WebSlicePage: telemetryPageName(\"other_webslice\", TelemetryPageType.CustomColumn),\r\n Error200Page: telemetryPageName(\"error200page\", TelemetryPageType.CustomColumn),\r\n AboutUsPage: telemetryPageName(\"aboutus\", TelemetryPageType.CustomColumn),\r\n UnSupport: telemetryPageName(\"unsupport\", TelemetryPageType.CustomColumn),\r\n Disclaimer: telemetryPageName(\"disclaimer\", TelemetryPageType.CustomColumn),\r\n TermsOfService: telemetryPageName(\"termsofservice\", TelemetryPageType.CustomColumn),\r\n SevereWeather: telemetryPageName(\"severeweather\", TelemetryPageType.CustomColumn)\r\n },\r\n SubjectSectionPageNames:\r\n {\r\n TeamhomePage: telemetryPageName(\"teamhome\", TelemetryPageType.SubjectSection),\r\n PlayerPage: telemetryPageName(\"player\", TelemetryPageType.SubjectSection),\r\n MarketMoversPage: telemetryPageName(\"marketmovers\", TelemetryPageType.SubjectSection),\r\n CommoditiesPage: telemetryPageName(\"commoditiespage\", TelemetryPageType.SubjectSection),\r\n ChefPage: telemetryPageName(\"chef\", TelemetryPageType.SubjectSection),\r\n NutritionIndexPage: telemetryPageName(\"nutritionindex\", TelemetryPageType.SubjectSection),\r\n FinanceTechnologyPage: telemetryPageName(\"finance-technologypage\", TelemetryPageType.SubjectSection),\r\n MedicalindexPage: telemetryPageName(\"medicalindex\", TelemetryPageType.SubjectSection)\r\n },\r\n SiteSearchPageNames:\r\n {\r\n SearchResultsPage: telemetryPageName(\"searchresultspage\", TelemetryPageType.SiteSearch),\r\n VideoSearchResultsPage: telemetryPageName(\"videosearchresultspage\", TelemetryPageType.SiteSearch),\r\n PartnerVideolistPage: telemetryPageName(\"partnervideolistpage\", TelemetryPageType.SiteSearch),\r\n HomepageBingserpIframepage: telemetryPageName(\"homepage-bingserpiframepage\", TelemetryPageType.SiteSearch),\r\n SitesearchSitesearch: telemetryPageName(\"sitesearch_sitesearch\", TelemetryPageType.SiteSearch),\r\n SearchResults: telemetryPageName(\"search results\", TelemetryPageType.SiteSearch),\r\n SerpPage: telemetryPageName(\"serppage\", TelemetryPageType.SiteSearch),\r\n FindaMoviePage: telemetryPageName(\"findamoviepage\", TelemetryPageType.SiteSearch)\r\n },\r\n SectionFrontPageNames:\r\n {\r\n Competitionhub: telemetryPageName(\"competitionhub\", TelemetryPageType.SectionFront),\r\n Local: telemetryPageName(\"local\", TelemetryPageType.SectionFront),\r\n Stockscreener: telemetryPageName(\"stockscreener\", TelemetryPageType.SectionFront),\r\n Toolslandingpage: telemetryPageName(\"toolslandingpage\", TelemetryPageType.SectionFront),\r\n Showtimes: telemetryPageName(\"showtimes\", TelemetryPageType.SectionFront),\r\n FinanceRealEstatepage: telemetryPageName(\"finance-real-estatepage\", TelemetryPageType.SectionFront),\r\n CookingSchool: telemetryPageName(\"cooking school\", TelemetryPageType.SectionFront),\r\n Allcompetitions: telemetryPageName(\"allcompetitions\", TelemetryPageType.SectionFront),\r\n Newspage: telemetryPageName(\"newspage\", TelemetryPageType.SectionFront),\r\n CocktailHub: telemetryPageName(\"cocktail hub\", TelemetryPageType.SectionFront),\r\n Travelflightsearchhubpage: telemetryPageName(\"travelflightsearchhubpage\", TelemetryPageType.SectionFront),\r\n Hotelshubpage: telemetryPageName(\"hotelshubpage\", TelemetryPageType.SectionFront),\r\n WineHub: telemetryPageName(\"wine hub\", TelemetryPageType.SectionFront),\r\n ChefHub: telemetryPageName(\"chef hub\", TelemetryPageType.SectionFront),\r\n Travelflightstatushubpage: telemetryPageName(\"travelflightstatushubpage\", TelemetryPageType.SectionFront),\r\n HomepageCompetitionhub: telemetryPageName(\"homepage-competitionhub\", TelemetryPageType.SectionFront),\r\n Editorial: telemetryPageName(\"editorial\", TelemetryPageType.SectionFront),\r\n SecfrontHotel: telemetryPageName(\"secfront_hotel\", TelemetryPageType.SectionFront),\r\n SecfrontTNews: telemetryPageName(\"secfront_tnews\", TelemetryPageType.SectionFront)\r\n }\r\n};\r\n\r\n/// Telemetry PageMode \r\nconst TelemetryPageMode = {\r\n Default: 0,\r\n Trial: 1,\r\n Subscription: 2\r\n};\r\n\r\n/// Telemetry Page Pivot \r\nconst TelemetryPagePivot = {\r\n Undefined: \"undefined\",\r\n Office: \"office\",\r\n Apps: \"apps\",\r\n News: \"news\",\r\n Timeline: \"timeline\",\r\n StartMenu: \"startmenu\"\r\n};\r\n\r\n/// Telemetry User Id Type \r\nconst TelemetryUserType = {\r\n Aad: \"aad\",\r\n Msa: \"msa\",\r\n MsaKids: \"msa-kids\",\r\n Local: \"local\"\r\n};\r\n\r\nconst TelemetryActionType = {\r\n Click: \"click\",\r\n Hover: \"mouseenter\",\r\n Submit: \"submit\",\r\n View: \"view\",\r\n RightClick: \"rightclick\"\r\n};\r\n\r\nexport const telemetryDataTypes = {\r\n TelemetryProduct: TelemetryProduct,\r\n TelemetryPageType: TelemetryPageType,\r\n TelemetryType: TelemetryType,\r\n TelemetryContentType: TelemetryContentType,\r\n TelemetryBehaviorType: TelemetryBehaviorType,\r\n ContentPlacedBySource: ContentPlacedBySource,\r\n TelemetryPageConfiguration: TelemetryPageConfiguration,\r\n TelemetryPageName: TelemetryPageName,\r\n TelemetryPageMode: TelemetryPageMode,\r\n TelemetryPagePivot: TelemetryPagePivot,\r\n TelemetryPartnerNamespace: TelemetryPartnerNamespace,\r\n TelemetryUserType: TelemetryUserType,\r\n getTelemetryContentType: getTelemetryContentType,\r\n getTelemetryPageInfo: getTelemetryPageInfo,\r\n validateTelemetryDataType: validateTelemetryDataType,\r\n getTelemetryBehavior: getTelemetryBehavior,\r\n TelemetryActionType: TelemetryActionType\r\n};\r\n\r\n/// \r\n/// This function gets the telemetry page info object from the given pageName string.\r\n/// \r\n/// PageName string\r\n/// The Telemetry Page Name object\r\nfunction getTelemetryPageInfo(pageName) {\r\n if (pageName && PageNamePageTypeMappingList) {\r\n pageName = pageName.toLowerCase();\r\n if (PageNamePageTypeMappingList[pageName] !== undefined) {\r\n return PageNamePageTypeMappingList[pageName];\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/// \r\n/// This function validates and returns the telemetry data type from the given string of the data type.\r\n/// \r\n/// DataType enum e.g. telemetryDataType.TelemetryPageType\r\n/// value of the type to validate\r\n/// The Telemetry Page type\r\nfunction validateTelemetryDataType(type, value) {\r\n if (type && value) {\r\n for (const prop of Object.keys(type)) {\r\n if ((typeof value == \"string\" && type[prop] === value.toLowerCase()) || type[prop] === value) {\r\n return type[prop];\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/// \r\n/// Private class to define the telemetry Page Name. This class is purposefully not exposed to public.\r\n/// Public should use getTelemetryPageName to get the telemetrypagename object from the given pagename string.\r\n/// All the telemetry page names should be defined as part of this javascript file.\r\n/// \r\n/// PageName string\r\n/// PageType should be of type TelemetryPageType\r\n/// The Telemetry Page Name object\r\nfunction telemetryPageName(pageName, pageType) {\r\n if (pageName) {\r\n const name = pageName.toLowerCase();\r\n const pType = pageType || TelemetryPageType.Unspecified;\r\n const telemetryPageNameObject = { PageName: name, PageType: pType };\r\n PageNamePageTypeMappingList[name] = telemetryPageNameObject;\r\n\r\n return telemetryPageNameObject;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/// \r\n/// This function gets the telemetry contentType from the given telemetryType.\r\n/// \r\n/// TelemetryType enum value\r\n/// ContentType enum.\r\nfunction getTelemetryContentType(telemetryType) {\r\n if (TelemetryTypeContentTypeMappingList[telemetryType]) {\r\n return TelemetryTypeContentTypeMappingList[telemetryType];\r\n }\r\n}\r\n\r\n/// \r\n/// This function gets the telemetry contentAction from the given telemetryType.\r\n/// \r\n/// TelemetryType enum value\r\n/// ContentAction enum.\r\nfunction getTelemetryBehavior(telemetryType) {\r\n if (TelemetryTypeBehaviorTypeMappingList[telemetryType]) {\r\n return TelemetryTypeBehaviorTypeMappingList[telemetryType];\r\n } else {\r\n return TelemetryBehaviorType.Undefined;\r\n }\r\n}\r\n\r\n/// \r\n/// Private function for initializing mapping between telemetryType and telemetryContentType.\r\n/// This will be removed after telemetryType deprecated.\r\n/// \r\nfunction initTelemetryTypeContentTypeMappingList() {\r\n TelemetryTypeContentTypeMappingList[TelemetryType.AppInstall] = TelemetryContentType.App;\r\n TelemetryTypeContentTypeMappingList[TelemetryType.AppLaunch] = TelemetryContentType.App;\r\n TelemetryTypeContentTypeMappingList[TelemetryType.SponsoredContent] = TelemetryContentType.SponsoredContent;\r\n TelemetryTypeContentTypeMappingList[TelemetryType.StructuredData] = TelemetryContentType.StructuredDataCard;\r\n TelemetryTypeContentTypeMappingList[TelemetryType.AppStore] = TelemetryContentType.AppStorePromo;\r\n}\r\n\r\n/// \r\n/// Private function for initializing mapping between telemetryType and TelemetryBehaviorType.\r\n/// This will be removed after telemetryType deprecated.\r\n/// \r\nfunction initTelemetryTypeBehaviorTypeMappingList() {\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.AppInstall] = TelemetryBehaviorType.Install;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.AppLaunch] = TelemetryBehaviorType.Launch;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.Follow] = TelemetryBehaviorType.Follow;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.Unfollow] = TelemetryBehaviorType.Unfollow;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.Like] = TelemetryBehaviorType.Like;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.Dislike] = TelemetryBehaviorType.Dislike;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.Unlike] = TelemetryBehaviorType.Unlike;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.Undislike] = TelemetryBehaviorType.Undislike;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.Mute] = TelemetryBehaviorType.Mute;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.Unmute] = TelemetryBehaviorType.Unmute;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.MuteCancel] = TelemetryBehaviorType.MuteCancel;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.Manage] = TelemetryBehaviorType.Manage;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.Hide] = TelemetryBehaviorType.Hide;\r\n TelemetryTypeBehaviorTypeMappingList[TelemetryType.Unhide] = TelemetryBehaviorType.Unhide;\r\n}\r\n\r\n// Init telemetryType mapping\r\ninitTelemetryTypeContentTypeMappingList();\r\ninitTelemetryTypeBehaviorTypeMappingList();","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { canUseDOM, getDocumentElementsByTagName, getLocationSearch, getLocationHostname } from \"@msnews/isomorphic-util\";\r\nimport { applicationCacheConstants, clientSettings, dir, htmlElementIds, info, js, lang, pagetypeSettings, CoreLocalStorageKeys } from \"../constants\";\r\n\r\nimport { AudienceModeType } from \"@msnews/experiences-constants\";\r\nimport { DeviceFormFactorType } from \"cms-models-msn/configuration/types/DeviceFormFactorType\";\r\nimport { Environment } from \"./Environment\";\r\nimport { ILocale } from \"cms-models-msn/configuration/ILocale\";\r\nimport { IPcsBrowserScope } from \"../types/PcsBrowsersType\";\r\nimport { IPcsInformation } from \"../types/PcsInformation\";\r\nimport { IBundleInformation } from \"../types/BundleInformation\";\r\nimport { MarketProperties } from \"./MarketProperties\";\r\nimport { WebClientData } from \"./WebClientData\";\r\nimport { OperatingSystemType } from \"cms-models-msn/configuration/types/OperatingSystemType\";\r\nimport { UrlUtility } from \"../utilities/UrlUtility\";\r\nimport { localStorage } from \"../utilities/WebStorage\";\r\nimport { tryParseJson } from \"../utilities/Parsing\";\r\nimport { KeyValueArray } from \"../utilities\";\r\nimport { logger } from \"@msnews/diagnostics\";\r\n\r\n/**\r\n * Format used for activity ID stored in storage\r\n */\r\nexport type StoredActivityId = {\r\n /**\r\n * ID value\r\n */\r\n id: string,\r\n\r\n /**\r\n * Timestamp of when value was stored\r\n */\r\n ts: number,\r\n\r\n /**\r\n * Flag inidicating if the ID was used in a previous page (stale)\r\n */\r\n previouslyUsed?: boolean\r\n};\r\n\r\n/**\r\n * JSON data contract / interface for settings in the element that are part of the data-client-settings attribute.\r\n */\r\nexport interface IClientSettings {\r\n aid: string,\r\n apptype: string,\r\n apps_locale: string,\r\n audienceMode?: AudienceModeType,\r\n browser?: IPcsBrowserScope,\r\n configRootUrl?: string,\r\n deviceFormFactor?: DeviceFormFactorType,\r\n domain?: string,\r\n featureFlags?: any,\r\n contentId?: string,\r\n\r\n /** The schema://domain to be used for the main feed URL */\r\n feedBaseDomain?: string,\r\n\r\n categoryKey?: string,\r\n functionalonly_cookie_experience: boolean,\r\n functional_cookie_patterns: string,\r\n functional_cookies: string,\r\n geo_city?: string,\r\n geo_country?: string,\r\n geo_countryname?: string;\r\n geo_lat: string,\r\n geo_long: string,\r\n geo_subdivision?: string,\r\n geo_zip?: string,\r\n locale?: ILocale,\r\n market?: MarketProperties,\r\n os?: OperatingSystemType,\r\n pagetype?: string,\r\n\r\n /** Query params in the format \"?key=value&...\" as observed from the PCS origin server */\r\n queryparams?: string,\r\n\r\n static_page?: string,\r\n verticalKey?: string,\r\n\r\n /** cache busting identifier sent by pcs */\r\n cbid?: string\r\n\r\n /** PCS information */\r\n pcsInfo?: IPcsInformation,\r\n\r\n /** Bundle information */\r\n bundleInfo?: IBundleInformation,\r\n}\r\n\r\nexport const EnterpiseFlightId = \"prg-enterpriseblended-t\";\r\nexport const OfficeDefaultPivotFlightId = \"prg-officedefault-t\";\r\n\r\n/** Type for storing app versions for different page types */\r\nexport type PageAppVersions = { [pageType: string]: string };\r\n\r\n/**\r\n * Class for getting the head data information.\r\n */\r\nclass HeadData {\r\n /**\r\n * The single instance of the HeadData class.\r\n * @type {HeadData}\r\n */\r\n private static _instance: HeadData;\r\n\r\n private anonCookieName: string;\r\n private locale: string;\r\n private marketDir: string;\r\n private currentFlights: string;\r\n private clientSettings: IClientSettings;\r\n private enableCMSPPEConfigs = false;\r\n private userIsSignedIn: boolean; // Always signed out on server side: https://dev.azure.com/microsoft/OS/_workitems/edit/25344027\r\n private isPreload: boolean;\r\n private headElement: any;\r\n private htmlElement: any;\r\n private isAppcache: boolean;\r\n private isEnterprise: boolean;\r\n private isOfficeDefaultPivot: boolean;\r\n private isServiceWorkerCache: boolean;\r\n private ssoComplete: boolean;\r\n private aadState: boolean;\r\n private locationSearch: string;\r\n private lastKnownAppVersion: string;\r\n\r\n // TODO: Task 24890741: refactor this class to use the current singleton pattern with ES6 modules\r\n // This will also clean up these getters/setters\r\n public get Locale(): string { return this.locale; }\r\n\r\n public get MarketDir(): string { return this.marketDir; }\r\n public set MarketDir(value: string) { this.marketDir = value; }\r\n\r\n public get CurrentFlights(): string { return this.currentFlights || \"\"; }\r\n public set CurrentFlights(value: string) { this.currentFlights = value; }\r\n\r\n public get ClientSettings(): IClientSettings { return this.clientSettings; }\r\n public set ClientSettings(value: IClientSettings) { this.clientSettings = value; }\r\n\r\n public get EnableCMSPPEConfigs(): boolean { return this.enableCMSPPEConfigs; }\r\n\r\n public get UserIsSignedIn(): boolean { return this.userIsSignedIn; }\r\n public set UserIsSignedIn(value: boolean) { this.userIsSignedIn = value; }\r\n\r\n public get IsPreload(): boolean { return this.isPreload; }\r\n public set IsPreload(value: boolean) { this.isPreload = value; }\r\n\r\n public get IsAppCache(): boolean { return this.isAppcache; }\r\n\r\n public get IsEnterprise(): boolean { return this.isEnterprise; }\r\n public set IsEnterprise(value: boolean) { this.isEnterprise = value; }\r\n\r\n public get IsOfficeDefaultPivot(): boolean { return this.isOfficeDefaultPivot; }\r\n public set IsOfficeDefaultPivot(value: boolean) { this.isOfficeDefaultPivot = value; }\r\n\r\n public get IsServiceWorkerCache(): boolean { return this.isServiceWorkerCache; }\r\n\r\n /**\r\n * The last known app version for the currently loaded page type.\r\n * To get the current page version, use clientSetings.bundleInfo.v value.\r\n */\r\n public get LastKnownAppVersion(): string { return this.lastKnownAppVersion; }\r\n\r\n // TODO: Dependencies that some client side code expects headData to specify but doesn't due to PCS\r\n public get AnonCookieName(): string { return this.anonCookieName; }\r\n public set AnonCookieName(value: string) { this.anonCookieName = value; }\r\n\r\n public get SsoComplete(): boolean { return this.ssoComplete; }\r\n\r\n public get AadState(): boolean { return this.aadState; }\r\n public set AadState(value: boolean) { this.aadState = value; }\r\n\r\n public set LocaleName(value: string) { this.locale = value; }\r\n\r\n /**\r\n * Initialize the head data instance, on server side provide the client info & client settings\r\n * @param {WebClientData} clientData Data object containing both client info and settings\r\n */\r\n private constructor(clientData?: WebClientData) {\r\n this.initializeHeadData(clientData);\r\n }\r\n\r\n /**\r\n * Returns singleton class instance.\r\n * @returns {HeadData}\r\n */\r\n public static getInstance(): HeadData { return HeadData._instance || (HeadData._instance = new HeadData()); }\r\n\r\n /**\r\n * Reset singleton class instance with passed in info and client settings. Used on server side to reset HeadData for each request.\r\n * @param {WebClientData} clientData Data object containing both client info and settings\r\n * @returns {HeadData}\r\n */\r\n public static resetInstance(clientData?: WebClientData): HeadData {\r\n HeadData._instance = new HeadData(clientData);\r\n headData = HeadData._instance;\r\n return HeadData._instance;\r\n }\r\n\r\n /**\r\n * Initializes head data. If WebClientData is provided use that, otherwise do client side initialization.\r\n * @param {WebClientData} clientData - Data object containing both client info and settings\r\n */\r\n public initializeHeadData(clientData?: WebClientData): void {\r\n\r\n if (clientData) {\r\n // Data is passed in only from Render Service under Node.JS environment since there is no DOM.\r\n this.initializeFromData(clientData);\r\n return;\r\n }\r\n\r\n this.locationSearch = getLocationSearch();\r\n this.htmlElement = canUseDOM() ? getDocumentElementsByTagName(htmlElementIds.html)[0] : null;\r\n this.headElement = canUseDOM() ? getDocumentElementsByTagName(htmlElementIds.head)[0] : null;\r\n\r\n if (!this.htmlElement || !this.headElement) {\r\n return;\r\n }\r\n\r\n // We always initialize from DOM first because\r\n // even if we are in an appcache/service worker case, we still need some data from the DOM\r\n // and we will fallback to DOM if there are no items found in storage\r\n this.initializeFromDom();\r\n\r\n // Attempt to override with local storage item when in appcache scenario\r\n // In service worker scenario, just update the storage activity id\r\n if (this.htmlElement.getAttribute(applicationCacheConstants.manifestAttributeName)) {\r\n this.isAppcache = true;\r\n this.initializeFromStorage();\r\n } else if (window && window.navigator && window.navigator.serviceWorker && window.navigator.serviceWorker.controller) {\r\n this.isServiceWorkerCache = true;\r\n this.updateStorageActivityId();\r\n }\r\n\r\n // Below items are common for both scenarios\r\n const language = this.htmlElement.getAttribute(lang);\r\n this.locale = language && language.toLowerCase() || \"\";\r\n\r\n const marketDir = this.htmlElement.getAttribute(dir);\r\n this.marketDir = marketDir && marketDir.toLocaleLowerCase() || \"\";\r\n\r\n this.setQueryItemProvidedValues();\r\n\r\n // Note: This isn't currently being stamped by PCS\r\n const headDataJs = this.headElement.getAttribute(js);\r\n if (headDataJs) {\r\n const headJs = <{ anonckname: string, signedin: number }>tryParseJson(headDataJs);\r\n this.anonCookieName = headJs.anonckname;\r\n this.userIsSignedIn = headJs.signedin === 1;\r\n }\r\n\r\n // Checks if current request is background preload or prerender request\r\n if (UrlUtility.getQueryParameterByName(\"backgroundpreload\", this.locationSearch) ||\r\n UrlUtility.getQueryParameterByName(\"prerender\", this.locationSearch)) {\r\n this.isPreload = true;\r\n }\r\n\r\n // Determine if we are in Enterprise version or not\r\n this.setIsEnterprise();\r\n\r\n // Determine if Office is the default pivot\r\n this.setIsOfficeDefaultPivot();\r\n }\r\n\r\n /**\r\n * Helper that gets the current's page stored last used activityID (if there is one)\r\n */\r\n public getCurrentPageTypeStoredActivityId(): StoredActivityId {\r\n const storedActivities = localStorage.getItem(applicationCacheConstants.storedLastUsedActivityIdKey) || \"\";\r\n const storedActivityIds = tryParseJson(storedActivities);\r\n\r\n return (storedActivityIds && storedActivityIds[headData.ClientSettings.pagetype]) || null;\r\n }\r\n\r\n /**\r\n * Initializes the client settings and info from client data passed in externally (render service query param)\r\n * @param {WebClientData} clientData Data object containing both client info and settings\r\n */\r\n private initializeFromData(clientData: WebClientData): void {\r\n this.clientSettings = tryParseJson(clientData.clientSettings);\r\n\r\n this.setFlights(clientData.clientInfo);\r\n\r\n this.setQueryItemProvidedValues();\r\n\r\n this.locale = clientData.language && clientData.language.toLowerCase() || \"\";\r\n this.marketDir = clientData.marketDir && clientData.marketDir.toLocaleLowerCase() || \"\";\r\n\r\n // Determine if we are in Enterprise version or not\r\n this.setIsEnterprise();\r\n\r\n // Determine if Office is the default pivot\r\n this.setIsOfficeDefaultPivot();\r\n }\r\n\r\n /**\r\n * Initializes the client settings and info from DOM element\r\n */\r\n private initializeFromDom(): void {\r\n\r\n this.setFlights(this.headElement.getAttribute(info));\r\n\r\n const dataClientSettings = this.headElement.getAttribute(clientSettings);\r\n if (!dataClientSettings) {\r\n return;\r\n }\r\n\r\n this.clientSettings = tryParseJson(dataClientSettings);\r\n if (!this.clientSettings) {\r\n return;\r\n }\r\n\r\n const { pagetype } = this.clientSettings;\r\n\r\n // If clientSettings.pagetype does not exist, try getting from data-pagetype.\r\n // For Peregrine full spa page: pagetype is part of data-client-settings. There is no data-pagetype.\r\n // For Prime/Hybrid, pagetype is outside of data-client-settings and it belongs to data-pagetype\r\n if (!pagetype) {\r\n const pageTypeFromSettings = this.headElement.getAttribute(pagetypeSettings);\r\n this.clientSettings.pagetype = pageTypeFromSettings == null ? undefined : pageTypeFromSettings;\r\n }\r\n\r\n // try to get the previously store page version from local storage for this page type,\r\n // and store back the current version\r\n if (pagetype) {\r\n try {\r\n const storedVersions = localStorage.getObject(CoreLocalStorageKeys.pageVersions) || {};\r\n this.lastKnownAppVersion = storedVersions[pagetype];\r\n\r\n // update the dictionary with the new value if different, and store it back to local storage\r\n const { bundleInfo: currentDomVersion } = this.clientSettings;\r\n if (currentDomVersion && this.lastKnownAppVersion !== currentDomVersion) {\r\n storedVersions[pagetype] = currentDomVersion.v;\r\n localStorage.setObject(CoreLocalStorageKeys.pageVersions, storedVersions);\r\n }\r\n } catch {\r\n logger.log(`${this.logPrefix()} couldn't complete localStorage related operation.`);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Initializes headData client settings and info from the value found in storage\r\n * and if none is found, fallbacks to using the DOM element\r\n */\r\n private initializeFromStorage(): void {\r\n const responseFromStorage = localStorage.getItem(applicationCacheConstants.storedHeadDataKey);\r\n const parsedResponseFromStorage = tryParseJson(responseFromStorage);\r\n\r\n // If there is nothing store, then fallback to the DOM\r\n if (!parsedResponseFromStorage) {\r\n return;\r\n }\r\n\r\n const currentPageStoredHeadData = parsedResponseFromStorage[this.clientSettings.pagetype];\r\n\r\n // We don't have an entry for the current page\r\n if (!currentPageStoredHeadData) {\r\n return;\r\n }\r\n\r\n const storedClientSettings = currentPageStoredHeadData[\"clientSettings\"];\r\n const storedFlights = currentPageStoredHeadData[\"info\"];\r\n\r\n // The stored head data is corrupt so we fallback to DOM\r\n if (!storedClientSettings || !storedFlights) {\r\n return;\r\n }\r\n\r\n // Hold on to the current DOM queryparams as we will need to override\r\n // what we get from what is in storage\r\n const domQueryParams = this.clientSettings.queryparams;\r\n\r\n // save the current version if available in a temp variable so we can\r\n // restore it back after updating the clientSettings object with the one from\r\n // storage (which came from head data API, which does not contain the version info\r\n // by design, because version is tied with the static bundles, which should represent the currently\r\n // loaded page.\r\n const currentPageVersion = this.clientSettings && this.clientSettings.bundleInfo && this.clientSettings.bundleInfo.v;\r\n this.clientSettings = storedClientSettings;\r\n\r\n // restore the version after the object update\r\n this.clientSettings.bundleInfo = Object.assign(this.clientSettings.bundleInfo || {}, { v: currentPageVersion});\r\n\r\n // restore the queryParams base on what is found in DOM\r\n // as we want the DOM value to be what is used\r\n // and not what is found in storage for this field\r\n // We want these to stay true to what PCS generated for the page\r\n // and avoid desync when reading what comes from future headData API calls.\r\n this.clientSettings.queryparams = domQueryParams;\r\n\r\n this.setFlights(storedFlights);\r\n this.updateStorageActivityId();\r\n }\r\n\r\n /**\r\n * Update the last used activity ID in storage\r\n */\r\n private updateStorageActivityId(): void {\r\n if (!this.clientSettings.aid) {\r\n return;\r\n }\r\n\r\n const existingLastUsedActivityIds = tryParseJson(localStorage.getItem(applicationCacheConstants.storedLastUsedActivityIdKey)) || {};\r\n const currentPageLastUsedActivityId: StoredActivityId = existingLastUsedActivityIds[this.clientSettings.pagetype];\r\n\r\n // If the current pages last used activity ID matches the one for the current page head data\r\n // then we have re-used this. Mark it as such but don't override the timestamp\r\n if (currentPageLastUsedActivityId && (currentPageLastUsedActivityId.id === this.clientSettings.aid)) {\r\n currentPageLastUsedActivityId.previouslyUsed = true;\r\n existingLastUsedActivityIds[this.clientSettings.pagetype] = currentPageLastUsedActivityId;\r\n } else {\r\n // If they don't match then that means we haven't used this so store the new value.\r\n const activityIdToStore: StoredActivityId = { id: this.clientSettings.aid, ts: (new Date()).getTime() };\r\n existingLastUsedActivityIds[this.clientSettings.pagetype] = activityIdToStore;\r\n }\r\n\r\n // Update the last used activity ID in storage\r\n localStorage.setItem(applicationCacheConstants.storedLastUsedActivityIdKey, JSON.stringify(existingLastUsedActivityIds));\r\n }\r\n\r\n /**\r\n * Parses flights from provided string (if in proper format of f:{flights})\r\n * and sets it to the headData object\r\n */\r\n private setFlights(flightString: string): void {\r\n // The comma separated list of flights enabled in current request\r\n this.currentFlights = ((/f:\\s*([^;]+)/i.exec(flightString) || {})[1] || \"\").toLowerCase();\r\n }\r\n\r\n /**\r\n * Determines if we are in Enterprise version based on clientSettings and currentFlights\r\n */\r\n private setIsEnterprise(): void {\r\n // We know we are in the Enterpise version of the page when both the audience mode is set to Enterprise\r\n // and the correct flight id is set.\r\n this.IsEnterprise = this.clientSettings &&\r\n this.currentFlights &&\r\n this.currentFlights.includes(EnterpiseFlightId) &&\r\n this.clientSettings.audienceMode === AudienceModeType.Enterprise;\r\n }\r\n\r\n /**\r\n * Read query items to determine the headdata variable values.\r\n */\r\n private setQueryItemProvidedValues(): void {\r\n // This only finds multiples of item=key:value qsp. If keys are the same, first given will be used (similar to UrlSearchParamsHelper).\r\n const queryItems = UrlUtility.getParamsWithItems(getLocationSearch());\r\n const cmsItem = queryItems.find(item => item.key === \"cms\");\r\n this.enableCMSPPEConfigs = (cmsItem && cmsItem.value === \"ppe\");\r\n\r\n // Test override to add flights for scope purposes\r\n this.setCurrentFlightsTestOverride(queryItems);\r\n }\r\n\r\n /**\r\n * Overrides currentFlights when hostname is localhost. Used for testing.\r\n */\r\n private setCurrentFlightsTestOverride(queryItems: KeyValueArray): void {\r\n if (getLocationHostname().toLowerCase().includes(\"localhost\") && queryItems) {\r\n const flights = queryItems.find(item => item.key === \"flights\");\r\n if (flights) {\r\n this.currentFlights = flights.value;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Determines if Office is the default pivot based on flight id.\r\n */\r\n private setIsOfficeDefaultPivot(): void {\r\n // There is work scheduled to have \"sticky\" pivots stored in some form of local storage which will\r\n // replace this check. Until then, the only way to know if Office is the default pivot is to check\r\n // for this flight id\r\n this.IsOfficeDefaultPivot = this.currentFlights && this.currentFlights.includes(OfficeDefaultPivotFlightId);\r\n }\r\n\r\n /**\r\n * Prefix for headdata logs. Server side add the head and html elements.\r\n * @returns the prefix string for logger message.\r\n */\r\n private logPrefix(): string {\r\n // Request Id is only available on server side.\r\n return `HeadData:${(canUseDOM() ? \"\" : ` [Head:${this.headElement}] and [Html:${this.htmlElement}]`)}`;\r\n }\r\n}\r\n\r\nexport const getHeadData = HeadData.getInstance;\r\n\r\n// headData can be reinitialized through resetHeadData.\r\nexport let headData = HeadData.getInstance();\r\n\r\n/**\r\n * Export function to reset headData based on WebClientData\r\n */\r\nexport const resetHeadData = HeadData.resetInstance;","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * locationHref of page\r\n */\r\nexport const locationHref = (typeof (window) !== \"undefined\" ? window.location.href : \"\");\r\n\r\n/**\r\n * Render-cache expiration time in ms\r\n * 86400000 = 24 hours in milliseconds\r\n */\r\nexport const defaultExpirationTimeMs = 86400000;\r\n\r\n/**\r\n * Render-cache force expiration time in ms\r\n * 129600000 = 36 hours in milliseconds\r\n */\r\nexport const defaultForceExpirationTimeMs = 129600000;\r\n\r\n/**\r\n * localStorage key prefix for render cache expiration timestamp\r\n * Stores the sliding window expiration\r\n */\r\nexport const expirationPrefix = \"timestamp_\";\r\n\r\n/**\r\n * Force timestamp prefix for render cache values\r\n * Stores the absolute window expiration\r\n */\r\nexport const forceTimestampPrefix = \"force_timestamp_\";\r\n\r\n/**\r\n * Jss map suffix for render cache values\r\n * Stores the jss class list map\r\n */\r\nexport const jssMapSuffix = \"_jssMap\";\r\n\r\n/**\r\n * Prefix for render cache keys\r\n * Stores the collection of all render cache keys\r\n */\r\nexport const keysPrefix = \"keys_\";\r\n\r\n/**\r\n * The key for storing all render cache normalized keys\r\n * Maintain a single entry for collection of all render cache keys\r\n * Example: for https://ntp.msn.com/edge/ntp?locale=en-us URL,\r\n * we have one key with all the following render cache keys values\r\n *\r\n * key: keys_https://ntp.msn.com/edge/ntp?locale=en-us&startpage=1\r\n * value: {\r\n * keyn: \"lastKnown_https://ntp.msn.com/edge/ntp?locale=en-us\", // render cache key\r\n * expn: \"timestamp_https://ntp.msn.com/edge/ntp?locale=en-us\", // expiration key\r\n * frcn: \"force_timestamp_https://ntp.msn.com/edge/ntp?locale=en-us\", // force timestamp key\r\n * jssn: \"lastKnown_https://ntp.msn.com/edge/ntp?locale=en-us_jssMap\" // jss map key\r\n * }\r\n */\r\nexport const renderCacheKeyOfNormalizedKeys = `${keysPrefix}${locationHref}`;\r\n\r\n/**\r\n * localStorage key prefix for render cache object\r\n * Stores the render cache snapshot\r\n */\r\nexport const storagePrefix = \"lastKnown_\";\r\n\r\n/**\r\n * River Render Cache ClassName\r\n */\r\nexport const riverRcClassName = \"river-rc\";","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { IActionPayload } from \"./IActionPayload\";\r\nimport { IDataConnector } from \"../connectors\";\r\nimport PageBase from \"../pages/PageBase\";\r\n\r\n/**\r\n * Helper function to create an action payload\r\n * @param connector The connector (if applicable) where the action will be dispatched\r\n * @param type The Action Type (name of the action)\r\n * @param args Arguments to be passed to the action\r\n * @param experienceInstanceId If defined, the id of an experience instance, that will be used by action receiver\r\n */\r\nexport function getActionPayload(connector: IDataConnector, type: string, args: any[], experienceInstanceId: string): IActionPayload {\r\n let stateKey: string = undefined;\r\n if (connector) {\r\n if (!connector.parentNamespace) {\r\n stateKey = connector.namespace;\r\n } else {\r\n stateKey = connector.parentNamespace + \".\" + connector.namespace;\r\n }\r\n }\r\n\r\n return {\r\n key: stateKey,\r\n experienceInstanceId: experienceInstanceId,\r\n type: type,\r\n params: args\r\n };\r\n}\r\n\r\n/**\r\n * Helper function to dispatch an action either to a connector's namespaced store, or to the root store for the entire app.\r\n * @param connector The connector (if applicable) where the action will be dispatched\r\n * @param payload The action payload\r\n */\r\nexport function dispatchAction(connector: IDataConnector, payload: IActionPayload): any {\r\n\r\n // Dispatch the action\r\n if (connector) {\r\n return connector.store.dispatch(payload);\r\n } else {\r\n return PageBase.getInstance().store.dispatch(payload);\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { dispatchAction, getActionPayload } from \"./ActionDispatchHelper\";\r\n\r\nimport { ActionDispatchCancellationToken } from \"./ActionDispatchCancellationToken\";\r\nimport { ConnectorConstants } from \"../constants/ConnectorConstants\";\r\nimport { IActionDispatchCancellationToken } from \"./IActionDispatchCancellationToken\";\r\nimport { IActionPayload } from \"./IActionPayload\";\r\nimport { Observer } from \"./ActionObserver\";\r\nimport { PerfTimeline } from \"@msnews/diagnostics\";\r\n\r\n/**\r\n * Class that wraps the sending of a action to a connector (i.e. dispatch) with an explicit method, so that in the consuming code\r\n * it is obvious that the action is being \"sent\"\r\n * @class\r\n */\r\nexport abstract class ActionSenderBase {\r\n /**\r\n * Property which is a function that will send an action to the connector.\r\n */\r\n public get send(): TActionSignature {\r\n return (this.dispatchAction());\r\n }\r\n\r\n /**\r\n * Creates an instance of the `ActionSender` class.\r\n * @constructor\r\n * @param {string} type The action type.\r\n * @param {IActionDispatchCancellationToken} cancellationToken Optional cancellation token, which can be used to cancel an in flight action\r\n */\r\n constructor(\r\n protected type: string,\r\n private observers: Observer[],\r\n private cancellationToken?: IActionDispatchCancellationToken) { }\r\n\r\n /**\r\n * Method to get dispatcher and payload\r\n * @param args - the arguments being dispatched\r\n * @returns dispatch result metadata\r\n */\r\n protected abstract getDispatchResult(args: any[]): { payload: IActionPayload, result: any };\r\n\r\n /**\r\n * Gets the perf timeline object if applicable\r\n */\r\n protected abstract tryGetPerfTimeline(): PerfTimeline;\r\n\r\n /**\r\n * Method that returns an action sender function to send the action.\r\n * @method\r\n * @return {TActionSignature} return value is a function to send to action.\r\n */\r\n private dispatchAction(): TActionSignature {\r\n return function (...args: unknown[]): unknown {\r\n if (!ActionDispatchCancellationToken.isCancellationRequested(this.cancellationToken)) {\r\n\r\n const perfTimeline = this.tryGetPerfTimeline();\r\n const actionEndMeasure = perfTimeline && perfTimeline.startMeasure(\"action\", this.type).endMeasure;\r\n\r\n const { payload, result } = this.getDispatchResult(args);\r\n\r\n // Call any observers\r\n this.observers.forEach(o => {\r\n try {\r\n // Call the observer\r\n o.observer(payload);\r\n } catch (error) {\r\n console.log(`Error calling observer: ${JSON.stringify(o)}, with error: ${error}`);\r\n }\r\n\r\n // If there is a connector, dispatch an action to it, forcing it to re-render\r\n if (o.connector) {\r\n const renderActionPayload = getActionPayload(o.connector, ConnectorConstants.renderAction, [], undefined);\r\n dispatchAction(o.connector, renderActionPayload);\r\n }\r\n });\r\n\r\n if (actionEndMeasure) {\r\n actionEndMeasure();\r\n }\r\n\r\n // Return the dispatch result\r\n return result;\r\n } else {\r\n // Don't dispatch the action because it has been canceled\r\n return;\r\n }\r\n };\r\n }\r\n\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { IActionDispatchCancellationToken } from \"./IActionDispatchCancellationToken\";\r\n\r\n/**\r\n * Cancellation Token class.\r\n * @class\r\n */\r\nexport class ActionDispatchCancellationToken implements IActionDispatchCancellationToken {\r\n /** Backing variable for the isCancellationRequested property\r\n * @type {boolean}\r\n */\r\n private isCancelled: boolean;\r\n\r\n /**\r\n * Creates an instance of the `ActionDispatchCancellationToken` class.\r\n * @constructor\r\n */\r\n constructor() {\r\n this.isCancelled = false;\r\n }\r\n\r\n /**\r\n * Helper method to cater for a null or undefined token.\r\n * A null or undefined token means cancellation cannot be requested, so it is equivalent to false\r\n * @method\r\n * @param {IActionDispatchCancellationToken} cancellationToken Optional cancellation token to be checked for undefined, null or cancellation requested\r\n * @returns {boolean}\r\n */\r\n public static isCancellationRequested(cancellationToken?: IActionDispatchCancellationToken): boolean {\r\n return !(cancellationToken === undefined || cancellationToken === null || !cancellationToken.isCancellationRequested);\r\n }\r\n\r\n /** The cancel method.\r\n * @method\r\n */\r\n public cancel(): void {\r\n this.isCancelled = true;\r\n }\r\n\r\n /** getter for the isCancellationRequested property\r\n * @property\r\n * @returns {boolean} Whether cancellation has been requested or not.\r\n */\r\n public get isCancellationRequested(): boolean {\r\n return this.isCancelled;\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { dispatchAction, getActionPayload } from \"./ActionDispatchHelper\";\r\n\r\nimport { ActionSenderBase } from \"./ActionSenderBase\";\r\nimport { IActionDispatchCancellationToken } from \"./IActionDispatchCancellationToken\";\r\nimport { IActionPayload } from \"./IActionPayload\";\r\nimport { IDataConnector } from \"../connectors\";\r\nimport { Observer } from \"./ActionObserver\";\r\nimport { PerfTimeline } from \"@msnews/diagnostics\";\r\n\r\n/**\r\n * Class that wraps the sending of a action to a connector (i.e. dispatch) with an explicit method, so that in the consuming code\r\n * it is obvious that the action is being \"sent\"\r\n * @class\r\n */\r\nexport class ActionSender extends ActionSenderBase {\r\n\r\n /**\r\n * Creates an instance of the `ActionSender` class.\r\n * @constructor\r\n * @param {string} type The action type.\r\n * @param {IDataConnector} connector The connector instance to dispatch the action to.\r\n * @param {IActionDispatchCancellationToken} cancellationToken Optional cancellation token, which can be used to cancel an in flight action\r\n */\r\n constructor(\r\n type: string,\r\n observers: Observer[],\r\n private connector: IDataConnector,\r\n cancellationToken?: IActionDispatchCancellationToken) {\r\n\r\n super(type, observers, cancellationToken);\r\n }\r\n\r\n /**\r\n * Core dispatch implementation for {GlobalActionSender}\r\n * @param args - the arguments being dispatched\r\n * @returns dispatch result metadata\r\n */\r\n protected getDispatchResult(args: any[]): { payload: IActionPayload, result: any } {\r\n const payload = getActionPayload(this.connector, this.type, args, undefined);\r\n const result = dispatchAction(this.connector, payload);\r\n return { payload, result };\r\n }\r\n\r\n /**\r\n * Gets the perf timeline if applicable\r\n */\r\n protected tryGetPerfTimeline(): PerfTimeline {\r\n return this.connector.perfTimeline;\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { PerfTimeline, tryGetPerfTimeline } from \"@msnews/diagnostics\";\r\nimport { dispatchAction, getActionPayload } from \"./ActionDispatchHelper\";\r\n\r\nimport { ActionSenderBase } from \"./ActionSenderBase\";\r\nimport { IActionDispatchCancellationToken } from \"./IActionDispatchCancellationToken\";\r\nimport { IActionPayload } from \"./IActionPayload\";\r\nimport { Observer } from \"./ActionObserver\";\r\n\r\n/**\r\n * Class that wraps the sending of a action globally to all connectors\r\n * @export\r\n * @class\r\n */\r\nexport class GlobalActionSender extends ActionSenderBase {\r\n\r\n /**\r\n * Creates an instance of the `GlobalActionSender` class.\r\n * @constructor\r\n * @param {string} type The action type.\r\n * @param {string} experienceInstanceId Optional experienceInstanceId of the experience that is originating the action.\r\n * @param {IActionDispatchCancellationToken} cancellationToken Optional cancellation token, which can be used to cancel an in flight action.\r\n */\r\n constructor(\r\n type: string,\r\n observers: Observer[],\r\n private experienceInstanceId?: string,\r\n cancellationToken?: IActionDispatchCancellationToken) {\r\n\r\n super(type, observers, cancellationToken);\r\n }\r\n\r\n /**\r\n * Core dispatch implementation for {GlobalActionSender}\r\n * @param args - the arguments being dispatched\r\n * @returns dispatch result metadata\r\n */\r\n protected getDispatchResult(args: any[]): { payload: IActionPayload, result: any } {\r\n const payload = getActionPayload(undefined, this.type, args, this.experienceInstanceId);\r\n const result = dispatchAction(undefined, payload);\r\n return { payload, result };\r\n }\r\n\r\n /**\r\n * Gets the perf timeline if applicable\r\n */\r\n protected tryGetPerfTimeline(): PerfTimeline {\r\n return tryGetPerfTimeline(\"GlobalActionSender\", this.experienceInstanceId || \"unknown\");\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { ActionObserver, Observer } from \".\";\r\n\r\nimport { ActionSender } from \"./ActionSender\";\r\nimport { GlobalActionSender } from \"./GlobalActionSender\";\r\nimport { IActionDispatchCancellationToken } from \"./IActionDispatchCancellationToken\";\r\nimport { IActionMap } from \"./IActionMap\";\r\nimport { IDataConnector } from \"../connectors/IDataConnector\";\r\nimport PageBase from \"../pages\";\r\n\r\n/**\r\n * Class that maps Action to its callback function type.\r\n * Provides the method to get action creator which returns callback function to send to action.\r\n * Callback function dispatches the action payload.\r\n * @class\r\n */\r\nexport class ActionMap implements IActionMap {\r\n\r\n /**\r\n * An array of registered action observers\r\n */\r\n private observers: Observer[] = [];\r\n\r\n /**\r\n * Creates an instance of the `ActionMap` class.\r\n * @constructor\r\n * @param {string} type The action type, which is part of the IActionMap contract.\r\n */\r\n constructor(public type: string) {\r\n }\r\n\r\n /**\r\n * Method that returns an action sender function that can be used to send/dispatch the action to a specific connector\r\n * @method\r\n * @param {IDataConnector | string} connector The connector instance to send the action to, or the connector namespace. If the param type\r\n * is string, then the connector instance will be looked up, and used if found.\r\n * @param {IActionDispatchCancellationToken} cancellationToken If passed in and cancellation has been requested, then nothing is dispatched.\r\n * @return {TActionSignature} return value is an object with a send method, which is used to send the action.\r\n */\r\n public getActionSender(connector: IDataConnector | string, cancellationToken?: IActionDispatchCancellationToken): ActionSender | undefined {\r\n let connectorInstance: IDataConnector = undefined;\r\n if (typeof (connector) === \"string\") {\r\n // Find the connector with the matching namespace\r\n connectorInstance = PageBase.getInstance().rootReducer.connector(connector);\r\n } else {\r\n connectorInstance = connector;\r\n }\r\n\r\n if (connectorInstance) {\r\n return new ActionSender(this.type, this.observers, connectorInstance, cancellationToken);\r\n }\r\n }\r\n\r\n /**\r\n * Method that returns an action sender function that can be used to send/dispatch the action globally to all connectors\r\n * @method\r\n * @param {string} experienceInstanceId An optional experienceInstanceId, that will get passed along in the action payload.\r\n * It can then be used by the receiving reducer to determine if the action should be handled.\r\n * @param {IActionDispatchCancellationToken} cancellationToken If passed in and cancellation has been requested, then nothing is dispatched.\r\n * @return {TActionSignature} return value is an object with a send method, which is used to send the action.\r\n */\r\n public getGlobalActionSender(experienceInstanceId?: string, cancellationToken?: IActionDispatchCancellationToken): GlobalActionSender {\r\n return new GlobalActionSender(this.type, this.observers, experienceInstanceId, cancellationToken);\r\n }\r\n\r\n /**\r\n * Method that registers a new observer for this action. The observer will be called after the action is dispatched\r\n * @method\r\n * @param {ActionObserver} observer The observer to be added to the list of observers that will be called when the action completes\r\n */\r\n public registerObserver(observer: ActionObserver, connector?: IDataConnector): void {\r\n this.observers.push({ observer: observer, connector: connector });\r\n }\r\n\r\n /**\r\n * Test method to help clear existing observers to reset the state in unit test scenarios.\r\n */\r\n public _clearObservers(): void {\r\n this.observers.length = 0;\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { AppError, AppErrorPropertyBag, Severity } from \"./AppErrorTracker\";\r\n\r\n/**\r\n * This file contains the list of errors to log to the server for each feature.\r\n * We are centralizing errors here to make sure we do not have any dupes\\conflicts.\r\n * The idea is that each feature would have their own range of values.\r\n *\r\n * IMPORTANT: Please do not add strings to this file. Please map messages to send in your\r\n * code.\r\n */\r\n\r\n/**\r\n * All app errors are set to create IcM ticket by default unless specified in individual error code otherwise.\r\n */\r\nconst severity = Severity.Alert;\r\n\r\n// Webpack defines the BUILD_NUMBER of client code build number.\r\ndeclare let BUILD_NUMBER: string;\r\n\r\n/**\r\n * Get build number from web pack. If not present, return empty\r\n */\r\nconst pb: AppErrorPropertyBag = {\r\n build: typeof BUILD_NUMBER === \"undefined\"\r\n ? \"\"\r\n : BUILD_NUMBER\r\n};\r\n\r\nexport function updateAppErrorsPropertyBag(newPbInfo: Partial): void {\r\n Object.assign(pb, newPbInfo);\r\n}\r\n\r\nexport function getAppErrorsPropertyBag(): AppErrorPropertyBag {\r\n return pb;\r\n}\r\n\r\n/**\r\n * Helper to create an error for logging with message and customMessage properties without having\r\n * to go manually clone the error object, or property bag, etc.\r\n * @param baseError - The base error object to use as prototype for creating the error\r\n * @param message - The custom message to use for the error\r\n * @param customMessage - The custom message that may contain strings that do not aggregate well (i.e., unique / per request data)\r\n */\r\nexport function createError(baseError: AppError, message: string, customMessage?: string): AppError {\r\n return {\r\n ...baseError,\r\n message: message || baseError.message,\r\n pb: customMessage\r\n ? { ...baseError.pb, customMessage }\r\n : baseError.pb\r\n };\r\n}\r\n\r\n/**\r\n * Error during app initialization for Edge page experience.\r\n * Need to mimic the prime one since telemetry cooking logic looks for this\r\n */\r\nexport const EstablishSignedInState: AppError = {\r\n id: 1405,\r\n source: \"EstablishSignInStateHelpers.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents a ServiceUI related error */\r\nexport const ServiceUiError: AppError = {\r\n id: 5100,\r\n source: \"ServiceUiComm.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents a Top Sites related error */\r\nexport const TopSitesError: AppError = {\r\n id: 8010,\r\n source: \"TopSites.tsx\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents a Top Sites error when there are zero rendered top sites */\r\nexport const ZeroTopSitesError: AppError = {\r\n id: 8011,\r\n source: \"TopSites.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Curated sites list is empty */\r\nexport const CuratedSitesEmpty: AppError = {\r\n id: 8012,\r\n source: \"TopSites.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\nconst TopSitesEdgeConnectorFileName = \"TopSitesEdge.connector.tsx\";\r\nconst TopSitesEdgeStorageFileName = \"TopSitesStorage.ts\";\r\n\r\nexport const TopSitesEdgeAppErrors = {\r\n ZeroTopSitesError: {\r\n id: 8013,\r\n source: TopSitesEdgeConnectorFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n CuratedSitesEmpty: {\r\n id: 8014,\r\n source: TopSitesEdgeStorageFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n ComponentMountFailed: {\r\n id: 8015,\r\n source: TopSitesEdgeConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n ErrorFetchingRichTopSitesDataCollectionFromCms: {\r\n id: 8016,\r\n source: TopSitesEdgeStorageFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst TopSitesEdgeNextConnectorFileName = \"TopSitesEdgeNext.connector.tsx\";\r\n\r\nexport const TopSitesEdgeNextAppErrors = {\r\n\r\n /** The React component failed to mount */\r\n ComponentMountFailed: {\r\n id: 8020,\r\n source: TopSitesEdgeNextConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Represents a Top Sites error when there are zero rendered top sites */\r\n ZeroTopSitesError: {\r\n id: 8021,\r\n source: TopSitesEdgeNextConnectorFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nexport const TopSiteDialogAppErrors = {\r\n /** The React component failed to mount */\r\n TopSitesDialogFailedToMount: {\r\n id: 8025,\r\n source: \"TopSitesDialog.tsx\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst OneServiceCardProviderFileName = \"OneServiceCardProvider.ts\";\r\n\r\nexport const OneServiceCardProviderAppErrors = {\r\n EmptyMyFeed: {\r\n id: 8030,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n OneServiceResponseWasNullOrErroneous: {\r\n id: 8031,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n ErrorFetchingOneServiceResponse: {\r\n id: 8032,\r\n source: OneServiceCardProviderFileName,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n\r\n InvalidJsonInOneServiceResponse: {\r\n id: 8033,\r\n source: OneServiceCardProviderFileName,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n\r\n InvalidFeedListInOneServiceResponse: {\r\n id: 8034,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n RiverConfigurationIssue: {\r\n id: 8035,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load views river content based on current vertical/category. */\r\n QueryInterestContentFetchError: {\r\n id: 8036,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n StaticContentLoaded: {\r\n id: 8037,\r\n source: OneServiceCardProviderFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nconst OneServiceDailyBriefApi = \"dailyBriefServiceClient.ts\";\r\n\r\nexport const DailyBriefServiceClientAppErrors = {\r\n OneServiceResponseWasNullOrErroneous: {\r\n id: 8038,\r\n source: OneServiceDailyBriefApi,\r\n severity,\r\n pb\r\n },\r\n\r\n OneServiceArticleListWasNullOrErroneous: {\r\n id: 8039,\r\n source: OneServiceDailyBriefApi,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ContentPreviewSourceFile = \"ContentPreview.connector.ts\";\r\nconst ContentPreviewDataSourceFile = \"ContentPreviewData.ts\";\r\nconst ExternalContentMapperHelperFile = \"ExternalContentMapperHelper.ts\";\r\n\r\nexport const ContentPreviewAppErrors = {\r\n\r\n ErrorWhileFetchingContentPreviewContent: {\r\n id: 8041,\r\n source: ContentPreviewDataSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n InvalidResponseFromContentPreviewFetch: {\r\n id: 8042,\r\n source: ContentPreviewDataSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n InvalidResponseFromContentPreviewResponseJson: {\r\n id: 8043,\r\n source: ContentPreviewDataSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n ErrorWhileInitializingAsyncContentPreviewContent: {\r\n id: 8044,\r\n source: ContentPreviewSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n InvalidOrMissingContentId: {\r\n id: 8045,\r\n source: ContentPreviewDataSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n MissingDataForExternalContent: {\r\n id: 8046,\r\n source: ExternalContentMapperHelperFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nexport const MissingPartnerLink: AppError = {\r\n id: 8047,\r\n source: ContentPreviewDataSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst RiverSourceFile = \"River.connector.ts\";\r\n\r\nexport const RiverAppErrors = {\r\n UnknownMetadataReceivedFromRiverCardProvider: {\r\n id: 8051,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n RiverContentProviderFetchException: {\r\n id: 8052,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n SkipPositionedCardsFallbackStrategyFailed: {\r\n id: 8053,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n InvalidConfig: {\r\n id: 8054,\r\n source: RiverSourceFile,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n\r\n MissingExperienceTypeMap: {\r\n id: 8055,\r\n source: RiverSourceFile,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n\r\n ChildLoadError: {\r\n id: 8056,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n InitialDataLoadError: {\r\n id: 8057,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Warning for when the ordinal children we get from config contains a duplicate instance id. */\r\n DuplicateInstanceIdWarning: {\r\n id: 8058,\r\n source: RiverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nexport const FullHeightFallbackStrategyFailed: AppError = {\r\n id: 8059,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst UserInitiatedPageRefreshSourceFile = \"UserInitiatedPageRefresh.ts\";\r\nexport const UserInitiatedPageRefreshErrors = {\r\n Default: {\r\n id: 8060,\r\n source: UserInitiatedPageRefreshSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PivotContentSourceFile = \"PivotContent.connector.ts\";\r\nexport const PivotContentErrors = {\r\n LoadFailure: {\r\n id: 8070,\r\n source: PivotContentSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PivotContentV2SourceFile = \"PivotContentV2.connector.ts\";\r\nexport const PivotContentV2Errors = {\r\n LoadFailure: {\r\n id: 8071,\r\n source: PivotContentV2SourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PivotsNavSourceFile = \"PivotsNav.connector.ts\";\r\nexport const PivotsNavErrors = {\r\n TopicDataConnectorUnavailable: {\r\n id: 8075,\r\n source: PivotsNavSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n NavigationDataConnectorUnavailable: {\r\n id: 8076,\r\n source: PivotsNavSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n DynamicPivotsHelperLoaderFailed: {\r\n id: 8077,\r\n source: PivotsNavSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n LayoutPreferenceDataConnectorUnavailable: {\r\n id: 8078,\r\n source: PivotsNavSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PivotsNavV2SourceFile = \"PivotsNavV2.connector.ts\";\r\nexport const PivotsNavV2Errors = {\r\n PivotHoverLoadFailure: {\r\n id: 8079,\r\n source: PivotsNavV2SourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Smart list is empty */\r\nexport const SmartListEmpty: AppError = {\r\n id: 8080,\r\n source: \"SmartList.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents BingWebSSO related App errors */\r\nconst BingWebSSOSourceFile = \"BingWebSSO.tsx\";\r\nexport const BingWebSSOAppErrors = {\r\n /** Failed to render bing websso iframe */\r\n BingWebSSORenderFailed: {\r\n id: 8090,\r\n source: BingWebSSOSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** User signed-in to MSA on page but bing SSO returned authentication failed response */\r\n BingWebSSOSignInFailed: {\r\n id: 8091,\r\n source: BingWebSSOSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Bing SSO process did not complete withing required time */\r\n BingWebSSOTimeout: {\r\n id: 8092,\r\n source: BingWebSSOSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst WeatherDataConnectorSourceFile = \"WeatherData.connector.ts\";\r\nconst WeatherCardConnectorSourceFile = \"WeatherCard.connector.ts\";\r\n/** Failed to fetch weather summary */\r\nexport const WeatherSummaryFetchError: AppError = {\r\n id: 8100,\r\n source: WeatherDataConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** No valid Location set from User */\r\nexport const WeatherLocationEmpty: AppError = {\r\n id: 8101,\r\n source: WeatherDataConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Not able to read from PDP */\r\nexport const WeatherPDPReadFailed: AppError = {\r\n id: 8102,\r\n source: WeatherDataConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Not able to write home location to PDP */\r\nexport const WeatherPDPHomeLocationWriteFailed: AppError = {\r\n id: 8103,\r\n source: WeatherDataConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Not able to write display Unit to PDP */\r\nexport const WeatherPDPDisplayUnitWriteFailed: AppError = {\r\n id: 8104,\r\n source: WeatherDataConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Not able to localize Location */\r\nexport const WeatherLocalizeLocationFailed: AppError = {\r\n id: 8105,\r\n source: WeatherDataConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const WeatherCardAppErrors = {\r\n /** Failed to fetch local news */\r\n WeatherLocalNewsFetchError: {\r\n id: 8106,\r\n source: WeatherCardConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Failed to fetch autosuggest for locations */\r\n WeatherAutoSuggestFetchError: {\r\n id: 8107,\r\n source: WeatherCardConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** No valid Location set from User */\r\n WeatherLocationEmpty: {\r\n id: 8108,\r\n source: WeatherCardConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Failed to fetch autosuggest for locations */\r\nexport const WeatherAutoSuggestFetchError: AppError = {\r\n id: 8109,\r\n source: WeatherDataConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** for more error about Weather, use 295XX */\r\n\r\nconst SportsPdpServiceClientSourceFile = \"SportsPdpServiceClient.ts\";\r\nexport const SportsCardError = {\r\n /** Failed to fetch league sports pdp */\r\n SportsLeaguePdpFetchError: {\r\n id: 8110,\r\n source: SportsPdpServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch league sports pdp */\r\n SportsLeaguePdpInvalidResponse: {\r\n id: 8111,\r\n source: SportsPdpServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch players sports pdp */\r\n SportsPlayersPdpFetchError: {\r\n id: 8112,\r\n source: SportsPdpServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch players sports pdp */\r\n SportsPlayersPdpInvalidResponse: {\r\n id: 8113,\r\n source: SportsPdpServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch teams sports pdp */\r\n SportsTeamsPdpFetchError: {\r\n id: 8114,\r\n source: SportsPdpServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch teams sports pdp */\r\n SportsTeamsPdpInvalidResponse: {\r\n id: 8115,\r\n source: SportsPdpServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get sports card config */\r\n SportsCardConfigFetchError: {\r\n id: 8116,\r\n source: \"SportsCardConfigReader.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get Team Data */\r\n SportsCardGetFavoriteTeamDataError: {\r\n id: 8117,\r\n source: \"SportsCard.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get Team Data */\r\n SportsCardGetPlayerBioError: {\r\n id: 8118,\r\n source: \"SportsCard.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n SportsCardGetLeaguesGamesArrayError: {\r\n id: 8119,\r\n source: \"SportsCard.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n SportsCardGetPdpDataFailure: {\r\n id: 8120,\r\n source: \"SportsCard.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n SportsCardGetLeagueSeasonYearDataFailure: {\r\n id: 8121,\r\n source: \"SportsCardServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n SportsCardGetLocalizedTeamNameDataFailure: {\r\n id: 8122,\r\n source: \"SportsCardServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n SportsCardGetTeamDataFailure: {\r\n id: 8123,\r\n source: \"SportsCardServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n SportsCardGetLeagueDataFailure: {\r\n id: 8124,\r\n source: \"SportsCardServiceClient.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst MoneyCardConnectorFile = \"MoneyCard.connector.ts\";\r\nconst MoneyPdpServiceClientFile = \"MoneyPdpServiceClient.ts\";\r\nexport const MoneyCardError = {\r\n /** Failed to get quote summary for user */\r\n MoneyQuoteSummaryGetError: {\r\n id: 8130,\r\n source: MoneyCardConnectorFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get quote summaries */\r\n MoneyQuoteSummariesGetError: {\r\n id: 8131,\r\n source: MoneyCardConnectorFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get pdp data */\r\n MoneyPdpDataGetErrorFromService: {\r\n id: 8132,\r\n source: MoneyPdpServiceClientFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get pdp data because of invalid response */\r\n MoneyPdpInvalidResponseFromService: {\r\n id: 8133,\r\n source: MoneyPdpServiceClientFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get quote summary response for user from service client */\r\n MoneyQuoteSummaryGetErrorFromService: {\r\n id: 8134,\r\n source: MoneyPdpServiceClientFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get quote summary response for user from service client because of invalid response */\r\n MoneyQuoteSummaryInvalidResponseFromService: {\r\n id: 8135,\r\n source: MoneyPdpServiceClientFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const TrendingNewsErrors = {\r\n /** Failed to fetch the trending news stories */\r\n DataFetchError: {\r\n id: 8140,\r\n source: \"TrendingNews.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /** Failed to fetch the backup data for trending news stories */\r\n BackupDataFetchError: {\r\n id: 8141,\r\n source: \"TrendingNews.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ComplexContentPreviewSourceFile = \"ComplexContentPreview.connector.ts\";\r\nexport const ComplexContentPreviewErrors = {\r\n InitError: {\r\n id: 8150,\r\n source: ComplexContentPreviewSourceFile,\r\n severity,\r\n pb\r\n },\r\n LoadError: {\r\n id: 8151,\r\n source: ComplexContentPreviewSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n ContentError: {\r\n id: 8152,\r\n source: ComplexContentPreviewSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const GridSectionAppErrors = {\r\n /** Unable to generate river section cards */\r\n GridSectionCardGenerationError: {\r\n id: 8160,\r\n source: \"GridSection.tsx\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst MmxEntryPointFileName = \"MMXPage.connector.ts\";\r\n\r\nexport const MmxEntryPointAppErrors = {\r\n /**\r\n * MMX river is not able to load Error Page.\r\n */\r\n MmxErrorPage: {\r\n id: 8170,\r\n source: MmxEntryPointFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error fetching the APP_ANON cookie on MMX page load\r\n */\r\n ErrorFetchingAppAnonCookie: {\r\n id: 8171,\r\n source: \"page.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst irisImageHotspotsFile = \"ImageHotspots.manager.ts\";\r\nexport const BackgroundImageAppErrors = {\r\n /** The Bing Image of the Day failed to load properly */\r\n BingIOTDFailedToLoad: {\r\n id: 8180,\r\n source: \"BingImageOfTheDayProvider.ts\",\r\n severity,\r\n pb\r\n },\r\n /** Error when Iris fails to return Hotspots Data to the client. */\r\n FailedHotspotsDataDelivery: {\r\n id: 8181,\r\n source: irisImageHotspotsFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Hotspots data that was returned failed to validate. */\r\n IncompleteHotspotsContract: {\r\n id: 8182,\r\n source: irisImageHotspotsFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Hotspots data found for the off page navigation failed inspection. */\r\n InvalidOffPageNavCTA: {\r\n id: 8183,\r\n source: irisImageHotspotsFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const SettingsDialogAppErrors = {\r\n /** Failed to get the saved layout preferences */\r\n ReadPreferencesFailed: {\r\n id: 8190,\r\n source: \"SettingsDialogEdgeNext.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch the ConfigData object from the client API */\r\n FetchNtpConfigDataFailed: {\r\n id: 8191,\r\n source: \"SettingsDialogEdgeNextBase.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n ChromiumClientEmbededsearchAPIError: {\r\n id: 8192,\r\n source: \"SettingsDialogEdgeNext.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst MsnSettingMenuConnectorFileName = \"MsnSettingMenuConnector.connector.ts\";\r\n\r\nexport const MsnSettingsMenuAppErrors = {\r\n /** Failed to get feedback dialog connector */\r\n FailedToGetFeedbackDialogConnector: {\r\n id: 8193,\r\n source: MsnSettingMenuConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Failed to get feedback data connector */\r\n FailedToGetFeedbackDataConnector: {\r\n id: 8194,\r\n source: MsnSettingMenuConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** The Msn settings menu failed to load valid config settings */\r\n MsnSettingsMenuFailedToFetchConfig: {\r\n id: 8195,\r\n source: MsnSettingMenuConnectorFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const EdgePageSettingsAppErrors = {\r\n ServiceUiError: {\r\n id: 8196,\r\n source: \"EdgeSettingsProvider.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ShowFeedConnectorFileName = \"ShowFeed.connector.ts\";\r\n\r\nexport const ShowFeedAppErrors = {\r\n ExpectedDataMissing: {\r\n id: 8198,\r\n source: ShowFeedConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n MissingPageSettings: {\r\n id: 8199,\r\n source: ShowFeedConnectorFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst InfopaneSourceFile = \"Infopane.connector.ts\";\r\nexport const InfopaneErrors = {\r\n InitializeError: {\r\n id: 8201,\r\n source: InfopaneSourceFile,\r\n severity,\r\n pb\r\n },\r\n InvalidConfig: {\r\n id: 8202,\r\n source: InfopaneSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const FeedbackLinkAppErrors = {\r\n /** The Feedback link failed to load valid config settings */\r\n FeedbackLinkFailedToFetchConfig: {\r\n id: 8210,\r\n source: \"FeedbackLink.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /** Failed to get feedback dialog connector */\r\n FailedToGetFeedbackDialogConnector: {\r\n id: 8211,\r\n source: \"FeedbackLink.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /** Failed to get feedback data connector */\r\n FailedToGetFeedbackDataConnector: {\r\n id: 8212,\r\n source: \"FeedbackLink.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst FeedbackServiceClientSourceFile = \"FeedbackServiceClient.ts\";\r\nexport const FeedbackDialogAppErrors = {\r\n /** Failed to get feedback data connector */\r\n FailedToGetFeedbackDataConnector: {\r\n id: 8213,\r\n source: \"FeedbackDialog.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /** Request is not valid, it has no content, or the manifest is not formatted correctly */\r\n BadRequestReportingFeedback: {\r\n id: 8214,\r\n source: FeedbackServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n /** Exception thrown when reporting feedback to OCV */\r\n ExceptionReportingFeedback: {\r\n id: 8215,\r\n source: FeedbackServiceClientSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst OneFooterConnectorFileName = \"OneFooter.connector.ts\";\r\nexport const OneFooterErrors = {\r\n InvalidConfig: {\r\n id: 8220,\r\n source: OneFooterConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Failed to get feedback data connector */\r\n FailedToGetFeedbackDataConnector: {\r\n id: 8221,\r\n source: OneFooterConnectorFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const PoweredByLegendAppErrors = {\r\n /** The PoweredBy legend failed to load expected config settings */\r\n PoweredByLegendInvalidConfig: {\r\n id: 8230,\r\n source: \"PoweredByLegend.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst EdgeHeaderConnectorFileName = \"EdgeHeader.connector.ts\";\r\n\r\nexport const EdgeHeaderAppErrors = {\r\n /** The BingImageData Connector was not loaded */\r\n BingImageDataConnectorNotLoaded: {\r\n id: 8240,\r\n source: EdgeHeaderConnectorFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst MicrosoftNewsPageConnectorFileName = \"MicrosoftNewsPage.connector.ts\";\r\n\r\nexport const MicrosoftNewsPageAppErrors = {\r\n /** The BingImageData Connector was not loaded */\r\n BingImageDataConnectorNotLoaded: {\r\n id: 8241,\r\n source: MicrosoftNewsPageConnectorFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst WindowsPageConnectorFileName = \"WindowsPage.connector.ts\";\r\n\r\nexport const WindowsPageAppErrors = {\r\n /** The BingImageData Connector was not loaded */\r\n BingImageDataConnectorNotLoaded: {\r\n id: 8242,\r\n source: WindowsPageConnectorFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst TabbedInfopaneSourceFile = \"TabbedInfopane.connector.ts\";\r\nexport const TabbedInfopaneErrors = {\r\n InitializeError: {\r\n id: 8250,\r\n source: TabbedInfopaneSourceFile,\r\n severity,\r\n pb\r\n },\r\n InvalidConfig: {\r\n id: 8251,\r\n source: TabbedInfopaneSourceFile,\r\n severity,\r\n pb\r\n },\r\n ChildLoadError: {\r\n id: 8252,\r\n source: TabbedInfopaneSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const MeControlAppErrors = {\r\n /** The SSO call failed to return valid SSO sign-in information. */\r\n SSOFailedError: {\r\n id: 8260,\r\n source: \"MeControl.tsx\",\r\n severity,\r\n pb\r\n },\r\n /** The Me Control failed to load */\r\n MeControlLoadFailedError: {\r\n id: 8261,\r\n source: \"MeControl.tsx\",\r\n severity: Severity.HighImpact,\r\n pb\r\n }\r\n};\r\n\r\nconst TabbedInfopaneTabPreviewSourceFile = \"TabbedInfopaneTabPreview.connector.ts\";\r\nexport const TabbedInfopaneTabPreviewErrors = {\r\n InitError: {\r\n id: 8270,\r\n source: TabbedInfopaneTabPreviewSourceFile,\r\n severity,\r\n pb\r\n },\r\n InvalidConfig: {\r\n id: 8271,\r\n source: TabbedInfopaneTabPreviewSourceFile,\r\n severity,\r\n pb\r\n },\r\n LoadError: {\r\n id: 8272,\r\n source: TabbedInfopaneTabPreviewSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const HeaderNavigationLogoAppErrors = {\r\n MegaMenuDataError: {\r\n id: 8280,\r\n source: \"HeaderNavigationLogoConnector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst pageClicksTrackerFileName = \"pageClicksTracker.ts\";\r\nexport const PageClickTrackerErrors = {\r\n InvalidResponse: {\r\n id: 8290,\r\n severity: Severity.NoAlert,\r\n source: pageClicksTrackerFileName,\r\n pb\r\n },\r\n FetchFailure: {\r\n id: 8291,\r\n severity: Severity.NoAlert,\r\n source: pageClicksTrackerFileName,\r\n pb\r\n }\r\n};\r\n\r\nconst TargetingSystemSourceFile = \"TargetingSystem.ts\";\r\nexport const TargetingSystemAppErrors = {\r\n GeneralError: {\r\n id: 8310,\r\n source: TargetingSystemSourceFile,\r\n severity,\r\n pb\r\n },\r\n TopLevelDataMissing: {\r\n id: 8311,\r\n source: TargetingSystemSourceFile,\r\n severity,\r\n pb\r\n },\r\n TrackingDataUPSMissing: {\r\n id: 8312,\r\n source: TargetingSystemSourceFile,\r\n severity,\r\n pb\r\n },\r\n AppEnvironmentValuesMissing: {\r\n id: 8313,\r\n source: TargetingSystemSourceFile,\r\n severity,\r\n pb\r\n },\r\n CallingOneServiceFailed: {\r\n id: 8314,\r\n source: TargetingSystemSourceFile,\r\n severity,\r\n pb\r\n },\r\n CallingUPSServiceFailed: {\r\n id: 8315,\r\n source: TargetingSystemSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst CoachmarkSourceFile = \"Coachmark.connector.ts\";\r\nconst CoachmarkTSX = \"Coachmark.tsx\";\r\nconst CoachmarkCTA = \"Coachmark.cta.ts\";\r\nexport const CoachmarkAppErrors = {\r\n GeneralError: {\r\n id: 8320,\r\n source: CoachmarkTSX,\r\n severity,\r\n pb\r\n },\r\n NotPlaceable: {\r\n id: 8321,\r\n source: CoachmarkTSX,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n NotFoundComponent: {\r\n id: 8322,\r\n source: CoachmarkTSX,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n CoachmarkDataConnectorUndefined: {\r\n id: 8323,\r\n source: CoachmarkSourceFile,\r\n severity,\r\n pb\r\n },\r\n InvalidCTAType: {\r\n id: 8324,\r\n source: CoachmarkCTA,\r\n severity,\r\n pb\r\n },\r\n CTATypeNotDefined: {\r\n id: 8325,\r\n source: CoachmarkCTA,\r\n severity,\r\n pb\r\n },\r\n ConfigDataUndefined: {\r\n id: 8326,\r\n source: CoachmarkSourceFile,\r\n severity,\r\n pb\r\n },\r\n FailedToFetchConfigData: {\r\n id: 8327,\r\n source: CoachmarkSourceFile,\r\n severity,\r\n pb\r\n },\r\n ExceptionFetchingConfigData: {\r\n id: 8328,\r\n source: CoachmarkSourceFile,\r\n severity,\r\n pb\r\n },\r\n EventNotDefined: {\r\n id: 8329,\r\n source: CoachmarkCTA,\r\n severity,\r\n pb\r\n },\r\n CoachmarkStateNotDefined: {\r\n id: 8330,\r\n source: CoachmarkCTA,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst CoachmarkDataConnectorSourceFile = \"CoachmarkData.connector.ts\";\r\nconst CoachmarkPayloadSourceFile = \"CoachmarkPayload.ts\";\r\nconst IrisHandlerSourceFile = \"IrisHandler.ts\";\r\nexport const CoachmarkDataAppErrors = {\r\n InvalidCoachmarkMessage: {\r\n id: 8331,\r\n source: CoachmarkPayloadSourceFile,\r\n severity,\r\n pb\r\n },\r\n IrisDataConnectorUndefined: {\r\n id: 8332,\r\n source: IrisHandlerSourceFile,\r\n severity,\r\n pb\r\n },\r\n ErrorFoundForSurface: {\r\n id: 8334,\r\n source: IrisHandlerSourceFile,\r\n severity,\r\n pb\r\n },\r\n TelemetryInfoUndefined: {\r\n id: 8335,\r\n source: CoachmarkDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n EventTypeUndefined: {\r\n id: 8336,\r\n source: CoachmarkDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n IrisActionUndefined: {\r\n id: 8337,\r\n source: CoachmarkDataConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst AppTraceFile = \"AppTrace\";\r\nexport const AppTraceErrors = {\r\n /** Error for when app trace upload fails */\r\n UploadError: {\r\n id: 8350,\r\n source: AppTraceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ConditionalBannerPayloadSourceFile = \"ConditionalBannerPayload.ts\";\r\nconst ConditionalBannerIrisHandlerSourceFile = \"ConditionalBannerIrisHandler.ts\";\r\n\r\nexport const ConditionalBannerInvalidConditionalBannerMessage: AppError = {\r\n id: 8363,\r\n source: ConditionalBannerPayloadSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConditionalBannerIrisDataConnectorUndefined: AppError = {\r\n id: 8364,\r\n source: ConditionalBannerIrisHandlerSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConditionalBannerNoSurfaceFoundForCampaign: AppError = {\r\n id: 8365,\r\n source: ConditionalBannerIrisHandlerSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConditionalBannerErrorFoundForSurface: AppError = {\r\n id: 8366,\r\n source: ConditionalBannerIrisHandlerSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConditionalBannerTelemetryInfoUndefined: AppError = {\r\n id: 8367,\r\n source: ConditionalBannerIrisHandlerSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConditionalBannerEventTypeUndefined: AppError = {\r\n id: 8368,\r\n source: ConditionalBannerIrisHandlerSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ConditionalBannerIrisActionUndefined: AppError = {\r\n id: 8369,\r\n source: ConditionalBannerIrisHandlerSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst SpotlightPreviewSourceFile = \"SpotlightPreview.connector.ts\";\r\n\r\nexport const SpotlightPreviewAppErrors = {\r\n ErrorWhileFetchingSpotlightPreviewCardInfo: {\r\n id: 8401,\r\n source: SpotlightPreviewSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n NoServiceContextMetadata: {\r\n id: 8402,\r\n source: SpotlightPreviewSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst SpotlightSourceFile = \"Spotlight.connector.ts\";\r\nexport const SpotlightErrors = {\r\n UnknownError: {\r\n id: 8500,\r\n source: SpotlightSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n ContentFetchError: {\r\n id: 8501,\r\n source: SpotlightSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n PartnerFetchFail: {\r\n id: 8502,\r\n source: \"PartnerService.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const CommentsErrors: { [key: string]: AppError } = {\r\n NoPost: {\r\n id: 8510,\r\n source: \"Comments.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const CardActionErrors = {\r\n /** Error catch in base CardAction experience container */\r\n CardActionBaseExperienceError: {\r\n id: 8600,\r\n source: \"CardAction.tsx\",\r\n severity,\r\n pb\r\n },\r\n /** Post action failed (Like/Dislike) */\r\n CardActionPostActionError: {\r\n id: 8601,\r\n source: \"CarActionServiceClient.tsx\",\r\n severity,\r\n pb\r\n },\r\n /** Delete action failed (Unlike/Undislike) */\r\n CardActionDeleteActionError: {\r\n id: 8602,\r\n source: \"CardActionServiceClient.tsx\",\r\n severity,\r\n pb\r\n },\r\n /** Get action failed (GetPublisherDetails) */\r\n CardActionGetActionError: {\r\n id: 8603,\r\n source: \"CardActionServiceClient.tsx\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ContentRelatedSourceFile = \"ContentRelated.connector.ts\";\r\nexport const ContentRelatedErrors = {\r\n /**\r\n * Missing source Id error\r\n */\r\n MissingSourceIdError: {\r\n id: 8700,\r\n source: ContentRelatedSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Invalid sourceIdError\r\n */\r\n InvalidSourceIdError: {\r\n id: 8701,\r\n source: ContentRelatedSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Related contents feed fetch error\r\n */\r\n ContentRelatedFeedFetchError: {\r\n id: 8702,\r\n source: ContentRelatedSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst CookieConsentBannerHelper = \"MsccCookieConsentHelper.ts\";\r\nexport const CookieConsentBannerHelperErrors = {\r\n FailedToParseStaticsUrls: {\r\n id: 8810,\r\n source: CookieConsentBannerHelper,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n ScriptsNotFound: {\r\n id: 8811,\r\n source: CookieConsentBannerHelper,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n StyleSheetsNotFound: {\r\n id: 8812,\r\n source: CookieConsentBannerHelper,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n FailedToMountScript: {\r\n id: 8813,\r\n source: CookieConsentBannerHelper,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n FailedToMountStyleSheet: {\r\n id: 8814,\r\n source: CookieConsentBannerHelper,\r\n severity: Severity.HighImpact,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents IFrame related errors */\r\nconst IFrameSourceFile = \"IFrame.tsx\";\r\nexport const IFrameErrors = {\r\n /** Message recieved by event listener not from expected origin */\r\n IFrameUnallowedOriginMessage: {\r\n id: 8820,\r\n source: IFrameSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nexport const RightRailCarouselAppErrors = {\r\n NoChildrenExperienceFoundError: {\r\n id: 8830,\r\n source: \"RightRailCarousel.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst Cookies = \"Cookies.ts\";\r\nexport const CookieRelatedErrors = {\r\n SharedStateConnectorNull: {\r\n id: 8840,\r\n source: Cookies,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const BreakingNewsErrors = {\r\n /** Error fetching Breaking News content */\r\n ContentFetchError: {\r\n id: 8901,\r\n source: \"BreakingNews.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /** Error fetching Blowout content */\r\n BlowoutDocumentFetchError: {\r\n id: 8902,\r\n source: \"BreakingNews.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const BlowoutErrors = {\r\n /** Error fetching Blowout content */\r\n ContentFetchError: {\r\n id: 8921,\r\n source: \"Blowout.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const OverlayErrors: { [name: string]: AppError } = {\r\n /** Error loading experience */\r\n LoadExperienceError: {\r\n id: 8941,\r\n source: \"Overlay.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const ViewsCommonAppErrors = {\r\n /** Invalid intra article component metadata passed. */\r\n InvalidIntraArticleDataError: {\r\n id: 9001,\r\n source: \"IntraArticleHelper.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch from data api. */\r\n DataFetchError: {\r\n id: 9002,\r\n source: \"ViewsServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Invalid content markup encountered. */\r\n InvalidDocumentContentError: {\r\n id: 9003,\r\n source: \"ViewsUtility.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load views paddle data from data api. */\r\n ViewsPaddleDataLoadError: {\r\n id: 9004,\r\n source: \"ViewsPaddle.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Error during app initialization for views page experience. */\r\n ViewsErrorPage: {\r\n id: 9005,\r\n source: \"page.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Error during mapping provider data for views content header experience */\r\n ProviderMapperError: {\r\n id: 9006,\r\n source: \"ViewContentHeader.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const LegacySharingToolbarAppErrors = {\r\n /** Failed to invoke legacy sharing toolbar. */\r\n LegacySharingToolbarInvokeError: {\r\n id: 9100,\r\n source: \"SharingHelper.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load sharing toolbar. */\r\n SharingToolbarLoadError: {\r\n id: 9101,\r\n source: \"LegacySharingToolbar.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Invalid source content id passed in. */\r\n InvalidContentIdError: {\r\n id: 9102,\r\n source: \"LegacySharingToolbar.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents ContentActionsToolbar experience related errors */\r\nconst ContentActionsToolbarConnectorSourceFile = \"ContentActionToolbar.connector.ts\";\r\nconst ContentActionsToolbarSourceFile = \"ContentActionToolbar.tsx\";\r\nconst ContentActionsToolbarServiceClientSourceFile = \"ContentActionToolbarServiceClient.tsx\";\r\nexport const ContentActionsToolbarAppErrors = {\r\n /** Failed to load sharing toolbar - 9120 */\r\n ContentActionsSharingToolbarLoadError: {\r\n id: 9120,\r\n source: ContentActionsToolbarConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Error fetching article data - 9121 */\r\n ContentActionsArticleDatafetchError: {\r\n id: 9121,\r\n source: ContentActionsToolbarConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Base Experience error - 9122 */\r\n ContentActionsBaseExperienceError: {\r\n id: 9122,\r\n source: ContentActionsToolbarSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Get content views action failed (getContentViewsRequest) - 9123 */\r\n ContentActionsGetDocumentDataError: {\r\n id: 9123,\r\n source: ContentActionsToolbarServiceClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Get content status action failed (getContentStatusRequest) - 9124 */\r\n ContentActionsGetContentStatusActionError: {\r\n id: 9124,\r\n source: ContentActionsToolbarServiceClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Delete action failed (Unlike/Undislike) - 9125 */\r\n ContentActionsDeleteActionError: {\r\n id: 9125,\r\n source: ContentActionsToolbarServiceClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Post action failed (Like/Dislike) - 9126 */\r\n ContentActionsPostActionError: {\r\n id: 9126,\r\n source: ContentActionsToolbarServiceClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Prime hybrid error loading the experience - 9127 */\r\n ContentActionsExperienceLoadError: {\r\n id: 9127,\r\n source: ContentActionsToolbarSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Missing vert/horiz placeholder to flip toolbar - 9128 */\r\n ContentActionsFlipToolbarError: {\r\n id: 9128,\r\n source: ContentActionsToolbarSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Failed fetching contentStatus - 9129 */\r\n ContentActionsContentStatusFetchError: {\r\n id: 9129,\r\n source: ContentActionsToolbarServiceClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /** Failed fetching contentPreview - 9130 */\r\n ContentActionsContentPreviewFetchError: {\r\n id: 9130,\r\n source: ContentActionsToolbarServiceClientSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nexport const ContentSharingToolbarAppErrors = {\r\n ContentSharingToolbarInitializationError: {\r\n id: 9150,\r\n source: \"ContentSharingToolbar.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const ContentProviderAppErrors = {\r\n /** Invalid source article/gallery id passed in. */\r\n InvalidSourceIdError: {\r\n id: 9200,\r\n source: \"ContentProvider.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch provider details. */\r\n ProviderDetailsFetchError: {\r\n id: 9201,\r\n source: \"ContentProvider.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch provider feed. */\r\n ProviderFeedFetchError: {\r\n id: 9202,\r\n source: \"ContentProvider.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Invalid layout template passed in. */\r\n InvalidLayoutTemplate: {\r\n id: 9203,\r\n source: \"ContentProvider.templates.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** ApplicationCache related messages */\r\nconst refreshHeadDataFile = \"Appcache/RefreshHeadData.ts\";\r\nconst edgeAppCacheHelperFile = \"Appcache/EdgeApplicationCacheHelper.ts\";\r\n\r\nexport const ApplicationCacheMessages = {\r\n FailedToFetchHeadData: {\r\n id: 9310,\r\n source: refreshHeadDataFile,\r\n severity,\r\n pb\r\n },\r\n CatastrophicFailedToFetchHeadData: {\r\n id: 9311,\r\n source: refreshHeadDataFile,\r\n severity,\r\n pb\r\n },\r\n StaleActivityIdEncountered: {\r\n id: 9312,\r\n source: refreshHeadDataFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /**\r\n * The current DOM that is in AppCache doesn't match what should be getting served\r\n * to the user due to the existence of the ntps cookie that defines what the locale should be.\r\n * In this case, we must bypass AppCache to get the proper DOM from PCS.\r\n */\r\n LocaleMismatch: {\r\n id: 9313,\r\n source: edgeAppCacheHelperFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n /**\r\n * Our checks determining we need to bypass appcache for the user are failing\r\n * to detect that the appcache refresh has succeeded. We've tried, for the current page view, to\r\n * bypass without any success.\r\n */\r\n RapidAppcacheForcedRefreshes: {\r\n id: 9314,\r\n source: edgeAppCacheHelperFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n FailedToReadFromStorage: {\r\n id: 9315,\r\n source: refreshHeadDataFile,\r\n severity,\r\n pb\r\n },\r\n FailedToWriteToStorage: {\r\n id: 9316,\r\n source: refreshHeadDataFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst MsRewardsConnectorSourceFile = \"MsRewards.connector.ts\";\r\nexport const MsRewardsAppErrors = {\r\n RewardsDataConnectorUndefined: {\r\n id: 9400,\r\n source: MsRewardsConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n CategoryKeyOrAppTypeUndefined: {\r\n id: 9401,\r\n source: MsRewardsConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n FailedToFetchCoachmarkUXConfig: {\r\n id: 9402,\r\n source: MsRewardsConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n ConfigDataUndefined: {\r\n id: 9403,\r\n source: MsRewardsConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n FailedToFetchConfigData: {\r\n id: 9404,\r\n source: MsRewardsConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n ExceptionFetchingConfigData: {\r\n id: 9405,\r\n source: MsRewardsConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n ChromiumPageSettingsDataConnectorUndefined: {\r\n id: 9406,\r\n source: MsRewardsConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n PageSettingsStateUndefined: {\r\n id: 9407,\r\n source: MsRewardsConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst RewardsDataConnectorSourceFile = \"RewardsData.connector.ts\";\r\nconst RewardsPayloadSourceFile = \"RewardsPayload.ts\";\r\nconst RewardsServiceClientSourceFile = \"RewardsServiceClient.ts\";\r\nexport const RewardsDataAppErrors = {\r\n InvalidCreative: {\r\n id: 9420,\r\n source: RewardsPayloadSourceFile,\r\n severity,\r\n pb\r\n },\r\n IrisDataConnectorUndefined: {\r\n id: 9421,\r\n source: IrisHandlerSourceFile,\r\n severity,\r\n pb\r\n },\r\n ErrorFoundForSurface: {\r\n id: 9423,\r\n source: IrisHandlerSourceFile,\r\n severity,\r\n pb\r\n },\r\n CoachmarkDataConnectorUndefined: {\r\n id: 9424,\r\n source: RewardsDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n ErrorFetchingUserProfile: {\r\n id: 9425,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ExceptionFetchingUserProfile: {\r\n id: 9426,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ExceptionReportingRewardActivity: {\r\n id: 9427,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BadRequestReportingRewardActivity: {\r\n id: 9428,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n OfferIdNotDefined: {\r\n id: 9429,\r\n source: RewardsDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n ActionNameNotDefined: {\r\n id: 9430,\r\n source: RewardsDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n InvalidParameters: {\r\n id: 9431,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n UnknownErrorsReportingRewardActivity: {\r\n id: 9432,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n UnknownErrorOccurred: {\r\n id: 9433,\r\n source: RewardsServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n MaxRetryReachedForUpdatingRewardsPoints: {\r\n id: 9434,\r\n source: RewardsDataConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ViewsGallerySourceFile = \"ViewsGallery.connector.ts\";\r\nexport const ViewsGalleryAppErrors = {\r\n /** Invalid gallery id passed. */\r\n InvalidGalleryIdError: {\r\n id: 10001,\r\n source: ViewsGallerySourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load gallery data. */\r\n GalleryDataLoadError: {\r\n id: 10010,\r\n source: ViewsGallerySourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load images. */\r\n GalleryImagesLoadError: {\r\n id: 10020,\r\n source: ViewsGallerySourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst SlideShowConnectorFile = \"SlideShow.connector.ts\";\r\nconst SlideShowCarouselFile = \"SlideShowCarousel.tsx\";\r\nexport const SlideShowAppErrors = {\r\n /** Invalid slideshow id passed. */\r\n InvalidSlideShowIdError: {\r\n id: 10100,\r\n source: SlideShowConnectorFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load slideshow data. */\r\n SlideShowDataLoadError: {\r\n id: 10110,\r\n source: SlideShowConnectorFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load images. */\r\n SlideShowImagesLoadError: {\r\n id: 10120,\r\n source: SlideShowConnectorFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to ads refresh. */\r\n SlideShowAdsRefreshError: {\r\n id: 10130,\r\n source: SlideShowCarouselFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load image. */\r\n SlideShowImageLoadFailed: {\r\n id: 10135,\r\n source: SlideShowCarouselFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const VideoListAppErrors = {\r\n /** Failed to load the video list data. */\r\n VideoListDataLoadError: {\r\n id: 11001,\r\n source: \"VideoList.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst VideoContentSourceFile = \"VideoContent.connector.ts\";\r\nexport const VideoContentAppErrors = {\r\n /** Failed to load the video content data. */\r\n InvalidResponseFromVideoContentResponseJson: {\r\n id: 11101,\r\n source: VideoContentSourceFile,\r\n severity\r\n },\r\n /** Failed to fetch the video content data from server. */\r\n ErrorWhileFetchingContentPreviewContent: {\r\n id: 11102,\r\n source: VideoContentSourceFile,\r\n severity\r\n }\r\n};\r\n\r\nconst ViewsArticleSourceFile = \"ViewsArticle.connector.ts\";\r\nexport const ViewsArticleAppErrors = {\r\n /** Invalid article id passed. */\r\n InvalidArticleIdError: {\r\n id: 12001,\r\n source: ViewsArticleSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load article data. */\r\n ArticleDataLoadError: {\r\n id: 12002,\r\n source: ViewsArticleSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load intra-article component. */\r\n IntraArticleComponentLoadError: {\r\n id: 12003,\r\n source: ViewsArticleSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to invoke inline gallery experience. */\r\n InlineGalleryInvokeError: {\r\n id: 12004,\r\n source: ViewsArticleSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const InterestsSearchAppErrors = {\r\n /** Received non 200 from OneService */\r\n ErrorResponseFromOneService: {\r\n id: 13000,\r\n source: \"InterestsSearchServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n /** Received a response from 200 but didn't have expected structure */\r\n ErrorResponseFromOneServiceIsInvalid: {\r\n id: 13001,\r\n source: \"InterestsSearchServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n /**\r\n * When building the XFeed URL for one of the suggestion items,\r\n * we weren't able to build a valid URL\r\n */\r\n InvalidUrlFoundForElement: {\r\n id: 13002,\r\n source: \"InterestsSearch.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /**\r\n * When building the XFeed URL for one of the suggestion items,\r\n * we weren't able to build a valid URL\r\n */\r\n SelectedItemNotFoundInSuggestions: {\r\n id: 13003,\r\n source: \"InterestsSearch.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n /**\r\n * When building the XFeed URL for one of the suggestion items,\r\n * we weren't able to build a valid URL\r\n */\r\n SelectedItemIsInvalid: {\r\n id: 13004,\r\n source: \"InterestsSearch.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst InterestsConnectorFileName = \"Interests.connector.ts\";\r\nconst TopicCacheFileName = \"TopicCache.ts\";\r\nconst XfeedConnectorFileName = \"Xfeed.connector.ts\";\r\nexport const InterestsAppErrors = {\r\n /** We could not retrieve the list of Topics from OneService */\r\n InterestsRetrieveTopicsError: {\r\n id: 13100,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not retrieve the user's list of Followed Topics from OneService */\r\n InterestsRetrieveFollowedTopicsError: {\r\n id: 13101,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not retrieve the user's list of Muted Publishers from OneService */\r\n InterestsRetrieveMutedPublishersError: {\r\n id: 13102,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not UnMute a Muted Publisher */\r\n InterestsUnMutePublisherError: {\r\n id: 13103,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not follow a new interests topic */\r\n InterestsFollowTopicError: {\r\n id: 13104,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not unfollow an interests topic */\r\n InterestsUnfollowTopicError: {\r\n id: 13105,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** TopicState should not be undefined */\r\n InterestsTopicStateUndefined: {\r\n id: 13106,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Topics should have rendered */\r\n InterestsShouldHaveRendered: {\r\n id: 13107,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Could not retrieve a specific topic */\r\n InterestsRetrieveTopicError: {\r\n id: 13108,\r\n source: XfeedConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not retrieve the user's list of Saved Stories from OneService */\r\n InterestsRetrieveSavedStoriesError: {\r\n id: 13109,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Saved stories config is invalid */\r\n InterestsSavedStoriesInvalidConfigError: {\r\n id: 13110,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not load saved stories children */\r\n InterestsSavedStoriesChildLoadError: {\r\n id: 13111,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** OneService response for saved stories had invalid json */\r\n InterestsSavedStoriesInvalidJsonError: {\r\n id: 13112,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** OneService response for saved stories had invalid list of response */\r\n InterestsSavedStoriesInvalidListError: {\r\n id: 13113,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not retrieve the user's list of Recommended Topics from OneService */\r\n InterestsRetrieveRecommendedTopicsError: {\r\n id: 13114,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Topic Data Connector is not defined */\r\n UndefinedTopicDataConnector: {\r\n id: 13115,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not retrieve the user's list of Read Stories from OneService */\r\n InterestsRetrieveReadStoriesError: {\r\n id: 13116,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Read stories config is invalid */\r\n InterestsReadStoriesInvalidConfigError: {\r\n id: 13117,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** We could not load Read stories children */\r\n InterestsReadStoriesChildLoadError: {\r\n id: 13118,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** OneService response for Read stories had invalid json */\r\n InterestsReadStoriesInvalidJsonError: {\r\n id: 13119,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** OneService response for Read stories had invalid list of response */\r\n InterestsReadStoriesInvalidListError: {\r\n id: 13120,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** OneService failed resetting user default set of interests */\r\n FailedRestoringDefaultTopicsError: {\r\n id: 13121,\r\n source: InterestsConnectorFileName,\r\n severity,\r\n pb\r\n },\r\n /** Failed opening topics IndexedDB connection */\r\n TopicsFailedIndexedDBConnection: {\r\n id: 13122,\r\n source: TopicCacheFileName,\r\n severity,\r\n pb\r\n },\r\n /** Failed getting topics indexedDB */\r\n TopicsFailedGettingIndexedDB: {\r\n id: 13123,\r\n source: TopicCacheFileName,\r\n severity,\r\n pb\r\n },\r\n /** Failed updating topics indexedDB */\r\n TopicsFailedUpdatingIndexedDB: {\r\n id: 13124,\r\n source: TopicCacheFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** {ComponentConnector} base app errors */\r\nexport const ComponentConnectorAppErrors = {\r\n\r\n /** Duplicate child experience instance found */\r\n DuplicateChildInstanceFound: {\r\n id: 14000,\r\n source: \"ComponentConnector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load bundle */\r\n BundleLoadError: {\r\n id: 14001,\r\n source: \"ComponentConnector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** ChildConfigInfoList is null */\r\n ChildConfigInfoListNull: {\r\n id: 14002,\r\n source: \"ComponentConnector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Merge List start position must be greater than 0 */\r\n ListStartPositionInvalid: {\r\n id: 14003,\r\n source: \"ComponentConnector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to delay load child bundle */\r\n ChildDelayLoadError: {\r\n id: 14004,\r\n source: \"ComponentConnector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Milestone dependency failed to resolve and timeout triggered */\r\n ExperienceDependencyTimeout: {\r\n id: 14005,\r\n source: \"ComponentConnector.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\n/** App errors for {ExperienceLoader} */\r\nexport const ExperienceLoaderAppErrors = {\r\n /** Logged when neither the config type nor config HREF was provided to the loader */\r\n InsufficientLoadArgs: {\r\n id: 14100,\r\n source: \"ExperienceLoader.ts\",\r\n severity: Severity.HighImpact,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents SearchHistoryCommon related App errors */\r\nconst SearchHistoryCommonSourceFile = \"SearchHistoryCommon.tsx\";\r\nexport const SearchHistoryCommonAppErrors = {\r\n /** Failed to parse search history response */\r\n ResponseParsingFailed: {\r\n id: 15000,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Search history service call failed */\r\n ServiceCallFailed: {\r\n id: 15001,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to render search history */\r\n RenderFailed: {\r\n id: 15002,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Search history api response not received within configured time */\r\n Timeout: {\r\n id: 15003,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Search history api call unauthorized */\r\n Unauthorized: {\r\n id: 15004,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Search history api call forbidden */\r\n Forbidden: {\r\n id: 15005,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Search history api not able to find recent search associated with this request */\r\n NotFound: {\r\n id: 15006,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Search history api response not received within configured time but wait for searchHistoryFetchPromise to be completed */\r\n TimeoutDetail: {\r\n id: 15007,\r\n source: SearchHistoryCommonSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents search history edgenext failed to render */\r\nexport const SearchHistoryEdgenextRenderFailed: AppError = {\r\n id: 15008,\r\n source: \"SearchHistoryEdgenext.tsx\",\r\n severity: Severity.HighImpact,\r\n pb\r\n};\r\n\r\n/** Represents failed to retrieve account type */\r\nexport const FailedToRetrieveAccountType: AppError = {\r\n id: 15009,\r\n source: \"SearchHistoryEdgenext.connector.ts\",\r\n severity: Severity.HighImpact,\r\n pb\r\n};\r\n\r\n/** Represents a Search related error */\r\nexport const SearchError: AppError = {\r\n id: 15100,\r\n source: \"SearchBox.tsx\",\r\n severity: Severity.HighImpact,\r\n pb\r\n};\r\n\r\n/** Represents missing form code/parameters related App errors */\r\nexport const MissingFormCode: AppError = {\r\n id: 15101,\r\n source: \"SearchBoxCommon.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents RecommendedSearch related App errors */\r\nconst RecommendedSearchSourceFile = \"RecommendedSearchDataService.ts\";\r\nexport const RecommendedSearchErrors = {\r\n /** Warning for failed to parse recommended search response */\r\n ResponseParsingFailed: {\r\n id: 15200,\r\n source: RecommendedSearchSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** warning for recommended search service returned invalid Json response */\r\n InvalidJsonResponse: {\r\n id: 15201,\r\n source: RecommendedSearchSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Warning for recommended search service call failed */\r\n ServiceCallFailed: {\r\n id: 15202,\r\n source: RecommendedSearchSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Failed to render recommended searches */\r\n RenderFailed: {\r\n id: 15203,\r\n source: RecommendedSearchSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Warning for recommended search api response not received within configured time */\r\n Timeout: {\r\n id: 15204,\r\n source: RecommendedSearchSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** recommended search back fill failed to fetch content from CMS */\r\n ContentFetchError: {\r\n id: 15205,\r\n source: RecommendedSearchSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Trending Now related app errors */\r\nconst TrendingNowSourceFile = \"TrendingNow.connector.ts\";\r\nexport const TrendingNowErrors = {\r\n /** Failed to fetch Trending now content from CMS */\r\n ContentFetchError: {\r\n id: 15250,\r\n source: TrendingNowSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to fetch child experience config */\r\n FailedToFetchConfig: {\r\n id: 15251,\r\n source: TrendingNowSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load child experience */\r\n FailedToLoadChildExperience: {\r\n id: 15252,\r\n source: TrendingNowSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PollsCardConnectorSourceFile = \"PollsCard.connector.ts\";\r\nexport const PollsCardAppErrors = {\r\n /**\r\n * Failed to fetch polls list\r\n */\r\n PollsListFetchError: {\r\n id: 18000,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Failed to fetch poll data\r\n */\r\n PollDataFetchError: {\r\n id: 18001,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * No data{questions} for poll\r\n */\r\n PollsCardInvalidPoll: {\r\n id: 18002,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Invalid Poll Quiz\r\n */\r\n PollsCardInvalidQuizPoll: {\r\n id: 18003,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * PollsVoteError\r\n */\r\n PollsCardVoteError: {\r\n id: 18004,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * PollsMapStateToPropsError\r\n */\r\n PollsCardMapStateToPropsError: {\r\n id: 18005,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * PollsUnknownError\r\n */\r\n PollsUnknownError: {\r\n id: 18006,\r\n source: PollsCardConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const EdgeNextAppErrors = {\r\n /**\r\n * Error during app initialization for EdgeNext page experience.\r\n */\r\n EdgeNextErrorPage: {\r\n id: 19000,\r\n source: \"page.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Error fetching the APP_ANON cookie on EdgeNext page load */\r\n ErrorFetchingAppAnonCookie: {\r\n id: 19001,\r\n source: \"page.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up showing the local ntp page on bundle syntax errors.\r\n */\r\n EdgeNextLocalNTPPageShownSyntaxErrors: {\r\n id: 19002,\r\n source: \"page.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up showing the local ntp page on bundle failures.\r\n */\r\n EdgeNextLocalNTPPageShownBundleFailureErrors: {\r\n id: 19003,\r\n source: \"page.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up showing the local ntp page on page exception.\r\n */\r\n EdgeNextLocalNTPPageShownPageExceptionError: {\r\n id: 19004,\r\n source: \"page.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up showing the local ntp page on page exception.\r\n */\r\n EdgeNextLocalNTPPageShownJSSMismatchExceptionError: {\r\n id: 19005,\r\n source: \"page.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up reloading the NTP page on jss mismatch exception.\r\n */\r\n EdgeNextPageReloadedPageExceptionError: {\r\n id: 19010,\r\n source: \"page.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up reloading the NTP page on jss mismatch exception.\r\n */\r\n EdgeNextPageReloadedJSSMismatchExceptionError: {\r\n id: 19011,\r\n source: \"PersistRenderCache.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst AdRefreshSourceFile = \"AdsRefresh.ts\";\r\nconst ApnWrapperSourceFile = \"AppnexusWrapper.ts\";\r\nconst DisplayAdsAdsDetectionSourceFile = \"AdsDetection.ts\";\r\nconst DisplayAdsConnectorSourceFile = \"DisplayAds.connector.ts\";\r\nconst DisplayAdsManagerConnectorSourceFile = \"DisplayAdsManager.connector.ts\";\r\nconst NativeAdConnectorSourceFile = \"NativeAd.connector.ts\";\r\nconst OathWrapperSourceFile = \"OathAdsWrapper.ts\";\r\nconst PlacementManagerConnectorSourceFile = \"PlacementManager.connector.ts\";\r\nconst PlacementManagerCookieSyncSourceFile = \"PlacementManagerCookieSync.ts\";\r\nconst PlacementManagerCMSServiceSourceFile = \"PlacementManagerCMSService.ts\";\r\nconst NativeAdClientConnectorSourceFile = \"NativeAdClient.connector.ts\";\r\nconst PartnerScriptLoaderFile = \"PartnerScriptLoader.ts\";\r\nconst NativeAdBeaconSourceFile = \"Beacon.ts\";\r\n\r\nexport const MonetizationAppErrors = {\r\n /** Failed to load Placement Manager. */\r\n PlacementManagerLoadError: {\r\n id: 20000,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load arrangement position on native ad experience. */\r\n ArrangementPositionLoadError: {\r\n id: 20001,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get CMS Content. */\r\n GetCMSContentError: {\r\n id: 20002,\r\n source: PlacementManagerCMSServiceSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get SAM RTB Response. */\r\n GetSAMRTBResponseError: {\r\n id: 20003,\r\n source: PlacementManagerConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load MediaNet End Of Article Block. */\r\n MediaNetEOABError: {\r\n id: 20005,\r\n source: \"medianetNativeAdOnArticle.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** Invalid promo module config */\r\n InvalidPromoModuleConfig: {\r\n id: 20006,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to download cookie sync external script. */\r\n CookieSyncDownloadExternalScriptError: {\r\n id: 20007,\r\n source: PlacementManagerCookieSyncSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Missing cookie sync external script. */\r\n CookieSyncMissingExternalScriptUrl: {\r\n id: 20008,\r\n source: PlacementManagerCookieSyncSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Cookie sync timeout. */\r\n CookieSyncTimeout: {\r\n id: 20009,\r\n source: PlacementManagerCookieSyncSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Cookie sync partner script error */\r\n CookieSyncPartnerScriptError: {\r\n id: 20010,\r\n source: PlacementManagerCookieSyncSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Cookie pixel sync partner download error */\r\n CookieSyncPixelPartnerDownloadError: {\r\n id: 20011,\r\n source: PlacementManagerCookieSyncSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load cms or backfill native ad. */\r\n CMSOrBackfillNativeAdLoadError: {\r\n id: 20012,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Missing required property on placement manager config */\r\n MissingRequiredPropertyPlacementManagerConfig: {\r\n id: 20014,\r\n source: PlacementManagerConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Missing page type target scope. */\r\n NativeAdTargetScopeError: {\r\n id: 20016,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** River video ad partner error. */\r\n RiverVideoAdPartnerError: {\r\n id: 20017,\r\n source: PartnerScriptLoaderFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** JsTracker ad partner script load error. */\r\n JsTrackerPartnerScriptLoadError: {\r\n id: 20018,\r\n source: NativeAdBeaconSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Viglink load error. */\r\n ViglinkError: {\r\n id: 20019,\r\n source: PartnerScriptLoaderFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Missing topic id for stripe native ad */\r\n MissingTopicId: {\r\n id: 20020,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Topic id not found for stripe native ad */\r\n TopicIdNotFound: {\r\n id: 20021,\r\n source: NativeAdConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to get SAM RTB Response. This App error doesn't trigger alert */\r\n GetSAMRTBResponseErrorNoAlert: {\r\n id: 20022,\r\n source: PlacementManagerConnectorSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Failed to load Oath JS */\r\n DisplayAdsOathLoadError: {\r\n id: 20050,\r\n source: OathWrapperSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Failed to load AppNexus JS */\r\n DisplayAdsApnLoadError: {\r\n id: 20051,\r\n source: ApnWrapperSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** AppNexus Provider was empty */\r\n DisplayAdsApnEmptyProvider: {\r\n id: 20052,\r\n source: ApnWrapperSourceFile,\r\n severity: Severity.Alert\r\n },\r\n\r\n /** Ads Detection no initialized properly Provider was empty */\r\n DisplayAdsAdsDetectionNotInit: {\r\n id: 20053,\r\n source: DisplayAdsAdsDetectionSourceFile,\r\n severity: Severity.Alert,\r\n pb\r\n },\r\n\r\n /** Failed to load Moat JS */\r\n DisplayAdsMoatLoadError: {\r\n id: 20054,\r\n source: DisplayAdsManagerConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Display ad objects were not available for refresh */\r\n DisplayAdsNoAdObjects: {\r\n id: 20055,\r\n source: AdRefreshSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** There was a problem in encoding CMS provider ID from base 62 to 32 */\r\n DisplayAdsProviderIdEncode: {\r\n id: 20056,\r\n source: DisplayAdsConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const TaboolaRiverAppErrors = {\r\n /** Failed to fetch taboola river data. */\r\n TaboolaRiverFetchError: {\r\n id: 20100,\r\n source: \"TaboolaRiver.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PCSPageHTMLFile = \"PCS-Page.cshtml\";\r\nexport const CoreLibAppErrors = {\r\n /** Deprecated composition layout config in use */\r\n DeprecatedCompositionLayoutUsed: {\r\n id: 20200,\r\n source: \"LayoutBase.inspector.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Deprecated composition layout config in use */\r\n InvalidColumnInGridConfig: {\r\n id: 20201,\r\n source: \"GridBase.inspector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error during loading of page bundles.\r\n */\r\n ErrorLoadingBundle: {\r\n id: 20202,\r\n source: PCSPageHTMLFile,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n\r\n /**\r\n * Generic JS exceptions.\r\n */\r\n GenericJSException: {\r\n id: 20203,\r\n source: PCSPageHTMLFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Missing localStorage exception\r\n */\r\n LocalStorageDoesntExist: {\r\n id: 20204,\r\n source: \"WebStorage.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Missing sessionStorage exception\r\n */\r\n SessionStorageDoesntExist: {\r\n id: 20205,\r\n source: \"WebStorage.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Authenticatedfetch related App errors */\r\nconst AuthenticatedFetchSourceFile = \"AuthenticatedFetch.ts\";\r\nexport const AuthenticatedFetchErrors = {\r\n ErrorCodeReceived: {\r\n id: 20302,\r\n source: AuthenticatedFetchSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n CallFailed: {\r\n id: 20303,\r\n source: AuthenticatedFetchSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst resolverSourceFile = \"resolver.ts\";\r\nexport const ResolverAppErrors = {\r\n /**\r\n * IndexedDb write failed in resolver.\r\n */\r\n IndexedDbWriteFailed: {\r\n id: 22010,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * IndexedDb read failed in resolver.\r\n */\r\n IndexedDbReadFailed: {\r\n id: 22011,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Config Service Resolver fetch failed.\r\n */\r\n CrsFetchFailed: {\r\n id: 22012,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Config Service Resolver was enabled but we still went to Assets to getConfig and merge configs at client (classic resolver).\r\n */\r\n ReceivedConfigFromCdnAsCrsFetchFailed: {\r\n id: 22013,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Exception In GetConfig function.\r\n */\r\n GetConfigException: {\r\n id: 22014,\r\n source: resolverSourceFile,\r\n severity: Severity.HighImpact,\r\n pb\r\n },\r\n\r\n /**\r\n * IndexedDb bulk read failed in resolver.\r\n */\r\n IndexedDbBulkReadFailed: {\r\n id: 22015,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * IndexedDb failed to remove cached config\r\n */\r\n IndexedDbFailedToRemoveCachedConfig: {\r\n id: 22016,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * IndexedDb failed to clear all configs\r\n */\r\n IndexedDbFailedToClearAllCachedConfigs: {\r\n id: 22017,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Render cache is purged due to changes in config\r\n */\r\n RenderCachePurgedDueToChangesInConfig: {\r\n id: 22018,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Render cache failed purge even though config changes were detected.\r\n */\r\n FailedToPurgeRenderCache: {\r\n id: 22019,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Failed to refresh config cache\r\n */\r\n RefreshConfigCacheFailed: {\r\n id: 22020,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Failed to initialize indexedDb\r\n */\r\n IndexedDbInitFailed: {\r\n id: 22021,\r\n source: resolverSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Different cache busting identifier\r\n */\r\n DifferentCbid: {\r\n id: 22022,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error writing prg flights to localStorage\r\n */\r\n PrgFlightLsWriteError: {\r\n id: 22023,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error reading prg flights to localStorage\r\n */\r\n PrgFlightLsReadError: {\r\n id: 22024,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * Configs served from CDN after CRS fetch failed\r\n */\r\nexport const ResolverErrorConfigsDownloadedByCdn: AppError = {\r\n id: 22025,\r\n source: resolverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const HubAppErrors = {\r\n /**\r\n * Error during app initialization for hub page experience.\r\n */\r\n HubErrorPage: {\r\n id: 22100,\r\n source: \"page.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst EdgePageFileName = \"Edge/page.ts\";\r\n\r\n/** Edge App Type errors. */\r\nexport const EdgeAppErrors = {\r\n ErrorFetchingChildCookie: {\r\n id: 23000,\r\n source: EdgePageFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error during app initialization for Edge page experience.\r\n */\r\n EdgeErrorPage: {\r\n id: 23001,\r\n source: EdgePageFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error fetching the APP_ANON cookie on Edge page load\r\n */\r\n ErrorFetchingAppAnonCookie: {\r\n id: 23002,\r\n source: EdgePageFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const BingCardsAppErrors = {\r\n BingCardGetHotelAnswersError: {\r\n id: 24001,\r\n source: \"BingCardsServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n BingCardGetHotelErrorFromService: {\r\n id: 24002,\r\n source: \"BingCardsServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n BingCardGetAnswersError: {\r\n id: 24003,\r\n source: \"BingCardsExperience.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n BingCardInvalidEntityType: {\r\n id: 24004,\r\n source: \"BingCardsExperience.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n BingCardErrorOut: {\r\n id: 24005,\r\n source: \"BingCardsExperience.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const BingAnswersAppErrors = {\r\n UnknownError: {\r\n id: 24101,\r\n source: \"BingAnswers.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n FailedToLoadData: {\r\n id: 24102,\r\n source: \"BingAnswers.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n NoCardsContentType: {\r\n id: 24103,\r\n source: \"BingAnswers.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n NoCardsRelated: {\r\n id: 24104,\r\n source: \"BingAnswers.connector.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\nconst BingShoppingShopCardServiceClientSourceFile =\r\n \"bing-shopping/ShopCardServiceClient.ts\";\r\n\r\nexport const BingShoppingShopCardError = {\r\n ShopCardServiceFetchError: {\r\n id: 24200,\r\n source: BingShoppingShopCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShopCardServiceFetchInvalidResponse: {\r\n id: 24201,\r\n source: BingShoppingShopCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShopCardServiceEmptyPersonalizedResponse: {\r\n id: 24202,\r\n source: BingShoppingShopCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShopCardServiceInvalidPersonalizedResponse: {\r\n id: 24203,\r\n source: BingShoppingShopCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShopCardServiceEmptyTrendingResponse: {\r\n id: 24204,\r\n source: BingShoppingShopCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShopCardServiceInvalidTrendingResponse: {\r\n id: 24205,\r\n source: BingShoppingShopCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst BingShoppingLifestyleCardServiceClientSourceFile =\r\n \"bing-shopping-lifestyle-card/BingShoppingLifestyleCardServiceClient.ts\";\r\n\r\nconst BingShoppingLifestyleCardCdnServiceClientSourceFile =\r\n \"bing-shopping-lifestyle-card/BingShoppingLifestyleCardCdnServiceClient.ts\";\r\n\r\nconst BingShoppingLifestyleAutosuggestServiceClientSourceFile =\r\n \"bing-shopping-lifestyle-card/BingShoppingLifestyleAutosuggestServiceClient.ts\";\r\n\r\nconst BingShoppingLifestyleConnectorSourceFile =\r\n \"bing-shopping-lifestyle-card/BingShoppingLifestyleCard.connector.ts\";\r\nexport const BingShoppingLifestyleCardError = {\r\n // Lifestyle Shopcard service Errors\r\n LifestyleShopCardServiceFetchError: {\r\n id: 24300,\r\n source: BingShoppingLifestyleCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopCardServiceFetchInvalidResponse: {\r\n id: 24301,\r\n source: BingShoppingLifestyleCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopCardServiceEmptyResponse: {\r\n id: 24302,\r\n source: BingShoppingLifestyleCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopCardServiceInvalidResponse: {\r\n id: 24303,\r\n source: BingShoppingLifestyleCardServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n // Lifestyle Shopcard Cdn service Errors\r\n LifestyleShopCardCdnServiceFetchError: {\r\n id: 24304,\r\n source: BingShoppingLifestyleCardCdnServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopCardCdnServiceFetchInvalidResponse: {\r\n id: 24305,\r\n source: BingShoppingLifestyleCardCdnServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopCardCdnServiceInvalidResponse: {\r\n id: 24306,\r\n source: BingShoppingLifestyleCardCdnServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n // Lifestyle Autosuggest service Errors\r\n LifestyleShopAutosuggestServiceFetchError: {\r\n id: 24310,\r\n source: BingShoppingLifestyleAutosuggestServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopAutosuggestServiceFetchInvalidResponse: {\r\n id: 24311,\r\n source: BingShoppingLifestyleAutosuggestServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopAutosuggestServiceEmptyResponse: {\r\n id: 24312,\r\n source: BingShoppingLifestyleAutosuggestServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopAutosuggestServiceInvalidResponse: {\r\n id: 24313,\r\n source: BingShoppingLifestyleAutosuggestServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n LifestyleShopAutosuggestInvalidSuggestionUrl: {\r\n id: 24314,\r\n source: BingShoppingLifestyleConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ShoppingSmartListServiceClientSourceFile =\r\n \"shopping-smart-list/ShoppingSmartListServiceClient.ts\";\r\n\r\nconst ShoppingSmartListConnectorSourceFile =\r\n \"shopping-smart-list/ShoppingSmartList.connector.ts\";\r\n\r\nexport const ShoppingSmartListError = {\r\n ShoppingSmartListServiceEmptyResponse: {\r\n id: 24400,\r\n source: ShoppingSmartListServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShoppingSmartListServiceFetchError: {\r\n id: 24401,\r\n source: ShoppingSmartListServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShoppingSmartListServiceInvalidResponse: {\r\n id: 24402,\r\n source: ShoppingSmartListServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShoppingSmartListServiceMissingRequiredFields: {\r\n id: 24403,\r\n source: ShoppingSmartListServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n ShoppingSmartListChromiumApiConfigDataFetchFailure: {\r\n id: 24404,\r\n source: ShoppingSmartListConnectorSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst BingMiniShoppingServiceClientSourceFile =\r\n \"bing-mini-shopping/BingMiniShoppingServiceClient.ts\";\r\n\r\nexport const BingMiniShoppingError = {\r\n // Bing-MiniShopping service Errors\r\n BingMiniShoppingServiceFetchError: {\r\n id: 24500,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BingMiniShoppingServiceEmptyResponse: {\r\n id: 24501,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BingMiniShoppingServiceInvalidResponse: {\r\n id: 24502,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BingMiniShoppingServiceInsufficientDealsItems: {\r\n id: 24503,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BingMiniShoppingServiceInsufficientActiveDealsItems: {\r\n id: 24504,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BingMiniShoppingServiceInsufficientTrendingItems: {\r\n id: 24505,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n },\r\n BingMiniShoppingServiceInsufficientTrendingCategories: {\r\n id: 24506,\r\n source: BingMiniShoppingServiceClientSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst ShoppingCarouselServiceClientSourceFile =\r\n \"shopping-carousel/ShoppingCarouselServiceClient.ts\";\r\n\r\nexport const ShoppingCarouselEntitiesDataServiceFetchError: AppError = {\r\n id: 24520,\r\n source: ShoppingCarouselServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingCarouselEntitiesDataServiceEmptyResponse: AppError = {\r\n id: 24521,\r\n source: ShoppingCarouselServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingCarouselEntitiesDataServiceInvalidResponse: AppError = {\r\n id: 24522,\r\n source: ShoppingCarouselServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const ShoppingCarouselEntitiesDataServiceInsufficientItems: AppError = {\r\n id: 24523,\r\n source: ShoppingCarouselServiceClientSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const PageSettingsDataConnectorAppErrors = {\r\n PageSettingsGetInitialState: {\r\n id: 26001,\r\n source: \"PageSettingsData.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst MicrosoftNewsEntryPointFileName = \"MicrosoftNews.connector.ts\";\r\nexport const MicrosoftNewsEntryPointAppErrors = {\r\n /**\r\n * Error during app initialization for MicrosoftNews page experience.\r\n */\r\n MicrosoftNewsErrorPage: {\r\n id: 27000,\r\n source: MicrosoftNewsEntryPointFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const NavigationDataConnectorAppErrors = {\r\n /**\r\n * Error while trying to fetch the Navigation Items\r\n */\r\n NavigationDataGetNavigationItems: {\r\n id: 28000,\r\n source: \"NavigationData.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n NavigationDataIndexedDbInitializationFailed: {\r\n id: 28001,\r\n source: \"NavigationData.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n NavigationDataIndexedDbWriteFailed: {\r\n id: 28002,\r\n source: \"NavigationData.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n NavigationDataIndexedDbBulkReadFailed: {\r\n id: 28003,\r\n source: \"NavigationData.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const CategoryDataConnectorAppErrors = {\r\n /**\r\n * Error while to get the category details\r\n */\r\n CategoryDataGetCategoryDetail: {\r\n id: 28100,\r\n source: \"CategoryData.connector.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n CategoryDataIndexedDbInitializationFailed: {\r\n id: 28101,\r\n source: \"CategoryData.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n CategoryDataIndexedDbWriteFailed: {\r\n id: 28102,\r\n source: \"CategoryData.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n CategoryDataIndexedDbBulkReadFailed: {\r\n id: 28103,\r\n source: \"CategoryData.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * App reporting messages related to OneService Content Data Connector\r\n */\r\nexport const OneServiceContentDataConnector = {\r\n /**\r\n * Message sent when a feature tries to update\r\n * the cache bypass value but the connector was not initialized\r\n * for the page\r\n */\r\n FailedToUpdateBypassValueConnectorNotInitialized: {\r\n id: 28200,\r\n source: \"OneServiceContentHelper.ts\",\r\n severity,\r\n pb\r\n },\r\n /**\r\n * Message sent when a feature tries to update\r\n * the cache bypass value but the connector was not initialized\r\n * for the page\r\n */\r\n FailedToGetBypassValueConnectorNotInitialized: {\r\n id: 28201,\r\n source: \"OneServiceContentHelper.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * App reporting messages related to Stripe Experience\r\n */\r\nexport const StripeAppErrors = {\r\n InvalidConfig: {\r\n id: 28300,\r\n source: \"Stripe.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const NotificationBellErrors = {\r\n /** Failed to fetch the notification bell data content */\r\n DataFetchError: {\r\n id: 28400,\r\n source: \"NotificationBell.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n JsonParseError: {\r\n id: 28401,\r\n source: \"LocalStorageSettings.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n NewsItemDataFetchError: {\r\n id: 28402,\r\n source: \"NotificationBellServiceClient.ts\",\r\n severity,\r\n pb\r\n },\r\n MalformedNewsItemResponseError: {\r\n id: 28403,\r\n source: \"NotificationBellServiceClient.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Layout Preference Data Connector related App errors */\r\nconst LayoutPreferenceDataSourceFile = \"LayoutPreferenceData.connector.ts\";\r\nexport const LayoutPreferenceDataErrors = {\r\n /** Failed to retrieve Layout Preference Data */\r\n LayoutPreferenceDataGetFailed: {\r\n id: 28500,\r\n source: LayoutPreferenceDataSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * App reporting messages related to StripeView Experience\r\n */\r\nexport const StripeViewAppErrors = {\r\n InvalidConfig: {\r\n id: 28600,\r\n source: \"StripeView.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n ChildLoadError: {\r\n id: 28601,\r\n source: \"StripeView.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Sentiment Line Chart Connector related app errors */\r\nconst SentimentLineChartSourceFile = \"SentimentLineChart.connector.ts\";\r\nexport const SentimentLineChartErrors = {\r\n ContentFetchError: {\r\n id: 28700,\r\n source: SentimentLineChartSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Sentiment Result Card Connector related app errors */\r\nconst SentimentResultCardSourceFile = \"SentimentResultCard.connector.ts\";\r\nexport const SentimentResultCardErrors = {\r\n ContentFetchError: {\r\n id: 28710,\r\n source: SentimentResultCardSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Sentiment Map Connector related app errors */\r\nconst SentimentMapSourceFile = \"SentimentMap.connector.ts\";\r\nexport const SentimentMapErrors = {\r\n ContentFetchError: {\r\n id: 28720,\r\n source: SentimentMapSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Election Results Card Connector related app errors */\r\nconst ElectionResultsCardFile = \"ElectionResultsCard.connector.ts\";\r\nexport const ElectionResultsCardErrors = {\r\n ContentFetchError: {\r\n id: 28730,\r\n source: ElectionResultsCardFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Sentiment Bar chart Connector related app errors */\r\nconst SentimentBarChartSourceFile = \"SentimentBarChart.connector.ts\";\r\nexport const SentimentBarChartErrors = {\r\n ContentFetchError: {\r\n id: 28740,\r\n source: SentimentBarChartSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Elction Result Map connector App errors */\r\nconst ElectionResultMapConnectorSourceFile = \"ElectionResultMap.connector.ts\";\r\nexport const ElectionResultMapConnectorErrors = {\r\n UnknownError: {\r\n id: 28750,\r\n source: ElectionResultMapConnectorSourceFile,\r\n severity\r\n },\r\n\r\n ContentFetchError: {\r\n id: 28751,\r\n source: ElectionResultMapConnectorSourceFile,\r\n severity\r\n }\r\n};\r\n\r\n/** Elction Result Map Inspector App errors */\r\nconst ElectionResultMapInspectorSourceFile = \"ElectionResultMap.inspector.ts\";\r\nexport const ElectionResultMapInspectorErrors = {\r\n EmptyResultSummaryError: {\r\n id: 28752,\r\n source: ElectionResultMapInspectorSourceFile,\r\n severity\r\n }\r\n};\r\n/** Elction Result Map App errors */\r\nconst ElectionResultMapSourceFile = \"ElectionResultMap.tsx\";\r\nexport const ElectionResultMapErrors = {\r\n FetchAndUpdateElectionDataError: {\r\n id: 28753,\r\n source: ElectionResultMapSourceFile,\r\n severity\r\n }\r\n};\r\n\r\n/** Election Editor's Note App errors */\r\nexport const ElectionEditorsNoteErrors = {\r\n\r\n ContentFetchError: {\r\n id: 28760,\r\n source: \"ElectionEditorsNote.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents Election Delegate Counter related app errors */\r\nexport const ElectionDelegateCounterErrors = {\r\n ContentFetchError: {\r\n id: 28770,\r\n source: \"ElectionDelegateCounter.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * Topics hub - failed to fetch topic by name\r\n */\r\nexport const TopicByNameFetchFailed: AppError = {\r\n id: 28790,\r\n source: \"TopicsHub.connector.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * App reporting messages related to Partner Widget Experience\r\n */\r\nexport const PartnerWidgetAppErrors = {\r\n /** default breakpoint settings missing */\r\n DefaultBreakpointSettingsMissing: {\r\n id: 28801,\r\n source: \"PartnerWidget.connector.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n /** non whitelisted source url */\r\n NonWhitelistedSourceUrl: {\r\n id: 28802,\r\n source: \"PartnerWidget.connector.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents RecommendedSearch related App errors */\r\nconst RecommendedTopicsSourceFile = \"RecommendedTopics.connector.ts\";\r\nexport const RecommendedTopicsErrors = {\r\n /** Failed to connect to the Topics Data Connector */\r\n TopicsDataConnectorFailed: {\r\n id: 28901,\r\n source: RecommendedTopicsSourceFile,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Topic Clicked was null */\r\n InvalidTopicClick: {\r\n id: 28902,\r\n source: RecommendedTopicsSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst webWorkerSource = \"Web worker\";\r\nconst webWorkerUtility = \"WebWorkerUtility.ts\";\r\nexport const WebWorkerErrors = {\r\n /** Web worker script load error (404 response) */\r\n FileNotFound: {\r\n id: 29000,\r\n source: webWorkerUtility,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Web worker runtime error, fired by web worker on unhandled exceptions */\r\n RuntimeError: {\r\n id: 29001,\r\n source: webWorkerSource,\r\n severity,\r\n pb\r\n },\r\n\r\n /** Web worker message timeout */\r\n MessageTimeout: {\r\n id: 29002,\r\n source: webWorkerUtility,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /** Web worker handled errors. These are the errors received as messages from web worker */\r\n HandledError: {\r\n id: 29003,\r\n source: webWorkerSource,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PageTimingsSource = \"entry-point-shared-utils/src/PageTimings.ts\";\r\n/**\r\n * Indicates that for some reason the page never received all the perf markers it was waiting for\r\n * resulting in the timeout logic kicking in.\r\n */\r\nexport const WaitForAllPerfMarkersTimeoutInvoked: AppError = {\r\n id: 29100,\r\n source: PageTimingsSource,\r\n severity: Severity.Alert,\r\n pb\r\n};\r\n\r\n/**\r\n * Indicates that for some reason the page never received all the secondary perf markers\r\n * it was waiting for, resulting in the timeout logic kicking in.\r\n */\r\nexport const WaitForAllSecondaryPerfMarkersTimeoutInvoked: AppError = {\r\n id: 29101,\r\n source: PageTimingsSource,\r\n severity: Severity.Alert,\r\n pb\r\n};\r\n\r\nconst FirstPartyEntryPointFileName = \"FirstParty.connector.ts\";\r\nconst FirstPartyPageFileName = \"page.ts\";\r\nexport const FirstPartyEntryPointAppErrors = {\r\n /**\r\n * Error during app initialization for FirstParty page experience.\r\n */\r\n FirstPartyErrorPage: {\r\n id: 29200,\r\n source: FirstPartyEntryPointFileName,\r\n severity,\r\n pb\r\n },\r\n /** Error during initial SSO call, either the call failed of the user was not signed in */\r\n SSOFailedError: {\r\n id: 29250,\r\n source: FirstPartyPageFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst HomePageEntryPointFileName = \"HomePage.connector.ts\";\r\nconst HomePageFileName = \"page.ts\";\r\nexport const HomePageEntryPointAppErrors = {\r\n /**\r\n * Error during app initialization for Home page experience.\r\n */\r\n HomePageErrorPage: {\r\n id: 29300,\r\n source: HomePageEntryPointFileName,\r\n severity,\r\n pb\r\n },\r\n /** Error during initial SSO call, either the call failed of the user was not signed in */\r\n SSOFailedError: {\r\n id: 29301,\r\n source: HomePageFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst WindowsEntryPointFileName = \"Windows.connector.ts\";\r\nconst WindowsPageFileName = \"page.ts\";\r\n\r\nexport const WindowsEntryPointAppErrors = {\r\n /**\r\n * Error during app initialization for Windows page experience.\r\n */\r\n WindowsErrorPage: {\r\n id: 29400,\r\n source: WindowsEntryPointFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up showing the local ntp page on page exception.\r\n */\r\n WindowsPageShownPageExceptionError: {\r\n id: 29401,\r\n source: WindowsPageFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Tracking errors where we ended up reloading the NTP page on jss mismatch exception.\r\n */\r\n WindowsPageReloadedPageExceptionError: {\r\n id: 29402,\r\n source: WindowsPageFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error fetching the APP_ANON cookie on Windows page load\r\n */\r\n ErrorFetchingAppAnonCookie: {\r\n id: 29403,\r\n source: WindowsPageFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst WeatherAppEntrySourceFile = \"Weather.connector.ts\";\r\n/** Error during 'weather' app initialization. */\r\nexport const WeatherEntryPointAppError: AppError = {\r\n id: 29500,\r\n source: WeatherAppEntrySourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Fetch no data when search for locations from msn api */\r\nexport const WeatherLocationSearchNullError: AppError = {\r\n id: 29501,\r\n source: WeatherDataConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception to fetch search for locations from msn api */\r\nexport const WeatherLocationSearchFetchError: AppError = {\r\n id: 29502,\r\n source: WeatherDataConnectorSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst WindowsShellPage = \"page.ts\";\r\n/**\r\n * Windows Shell Page level exception was thrown\r\n */\r\nexport const WindowsShellPageError: AppError = {\r\n\r\n id: 29600,\r\n source: WindowsShellPage,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Windows Shell Page Error fetching the APP_ANON cookie\r\n */\r\nexport const WindowsShellPageErrorFetchingAppAnonCookie: AppError = {\r\n id: 29601,\r\n source: WindowsShellPage,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Auth related app messages (errors|warnings) */\r\nexport const AuthenticationAppMessages = {\r\n AuthRefreshBlockedError: {\r\n id: 33000,\r\n source: \"\",\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n /**\r\n * Error fetching the APP_ANON cookie\r\n */\r\n ErrorFetchingAppAnonCookie: {\r\n id: 33001,\r\n source: \"\",\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error during app initialization for migration consent\r\n */\r\n EstablishMigrationConsent: {\r\n id: 33010,\r\n source: \"EstablishMigrationConsent.ts\",\r\n severity,\r\n pb\r\n },\r\n\r\n MigrationConsentServiceClient: {\r\n id: 33011,\r\n source: \"MigrationConsentServiceClient.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Server side rendering error */\r\nexport const RenderServerError: AppError = {\r\n id: 34000,\r\n source: \"service-render-app.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nconst irisArcCallerFileName = \"Iris.arcCaller.ts\";\r\nconst irisArcParserFileName = \"Iris.arcParser.ts\";\r\nconst irisMasterFileName = \"Iris.master.ts\";\r\n\r\n/** Generic Unknown related to the Iris system. Investigate. */\r\nexport const AppError_IrisUnknown_35000: AppError = {\r\n id: 35000,\r\n source: \"Iris\",\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n/** The query parameters presented to the arc caller were found to be invalid. */\r\nexport const AppError_InvalidQParams_35001: AppError = {\r\n id: 35001,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_ArcCallFailed_35002: AppError = {\r\n id: 35002,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_ArcResponseNotOk_35003: AppError = {\r\n id: 35003,\r\n source: irisArcCallerFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\nexport const AppError_ArcResponseUnparsable_35004: AppError = {\r\n id: 35004,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_MissingAppEnv_35005: AppError = {\r\n id: 35005,\r\n source: irisArcCallerFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\nexport const AppError_UnknownIrisErrorFound_35006: AppError = {\r\n id: 35006,\r\n source: irisArcParserFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_TimeoutIrisErrorFound_35007: AppError = {\r\n id: 35007,\r\n source: irisArcParserFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_TemplateIrisErrorFound_35008: AppError = {\r\n id: 35008,\r\n source: irisArcParserFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_ClientErrorIrisErrorFound_35009: AppError = {\r\n id: 35009,\r\n source: irisArcParserFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_DSourceIrisErrorFound_35010: AppError = {\r\n id: 35010,\r\n source: irisArcParserFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_ActionCallFailure_35011: AppError = {\r\n id: 35011,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_ActionFetchFailure_35012: AppError = {\r\n id: 35012,\r\n source: irisArcCallerFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_ActionResponseFailure_35013: AppError = {\r\n id: 35013,\r\n source: irisArcCallerFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\nexport const AppError_UncaughtErrorDetected_35014: AppError = {\r\n id: 35014,\r\n source: irisMasterFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_UnconvertableCreative_35015: AppError = {\r\n id: 35015,\r\n source: irisMasterFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_InvalidResponseFormat_35016: AppError = {\r\n id: 35016,\r\n source: irisMasterFileName,\r\n severity,\r\n pb\r\n};\r\nexport const AppError_TimeoutErrorDiscovered_35017: AppError = {\r\n id: 35017,\r\n source: irisMasterFileName,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\nexport const AppError_UnparsableSingleResponseJSON_35018: AppError = {\r\n id: 35018,\r\n source: irisMasterFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents Iris data connector related App errors */\r\nconst IrisDataConnectorSourceFile = \"IrisData.connector.ts\";\r\nconst SubscriberValidatorSourceFile = \"SubscriberValidator.ts\";\r\nconst IrisPersistentStorageUtilityFile = \"IrisPersistentStorageUtility.ts\";\r\n\r\nexport const IrisDataConnectorErrors = {\r\n SubscriberNotFound: {\r\n id: 35117,\r\n source: SubscriberValidatorSourceFile,\r\n severity,\r\n pb\r\n },\r\n CreativeCountNegativeOrZero: {\r\n id: 35118,\r\n source: IrisDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n ErrorFetchingSurfaceInfo: {\r\n id: 35119,\r\n source: IrisDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n ErrorFoundForSurface: {\r\n id: 35120,\r\n source: IrisDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n SubscriberNotFoundInIrisPlacementDictionary: {\r\n id: 35121,\r\n source: IrisDataConnectorSourceFile,\r\n severity,\r\n pb\r\n },\r\n ConfigDataUndefined: {\r\n id: 35122,\r\n source: IrisPersistentStorageUtilityFile,\r\n severity,\r\n pb\r\n },\r\n FailedToFetchConfigData: {\r\n id: 35123,\r\n source: IrisPersistentStorageUtilityFile,\r\n severity,\r\n pb\r\n },\r\n ExceptionFetchingConfigData: {\r\n id: 35124,\r\n source: IrisPersistentStorageUtilityFile,\r\n severity,\r\n pb\r\n },\r\n FailedToReadNurturingAcceptedFlag: {\r\n id: 35125,\r\n source: IrisPersistentStorageUtilityFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents AccessTokens related App errors */\r\nconst AccessTokensSourceFile = \"AadAuthHelper.ts\";\r\nconst PivotContentErrorPlaceholderFile = \"AadErrorPlaceholder.tsx\";\r\nexport const EdgeChromiumAPIsNotAvailable: AppError = {\r\n id: 35200,\r\n source: AccessTokensSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const AcquireAccessTokenFailed: AppError = {\r\n id: 35201,\r\n source: AccessTokensSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\nexport const AcquireAccessTokenFailedForPivotContent: AppError = {\r\n id: 35202,\r\n source: PivotContentErrorPlaceholderFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents Render Cache errors*/\r\nconst PersistRenderCacheFile = \"PersistRenderCache.ts\";\r\nexport const RenderCacheErrors = {\r\n JssStyleMismatchWarning: {\r\n id: 35300,\r\n source: PersistRenderCacheFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n\r\n JssStyleCriticalMismatchError: {\r\n id: 35301,\r\n source: PersistRenderCacheFile,\r\n severity: Severity.Alert,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents OcvFeedbackData related App errors */\r\nconst OcvFeedbackDataSourceFile = \"OcvFeedbackData.ts\";\r\nexport const OcvFeedbackDataErrors = {\r\n UndefinedDataNotAvailable: {\r\n id: 35400,\r\n source: OcvFeedbackDataSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nexport const PivotHoverErrors = {\r\n /** Failed to fetch feed summary data for the Pivot Hover list. */\r\n FeedSummaryFetchError: {\r\n id: 35500,\r\n source: \"FeedSummaryFetcher.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst PreloadActionHelpers = \"PreloadActionHelpers.ts\";\r\nexport const PreloadReportingMessages = {\r\n TtvrMissing: {\r\n id: 35600,\r\n source: PreloadActionHelpers,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n TfprMissing: {\r\n id: 35601,\r\n source: PreloadActionHelpers,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n TtvrSearchBoxMissing: {\r\n id: 35602,\r\n source: PreloadActionHelpers,\r\n severity: Severity.NoAlert,\r\n pb\r\n },\r\n TtfSearchBoxMissing: {\r\n id: 35603,\r\n source: PreloadActionHelpers,\r\n severity: Severity.NoAlert,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents push notifications lib App errors */\r\nconst PushNotificationsLibFile = \"PushNotifications.ts\";\r\nexport const PushNotificationsLibErrors = {\r\n FetchKeyError: {\r\n id: 35700,\r\n source: PushNotificationsLibFile,\r\n severity,\r\n pb\r\n },\r\n SubscribeUnsubscribeError: {\r\n id: 35701,\r\n source: PushNotificationsLibFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Represents content truncation lib App errors */\r\nconst ContentTruncationSourceFile = \"ContentTruncation.ts\";\r\nexport const ContentTruncationErrors = {\r\n OverTruncationError: {\r\n id: 35800,\r\n source: ContentTruncationSourceFile,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\nconst SuperAppEntryPointFileName = \"SuperAppPage.connector.ts\";\r\n\r\nexport const SuperAppEntryPointAppErrors = {\r\n /**\r\n * Super app river is not able to load Error Page.\r\n */\r\n SuperAppErrorPage: {\r\n id: 35901,\r\n source: SuperAppEntryPointFileName,\r\n severity,\r\n pb\r\n },\r\n\r\n /**\r\n * Error fetching the APP_ANON cookie on super app page load\r\n */\r\n ErrorFetchingAppAnonCookie: {\r\n id: 35902,\r\n source: \"page.ts\",\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/** Error fetching feed with location in Local News experience */\r\nconst LocalNewsFileName = \"LocalNews.connector.ts\";\r\nexport const LocalNewsInterestByLocationFetchFailed: AppError = {\r\n id: 36001,\r\n source: LocalNewsFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** 361XX represent office related errors */\r\nconst GenerateShareUiFile = \"GenerateShareUi.tsx\";\r\nconst OfficeShareUiFile = \"OfficeShareUi.tsx\";\r\nconst OfficeFallbackHandlerFileName = \"OfficeFallbackHandler.ts\";\r\n\r\nexport const OfficeFallbackHandlerAppErrors = {\r\n /**\r\n * Tracking errors where we ended up reloading the office content on jss mismatch exception.\r\n */\r\n OfficeContentReloadedJSSMismatchExceptionError: {\r\n id: 36101,\r\n source: OfficeFallbackHandlerFileName,\r\n severity,\r\n pb\r\n }\r\n};\r\n\r\n/**\r\n * Error for failure to generate office share ui\r\n */\r\nexport const OfficeGenerateShareUiError: AppError = {\r\n id: 36105,\r\n source: GenerateShareUiFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Error for failure inside office share ui\r\n */\r\nexport const OfficeShareUiError: AppError = {\r\n id: 36106,\r\n source: OfficeShareUiFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents autos experiences App errors */\r\nconst AutosExperienceConnectorFile = \"AutosCard.connector.ts\";\r\nconst AutosExperienceServiceClientFile = \"AutosServiceClient.ts\";\r\n\r\n/**\r\n * Error while fetching research make models\r\n */\r\nexport const FetchResearchMakeModelDocumentError: AppError = {\r\n id: 36200,\r\n source: AutosExperienceServiceClientFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Error while fetching Film Strip Document Error\r\n */\r\nexport const FetchFilmStripDocumentError: AppError = {\r\n id: 36201,\r\n source: AutosExperienceServiceClientFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Error while fetching lead classified cms documents\r\n */\r\nexport const FetchClassifiedLeadCMSDocumentsError: AppError = {\r\n id: 36202,\r\n source: AutosExperienceServiceClientFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Error while fetching lead classified make models\r\n */\r\nexport const FetchLeadClassifiedMakeModelDocumentError: AppError = {\r\n id: 36203,\r\n source: AutosExperienceServiceClientFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/**\r\n * Error for incorrect tab configuration\r\n */\r\nexport const TabsIncorrectConfiguration: AppError = {\r\n id: 36204,\r\n source: AutosExperienceConnectorFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Whole Page Optimization(WPO) App errors */\r\n\r\nconst WpoServiceFileName = \"WpoServiceClient.ts\";\r\n\r\n/**\r\n * WPO service call failure.\r\n */\r\nexport const WpoServiceCallFailure: AppError = {\r\n id: 36301,\r\n source: WpoServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error updating local storage with wpo service call response.\r\n */\r\nexport const WpoFailedToStoreToLocalStorage: AppError = {\r\n id: 36302,\r\n source: WpoServiceFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** FlyoutCard App errors */\r\nconst FlyoutCardFileName = \"FlyoutCard.connector.ts\";\r\n\r\n/**\r\n * Error when fetching feed in FlyoutCard experience\r\n */\r\nexport const FlyoutCardFailedToLoadOneServiceData: AppError = {\r\n id: 36410,\r\n source: FlyoutCardFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Represents a Microsoft Logo related error */\r\nexport const MicrosoftLogoErrors: AppError = {\r\n id: 36420,\r\n source: \"MicrosoftLogo.tsx\",\r\n severity: Severity.HighImpact,\r\n pb\r\n};\r\n\r\n/**\r\n * Clarity Script App Errors\r\n */\r\nconst ClarityScriptLoaderFile = \"ScriptLoader.ts\";\r\n\r\n/**\r\n * Error loading clarity script.\r\n */\r\nexport const LoadScriptError: AppError = {\r\n id: 36500,\r\n source: ClarityScriptLoaderFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error starting clarity script.\r\n */\r\nexport const ScriptStartError: AppError = {\r\n id: 36501,\r\n source: ClarityScriptLoaderFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** 366XX are River OneService App Errors */\r\nexport const EmptyFeedWithFeedId: AppError = {\r\n id: 36600,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const EmptySearchedFeedWithFeedId: AppError = {\r\n id: 36601,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const EmptySearchedFeedWithFeedQuery: AppError = {\r\n id: 36602,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const EmptyKidsModeFeed: AppError = {\r\n id: 36603,\r\n source: OneServiceCardProviderFileName,\r\n severity,\r\n pb\r\n};\r\n\r\n/** 367XX are River App Errors */\r\nexport const FallingBackToSkipStrategy: AppError = {\r\n id: 36700,\r\n source: RiverSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const FallingBackToFullHeightStrategy: AppError = {\r\n id: 36701,\r\n source: RiverSourceFile,\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n\r\n/** Represents OutlookEmailPreview related App errors */\r\nconst OutlookEmailPreviewDataSourceFile = \"OutlookEmailPreviewDataHelper.ts\";\r\n\r\nexport const OutlookEmailPreviewEmailFetchError: AppError = {\r\n id: 36800,\r\n source: OutlookEmailPreviewDataSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const OutlookEmailPreviewUnreadEmailCountFetchError: AppError = {\r\n id: 36801,\r\n source: OutlookEmailPreviewDataSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst FinancePageFilename = \"Finance.connector.ts\";\r\nconst FinanceUserServiceImplFile = \"FinanceUserServiceImpl.ts\";\r\nconst FinanceServiceImplFile = \"FinanceServiceImpl.ts\";\r\nconst FinanceAutoSuggestServiceImplFile = \"AutoSuggestServiceImpl\";\r\n\r\n/**\r\n * Error when initializing Finance page experience.\r\n */\r\nexport const FinanceEntryPointAppErrors: AppError = {\r\n id: 36900,\r\n source: FinancePageFilename,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get autosuggest because of fetch not success */\r\nexport const FinanceAutoSuggestFetchError: AppError = {\r\n id: 36901,\r\n source: FinanceAutoSuggestServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get autosuggest because the http code not success */\r\nexport const FinanceAutoSuggestStatusError: AppError = {\r\n id: 36902,\r\n source: FinanceAutoSuggestServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get autosuggest because the response body is not valid */\r\nexport const FinanceAutoSuggestInvalidResponseFromService: AppError = {\r\n id: 36903,\r\n source: FinanceAutoSuggestServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get MostActiveQuotes because fetch not success */\r\nexport const FinanceMostActiveQuotesFetchError: AppError = {\r\n id: 36904,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get MostActiveQuotes because the http code not success */\r\nexport const FinanceMostActiveQuotesStatusError: AppError = {\r\n id: 36905,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get MostActiveQuotes because the response body is not valid */\r\nexport const FinanceMostActiveQuotesInvalidResponseFromService: AppError = {\r\n id: 36906,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Exception when fetch watchlist */\r\nexport const FinanceWatchListFetchFailed: AppError = {\r\n id: 36907,\r\n source: FinanceUserServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get Chart because fetch not success */\r\nexport const FinanceChartFetchError: AppError = {\r\n id: 36908,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get Chart because the http code not success */\r\nexport const FinanceChartStatusError: AppError = {\r\n id: 36909,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get Chart because the response body is not valid */\r\nexport const FinanceChartInvalidResponseFromService: AppError = {\r\n id: 36910,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get QuoteSummary because fetch not success */\r\nexport const FinanceQuoteSummaryFetchError: AppError = {\r\n id: 36911,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get QuoteSummary because the http code not success */\r\nexport const FinanceQuoteSummaryStatusError: AppError = {\r\n id: 36912,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/** Failed to get QuoteSummary because the response body is not valid */\r\nexport const FinanceQuoteSummaryInvalidResponseFromService: AppError = {\r\n id: 36913,\r\n source: FinanceServiceImplFile,\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * Error when initializing Social page experience.\r\n */\r\nconst CommunityPreviewSourceFile = \"Community.connector.ts\";\r\n\r\nexport const CommunityNoModuleName: AppError = {\r\n id: 37000,\r\n source: CommunityPreviewSourceFile,\r\n severity,\r\n pb\r\n};\r\n\r\nconst LocationSelectorConnectorFileName = \"LocationSelector.connector.ts\";\r\n/**\r\n * Suggestion Id is out of bounds or it doesn't exist;\r\n */\r\nexport const LocationSelectorInvalidSuggestionId: AppError = {\r\n id: 37100,\r\n source: LocationSelectorConnectorFileName,\r\n severity,\r\n pb\r\n};\r\n\r\nexport const CommunityErrorPage: AppError = {\r\n id: 37200,\r\n source: \"app-types/community/src/page.ts\",\r\n severity,\r\n pb\r\n};\r\n\r\n/**\r\n * PDP Service library errors - 3730X\r\n */\r\nexport const UnknownBulkLoadGraphActionType: AppError = {\r\n id: 37300,\r\n source: \"PdpServiceClient.ts\",\r\n severity: Severity.NoAlert,\r\n pb\r\n};\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { KeyValueArray, KeyValuePair, Utility } from \"./Utility\";\r\nimport { findIndex, isArray, isEmpty, isString, trimEnd, trimStart } from \"lodash-es\";\r\n\r\nimport { StringMap } from \"../types\";\r\nimport { getLocationOrigin } from \"@msnews/isomorphic-util\";\r\n\r\nexport namespace UrlUtility {\r\n\r\n /**\r\n * Characters that, if present on a url, will make prime routing misbehave\r\n *\r\n * These are the characters we know cause problems:\r\n * - spaces\r\n * - slashes\r\n * - punctuation: !?.:\r\n * - ampersands\r\n *\r\n * As we don't know all the offending characters, we are just removing every character that is not alphanumeric\r\n */\r\n const primeForbiddenCharacters = /[^A-Za-z0-9]+/g;\r\n\r\n /**\r\n * Parse parameters from the given URL\r\n * @param {string} url - the URL to parse for parameters\r\n * @param {boolean} decodeComponents - flag to indicate whether the query param key and value should be URL decoded\r\n * @returns {KeyValueArray} - the parsed query key/value collection\r\n */\r\n export function getParamsFromUrl(url: string, decodeComponents = false): KeyValueArray {\r\n if (!isString(url)) {\r\n return null;\r\n }\r\n\r\n const queryString: string = (url || \"\").split(\"?\")[1];\r\n return getParams(queryString, decodeComponents);\r\n }\r\n\r\n /**\r\n * Decode the given URL encoded string that may contain plus signs\r\n * @param {string} val - The value to decode.\r\n * @returns {string} - the decoded value\r\n */\r\n function decodeURIComponentWithPlusSign(val: string): string {\r\n val = val.replace(/\\+/g, \" \");\r\n val = decodeURIComponent(val);\r\n return val;\r\n }\r\n\r\n /**\r\n * Encode uri components in a way that won't break prime routing system\r\n * @param uriComponent the uriComponent to be encoded\r\n */\r\n export function encodeURIComponentForPrime(uriComponent: string): string {\r\n return encodeURIComponent(uriComponent.replace(primeForbiddenCharacters, \"-\"));\r\n }\r\n\r\n /**\r\n * Parse parameters from the given query string\r\n * @param {string} queryString - the query string to parse for parameters\r\n * @param {boolean} decodeComponents - flag to indicate whether the query param key and value should be URL decoded\r\n * @returns {KeyValueArray} - the parsed query key/value collection\r\n */\r\n export function getParams(queryString: string, decodeComponents = false): KeyValueArray {\r\n const params: KeyValueArray = [];\r\n // Remove the leading ? if it is present\r\n if (queryString && queryString.startsWith(\"?\")) {\r\n queryString = queryString.substring(1);\r\n }\r\n\r\n if (queryString) {\r\n // remove hash part.\r\n queryString = queryString.split(\"#\")[0];\r\n const queryArray = queryString.split(\"&\");\r\n for (let ndx = 0; ndx < queryArray.length; ndx++) {\r\n const parts = queryArray[ndx].split(\"=\");\r\n let queryKey = parts[0];\r\n let queryValue = parts[1];\r\n\r\n if (decodeComponents) {\r\n queryKey = decodeURIComponentWithPlusSign(queryKey);\r\n if (queryValue) {\r\n queryValue = decodeURIComponentWithPlusSign(queryValue);\r\n }\r\n }\r\n\r\n // Don't allow for duplicate query string parameter keys. Take the last one\r\n const newParam: KeyValuePair = { key: queryKey, value: queryValue };\r\n const existingParam = findIndex(params, (entry) => entry.key === newParam.key);\r\n if (existingParam === -1) {\r\n params.push(newParam);\r\n } else {\r\n params[existingParam] = newParam;\r\n }\r\n }\r\n }\r\n return params;\r\n }\r\n\r\n /**\r\n * Parse specific parameters from the given query string, allowing for multiple item=key:value.\r\n * This function ONLY parses qsp item=[key]:[value]\r\n * Note: Use first given rule for duplicate key!\r\n * @param {string} queryString - the query string to parse for parameters\r\n * @returns {KeyValueArray} - the parsed query key/value collection\r\n */\r\n export function getParamsWithItems(queryString: string): KeyValueArray {\r\n const params: KeyValueArray = [];\r\n\r\n const inputKey = \"item\";\r\n\r\n if (queryString) {\r\n // Remove the leading ? if it is present\r\n if (queryString.startsWith(\"?\")) {\r\n queryString = queryString.substring(1);\r\n }\r\n\r\n // split on the hashes.\r\n queryString = queryString.split(\"#\")[0];\r\n const queryArray = queryString.split(\"&\");\r\n for (let ndx = 0; ndx < queryArray.length; ndx++) {\r\n const parts = queryArray[ndx].split(\"=\");\r\n let queryKey = parts[0];\r\n let queryValue = parts[1];\r\n\r\n // If the query key is inputKey (default: \"item\"), and the query values is key:value, then convert the\r\n // value into the actual key/value\r\n if (queryKey.toLowerCase() === inputKey) {\r\n const queryItems = queryValue.split(\":\");\r\n // Ignore value not in \"key:value\" format\r\n if (queryItems.length === 2) {\r\n queryKey = queryItems[0];\r\n queryValue = queryItems[1];\r\n\r\n // Don't allow for duplicate query string parameter keys. Use first given rule for duplicate key!\r\n const newParam: KeyValuePair = { key: queryKey, value: queryValue };\r\n const existingParam = params.findIndex((entry) => entry.key === newParam.key);\r\n if (existingParam === -1) {\r\n params.push(newParam);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return params;\r\n }\r\n\r\n /**\r\n * Utility method to extract query string param in url.\r\n *\r\n * @export\r\n * @param {string} name - query param name\r\n * @returns {string} - query param value\r\n */\r\n export function getQueryParameterByName(name: string, href: string): string {\r\n\r\n // TODO: exposing this method for accessing a single parameter can be used\r\n // extremely inefficiently (for example if invoked multiple times to get parameters\r\n // from a single URL). Instead we should deprecate this and export getParamsObj\r\n // and use that throughout.\r\n\r\n const value = getParamsObj(href)[name];\r\n return (value !== undefined)\r\n ? value\r\n : null;\r\n }\r\n\r\n /**\r\n * Check if given url string is a valid url.\r\n * Returns true when url string is a valid url, otherwise false.\r\n *\r\n * @export\r\n * @param url {string} - Url string value to check\r\n * @param validateScheme {boolean} - Should scheme validation be forced\r\n * @return {boolean}\r\n */\r\n export function isValidUrl(url: string, validateScheme: boolean): boolean {\r\n return (isString(url) &&\r\n (url.length > 0) &&\r\n (!validateScheme ||\r\n validateScheme && url.indexOf(\"http\") === 0));\r\n }\r\n\r\n /**\r\n * Converts a keyValueArray into a set of query string parameters\r\n *\r\n * @export\r\n * @param {any} - params to be converted\r\n * @return {string}\r\n */\r\n export function keyValueArrayToQueryString(params: KeyValueArray): string {\r\n // Validate we have a nonempty array\r\n if (!isArray(params) || isEmpty(params)) {\r\n return \"\";\r\n }\r\n\r\n // Filter for valid keyValue entries, and then map them into key==value strings\r\n // joined with an &\r\n const queryString: string = params.filter(kv =>\r\n Utility.isKeyValuePair(\r\n kv,\r\n (key) => typeof (key) === \"string\",\r\n (value) => typeof (value) === \"string\"))\r\n .map(kv => kv.key + \"=\" + kv.value)\r\n .join(\"&\");\r\n\r\n return queryString;\r\n }\r\n\r\n /**\r\n * Helper method to parse the given URLs query parameters to a lookup dictionary\r\n * @param url - the URL string with the query params to parse\r\n * @returns The {StringMap} containing the key/value pairs, or empty object.\r\n */\r\n function getParamsObj(url: string): StringMap {\r\n const paramsObj = {};\r\n const paramArray = getParamsFromUrl(url, true);\r\n if (paramArray && paramArray.length) {\r\n paramArray.forEach(keyValuePair =>\r\n paramsObj[keyValuePair.key] = keyValuePair.value);\r\n }\r\n return paramsObj;\r\n }\r\n\r\n /**\r\n * For the given `url`, it appends the `subPath` to it.\r\n * It takes propers care to forward slashes characters\r\n * at the end of `url` and at the start of `subPath` parameters\r\n * @param url a valid url\r\n * @param subPath the path which is appended to `url`\r\n * @returns an URL object which is the `url` appended by `subPath`\r\n */\r\n export function joinSubpathToURL(url: URL, subPath: string): URL {\r\n const href = url.href;\r\n const trimmedEndSlashFromHref = trimEnd(href, \"/\");\r\n const trimmedStartSlashFromSubpath = trimStart(subPath, \"/\");\r\n return new URL(`${trimmedEndSlashFromHref}/${trimmedStartSlashFromSubpath}`);\r\n }\r\n\r\n /**\r\n * Updates a search parameter in the given url to map to a new value\r\n * Does not modify the url if the given search param doesn't exist\r\n * @param url the url to update\r\n * @param key the name of the search param to be updated\r\n * @param value the new value for the given search param\r\n * @returns {URL} the updated URL\r\n */\r\n export function updateSearchParam(url: URL, key: string, value: string): URL {\r\n // Note that the searchParams data member may not be compatible with older browser versions\r\n // see https://caniuse.com/#search=searchparams\r\n if (url && url.searchParams && url.searchParams.get(key)) {\r\n url.searchParams.set(key, value);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Appends a search parameter to the given url\r\n * @param url the url to modify\r\n * @param key the name of the search param to be appended\r\n * @param value the new value for the given search param\r\n * @returns {URL} the modified URL\r\n */\r\n export function appendSearchParam(url: URL, key: string, value: string, fallback?: boolean): URL {\r\n if (url) {\r\n if (url.searchParams || fallback) {\r\n url.searchParams.append(key, value);\r\n } else {\r\n // TODO Bug 22390312: [Peregrine] UrlUtility appendSearchParam needs more robust polyfill\r\n url = new URL(url.href + (url.search.indexOf(\"?\") >= 0 ? \"&\" : \"?\") + key + \"=\" + value);\r\n }\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Returns an absolute URL if a relative on is passed in, or returns the passed in URL if already absolute\r\n * @param partialUrl The relative or absolute URL\r\n * @returns {string} the absolute URL\r\n */\r\n export function getAbsoluteUrl(partialUrl: string): string {\r\n if (partialUrl.indexOf(\"://\") > 0 || partialUrl.indexOf(\"//\") === 0) {\r\n return partialUrl;\r\n } else {\r\n return getLocationOrigin() + partialUrl;\r\n }\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n// Defines constants used in telemetry beacons\r\n\r\nexport default {\r\n // logSamplingRate was configured via %app_error_log_sampling_rate% in Prime. Hardcoding \"0\" here.\r\n logSamplingRate: \"0\",\r\n FireTelemetry: \"fireTelemetryBeacon\",\r\n GET: \"GET\",\r\n POST: \"POST\",\r\n Ctag: \"ctag\",\r\n Comscore: \"scorecard\",\r\n OTF: \"udc\",\r\n Exp: \"EX:\",\r\n ResetIdx: \"resetTelemetryEventIndex\"\r\n};\r\n","// © Microsoft Corporation. All rights reserved.\r\n/// Adds basic dom manipulation functions to an object defined as \"dom\"\r\n\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\n\r\nconst doc = canUseDOM() ? document : null;\r\nconst otherWhitespaceRegex = /[\\n\\t]/g;\r\nconst trimRegex = /(^\\s+)|(\\s+$)/mg;\r\n\r\n// curly brace needs to be on the return line otherwise build with throw an error\r\nexport default {\r\n attr: function (elem, attr) {\r\n // getAttribute(attr, 2) causes IE to only report correct values for href.\r\n // IE reports href values for IMG tags without an href property\r\n // see http://reference.sitepoint.com/javascript/Element/getAttribute\r\n // see bug #1131443\r\n return elem && (elem.getAttribute ? elem.getAttribute(attr, 2) : elem[attr]) || \"\";\r\n },\r\n name: function (elem) {\r\n return elem && elem.nodeName || \"\";\r\n },\r\n text: function (elem) {\r\n return (elem && (elem.textContent || elem.innerText) || \"\").replace(trimRegex, \"\");\r\n },\r\n children: function (elem) {\r\n return elem && elem.children || [];\r\n },\r\n parent: function (elem) {\r\n return elem && elem.parentNode;\r\n },\r\n getElementsByTagName: function (name) {\r\n return doc ? doc.getElementsByTagName(name) : [];\r\n },\r\n create: function (name) {\r\n return doc ? doc.createElement(name) : null;\r\n },\r\n containsClass: function (element, className) {\r\n /// \r\n /// Looks for the className in element and returns true/false based on result.\r\n /// \r\n /// element - Element where className to be searched for.\r\n /// className - Class name to be looked for.\r\n /// \r\n /// \r\n return element && ((\" \" + (element.className || element.getAttribute(\"class\")) + \" \")\r\n .replace(otherWhitespaceRegex, \" \").indexOf(\" \" + className + \" \") > -1);\r\n },\r\n getTarget: function (event) {\r\n return event && (event.customTarget || event.target || event.srcElement) || doc;\r\n }\r\n};\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Enum for different app types\r\n * @enum\r\n */\r\nexport enum AppType {\r\n Edge = \"edge\",\r\n EdgeChromium = \"edgeChromium\",\r\n Finance = \"finance\",\r\n FirstParty = \"firstParty\",\r\n Hub = \"hub\",\r\n MicrosoftNews = \"microsoftNews\",\r\n MMX = \"mmx\",\r\n Office = \"office\",\r\n Views = \"views\",\r\n Weather = \"weather\",\r\n Windows = \"windows\",\r\n WindowsShell = \"windowsShell\"\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Constants that are used throughout the library\r\n */\r\nexport namespace ConnectorConstants {\r\n /**\r\n * The key within a state JSON document used to store a connectors individual state\r\n */\r\n export const connectorStateKey = \"_@STATE@_\";\r\n\r\n export const renderAction = \"@@connector-view/RENDER\";\r\n\r\n export const dataConnectorMergeInitAction = \"@@data-connector/MERGE-INIT\";\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n// Usage:\r\n// pass data to any callback that has subscribed to the event\r\n// mediator.pub(event, data);\r\n//\r\n// call the callback whenever this event is published\r\n// mediator.sub(event, callback)\r\n//\r\n// pass data to any callback that has subscribed to this event and channel\r\n// mediator.pubChannel(event, channel, data);\r\n//\r\n// call the callback whenever this event is published to this channel\r\n// mediator.subChannel(event, channel, callback)\r\n//\r\n// Think of pub/sub as using their own channel, useful for 1 ofs or app communication.\r\n// Channels are useful when multiple copies of the same widget want to communicate.\r\n\r\n/// Constructor for mediator object\r\n/// Mediator object\r\n\r\n/// Default publish subscribe where all non-channel-specific events are managed\r\n// @ts-ignore\r\nconst defaultPubSub = new PublishSubscribe();\r\nconst channels = {};\r\nexport default {\r\n pub: defaultPubSub.pub,\r\n sub: defaultPubSub.sub,\r\n unsub: defaultPubSub.unsub,\r\n pubChannel: function (event, channel, data) {\r\n /// Publishes event to channel subscribers only\r\n /// Event to subscribe to\r\n /// Name of the channel\r\n /// Data to pass to the callback\r\n getChannel(channel).pub(event, data);\r\n },\r\n subChannel: function (event, channel, callback) {\r\n /// Subscribes to event published on a specific channel\r\n /// Event to subscribe to\r\n /// Name of the channel\r\n /// Function to call when the event is fired\r\n getChannel(channel).sub(event, callback);\r\n },\r\n unsubChannel: function (event, channel, callback) {\r\n /// Unsubscribe from an event published on a specific channel\r\n /// Event to subscribe to\r\n /// Name of the channel\r\n /// Function to call when the event is fired\r\n getChannel(channel).unsub(event, callback);\r\n }\r\n};\r\n\r\nfunction getChannel(channel) {\r\n /// Gets a channel from the collection of mediator channels\r\n /// ID of the channel\r\n /// Channel requested or new channel if not exist\r\n if (!channels[channel]) {\r\n // @ts-ignore\r\n channels[channel] = new PublishSubscribe();\r\n }\r\n return channels[channel];\r\n}\r\n\r\nfunction PublishSubscribe() {\r\n /// PublishSubscribe factory\r\n /// PubSub Object\r\n const pubMap = {};\r\n return {\r\n pub: function (event, data) {\r\n /// Passes data to any callback that has subscribed to the event\r\n /// Event being published\r\n /// Data to pass to the callback\r\n const callbacks = pubMap[event];\r\n\r\n if (callbacks) {\r\n for (let ndx = 0; ndx < callbacks.length; ndx++) {\r\n callbacks[ndx](data);\r\n }\r\n }\r\n },\r\n sub: function (event, callback) {\r\n /// Subscribes the callback to this event\r\n /// Event to subscribe to\r\n /// Function to call when the event is fired\r\n if (typeof callback == \"function\") {\r\n let listeners = pubMap[event];\r\n\r\n if (!listeners) {\r\n listeners = [];\r\n pubMap[event] = listeners;\r\n }\r\n listeners.push(callback);\r\n }\r\n },\r\n unsub: function (event, callback) {\r\n /// Unsubscribes a callback from an event\r\n /// Event to unsubscribe from\r\n /// Function to unsubscribe from the event\r\n const listeners = pubMap[event];\r\n\r\n if (listeners) {\r\n for (let ndx = 0; ndx < listeners.length; ndx++) {\r\n if (listeners[ndx] === callback) {\r\n listeners.splice(ndx--, 1);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Client side properties that Render Service sends to initialize RequestData.\r\n * These properties are typically passed via query param to the render service.\r\n * On the client side these are available and populated through the DOM.\r\n */\r\nexport interface RequestProps {\r\n\r\n /**\r\n * URL for the original client request.\r\n */\r\n href: string;\r\n\r\n /**\r\n * Width of client browser window.\r\n */\r\n innerWidth: number;\r\n\r\n /**\r\n * Height of client browser window.\r\n */\r\n innerHeight: number;\r\n\r\n /**\r\n * Device pixel ratio of client.\r\n */\r\n devicePixelRatio: number;\r\n\r\n /**\r\n * CSS Grid support of the client browser.\r\n */\r\n canUseCssGrid: boolean;\r\n\r\n /**\r\n * Request Id.\r\n */\r\n requestId: number;\r\n}\r\n\r\n/**\r\n * Singleton class to store client browser data sent through query param to Render Service.\r\n * This is only used under server environment.\r\n */\r\nclass RequestData {\r\n /**\r\n * The single instance of the RequestData class.\r\n * @type {RequestData}\r\n */\r\n private static _instance: RequestData = null;\r\n\r\n /**\r\n * URL object to be used to store original request url.\r\n */\r\n public readonly url: URL;\r\n\r\n /**\r\n * Inner width of browser from the original request.\r\n */\r\n public readonly innerWidth: number;\r\n\r\n /**\r\n * Inner height of browser from the original request.\r\n */\r\n public readonly innerHeight: number;\r\n\r\n /**\r\n * Device pixel ratio from the original request.\r\n */\r\n public readonly devicePixelRatio: number;\r\n\r\n /**\r\n * Boolean flag that represents if CSS Grid is supported by the browser from the original request.\r\n */\r\n public readonly canUseCssGrid: boolean;\r\n\r\n /**\r\n * Request Id.\r\n */\r\n public readonly requestId: number;\r\n\r\n /**\r\n * Initialize the request data instance with passed in client properties\r\n */\r\n private constructor(data: RequestProps) {\r\n this.url = new URL(data.href);\r\n this.innerWidth = data.innerWidth;\r\n this.innerHeight = data.innerHeight;\r\n this.devicePixelRatio = data.devicePixelRatio;\r\n this.canUseCssGrid = data.canUseCssGrid;\r\n this.requestId = data.requestId;\r\n }\r\n\r\n /**\r\n * Returns singleton class instance.\r\n * @returns RequestData\r\n */\r\n public static getInstance(): RequestData {\r\n if (global[\"TEST_ENV\"] && !RequestData._instance) {\r\n resetRequestData({\r\n href: \"http://localhost:8080/\",\r\n innerWidth: 1024,\r\n innerHeight: 768,\r\n devicePixelRatio: 1,\r\n canUseCssGrid: false,\r\n requestId: 0\r\n });\r\n }\r\n\r\n if (!RequestData._instance) {\r\n // Throw error if the request data has not been set as this should never be the case.\r\n // This likely highlights that the request data was not initialized when handling a\r\n // request when server side rendering.\r\n throw new Error(\"Request data is not initialized yet through ResetInstance.\");\r\n }\r\n return RequestData._instance;\r\n }\r\n\r\n /**\r\n * Reset singleton class instance with passed in info and client settings\r\n * @returns RequestData\r\n */\r\n public static resetInstance(data: RequestProps): RequestData {\r\n RequestData._instance = new RequestData(data);\r\n return RequestData._instance;\r\n }\r\n}\r\n\r\n/**\r\n * Export function to reset the request data singleton.\r\n * This must be used to set the request data.\r\n */\r\nexport const resetRequestData = RequestData.resetInstance;\r\n\r\n/**\r\n * Export get instance function for testing\r\n */\r\nexport const getRequestData = () => (RequestData.getInstance());","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Attempts to parse a given string to a JSON object\r\n * @param {string} jsonString - The string to parse.\r\n * @returns {any} - the parsed object if successful, or null otherwise.\r\n */\r\nexport function tryParseJson(jsonString: string): any {\r\n try {\r\n return JSON.parse(jsonString);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/** Attempts to parse the given value as a integer and if failed will return the defaultValue.\r\n * @param {string} value - The value to parse.\r\n * @param {number} defaultValue - The default value to return if parsing fails\r\n * @returns {number} the parsed value if it was a valid number or otherwise the default value if specified.\r\n */\r\nexport function tryParseInt(value: string, defaultValue: number): number {\r\n const n = parseInt(value);\r\n return isNaN(n) ? defaultValue : n;\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n// Provides utility functions to get and set data from browser webStorage.\r\n\r\nimport { tryParseJson } from \"../utilities/Parsing\";\r\nimport { AppError, CoreLibAppErrors, logger } from \"@msnews/diagnostics\";\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\n\r\n/**\r\n * Base class for localeStorage and sessionStorage abstractions\r\n */\r\nexport class WebStorage {\r\n /**\r\n * Local storage object for persistent storage\r\n */\r\n constructor(private readonly storage: Storage) {\r\n }\r\n\r\n /**\r\n * Check if the web storage is supported\r\n * @returns {boolean} true if supported\r\n */\r\n public get supported(): boolean {\r\n return !!this.storage;\r\n }\r\n\r\n /**\r\n * Get given key's value from web storage\r\n * @param {string} key - Key name\r\n * @returns {string} Key value\r\n */\r\n public getItem(key: string): string {\r\n if (this.supported) {\r\n return this.storage.getItem(key);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the value from local storage using the key.\r\n * @param {string} key - the storage key to store under\r\n * @param {T} defaultValue - the default value to return if parsing fails\r\n * @returns {T} The parsed JSON value\r\n */\r\n public getObject(key: string, defaultValue?: T): T {\r\n const value = this.getItem(key);\r\n if (value != null) {\r\n const parsedObj = tryParseJson(value);\r\n if (parsedObj != null) {\r\n return parsedObj;\r\n }\r\n }\r\n\r\n return defaultValue;\r\n }\r\n\r\n /**\r\n * Gets given index location key from web storage\r\n * @param {string} key - Key name\r\n * @returns {string} Key value\r\n */\r\n public key(index: number): string {\r\n if (this.supported && index >= 0) {\r\n return this.storage.key(index);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the given value after stringifying as JSON\r\n * @param {string} key - the storage key to store under\r\n * @param {T} value - the value to serialize and store\r\n */\r\n public setObject(key: string, value: T): void {\r\n (value !== undefined)\r\n ? this.setItem(key, JSON.stringify(value))\r\n : this.removeItem(key);\r\n }\r\n\r\n /**\r\n * Removes the given key from storage and returns the existing value parsed\r\n * @param {string} key - the key to remove.\r\n */\r\n public removeObject(key: string): T {\r\n const value = this.removeItem(key);\r\n if (value != null) {\r\n return tryParseJson(value);\r\n }\r\n }\r\n\r\n /**\r\n * Set given key's value to local storage\r\n * @param {string} key - Key name\r\n * @param {string} value - Key value\r\n */\r\n public setItem(key: string, value: string): void {\r\n if (this.supported) {\r\n // Catch quota exceeded exception\r\n try {\r\n this.storage.setItem(key, value);\r\n } catch (e) {\r\n logger.logError(e);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove key item from local storage\r\n * @param {string} key - Key name\r\n * @returns {string} Key value\r\n */\r\n public removeItem(key: string): string {\r\n if (this.supported) {\r\n const value = this.getItem(key);\r\n this.storage.removeItem(key);\r\n return value;\r\n }\r\n }\r\n\r\n /**\r\n * Removes all keys containing the given substring in the storage key\r\n * @param {string} substring The substring to check\r\n */\r\n public removeSubstringKeys(substring: string): void {\r\n if (!this.supported || !substring) {\r\n return;\r\n }\r\n\r\n const matchingKeys = [];\r\n for (let index = 0; index < this.storage.length; index++) {\r\n const storageKey = this.key(index);\r\n if (storageKey && storageKey.includes(substring)) {\r\n matchingKeys.push(storageKey);\r\n }\r\n }\r\n\r\n for (let index = 0; index < matchingKeys.length; index++) {\r\n this.removeItem(matchingKeys[index]);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Local storage class for persistent storage\r\n */\r\nexport class LocalStorage extends WebStorage {\r\n constructor() {\r\n let storage: Storage;\r\n\r\n try {\r\n storage = \"localStorage\" in window && window.localStorage;\r\n } catch (ex) {\r\n // Getting local storage failed. Can happen in Chrome when user has disabled cookies.\r\n }\r\n\r\n super(storage);\r\n }\r\n\r\n /**\r\n * Checks whether localStorage is available or not.\r\n * Need to aggressively check because iOS5 & Safari Private Browsing mode will throw error.\r\n * This is how the library Modernizr does localStorage check. (MIT License)\r\n * For more details:\r\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/storage/localstorage.js\r\n */\r\n public localStorageExists(trackAppErrorEvent: (data: AppError) => void): boolean {\r\n if (canUseDOM()) {\r\n const storageTest = \"storageTest\";\r\n try {\r\n window.localStorage.setItem(storageTest, storageTest);\r\n window.localStorage.removeItem(storageTest);\r\n return true;\r\n } catch (e) {\r\n if (trackAppErrorEvent || typeof trackAppErrorEvent === \"function\") {\r\n trackAppErrorEvent({\r\n ...CoreLibAppErrors.LocalStorageDoesntExist,\r\n message: `Local Storage is not defined ${e}`\r\n });\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Session storage class for persistent storage\r\n */\r\nexport class SessionStorage extends WebStorage {\r\n constructor() {\r\n let storage: Storage;\r\n\r\n try {\r\n storage = \"sessionStorage\" in window && window.sessionStorage;\r\n } catch (ex) {\r\n // Getting session storage failed. Can happen in Chrome when user has disabled cookies.\r\n }\r\n\r\n super(storage);\r\n }\r\n\r\n /**\r\n * Checks whether sessionStorage is available or not.\r\n * Need to aggressively check because iOS5 & Safari Private Browsing mode will throw error.\r\n * This is how the library Modernizr does sessionStorage check. (MIT License)\r\n * For more details:\r\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/storage/sessionstorage.js\r\n */\r\n public sessionStorageExists(trackAppErrorEvent: (data: AppError) => void): boolean {\r\n if (canUseDOM()) {\r\n const storageTest = \"storageTest\";\r\n try {\r\n window.sessionStorage.setItem(storageTest, storageTest);\r\n window.sessionStorage.removeItem(storageTest);\r\n return true;\r\n } catch (e) {\r\n if (trackAppErrorEvent || typeof trackAppErrorEvent === \"function\") {\r\n trackAppErrorEvent({\r\n ...CoreLibAppErrors.SessionStorageDoesntExist,\r\n message: `Session Storage is not defined: ${e}`\r\n });\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nexport const localStorage = new LocalStorage();\r\nexport const sessionStorage = new SessionStorage();","// © Microsoft Corporation. All rights reserved.\r\n\r\n/// Creates a function defined as \"extend\" that functions similiar to jQuery's extend function.\r\n\r\nfunction isArray(arr) {\r\n // Check support for isArray\r\n if (Array.isArray) {\r\n return Array.isArray(arr);\r\n } else {\r\n return Object.prototype.toString.call(arr).toLowerCase() === \"[object array]\";\r\n }\r\n}\r\n\r\nfunction extend(...args: any[]) {\r\n let target = args[0] || {};\r\n let ndx = 1;\r\n let key;\r\n let obj;\r\n let isRecursive;\r\n let src;\r\n\r\n if (typeof target == \"boolean\" || typeof target == \"number\") {\r\n isRecursive = !!target;\r\n target = args[1];\r\n ndx = 2;\r\n }\r\n for (; ndx < args.length; ndx++) {\r\n obj = args[ndx];\r\n for (key in obj) {\r\n if (obj[key] !== undefined && obj[key] !== null) {\r\n if (isRecursive && typeof obj[key] == \"object\") {\r\n src = target[key];\r\n if (typeof src != \"object\") {\r\n if (isArray(obj[key])) {\r\n src = [];\r\n } else {\r\n src = {};\r\n }\r\n }\r\n\r\n extend(true, src, obj[key]);\r\n target[key] = src;\r\n } else {\r\n target[key] = obj[key];\r\n }\r\n }\r\n }\r\n }\r\n return target;\r\n}\r\n\r\nexport default extend;\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { AppErrorPropertyBag, getAppErrorsPropertyBag, getPageTimings, updateAppErrorsPropertyBag } from \"@msnews/diagnostics\";\r\nimport { AppType, AudienceModeType, AuthCookieName } from \"@msnews/experiences-constants\";\r\nimport { EnterpriseOneServiceApi, appAnonCookieExistsCookieName, childCookieName, rootElementId, serviceUrl, telemetryId, trackPageProduct, trackPageType } from \"../constants\";\r\nimport { Environment, getEnvironmentFromString } from \"./Environment\";\r\nimport { HostPage, IHostPage } from \"./HostPage\";\r\nimport { WpoModel, getWpoFlights, getWpoStorageCacheKey, isWpoEnabled } from \"@msnews/wpo-common\";\r\nimport { canUseDOM, getDocumentElementById, getLocationHostname, getLocationHref, getLocationOrigin, getLocationSearch } from \"@msnews/isomorphic-util\";\r\nimport { getCookie, getMuidCookie } from \"../utilities/CookieUtility\";\r\n\r\nimport { AccountInfo } from \"./Enterprise\";\r\nimport { Market } from \"./Market\";\r\nimport { PageRequestTargetScope } from \"./PageRequestTargetScope\";\r\nimport { PlatformType } from \"cms-models-msn/configuration/types/PlatformType\";\r\nimport { UrlUtility } from \"../utilities/UrlUtility\";\r\nimport { Utility } from \"../utilities/Utility\";\r\nimport { headData } from \"./HeadData\";\r\nimport { isString } from \"lodash-es\";\r\nimport { localStorage } from \"../utilities/WebStorage\";\r\n\r\n/**\r\n * chrome\r\n * The chrome API is not defined in Typescript\r\n */\r\ndeclare global {\r\n interface Window { chrome: any; }\r\n}\r\n\r\n/**\r\n * Page level experience tracking info\r\n */\r\nexport interface ITrackInfo {\r\n sitePage: {\r\n page_product: string,\r\n page_type: string\r\n }\r\n}\r\n\r\nexport class AppEnvironment {\r\n /**\r\n * The single instance of the AppEnvironment class.\r\n * @type {AppEnvironment}\r\n */\r\n private static _instance: AppEnvironment;\r\n\r\n /**\r\n * the activity id for the current page view\r\n */\r\n private activityId: string;\r\n\r\n /**\r\n * Base url for the content service, endpoints/queries are appended for specific content calls.\r\n * This is an akamai url for highly cacheable content.\r\n * Possible values are enumerated on ContentServiceConfig.ts\r\n *\r\n * @private\r\n * @type {string}\r\n * @memberof AppEnvironment\r\n */\r\n private contentServiceUrlBase: URL;\r\n\r\n private currentRequestTargetScope: PageRequestTargetScope;\r\n\r\n private currentMarket: Market;\r\n private hostPage: IHostPage;\r\n\r\n /** The hostname to use for content links. */\r\n private currentContentLinkHost: string;\r\n\r\n /**\r\n * Indicates that the page is running as an FRE page (i.e. the url contains fre=1)\r\n * Does not indicate that the FRE itself is currently displayed over the page.\r\n */\r\n private isFrePage: boolean;\r\n\r\n /**\r\n * Base for the service url, endpoints/queries are appended for specific service calls.\r\n * This is the OneService url used for personalized content.\r\n * Possible values are enumerated on OneServiceConfig.ts\r\n *\r\n * @private\r\n * @type {string}\r\n * @memberof AppEnvironment\r\n */\r\n private serviceUrlBase: URL;\r\n\r\n /**\r\n * Base URL for the feed service\r\n */\r\n private feedServiceUrlBase: URL;\r\n\r\n /**\r\n * The account info for the current page user wrapped in a promise\r\n */\r\n private accountInfoPromise: Promise;\r\n\r\n /**\r\n * The resolved account info. This is only set when the account info promise is resolved.\r\n */\r\n private resolvedAccountInfo: AccountInfo;\r\n\r\n private appType: string;\r\n private authCookieName: AuthCookieName;\r\n private buildVersion: string;\r\n\r\n private environmentConfigUrl: URL;\r\n\r\n private rootTelemetryId: number;\r\n private trackInfo: ITrackInfo;\r\n private userId: string;\r\n private countryCode: string;\r\n private latitude: string;\r\n private longitude: string;\r\n private environment: Environment;\r\n private assetsHost: string;\r\n private featureFlags: any;\r\n private disableCachingConfigs: boolean;\r\n private enableConfigService: boolean;\r\n private isMultiConfigRetrievalEnabled: boolean;\r\n private configServiceBaseUrl: URL;\r\n private disableContentPreviewCache: boolean;\r\n private disableContentCacheIDBRead: boolean;\r\n private disableContentListCache: boolean;\r\n private disableContentListCacheIDBRead: boolean;\r\n private sendFeedCallActivityIdInHeader: boolean;\r\n private useOneServiceAuthEndpoints: boolean;\r\n private clarityEnabled: boolean;\r\n\r\n /** True if query string has appropriate debug flag */\r\n private isDebug: boolean;\r\n\r\n /** True if query string has appropriate flag to show msnCreatorDashboard (msnDash=) */\r\n private showMnsCreatorDashboard: boolean;\r\n\r\n /** Config Root Url */\r\n private configRootUrl: URL;\r\n\r\n /** Cache busting identifier received from pcs */\r\n private cacheBustingIdentifier: string;\r\n\r\n /**\r\n * ActivityId value from initial server response, use telemetry's requestId instead for associating with current page client navigation\r\n */\r\n public get ActivityId(): string { return this.activityId; }\r\n public set ActivityId(value: string) { this.activityId = value; }\r\n\r\n /**\r\n * Getter for the base url for the content service, endpoints/queries are appended for specific content calls.\r\n * This is an akamai url for highly cacheable content.\r\n * Possible values are enumerated on ContentServiceConfig.ts\r\n *\r\n * @readonly\r\n * @type {URL}\r\n * @memberof AppEnvironment\r\n */\r\n public get EnvironmentConfigUrl(): URL {\r\n // If I mutate the same object, I will need to revert to the original state somewhere.\r\n // For safety reason, it is better to use a new Object\r\n const url = new URL(\"\", this.environmentConfigUrl);\r\n\r\n if (process.env.WEBPACK_DEV_SERVER || new URLSearchParams(getLocationSearch()).get(\"env\") === \"dev\") {\r\n url.searchParams.set(\"env.config\", \"dev\");\r\n }\r\n\r\n const searchParam = new URLSearchParams(getLocationSearch()).get(\"env.config\");\r\n if (searchParam) {\r\n url.searchParams.set(\"env.config\", searchParam);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Getter for the base url for the content service, endpoints/queries are appended for specific content calls.\r\n * This is an akamai url for highly cacheable content.\r\n * Possible values are enumerated on ContentServiceConfig.ts\r\n *\r\n * @readonly\r\n * @type {URL}\r\n * @memberof AppEnvironment\r\n */\r\n public get ContentServiceUrlBase(): URL {\r\n // If I mutate the same object, I will need to revert to the original state somewhere.\r\n // For safety reason, it is better to use a new Object\r\n const url = new URL(\"\", this.contentServiceUrlBase);\r\n\r\n if (process.env.WEBPACK_DEV_SERVER || new URLSearchParams(getLocationSearch()).get(\"env\") === \"dev\") {\r\n url.searchParams.set(\"env.content\", \"dev\");\r\n }\r\n\r\n const searchParam = new URLSearchParams(getLocationSearch()).get(\"env.content\");\r\n if (searchParam) {\r\n url.searchParams.set(\"env.content\", searchParam);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n public get CurrentRequestTargetScope(): PageRequestTargetScope { return this.currentRequestTargetScope; }\r\n public set CurrentRequestTargetScope(value: PageRequestTargetScope) { this.currentRequestTargetScope = value; }\r\n\r\n public get CurrentMarket(): Market { return this.currentMarket; }\r\n public set CurrentMarket(value: Market) { this.currentMarket = value; }\r\n\r\n public get Environment(): Environment { return this.environment; }\r\n public set Environment(value: Environment) { this.environment = value; }\r\n\r\n public get AssetsHost(): string { return this.assetsHost; }\r\n\r\n public get HostPage(): IHostPage { return this.hostPage; }\r\n public set HostPage(value: IHostPage) { this.hostPage = value; }\r\n\r\n public get AppType(): string { return this.appType; }\r\n\r\n public get AuthCookieName(): AuthCookieName { return this.authCookieName; }\r\n public set AuthCookieName(value: AuthCookieName) { this.authCookieName = value; }\r\n\r\n public get UseOneServiceAuthEndpoints(): boolean { return this.useOneServiceAuthEndpoints; }\r\n public set UseOneServiceAuthEndpoints(value: boolean) { this.useOneServiceAuthEndpoints = value; }\r\n\r\n public get AccountInfoPromise(): Promise { return this.accountInfoPromise; }\r\n public set AccountInfoPromise(value: Promise) { this.accountInfoPromise = value; }\r\n\r\n public get ResolvedAccountInfo(): AccountInfo { return this.resolvedAccountInfo; }\r\n public set ResolvedAccountInfo(value: AccountInfo) { this.resolvedAccountInfo = value; }\r\n\r\n public get BuildVersion(): string { return this.buildVersion; }\r\n\r\n public get ClarityEnabled(): boolean { return this.clarityEnabled; }\r\n public set ClarityEnabled(value: boolean) { this.clarityEnabled = value; }\r\n\r\n public get RootTelemetryId(): number { return this.rootTelemetryId; }\r\n public set RootTelemetryId(value: number) { this.rootTelemetryId = value; }\r\n\r\n public get TrackInfo(): ITrackInfo { return this.trackInfo; }\r\n public set TrackInfo(value: ITrackInfo) { this.trackInfo = value; }\r\n\r\n public get UserId(): string { return this.getUserMuid() || this.userId; }\r\n public set UserId(value: string) { this.userId = value; }\r\n\r\n /** True if query string has appropriate debug flag */\r\n public get IsDebug(): boolean { return this.isDebug; }\r\n\r\n /** True if query string has appropriate flag to show msnCreatorDashboard (msnDash=) */\r\n public get ShowMnsCreatorDashboard(): boolean { return this.showMnsCreatorDashboard; }\r\n\r\n /**\r\n * Gets the host to use when linking to content.\r\n */\r\n public get contentLinkHost(): string { return this.currentContentLinkHost; }\r\n\r\n /**\r\n * Getter for the base for the service url, endpoints/queries are appended for specific service calls.\r\n * This is the oneservice url used for personalized content.\r\n * Possible values are enumerated on OneServiceConfig.ts\r\n *\r\n * @type {URL}\r\n * @memberof AppEnvironment\r\n */\r\n public get ServiceUrlBase(): URL {\r\n const url = new URL(\"\", this.serviceUrlBase);\r\n\r\n if (process.env.WEBPACK_DEV_SERVER || new URLSearchParams(getLocationSearch()).get(\"env\") === \"dev\") {\r\n url.searchParams.set(\"env.service\", \"dev\");\r\n }\r\n\r\n const searchParam = new URLSearchParams(getLocationSearch()).get(\"env.service\");\r\n if (searchParam) {\r\n url.searchParams.set(\"env.service\", searchParam);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Base URL for the feed service\r\n */\r\n public get FeedServiceUrlBase(): URL {\r\n if (!this.feedServiceUrlBase) {\r\n return null;\r\n }\r\n\r\n const url = new URL(\"\", this.feedServiceUrlBase);\r\n\r\n if (process.env.WEBPACK_DEV_SERVER || new URLSearchParams(getLocationSearch()).get(\"env\") === \"dev\") {\r\n url.searchParams.set(\"env.service\", \"dev\");\r\n }\r\n\r\n const searchParam = new URLSearchParams(getLocationSearch()).get(\"env.service\");\r\n if (searchParam) {\r\n url.searchParams.set(\"env.service\", searchParam);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Base URL for the enterprise service\r\n */\r\n public get EnterpriseServiceUrlBase(): URL {\r\n const url = new URL(\"\", EnterpriseOneServiceApi);\r\n\r\n if (process.env.WEBPACK_DEV_SERVER || new URLSearchParams(getLocationSearch()).get(\"env\") === \"dev\") {\r\n url.searchParams.set(\"env.service\", \"dev\");\r\n }\r\n\r\n const searchParam = new URLSearchParams(getLocationSearch()).get(\"env.service\");\r\n if (searchParam) {\r\n url.searchParams.set(\"env.service\", searchParam);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n public get IsFrePage(): boolean { return this.isFrePage; }\r\n\r\n /**\r\n * This is the switch to turn on/off indexed db operation used as a caching layer in config resolver (Resolver.ts)\r\n */\r\n public get DisableCachingConfigs(): boolean { return this.disableCachingConfigs; }\r\n\r\n /**\r\n * This is the switch to turn on/off config service operation in Resolver.ts\r\n */\r\n public get EnableConfigService(): boolean { return this.enableConfigService; }\r\n\r\n /**\r\n * This indicates whether we will use CMS PPE configs or not\r\n */\r\n public get EnableCMSPPEConfigs(): boolean { return headData && headData.EnableCMSPPEConfigs; }\r\n\r\n /**\r\n * Check whether multi config retrieval is supported.\r\n */\r\n public get IsMultiConfigRetrievalEnabled(): boolean { return this.isMultiConfigRetrievalEnabled; }\r\n\r\n /**\r\n * This is the switch to turn on/off content preview caching in core/cache/ContentPreview.ts\r\n */\r\n public get DisableContentPreviewCache(): boolean {\r\n return this.disableContentPreviewCache;\r\n }\r\n\r\n /**\r\n * Returns a flag indicating whether the one service feed fetch call should send activityID\r\n * in the request header or as a QSP in the URL (current behavior is via QSP).\r\n */\r\n public get SendFeedCallActivityIdInHeader(): boolean {\r\n return this.sendFeedCallActivityIdInHeader;\r\n }\r\n\r\n /**\r\n * This is the switch to turn off hydrating content preview cache from IndexedDB.\r\n * Default is false\r\n */\r\n public get DisableContentCacheIDBRead(): boolean {\r\n const queryParamOverride = UrlUtility.getQueryParameterByName(\"disableContentCacheIDBRead\", getLocationSearch());\r\n\r\n if (queryParamOverride) {\r\n return queryParamOverride === \"true\";\r\n }\r\n\r\n return this.disableContentCacheIDBRead;\r\n }\r\n\r\n /**\r\n * This is the switch to turn on/off content list caching in core/cache/ContentPreview.ts\r\n */\r\n public get DisableContentListCache(): boolean {\r\n return this.disableContentListCache;\r\n }\r\n\r\n /**\r\n * This is the switch to turn off hydrating content list cache from IndexedDB.\r\n * Default is false\r\n */\r\n public get DisableContentListCacheIDBRead(): boolean {\r\n const queryParamOverride = UrlUtility.getQueryParameterByName(\"disableContentListCacheIDBRead\", getLocationSearch());\r\n\r\n if (queryParamOverride) {\r\n return queryParamOverride === \"true\";\r\n }\r\n\r\n return this.disableContentListCacheIDBRead;\r\n }\r\n\r\n /**\r\n * Get base url of Config Service.\r\n */\r\n public get ConfigServiceBaseUrl(): URL { return this.configServiceBaseUrl; }\r\n\r\n /**\r\n * This returns feature flags client settings stamped by PCS.\r\n */\r\n public get FeatureFlags(): any { return this.featureFlags; }\r\n\r\n /**\r\n * This returns config root url\r\n */\r\n public get ConfigRootUrl(): URL {\r\n if (!this.configRootUrl) {\r\n return null;\r\n }\r\n\r\n const url = new URL(\"\", this.configRootUrl);\r\n\r\n if (process.env.WEBPACK_DEV_SERVER || new URLSearchParams(getLocationSearch()).get(\"env\") === \"dev\") {\r\n url.searchParams.set(\"env.config\", \"dev\");\r\n }\r\n\r\n const searchParam = new URLSearchParams(getLocationSearch()).get(\"env.config\");\r\n if (searchParam) {\r\n url.searchParams.set(\"env.config\", searchParam);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Returns cache busting identifier from PCS.\r\n */\r\n public get CacheBustingIdentifier(): string { return this.cacheBustingIdentifier; }\r\n\r\n /**\r\n * Returns the country code. For example \"br\"\r\n */\r\n public get CountryCode(): string { return this.countryCode; }\r\n public set CountryCode(value: string) { this.countryCode = value; }\r\n\r\n /// / FIXME: hyphen has a second 'h'\r\n /// / Bug 24228723: [Peregrine] ActivityIdLowerCaseNoHypens misspells \"Hyphen\"\r\n /**\r\n * Gets the Activity ID in lower case and without any hyphens. This helper method should be where parity with Prime is required.\r\n * Use telemetry's requestId instead for associating with current page client navigation\r\n */\r\n public get ActivityIdLowerCaseNoHypens(): string { return ((headData && headData.ClientSettings && headData.ClientSettings.aid) || \"\").toLowerCase(); }\r\n\r\n /**\r\n * Returns the latitude. For example \"42.361145\"\r\n */\r\n public get Latitude(): string { return this.latitude; }\r\n\r\n /**\r\n * Returns the longitude. For example \"-71.057083\"\r\n */\r\n public get Longitude(): string { return this.longitude; }\r\n\r\n /**\r\n * Initialize the AppEnvironment singleton instance.\r\n * @param _serviceUrl Optional URL to initialize the ServiceUrlBase.\r\n * @param _configServiceUrlBase ConfigServiceUrlBase provided during server side rendering this is the ServiceFabric ClusterRegionUrl.\r\n */\r\n private constructor(_serviceUrl: URL, _configServiceUrlBase: string) {\r\n this.initializeAppEnvironment(_serviceUrl, _configServiceUrlBase);\r\n }\r\n\r\n /**\r\n * Returns singleton class instance.\r\n * @returns {AppEnvironment}\r\n */\r\n public static getInstance(serviceUrl: URL = null, configServiceUrlBase: string = null): AppEnvironment {\r\n return AppEnvironment._instance || (AppEnvironment._instance = new AppEnvironment(serviceUrl, configServiceUrlBase));\r\n }\r\n\r\n /**\r\n * Reinitialize the singleton class instance.\r\n * @param serviceUrl OneService service url to initialize to.\r\n * @param configServiceUrlBase Config service url to initialize to.\r\n * @returns {AppEnvironment}\r\n */\r\n public static resetInstance(serviceUrl: URL = null, configServiceUrlBase: string = null): AppEnvironment {\r\n AppEnvironment._instance = new AppEnvironment(serviceUrl, configServiceUrlBase);\r\n appEnvironment = AppEnvironment._instance;\r\n return AppEnvironment._instance;\r\n }\r\n\r\n /**\r\n * Initializes App environment. This is normally only called by the constructor (singleton pattern)\r\n * It is made public so that it can be also called by test code.\r\n */\r\n public initializeAppEnvironment(_serviceUrl?: URL, configServiceUrlBase?: string): void {\r\n\r\n let environmentFromHeadData: Environment = null;\r\n const clientSettings = headData && headData.ClientSettings;\r\n\r\n if (clientSettings) {\r\n this.activityId = this.tryReformatGuid(clientSettings.aid);\r\n this.buildVersion = clientSettings.bundleInfo && clientSettings.bundleInfo.v || \"\";\r\n this.currentMarket = (headData.Locale || clientSettings.apps_locale) as Market;\r\n this.countryCode = clientSettings.geo_country;\r\n this.latitude = clientSettings.geo_lat;\r\n this.longitude = clientSettings.geo_long;\r\n this.configRootUrl = clientSettings.configRootUrl ? new URL(\"\", clientSettings.configRootUrl) : null;\r\n environmentFromHeadData = getEnvironmentFromString(clientSettings.pcsInfo && clientSettings.pcsInfo.env || \"prod\");\r\n\r\n this.setAccountInfoPromise();\r\n this.appType = clientSettings.apptype || \"\";\r\n this.authCookieName = this.getAuthCookieName();\r\n this.useOneServiceAuthEndpoints = false;\r\n\r\n this.featureFlags = clientSettings.featureFlags;\r\n\r\n this.disableCachingConfigs =\r\n this.featureFlags && this.featureFlags.disableCachingConfigs\r\n ? this.featureFlags.disableCachingConfigs === \"true\"\r\n : false;\r\n\r\n this.enableConfigService =\r\n this.featureFlags && this.featureFlags.enableConfigService\r\n ? this.featureFlags.enableConfigService === \"true\"\r\n : true;\r\n\r\n this.disableContentPreviewCache =\r\n this.featureFlags && this.featureFlags.disableContentPreviewCache\r\n ? this.featureFlags.disableContentPreviewCache === \"true\"\r\n : false;\r\n\r\n this.disableContentCacheIDBRead = this.featureFlags && this.featureFlags.disableContentCacheIDBRead\r\n ? this.featureFlags.disableContentCacheIDBRead === \"true\"\r\n : false;\r\n\r\n this.disableContentListCache =\r\n this.featureFlags && this.featureFlags.disableContentListCache\r\n ? this.featureFlags.disableContentListCache === \"true\"\r\n : false;\r\n\r\n this.disableContentListCacheIDBRead = this.featureFlags && this.featureFlags.disableContentListCacheIDBRead\r\n ? this.featureFlags.disableContentListCacheIDBRead === \"true\"\r\n : false;\r\n\r\n // Use feature flag as a switch to disable the feature (will need a PCS deployment)\r\n this.sendFeedCallActivityIdInHeader = this.featureFlags && this.featureFlags.disableActivityIdInHeader && this.featureFlags.disableActivityIdInHeader === \"true\"\r\n ? false\r\n : this.appType === AppType.Edge || this.appType === AppType.Hub;\r\n\r\n this.cacheBustingIdentifier = clientSettings.cbid;\r\n\r\n if (clientSettings.pcsInfo && !getAppErrorsPropertyBag().pcsVersion) {\r\n const propertyBagPcsVersion: AppErrorPropertyBag = {\r\n pcsVersion: clientSettings.pcsInfo.v\r\n };\r\n\r\n updateAppErrorsPropertyBag(propertyBagPcsVersion);\r\n }\r\n }\r\n\r\n const rootElement = canUseDOM() ? getDocumentElementById(rootElementId) : null;\r\n const locationHref = getLocationHref();\r\n const locationOrigin = getLocationOrigin();\r\n\r\n // env is read from\r\n // - query string param env, if present\r\n // - headData.ClientSettings.pcsInfo.env\r\n // - defaults to prod otherwise\r\n const envQSOverwrite = getEnvironmentFromString(UrlUtility.getQueryParameterByName(\"env\", locationHref));\r\n this.environment =\r\n envQSOverwrite\r\n || environmentFromHeadData\r\n || Environment.prod;\r\n\r\n // Find the host for the Akamai assets store.\r\n this.assetsHost = getLocationHostname().endsWith(\".cn\") ? \"assets.msn.cn\" : \"assets.msn.com\";\r\n\r\n this.serviceUrlBase = _serviceUrl || (rootElement && rootElement.getAttribute(serviceUrl) && new URL(\"\", rootElement.getAttribute(serviceUrl))) || new URL(\"\", `https://${this.assetsHost}/service/`);\r\n\r\n // Dependency (revert back when complete):\r\n // Deliverable 27138476: [PCS] China pages should point to assets via assets.msn.cn for all endpoints send from PCS.\r\n // This is also applied to WW Environment.\r\n // Only default to assets.msn.com if anaheim, msftnews or edge.\r\n // Should never be applied to MMX due to additional handshake overhead\r\n const defaultFeedBaseDomain = this.appType === AppType.EdgeChromium || this.appType === AppType.MicrosoftNews || this.appType === AppType.Edge ? `https://${this.assetsHost}` : locationOrigin;\r\n\r\n // If PCS sent the feed base domain, use it for the feed URL base\r\n // or else default to host page rooted URL.\r\n this.feedServiceUrlBase = new URL(\"./service/\", clientSettings && clientSettings.feedBaseDomain ? clientSettings.feedBaseDomain : defaultFeedBaseDomain);\r\n\r\n // Get the hostPage from the request url\r\n this.hostPage = HostPage.getHostPageFromUrl(locationHref);\r\n\r\n // Determine if the page is running as an FRE page\r\n this.isFrePage = (UrlUtility.getQueryParameterByName(\"fre\", locationHref) === \"1\");\r\n\r\n this.userId = this.getUserMuid();\r\n\r\n // Get attributes from the head (full page Peregrine experience) or from the spa \"root\" element (PrimeHybrid case)\r\n // TODO, determine where in the element attributes these values should be set\r\n this.rootTelemetryId = rootElement ? Number(rootElement.getAttribute(telemetryId)) : 0;\r\n const trackPageProd = rootElement && rootElement.getAttribute(trackPageProduct);\r\n const trackPageTypeVal = rootElement && rootElement.getAttribute(trackPageType);\r\n this.trackInfo = { sitePage: { page_product: trackPageProd, page_type: trackPageTypeVal } };\r\n\r\n this.contentServiceUrlBase = new URL(\"\", `https://${this.assetsHost}/content/`);\r\n\r\n this.currentContentLinkHost = this.createContentLinkHost();\r\n\r\n this.setTargetScope();\r\n\r\n this.isMultiConfigRetrievalEnabled = this.useMultiConfigsRetrieval();\r\n\r\n const baseUrl = this.getConfigServiceBaseUrl(this.isMultiConfigRetrievalEnabled, configServiceUrlBase);\r\n this.configServiceBaseUrl = baseUrl ? new URL(\"\", baseUrl) : null;\r\n\r\n this.environmentConfigUrl = new URL(\"\", `https://${this.assetsHost}/config/v1/`);\r\n\r\n this.isDebug = ((UrlUtility.getQueryParameterByName(\"debug\", locationHref) || \"\").toLowerCase() in { 1: 1, true: 1 })\r\n || (UrlUtility.getQueryParameterByName(\"item\", locationHref) || \"\").toLowerCase().indexOf(\"/debug\") > 0;\r\n\r\n this.showMnsCreatorDashboard = UrlUtility.getQueryParameterByName(\"mnsDash\", locationHref) != null;\r\n }\r\n\r\n /**\r\n * Get the UserMuid from the muid cookie\r\n */\r\n private getUserMuid(): string {\r\n let muid: string;\r\n const muidCookie: string = getMuidCookie();\r\n if (isString(muidCookie)) {\r\n muid = \"m-\" + muidCookie;\r\n }\r\n return muid;\r\n }\r\n\r\n /**\r\n * Get config service base url\r\n * @param isMultiConfigRetrievalEnabled if multiple config retrieval is supported.\r\n * @param configServiceUrlBase externally configured config service url (from SSR environment)\r\n * @returns {string} - config service base url.\r\n */\r\n private getConfigServiceBaseUrl(isMultiConfigRetrievalEnabled = true, configServiceUrlBase?: string): string {\r\n const relativePath = `/resolver/api/resolve/${isMultiConfigRetrievalEnabled ? \"v2/\" : \"\"}configindex/`;\r\n\r\n if (configServiceUrlBase) {\r\n // When doing server side rendering the ClusterRegionUrl env variable should be set, use this to avoid calls to CRS going outside of the cluster.\r\n return configServiceUrlBase + relativePath;\r\n } else if (process.env.WEBPACK_DEV_SERVER || this.environment === Environment.int) {\r\n // int and localhost to use int.msn.com for config service.\r\n return \"https://int.msn.com\" + relativePath;\r\n } else {\r\n return getLocationOrigin() ? getLocationOrigin() + relativePath : null;\r\n }\r\n }\r\n\r\n /**\r\n * Function checks if ConfigService should return multiple configs\r\n * @returns true if supported else false.\r\n */\r\n private useMultiConfigsRetrieval(): boolean {\r\n const urlQuery = getLocationSearch();\r\n if (urlQuery) {\r\n const param = UrlUtility.getQueryParameterByName(\"isMultiConfigRetrievalEnabled\", urlQuery);\r\n if (param) {\r\n return param.toLocaleLowerCase() === \"true\";\r\n }\r\n }\r\n\r\n // PCS flag to turn on/off multi config retrieval.\r\n if (this.featureFlags\r\n && this.featureFlags.isMultiConfigRetrievalEnabled) {\r\n return this.featureFlags.isMultiConfigRetrievalEnabled === \"true\";\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Get the auth cookie name based on the app type of the page\r\n * @returns {AuthCookieName} - the name of the auth cookie to use\r\n */\r\n private getAuthCookieName(): AuthCookieName {\r\n const clientSettings = headData && headData.ClientSettings;\r\n const appType: AppType = (clientSettings.apptype || \"\") as AppType;\r\n let authCookieName: AuthCookieName;\r\n switch (appType) {\r\n case AppType.FirstParty:\r\n case AppType.Hub:\r\n case AppType.MicrosoftNews:\r\n case AppType.Views:\r\n case AppType.Weather:\r\n authCookieName = AuthCookieName.Anon;\r\n break;\r\n case AppType.Edge:\r\n case AppType.EdgeChromium:\r\n case AppType.MMX:\r\n case AppType.Office:\r\n default:\r\n authCookieName = AuthCookieName.AppAnon;\r\n }\r\n\r\n return authCookieName;\r\n }\r\n\r\n /**\r\n * Sets the AccountInfoPromise for the current user.\r\n * If unable to await, ResolvedAccountInfo is also set when the promise is resolved.\r\n */\r\n private setAccountInfoPromise(): void {\r\n this.ResolvedAccountInfo = null;\r\n this.AccountInfoPromise = new Promise((resolve) => {\r\n if (!canUseDOM() || !window.chrome || !window.chrome.authPrivate || !window.chrome.authPrivate.getPrimaryAccountInfo) {\r\n return resolve(null);\r\n }\r\n\r\n const markerName = \"Auth.GetPrimaryAccountInfo\";\r\n const startTime = Math.round(performance.now());\r\n\r\n window.chrome.authPrivate.getPrimaryAccountInfo((accountInfo) => {\r\n const endTime = Math.round(performance.now());\r\n const pageTimings = getPageTimings();\r\n pageTimings[markerName] = endTime - startTime;\r\n\r\n this.ResolvedAccountInfo = accountInfo;\r\n return resolve(accountInfo);\r\n });\r\n });\r\n\r\n // Start the promise asynchronously.\r\n this.AccountInfoPromise;\r\n }\r\n\r\n /**\r\n * Determines the content link host to use.\r\n * @returns The content link host.\r\n */\r\n private createContentLinkHost(): string {\r\n const topLevelDomain = this.currentMarket === Market.ZHCN ? \"cn\" : \"com\";\r\n return \"www.msn.\" + topLevelDomain;\r\n }\r\n\r\n /**\r\n * Reformats the given guid without dashes to a guid string with dashes.\r\n * @param {string} guid - The guid without dashes.\r\n * @returns {string} - The reformatted GUI with dashes.\r\n */\r\n private tryReformatGuid(guid: string): string {\r\n if (guid && guid.length === 32) {\r\n // use a regex to extract the specific substrings to reformat the guid\r\n const matches = guid.match(/(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})/i);\r\n if (matches) {\r\n // join all the captured groups from 1-5 to format the final guid string\r\n guid = matches.slice(1).join(\"-\");\r\n }\r\n }\r\n\r\n return guid;\r\n }\r\n\r\n /**\r\n * Sets target scope for current request.\r\n */\r\n private setTargetScope(): void {\r\n if (!headData || !headData.ClientSettings) {\r\n return;\r\n }\r\n\r\n // If user is signed in and \"child\" Cookie exists - set Kids audience mode, otherwise use PCS provided Audience mode.\r\n let audienceMode: AudienceModeType;\r\n if (getCookie(appAnonCookieExistsCookieName) && getCookie(childCookieName)) {\r\n audienceMode = AudienceModeType.Kids;\r\n } else {\r\n audienceMode = headData.ClientSettings.audienceMode || AudienceModeType.Adult;\r\n }\r\n\r\n const { browser, deviceFormFactor, domain, locale, os, pagetype } = headData.ClientSettings;\r\n\r\n this.currentRequestTargetScope = {\r\n audienceMode: audienceMode,\r\n browser: browser,\r\n deviceFormFactor: deviceFormFactor,\r\n domain: domain,\r\n locale: locale,\r\n os: os,\r\n platform: PlatformType.Web,\r\n pageType: pagetype\r\n };\r\n\r\n // if locale is not defined in client settings, try reading it from headData for backward compatibility\r\n if (!this.currentRequestTargetScope.locale && Utility.stringHasData(headData.Locale)) {\r\n const locale = headData.Locale.split(\"-\");\r\n if (locale.length > 1) {\r\n this.currentRequestTargetScope.locale = {\r\n language: locale[0],\r\n // Some spartan locale are in format \"ha-latn-ng\". Here the market is \"ng\" and language is \"ha\"\r\n market: locale[locale.length - 1]\r\n };\r\n }\r\n }\r\n\r\n if (Utility.stringHasData(headData.CurrentFlights)) {\r\n this.currentRequestTargetScope.pageExperiments = headData.CurrentFlights.split(\",\");\r\n }\r\n\r\n this.addWpoFlights();\r\n }\r\n\r\n /**\r\n * Adds WPO flights to the current request target scope pageExperiments.\r\n */\r\n private addWpoFlights(): void {\r\n\r\n if (!isWpoEnabled(this.currentRequestTargetScope.pageExperiments)) {\r\n return;\r\n }\r\n\r\n const key: string = getWpoStorageCacheKey(this.appType, this.currentRequestTargetScope);\r\n const wpoData: WpoModel = localStorage.getObject(key);\r\n const flightsCached: string[] = getWpoFlights(wpoData);\r\n\r\n if (!flightsCached) {\r\n return;\r\n }\r\n\r\n this.currentRequestTargetScope.pageExperiments = this.currentRequestTargetScope.pageExperiments.concat(flightsCached);\r\n }\r\n}\r\n\r\nexport const getAppEnvironment = AppEnvironment.getInstance;\r\n\r\n// appEnvironment can be reinitialized for server side rendering through resetAppEnvironment.\r\nexport let appEnvironment = AppEnvironment.getInstance();\r\n\r\nexport const resetAppEnvironment = AppEnvironment.resetInstance;","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { BrowserConsoleAppender } from \"clientcore-infrastructure-analytics/appenders/BrowserConsoleAppender\";\r\nimport { ILoggingService } from \"clientcore-infrastructure-analytics/ILoggingService\";\r\nimport { LogLevel } from \"clientcore-infrastructure-analytics/models/LogLevel\";\r\nimport { LoggingService } from \"clientcore-infrastructure-analytics/LoggingService\";\r\nimport { NodeConsoleAppender } from \"clientcore-infrastructure-analytics/appenders/NodeConsoleAppender\";\r\nimport { RuntimeEnvironment } from \"clientcore-infrastructure-analytics/RuntimeEnvironment\";\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\n\r\n/** The Logger class */\r\nexport class Logger {\r\n /** A default instance of the Logger class. */\r\n public static readonly defaultInstance: Logger = new Logger();\r\n\r\n /** Backing field for the isDebug function */\r\n private isDebugEnabled: boolean;\r\n\r\n /** The common logger for the application. The logging level for this is updated in initialize */\r\n private logger: ILoggingService;\r\n\r\n /** Backing field to hold reference to the window object */\r\n private windowObj?: Window;\r\n\r\n /**\r\n * The constructor\r\n */\r\n private constructor() {\r\n if (canUseDOM()) {\r\n this.setupBrowserEnvironment(window);\r\n\r\n if (this.isDebugEnabled) {\r\n // @ts-ignore\r\n window.webpackRequire = __webpack_require__;\r\n }\r\n } else {\r\n this.setupNodeEnvironment();\r\n }\r\n }\r\n\r\n /**\r\n * Setup client side logging environment - this sets / overrides the Window obj\r\n * @param windowObj - The Window obj to use\r\n */\r\n public setupBrowserEnvironment(windowObj: Window): void {\r\n this.logger = LoggingService.getInstance(\"ExperienceLogger\", LogLevel.Info, RuntimeEnvironment.Browser);\r\n\r\n this.windowObj = windowObj;\r\n\r\n // Once we have a WindowObj, we can determine if debug mode is enabled\r\n this.isDebugEnabled = ((this.getQueryParameterByName(windowObj.location.href, \"debug\") || \"\").toLowerCase() in { 1: 1, true: 1 });\r\n\r\n this.setupLogLevel();\r\n }\r\n\r\n /**\r\n * Setup server side logging environment\r\n */\r\n public setupNodeEnvironment(): void {\r\n this.logger = LoggingService.getInstance(\"ExperienceLogger\", LogLevel.Info, RuntimeEnvironment.NodeJs);\r\n this.isDebugEnabled = false; // isDebugEnabled should be set explictly using the setDebug method\r\n this.setupLogLevel();\r\n }\r\n\r\n /**\r\n * Returns the logging service\r\n * @returns {ILoggingService}\r\n */\r\n public getLoggingService(): ILoggingService {\r\n return this.logger;\r\n }\r\n\r\n /**\r\n * Checks whether we're running in debug mode.\r\n * @returns True when either debug=1 or debug=true is present as a query param, otherwise false.\r\n */\r\n public isDebug(): boolean {\r\n return this.isDebugEnabled;\r\n }\r\n\r\n /**\r\n * Override the isDebug setting. Useful when server side rendering.\r\n */\r\n public setDebug(isDebug: boolean): void {\r\n this.isDebugEnabled = isDebug;\r\n this.setupLogLevel();\r\n }\r\n\r\n /**\r\n * Log console message.\r\n * Note that these are not output to the console unless you're in debug mode.\r\n * @param message - Message to log.\r\n */\r\n public log(message: string): void {\r\n if (this.isDebug()) {\r\n if (!canUseDOM()) {\r\n // currently the logger is incredibly verbose when printing on the server side.\r\n // For now just directly print to console.\r\n // Work Item to address this: http://osgvsowi/24861651\r\n console.log(\"logger.info:\", message);\r\n } else {\r\n this.logger.info(message);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Log error message.\r\n * @param message - Message to log\r\n */\r\n public logError(message: string): void {\r\n this.logger.error(message);\r\n }\r\n\r\n /**\r\n * Lazy log console message. Use this when the message being constructed is complex or expensive so that it's only evaluated if needed.\r\n * Note that the callback is not invoked and the message is not output unless you're in debug mode.\r\n * @param getMessage - The function to call to get message to log\r\n */\r\n public logCallback(getMessage: () => string): void {\r\n this.logger.infoCallback(getMessage);\r\n }\r\n\r\n /**\r\n * Log the object to the console.\r\n * Note that these are not output to the console unless you're in debug mode.\r\n * @param message - Array of messages to log\r\n */\r\n public logObjects(...message: any[]): void {\r\n if (this.isDebug()) {\r\n if (canUseDOM() && this.windowObj) {\r\n this.windowObj.console.log(...message);\r\n } else {\r\n console.log(\"logger.logObjects:\", ...message);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set logger log level.\r\n */\r\n private setupLogLevel(): void {\r\n // Note that we need to set the level at the root logger level or else the callback versions of the logging\r\n // methods will still be invoked to disseminate the message to the appenders.\r\n this.logger.setLevel(this.isDebug() ? LogLevel.Info : LogLevel.Error);\r\n this.setupAppenders();\r\n }\r\n\r\n /**\r\n * Add relevant appenders to the logger depending.\r\n */\r\n private setupAppenders(): void {\r\n this.logger.removeAllAppenders();\r\n if (canUseDOM()) {\r\n this.logger.addAppender(new BrowserConsoleAppender(this.logger.getLevel()));\r\n } else {\r\n this.logger.addAppender(new NodeConsoleAppender(this.logger.getLevel()));\r\n }\r\n }\r\n\r\n /**\r\n * Utility method to extract query string param in url.\r\n * @param name - Query param name\r\n * @returns Query param value\r\n */\r\n private getQueryParameterByName(locationHref: string, name: string): string {\r\n\r\n const nameRegEx = name.replace(/[[\\]]/g, \"\\\\$&\");\r\n const regex: any = new RegExp(\"[?&]\" + nameRegEx + \"(=([^&#]*)|&|#|$)\");\r\n\r\n const queryNameValueMatches: any = regex.exec(locationHref);\r\n if (!queryNameValueMatches) {\r\n return null;\r\n }\r\n\r\n // the second group would contain the value of the param\r\n const queryValue = queryNameValueMatches[2];\r\n\r\n return decodeURIComponent(queryValue.replace(/\\+/g, \" \")) || \"\";\r\n }\r\n}\r\n\r\nexport const logger = Logger.defaultInstance;","// © Microsoft Corporation. All rights reserved.\r\n\r\n// Front Door issues an activityID (which we refer to as a RID) per page view and we use this ID in tracking and ad calls,\r\n// There are specific circumstances where we need a unique GUID for every event, for example when navigating between slideshow images or refreshing ads withoug a page refresh\r\n// example usage:\r\n// mediator.pub(\"updatePageInstance\");\r\n// var trackInfoRequestId = pageInstance.getRequestId() || trackInfo.sitePage.requestId;\r\n\r\nimport guidGen from \"./guidGen\";\r\nimport mediator from \"./mediator\";\r\nimport telemetryConstants from \"./telemetryconstants\";\r\n\r\nlet rid;\r\nconst pageInstanceEventName = \"updatePageInstance\";\r\nconst updatePageInstance = function () {\r\n rid = guidGen().replace(/-/g, \"\");\r\n\r\n mediator.pub(telemetryConstants.ResetIdx);\r\n\r\n // replace the impression guid for bing search box\r\n const form = document.body.querySelector(\"#srchfrm\");\r\n if (form) {\r\n const refigInputs = form.querySelectorAll(\"input[name='refig']\");\r\n const length = refigInputs.length;\r\n for (let i = 0; i < length; i++) {\r\n // @ts-ignore\r\n refigInputs[i].value = rid;\r\n }\r\n }\r\n};\r\n\r\nmediator.sub(pageInstanceEventName, updatePageInstance);\r\n\r\nexport default {\r\n getRequestId: function() { return rid; },\r\n setRequestId: function (newRequestId) {\r\n rid = newRequestId;\r\n\r\n // Reset eventIndex (telemetry related params) everytime requestId gets set\r\n mediator.pub(telemetryConstants.ResetIdx);\r\n },\r\n eventName: pageInstanceEventName,\r\n\r\n // exposing direct call to updatePageInstance to eliminate delay rid update\r\n // when executed via mediator.pub\r\n updatePageInstance: updatePageInstance\r\n };\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { toNumber as _toNumber, isString } from \"lodash-es\";\r\n\r\nexport type KeyValuePair = { key: K, value: V };\r\nexport type KeyValueArray = KeyValuePair[];\r\n\r\nexport namespace Utility {\r\n /**\r\n * Check if given value is not null. Returns true when not null, otherwise false.\r\n *\r\n * @export\r\n * @param {any} value - Value to check for not null\r\n * @return {boolean}\r\n */\r\n export function isNotNullOrUndefined(value: any): boolean {\r\n return typeof value !== \"undefined\" && value !== null;\r\n }\r\n\r\n export interface IHashable {\r\n /**\r\n * This function will return the string representation of the complex object\r\n * @type {function}\r\n */\r\n toString(): string;\r\n }\r\n\r\n /**\r\n * Check if given value is defined. Returns true when defined, otherwise false.\r\n *\r\n * @export\r\n * @param {any} value - Value to check for defined\r\n * @return {boolean}\r\n */\r\n export function isDefined(value: any): boolean {\r\n return (typeof value !== \"undefined\");\r\n }\r\n\r\n /**\r\n * Check if a given value is a valid key value pair\r\n *\r\n * @export\r\n * @param potentialKeyValuePair\r\n * @return {boolean}\r\n */\r\n export function isKeyValuePair(potentialKeyValuePair: { key: K, value: V },\r\n isKey: (key: K) => boolean,\r\n isValue: (value: V) => boolean): boolean {\r\n return Utility.isNonNullObject(potentialKeyValuePair)\r\n && isKey(potentialKeyValuePair.key)\r\n && isValue(potentialKeyValuePair.value);\r\n }\r\n\r\n /**\r\n * Check if given value is a non null object. Returns true when value is non null , otherwise false.\r\n *\r\n * @export\r\n * @param {any} value - Value to check for non null\r\n * @return {boolean}\r\n */\r\n export function isNonNullObject(value: any): boolean {\r\n return value && typeof value === \"object\";\r\n }\r\n\r\n /**\r\n * Check if given value is not null. Returns true when not null, otherwise false.\r\n *\r\n * @export\r\n * @param {any} value - Value to check for not null\r\n * @return {boolean}\r\n */\r\n export function isNotNull(value: any): boolean {\r\n return value !== null;\r\n }\r\n\r\n /**\r\n * Check if given value is a a non-null or non-empty string. Returns true when it is, otherwise false.\r\n *\r\n * @export\r\n * @param {string} value - Value to check for string\r\n * @return {boolean}\r\n */\r\n export function isNullOrWhiteSpace(value: string): boolean {\r\n return !isString(value) || value.trim() === \"\";\r\n }\r\n\r\n /**\r\n * Converts string to number\r\n *\r\n * @export\r\n * @param {string} value - string to convert to a number\r\n * @param {number} defaultValue - number to return if there is an error\r\n * @return {number}\r\n */\r\n export function toNumber(value: string, defaultValue = -1): number {\r\n if (!value) {\r\n return defaultValue;\r\n }\r\n\r\n const result = _toNumber(value);\r\n if (!isNaN(result)) {\r\n return result;\r\n } else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n /**\r\n * Check if given value is an array with content in it.\r\n * Returns true when value is an array with content, otherwise false.\r\n *\r\n * @export\r\n * @param {any[]} value - Value to check for array with content\r\n * @return {boolean}\r\n */\r\n export function arrayHasData(value: any[]): boolean {\r\n if (isNotNullOrUndefined(value)) {\r\n return ((value.constructor === Array) && (value.length > 0));\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Check if given value is a string with content in it.\r\n * Returns true when value is a string with content, otherwise false.\r\n *\r\n * @export\r\n * @param {string} value - Value to check for string with content\r\n * @return {boolean}\r\n */\r\n export function stringHasData(value: string): boolean {\r\n return (isString(value) && (value.trim().length > 0));\r\n }\r\n\r\n /**\r\n * Convert object to string representation for it's values.\r\n * @param {object} object - The object to convert\r\n * @returns {string}\r\n */\r\n export function objectToString(object: object): string {\r\n let value = \"\";\r\n let firstRun = true;\r\n\r\n if (typeof object !== \"object\") {\r\n return value;\r\n }\r\n\r\n for (const attribute in object) {\r\n if (typeof object[attribute] === \"object\") {\r\n value += firstRun ? `${objectToString(object[attribute])}` : `-${objectToString(object[attribute])}`;\r\n } else {\r\n value += firstRun ? `${object[attribute]}` : `-${object[attribute]}`;\r\n }\r\n\r\n firstRun = false;\r\n }\r\n\r\n return value;\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { canUseDOM, getLocationSearch } from \"@msnews/isomorphic-util/\";\r\n\r\n/**\r\n * Defines telemetryReadyCallback() which queues a function to be called after the page is revealed.\r\n * This is specific for telemetry package and should not be used for preload dependent features.\r\n * Telemetry can't have a reference to preload since preload references experiences-redux which\r\n * then references telemetry which causes a problem.\r\n * This helper is specific to queuing telemetry calls when needed and invoking the queued calls once\r\n * the preload page is revealed.\r\n */\r\n\r\nconst queuedCalls: Function[] = [];\r\nconst locationSearch = getLocationSearch();\r\nconst isPreload = locationSearch && (locationSearch.match(/backgroundpreload/) || locationSearch.match(/prerender/));\r\nlet pageRevealed = false;\r\nlet trackValuesUpdated = true;\r\n\r\n// Check and add an event listener if page has been pre-loaded but not yet revealed.\r\nif (canUseDOM() && isPreload && document.visibilityState !== \"visible\") {\r\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\r\n} else {\r\n pageRevealed = true;\r\n}\r\n\r\n/** Event handler for page visibility change */\r\nfunction onVisibilityChange(): void {\r\n if (canUseDOM()) {\r\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\r\n }\r\n pageRevealed = true;\r\n checkAndFireQueuedCalls();\r\n}\r\n\r\n/** Event handler to run once track values have been updated by respective entities */\r\nfunction onTrackValuesUpdated(): void {\r\n if (canUseDOM()) {\r\n document.removeEventListener(\"trackvaluesupdated\", onTrackValuesUpdated);\r\n }\r\n trackValuesUpdated = true;\r\n checkAndFireQueuedCalls();\r\n}\r\n\r\n/** Helper method to check if all conditions have been satisfied and then fire queued up telemetry beacons */\r\nfunction checkAndFireQueuedCalls(): void {\r\n if (trackValuesUpdated && pageRevealed) {\r\n while (queuedCalls.length) {\r\n const item = queuedCalls.shift();\r\n if (typeof item === \"function\") {\r\n item();\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** If config dictates to wait for page settings to update track values, set trackValuesUpdated to false and add an event listener for trackvaluesupdated. */\r\nexport function waitForPageSettingsTrackUpdate(waitForPageSettingsToUpdateTrack: boolean): void {\r\n if (!waitForPageSettingsToUpdateTrack) {\r\n return;\r\n }\r\n\r\n trackValuesUpdated = false;\r\n\r\n if (canUseDOM()) {\r\n // Add an event listener to listen for a signal indicating track values have been updated.\r\n document.addEventListener(\"trackvaluesupdated\", onTrackValuesUpdated);\r\n }\r\n}\r\n\r\n/**\r\n * If the page is revealed then just call the callback, if not then queue it up\r\n *\r\n * @param {function(object): void} callback - The callback function.\r\n * @returns {void}\r\n */\r\nexport function telemetryReadyCallback(callback: Function): void {\r\n\r\n if (pageRevealed && trackValuesUpdated) {\r\n callback();\r\n } else {\r\n queuedCalls.push(callback);\r\n }\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { assign, get, merge, set } from \"lodash-es\";\r\n\r\nimport { ConnectorConstants } from \"../constants/ConnectorConstants\";\r\nimport { ConnectorNamespaces } from \"@msnews/experiences-constants\";\r\nimport { IActionPayload } from \"./IActionPayload\";\r\nimport { IDataConnector } from \"../connectors/IDataConnector\";\r\nimport { IReducer } from \"./IReducer\";\r\nimport { dataConnectorInjector } from \"./DataConnectorInjector\";\r\nimport { isNullOrUndefined } from \"util\";\r\n\r\n/** Resolve & Reject Function Signature */\r\ntype ResolveConnectorSignature = (connector: IDataConnector) => void;\r\ntype RejectConnectorSignature = (error: Error) => void;\r\n\r\n/**\r\n * Pending getDataConnector Promise\r\n */\r\ninterface PendingConnectorPromise {\r\n /** Promise */\r\n promise: Promise>;\r\n /** callback to resolve the promise */\r\n resolve: ResolveConnectorSignature;\r\n /** callback to reject the promise */\r\n reject: RejectConnectorSignature;\r\n}\r\n\r\n/** Result from running a reducer. */\r\ninterface ReducerResult {\r\n /** The new state calculated by the reducer */\r\n newState: any;\r\n\r\n /** True if the state changed. */\r\n stateChanged: boolean;\r\n}\r\n\r\n/**\r\n * A reducer that can dynamically add and remove individual sub-reducers\r\n * @class\r\n */\r\nexport class DynamicReducer {\r\n\r\n /**\r\n * A map of connectors, which maintain the sub-spaced state. Reducers and connectors are keyed by namespace\r\n */\r\n private readonly _connectorMap: {[key: string]: IDataConnector} = {};\r\n\r\n /**\r\n * The list of global connectors. Used for fast lookup instead of iterating through _connectorMap keys and toArray methods.\r\n */\r\n private readonly _globalConnectors: IDataConnector[] = [];\r\n\r\n /**\r\n * The list of all connectors. Used for fast lookup instead of iterating through _connectorMap keys and toArray methods.\r\n */\r\n private readonly _allConnectors: IDataConnector[] = [];\r\n\r\n /**\r\n * The list of all pending promises for the get data connector call. Used to resolve the promise when data connector is instantiated.\r\n */\r\n private readonly _getDataConnectorPendingPromises: Map = new Map();\r\n\r\n /**\r\n * Creates an instance of the `DynamicReducer` class.\r\n * @constructor\r\n * @param {string} type The action type.\r\n */\r\n constructor() {\r\n // bind the reduce method to this instance\r\n this.reduce = this.reduce.bind(this);\r\n }\r\n\r\n /**\r\n * Returns an array of connectors that have their reducers registered with this instance\r\n * @method\r\n * @returns {IDataConnector} A simple arry of all connectors\r\n */\r\n public connectors(): IDataConnector[] {\r\n return this._allConnectors;\r\n }\r\n\r\n /**\r\n * Returns an array of connectors that have their reducers registered with this instance\r\n * @method\r\n * @param {string} namespace The namespace of the connector to return, if it is in the map\r\n * @returns {IDataConnector | undefined} A simple arry of all connectors\r\n */\r\n public connector(namespace: string): IDataConnector | undefined {\r\n return (this._connectorMap[namespace]);\r\n }\r\n\r\n /**\r\n * Returns an array of connectors that have state that is global\r\n * @method\r\n * @returns {IDataConnector} A simple arry of connectors that have global state\r\n */\r\n public globalConnectors(): IDataConnector[] {\r\n return this._globalConnectors;\r\n }\r\n\r\n /**\r\n * Returns a promise which resolves immediately if the data connector is already present on the page,\r\n * otherwise resolves when the data connector is instantiated on the Page later in the lifecycle.\r\n * @method\r\n * @param namespace The namespace of data connector to return\r\n */\r\n public getDataConnector(namespace: ConnectorNamespaces): Promise> {\r\n // Check for data connector, if it is already present resolve immediately\r\n const dataConnector = this.connector(namespace);\r\n if (dataConnector) {\r\n return Promise.resolve(dataConnector);\r\n }\r\n\r\n // Check if we have an entry for the namespace in pending promise map, if present return the same promise\r\n const pendingPromise = this._getDataConnectorPendingPromises.get(namespace);\r\n if (pendingPromise) {\r\n return pendingPromise.promise;\r\n }\r\n\r\n // If the data connector is not on the page and has no entry in the pending promise map, create a new promise\r\n let resolveCallback: ResolveConnectorSignature;\r\n let rejectCallback: RejectConnectorSignature;\r\n const promise = new Promise>((resolve, reject) => {\r\n // Get the reference to the resolve & reject which can be called later when the data connector is instantiated on the Page\r\n resolveCallback = resolve;\r\n rejectCallback = reject;\r\n });\r\n\r\n // Add the promise to the pending promise map\r\n this._getDataConnectorPendingPromises.set(namespace, { promise: promise, resolve: resolveCallback, reject: rejectCallback });\r\n\r\n // Return the promise\r\n return promise;\r\n }\r\n\r\n /**\r\n * Produces the next state based on the given action. The state to be reduced is an aggregate of the reducers for all of the connectors\r\n * that have been added.\r\n * The overall state looks something like:\r\n * This will be the state for the redux-subspace for the connector. It is of the form:\r\n * {\r\n * FOO: {\r\n * _@STATE@_: {\r\n * \r\n * },\r\n * BAR: {\r\n * _@STATE@_: {\r\n * \r\n * },\r\n * },\r\n * }\r\n * }\r\n * @function\r\n * @param state {any} The previous state of the application. The application state, will contain one or more sub-states, which will be individually reduced\r\n * @param actionPayload {IActionPayload} The action detail to update the state with.\r\n * @returns {any} The next state for the application, containing the next state for each connector (a.k.a subspace)\r\n */\r\n public reduce(state: any, actionPayload: IActionPayload): any {\r\n // If the initial state is undefined, then create an empty object to start with\r\n if (isNullOrUndefined(state)) {\r\n state = {};\r\n }\r\n\r\n let newState = { ...state };\r\n let stateChanged = false;\r\n\r\n // See if we need to reduce for a specific connector. This is the common case.\r\n if (actionPayload !== undefined && actionPayload.key !== undefined) {\r\n // If this is a special action, used to force a re-render, then we need to set stateChanged to true, and create a clone of the existing scoped state\r\n const typeIsString: boolean = typeof actionPayload.type === \"string\";\r\n if (typeIsString && actionPayload.type.endsWith(ConnectorConstants.renderAction)) {\r\n const statePropertyKey = actionPayload.key + \".\" + ConnectorConstants.connectorStateKey;\r\n const connectorState = assign({}, get(state, statePropertyKey, undefined));\r\n set(newState, statePropertyKey, connectorState);\r\n stateChanged = true;\r\n } else if (typeIsString && actionPayload.type.endsWith(ConnectorConstants.dataConnectorMergeInitAction)) {\r\n const experienceFullNamespace: string = actionPayload.key;\r\n const dataConnectorName: ConnectorNamespaces = actionPayload.params[0];\r\n\r\n if (dataConnectorName) {\r\n dataConnectorInjector.initializeExperience(newState, experienceFullNamespace, dataConnectorName);\r\n stateChanged = true;\r\n }\r\n } else {\r\n // If the connector doing the reducing is global, then create a deep copy of state, so that all the connected\r\n // components think the state is new, and run their mappers. Connected components are subscribed to, and only see\r\n // changed in their subspace portion of the state tree. The redux connect implementation uses strict equal comparison,\r\n // meaning it consider the state change if it is a new object reference, even if all the properties are still the same\r\n if (this._connectorMap[actionPayload.key].isGlobal) {\r\n newState = merge({}, newState);\r\n }\r\n\r\n const connectorReducerResult = this.computeNextStateForConnector(newState, actionPayload.key, actionPayload);\r\n stateChanged = connectorReducerResult.stateChanged;\r\n\r\n if (stateChanged) {\r\n // Check to see if any experiences are including this data connector state. If so, update those too.\r\n dataConnectorInjector.reportStateChange(newState, actionPayload.key, connectorReducerResult.newState);\r\n }\r\n }\r\n } else {\r\n // Iterate over the full list of connectors calling each reducer. This is not the common case, and is typically done\r\n // for actions that come from Redux, during initialization\r\n Object.keys(this._connectorMap).forEach(key => {\r\n if (this.computeNextStateForConnector(newState, key, actionPayload).stateChanged) {\r\n stateChanged = true;\r\n }\r\n });\r\n }\r\n\r\n // Return the newState, as modified by the reducer(s) if it was changed, otherwise return the original state\r\n if (stateChanged) {\r\n return newState;\r\n } else {\r\n return state;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a sub reducer for a connector to the sub-reducer collection.\r\n * @method\r\n * @param {IDataConnector} connector The connector to add.\r\n */\r\n public addSubReducerForConnector(connector: IDataConnector): void {\r\n if (!connector) {\r\n throw new Error(\"The parameter 'connector' cannot be null.\");\r\n }\r\n\r\n // Add the sub-reducer and connector into their maps, based on the connector's namespace\r\n const key = connector.fullNamespace;\r\n this._connectorMap[key] = connector;\r\n\r\n // update the all and global connector fast lookup lists\r\n this._allConnectors.push(connector);\r\n\r\n if (connector.isGlobal) {\r\n this._globalConnectors.push(connector);\r\n }\r\n\r\n // Check if there is a pending promise for the data connector\r\n // DO NOT CHANGE namespace to fullnamespace, data connectors are supposed to be queried using just the namespace by design.\r\n if (this._getDataConnectorPendingPromises.has(connector.namespace)) {\r\n // Get the resolve callback for the pending promise and resolve it\r\n const pendingPromise = this._getDataConnectorPendingPromises.get(connector.namespace);\r\n\r\n try {\r\n pendingPromise.resolve(connector);\r\n } catch (error) {\r\n pendingPromise.reject(error);\r\n }\r\n\r\n // Delete the entry from the pending promise map\r\n this._getDataConnectorPendingPromises.delete(connector.namespace);\r\n }\r\n\r\n connector.store.dispatch({ key: key, type: \"@@connector-view/INIT\" });\r\n }\r\n\r\n /**\r\n * Helper method to compute the next state for a given connector. This method will get the connector's actual state\r\n * from the state tree, call the reducer, and then state the state in the passed in object that is to receive the new state\r\n * @param {any} state The current subspace (or root) state object, which will be updated\r\n * @param {string} key The key to the connector in the connector map\r\n * @param {IActionPayload} actionPayload The action to apply\r\n * @returns Information on how the connector state was changed\r\n */\r\n private computeNextStateForConnector(state: any, key: string, actionPayload: IActionPayload): ReducerResult {\r\n // Get the connector, so that we can call the reducer\r\n const connector = this._connectorMap[key];\r\n\r\n // Setup the key and get the actual state property for the connector. lodash uses dotted notation\r\n // so the key will be something like: namespace._@STATE@_\r\n const statePropertyKey = key + \".\" + ConnectorConstants.connectorStateKey;\r\n const connectorPreviousState = get(state, statePropertyKey, undefined);\r\n\r\n // Call the reducer for the connector, and validate that we received a state object back.\r\n const nextStateForConnector = this.subReduce(connector.reducer, connectorPreviousState, actionPayload);\r\n if (typeof nextStateForConnector === \"undefined\") {\r\n throw new Error(\"Reducer for: \" + key + \" must not return undefined.\");\r\n }\r\n\r\n // If the state changed, then set the new connector state in the overall state object\r\n const connectorStateChanged: boolean = nextStateForConnector !== connectorPreviousState;\r\n if (connectorStateChanged) {\r\n set(state, statePropertyKey, nextStateForConnector);\r\n }\r\n\r\n return { newState: nextStateForConnector, stateChanged: connectorStateChanged };\r\n }\r\n\r\n /**\r\n * Calls the reducer that has been registered to handle the state associated with a specific subspace\r\n * @param {Reducer} reducer The reducer to call\r\n * @param {TSubReducerState} state The state object for the subreducer\r\n * @param {IActionPayload} actionPayload The action to apply\r\n */\r\n private subReduce(reducer: IReducer, previousState: TSubReducerState, actionPayload: IActionPayload): TSubReducerState {\r\n const reducedState: TSubReducerState = reducer.reduce(previousState, actionPayload);\r\n if (reducedState !== previousState) {\r\n return reducedState;\r\n } else {\r\n return previousState;\r\n }\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { captureJssGeneratedClasses } from \"@msnews/render-cache\";\r\nimport { registerResetCallback } from \"@msnews/core\";\r\n\r\n/**\r\n * Weak map which is used to store DesignSystem to GenerateClassName Callback.\r\n */\r\nlet designSystemMap = new WeakMap();\r\n\r\n/**\r\n * Map which will store number of DesignSystem appearances with same name.\r\n */\r\nlet designSystemIndexMap = new Map();\r\n\r\n/**\r\n * Register a callback to reset the designSystem globals.\r\n * The callback is registered once when the module is loaded and invoked once on the server side at the beginning of each request.\r\n */\r\nregisterResetCallback(() => {\r\n designSystemMap = new WeakMap();\r\n designSystemIndexMap = new Map();\r\n});\r\n\r\n/**\r\n * JSS callback function that defines the class name generation logic\r\n * The default jss manager class name generation logic increments counter based on order\r\n * of how the experiences are rendered. We cannot guarantee the order due to async nature\r\n * of experiences which potentially causes different class names on every reload/refresh.\r\n * Instead here with this callback, we start the counter from 1 per rule to ensure class\r\n * names stays consistent irrespective of when they are rendered.\r\n *\r\n * Design system is taken into account since a change in it can result in potential different\r\n * styling being needed even if that rule was already used in a previous design system.\r\n *\r\n * For example:\r\n * For TopSites, with this override the class name would be generated as \"topSites-DS-default1-1\"\r\n * (jss manager by default would have generated it something like \"topSites-0-1-305\")\r\n * If the design system were to be updated and the same rule would be passed then you would\r\n * get topsites-DS-default2-1.\r\n */\r\nexport function createGenerateClassName(designSystem: any): (rule: any, sheet: any) => string {\r\n if (!designSystem) {\r\n return;\r\n }\r\n\r\n let callback = designSystemMap.get(designSystem);\r\n\r\n if (!callback) {\r\n const dsName = designSystem.name || \"unknown\";\r\n const dsIndex = designSystemIndexMap.get(dsName) + 1 || 1;\r\n const rulesMap: any = {};\r\n callback = (rule: any, sheet: any) => {\r\n const key = rule.key;\r\n\r\n if (!rulesMap[key]) {\r\n rulesMap[key] = 1;\r\n } else {\r\n rulesMap[key]++;\r\n }\r\n\r\n const name = `DS-${dsName}${dsIndex}-${rulesMap[key]}`;\r\n captureJssGeneratedClasses(key, name);\r\n\r\n return `${key}-${name}`;\r\n };\r\n\r\n designSystemMap.set(designSystem, callback);\r\n designSystemIndexMap.set(dsName, dsIndex);\r\n }\r\n\r\n return callback;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { Provider, connect } from \"react-redux\";\r\nimport { Store, StoreEnhancer, compose, createStore } from \"redux\";\r\nimport { getPageTimings, logger, perfMarker } from \"@msnews/diagnostics\";\r\n\r\nimport { DynamicReducer } from \"../reducers\";\r\nimport { IDataConnector } from \"../connectors/IDataConnector\";\r\nimport { JSSManager } from \"@microsoft/fast-jss-manager-react\";\r\nimport React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\nimport { applyMiddleware } from \"redux-subspace\";\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\nimport { create } from \"jss\";\r\nimport { createGenerateClassName } from \"./PageHelper\";\r\nimport { getStateFromRenderCache } from \"@msnews/render-cache\";\r\nimport jssGlobal from \"jss-global\";\r\nimport jssNested from \"jss-nested\";\r\n\r\ndeclare global {\r\n interface Window {\r\n /**\r\n * Boolean flag to indicate if this is an SSR page or not\r\n */\r\n SSR: boolean;\r\n\r\n /**\r\n * Enable redux devtools extension debugging\r\n */\r\n __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: any;\r\n\r\n /**\r\n * Boolean flag to indicate if render cache hydration is happening\r\n */\r\n needsHydrate?: boolean;\r\n\r\n /**\r\n * Boolean flag to indicate if state is stored in render cache along with DOM\r\n */\r\n hasPreHydrateState?: boolean;\r\n }\r\n}\r\n\r\n/**\r\n * Page Base.\r\n * Each page or hybrid page/experience must have an instance of the PageBase, which contains the the store, and dynamic reducer\r\n * for the experience/app.\r\n * PageBase is setup as a singleton, so the proper usage in consumers is:\r\n * var pageBase = PageBase.getInstance();\r\n * @export\r\n * @class\r\n */\r\nclass PageBase {\r\n /**\r\n * The singleton instance of this class\r\n * @type: {PageBase}\r\n */\r\n private static _instance: PageBase;\r\n\r\n /**\r\n * The Dynamic reducer for this app/experience\r\n * @type: {DynamicReducer}\r\n */\r\n private _rootReducer: DynamicReducer;\r\n\r\n /**\r\n * The Redux store containing the top level application state. All component and data connectors will manage namespaced subspaces within\r\n * this store\r\n * @type {Store}\r\n */\r\n private _store: Store;\r\n\r\n /**\r\n * Constructor for PageBase class\r\n * @constructor\r\n * @param {any} initialState Optional initial redux state provided as part of SSR response during hydration\r\n */\r\n private constructor(initialState?: any) {\r\n /**\r\n * In debug build, add the option to turn on redux-devtools-extension debugging.\r\n * More info here https://github.com/zalmoxisus/redux-devtools-extension\r\n */\r\n let enhancer: StoreEnhancer;\r\n const middlewares: any = [];\r\n if ((canUseDOM() && logger) ? logger.isDebug() : false) {\r\n const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ trace: true, traceLimit: 25 }) || compose;\r\n enhancer = composeEnhancers(applyMiddleware(...middlewares)\r\n );\r\n } else {\r\n enhancer = applyMiddleware(...middlewares);\r\n }\r\n\r\n // Create the root reducer\r\n this._rootReducer = new DynamicReducer();\r\n\r\n // Check to see if this app instance was bootstrapped with a render-cache\r\n initialState = initialState || (canUseDOM() && window.needsHydrate && getStateFromRenderCache()) || {};\r\n if (canUseDOM()) {\r\n window.hasPreHydrateState = !!(initialState && Object.keys(initialState).length !== 0);\r\n }\r\n\r\n // create the store with a basic root reducer\r\n this._store = createStore(this.rootReducer.reduce, initialState, enhancer);\r\n\r\n }\r\n\r\n /**\r\n * Reset PageBase. Useful when handling multiple requests when server side rendering.\r\n */\r\n public static resetPageBaseInstance(initialState?: any): void {\r\n this._instance = new PageBase(initialState);\r\n }\r\n\r\n /**\r\n * Gets the Redux store for this app/experience\r\n * @method\r\n * @returns {Store} The overall state for the App, which contains sub-states for each connector\r\n */\r\n public get store(): Store {\r\n return this._store;\r\n }\r\n\r\n /**\r\n * Gets the root reducer for this app/experience\r\n * @returns {DynamicReducer} The reducer for the app/experience\r\n */\r\n public get rootReducer(): DynamicReducer {\r\n return this._rootReducer;\r\n }\r\n\r\n /**\r\n * Gets the singleton instance of this class for the app/experience\r\n * @returns {PageBase} The instance of PageBase for the page/hybrid experience\r\n */\r\n public static getInstance(initialState?: any): PageBase {\r\n return this._instance || (this._instance = new this(initialState));\r\n }\r\n\r\n /**\r\n * Starts the application by calling the onApplicationStart method for each connector that has been added to the app.\r\n * @function\r\n * @method\r\n */\r\n public start(): void {\r\n // Iterate over all of the connector's and call their OnApplicationStart method\r\n const allConnectors: IDataConnector[] = this.rootReducer.connectors();\r\n allConnectors.forEach(connector => connector.onApplicationStart());\r\n }\r\n\r\n /**\r\n * Creates and renders a root element, that is connected to the store.\r\n * The root element will created with the passed in connected element as a child.\r\n * @function\r\n * @param {React.ReactElement} connectedTopLevelElement The top level rendering element for the page/application.\r\n * @param {HTMLElement} hostElement The host element (usually a
) to contain the msnews-experiences-redux application\r\n * @param {Function} callback An optional callback to be fired after hydration is complete, used when hydrating server side rendered content.\r\n * @param {boolean} [updateJss=true] To bypass JSSManager instance update set this to false\r\n * @method\r\n */\r\n public renderRootElement(connectedTopLevelElement: React.ReactElement, hostElement: HTMLElement, callback?: Function, updateJss = true): void {\r\n // Update the base JSS manager instance\r\n if (updateJss) {\r\n this.updateJssManagerInstance();\r\n }\r\n\r\n // Create a ReactElement, that contains the Redux provider with the store, passing the incoming top level element in as a child, so that\r\n // the pageElement wraps the top level element with the redux store\r\n const rootElement = React.createElement(Provider, { store: this._store }, connectedTopLevelElement);\r\n\r\n // Capture Render cache state in page timings\r\n const pageTimings = getPageTimings();\r\n\r\n if (window.needsHydrate) {\r\n ReactDom.hydrate(rootElement, hostElement);\r\n pageTimings[\"isRenderCachePresent\"] = 1;\r\n window.needsHydrate = false;\r\n } else if (window.SSR) {\r\n pageTimings[\"isRenderCachePresent\"] = 0;\r\n perfMarker.startMark(\"SSR.Hydrate\");\r\n ReactDom.hydrate(rootElement, hostElement, callback);\r\n } else {\r\n pageTimings[\"isRenderCachePresent\"] = 0;\r\n ReactDom.render(rootElement, hostElement);\r\n }\r\n }\r\n\r\n /**\r\n * Updates the base JSSManager instance with the correct default plugins\r\n */\r\n public updateJssManagerInstance(): void {\r\n const jssInstance: ReturnType = create({\r\n plugins: [jssNested(), jssGlobal()]\r\n });\r\n\r\n JSSManager.createGenerateClassName = createGenerateClassName;\r\n JSSManager.jss = jssInstance;\r\n }\r\n}\r\n\r\nexport default PageBase;","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\n\r\nconst pageTimings = canUseDOM() ? (window._pageTimings || (window._pageTimings = {})) : null;\r\nconst secondaryPageTimings = canUseDOM() ? (window._secondaryPageTimings || (window._secondaryPageTimings = {})) : null;\r\n\r\n/**\r\n * Gets current window._pageTimings object\r\n */\r\nexport function getPageTimings(): object {\r\n return pageTimings;\r\n}\r\n\r\n/**\r\n * Gets current window._secondaryPageTimings object\r\n */\r\nexport function getSecondaryPageTimings(): object {\r\n return secondaryPageTimings;\r\n}\r\n\r\n/**\r\n * Creates or updates a new counter under the page timings\r\n * @param counterName - the name of the counter to increment.\r\n */\r\nexport function incrementCounter(counterName: string): void {\r\n if (counterName && pageTimings) {\r\n const existingCount = pageTimings[counterName] || (pageTimings[counterName] = 0);\r\n pageTimings[counterName] = existingCount + 1;\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nexport enum Environment {\r\n prod = \"prod\",\r\n int1 = \"int1\",\r\n int = \"int\",\r\n intpr = \"intPR\",\r\n intpef = \"intPef\"\r\n}\r\n\r\n/**\r\n * Parses from string to Environment enum.\r\n * Defaults to null\r\n *\r\n * @export\r\n * @param {(string | null | undefined)} environment - string being parsed\r\n * @returns {(Environment | null)} - the parsed Environment enum, or null.\r\n */\r\nexport function getEnvironmentFromString(environment: string | null | undefined): Environment | null {\r\n switch (environment) {\r\n case Environment.prod:\r\n return Environment.prod;\r\n case Environment.int1:\r\n return Environment.int1;\r\n case Environment.int:\r\n case Environment.intpr:\r\n case Environment.intpef:\r\n return Environment.int;\r\n default:\r\n return null;\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nexport const Size1ColumnWidth = 300;\r\nexport let Size2ColumnWidth = 624;\r\nexport let Size3ColumnWidth = 948;\r\nexport let Size4ColumnWidth = 1272;\r\nexport let GutterSize = 24;\r\n\r\n/** Updates the current ColumnWidths based on changes in gutterSize */\r\nexport function updateColumnWidths(gutterSize: number): void {\r\n GutterSize = gutterSize;\r\n Size4ColumnWidth = (Size1ColumnWidth * 4) + (gutterSize * 3);\r\n Size3ColumnWidth = (Size1ColumnWidth * 3) + (gutterSize * 2);\r\n Size2ColumnWidth = (Size1ColumnWidth * 2) + gutterSize;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n/**\r\n * Defines valid loading states for an experience\r\n * The state has been defined as it happens. Please do not update the ordering or the numeric value of states.\r\n * If the numeric value of the state is updated this will break internal logic.\r\n */\r\nexport enum ExperienceLoadingState {\r\n\r\n /**\r\n * The experience has not been started yet\r\n */\r\n notStarted = 1,\r\n\r\n /**\r\n * The experience loading has been deferred\r\n */\r\n loadDeferred = 2,\r\n\r\n /**\r\n * The experience is coming out of loadDeferred state and is now resolved to be loaded.\r\n */\r\n resolvedForLoad = 3,\r\n\r\n /**\r\n * The experience has been loaded (i.e. the bundle has been downloaded and parsed, and the connector created)\r\n */\r\n loaded = 4,\r\n\r\n /**\r\n * The experience initialized milestone has been reached\r\n */\r\n initialized = 5,\r\n\r\n /**\r\n * The experience render has been deferred\r\n */\r\n renderDeferred = 6,\r\n\r\n /**\r\n * The experience is coming out of renderDeferred state and is now resolved to be rendered.\r\n */\r\n resolvedForRender = 7,\r\n\r\n /**\r\n * The experience rendered milestone has been reached (render function has been completed)\r\n */\r\n rendered = 8,\r\n\r\n /**\r\n * The experience DOM complete milestone has been reached\r\n */\r\n domComplete = 10,\r\n\r\n /**\r\n * The initial render of the experience has completed. All initial DOM elements have been created, and the browser has completed all render\r\n * task (applying styles, animations, etc)\r\n */\r\n visuallyReady = 11,\r\n\r\n /**\r\n * The experience encountered an error during loading\r\n */\r\n error = 12\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { AadData, AccessTokenStatus, AccountInfo, getAppEnvironment } from \"@msnews/core\";\r\nimport { AcquireAccessTokenFailed, EdgeChromiumAPIsNotAvailable } from \"@msnews/diagnostics\";\r\n\r\nimport { ConnectorNamespaces } from \"@msnews/experiences-constants\";\r\nimport { ExperiencesSharedStateConnector } from \"@msnews/experiences-shared-state\";\r\nimport { PageBase } from \"@msnews/experiences-redux\";\r\nimport { getPageTimings } from \"@msnews/diagnostics\";\r\nimport { track } from \"@msnews/telemetry-transitional\";\r\n\r\n/**\r\n * chrome\r\n * The chrome API is not defined in Typescript\r\n */\r\ndeclare global {\r\n interface Window { chrome: any; }\r\n}\r\n\r\n/** The aadToken QS key */\r\nexport const aadTokenQsKey = \"stn\";\r\n\r\n/** The aadToken QS value */\r\nexport const aadTokenQsVal = \"aad\";\r\n\r\n// More information re: specific errors here:\r\n// https://microsoft.visualstudio.com/Edge/_git/chromium.src?path=%2Ftools%2Fmetrics%2Fhistograms%2Fedge_enums.xml&version=GBmaster&line=3770&lineEnd=3770&lineStartColumn=1&lineEndColumn=52&lineStyle=plain\r\nexport enum TokenFetchSecondaryErrors {\r\n /** Token fetch operation requires user interaction */\r\n \"kTokenFetchUserInteractionRequired\" = 13,\r\n /** Authentication is possible, but it requires direct user interaction */\r\n \"kInteractionRequired\" = 24\r\n}\r\n\r\n/**\r\n * Gets a value to indicate if we are in an enterprise scenario\r\n * eg. whether we should append the AAD Token as part of the call to oneservice endpoints\r\n * The default value is false, so we don't need to wait until the value is explicitly set\r\n */\r\nexport function useEnterpriseCompliance(): boolean {\r\n // Obtain the current value of useEnterpriseCompliance from the ExperiencesSharedState connector\r\n const sharedStateConnector: ExperiencesSharedStateConnector = PageBase.getInstance().rootReducer.connector(ConnectorNamespaces.SharedState) as ExperiencesSharedStateConnector;\r\n return sharedStateConnector ? sharedStateConnector.getCurrentState().useEnterpriseCompliance : false;\r\n}\r\n\r\n/**\r\n * Gets a value to indicate if we should use enterprise domain\r\n * eg. whether we should use the Falcon domain vs. consumer domain for oneservice requests\r\n * The default value is false, so we don't need to wait until the value is explicitly set\r\n */\r\nexport function useEnterpriseDomain(): boolean {\r\n // Obtain the current value of useEnterpriseDomain from the ExperiencesSharedState connector\r\n const sharedStateConnector: ExperiencesSharedStateConnector = PageBase.getInstance().rootReducer.connector(ConnectorNamespaces.SharedState) as ExperiencesSharedStateConnector;\r\n return sharedStateConnector ? sharedStateConnector.getCurrentState().useEnterpriseDomain : false;\r\n}\r\n\r\n/**\r\n * Checks if aad token is invalid for user\r\n */\r\nexport function isInvalidAadToken(aadData: AadData): boolean {\r\n return !aadData || !aadData.isSuccess || !aadData.isValid;\r\n}\r\n\r\n/**\r\n * Fetches aad data to be used to call an authenticated API.\r\n * @param clientId The client id of the AAD application requesting access\r\n * @param scopeOrResource The scope or resource to request access for\r\n * @param allowInteraction Attempt to fetch the access token using the allowInteraction version of the API instead of the silent version\r\n */\r\nexport async function getAadData(clientId: string, scopeOrResource: string, allowInteraction = false): Promise {\r\n const accountInfo = await resolveAccountInfo();\r\n\r\n if (!accountInfo) {\r\n track.trackAppErrorEvent({\r\n ...EdgeChromiumAPIsNotAvailable,\r\n message: \"Auth api not available\",\r\n pb: {\r\n ...EdgeChromiumAPIsNotAvailable.pb,\r\n customMessage: `Auth api not available for ${scopeOrResource}`\r\n }\r\n });\r\n\r\n return null;\r\n }\r\n\r\n return new Promise((resolve) => {\r\n const tokenAcquireParameters = {\r\n account_id: accountInfo.account_id,\r\n account_type: accountInfo.account_type,\r\n client_id: clientId,\r\n scope_or_resource: scopeOrResource\r\n };\r\n\r\n const markerName = \"Auth.AcquireAccessToken\";\r\n const pageTimings = getPageTimings();\r\n const perfMarker = pageTimings[markerName];\r\n const startTime = Math.round(performance.now());\r\n\r\n const tokenAccessApi = allowInteraction ? window.chrome.authPrivate.acquireAccessTokenWithUserInteraction : window.chrome.authPrivate.acquireAccessTokenSilently;\r\n const interactionString = allowInteraction ? \"with interaction\" : \"\";\r\n\r\n tokenAccessApi(tokenAcquireParameters, (acquireResult) => {\r\n if (!perfMarker && !allowInteraction) {\r\n const endTime = Math.round(performance.now());\r\n pageTimings[markerName] = acquireResult.is_success ? endTime - startTime : -1;\r\n }\r\n\r\n let status = AccessTokenStatus.success;\r\n if (!acquireResult.is_success) {\r\n track.trackAppErrorEvent({\r\n ...AcquireAccessTokenFailed,\r\n message: \"Failed to get access token\",\r\n pb: {\r\n ...AcquireAccessTokenFailed.pb,\r\n customMessage: `Failed to get access token ${interactionString} for resource ${scopeOrResource}: ${JSON.stringify(acquireResult.error_info)}`\r\n }\r\n });\r\n\r\n status = acquireResult.error_info.secondary_error === TokenFetchSecondaryErrors.kTokenFetchUserInteractionRequired ||\r\n acquireResult.error_info.secondary_error === TokenFetchSecondaryErrors.kInteractionRequired ?\r\n AccessTokenStatus.mfaRequired : AccessTokenStatus.otherError;\r\n }\r\n\r\n resolve({\r\n token: acquireResult.access_token,\r\n errorInfo: acquireResult.error_info,\r\n isSuccess: acquireResult.is_success,\r\n isValid: acquireResult.is_token_valid,\r\n status\r\n });\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Resolve account info promise\r\n */\r\nexport async function resolveAccountInfo(): Promise {\r\n const appEnvironment = getAppEnvironment();\r\n\r\n if (!appEnvironment.AccountInfoPromise) {\r\n return null;\r\n }\r\n\r\n return await appEnvironment.AccountInfoPromise;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { Size1ColumnWidth, Size2ColumnWidth, Size3ColumnWidth, Size4ColumnWidth } from \"./ColumnWidths\";\r\n\r\nimport { findIndex } from \"lodash-es\";\r\nimport { toPx } from \"@microsoft/fast-jss-utilities\";\r\n\r\n/**\r\n * Describes possible arragements of columns. For example c3 represents 3 columns.\r\n *\r\n * Each arrangement is valid for a particular range of window widths. For example, for window widths from 996px to 1319px,\r\n * we will use the c3 arrangement, or 3 columns.\r\n *\r\n * Currently each arrangement describes a column count, but in the future, there may be separate 3-column \"large\"\r\n * and 3-column \"small\" arrangements, like on msn.com.\r\n */\r\nexport enum ColumnArrangement {\r\n c1 = \"c1\",\r\n c2 = \"c2\",\r\n c3 = \"c3\",\r\n c4 = \"c4\"\r\n}\r\n\r\nlet minViewportWidthOverrides: Map;\r\n\r\n/**\r\n * Override the min viewport widths for the given column arrangements.\r\n * @param overrides The overrides to use for the column arrangements.\r\n */\r\nexport function overrideMinViewportWidths(overrides: Map): void {\r\n minViewportWidthOverrides = overrides;\r\n}\r\n\r\n/**\r\n * Defines the properties of a particular column arrangement.\r\n */\r\nexport class ColumnArrangementDefinition {\r\n /**\r\n * Creates a column arrangement definition.\r\n * @param arrangement The column arrangement being defined.\r\n * @param contentSizePx The size of the content in pixels for this arrangement.\r\n * @param isFirstBreakpoint True if this is the first breakpoint.\r\n */\r\n constructor(public arrangement: ColumnArrangement, public contentSizePx: number, private isFirstBreakpoint?: boolean) {}\r\n\r\n /**\r\n * Gets the minimum required window width to trigger this column arrangement.\r\n */\r\n public get minViewportWidthPx(): number {\r\n if (this.isFirstBreakpoint) {\r\n return 0;\r\n }\r\n\r\n if (minViewportWidthOverrides) {\r\n const widthOverride = minViewportWidthOverrides.get(this.arrangement);\r\n if (widthOverride) {\r\n return widthOverride;\r\n }\r\n }\r\n\r\n return this.contentSizePx + contentBufferPx;\r\n }\r\n}\r\n\r\n/**\r\n * The list of possible column arrangement definitions. Use this to determine what window sizes are\r\n * appropriate for each column arrangement.\r\n */\r\nexport const columnArrangements: ColumnArrangementDefinition[] = [\r\n new ColumnArrangementDefinition(ColumnArrangement.c1, Size1ColumnWidth, true),\r\n new ColumnArrangementDefinition(ColumnArrangement.c2, Size2ColumnWidth),\r\n new ColumnArrangementDefinition(ColumnArrangement.c3, Size3ColumnWidth),\r\n new ColumnArrangementDefinition(ColumnArrangement.c4, Size4ColumnWidth)\r\n];\r\n\r\n/**\r\n * A map of column arrangements to definitions.\r\n */\r\nconst columnArrangementMap: { [columnArrangement in ColumnArrangement]?: ColumnArrangementDefinition } = {};\r\nfor (const columnArrangementDefinition of columnArrangements) {\r\n columnArrangementMap[columnArrangementDefinition.arrangement] = columnArrangementDefinition;\r\n}\r\n\r\n/**\r\n * The number of pixels to add on top of the content width in order to get the window width required to show it.\r\n * This buffer guarantees space between the content and the edge of the window, and also space for the scrollbar,\r\n * which is also counted when determining breakpoints.\r\n */\r\nconst contentBufferPx = 32;\r\n\r\n/**\r\n * Gets the content width for the given column arrangement.\r\n * @param columnArrangement The column arrangement to look up.\r\n * @returns The width in pixels of the content.\r\n */\r\nexport function contentWidthPxForColumnArrangement(columnArrangement: ColumnArrangement): number {\r\n return columnArrangementMap[columnArrangement].contentSizePx;\r\n}\r\n\r\n/**\r\n * Gets the minimum window width for the given column arrangement.\r\n * @param columnArrangement The column arrangement to look up.\r\n * @returns The minimum width for the window to show this column arrangement.\r\n */\r\nexport function minWindowWidthPxForColumnArrangement(columnArrangement: ColumnArrangement): number {\r\n return columnArrangementMap[columnArrangement].minViewportWidthPx;\r\n}\r\n\r\n/**\r\n * Gets the maximum window width for the given column arrangement.\r\n * @param columnArrangement The column arrangement to look up.\r\n * @returns The maximum width for the window to show this column arrangement. NaN if there is no maximum.\r\n */\r\nexport function maxWindowWidthPxForColumnArrangement(columnArrangement: ColumnArrangement): number {\r\n const arrangementIndex = findIndex(columnArrangements, a => a.arrangement === columnArrangement);\r\n\r\n if (arrangementIndex < columnArrangements.length - 1) {\r\n return columnArrangements[arrangementIndex + 1].minViewportWidthPx - 1;\r\n }\r\n\r\n return NaN;\r\n}\r\n\r\n/**\r\n * Helper to efficiently get the media query string to be used for given min/max column arrangements\r\n * It can be used in conjuction with `window.matchMedia` to target specific page widths, and it is also\r\n * used internally to generate the equivalent css selectors in `getMediaQuerySelector`\r\n * @param minArragement The min column arrangement to use for the @media query (inclusive)\r\n * @param maxArrangement The max column arrangement to use for the @media query (inclusive)\r\n * @returns the @media query for the specified min/max.\r\n */\r\nexport function getMediaQuery(minArragement: ColumnArrangement | null, maxArrangement: ColumnArrangement | null): string {\r\n const queries = [];\r\n\r\n if (minArragement) {\r\n const minArrangementDefinition = columnArrangementMap[minArragement];\r\n const minWidthPx = minArrangementDefinition.minViewportWidthPx;\r\n\r\n if (minWidthPx > 0) {\r\n queries.push(`(min-width: ${toPx(minWidthPx)})`);\r\n }\r\n }\r\n\r\n if (maxArrangement) {\r\n const maxArrangementDefinition = columnArrangementMap[maxArrangement];\r\n const maxArrangementIndex = columnArrangements.indexOf(maxArrangementDefinition);\r\n\r\n if (maxArrangementIndex < columnArrangements.length - 1) {\r\n queries.push(`(max-width: ${toPx(columnArrangements[maxArrangementIndex + 1].minViewportWidthPx - 1)})`);\r\n }\r\n }\r\n\r\n return queries.join(\" and \");\r\n}\r\n\r\n/**\r\n * Helper to efficiently get the media query string to be used for the given column arrangement\r\n * It can be used in conjuction with `window.matchMedia` to target specific page widths, and it is also\r\n * used internally to generate the equivalent css selectors in `getMediaQuerySelector`\r\n * @param columnArrangement The column arrangement to target\r\n * @returns The media query to target that column arrangement\r\n */\r\nexport function getMediaQueryFor(columnArrangement: ColumnArrangement): string {\r\n return getMediaQuery(columnArrangement, columnArrangement);\r\n}\r\n\r\n/**\r\n * Helper to efficiently get the CSS selector to be used for apply styles for given min/max arrangements\r\n * @param minArragement The min column arrangement to use for the media query (inclusive)\r\n * @param maxArrangement The max column arrangement to use for the media query (inclusive)\r\n * @returns the css media query selector for the specified min/max.\r\n */\r\nexport function getMediaQuerySelector(minArragement: ColumnArrangement | null, maxArrangement: ColumnArrangement | null): string {\r\n const mediaQuery = getMediaQuery(minArragement, maxArrangement);\r\n return mediaQuery ? \"@media \" + mediaQuery : \"\";\r\n}\r\n\r\n/**\r\n * Helper to efficiently get the CSS selector to be used for apply styles for the given column arrangement.\r\n * @param columnArrangement The column arrangement to target\r\n * @returns the css media query selector for the specified column arrangement.\r\n */\r\nexport function getMediaQuerySelectorFor(columnArrangement: ColumnArrangement): string {\r\n return getMediaQuerySelector(columnArrangement, columnArrangement);\r\n}\r\n\r\n/**\r\n * Callback type for subscribing to BreakpointManager breakpoint changed events.\r\n */\r\nexport type BreakpointManagerCallback = (columnArrangement: ColumnArrangement) => void;\r\n\r\n/**\r\n * Breakpoint manager common interface.\r\n */\r\nexport interface BreakpointManager {\r\n /**\r\n * Gets the current column arrangement.\r\n */\r\n currentColumnArrangement: ColumnArrangement;\r\n\r\n /**\r\n * Subscribes for changes\r\n * @param callback The method to call when the column arrangement changes.\r\n */\r\n subscribe(callback: BreakpointManagerCallback): void;\r\n\r\n /**\r\n * Unsubscribe from changes\r\n * @param callback The callback to unregister.\r\n */\r\n unsubscribe(callback: BreakpointManagerCallback): void;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\n\r\n/**\r\n * Returns the cookie content given a name\r\n *\r\n * @param name {string} - cookie name\r\n * @returns the value of the cookie or `null`, if the key is not found.\r\n */\r\nexport function getCookie(name: string): string {\r\n if (canUseDOM() && document && document.cookie) {\r\n const re = new RegExp(\"\\\\b\" + name + \"\\\\s*=\\\\s*([^;]*)\", \"i\");\r\n const match = re.exec(document.cookie);\r\n return (match && match.length > 1 ? match[1] : null);\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Helper function that retrieves the MUID from the document.cookie\r\n * or uses the saved value if the cookie was retrieved for the current page instance\r\n */\r\nexport function getMuidCookie(): string {\r\n return getCookie(\"MUID\");\r\n}\r\n\r\n/**\r\n * Helper function used to set a cookie\r\n * NOTE: THIS BYPASSES ANY GDPR CHECK AND HENCE ONLY REQUIRED FUNCTIONAL COOKIES SHOULD BE SET USING THIS\r\n * IF YOU DO NOT KNOW IF YOUR COOKIE IS ONE THEN PLEASE USE Cookies.ts setCookie THAT MAKES USE OF GDPR LOGIC CHECKS\r\n * When expiryDays is equal to -1 it will unset the cookie\r\n * * @param {string} name Cookie name\r\n * * @param {string} value Cookie value\r\n * * @param {number} expiryDays Cookie expiry days\r\n * * @param {string} domain Cookie domain\r\n * * @param {string} path Cookie path\r\n * * @param {boolean} secure Is it a https only cookie\r\n */\r\nexport function setRequireFunctionalCookie(name: string, value: string, expiryDays?: number, domain?: string, path?: string, secure?: boolean): void {\r\n let expiryDate;\r\n const builder = [name, \"=\", value];\r\n if (-1 === expiryDays) {\r\n // Expires date format is supposed to be in GMT.\r\n expiryDate = \"Fri, 31 Dec 1999 23:59:59 GMT\";\r\n } else if (expiryDays) {\r\n const date = new Date();\r\n date.setTime(date.getTime() + (expiryDays * 86400000)); // 86400000 == 24*60*60*1000 (ms/day)\r\n expiryDate = date.toUTCString();\r\n }\r\n\r\n if (expiryDate) { builder.push(\";expires=\", expiryDate); }\r\n if (domain) { builder.push(\";domain=\", domain); }\r\n if (path) { builder.push(\";path=\", path); }\r\n if (secure) { builder.push(\";secure\"); }\r\n\r\n if (canUseDOM() && document) {\r\n document.cookie = builder.join(\"\");\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport PageBase from \"./PageBase\";\r\n\r\nexport default PageBase;\r\nexport * from \"./PageBase\";\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Enum for different page types\r\n * @enum\r\n */\r\nexport enum PageType {\r\n Article = \"article\",\r\n ArticleFullScreen = \"articlefullscreen\",\r\n DHP = \"dhp\",\r\n Gallery = \"gallery\",\r\n GalleryFullScreen = \"galleryfullscreen\",\r\n MMX = \"mmx\",\r\n NTP = \"ntp\",\r\n Video = \"video\",\r\n Windows = \"windowshp\",\r\n WindowsShell = \"shellhp\"\r\n}\r\n\r\n/** The AudienceMode enum */\r\nexport enum AudienceModeType {\r\n Adult = \"adult\",\r\n Enterprise = \"enterprise\",\r\n Kids = \"kids\"\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Aad data formatted from browser response\r\n */\r\nexport type AadData = {\r\n /**\r\n * Access token\r\n */\r\n token: string;\r\n\r\n /**\r\n * Any error info\r\n */\r\n errorInfo: AadErrorInfo;\r\n\r\n /**\r\n * Flag to indicate if call was successful\r\n */\r\n isSuccess: boolean;\r\n\r\n /**\r\n * Flag to indicate if token is valid\r\n */\r\n isValid: boolean;\r\n\r\n /**\r\n * Status for the authentication\r\n */\r\n status: AccessTokenStatus;\r\n};\r\n\r\n/**\r\n * Error info from aad request\r\n */\r\nexport type AadErrorInfo = {\r\n /**\r\n * Error string\r\n */\r\n error_string?: string;\r\n\r\n /**\r\n * Platform error code\r\n */\r\n platform_error_code?: number;\r\n\r\n /**\r\n * Primary error code\r\n */\r\n primary_error?: number;\r\n\r\n /**\r\n * Secondary error code\r\n */\r\n secondary_error?: number;\r\n};\r\n\r\n/**\r\n * Account info\r\n */\r\nexport type AccountInfo = {\r\n /**\r\n * Account id\r\n */\r\n account_id?: string;\r\n\r\n /**\r\n * Account type\r\n */\r\n account_type?: string;\r\n};\r\n\r\nexport enum AccessTokenStatus {\r\n success,\r\n mfaRequired,\r\n otherError\r\n}\r\n\r\n/**\r\n * The client id of our application\r\n */\r\nexport const clientId = \"d7b530a4-7680-4c23-a8bf-c52c121d2e87\";\r\n\r\n/**\r\n * The scope/resource id for enterprise One Service\r\n */\r\nexport const oneServiceScope = \"https://enterprisenews.microsoft.com\";","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport {\r\n ITrackInfo,\r\n KeyValueArray,\r\n KeyValuePair,\r\n Utility,\r\n clientId,\r\n getAppEnvironment,\r\n getHeadData,\r\n oneServiceHeaders,\r\n oneServiceQueryStringKeys,\r\n oneServiceScope\r\n} from \"@msnews/core\";\r\nimport { aadTokenQsKey, aadTokenQsVal, getAadData, useEnterpriseCompliance } from \"@msnews/auth\";\r\n\r\nimport { isString } from \"lodash-es\";\r\n\r\n/**\r\n * A namespace that provides OneService utility functionality\r\n */\r\nexport namespace OneServiceUtility {\r\n\r\n /**\r\n * Authentication ticket type - Header value required by back-end service\r\n * Specifies what type of authentication to do\r\n */\r\n export const authenticationTicketType = \"10\";\r\n\r\n /**\r\n * Header name that holds which ANON cookie to use\r\n */\r\n export const signedInCookieNameHeader = \"signedInCookieName\";\r\n\r\n /**\r\n * Header name that holds the user-location value.\r\n */\r\n export const userLocationHeader = \"user-location\";\r\n\r\n /**\r\n * The api-key we'll be sending to OneService.\r\n */\r\n export const apiKey = \"0QfOX3Vn51YCzitbLaRkTTBadtWpgTN8NZLW0C1SEM\";\r\n\r\n /**\r\n * Executes a callback on completing of a service request\r\n *\r\n * @param {() => Promise} serviceRequest - The service request\r\n * @param {() => void} callbackMethod - The callback method\r\n * @return {Promise} - A promise of the service response\r\n */\r\n export async function serviceRequestOnComplete(serviceRequest: () => Promise, callbackMethod: () => void): Promise {\r\n try {\r\n const result = await serviceRequest();\r\n callbackMethod();\r\n\r\n return result;\r\n } catch (error) {\r\n callbackMethod();\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Gets common parameters used in service requests to OneService, when there is no personalization involved\r\n * @param {string} userId - The user id for the request\r\n * @param {string} ocidSpecifier - The OCID\r\n * @param {string} addPageInfoToOcid - If true, page_product and page_type are added to the ocid. Defaults to true\r\n * @returns {KeyValueArray}\r\n */\r\n export function getOneServiceParamsWithoutAuth(userId: string = null, ocidSpecifier: string, addPageInfoToOcid = true): KeyValueArray {\r\n const appEnvironment = getAppEnvironment();\r\n const params = [\r\n {\r\n key: oneServiceQueryStringKeys.apiKey,\r\n value: apiKey\r\n },\r\n {\r\n // TODO Bug 22266910: clarify use of activityId vs rid in this spot\r\n key: oneServiceQueryStringKeys.activityId,\r\n value: appEnvironment.ActivityId\r\n },\r\n {\r\n key: oneServiceQueryStringKeys.ocid,\r\n value: addPageInfoToOcid ? getOneServiceOCID(appEnvironment.TrackInfo, ocidSpecifier) : ocidSpecifier\r\n },\r\n {\r\n key: oneServiceQueryStringKeys.market,\r\n value: appEnvironment.CurrentMarket\r\n }\r\n ];\r\n\r\n // 21527208 - remove this after upgrading experiences to use shared lib.\r\n if (userId) {\r\n params.push({\r\n key: oneServiceQueryStringKeys.user,\r\n value: userId\r\n });\r\n }\r\n\r\n const runningExperiments = getHeadData().CurrentFlights;\r\n if (runningExperiments) {\r\n params.push({\r\n key: oneServiceQueryStringKeys.fdhead,\r\n value: runningExperiments\r\n });\r\n }\r\n\r\n if (useEnterpriseCompliance()) {\r\n params.push({\r\n key: aadTokenQsKey,\r\n value: aadTokenQsVal\r\n });\r\n }\r\n\r\n return params;\r\n }\r\n\r\n /**\r\n * Gets common parameters used in service requests to OneService,\r\n * plus authentication params in the form of the sign in cookie name\r\n * Note: This should only be called if the user is known to be signed in, else use getOneServiceParamsWithoutAuth\r\n *\r\n * @export\r\n * @param {string} userId - The user id for the request\r\n * @param {string} ocidSpecifier - The OCID\r\n * @param {string} addPageInfoToOcid - If true, page_product and page_type are added to the ocid. Defaults to true\r\n * @returns {KeyValueArray}\r\n */\r\n export function getOneServiceParamsWithAuth(userId: string = null, ocidSpecifier: string, addPageInfoToOcid = true): KeyValueArray {\r\n const appEnvironment = getAppEnvironment();\r\n const authCookieName: string = appEnvironment.AuthCookieName as string;\r\n const params = [...getOneServiceParamsWithoutAuth(userId, ocidSpecifier, addPageInfoToOcid)];\r\n if (authCookieName) {\r\n params.push({\r\n key: oneServiceQueryStringKeys.signInCookieName, // sign-in cookie name\r\n value: authCookieName.toUpperCase()\r\n });\r\n }\r\n\r\n return params;\r\n }\r\n\r\n /**\r\n * Gets common headers used in service requests to OneService\r\n *\r\n * @export\r\n * @returns {Promise}\r\n */\r\n export async function getOneServiceHeaders(): Promise {\r\n const headers = {};\r\n\r\n if (useEnterpriseCompliance()) {\r\n const aadData = await getAadData(clientId, oneServiceScope);\r\n if (aadData && aadData.token) {\r\n headers[oneServiceHeaders.authorization] = `Bearer ${aadData.token}`;\r\n }\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n /**\r\n * Gets headers specifically used in service requests to OneService /feed endpoint\r\n * @export\r\n * @returns {Promise}\r\n */\r\n export async function getOneServiceFeedCallHeaders(): Promise {\r\n const headers = await getOneServiceHeaders();\r\n const appEnvironment = getAppEnvironment();\r\n const activityId = appEnvironment.ActivityId;\r\n\r\n if (appEnvironment.SendFeedCallActivityIdInHeader && activityId) {\r\n headers[oneServiceHeaders.activityId] = activityId;\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n /**\r\n * Gets the location query string parameters based on lat/long from paramaters or AppEnvironment.\r\n * @param customizedLatitude The customized latitude\r\n * @param customizedLongitude The customized Longitude\r\n * @returns The key value pair of location query string parameters.\r\n */\r\n export function getLocationParams(customizedLatitude?: string, customizedLongitude?: string): KeyValuePair {\r\n const appEnvironment = getAppEnvironment();\r\n const latitude = customizedLatitude || appEnvironment.Latitude;\r\n const longitude = customizedLongitude || appEnvironment.Longitude;\r\n\r\n if (latitude && longitude) {\r\n return { key: oneServiceQueryStringKeys.location, value: `${latitude}|${longitude}` };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the OCID generated from the telemetry TrackInfo if it is valid, otherwise returns the ocid specifier\r\n * @param trackInfo The track info\r\n * @param ocidSpecifier The OCID\r\n * @returns The OCID to use.\r\n */\r\n export function getOneServiceOCID(trackInfo: ITrackInfo, ocidSpecifier: string): string {\r\n if (Utility.isNonNullObject(trackInfo) &&\r\n Utility.isNonNullObject(trackInfo.sitePage) &&\r\n isString(trackInfo.sitePage.page_product) &&\r\n isString(trackInfo.sitePage.page_type)) {\r\n return trackInfo.sitePage.page_product + \"-\" + trackInfo.sitePage.page_type + (ocidSpecifier ? \"-\" + ocidSpecifier : \"\");\r\n } else {\r\n return ocidSpecifier;\r\n }\r\n }\r\n\r\n /**\r\n * Sets up base request data for One Service calls\r\n * @param method\r\n * @returns - RequestInit\r\n */\r\n export async function getBaseRequestData(method): Promise {\r\n const requestObj: RequestInit = {\r\n headers: await OneServiceUtility.getOneServiceHeaders(),\r\n method\r\n };\r\n\r\n return requestObj;\r\n }\r\n\r\n /**\r\n * Populates the request init and return commonParams\r\n * @param ocid -- the ocid for this request\r\n * @returns {KeyValueArray} - parameters as a key/value array\r\n */\r\n export function getCommonParams(ocid: string): KeyValueArray {\r\n if (getHeadData().UserIsSignedIn) {\r\n return this.getOneServiceParamsWithAuth(getAppEnvironment().UserId, ocid);\r\n }\r\n\r\n return this.getOneServiceParamsWithoutAuth(getAppEnvironment().UserId, ocid);\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { get, set } from \"lodash-es\";\r\n\r\nimport { ConnectorConstants } from \"../constants/ConnectorConstants\";\r\nimport { ConnectorNamespaces } from \"@msnews/experiences-constants\";\r\n\r\n/**\r\n * Maps the data connector name to the set of experience keys it is injected into.\r\n * The values include the \"._@STATE@_\" portion needed to pull experience state out of the app state object.\r\n */\r\nconst dataConnectorToExperienceKeyMap: Map> = new Map>();\r\n\r\n/**\r\n * Register a data connector to inject into an experience.\r\n * @param experienceFullNamespace The full namespace of the experience to inject into.\r\n * @param dataConnectorName The name for the data connector to inject.\r\n */\r\nfunction registerInjection(\r\n experienceFullNamespace: string,\r\n dataConnectorName: ConnectorNamespaces): void {\r\n let experienceSet: Set = dataConnectorToExperienceKeyMap.get(dataConnectorName);\r\n if (!experienceSet) {\r\n experienceSet = new Set();\r\n dataConnectorToExperienceKeyMap.set(dataConnectorName, experienceSet);\r\n }\r\n\r\n experienceSet.add(createStatePropertyKey(experienceFullNamespace));\r\n}\r\n\r\n/**\r\n * Initializes the shared data connector state for the given experience.\r\n * @param appState The global app state to modify.\r\n * @param experienceFullNamespace The full namespace of the experience to host the data connector state.\r\n * @param dataConnectorName The name of the data connector to use.\r\n */\r\nfunction initializeExperience(\r\n appState: any,\r\n experienceFullNamespace: string,\r\n dataConnectorName: ConnectorNamespaces): void {\r\n\r\n // Setup the key and get the actual state property for the connector. lodash uses dotted notation\r\n // so the key will be something like: namespace._@STATE@_\r\n const experienceStatePropertyKey = createStatePropertyKey(experienceFullNamespace);\r\n const connectorPreviousState = get(appState, experienceStatePropertyKey, undefined);\r\n\r\n // Find the initial data connector state\r\n const initialDataConnectorState = get(appState, createStatePropertyKey(dataConnectorName), undefined);\r\n\r\n // Create the new experience connector state\r\n const nextStateForConnector = { ...connectorPreviousState, [dataConnectorName]: initialDataConnectorState };\r\n set(appState, experienceStatePropertyKey, nextStateForConnector);\r\n}\r\n\r\n/**\r\n * Updates the data connector state on all experiences that include it.\r\n * @param appState The global app state object.\r\n * @param dataConnectorNamespace The namespace of the data connector that's been updated.\r\n * @param newDataConnectorState The new data connector state object.\r\n */\r\nfunction reportStateChange(\r\n appState: any,\r\n dataConnectorNamespace: string,\r\n newDataConnectorState: any): void {\r\n\r\n const experienceKeys: Set = dataConnectorToExperienceKeyMap.get(dataConnectorNamespace);\r\n if (experienceKeys) {\r\n for (const experienceKey of experienceKeys) {\r\n const experiencePreviousState: any = get(appState, experienceKey, undefined);\r\n\r\n if (experiencePreviousState) {\r\n set(appState, experienceKey, { ...experiencePreviousState, [dataConnectorNamespace]: newDataConnectorState });\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Creates the lodash property key to get or set the experience or data connector state.\r\n * @param fullNamespace The full namespace of the experience or data connector.\r\n */\r\nfunction createStatePropertyKey(fullNamespace: string): string {\r\n return fullNamespace + \".\" + ConnectorConstants.connectorStateKey;\r\n}\r\n\r\n/** Methods to support injecting data connector state into experiences */\r\nexport const dataConnectorInjector = {\r\n registerInjection,\r\n initializeExperience,\r\n reportStateChange\r\n};\r\n","\r\n// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { RenderCache, RenderCacheKeys } from \"./RenderCache\";\r\nimport { renderCacheKeyOfNormalizedKeys, riverRcClassName } from \"./Constants\";\r\n\r\nlet renderCacheObject: RenderCache;\r\n\r\n/**\r\n * Function to get render cache if it's valid.\r\n * @returns Render cache object if it exists and is valid otherwise null.\r\n */\r\nexport function getRenderCache(): RenderCache {\r\n if (renderCacheObject) {\r\n return renderCacheObject;\r\n }\r\n\r\n if (!(window && window.localStorage)) {\r\n return null;\r\n }\r\n\r\n // get all normalized render cache keys from local storage\r\n let renderCacheKeys: RenderCacheKeys;\r\n const renderCacheStoredKeys = window.localStorage.getItem(renderCacheKeyOfNormalizedKeys);\r\n try {\r\n renderCacheKeys = renderCacheStoredKeys && JSON.parse(renderCacheStoredKeys);\r\n } catch (error) {\r\n return null; // keys not parsable.\r\n }\r\n\r\n if (!renderCacheKeys || !renderCacheKeys.keyn || !renderCacheKeys.expn || !renderCacheKeys.frcn || !renderCacheKeys.jssn) {\r\n return null;\r\n }\r\n\r\n const cacheExpirationTimestamp = window.localStorage.getItem(renderCacheKeys.expn);\r\n if (!cacheExpirationTimestamp) {\r\n return null; // Cache Expiration Timestamp not exist\r\n }\r\n\r\n const parsedCacheExpirationTimestamp = parseInt(cacheExpirationTimestamp);\r\n if (!parsedCacheExpirationTimestamp) {\r\n return null; // Cache Expiration Timestamp broken.\r\n }\r\n\r\n const currentTimestamp: number = new Date().getTime();\r\n if (currentTimestamp >= parsedCacheExpirationTimestamp) {\r\n return null; // cache expired.\r\n }\r\n\r\n const renderCacheStorage = window.localStorage.getItem(renderCacheKeys.keyn);\r\n if (!renderCacheStorage) {\r\n return null; // Cache object is missing.\r\n }\r\n\r\n try {\r\n renderCacheObject = JSON.parse(renderCacheStorage);\r\n } catch (error) {\r\n return null; // Cache object not parsable.\r\n }\r\n\r\n if (!renderCacheObject || !renderCacheObject.dom || !renderCacheObject.batch_css) {\r\n renderCacheObject = null; // Cache object is broken\r\n }\r\n\r\n return renderCacheObject;\r\n}\r\n\r\n/**\r\n * Batch All styles into one object.\r\n */\r\nexport function batchCSS(): string {\r\n let batchCss = \"\";\r\n\r\n // Enumerate and write out all of the JSS styles\r\n const styles = document.getElementsByTagName(\"style\");\r\n const length = styles.length;\r\n\r\n for (let i = 0; i < length; i++) {\r\n // Skip any styles that do not have a data-jss attribute to always pick newer styles added by jss\r\n if (styles[i].dataset.jss != null) {\r\n batchCss += styles[i].innerHTML;\r\n }\r\n }\r\n\r\n return batchCss;\r\n}\r\n\r\n/**\r\n * Scrapes Dom and remove River.\r\n */\r\nexport function scrapeDom(includeNewsFeed: boolean): string {\r\n const root = document.getElementById(\"root\");\r\n\r\n if (!root || !root.innerHTML) {\r\n return \"\";\r\n }\r\n\r\n /* Currently we don't have functionality to include experiences separately,\r\n because of that we do return whole dom if river included in render cache and exclude river otherwise */\r\n if (includeNewsFeed) {\r\n return root.innerHTML;\r\n }\r\n\r\n const rivers = document.getElementsByClassName(riverRcClassName);\r\n\r\n if (!rivers || !rivers.length) {\r\n return root.innerHTML;\r\n }\r\n\r\n const river = rivers[0] as HTMLElement;\r\n\r\n return root.innerHTML.replace(river.outerHTML, \"\");\r\n}\r\n\r\n/**\r\n * Gets the state object from render cache.\r\n * @returns The redux state object.\r\n */\r\nexport function getStateFromRenderCache(): any {\r\n // Check to see if this app instance was bootstrapped with a render-cache\r\n const renderCache = getRenderCache();\r\n\r\n if (!renderCache || !renderCache.state) {\r\n return null; // Render Cache missing or it does not include State.\r\n }\r\n\r\n let initialState;\r\n\r\n try {\r\n initialState = JSON.parse(renderCache.state, reduxStoreStringifyReviver);\r\n } catch (error) {\r\n // Cache state object is not parsable.\r\n }\r\n\r\n return initialState;\r\n}\r\n\r\n/**\r\n * Redux Store Stringify replacer HOF, generates store stringify.\r\n * @param storeExceptions list of store namespaces which will not be included in result.\r\n */\r\nexport function reduxStoreStringifyReplacer(key: string, value: any): any {\r\n const originalObject = this[key];\r\n if (originalObject instanceof Map) {\r\n return {\r\n dataType: \"Map\",\r\n value: [...originalObject]\r\n };\r\n } else {\r\n return value;\r\n }\r\n}\r\n\r\n/**\r\n * Custom JSON.stringify reviver that will create Map objects from a string/JSON representation\r\n * @param key not used\r\n * @param value The value being converted from a string\r\n */\r\nfunction reduxStoreStringifyReviver(key: any, value: any): any {\r\n // If the value being restored is a object, check it it was a map\r\n if (typeof value === \"object\" && value !== null) {\r\n // If the object value being restored was a map, that was custom written, then revive it by creating a map\r\n if (value.dataType === \"Map\") {\r\n return new Map(value.value);\r\n }\r\n }\r\n\r\n // Return the original value being restored\r\n return value;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Constants used by WPO\r\n */\r\nexport const WpoConstant = {\r\n /**\r\n * WPO flight identifier that will be used to enabled/disable WPO. As WPO runs before any config fetch we cannot rely on\r\n * config params to enable/disable WPO. This unique flight in the head-data is used to make decision.\r\n * We will also use an explicit PCS flag to enable/disable WPO that will override this flag for DRI use cases.\r\n */\r\n wpoFlightIdentifier: \"prg-wpo-enabled\"\r\n\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { WpoConstant, WpoModel } from \".\";\r\nimport { ITargetScope } from \"cms-models-msn/configuration/ITargetScope\";\r\n\r\n/**\r\n * Returns a boolean value indicating whether WPO feature is enabled or not.\r\n * @param string[] currentPageExperiments - Array of flight ids present in current request.\r\n * @returns Boolean - true if WPO feature is enabled, else false.\r\n */\r\nexport function isWpoEnabled(currentPageExperiments: string[]): boolean {\r\n if (!currentPageExperiments || !currentPageExperiments.length) {\r\n return false;\r\n }\r\n\r\n return (currentPageExperiments.indexOf(WpoConstant.wpoFlightIdentifier)) > -1;\r\n}\r\n\r\n/**\r\n * Get storage cache key used to store WPO service response.\r\n * @param {string} appType - The appType value.\r\n * @param {ITargetScope} targetScope - The current page request target scope.\r\n * @returns string - Cache key string.\r\n */\r\nexport function getWpoStorageCacheKey(appType: string, targetScope: ITargetScope): string {\r\n const { audienceMode = \"\", locale = {}, pageType = \"\" } = targetScope || {};\r\n const { language, market } = locale;\r\n\r\n return `wpo_data_ ${audienceMode}_${language}_${market}_${pageType}_${appType}`;\r\n}\r\n\r\n/**\r\n * Extracts the WPO flight ids from the WPOModel object.\r\n * @param {WpoModel} wpoData - The WPOModel object.\r\n * @returns string[] - Array of WPO recommended flight ids\r\n */\r\nexport function getWpoFlights(wpoData: WpoModel): string[] | null {\r\n if (!wpoData || !wpoData.treatments) {\r\n return null;\r\n }\r\n\r\n return wpoData.treatments.map(item => item.id);\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Helper to promisify the Prime 'require' AMD helper to resolve a single module with no dependencies.\r\n * @param moduleName {string} - the name of the module to resolve\r\n * @param defaultModule {TModule} - the default module implementation if require is not available.\r\n * @returns {Promise{TModule}} a promise that will resolve the module when it's available.\r\n * @description Note that this version only resolves a single module with no dependencies.\r\n */\r\nexport async function requireAsync(moduleName: string, defaultModule?: TModule): Promise {\r\n return new Promise((resolve: (module: TModule) => void, reject) => {\r\n\r\n if (typeof window.require === \"function\") {\r\n window.require([moduleName], resolve);\r\n } else if (defaultModule) {\r\n console.error(`require was not available. Returning default implementation for ${moduleName}`);\r\n resolve(defaultModule);\r\n } else {\r\n reject(\"require is not available\");\r\n }\r\n });\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { logger } from \"../logging\";\r\n\r\n/** Perf marker start suffix */\r\nconst StartMarkSuffix = \"-start\";\r\n\r\n/**\r\n * PerfMarker facilitates adding and measuring performance markers.\r\n */\r\nclass PerfMarker {\r\n /** The single instance of the PerfMarker class. */\r\n private static instance: PerfMarker;\r\n\r\n /** The performance object. */\r\n private performance: Performance;\r\n\r\n /** Perf marker end suffix */\r\n private readonly endMarkSuffix: string = \"-end\";\r\n\r\n /**\r\n * The constructor.\r\n */\r\n private constructor() {\r\n this.initialize(performance);\r\n }\r\n\r\n /**\r\n * Returns singleton class instance.\r\n * @returns The class instance\r\n */\r\n public static getInstance(): PerfMarker {\r\n if (!PerfMarker.instance) {\r\n PerfMarker.instance = new PerfMarker();\r\n }\r\n\r\n return PerfMarker.instance;\r\n }\r\n\r\n /**\r\n * Initialize the member variables.\r\n * @param performance - The performance object instance.\r\n */\r\n public initialize(performance: Performance): void {\r\n this.performance = performance;\r\n }\r\n\r\n /**\r\n * Adds given perf marker to browser.\r\n * @param name - Perf marker to start\r\n */\r\n public startMark(name: string): void {\r\n this.singleMark(name + StartMarkSuffix);\r\n }\r\n\r\n /**\r\n * Adds given perf marker to browser.\r\n * @param name - Perf marker to end\r\n */\r\n public endMark(name: string): void {\r\n this.singleMark(name + this.endMarkSuffix);\r\n this.measureStartEnd(name);\r\n }\r\n\r\n /**\r\n * Adds a single performance marker via the performance API.\r\n * @param name - the name of the perf marker\r\n */\r\n public singleMark(name: string): void {\r\n const performance = this.performance;\r\n if (performance && performance.mark) {\r\n performance.mark(name);\r\n }\r\n }\r\n\r\n /**\r\n * Utility method to add start/end marker around a promise.\r\n * @param name - The name of perf marker\r\n * @param getPromise - The callback\r\n * @returns The promise\r\n */\r\n public async measurePromise(name: string, getPromise: () => Promise): Promise {\r\n this.startMark(name);\r\n const result = await getPromise();\r\n this.endMark(name);\r\n return result;\r\n }\r\n\r\n /**\r\n * Telemetry call this method to collect existing perf markers that each Experience has added.\r\n * @param experienceName - Perf marker name in case of custom marker / Experience name\r\n * @returns {IPerfMarkers}\r\n */\r\n public measurePerfMarker(experienceName: string): IPerfMarkers {\r\n\r\n if (!this.performance) {\r\n return;\r\n }\r\n\r\n const perfMarkers: { [id: string]: PerfMarkerDetail; } = {};\r\n\r\n // Get all perf markers from browser.\r\n const perfEntries = this.performance.getEntriesByType(\"mark\");\r\n if (!perfEntries) {\r\n return perfMarkers;\r\n }\r\n\r\n // Iterate through perfEntries received from browser.\r\n for (let i = 0; i < perfEntries.length; i++) {\r\n\r\n // if marker name in perfEntries object is null\r\n let markerName: string = perfEntries[i].name;\r\n if (!markerName || perfEntries[i].startTime == null) {\r\n continue;\r\n }\r\n\r\n // Remove start and end suffix.\r\n markerName = markerName.replace(/-(end|start)$/i, \"\");\r\n\r\n // if marker name retrieved from browser is not for this experience then continue with next marker.\r\n if (!markerName.startsWith(experienceName)) {\r\n continue;\r\n }\r\n\r\n const perfMarkerDetail = perfMarkers[markerName] || new PerfMarkerDetail(markerName);\r\n perfMarkerDetail.processPerfEntry(perfEntries[i]);\r\n if (perfMarkerDetail.isValid) {\r\n perfMarkers[markerName] = perfMarkerDetail;\r\n }\r\n }\r\n\r\n return perfMarkers;\r\n }\r\n\r\n /**\r\n * Measures the given marker name's start/end markers.\r\n * @param name - The name of the marker whose -start and -end to measure\r\n */\r\n private measureStartEnd(name: string): void {\r\n const performance = this.performance;\r\n if (performance && performance.measure) {\r\n try {\r\n performance.measure(\r\n name,\r\n name + StartMarkSuffix,\r\n name + this.endMarkSuffix\r\n );\r\n } catch (ex) {\r\n // An exception will be thrown if either start/end marker didn't exist.\r\n // We swallo this exception and log an error so that actual code's execution\r\n // would not be effected due to performance measurement code.\r\n logger.logError(`Error while attempting to measure start/end of '${name}'. Error: ${ex}`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const perfMarker = PerfMarker.getInstance();\r\n\r\n/**\r\n * Interface defining attributes of each per marker.\r\n */\r\nexport interface IPerfMarkers {\r\n [key: string]: PerfMarkerDetail;\r\n}\r\n\r\n/**\r\n * Interface defining perf markers.\r\n */\r\nclass PerfMarkerDetail {\r\n /** marker name */\r\n public readonly markerName: string;\r\n /** first start time */\r\n public firstStartTime: number;\r\n /** start time */\r\n public startTime: number;\r\n /** duration */\r\n public duration = 0;\r\n\r\n /**\r\n * Sets marker name.\r\n */\r\n constructor(markerName: string) {\r\n this.markerName = markerName;\r\n }\r\n\r\n /**\r\n * Check if given marker is valid. If marker has a start time then it is a valid marker.\r\n * @returns True if valid else false.\r\n */\r\n get isValid(): boolean {\r\n return this.startTime != null;\r\n }\r\n\r\n /**\r\n * Sum up start and end marker duraiton per marker name.\r\n */\r\n public processPerfEntry(perfEntry: PerformanceEntry): void {\r\n\r\n // If given mark is a start mark\r\n if (perfEntry.name.endsWith(StartMarkSuffix)) {\r\n\r\n // If this is a start mark and firstStartTime is undefined then assign value of startTime now.\r\n if (!this.firstStartTime) {\r\n this.firstStartTime = perfEntry.startTime;\r\n }\r\n\r\n // Change start time to start time of current mark.\r\n this.startTime = perfEntry.startTime;\r\n\r\n } else if (this.startTime != null) {\r\n // This is is not a start mark. Assuming this is end mark, check start time of this mark is set earlier. if set properly then proceed.\r\n // else likely a candiddate to skip \"if\" part.\r\n\r\n // This is a end mark. Add earlier duration plus current start time minus this start time.\r\n this.duration += perfEntry.startTime - this.startTime;\r\n\r\n // reset start time so we can recalculate the next start/end pair correctly\r\n this.startTime = null;\r\n }\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { getPageTimings } from \"./PageTimings\";\r\nimport { logger } from \"../logging\";\r\n\r\nconst pageTimings = getPageTimings();\r\n\r\n/**\r\n * Utility class to keep track of how many times a key has appeared in order to\r\n * get a uniquely qualified name back to be used in a dictionary.\r\n */\r\nclass KeyCounter {\r\n\r\n /** Lookup of counts for the given key */\r\n private timelineCount: { [name: string]: number } = {};\r\n\r\n /** Gets the qualified key name */\r\n public qualifyKey(timelineName: string): string {\r\n\r\n // get the previous count\r\n const count = this.getCount(timelineName);\r\n\r\n // if we've called it previously append the count as suffix\r\n // to identify it uniquely.\r\n if (count <= 1) {\r\n return timelineName;\r\n }\r\n\r\n return timelineName + count;\r\n }\r\n\r\n /** Resets the counter state to initial values */\r\n public reset(): void {\r\n this.timelineCount = {};\r\n }\r\n\r\n /** Gets the key's appearence count */\r\n private getCount(timelineName: string): number {\r\n\r\n // get the previous count\r\n const count = this.timelineCount[timelineName] || 0;\r\n\r\n // update the new count\r\n return this.timelineCount[timelineName] = count + 1;\r\n }\r\n}\r\n\r\n/** Type info of a single page measure in the window._pageMeasures object */\r\nexport type PageMeasure = {\r\n\r\n /** Name of the timeline */\r\n timelineName: string;\r\n\r\n /** Name of the metric */\r\n measureName: string;\r\n\r\n /** Flag that indicates whether this measure is an async measure */\r\n async?: boolean;\r\n\r\n /** The start time of the measure */\r\n from: number;\r\n\r\n /** The end time of the measure */\r\n to: number;\r\n};\r\n\r\n/**\r\n * Unique key qualifier for distinctly identifying instances of perf timelines\r\n * across multiple instances of the same or different experience types.\r\n * For example, ContentPreview, ContentPreview2, ContentPreview3, etc.\r\n */\r\nconst timelineKeyCount = new KeyCounter();\r\n\r\n/** Suffix for start markers */\r\nconst startSuffix = \"-start\";\r\n\r\n/** Suffix for end markers */\r\nconst endSuffix = \"-end\";\r\n\r\n/**\r\n * This class can be used to aggregate a list of perf markers and their transitions.\r\n */\r\nexport class PerfTimeline {\r\n\r\n /**\r\n * Unique key qualifier for metric names that appear multiple times.\r\n * For example, render, render2, render3, etc.\r\n */\r\n private readonly markerCount: KeyCounter = new KeyCounter();\r\n\r\n /**\r\n * List of in-memory logged markers for this perf-timeline object\r\n */\r\n private readonly measures: Array> = [];\r\n\r\n /**\r\n * Constructor of a {PerfTimeline} instance\r\n * @param timelineName - the name of the perf timeline. Note that if you don't know the name\r\n * of a perf timeline at construction time, it can later be renamed to a known name later via\r\n * the 'rename' method.\r\n * @param instanceId - this specific instance's ID. Used during a renaming operation to idenfity any previous isntance.\r\n * @param addPerfMarks - Flag to indicate whether to log perf marks with the native performance API.\r\n * @param addPageTimings - Flag to indicate whether to log the perf marks into the _pageTimings object.\r\n * @param async - Flag to mark this timeline as an async timeline, so by default all measures under\r\n * this timeline will show under a new process line.\r\n */\r\n protected constructor(\r\n public timelineName: string,\r\n public readonly instanceId: string,\r\n private readonly addPerfMarks: boolean,\r\n private readonly addPageTimings: boolean,\r\n private readonly async?: boolean\r\n ) {\r\n this.timelineName = timelineKeyCount.qualifyKey(this.timelineName);\r\n }\r\n\r\n /**\r\n * Helper to construct a {PerfTimeline} instance\r\n * @param timelineName - the name of the perf timeline. Note that if you don't know the name\r\n * of a perf timeline at construction time, it can later be renamed to a known name later via\r\n * the 'rename' method.\r\n * @param instanceId - this specific instance's ID. Used during a renaming operation to idenfity any previous isntance.\r\n * @param addPerfMarks - Flag to indicate whether to log perf marks with the native performance API.\r\n * @param addPageTimings - Flag to indicate whether to log the perf marks into the _pageTimings object.\r\n * @param async - Flag to mark this timeline as an async timeline, so by default all measures under\r\n * this timeline will show under a new process line.\r\n */\r\n public static create(\r\n timelineName: string,\r\n instanceId: string,\r\n addPerfMarks = false,\r\n addPageTimings = false,\r\n async?: boolean\r\n ): PerfTimeline {\r\n return new PerfTimeline(timelineName, instanceId, addPerfMarks, addPageTimings, async);\r\n }\r\n\r\n /**\r\n * Renames this instances of the timeline to the new given name.\r\n * This is useful when the timeline name is not known until after some asynchronous operation is completed,\r\n * but the measuring operation required to be started before the name was known.\r\n * @param timelineName - the new name of the timeline.\r\n */\r\n public rename(timelineName: string): void {\r\n\r\n if (this.timelineName === timelineName) {\r\n return;\r\n }\r\n\r\n if (this.addPageTimings) {\r\n // if we're adding page timings, then make sure we delete the measures under the old name and add the new ones\r\n this.measures.forEach(measure => {\r\n const oldMeasureName = this.qualifyMeasureName(measure.measureName);\r\n delete pageTimings[oldMeasureName + startSuffix];\r\n delete pageTimings[oldMeasureName];\r\n });\r\n }\r\n\r\n this.timelineName = timelineName;\r\n\r\n if (this.addPageTimings) {\r\n // add back the page timings under the new timeline name\r\n this.measures.forEach(measure => {\r\n const newMeasureName = this.qualifyMeasureName(measure.measureName);\r\n pageTimings[newMeasureName + startSuffix] = measure.from;\r\n pageTimings[newMeasureName] = measure.to - measure.from;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Marks the start of a timeline measurement.\r\n * @param coreMarkerName - the name of the core marker. This value is usually invariant\r\n * from instance to instance (i.e., init, config, render)\r\n * @param dynamicMeasureName - the optional additional identifying name to give for the measure.\r\n * This value can be used to identify dynamic values across instances. For example the\r\n * HREF of the config. This can also later be updated to a new name when calling the 'endMeasure'\r\n * method.\r\n * @param async - flag to indicate whether this is an async measure or not.\r\n * @returns An object with the following properties:\r\n * - endMeasure - method that should be used to mark the end the measure.\r\n */\r\n public startMeasure(coreMarkerName: string, dynamicMeasureName?: string, async?: boolean): { endMeasure: (updatedDynamicMeasureName?: string) => void } {\r\n\r\n const startTime = performance.now();\r\n\r\n const timelineNameAtStart = this.timelineName;\r\n let measureNameCore = this.formatMeasureName(coreMarkerName, dynamicMeasureName);\r\n let measureName = this.qualifyMeasureName(measureNameCore);\r\n\r\n const startMarkerName = measureName + startSuffix;\r\n this.singleMark(startMarkerName);\r\n\r\n if (this.addPageTimings) {\r\n pageTimings[startMarkerName] = startTime;\r\n }\r\n\r\n return {\r\n /**\r\n * Ends the given measure we started\r\n */\r\n endMeasure: (updatedDynamicMeasureName?: string) => {\r\n\r\n const endTime = performance.now();\r\n\r\n // flag to indicate whether we need to re-qualify the measure name based on frequency. Note that we only\r\n // set this to true if the timeline name has changed since start, or we have a new dynamic name at the end.\r\n const requalifyMeasureName = updatedDynamicMeasureName\r\n || (timelineNameAtStart !== this.timelineName);\r\n\r\n if (requalifyMeasureName) {\r\n // if by the time we're ending the measure, we have a new dynamic name for the measurement, use that as the final measure name.\r\n measureNameCore = this.formatMeasureName(coreMarkerName, updatedDynamicMeasureName);\r\n measureName = this.qualifyMeasureName(measureNameCore);\r\n }\r\n\r\n const endMarkerName = measureName + endSuffix;\r\n\r\n this.singleMark(endMarkerName);\r\n this.measure(measureName, startMarkerName, endMarkerName);\r\n\r\n // Note we only save the partial metric without the timeline name, so we can use the final timeline name\r\n // if any rename operations happen while initial measurements have started without the final timeline name\r\n this.measures.push({\r\n measureName: measureNameCore,\r\n async: (async != null) ? async : this.async,\r\n from: startTime,\r\n to: endTime\r\n });\r\n\r\n if (this.addPageTimings) {\r\n pageTimings[measureName] = endTime - startTime;\r\n }\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Returns the list of page measures for this timeline object\r\n * @returns {Array} containing the fully qualified list of metric names for this perf timeline.\r\n */\r\n public getPageMeasures(): Array {\r\n return this.measures.map(measure => ({\r\n ...measure,\r\n timelineName: this.timelineName\r\n }));\r\n }\r\n\r\n /**\r\n * Instruments the start/begin for the given function with a given binding context\r\n * @param funcName - the identifying name of the function\r\n * @param func - the function instance to measure\r\n * @param bindingContext - the optional context from which to invoke the function\r\n * @returns the instrumented function that will track the start/end of the given function.\r\n */\r\n public instrumentFunc(funcName: string, func: TFunc, bindingContext?: Object): TFunc {\r\n\r\n const _this = this;\r\n\r\n const wrapper = function (...args: unknown[]): unknown {\r\n const endMeasure = _this.startMeasure(funcName).endMeasure;\r\n try {\r\n return func.apply(bindingContext, args);\r\n } finally {\r\n endMeasure();\r\n }\r\n };\r\n\r\n return wrapper as unknown as TFunc;\r\n }\r\n\r\n /**\r\n * Instruments the start/begin for the given async-style function\r\n * @param promiseName - the identifying name of the promise\r\n * @param getPromise - the promise getter that returns the promise to measure. This is needed\r\n * so that the start measurement can occur before the promise starts executing.\r\n * @param async - flag to indicate whether to measure this promise as an async timeline\r\n * or a synchronous one. Please note that if you specify this as true, and other measurements\r\n * in the timeline are synchronous, the async measurements will appear as a separate timeline\r\n * and will not be next to the synchronous one. If unsure, leave undefined.\r\n * @returns the wrapped promise that tracks the start/end of the promise execution.\r\n */\r\n public async instrumentPromise(promiseName: string, getPromise: () => Promise, async?: boolean): Promise {\r\n\r\n const endMeasure = this.startMeasure(promiseName, null, async).endMeasure;\r\n try {\r\n return await getPromise();\r\n } finally {\r\n endMeasure();\r\n }\r\n }\r\n\r\n /**\r\n * Prefixes the given measure name with the current timeline name\r\n * @param measureName - the measure name to qualify\r\n * @returns the timeline name prefixed measure name.\r\n */\r\n private qualifyMeasureName(measureName: string): string {\r\n return `${this.timelineName}-${measureName}`;\r\n }\r\n\r\n /**\r\n * Returns the formatted measure name with it's constiuent parts\r\n * @param coreMeasureName - the core marker name\r\n * @param dynamicMeasureName - optional dynamic measure name\r\n * @returns the formatted marker name\r\n */\r\n private formatMeasureName(coreMeasureName: string, dynamicMeasureName?: string): string {\r\n const dynamicMeasureSuffix = dynamicMeasureName ? (\"-\" + dynamicMeasureName) : \"\";\r\n return this.markerCount.qualifyKey(`${coreMeasureName}${dynamicMeasureSuffix}`);\r\n }\r\n\r\n /**\r\n * Helper to add a single mark with the performance API\r\n * @param markerName - the name of the marker to add.\r\n */\r\n private singleMark(markerName: string): void {\r\n if (this.addPerfMarks) {\r\n performance.mark(markerName);\r\n }\r\n }\r\n\r\n /**\r\n * Helper to calculate a performance measurement against the performance API\r\n * @param measureName - the name of the measure\r\n * @param startMarker - the name of the start marker\r\n * @param endMarker - the name of the end marker\r\n */\r\n private measure(measureName: string, startMarker: string, endMarker: string): void {\r\n if (this.addPerfMarks) {\r\n try {\r\n // this can throw if start/end markers were not available for some reason\r\n performance.measure(measureName, startMarker, endMarker);\r\n } catch (ex) {\r\n logger.logError(ex);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Test export for resetting the timeline name counter\r\n */\r\nexport function _resetTimelineKeyCounter(): void {\r\n timelineKeyCount.reset();\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { PageMeasure } from \"./PerfTimeline\";\r\nimport { getExperienceMeasures } from \"./ExperienceDiagnostics\";\r\nimport { getPageTimings } from \"./PageTimings\";\r\nimport { groupBy } from \"lodash-es\";\r\n\r\n/** The type that encapsulates the data for a single aggregated timeline object */\r\ninterface Timeline {\r\n\r\n /** Name of the timeline */\r\n name: string,\r\n\r\n /** The data for the timeline */\r\n measures: Array\r\n}\r\n\r\n/** Describes a single Process ID */\r\ninterface PID {\r\n /** The pid value */\r\n pid: number;\r\n}\r\n\r\n/** Type for easily looking up if a given timeline should be considered async */\r\ninterface AsyncTimelineGroups {\r\n /** The incrementing async PID */\r\n nextPID: PID,\r\n\r\n /** The async PID for the given timeline */\r\n [timelineName: string]: PID\r\n}\r\n\r\n/** All input arguments for the app trace generation process */\r\nexport interface AppTraceMappingArgs {\r\n\r\n /** Flag to indicate whether we're generating the app trace for upload purposes */\r\n uploadTrace?: boolean;\r\n\r\n /** Max time limit to limit the data collection to */\r\n maxTime?: number;\r\n}\r\n\r\n/**\r\n * Calculates and returns the JSON that can be used in the chrome://tracing tool to render an\r\n * experience-centric perf timeline for various tracked page measurements in the pageMeasures object.\r\n * See https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview# for more details.\r\n * @param args - input arguments for the app trace generation.\r\n * @returns Array object with chrome trace event data that can be serialized and saved to a JSON file\r\n * to be loaded inside the chrome://tracing tool.\r\n */\r\nexport function getAppPerfTrace(args: AppTraceMappingArgs = {}): Array {\r\n\r\n const pageTimings = { ...getPageTimings() };\r\n\r\n // create a shallow copy since we don't want to mutate the original data from the page object\r\n const measures: Array = [];\r\n\r\n const asyncExperiences = {\r\n\r\n // Web-Worker\r\n WW: { pid: 0 },\r\n\r\n // Config resolver on the render thread\r\n Resolver: { pid: 1 },\r\n\r\n // Various resource timing categories.\r\n Ads: { pid: 2 },\r\n Telemetry: { pid: 3 },\r\n \"Content Preview\": { pid: 4 },\r\n Images: { pid: 5 },\r\n JS: { pid: 6 },\r\n Configs: { pid: 7 },\r\n Services: { pid: 8 },\r\n\r\n // The async process ID counter, which will be used to group similar timelines under virtual process IDs to\r\n // identify and group a list of related timelines. The timeline groups will render in order of smallest to\r\n // larges process ID in the chrome trace.\r\n nextPID: { pid: 20 }\r\n };\r\n\r\n // this is the process ID which will identify the main timeline (that renders last in the tool)\r\n const defaultPID = 100;\r\n\r\n // merge resource timings\r\n mergeResourceTimings(args, measures, asyncExperiences);\r\n\r\n // merge experience timeline measures.\r\n mergeExperienceTimings(args, measures, getExperienceMeasures(), asyncExperiences);\r\n\r\n // merge other page timings\r\n mergePageTimings(args, measures, pageTimings, asyncExperiences, /^WW\\./, \"WW\");\r\n\r\n // merge timings from window._appTimings object if it exists (used to get timeline measurements\r\n // out of band from non-typescript enabled code)\r\n const appTimings = { ...(window._appTimings || {}) };\r\n mergePageTimings(args, measures, appTimings, asyncExperiences, /.*/);\r\n\r\n // build chrome trace object\r\n const chromeTrace = [];\r\n\r\n // zero start instance marker to indicate nav start\r\n chromeTrace.push(chromeInstantMarker(args, \"Global\", \"NavStart\", defaultPID, 0, \"g\"));\r\n\r\n // Other well known instance markers\r\n Object.keys(pageTimings)\r\n .filter(name => name.match(/TT/) && checkTime(args, pageTimings[name]))\r\n .sort((key1, key2) => pageTimings[key1] - pageTimings[key2])\r\n .forEach(name =>\r\n chromeTrace.push(chromeInstantMarker(args, \"Global\", name, defaultPID, pageTimings[name], \"g\"))\r\n );\r\n\r\n // web-worker instant markers\r\n Object.keys(pageTimings)\r\n .filter(name => name.match(/^WW\\./i) && checkTime(args, pageTimings[name]))\r\n .sort((key1, key2) => pageTimings[key1] - pageTimings[key2])\r\n .forEach(name =>\r\n chromeTrace.push(chromeInstantMarker(args, \"WW\", name, asyncExperiences[\"WW\"].pid, pageTimings[name], \"p\"))\r\n );\r\n\r\n // Main process name metadata\r\n chromeTrace.push(chromeMetadata(\"process_name\", defaultPID, { name: \"Main\" }));\r\n chromeTrace.push(chromeMetadata(\"process_sort_index\", defaultPID, { sort_index: defaultPID }));\r\n\r\n const { uploadTrace } = args;\r\n\r\n // async timelines\r\n calculateTimelines(args, measures, true)\r\n .forEach((timeline, timelineIndex) => {\r\n\r\n const { pid } = asyncExperiences[timeline.name];\r\n\r\n // for async timelines, we need to create a separate process so the individual\r\n // measurements can start on their own line as async events should\r\n timeline.measures.forEach((measure, measureIndex) => {\r\n\r\n const { timelineName, measureName, from, to } = measure;\r\n const measureIndexPrefix = (\"000\" + measureIndex).substr(-3, 3);\r\n const normalizedName = uploadTrace ? truncateName(measureName) : measureName;\r\n const name = `${measureIndexPrefix}-${normalizedName}`;\r\n\r\n // async begin/end\r\n chromeTrace.push(...chromeAsyncMeasure(args, timelineName, name, pid, timelineIndex, measureIndex, from, to));\r\n });\r\n\r\n // since we're creating a new process id for async experiences, put the name metadata for the process\r\n chromeTrace.push(chromeMetadata(\"process_name\", pid, { name: timeline.name }));\r\n chromeTrace.push(chromeMetadata(\"process_sort_index\", pid, { sort_index: pid }));\r\n chromeTrace.push(chromeMetadata(\"thread_name\", pid, { name: timeline.name }, timelineIndex));\r\n chromeTrace.push(chromeMetadata(\"thread_sort_index\", pid, { sort_index: timelineIndex }, timelineIndex));\r\n });\r\n\r\n // sync timelines\r\n calculateTimelines(args, measures, false)\r\n .forEach((timeline, timelineIndex) => {\r\n\r\n const pid = defaultPID;\r\n\r\n timeline.measures.forEach(measure => {\r\n const { timelineName, measureName, from, to } = measure;\r\n chromeTrace.push(chromeSyncMeasure(args, timelineName, measureName, pid, timelineIndex, from, to));\r\n });\r\n\r\n chromeTrace.push(chromeMetadata(\"thread_name\", pid, { name: timeline.name }, timelineIndex));\r\n chromeTrace.push(chromeMetadata(\"thread_sort_index\", pid, { sort_index: timelineIndex }, timelineIndex));\r\n });\r\n\r\n return chromeTrace;\r\n}\r\n\r\n/**\r\n * Creates a chrome metadata entry object\r\n * @param metadataType - the metadata type\r\n * @param pid - the process id\r\n * @param args - contextual properties for the metadata\r\n * @param threadId - the thread id\r\n */\r\nfunction chromeMetadata(metadataType: string, pid: number, args: object, threadId?: number): object {\r\n\r\n const metadata: any = {\r\n name: metadataType,\r\n ph: \"M\",\r\n pid,\r\n args\r\n };\r\n\r\n if (threadId != null) {\r\n metadata.tid = threadId;\r\n }\r\n\r\n return metadata;\r\n}\r\n\r\n/**\r\n * Returns two markers that signifiy the measurement of an asynchronous event\r\n * @param args - input arguments for the app trace generation.\r\n * @param category - the event category\r\n * @param name - the event name\r\n * @param pid - the process id of the event\r\n * @param threadId - the thread id of the event\r\n * @param id - the unique id that will distinguish the begin/end of this async event from others\r\n * @param fromMs - start time of the event\r\n * @param toMs - end time of the event\r\n * @param showInParentThread - flag to indicate whether the event should be nestable.\r\n */\r\nfunction chromeAsyncMeasure(args: AppTraceMappingArgs, category: string, name: string, pid: number, threadId: number, id: number, fromMs: number, toMs: number, showInParentThread?: boolean): Array {\r\n return [\r\n chromeMarker(args, category, name, showInParentThread ? \"B\" : \"b\", pid, threadId, fromMs, { id }),\r\n chromeMarker(args, category, name, showInParentThread ? \"E\" : \"e\", pid, threadId, toMs, { id })\r\n ];\r\n}\r\n\r\n/**\r\n * Returns two markers that signifiy the measurement of an synchronous event\r\n * @param args - input arguments for the app trace generation.\r\n * @param category - the event category\r\n * @param name - the event name\r\n * @param pid - the process id of the event\r\n * @param threadId - the thread id of the event\r\n * @param fromMs - start time of the event\r\n * @param toMs - end time of the event\r\n */\r\nfunction chromeSyncMeasure(args: AppTraceMappingArgs, category: string, name: string, pid: number, threadId: number, fromMs: number, toMs: number): object {\r\n const durationMis = convertToMicroseconds(toMs - fromMs);\r\n return chromeMarker(args, category, name, \"X\", pid, threadId, fromMs, { dur: durationMis });\r\n}\r\n\r\n/** -\r\n * Returns an instance marker\r\n * @param args - input arguments for the app trace generation.\r\n * @param category - the event category\r\n * @param name - the event name\r\n * @param pid - the process id of the event\r\n * @param timeStampMs - the time when the instant occurred\r\n * @param type - the scope type of the instant event\r\n */\r\nfunction chromeInstantMarker(args: AppTraceMappingArgs, category: string, name: string, pid: number, timeStampMs: number, type: string): object {\r\n return chromeMarker(args, category, name, \"i\", pid, null, timeStampMs, { s: type });\r\n}\r\n\r\n/**\r\n * Creates a generic Chrome marker entry\r\n * @param args - input arguments for the app trace generation.\r\n * @param category - the event category\r\n * @param name - the event name\r\n * @param type - the scope type of the instant event\r\n * @param pid - the process id of the event\r\n * @param threadId - the thread id of the event\r\n * @param timeStampMs - the time when the instant occurred\r\n * @param auxData - any generic properties to add to the marker JSON\r\n */\r\nfunction chromeMarker(args: AppTraceMappingArgs, category: string, name: string, type: string, pid: number, threadId: number = null, timeStampMs: number, auxData: any): object {\r\n\r\n const marker: any = {\r\n cat: category,\r\n name,\r\n ph: type,\r\n pid,\r\n tid: threadId,\r\n ts: convertToMicroseconds(timeStampMs),\r\n ...auxData\r\n };\r\n\r\n if (threadId != null) {\r\n marker.tid = threadId;\r\n }\r\n\r\n return marker;\r\n}\r\n\r\n/**\r\n * Iterates through the given measure data, parses, groups timeline data and creates\r\n * a sorted array of {Timeline} objects to render in the Chrome trace\r\n * @param args - input arguments for the app trace generation.\r\n * @param measures - the measure data object to which to append new measurements.\r\n * @param async - if this measure is asynchronous or not.\r\n * @param ttvr - the time to visually ready metric used to filter out measures that occur it if necessary.\r\n * @returns the array of aggregated, sorted {Timeline} objects.\r\n */\r\nfunction calculateTimelines(args: AppTraceMappingArgs, measures: Array, async: boolean): Array {\r\n\r\n // group info objects by experience name\r\n const timelineGroups = groupBy(\r\n measures.filter(measure =>\r\n !!measure.async === async\r\n && checkTime(args, measure.from, measure.to)\r\n ),\r\n info => info.timelineName\r\n );\r\n\r\n // create a list of sub-timelines where each sub-timeline is sorted by metric value\r\n const timelineList: Array = [];\r\n let maxValue = 0;\r\n\r\n Object.keys(timelineGroups).forEach(groupName => {\r\n\r\n // sort each timeline by start metric value\r\n const timeline = timelineGroups[groupName].sort(\r\n (info1, info2) => info1.from - info2.from\r\n );\r\n\r\n // get the running max value from the last metric on each sorted timeline\r\n maxValue = Math.max(maxValue, timeline[timeline.length - 1].to);\r\n\r\n timelineList.push({\r\n name: groupName,\r\n measures: timeline\r\n });\r\n });\r\n\r\n // sort the list of timelines by first appearing metric for each timeline.\r\n // This is the order we will render the timeline view from top to bottom,\r\n // so that each line represents a single experience's timeline.\r\n return timelineList.sort(\r\n (timeline1, timeline2) => timeline1.measures[0].from - timeline2.measures[0].from\r\n );\r\n}\r\n\r\n/**\r\n * Attempts to map measures from the given object bag that contains related start/end markers\r\n * and adds to the given measures array.\r\n * @param args - input arguments for the app trace generation.\r\n * @param measures - the measure data object to which to append new measurements.\r\n * @param pageTimings - the page timings object from which to parse data from.\r\n * @param asyncExperiences - the async info object containing the currently allocated PID info\r\n * @param matchRegex - regex to use to filter the metric names.\r\n * @param timelineName - Optional name to use for the timeline. If not specified the measure name will\r\n * be parsed to attempt to derive the timeline name dynamically.\r\n */\r\nfunction mergePageTimings(\r\n args: AppTraceMappingArgs,\r\n measures: Array,\r\n pageTimings: object,\r\n asyncExperiences: AsyncTimelineGroups,\r\n matchRegex: RegExp,\r\n timelineName?: string\r\n): void {\r\n\r\n // work out other WW markers\r\n const startSuffixRegex = /-?[Ss]tart$/;\r\n\r\n // we have a range of start/end marker styles in WW code :-/\r\n const endSuffixLookup = {\r\n \"-Start\": \"-End\",\r\n \"-start\": \"-end\",\r\n Start: \"End\",\r\n start: \"end\"\r\n };\r\n\r\n const processedKeysToRemove = [];\r\n\r\n Object.keys(pageTimings)\r\n .filter(key => key.match(matchRegex))\r\n .forEach(key => {\r\n\r\n const startSuffixMatch = key.match(startSuffixRegex);\r\n if (!startSuffixMatch) {\r\n return;\r\n }\r\n\r\n let measureName = key.replace(startSuffixRegex, \"\");\r\n const endKey = `${measureName}${endSuffixLookup[startSuffixMatch[0]]}`;\r\n const endValue = startSuffixMatch && pageTimings[endKey];\r\n\r\n if (!endValue) {\r\n return;\r\n }\r\n\r\n processedKeysToRemove.push(key);\r\n processedKeysToRemove.push(endKey);\r\n\r\n let thisTimelineName = timelineName;\r\n\r\n // if we're not given an explicit timeline name, then see if we can try to derive the\r\n // timeline name from the measurement (i.e., see if the measure name is formatted as\r\n // [timeline name].[measure name]), and if so, use that instead. This is useful for aggregating\r\n // related timeline measures across code that use the PerfTimeline class as well as the global\r\n // window._appTimings object to generate a unified timeline.\r\n if (!thisTimelineName) {\r\n const prefixSuffixMatch = measureName.match(/(.+)\\.(.+)/);\r\n if (prefixSuffixMatch) {\r\n thisTimelineName = prefixSuffixMatch[1];\r\n measureName = prefixSuffixMatch[2];\r\n } else {\r\n // no explicit timeline name, and no timeline name could be derived from the measure name\r\n return;\r\n }\r\n }\r\n\r\n const fromValue = pageTimings[key];\r\n\r\n if (!checkTime(args, fromValue, endValue)) {\r\n return;\r\n }\r\n\r\n measures.push({\r\n async: !!asyncExperiences[thisTimelineName],\r\n timelineName: thisTimelineName,\r\n measureName,\r\n from: fromValue,\r\n to: endValue\r\n });\r\n });\r\n\r\n // remove the keys we used for detecting start/end from the measures so we don't attempt\r\n // to process them again for something else\r\n for (const keyToRemove of processedKeysToRemove) {\r\n delete pageTimings[keyToRemove];\r\n }\r\n}\r\n\r\n/**\r\n * Parses various resource timings that are of interest and merges into the measure data object\r\n * @param args - input arguments for the app trace generation.\r\n * @param measures - the destination array into which we will add the resource timings.\r\n * @param asyncExperiences - the async info object containing the currently allocated PID info\r\n */\r\nfunction mergeResourceTimings(args: AppTraceMappingArgs, measures: Array, asyncExperiences: AsyncTimelineGroups): void {\r\n\r\n // interesting groups from resource timings.\r\n // IMPORTANT!! Put from most specific to less specific, so dupes don't appear in multiple groups.\r\n const resourceGroupings = [\r\n\r\n // Ads\r\n { name: \"Ads\", regex: /(\\/srtb\\.|taboola|outbrain)/i },\r\n\r\n // Config service calls (CRS or Config)\r\n { name: \"Telemetry\", regex: /(otf\\.|\\/c\\.gif)/i },\r\n\r\n // Content preview calls.\r\n // Note: put before services to avoid capture of /content/\r\n { name: \"Content Preview\", regex: /\\/content\\/view\\/v[0-9]\\/Preview\\//i },\r\n\r\n // Content service calls (i.e., content preview)\r\n { name: \"Images\", regex: /(img-s-msn-com|\\.svg)/i },\r\n\r\n // Javascript resources.\r\n // Note: put before configs, to avoid capture of web-worker hash, which contains config stuff\r\n { name: \"JS\", regex: /\\.js/i },\r\n\r\n // Config service calls (CRS or Config)\r\n { name: \"Configs\", regex: /\\/config/i },\r\n\r\n // Various known service calls to 1S (i.e., feed, structure data, etc.)\r\n { name: \"Services\", regex: /(\\/service\\/|apiKey|\\/getappanoncookie|content)/i }\r\n ];\r\n\r\n let nonZeroResources = performance.getEntriesByType(\"resource\")\r\n .filter(entry => {\r\n const { duration, startTime } = entry;\r\n return (duration > 0)\r\n && checkTime(args, startTime, startTime + duration);\r\n });\r\n\r\n resourceGroupings.forEach(resourceGroup => {\r\n\r\n // add the resource group names to the async experiences list\r\n tryCreateAsyncPID(resourceGroup.name, asyncExperiences);\r\n\r\n const remainingResources = [];\r\n\r\n nonZeroResources\r\n .filter(entry => {\r\n const match = entry.name.match(resourceGroup.regex);\r\n if (!match) {\r\n remainingResources.push(entry);\r\n }\r\n return match;\r\n })\r\n .forEach((entry, entryIndex) => {\r\n\r\n const url = new URL(entry.name);\r\n const measureName = url.pathname.length > 1\r\n ? url.pathname\r\n : url.hostname;\r\n\r\n measures.push({\r\n async: true,\r\n timelineName: resourceGroup.name,\r\n measureName: `${measureName}-${entryIndex}`,\r\n from: entry.startTime,\r\n to: entry.startTime + entry.duration\r\n });\r\n });\r\n\r\n // don't re-process the ones we already matched for a previous group.\r\n nonZeroResources = remainingResources;\r\n });\r\n}\r\n\r\n/**\r\n * Appends the given measure to the target array\r\n * @param args - input arguments for the app trace generation.\r\n * @param destinationMeasures - the destination array to which to add the measures\r\n * @param sourceMeasures - the source list of measures to process and add\r\n * @param asyncExperiences - the async info object containing the currently allocated PID info\r\n */\r\nfunction mergeExperienceTimings(\r\n args: AppTraceMappingArgs,\r\n destinationMeasures: Array,\r\n sourceMeasures: Array,\r\n asyncExperiences: AsyncTimelineGroups\r\n): void {\r\n\r\n sourceMeasures.forEach(measure => {\r\n const { async, timelineName } = measure;\r\n if (async) {\r\n tryCreateAsyncPID(timelineName, asyncExperiences);\r\n }\r\n\r\n if (checkTime(args, measure.from, measure.to)) {\r\n destinationMeasures.push(measure);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Attempts to create a new async PID for the given timeline name if it does not already exist\r\n * @param timelineName - the name of the async timeline to allocate a new PID if it does not exist.\r\n * @param asyncExperiences - the async info object containing the currently allocated PID info\r\n * @returns {boolean} Indicating whether an async PID exists for the given timeline or not.\r\n */\r\nfunction tryCreateAsyncPID(timelineName: string, asyncExperiences: AsyncTimelineGroups): boolean {\r\n if (!asyncExperiences[timelineName]) {\r\n asyncExperiences[timelineName] = { pid: asyncExperiences.nextPID.pid++ };\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Takes a timestamp in milliseconds and returns the value in rounded microseconds.\r\n * @param timeStampMs - the millisecond number that needs to be converted to microseconds\r\n * @returns {number} the equivalent rounded microsecond value.\r\n */\r\nfunction convertToMicroseconds(timeStampMs: number): number {\r\n return Math.round(timeStampMs * 1000);\r\n}\r\n\r\n/**\r\n * Check if the given timestamp is within the limits of the app trace generation parameters\r\n * @param args - input arguments for the app trace generation.\r\n * @param timeStampMs - the timestamp to check\r\n */\r\nfunction checkTime(args: AppTraceMappingArgs, fromMs: number, toMs?: number): boolean {\r\n return !args.uploadTrace\r\n || !args.maxTime\r\n || ((!fromMs || fromMs <= args.maxTime)\r\n && (!toMs || toMs <= args.maxTime));\r\n}\r\n\r\n/**\r\n * Takes the name and removes everything that is between either the first and last slash or period\r\n * depending upon whether or not there is more than one slash in the name.\r\n * @param name the name to be truncated.\r\n * @param slashes flag to determine if we're truncating between slashes or not.\r\n */\r\nfunction truncateName(name: string): string {\r\n // Find the last occurence of the slash in the string. If it exists then we'll keep everything\r\n // after it. If it doesn't exist then keep the entire string.\r\n const lastPathIndex = name.lastIndexOf(\"/\");\r\n return (lastPathIndex >= 0)\r\n ? name.substr(lastPathIndex + 1)\r\n : name;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { AppPerfTraceConfig, tryParseAppTraceConfig } from \"./AppPerfTraceConfig\";\r\nimport { PageMeasure, PerfTimeline } from \"./PerfTimeline\";\r\nimport { canUseDOM, getLocationHref } from \"@msnews/isomorphic-util\";\r\n\r\nimport { getAppPerfTrace } from \"./AppPerfTrace\";\r\nimport { logger } from \"../logging\";\r\n\r\nlet configOverrides: AppPerfTraceConfig;\r\n\r\n/**\r\n * The configuration for app trace switches. This will be updated with the\r\n * config in the CMS and any properties from URL overrides.\r\n */\r\nconst config: AppPerfTraceConfig = {};\r\n\r\n/**\r\n * Dictionary containing the unique {PerfTimeline} object instances across the app.\r\n * When related measurements on the same perf timeline is required across unrelated parts\r\n * of the code, this will guarantee you're tracking those measurements under the same\r\n * perf timeline using a combination of the experience name and instance id.\r\n */\r\nlet perfTimelineInstances: { [instanceId: string]: PerfTimeline };\r\n\r\n/**\r\n * Initializes experience perf diagnostic specific state.\r\n * Note: This method should not be called explicitly (other than from UTs.)\r\n * It is already called by default below.\r\n * @param locationHref - the value of window.location.href from which to parse options.\r\n */\r\nexport function initExperienceDiagnostics(locationHref: string): void {\r\n perfTimelineInstances = {};\r\n setAppPerfTraceConfigOverrides(locationHref);\r\n}\r\n\r\nif (canUseDOM()) {\r\n // initialize experience diagnostics config\r\n // TODO (http://osgvsowi/24596752): This needs reinitialized on each request when server side rendering\r\n initExperienceDiagnostics(getLocationHref());\r\n\r\n // Note that we're setting the _getAppPerfTrace function here so that it doesn't get tree shaken out\r\n // since it's not actually referenced from any PROD code anywhere. However since the tryGetPerfTimeline function\r\n // is referenced, having this code run here makes it work.\r\n //\r\n // TODO: This creates a circular dependency which is fine for actual functionality as ES modules know\r\n // how to deal with it. However this can cause issues when debugging UTs sometimes.\r\n (window)._getAppPerfTrace = getAppPerfTrace;\r\n}\r\n\r\n/**\r\n * Returns the app trace config.\r\n */\r\nexport function getAppPerfTraceConfig(): AppPerfTraceConfig {\r\n return config;\r\n}\r\n\r\n/**\r\n * Helper to set the app trace config dynamically. Useful when the app trace config\r\n * has been loaded via a configuration (such as entry point config), and we want to use\r\n * that as the default/base config instead. Note that we still apply higher precedence\r\n * to the location parsed config since we want to make sure to use those if specified.\r\n * @param baseConfig the base configuration to apply.\r\n */\r\nexport function setAppPerfTraceBaseConfig(baseConfig: Partial): void {\r\n if (!baseConfig) {\r\n return;\r\n }\r\n\r\n // Use the config from URL last, so we have highest precedence on QSPs\r\n Object.assign(config, baseConfig, configOverrides);\r\n\r\n // forcefully disable for some options we never want enabled in upload scenario\r\n if (config.uploadTrace) {\r\n\r\n // don't bloat page timings with app trace related timings\r\n config.addPageTimings = false;\r\n\r\n // don't emit performance marks that show up on F12\r\n config.addPerformanceMarks = false;\r\n\r\n // if sample rate has not been set, set to 0, or does not pass\r\n // the random value test, we need to:\r\n // 1. disable app trace collection completely\r\n // 2. disable upload flag, so that when we try to get the app trace for upload\r\n // it will simply return an empty trace, and prevent the upload.\r\n //\r\n if (!config.sampleRate\r\n || Math.random() > config.sampleRate) {\r\n\r\n config.enablePerfTimeline = false;\r\n config.uploadTrace = false;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Initializes experience perf diagnostic specific state\r\n * Note: this method should not be called explicitly (other than from UTs.)\r\n * It is already called by default at the beginning of module initialization.\r\n * @param locationHref - the value of window.location.href from which to parse options\r\n */\r\nfunction setAppPerfTraceConfigOverrides(locationHref: string): void {\r\n Object.assign(config, configOverrides = tryParseAppTraceConfig(locationHref));\r\n}\r\n\r\n/**\r\n * Gets or creates a perf timeline object for the given experience instance if perf measurements are enabled\r\n * for the given experience.\r\n * @param experienceName - the name of the experience for which to create the timeline.\r\n * @param instanceId - the ID that will uniquely identify this timeline across multiple instances.\r\n */\r\nexport function tryGetPerfTimeline(experienceName: string, instanceId: string, async?: boolean): PerfTimeline {\r\n return shouldTrackPerfTimeline(experienceName)\r\n ? getPerfTimeline(experienceName, instanceId, async)\r\n : undefined;\r\n}\r\n\r\n/**\r\n * Gets or creates a perf timeline object for the given experience instance. This should only be used in special\r\n * circumstances where we may not know in advance whether perf timeline should be enabled for an experience, but\r\n * still want to start the measurements as not to miss anything in case collection is enabled at a later time.\r\n * This is usually used in entry point to collect intialization measurements before the config is loaded with\r\n * more parameters for app perf trace collection in order to upload trace logs in production.\r\n * @param experienceName - the name of the experience for which to get the perf timeline.\r\n * @param instanceId - the instance specific ID that will uniquely identify this instance from other instances.\r\n */\r\nexport function getPerfTimeline(experienceName: string, instanceId: string, async?: boolean): PerfTimeline {\r\n const instanceKey = getInstanceKeyCore(experienceName, instanceId);\r\n\r\n const perfTimeline = perfTimelineInstances[instanceKey];\r\n if (perfTimeline) {\r\n return perfTimeline;\r\n }\r\n\r\n return perfTimelineInstances[instanceKey] = PerfTimeline.create(\r\n experienceName,\r\n instanceId,\r\n config.addPerformanceMarks,\r\n config.addPageTimings,\r\n async\r\n );\r\n}\r\n\r\n/**\r\n * Renames the given perf timeline object and moves the lookup dictionary reference under the new key\r\n * @param perfTimeline - the perf timeline to rename\r\n * @param newExperienceName - the new name for the perf timeline\r\n */\r\nexport function renamePerfTimeline(perfTimeline: PerfTimeline, newExperienceName: string): void {\r\n\r\n const oldInstanceKey = getInstanceKey(perfTimeline);\r\n\r\n if (perfTimelineInstances[oldInstanceKey] !== perfTimeline) {\r\n logger.logError(`Attempted to rename a perf timeline object with mismatching instance key ${oldInstanceKey}`);\r\n return;\r\n }\r\n\r\n // rename the perf timeline to the new name\r\n perfTimeline.rename(newExperienceName);\r\n\r\n // delete the old reference\r\n delete perfTimelineInstances[oldInstanceKey];\r\n\r\n // ...and add the new instance under the new key\r\n const newInstanceKey = getInstanceKey(perfTimeline);\r\n perfTimelineInstances[newInstanceKey] = perfTimeline;\r\n}\r\n\r\n/**\r\n * Returns the list of page measures from all the perf timeline objects being tracked\r\n */\r\nexport function getExperienceMeasures(): Array {\r\n const pageMeasures: Array = [];\r\n Object.keys(perfTimelineInstances).forEach(instanceKey =>\r\n pageMeasures.push(...perfTimelineInstances[instanceKey].getPageMeasures())\r\n );\r\n return pageMeasures;\r\n}\r\n\r\n/**\r\n * Helper to check whether we should track perf timeline for the given experience\r\n * @param experienceName - the name of the experience to check\r\n * @returns {boolean} indicating whether the given experience should be tracked for perf\r\n */\r\nfunction shouldTrackPerfTimeline(experienceName: string): boolean {\r\n if (!config.enablePerfTimeline) {\r\n return false;\r\n }\r\n\r\n // if inclusion list is present, it will supercede the exclusion list,\r\n // so return true early if a match is found here.\r\n const { experiencesForPerf } = config;\r\n if (experiencesForPerf && experiencesForPerf[experienceName]) {\r\n return true;\r\n }\r\n\r\n // check for exclusion list\r\n const { experiencesExcludedForPerf } = config;\r\n if (experiencesExcludedForPerf && experiencesExcludedForPerf[experienceName]) {\r\n return false;\r\n }\r\n\r\n // otherwise the final fallback will be the track all flag.\r\n return config.trackAllExp;\r\n}\r\n\r\n/**\r\n * Gets the instance key to store the experience timeline\r\n * @param perfTimeline - the timeline object from which to get the instance key.\r\n * @returns the cache key that represents the location to which to store the perf timeline.\r\n */\r\nfunction getInstanceKey(perfTimeline: PerfTimeline): string {\r\n const { timelineName, instanceId } = perfTimeline;\r\n return getInstanceKeyCore(timelineName, instanceId);\r\n}\r\n\r\n/**\r\n * Gets the instance key to store the experience timeline\r\n * @param experienceName - the name of the experience\r\n * @param instanceId - the instance ID for the perf timeline.\r\n * @returns the cache key that represents the location to which to store the perf timeline.\r\n */\r\nfunction getInstanceKeyCore(experienceName: string, instanceId: string): string {\r\n return `${experienceName}-${instanceId || \"0\"}`;\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { PerfTimeline } from \"./PerfTimeline\";\r\nimport { logger } from \"../logging\";\r\n\r\nexport interface AppPerfTraceConfig {\r\n /** Flag to indicate what we're tracking all experiences. */\r\n trackAllExp?: boolean;\r\n\r\n /** Top-level flag to enable perf timeline features. */\r\n enablePerfTimeline?: boolean;\r\n\r\n /**\r\n * In case we're excluding specific experiences from tracking. Useful when\r\n * we want to track all experiences, except for a few noisy ones, for example.\r\n */\r\n experiencesForPerf?: { [key: string]: boolean };\r\n\r\n /**\r\n * In case we're excluding specific experiences from tracking. Useful when\r\n * we want to track all experiences, except for a few noisy ones, for example.\r\n */\r\n experiencesExcludedForPerf?: { [key: string]: boolean };\r\n\r\n /**\r\n * Flag to enable performance marks in the F12 timeline.\r\n */\r\n addPerformanceMarks?: boolean;\r\n\r\n /**\r\n * Flag to enable adding the page measurements to the _pageTimings object.\r\n */\r\n addPageTimings?: boolean;\r\n\r\n /**\r\n * Swtich to determine if we will upload the trace or not using the telemetry\r\n * API.\r\n */\r\n uploadTrace?: boolean;\r\n\r\n /** Specify interval after TTVR at when to start the app trace calculation & upload process */\r\n uploadTraceDelay?: number;\r\n\r\n /** The sampling rate at which we are going to collect this data from users */\r\n sampleRate?: number;\r\n\r\n /** The minimum ttvr for which we are going to send the collected data up */\r\n minimumTTVR?: number;\r\n}\r\n\r\n/**\r\n * Parses app perf diagnostic configuration from the given URL.\r\n * @param locationHref the value of window.location.href form which to parse options.\r\n */\r\nexport function tryParseAppTraceConfig(locationHref: string): Partial {\r\n try {\r\n const searchParams = (new URL(locationHref)).searchParams;\r\n const expPerfQsp = searchParams.get(\"expPerf\");\r\n\r\n // if we were explicitly asked to skip everything, return early with\r\n // explicitly set disabled flag so this override will supercede everything.\r\n const expPerfSkipQsp = searchParams.get(\"expPerfSkip\");\r\n if (expPerfSkipQsp == \"all\") {\r\n return {\r\n enablePerfTimeline: false\r\n };\r\n }\r\n\r\n // If nothing explicit was requested, return early with empty config,\r\n // so any config level overrides can continue to get applied.\r\n if (!expPerfSkipQsp && !expPerfQsp) {\r\n return {};\r\n }\r\n\r\n const parsedConfig: Partial = {\r\n enablePerfTimeline: true,\r\n\r\n // since we know that someone is trying to collect data via QSPs,\r\n // we explicitly set few properties so that we override any base config values.\r\n uploadTrace: false,\r\n sampleRate: 1,\r\n minimumTTVR: 0\r\n };\r\n\r\n if (expPerfQsp === \"all\") {\r\n\r\n parsedConfig.trackAllExp = true;\r\n parsedConfig.experiencesExcludedForPerf = {};\r\n\r\n } else if (expPerfQsp) {\r\n\r\n // If an explicit experience name list was specified, ,convert it to a boolean map\r\n // for efficient lookup so that we can create or avoid creation of the timeline object\r\n // for whatever experience needs instrumentation.\r\n const experiencesForPerf = parsedConfig.experiencesForPerf = {};\r\n expPerfQsp.split(\",\").forEach(expName =>\r\n experiencesForPerf[expName] = true\r\n );\r\n }\r\n\r\n // Parse explicit exclusions from perf timeline\r\n if (expPerfSkipQsp) {\r\n const experiencesExcludedForPerf = parsedConfig.experiencesExcludedForPerf = {};\r\n expPerfSkipQsp.split(\",\").forEach(expName =>\r\n experiencesExcludedForPerf[expName] = true\r\n );\r\n }\r\n\r\n if (searchParams.get(\"expPerfMarks\") === \"true\") {\r\n parsedConfig.addPerformanceMarks = true;\r\n }\r\n\r\n if (searchParams.get(\"expPerfTimings\") === \"true\") {\r\n parsedConfig.addPageTimings = true;\r\n }\r\n\r\n return parsedConfig;\r\n\r\n } catch (error) {\r\n\r\n logger.logError(\"Error parsing URL for detecting experience diagnostic switches: \" + error);\r\n return {};\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/// Adds functions events.bind and events.unbind that bind and unbind events\r\n\r\nexport default {\r\n bind: bindEvent,\r\n unbind: unbindEvent\r\n};\r\n\r\nfunction bindEvent(element, type, handler) {\r\n if (element.addEventListener) {\r\n element.addEventListener(type, handler, false);\r\n }\r\n}\r\n\r\nfunction unbindEvent(element, type, handler) {\r\n if (element.removeEventListener) {\r\n element.removeEventListener(type, handler, false);\r\n }\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n// /**\r\n// * Provides common XSS escaping implementations.\r\n// * @returns {Escape}\r\n// */\r\n// regex that looks for all the various dangerous HTML characters that we want to escape.\r\n// every character in this match MUST have a corresponding map entry in sequenceValues,\r\n// or it will be removed from the string we are escaping.\r\nconst sequenceTokens = /[\"&'/<>]/g;\r\n\r\n// mapping object from the character we want to replace to the escape sequence for it.\r\n// make sure that every character in the above regex is represented with an escape\r\n// sequence in this object.\r\nconst sequenceValues = {\r\n \"\\\"\": \""\",\r\n \"&\": \"&\",\r\n \"'\": \"'\",\r\n \"/\": \"/\",\r\n \"<\": \"<\",\r\n \">\": \">\"\r\n};\r\n\r\nexport default {\r\n url: encodeURI,\r\n urlPart: encodeURIComponent,\r\n html: escapeHtml\r\n};\r\n\r\n/**\r\n * Encodes a text string as a valid Uniform Resource Identifier (URI)\r\n * @param {string} text - A value representing an encoded URI.\r\n * @return {string}\r\n */\r\nfunction encodeURI(text) {\r\n // be sure to use a NON-STRICT comparison here so we get both null AND undefined.\r\n // will ALWAYS return a string; empty string if passed null or undefined.\r\n return (text != null && encodeURI(text)) || \"\";\r\n}\r\n\r\n/**\r\n * Encodes a text string as a valid component of a Uniform Resource Identifier (URI).\r\n * @param {string} text - A value representing an encoded URI component.\r\n * @returns {string}\r\n */\r\nfunction encodeURIComponent(text) {\r\n // be sure to use a NON-STRICT comparison here so we get both null AND undefined.\r\n // will ALWAYS return a string; empty string if passed null or undefined.\r\n // @ts-ignore\r\n return (text != null && window.encodeURIComponent(text)) || \"\";\r\n}\r\n\r\n/**\r\n * Encodes a text string as a valid html, by mapping object from the character we want to replace to the escape sequence for it.\r\n * @param {string} text - The text\r\n * @returns {string}\r\n */\r\nfunction escapeHtml(text) {\r\n // make sure text is a string (string concate with an empty string forces the type),\r\n // and then run a regex that finds all the characters we want to escape, and passes\r\n // each character to a function expression that looks up the appropriate replacement\r\n // sequence from an object map (key = character to replace, value = escaped sequence).\r\n // be sure to use a NON-STRICT comparison here so we get both null AND undefined.\r\n // will ALWAYS return a string; empty string if passed null or undefined.\r\n return (text != null && (\"\" + text).replace(sequenceTokens, function (ch) {\r\n return sequenceValues[ch] || \"\";\r\n })) || \"\";\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n// /**\r\n// * The navigatio module\r\n// * @param {Escape} escape - The escape.\r\n// * @param {Document} document - The document.\r\n// * @returns {Navigation}\r\n// */\r\nimport escape from \"./escape\";\r\n\r\n/** @type {Navigation} - The navigation object. */\r\nconst navigation = {\r\n getUrl: function(relativeUrl) {\r\n if (navigation.filter) {\r\n // @ts-ignore\r\n return navigation.filter(relativeUrl);\r\n }\r\n\r\n return relativeUrl;\r\n },\r\n navigate: function (url, replace) {\r\n if (navigation.filter) {\r\n // @ts-ignore\r\n url = navigation.filter(url);\r\n }\r\n if (replace) {\r\n location.replace(url);\r\n } else {\r\n location.href = url;\r\n }\r\n },\r\n getHostName: getHostName,\r\n parseUrl: parseUrl,\r\n isLocal: function (url) {\r\n const hostname = getHostName(url);\r\n return !hostname || (location.hostname == hostname);\r\n },\r\n getParams: getParams,\r\n getParamsFromUrl: function (url, supportMultiple?, decodeComponents?) {\r\n const queryString = url.split(\"?\")[1];\r\n return getParams(queryString, supportMultiple, decodeComponents);\r\n },\r\n // merge query string parameters with a set of new parameters. This does not support duplicate keys\r\n mergeQueryStringParams: function (url, newParams) {\r\n if (newParams) {\r\n const urlParts = url.split(\"?\");\r\n let params;\r\n if (urlParts[1]) {\r\n // get the existing parameters, then merge in the\r\n // new ones, overwriting any values that previously existed.\r\n params = getParams(urlParts[1], false, true);\r\n for (const param in newParams) {\r\n params[param] = newParams[param];\r\n }\r\n } else {\r\n // no existing parameters, so just use the new ones directly\r\n params = newParams;\r\n }\r\n\r\n // now rebuild the url from the parameters\r\n url = urlParts[0];\r\n let separator = \"?\";\r\n for (const param in params) {\r\n if (params[param]) {\r\n url += separator + escape.urlPart(param) + \"=\" + escape.urlPart(params[param]);\r\n } else {\r\n url += separator + escape.urlPart(param);\r\n }\r\n separator = \"&\";\r\n }\r\n }\r\n\r\n return url;\r\n },\r\n filter: null\r\n};\r\n\r\nexport default navigation;\r\n\r\nfunction getParams(queryString, supportMultiple?, decodeComponents?) {\r\n const decodeURIComponentAndPlusSign = function (val) {\r\n val = val.replace(/\\+/g, \" \");\r\n val = decodeURIComponent(val);\r\n return val;\r\n };\r\n\r\n const params = {};\r\n if (queryString) {\r\n // remove hash part.\r\n queryString = queryString.split(\"#\")[0];\r\n const queryArray = queryString.split(\"&\");\r\n for (let ndx = 0; ndx < queryArray.length; ndx++) {\r\n const parts = queryArray[ndx].split(\"=\");\r\n let key = parts[0];\r\n let value = parts[1];\r\n\r\n if (decodeComponents) {\r\n key = decodeURIComponentAndPlusSign(key);\r\n if (value) {\r\n value = decodeURIComponentAndPlusSign(value);\r\n }\r\n }\r\n\r\n if (supportMultiple) {\r\n if (!params[key]) {\r\n params[key] = [];\r\n }\r\n\r\n params[key].push(value);\r\n } else {\r\n params[key] = value;\r\n }\r\n }\r\n }\r\n\r\n return params;\r\n}\r\n\r\n/**\r\n * Parse the given URL.\r\n * For example, \"http://example.com:3000/pathname/?search=test#hash\" returns:\r\n * {\r\n * protocol: \"http:\",\r\n * host: \"example.com:3000\",\r\n * hostName: \"example.com\",\r\n * port: \"3000\",\r\n * path: \"/pathname/\",\r\n * hash: \"#hash\",\r\n * query: \"?search=test\",\r\n * origin: \"http://example.com:3000\"\r\n * }\r\n * @param {string} url\r\n * @returns {{ protocol: string, host: string, hostName: string, port: string, path: string, hash: string, query: string, origin: string }}\r\n */\r\nfunction parseUrl(url) {\r\n const anchor = document.createElement(\"a\");\r\n anchor.href = url;\r\n\r\n return {\r\n protocol: anchor.protocol,\r\n host: anchor.host,\r\n hostName: anchor.hostname,\r\n port: anchor.port,\r\n path: anchor.pathname,\r\n hash: anchor.hash,\r\n query: anchor.search,\r\n origin: anchor.origin\r\n };\r\n}\r\n\r\nfunction getHostName(url) {\r\n return parseUrl(url).hostName;\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n// Provides Tracking helper methods unique to the NTP and DHP pages.\r\n//\r\n// Need to add OCID to all links that go to the MSN page.\r\n// Also need to add the OCID, CCID and TDUID values to all links that launch the store.\r\n//\r\n// Provide method to modify trackInfo data prior to TrackPage call usage.\r\n\r\nimport { getLocationHost } from \"@msnews/isomorphic-util\";\r\nimport pageInstance from \"./pageInstance\";\r\nimport { trackInfo } from \"./trackInfo\";\r\n\r\nconst displayOptionsHelper = {};\r\nconst browserAccess = {};\r\n\r\nconst locationHost = getLocationHost();\r\nconst domainParts = locationHost ? locationHost.split(\".\").reverse() : [];\r\nconst hostDomain = domainParts.length > 1 ? domainParts[1] + \".\" + domainParts[0] : locationHost; // handle an internal address\r\nconst windowsStoreHost = \"ms-windows-store\";\r\nconst domainMatchPattern = /[a-z][a-z0-9+\\-.]*:\\/\\/([a-z0-9\\-._~%!$&'()*+,;=]+@)?([a-z0-9\\-._~%]+|\\[[a-z0-9\\-._~%!$&'()*+,;=:]+\\])/i;\r\nconst ocidMatchPattern = /[&?]ocid=([^&]+)/i;\r\nconst ccidMatchPattern = /[&?]ccid=([^&]+)/i;\r\nconst classIdentifierForHlTrackingInApps = \".hltxt\";\r\n\r\n// The following values will not change during the life of the page.\r\n// @ts-ignore\r\nlet msnOcid = trackInfo.sitePage.msnocid || \"\";\r\n// @ts-ignore\r\nlet storeOcid = trackInfo.sitePage.storeocid || \"\";\r\n\r\nfunction addOcidToHref(tHref, target, event) {\r\n /// Adds OCID value to MSN URLs and to Store URLs\r\n /// The href found in track.js\r\n /// The DOM element being tracked.\r\n /// The event.\r\n\r\n // MSN OCID is only applied on NTP and DHP pages.\r\n if (!tHref || !target) {\r\n return;\r\n }\r\n\r\n // in case sitePage was not filled when this resolved, get and save the msnocid and storeocid values.\r\n if (!msnOcid) {\r\n // @ts-ignore\r\n msnOcid = trackInfo.sitePage.msnocid;\r\n }\r\n\r\n if (!storeOcid) {\r\n // @ts-ignore\r\n storeOcid = trackInfo.sitePage.storeocid;\r\n }\r\n\r\n // For the store (Prime and ServiceUI), we need to test the scheme - URL portion before \"://\".\r\n const endOfScheme = tHref.indexOf(\"://\");\r\n const locationOfStore = tHref.indexOf(windowsStoreHost);\r\n const isStoreUrl = endOfScheme > 0 && locationOfStore >= 0 && locationOfStore < endOfScheme;\r\n\r\n // Need to account for ocid and ccid being of mixed case. e.g. parameters.ocid returns null if the\r\n // param is \"Ocid\".\r\n const ocidMatch = tHref.match(ocidMatchPattern);\r\n const ccidMatch = tHref.match(ccidMatchPattern);\r\n\r\n // Fix 1764836. Ad links (e.g. EMS Ads) already contain their own ocid (not ours) on the URL. We need to make sure to keep their ocid value\r\n // and add the ccid value. Some Ads use uppercase OCID parameter.\r\n // NOTE: JS doesn't have negative lookback so selecting values directly doesn't work. Using [1]\r\n // to read the second match which will be the value.\r\n const ocidOnUrl = ocidMatch && ocidMatch[1];\r\n const ccidOnUrl = ccidMatch && ccidMatch[1];\r\n let emsOnUrl;\r\n\r\n if (ocidOnUrl && ccidOnUrl) {\r\n // If this is an EMS Ad it will already have the ocid and ccid values. We need to add our other values.\r\n let initStoreUrl = tHref;\r\n const emsMatch = tHref.match(/[&?]ocid=(ems\\.)/i);\r\n emsOnUrl = emsMatch && emsMatch[1];\r\n\r\n // See if we are an EMS link and do not have emsadid on the URL. If already have one do not add another.\r\n if (emsOnUrl && !initStoreUrl.match(/[=_]emsadid\\./i)) {\r\n initStoreUrl = addCcidToStoreUrl(initStoreUrl.replace(ccidMatchPattern, \"\"), ccidMatch[1]);\r\n }\r\n\r\n // This has already been modified.\r\n return;\r\n }\r\n\r\n const hashIndex = tHref.indexOf(\"#\");\r\n let hashValue = \"\";\r\n\r\n // Do not modify Prime page URLs - maintain this as only DHP/NTP code.\r\n // If we do not have an ocid on the url.\r\n if (!ocidOnUrl) {\r\n // TopSites uses an href of \"#\" to indicate it should not be a navigation, but it gets changed to the NTP Url with # at the end.\r\n // Some Prime websites also use the # character and we should not affect them, so make this check within the ServiceUI IFDEF.\r\n if (hashIndex === tHref.length - 1) {\r\n return;\r\n }\r\n\r\n // We need the msnocid value if this is the NTP/DHP page.\r\n if (msnOcid) {\r\n const domainMatch = domainMatchPattern.exec(tHref);\r\n const hrefHostName = domainMatch && domainMatch[2];\r\n let linkUrl = tHref;\r\n if (hrefHostName) {\r\n const isMsnDomain = hrefHostName.indexOf(hostDomain) >= 0;\r\n if (isMsnDomain) {\r\n if (hashIndex >= 0) {\r\n hashValue = tHref.substring(hashIndex, tHref.length);\r\n linkUrl = tHref.substring(0, hashIndex);\r\n }\r\n\r\n linkUrl += linkUrl.indexOf(\"?\") > 0 ? \"&\" : \"?\";\r\n linkUrl = linkUrl + \"ocid=\" + msnOcid;\r\n target.href = linkUrl + (hashValue || \"\");\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // If we don't have the store OCID value, just return. We can't add the ocid if we don't have the correct value.\r\n if (!ocidOnUrl && !storeOcid) {\r\n return;\r\n }\r\n\r\n if (isStoreUrl) {\r\n // Bug 1763626 - clicking Top Sites Open App link multiple times added OCID/CCID multiple times.\r\n // If there was a hash at the end of the URL, we used to add the parameters after the hash, and it was\r\n // not recognized as parameters by navigation.getParamsFromUrl(tHref).\r\n // If there is a hash value, save it, and re-add it at the end.\r\n if (hashIndex >= 0) {\r\n hashValue = tHref.substring(hashIndex, tHref.length);\r\n tHref = tHref.substring(0, hashIndex);\r\n }\r\n\r\n // We know that the store URL will have a query string parameter (the ID or PFN).\r\n // If the url already has an ocid on it, don't add another.\r\n let storeUrl = tHref;\r\n if (!ocidOnUrl) {\r\n storeUrl += \"&ocid=\" + storeOcid;\r\n }\r\n\r\n storeUrl = addCcidToStoreUrl(storeUrl, emsOnUrl);\r\n target.href = storeUrl + hashValue;\r\n }\r\n}\r\n\r\nfunction addCcidToStoreUrl(tHref, emsAdId) {\r\n /// Adds Ccid to the Store url.\r\n /// The href found in track.js\r\n /// The optional value for the emsid ccid value\r\n /// Returns Store Url with ccid.\r\n\r\n const ccidMatch = tHref.match(ccidMatchPattern);\r\n const ccidOnUrl = ccidMatch && ccidMatch[1];\r\n const hashIndex = tHref.indexOf(\"#\");\r\n let hashValue = \"\";\r\n\r\n // If the url already has an ccid on it, don't add another, but make sure it has MUID and RID. EMS Ads already have a ocid and ccid values.\r\n if (!ccidOnUrl) {\r\n // TODO: refactor this code , so we don't have to calculate index at different places\r\n if (hashIndex >= 0) {\r\n hashValue = tHref.substring(hashIndex, tHref.length);\r\n tHref = tHref.substring(0, hashIndex);\r\n }\r\n\r\n // We know that the store URL will have a query string parameter (the ID or PFN).\r\n // If the url already has an ocid on it, don't add another.\r\n let storeUrl = tHref;\r\n storeUrl += \"&ccid=\";\r\n\r\n const ccidData = [];\r\n\r\n // If sent an emsAdId value add it first.\r\n if (emsAdId) {\r\n ccidData.push(\"emsadid.\" + emsAdId);\r\n }\r\n\r\n // @ts-ignore\r\n const webig = pageInstance.getRequestId() || trackInfo.sitePage.requestId;\r\n if (webig) {\r\n ccidData.push(\"webig.\" + webig);\r\n }\r\n\r\n const muid = trackInfo.client.clientId();\r\n if (muid) {\r\n ccidData.push(\"muid.\" + muid);\r\n }\r\n\r\n return storeUrl + ccidData.join(\"_\") + hashValue;\r\n }\r\n\r\n return tHref;\r\n}\r\n\r\nfunction modifyValuesForTrackPage() {\r\n /// Modifies specific trackInfo values for TrackPage, to identify user settings.\r\n /// Returns whether we need to prevent the ComScore beacon from firing.\r\n const noContent = \"_NoContent\";\r\n const topSites = \"-topsites\";\r\n const oneBox = \"-onebox\";\r\n\r\n // If we need to prevent sending a beacon, return true.\r\n let preventComscore = false;\r\n\r\n if (trackInfo.sitePage) {\r\n const hasContent = true;\r\n // when there is rive content\r\n\r\n if (!hasContent) {\r\n // We cannot send a ComScore beacon if we have no content.\r\n preventComscore = true;\r\n }\r\n }\r\n\r\n // add personalization specific properties if they haven't been created before.\r\n if (trackInfo.client\r\n // @ts-ignore\r\n && !trackInfo.client.personalization) {\r\n // add any Spartan DHP/NTP specific personalization related properties to this object\r\n let props;\r\n\r\n // write out the value only if we have any properties set in the property bag\r\n if (props) {\r\n // @ts-ignore\r\n trackInfo.client.personalization = JSON.stringify(props);\r\n }\r\n }\r\n\r\n return { preventComscore: preventComscore };\r\n}\r\n\r\nfunction attachTaglineClickHandler(element) {\r\n /// Modify \"hl\" before the trackEvent.\r\n /// The element (or jquery collection) to process.\r\n /// We do not want to require jquery.\r\n\r\n // If this code becomes needed for Prime, change the IFDEF. Also using a switch if this is a perf issue.\r\n}\r\n\r\nfunction getActionResult(action, isSuccessful) {\r\n /// \r\n /// Gets the action result name based on the action and the fact whether it was successfully executed or not\r\n /// \r\n /// \r\n /// The name of the action (e.g. sethome, addfavorite,...)\r\n /// \r\n /// \r\n /// Flag to indicate whether the action was successfully executed or not\r\n /// \r\n return isSuccessful ? action + \"_succeeded\" : action + \"_failed\";\r\n}\r\n\r\nexport default {\r\n addOcidToHref: addOcidToHref,\r\n modifyValuesForTrackPage: modifyValuesForTrackPage,\r\n attachTaglineClickHandler: attachTaglineClickHandler,\r\n addCcidToStoreUrl: addCcidToStoreUrl,\r\n getActionResult: getActionResult\r\n};\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\n// Implements multiple parallel tracking engine which gets its tracking\r\n// url from the specific implementation using defined functions.\r\n//\r\n// if called multiple times during page interaction (representing significant content\r\n// update), the trackPage method will also publish a \"pageView\" mediator event that third-party\r\n// tracking code can hook to register their refresh page-view beacons.\r\n\r\n/// \r\n/// This function implements multiple parallel tracking engine which gets its tracking\r\n/// url from the specific implementation using defined functions.\r\n/// \r\n/// The tracking info JS library\r\n/// The JS library that provides functionality similar to jQuery's extend function\r\n/// The dom manipulation JS library\r\n/// The JS library for getting cookies\r\n/// The JS library for setting cookies\r\n/// The events object\r\n/// The window object\r\n/// The document object.\r\n/// The mediator JS library\r\n/// Provides access to current navigation URL and helpers\r\n/// Collection of data passed from the server\r\n/// The page instance object\r\n/// Cross browser support for json parse\r\n/// The tracking helper object\r\n/// The storage object\r\n/// The performance marker object\r\n/// The telemetry constant object\r\n/// The JS library that provides functionality for callback when page is revealed. Used for preload scenarios.\r\n/// The datatypes for telemetry library\r\n/// The webStorage object\r\n/// The track object\r\n\r\nimport { Severity, logger } from \"@msnews/diagnostics\";\r\nimport { canUseDOM, getLocationHost, getLocationHref, getLocationProtocol } from \"@msnews/isomorphic-util\";\r\n\r\nimport dom from \"./dom\";\r\nimport events from \"./events\";\r\nimport extend from \"./extend\";\r\nimport mediator from \"./mediator\";\r\nimport navigation from \"./navigation\";\r\nimport pageInstance from \"./pageInstance\";\r\nimport { sessionStorage } from \"@msnews/core\";\r\nimport telemetryConstants from \"./telemetryconstants\";\r\nimport { telemetryDataTypes } from \"./telemetryDataTypes\";\r\nimport { telemetryReadyCallback } from \"./telemetryReadyCallback\";\r\nimport { trackInfo } from \"./trackInfo\";\r\nimport trackingHelper from \"./trackingHelper\";\r\n\r\n// shortcuts to dom functions\r\nconst attr = dom.attr;\r\nconst domName = dom.name;\r\nconst getParent = dom.parent;\r\nconst getChildren = dom.children;\r\nconst recipients = [];\r\nlet refreshPageLoad;\r\nconst doc = canUseDOM() ? document : null;\r\nconst errorLogInterval = 5 * 60 * 1000;\r\n\r\nlet lastClickedTarget = null;\r\n\r\n// After 500 ms, lastClickedTarget will be set as null.\r\nconst clickTargetResetTimeoutInMs = 500;\r\n\r\n// Token to find the custom event token passed on the url. the format would be like this - http://www.msn.com/#tevt=click_nonnav;tobjid=....;...\r\nconst tEvtTag = \"tevt=\";\r\n\r\n// If there are more than one tags(name value pair), then the name value pair should be separated with ;\r\nconst regExpEventName = /#tevt=([A-Za-z0-9]+_[A-Za-z0-9]+)(;*)/g;\r\n\r\n// an array of ids that represent what we've already sent to the service as updates\r\n// TODO (rohjain): Remove this cache as we don't need two caches one in trackInfo and another here to maintain for impression updates cache.\r\nlet impressionCache = [];\r\n\r\n// error report interval in milliseconds (5 min = 5 * 60 * 1000)\r\nconst errorReportInterval = telemetryConstants.logSamplingRate || 5 * 60 * 1000;\r\n\r\nmediator.sub(\"logerror\", logErrorEvent);\r\n\r\nfunction trackAll(implementationMethod) {\r\n /// After createReport returns a report, this method fires tracking call for each registered tracking system\r\n\r\n let implementation;\r\n\r\n const parameters = canUseDOM() ? navigation.getParamsFromUrl(getLocationHref()) : {};\r\n\r\n // loop through each implementation\r\n for (let ndx = 0; ndx < recipients.length; ndx++) {\r\n implementation = recipients[ndx];\r\n const defOpts = implementation.defaultOpts;\r\n if (defOpts.disableOnAutoRefresh) {\r\n const names = defOpts.disableOnAutoRefresh.split(\";\");\r\n let isInList = false;\r\n for (let i = 0; i < names.length; i++) {\r\n if (names[i] == defOpts.id) {\r\n isInList = true;\r\n break;\r\n }\r\n }\r\n\r\n // @ts-ignore\r\n if (isInList && parameters.AR) {\r\n // In case this was generated early, reset to false so the next pageTrack() call will generate the beacon.\r\n defOpts.isGeneratedEarly = false;\r\n continue;\r\n }\r\n }\r\n\r\n if (defOpts.isGeneratedEarly) {\r\n // Don't generate this time, but reset to false so the next pageTrack() call will generate the beacon.\r\n defOpts.isGeneratedEarly = false;\r\n } else if (implementation) {\r\n // TODO: (nubenja) Remove samplingRate everywhere (implementation.samplingRate)\r\n const result = implementation[implementationMethod]();\r\n }\r\n }\r\n\r\n}\r\n\r\nfunction logErrorEvent(errorObject) {\r\n // /// Track error event\r\n // ///\r\n // /// errorObject- defined in errorCategory\r\n // ///\r\n // if (!errorObject)\r\n // {\r\n // return;\r\n // }\r\n // var cacheKey = errorObject.errId + errorObject.errSource;\r\n\r\n // var lastErrorTime = storage.getItem(cacheKey, true);\r\n // var currentTime = new Date().getTime();\r\n // if (lastErrorTime && (currentTime - lastErrorTime) <= errorLogInterval)\r\n // {\r\n // return;\r\n // }\r\n\r\n // trackInfo.event = {\r\n // type: \"app_error\"\r\n // };\r\n // trackInfo.report = errorObject;\r\n // logDiag(JSON.stringify(errorObject), true);\r\n\r\n // trackAll(\"getEventTrackingUrl\");\r\n // storage.setItem(cacheKey, currentTime, true);\r\n}\r\n\r\nfunction depthFirstChildAttribute(element, attributeName, skipElement?) {\r\n /// \r\n /// find the first attribute from the element in the depthFirst manner\r\n /// skips the element if it is specified in elementName\r\n /// \r\n const children = getChildren(element) || [];\r\n let ndx = 0;\r\n let altValue;\r\n\r\n attributeName = attributeName || \"alt\";\r\n\r\n for (; ndx < children.length; ndx++) {\r\n altValue = attr(children[ndx], attributeName)\r\n || depthFirstChildAttribute(children[ndx], attributeName, skipElement);\r\n\r\n if (altValue && !(skipElement == children[ndx].localName)) {\r\n return altValue;\r\n }\r\n }\r\n}\r\n\r\nfunction findCMValue(element) {\r\n /// \r\n /// create a list of id values separated with '>'\r\n /// walking from generic to specific\r\n /// ending at (not including) wrapper on the generic side\r\n /// \r\n if (element) {\r\n const parent = getParent(element);\r\n const curId = attr(parent, \"id\");\r\n if (trackInfo.wrapperId == curId) {\r\n return;\r\n }\r\n const previousCM = findCMValue(parent);\r\n if (previousCM && curId) {\r\n return [previousCM, curId].join(trackInfo.cmSeparator);\r\n }\r\n return curId || previousCM;\r\n }\r\n}\r\n\r\nfunction getContentElementIndex(element) {\r\n /// \r\n /// count number of trackable elements upto and including the\r\n /// element passed into the function\r\n /// stop at the first parent with an id\r\n /// do not use anything with a new id\r\n /// indexing all elements with the same CM value\r\n /// indexing starts at 1\r\n /// 0 means there is no parent with an id\r\n /// \r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n const parent = getParent(element);\r\n let count = 0;\r\n let ndx = 0;\r\n\r\n // go up first, incase there is no parent id so we don't have to waste a lot of work\r\n if (!attr(parent, \"id\")) {\r\n count = getContentElementIndex(parent);\r\n if (count) {\r\n // by default getContentElementIndex will count the element passed in\r\n // subtract 1 to offset this\r\n count--;\r\n } else {\r\n // only stays 0 if there is no parent or no parent with an id\r\n // bubble up the expected 0 value\r\n return 0;\r\n }\r\n }\r\n\r\n const children = getChildren(parent) || [];\r\n for (; ndx < children.length; ndx++) {\r\n if (children[ndx] == element) {\r\n count++;\r\n break;\r\n }\r\n count += countAllTrackableLinks(children[ndx]);\r\n }\r\n\r\n return count;\r\n}\r\n\r\nfunction countAllTrackableLinks(element) {\r\n /// \r\n /// returns count of all trackable elements[contains href and notrack]\r\n /// \r\n let count = 0;\r\n let ndx = 0;\r\n let children;\r\n if (element && !attr(element, \"id\")) {\r\n children = getChildren(element) || [];\r\n if (attr(element, \"href\") && !attr(element, trackInfo.notrack)) {\r\n count++;\r\n }\r\n for (; ndx < children.length; ndx++) {\r\n count += countAllTrackableLinks(children[ndx]);\r\n }\r\n }\r\n return count;\r\n}\r\n\r\nfunction getChildByTargetElement(element, tagName, depth) {\r\n /// \r\n /// Finds the first child element within the provided element with the desired tagName.\r\n /// Goes through all the children/grandchildren to the provided depth (1 = children, 2 = first grandchildren)\r\n /// \r\n /// Element with tagName if found, null if not\r\n if (depth && element && tagName) {\r\n if (element.tagName == tagName) {\r\n // They passed in an element with the correct tagName value.\r\n return element;\r\n }\r\n\r\n const children = getChildren(element) || [];\r\n for (let ndx = 0, dataLength = children.length; ndx < dataLength; ndx++) {\r\n if (children[ndx].tagName == tagName) {\r\n return children[ndx];\r\n } else {\r\n const subChild = getChildByTargetElement(children[ndx], tagName, depth - 1);\r\n if (subChild) {\r\n return subChild;\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction sendSinglePageViewBeacon(beaconId) {\r\n /// \r\n /// This method generates a single beacon without firing any other beacons.\r\n /// Do NOT call track.trackPage() if this is used, or you will generate two of these beacons.\r\n /// \r\n /// \r\n /// The single beacon to generate.\r\n /// \r\n\r\n if (beaconId) {\r\n // loop through each implementation\r\n let implementation;\r\n const implementationMethod = \"getPageViewTrackingUrl\";\r\n let ndx = 0;\r\n\r\n for (; ndx < recipients.length; ndx++) {\r\n implementation = recipients[ndx];\r\n if (implementation.defaultOpts.id === beaconId) {\r\n const result = implementation[implementationMethod]();\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction sendPageViewCandidate() {\r\n /// \r\n /// This fires a request for a page view candidate file required by ComScore.\r\n /// Call this directly, if you are generating new page views which include ComScore and\r\n /// need to identify it as a page view candidate.\r\n /// \r\n\r\n const pvUrl = getLocationProtocol() + \"//\" + getLocationHost(); + \"/pv.xml\";\r\n if (!trackInfo.shouldFireTelemetry()) {\r\n return;\r\n }\r\n\r\n const beaconData = {\r\n url: pvUrl,\r\n requestType: telemetryConstants.GET,\r\n trackingType: telemetryConstants.Comscore\r\n };\r\n\r\n mediator.pub(telemetryConstants.FireTelemetry, beaconData);\r\n}\r\n\r\nfunction trackAdEvent(adParams) {\r\n /// \r\n /// This method tracks the adimpr_update event.\r\n /// Call getEventTrackingUrl to fire the tracking call.\r\n /// \r\n /// \r\n /// adParams- defined as follows\r\n /// adParams = {\r\n /// dst: dapStartTime,\r\n /// den: dapEndTime,\r\n /// id: placementId,\r\n /// pg: pageGroup\r\n /// w: width,\r\n /// h: height,\r\n /// status: status,\r\n /// anAd: appNexusId\r\n /// seqid: sequenceId\r\n /// sdk: sdk\r\n /// fen: finalEndTime\r\n /// };\r\n /// \r\n\r\n trackInfo.event = { type: \"adimpr_update\" };\r\n const adWidth = parseInt(adParams.w);\r\n const adHeight = parseInt(adParams.h);\r\n\r\n // @ts-ignore\r\n trackInfo.report =\r\n {\r\n /// \r\n /// This creates a tracking report.\r\n /// It does NOT send the report, nor does it perform any navigation.\r\n /// \r\n /// \r\n /// Report object that is structured as follows:\r\n /// report = {\r\n /// dst: dapStartTime,\r\n /// den: dapEndTime,\r\n /// id: placementId,\r\n /// pg: pageGroup\r\n /// w: width,\r\n /// h: height,\r\n /// status: status,\r\n /// anAd: appNexusId\r\n /// seqid: sequenceId\r\n /// sdk: sdk\r\n /// fen: finalEndTime\r\n /// };\r\n /// \r\n\r\n dst: adParams.dst,\r\n den: adParams.den,\r\n id: adParams.id,\r\n pg: adParams.pg,\r\n w: isNaN(adWidth) ? 0 : adWidth,\r\n h: isNaN(adHeight) ? 0 : adHeight,\r\n status: adParams.status,\r\n anAd: adParams.anAd,\r\n seqid: adParams.seqid,\r\n sdk: adParams.sdk,\r\n fen: adParams.fen\r\n };\r\n\r\n trackAll(\"getEventTrackingUrl\");\r\n}\r\n\r\nfunction trackAppErrorEventInternal(errorParams) {\r\n /// \r\n /// This method tracks the app_error event.\r\n /// Call getEventTrackingUrl to fire\r\n /// the tracking call.\r\n /// \r\n /// \r\n /// errorParams- defined in errorCategory\r\n /// \r\n\r\n if (!errorParams) {\r\n return;\r\n }\r\n\r\n // Check if it should fire app error.\r\n if (!trackInfo.shouldFireAppError()) {\r\n return;\r\n }\r\n\r\n if (!errorParams.severity) {\r\n errorParams.severity = Severity.Alert;\r\n }\r\n\r\n setAppErrorTrackInfo(errorParams);\r\n trackAll(\"getEventTrackingUrl\");\r\n}\r\n\r\nfunction setAppErrorTrackInfo(errorParams) {\r\n /// Sets the track information object\r\n\r\n const errEventObj = { type: \"app_error\" };\r\n trackInfo.event = errEventObj;\r\n\r\n // @ts-ignore\r\n const report = trackInfo.report =\r\n {\r\n /// \r\n /// This creates a tracking report.\r\n /// It does NOT send the report, nor does it perform any navigation.\r\n ///\r\n /// \r\n /// \r\n /// Error Id - defined in errorCategory\r\n /// \r\n /// \r\n /// Error Message - defined in errorCategory\r\n /// \r\n /// \r\n /// Error Source - defined in errorCategory\r\n /// \r\n // \r\n /// severity - defined in AppErrorTracker.ts\r\n /// \r\n /// \r\n /// Pb (property bag) - defined in AppErrorTracker.ts\r\n /// \r\n /// \r\n /// Report object that is structured as follows:\r\n /// report = {\r\n /// errId: ErrorId,\r\n /// errMsg: ErrorMsg,\r\n /// errMsg: ErrorSource,\r\n /// severity: severity,\r\n /// pb: pb\r\n /// };\r\n /// \r\n errId: errorParams.id,\r\n errMsg: errorParams.message,\r\n errSource: errorParams.source,\r\n severity: errorParams.severity,\r\n pb: errorParams.pb\r\n };\r\n\r\n logDiag(JSON.stringify(report), true);\r\n}\r\n\r\nfunction trackFormSubmitEvent(event, element, destination, headline, module, index, campaign) {\r\n /// \r\n /// This method tracks form events.\r\n /// This methods try to gets the search term.\r\n /// Call trackEvent\r\n /// \r\n /// \r\n /// Event object\r\n /// \r\n /// \r\n /// element that was clicked or target of the event. Passed to createReport.\r\n /// \r\n /// \r\n /// destination url to use instead of computing. Passed to createReport.\r\n /// \r\n /// \r\n /// headline to use instead of computing. Passed to createReport.\r\n ///\t\r\n ///\t\r\n /// content module string to be used instead of computing. Passed to createReport.\r\n /// \r\n /// \r\n /// content index string to be used instead of computing. Passed to createReport.\r\n /// \r\n /// \r\n /// campaign id to be used instead of computing. Passed to createReport.\r\n /// \r\n\r\n /// Helper functions.\r\n function isSearchForm() {\r\n const searchFormId = \"srchfrm\";\r\n if (!element && event) {\r\n element = event.target;\r\n }\r\n\r\n // if element not does not exist or is non trackable\r\n if (!element || attr(element, trackInfo.notrack)) {\r\n return false;\r\n }\r\n return element.id === searchFormId;\r\n }\r\n\r\n function getSearchTerm() {\r\n const searchBox = document.getElementById(\"q\");\r\n if (searchBox) {\r\n // @ts-ignore\r\n return searchBox.value;\r\n }\r\n }\r\n // End of helper functions\r\n\r\n if (isSearchForm()) {\r\n headline = getSearchTerm();\r\n }\r\n\r\n trackEvent(event, element, destination, headline, module, index, campaign);\r\n}\r\n\r\nfunction trackEvent(event, element?, destination?, headline?, module?, index?, campaign?, contentAction?) {\r\n /// \r\n /// This method tracks events.\r\n /// This methods loops through each implementation,\r\n /// Call getEventTrackingUrl and call that url to fire\r\n /// the tracking call.\r\n /// \r\n /// \r\n /// Event object\r\n /// \r\n /// \r\n /// element that was clicked or target of the event. Passed to createReport.\r\n /// \r\n /// \r\n /// destination url to use instead of computing. Passed to createReport.\r\n /// \r\n /// \r\n /// headline to use instead of computing. Passed to createReport.\r\n /// \r\n /// \r\n /// content module string to be used instead of computing. Passed to createReport.\r\n /// \r\n /// \r\n /// content index string to be used instead of computing. Passed to createReport.\r\n /// \r\n /// \r\n /// campaign id to be used instead of computing. Passed to createReport.\r\n /// \r\n /// contentAction enum of the event. Please see list of enum values under telemetryDatatypes.js\r\n /// \r\n\r\n // if element is not passed in, try to get it from event\r\n if (!element && event) {\r\n element = event.target;\r\n }\r\n\r\n // if element not does not exist or is non trackable\r\n if (!element || attr(element, trackInfo.notrack)) {\r\n return;\r\n }\r\n\r\n // for bug 1114449\r\n // element is a jQuery object, not an element\r\n // break out element from jQuery wrapper\r\n if (element.jquery) {\r\n element = element[0];\r\n }\r\n\r\n // Make sure that the trackInfo event does not have a jQuery object for target, or AOP will fail to find a parent.\r\n event = event || {};\r\n // Mark the event that it is already custom handled.\r\n event.customHandled = true;\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Read-only\r\n // event.target = element;\r\n trackInfo.event = event;\r\n let elemHref = element.href || attr(element, \"href\");\r\n\r\n // Temp. Fix: element.getAttribute(attr, 2) returns # only for non-navigational url. Need to get destination with full domain path.\r\n if (elemHref == \"#\") {\r\n elemHref = element[\"href\"];\r\n }\r\n\r\n // find destination value if needed\r\n destination = destination || attr(element, trackInfo.piiurl) ||\r\n elemHref || attr(element, \"action\") || \"\";\r\n\r\n // TODO: clean up how we find a headline. Depending on the markup of the page leads to bugs when we update it.\r\n // find headline value if needed, one may have been passed in through a data-hl attribute.\r\n const dataHlValue = attr(element, \"data-hl\") || \"\";\r\n if (!headline && !dataHlValue) {\r\n // See if there is an h4 or h3 element, no more than 2 deep.\r\n const headlineElement = getChildByTargetElement(element, \"H4\", 2) || getChildByTargetElement(element, \"H3\", 2);\r\n if (headlineElement) {\r\n headline = dom.text(headlineElement);\r\n }\r\n }\r\n\r\n if (typeof headline !== \"string\") {\r\n headline = dataHlValue || attr(element, trackInfo.piitxt) ||\r\n (\"FORM\" == domName(element)\r\n ? trackInfo.defaultFormHeadline\r\n : attr(element, \"title\") || depthFirstChildAttribute(element, \"title\", \"img\") || dom.text(element) || attr(element, \"alt\") || depthFirstChildAttribute(element, \"alt\") || \"\");\r\n }\r\n\r\n // Added condition to call trim function only if it is defined, it fails for browsers <=IE8\r\n if (headline.trim != undefined) {\r\n headline = headline.trim();\r\n }\r\n\r\n // find module value if needed\r\n module = module || findCMValue(element) || trackInfo.defaultModule;\r\n\r\n // find index value if needed\r\n index = index || (attr(element, \"id\") ? 1 : getContentElementIndex(element));\r\n\r\n // find campaign value if needed\r\n // Added backward compatibility for Old GT1 implementation. If \"GT1-xxxx\" not defined in class, look it into href attribute.\r\n // Example when GT1 defined in a class: class=\"GT1-12345\"\r\n // Example when GT1 is a part of href attribute: href=\"www.msn.com?GT1=12345\"\r\n const clsGT1 = element.className || attr(element, \"class\");\r\n campaign = campaign || (/GT1-(\\d+)\\b/i.exec(clsGT1) ? RegExp.$1 : \"\") ||\r\n (/[?&]GT1=(\\d+)\\b/i.exec(elemHref) ? RegExp.$1 : \"\");\r\n\r\n let moduleInfo = \"\";\r\n let nameLineage = \"\";\r\n let ordinalLineage = \"\";\r\n const lineageDelimiter = trackInfo.cmSeparator;\r\n let eventTime;\r\n let actionType;\r\n let behaviorType;\r\n let moduleInfoJson;\r\n\r\n if (event && (event.type == trackInfo.eventTypes.click || event.type == trackInfo.eventTypes.nonNavClckEvt || event.type == trackInfo.eventTypes.submit || event.type == trackInfo.eventTypes.contextmenu || event.type == trackInfo.eventTypes.mouseenter)) {\r\n const moduleInfoHeader = \"data-m\";\r\n moduleInfo = attr(element, moduleInfoHeader);\r\n if (!moduleInfo) {\r\n const parent = getParent(element);\r\n moduleInfo = parent ? attr(parent, moduleInfoHeader) : \"\";\r\n }\r\n\r\n try {\r\n // TODO: (nubenja) Remove this once data-m.y is deprecated\r\n // Convertion from telemetryType (e1.y) to telemetryContentType (e1.ct) and telemetryContentAction (ca)\r\n moduleInfoJson = JSON.parse(moduleInfo);\r\n if (moduleInfoJson && moduleInfoJson.y && !moduleInfoJson.ct) {\r\n const ct = telemetryDataTypes.getTelemetryContentType(moduleInfoJson.y);\r\n\r\n if (ct) {\r\n moduleInfoJson.ct = ct;\r\n }\r\n }\r\n\r\n // Map behavior\r\n if (moduleInfoJson && moduleInfoJson.y) {\r\n behaviorType = telemetryDataTypes.getTelemetryBehavior(moduleInfoJson.y);\r\n }\r\n\r\n // Map action type\r\n if (event.originalEvent === trackInfo.eventTypes.contextmenu) {\r\n actionType = telemetryDataTypes.TelemetryActionType.RightClick;\r\n behaviorType = telemetryDataTypes.TelemetryBehaviorType.ContextMenu;\r\n } else if (event.type === trackInfo.eventTypes.click) {\r\n actionType = telemetryDataTypes.TelemetryActionType.Click;\r\n behaviorType = telemetryDataTypes.TelemetryBehaviorType.Navigate;\r\n } else if (event.type === trackInfo.eventTypes.nonNavClckEvt) {\r\n actionType = telemetryDataTypes.TelemetryActionType.Click;\r\n } else if (event.type === trackInfo.eventTypes.submit) {\r\n actionType = telemetryDataTypes.TelemetryActionType.Submit;\r\n }\r\n } catch (e) {\r\n moduleInfoJson = {};\r\n }\r\n\r\n const elementTelemetryLineage = getLineage(element);\r\n if (elementTelemetryLineage) {\r\n nameLineage = elementTelemetryLineage.nameLineage.reverse().join(lineageDelimiter);\r\n ordinalLineage = elementTelemetryLineage.ordinalLineage.reverse().join(lineageDelimiter);\r\n }\r\n\r\n // assign the time if event already has time field. (added from trackClickEvents)\r\n eventTime = event.time;\r\n }\r\n\r\n // check if destination url is bing or not. if it is, remove all telemetry sensitive data\r\n const duHostname = navigation.getHostName(destination);\r\n if (duHostname && duHostname.toLowerCase().indexOf(\"bing.com\") > -1) {\r\n // filter out privacy sensitive params\r\n destination = track.filterUrlParams(destination, [\"q\", \"pq\"]);\r\n\r\n // remove headline\r\n headline = \"\";\r\n }\r\n\r\n // @ts-ignore\r\n trackInfo.report =\r\n {\r\n /// \r\n /// This method creates a tracking report.\r\n /// It does NOT send the report, nor does it perform any navigation.\r\n ///\r\n /// \r\n /// \r\n /// element that was clicked or target of the event.\r\n /// \r\n /// \r\n /// destination url to use instead of computing.\r\n /// \r\n /// \r\n /// headline to use instead of computing.\r\n /// \r\n /// \r\n /// content module string to be used instead of computing.\r\n /// \r\n /// \r\n /// content index string to be used instead of computing.\r\n /// \r\n /// \r\n /// campaign id to be used instead of computing.\r\n /// \r\n /// \r\n /// data-m section to be used instead of computing.\r\n /// \r\n /// \r\n /// Report object that is structured as follows:\r\n /// report = {\r\n /// destinationUrl: destination,\r\n /// campaignId: '',\r\n /// contentElement: index,\r\n /// contentModule: module,\r\n /// headline: headline,\r\n /// sourceIndex,\r\n /// nodeName,\r\n /// module: moduleInfo,\r\n /// nLineage: nameLineage,\r\n /// oLineage: ordinalLineage,\r\n /// timeToInteract: trackInfo.timeToInteract()\r\n /// };\r\n /// \r\n destinationUrl: destination,\r\n headline: headline,\r\n contentModule: module,\r\n contentElement: index,\r\n campaignId: campaign,\r\n module: moduleInfoJson,\r\n sourceIndex: element.sourceIndex || \"\",\r\n nodeName: element.nodeName || \"\",\r\n nLineage: nameLineage,\r\n oLineage: ordinalLineage,\r\n timeToInteract: trackInfo.timeToInteract(eventTime),\r\n actionType: actionType,\r\n behaviorType: behaviorType\r\n };\r\n\r\n trackAll(\"getEventTrackingUrl\");\r\n}\r\n\r\nfunction trackPageInternal(overrideParams, persistOverriddenParams) {\r\n /// \r\n /// Fires page view call for each registered tracking system at the top of tag\r\n /// \r\n /// override client side params\r\n /// if true overridden params are persisted for other events otherwise false. Default is false\r\n\r\n const perfMarkerTrackingPageViewStart = \"TimeToTrackingPageViewStart\";\r\n const perfMarkerTrackingPageViewEnd = \"TimeToTrackingPageViewEnd\";\r\n\r\n // initialize params and assign default as false.\r\n persistOverriddenParams = !!persistOverriddenParams;\r\n\r\n // clear event in case trackPage is called more than once on a page\r\n delete trackInfo.event;\r\n\r\n // Clear the request id to generate the new request id\r\n // @ts-ignore\r\n delete trackInfo.userStatic.requestId;\r\n\r\n // Clear the override Client Params for every track page request and reassign the parameter.\r\n delete trackInfo.overrideClientParams;\r\n\r\n const paramPageName = \"pg.n\";\r\n const pageName = overrideParams && overrideParams[paramPageName];\r\n if (pageName) {\r\n const paramPageType = \"pg.t\";\r\n const telemetryPageName = telemetryDataTypes.getTelemetryPageInfo(pageName);\r\n if (telemetryPageName) {\r\n overrideParams[paramPageName] = telemetryPageName.PageName;\r\n\r\n const pageType = overrideParams[paramPageType];\r\n const telemetryPageType = telemetryDataTypes.validateTelemetryDataType(telemetryDataTypes.TelemetryPageType, pageType);\r\n if (telemetryPageType) {\r\n overrideParams[paramPageType] = telemetryPageType;\r\n } else if (telemetryPageName.PageType === telemetryDataTypes.TelemetryPageType.Unspecified) {\r\n // @ts-ignore\r\n overrideParams[paramPageType] = trackInfo.sitePage.page_type;\r\n } else {\r\n overrideParams[paramPageType] = telemetryPageName.PageType;\r\n }\r\n }\r\n }\r\n\r\n // This is needed since in prime we include this so that\r\n // telemetry team knows that the page should be ignored due to\r\n // automatic refresh\r\n const signInRefreshedPageKey = \"sign-in-refreshed-page\";\r\n if (sessionStorage.getItem(signInRefreshedPageKey)) {\r\n sessionStorage.removeItem(signInRefreshedPageKey);\r\n (overrideParams = overrideParams || {}).ar = 1;\r\n }\r\n\r\n trackInfo.overrideClientParams = overrideParams;\r\n trackInfo.persistOverriddenParams = persistOverriddenParams;\r\n\r\n const result = trackingHelper.modifyValuesForTrackPage();\r\n if (result && result.preventComscore) {\r\n track.preventBeacon(telemetryConstants.Comscore);\r\n }\r\n\r\n trackAll(\"getPageViewTrackingUrl\");\r\n\r\n // the refreshPageLoad value is undefined (false) at first page load request, and\r\n // we then set it to one (true).\r\n // subsequent calls to trackPage will then publish the mediator pageView event\r\n // that code can listen for to know when the page is generating a \"page view\"\r\n // due to significant content change.\r\n if (refreshPageLoad) {\r\n mediator.pub(\"pageView\");\r\n } else {\r\n refreshPageLoad = 1;\r\n mediator.pub(\"pageViewOnLoad\");\r\n }\r\n\r\n // Clear the override Client Params once the trackPage is fired so that other events don't use the overridden params from memory.\r\n delete trackInfo.overrideClientParams;\r\n}\r\n\r\nexport const track =\r\n{\r\n onContextMenu: onContextMenu,\r\n onClick: onClick,\r\n\r\n trackEvent: trackEvent,\r\n trackFormSubmitEvent: trackFormSubmitEvent,\r\n trackAdEvent: trackAdEvent,\r\n trackVideoEvent: trackVideoEvent,\r\n trackFeedbackEvent: trackFeedbackEvent,\r\n\r\n createEvent: createEvt,\r\n sendPageViewCandidate: sendPageViewCandidate,\r\n sendSinglePageViewBeacon: sendSinglePageViewBeacon,\r\n\r\n clearImpressionCache: clearImpressionCache,\r\n\r\n getFeedbackTrackingParams: getFeedbackTrackingParams,\r\n filterUrlParams: filterUrlParams,\r\n\r\n trackAppErrorEvent: function (errorParams) {\r\n /// \r\n /// This method tracks the app_error event.\r\n /// Call getEventTrackingUrl to fire the tracking call\r\n /// \r\n /// \r\n /// errorParams- defined in errorCategory\r\n /// \r\n\r\n telemetryReadyCallback((): void => {\r\n trackAppErrorEventInternal(errorParams);\r\n });\r\n },\r\n\r\n trackPartialImpression: function (elem, visibilityCheck, mechanism, topLevelContainerType) {\r\n /// The track partial impression will fire an impression update for the element graph.\r\n /// The element graph that contains the data-m attributes\r\n /// Conduct the visibility checking. By default is false\r\n /// Mechanism to capture for impression update. By Default is load. Mechanism load is used whenever the module is loaded and rendered to the user.\r\n /// TopLevelContainer type for impression update\r\n\r\n telemetryReadyCallback((): void => {\r\n trackPartialImpressionInternal(elem, visibilityCheck, mechanism, topLevelContainerType);\r\n });\r\n },\r\n\r\n trackPage: function (overrideParams?, persistOverriddenParams?) {\r\n /// \r\n /// Fires page view call for each registered tracking system at the top of tag\r\n /// \r\n /// override client side params\r\n /// if true overridden params are persisted for other events otherwise false. Default is false\r\n\r\n telemetryReadyCallback((): void => {\r\n trackPageInternal(overrideParams, persistOverriddenParams);\r\n });\r\n },\r\n\r\n trackThirdPartyUpdate: function () {\r\n /// \r\n /// Fires the third party tracking call for Ajax page refresh scenarios like slide refresh.\r\n /// \r\n\r\n mediator.pub(\"thirdPartyTrackingUpdate\");\r\n },\r\n\r\n register: function (...args: any[]) {\r\n /// \r\n /// Registers an implementation with the main Tracking function\r\n /// \r\n /// \r\n /// Implementation of tracking,\r\n /// must implement the following functions\r\n /// GetEventTrackingUrl(trackInfo) - generates url for tracking\r\n /// \r\n /// \r\n /// Implementation of tracking\r\n /// \r\n /// \r\n /// Returns the current object to enable cascading calls\r\n /// \r\n let ndx = 0;\r\n let trackingImplementation;\r\n\r\n // use double-parens to tell the validator that yes, we INTEND this to be an assignment (=)\r\n // and not a mistyped equals (==) conditional test.\r\n while ((trackingImplementation = args[ndx++])) {\r\n if (isNaN(trackingImplementation.samplingRate)) {\r\n trackingImplementation.samplingRate = 99;\r\n }\r\n recipients.push(trackingImplementation);\r\n }\r\n },\r\n\r\n getCurrentPageRequestId: function () {\r\n /// \r\n /// Utility function to return the current page request Id. Empty value will be returned if this method is called before\r\n /// telemetry initialization.\r\n /// \r\n /// the current page request Id\r\n /// \r\n\r\n // @ts-ignore\r\n return pageInstance.getRequestId() || trackInfo.sitePage.requestId || \"\";\r\n },\r\n\r\n mapTelemetryParams: function (common, commonMap, params, paramsMap) {\r\n /// \r\n /// Utility function to gather all the telemetry Params.\r\n /// \r\n /// \r\n /// Object contains common parameters.\r\n /// \r\n /// \r\n /// Object contains common param to property mapping\r\n /// E.g. map.sitePage:{ a1: \"page_name\"}\r\n /// this will create a querystring a1=\"value of trackInfo.sitePage.page_name\"\r\n /// \r\n /// \r\n /// Object contains custom parameters.\r\n /// \r\n /// \r\n /// Object contains param to property mapping\r\n /// E.g. map.sitePage:{ a1: \"page_name\"}\r\n /// this will create a querystring a1=\"value of trackInfo.sitePage.page_name\"\r\n /// \r\n /// \r\n /// url that will be called to do the tracking\r\n /// \r\n\r\n params = extend({}, common, params);\r\n // Get params from commonMap\r\n paramsMap = extend(true, {}, commonMap, paramsMap);\r\n for (const groupKey in paramsMap) {\r\n const trackInfoGroupKey = trackInfo[groupKey];\r\n if (trackInfoGroupKey) {\r\n const groupValue = paramsMap[groupKey];\r\n for (const key in groupValue) {\r\n // check the override client params first\r\n const clientParams = trackInfo.overrideClientParams;\r\n let value;\r\n if (key && clientParams && clientParams[key] !== undefined) {\r\n value = clientParams[key];\r\n // if persisting overridden params then override trackInfo group key with value from overridden client params.\r\n if (trackInfo.persistOverriddenParams) {\r\n trackInfoGroupKey[groupValue[key]] = value;\r\n }\r\n } else {\r\n value = trackInfoGroupKey[groupValue[key]];\r\n\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n }\r\n\r\n // allow for empty strings but use null or undefined to ignore the parameter entirely\r\n if (value != null) {\r\n params[key] = value;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return params;\r\n },\r\n\r\n extend: function (obj) {\r\n extend(true, trackInfo, obj);\r\n },\r\n\r\n form: function (elem) {\r\n /// \r\n /// Helper function to bind Form elements that are part of element for tracking\r\n /// \r\n\r\n if (!elem || !elem.length) {\r\n elem = [elem];\r\n }\r\n let formElem;\r\n let ndx = 0;\r\n\r\n // use double-parens to tell the validator that yes, we INTEND this to be an assignment (=)\r\n // and not a mistyped equals (==) conditional test.\r\n while ((formElem = elem[ndx++])) {\r\n // if element is a form element and has not attr \"data-customformtrack\", bind the submit to it.\r\n // if the attr \"data-customformtrack\" is included, it is entirely reponsible for firing its own\r\n // tracking beacons\r\n if (\"FORM\" == domName(formElem) && !attr(formElem, \"data-customformtrack\")) {\r\n events.bind(formElem, \"submit\", trackFormSubmitEvent);\r\n }\r\n }\r\n },\r\n\r\n preventBeacon: function (beaconId) {\r\n /// Set the value isGeneratedEarly to prevent the sending of a beacon.\r\n /// The name of the beacon as listed in the markets.config file.\r\n if (beaconId) {\r\n beaconId = beaconId.toLowerCase();\r\n\r\n // loop through each implementation\r\n for (let ndx = 0; ndx < recipients.length; ndx++) {\r\n const defOpts = recipients[ndx].defaultOpts;\r\n if (beaconId === defOpts.id.toLowerCase()) {\r\n defOpts.isGeneratedEarly = true;\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n\r\n trackPageRefresh: function (overrideParams?, persistOverriddenParams?) {\r\n /// \r\n /// Fires page view call for each registered tracking system at the top of tag and resets activity Id.\r\n /// \r\n /// override client side params\r\n /// if true overridden params are persisted for other events otherwise false. Default is false\r\n\r\n // calling pageInstance.updatePageInstance() instead of using mediator\r\n // to eliminate delay rid update when executed via mediator.pub\r\n pageInstance.updatePageInstance();\r\n clearImpressionCache();\r\n trackPageInternal(overrideParams, persistOverriddenParams);\r\n\r\n setTimeout(\r\n () => {\r\n trackPartialImpressionInternal(document.getElementById(\"root\"), true, \"load\", null);\r\n },\r\n 1000);\r\n }\r\n};\r\n\r\n// find's all the children dom elements that have the 'data-m' attribute defined.\r\n// also returns the current element if it meets the criteria.\r\nfunction findTelemetryElements(domElement) {\r\n const elements = [];\r\n\r\n // for modern browsers I can use querySelectorAll to find the child elements.\r\n if (domElement && domElement.querySelectorAll) {\r\n const telemetryChildren = domElement.querySelectorAll(\"[data-m]\");\r\n\r\n // include the root if applicable\r\n if (attr(domElement, \"data-m\")) {\r\n elements.push(domElement);\r\n }\r\n\r\n // do the children\r\n for (let index = 0; index < telemetryChildren.length; index++) {\r\n elements.push(telemetryChildren[index]);\r\n }\r\n }\r\n\r\n // return the elements\r\n return elements;\r\n}\r\n\r\n// a helper function that will parse json contained within attributes\r\nfunction parseDomAttributeJson(element, attributeName) {\r\n const dataAttr = attr(element, attributeName);\r\n if (dataAttr) {\r\n try {\r\n return JSON.parse(dataAttr);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// a helper function to check if an array contains an element.\r\nfunction contains(item, array) {\r\n if (array.indexOf) {\r\n return array.indexOf(item) !== -1;\r\n } else {\r\n // for IE8\r\n for (let i = 0; i < array.length; i++) {\r\n if (array[i] === item) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction trackPartialImpressionInternal(elem, visibilityCheck, mechanism, topLevelContainerType) {\r\n /// The track partial impression will fire an OTF impression update for the element graph.\r\n /// The element graph that contains the data-m attributes\r\n /// Conduct the visibility checking. By default is false\r\n /// Mechanism to capture for impression update. By Default is load\r\n /// TopLevelContainer type for impression update. By Default is load\r\n\r\n const perfMarkerTrackingPartialImprUpdateStart = \"TimeToTrackingPartialImprUpdateStart\";\r\n const perfMarkerTrackingPartialImprUpdateEnd = \"TimeToTrackingPartialImprUpdateEnd\";\r\n\r\n if (elem) {\r\n if (elem.jquery) {\r\n elem = elem[0];\r\n }\r\n\r\n // retrieve the telemetry elements.\r\n const elements = findTelemetryElements(elem);\r\n const formattedModules = [];\r\n\r\n for (let index = 0; index < elements.length; index++) {\r\n const element = elements[index];\r\n if (visibilityCheck && !trackInfo.telemetryTracking.isVisible(element)) {\r\n continue;\r\n }\r\n\r\n const impressionContent = parseDomAttributeJson(element, \"data-m\");\r\n const id = impressionContent ? impressionContent.i : undefined;\r\n\r\n // ensure we haven't already sent the payload\r\n if (id !== undefined && !contains(id, impressionCache)) {\r\n // add it to our cache\r\n impressionCache.push(id);\r\n formattedModules.push(impressionContent);\r\n\r\n // TODO: (nubenja) Remove this once data-m.y is deprecated\r\n // Convertion from telemetryType (data-m.y) to telemetryContentType and telemetryContentAction (data-m.ct/ca)\r\n if (impressionContent.y && !impressionContent.ct) {\r\n const ct = telemetryDataTypes.getTelemetryContentType(impressionContent.y);\r\n\r\n if (ct) {\r\n impressionContent.ct = ct;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const context = {};\r\n if (formattedModules && formattedModules.length > 0) {\r\n // @ts-ignore\r\n context.e = formattedModules;\r\n }\r\n\r\n // fire the telemetry event if we were able to get any impression data.\r\n // @ts-ignore\r\n if (context && context.e && context.e.length > 0) {\r\n const mech = (mechanism) ? mechanism : trackInfo.imprUpdateMechanisms.partial;\r\n trackInfo.telemetryTracking.sendImprUpdateEvent(mech, context, topLevelContainerType);\r\n }\r\n }\r\n}\r\n\r\nfunction clearImpressionCache() {\r\n impressionCache = [];\r\n}\r\n\r\nfunction getEventFromUrl(targetUrl) {\r\n /// \r\n /// Check the Current Url and get the event name from the targetUrl.\r\n /// The URL format for the specifying the event name is - url#tevt=EVENTNAME;OTHER_NAME_VALUE_PAIRS\r\n /// \r\n /// \r\n /// The target Url for the event.\r\n /// \r\n /// event name, if it is specified, else null. \r\n\r\n /*\r\n For input value : \"http://www.bing.com/videos/search?q=&mkt=en-GB#tevt=click_nonnav;\"\r\n The result will be like this-\r\n [#tevt=click_nonnav;,click_nonnav,;]\r\n [0] : \"#tevt=click_nonnav;\",\r\n [1] : \"click_nonnav\",\r\n [2] : \";\",\r\n\r\n The 1st element contains the event name.\r\n */\r\n\r\n // If event name is not found, return null, the original event name will be kept.\r\n const result = new RegExp(regExpEventName).exec(targetUrl);\r\n return (result && result.length && result[1]) || null;\r\n}\r\n\r\nfunction getClickEventFromUrl(targetUrl) {\r\n /// \r\n /// Check the Current Url -\r\n /// Case 1- if the Url format is - baseurl/#, then treat it as nonNav event.\r\n /// Match Domain name.\r\n /// If the Url of current page and target page is same and only # is at the end, then it is not navigating away from the page.\r\n ///\r\n /// Case 2 - the Url format is url#tevt=EVENTNAME;OTHER_NAME_VALUE_PAIRS,\r\n /// extract the event name from the Url. the event name is terminated with ;\r\n /// \r\n /// \r\n /// The target Url for the event.\r\n /// \r\n /// \r\n /// event name; if it is a non nav url and no event name is specified then return the default non nav click event name,\r\n /// otherwise, return the event name specified in the url.\r\n /// \r\n\r\n let evtName = null;\r\n if (targetUrl) {\r\n // if the target url contains tevt=, then this url contains the event name. We will extract the event name from url.\r\n if (targetUrl.indexOf(tEvtTag) == -1) {\r\n // If the Url format is - http://www.msn.com/#, then categorize it as nonnav click.\r\n // Convert the baseurl and currentUrl in lowercase for comparison.\r\n const baseUrl = targetUrl.substring(0, targetUrl.indexOf(\"#\")).toLowerCase();\r\n const curUrl = getLocationHref().toLowerCase();\r\n if (curUrl == baseUrl || curUrl.substring(0, curUrl.indexOf(\"#\")) == baseUrl) {\r\n evtName = trackInfo.eventTypes.nonNavClckEvt;\r\n }\r\n } else {\r\n // extract the event name from url.\r\n evtName = getEventFromUrl(targetUrl);\r\n }\r\n }\r\n // Return null, so that the original event is kept.\r\n return evtName;\r\n}\r\n\r\nfunction createEvt(event, eventName, targetElem) {\r\n /// \r\n /// Creates an event based upon the properties of the base event.\r\n /// \r\n /// \r\n /// This is a an input event parameter. Some basic properties are copied from this param to the the event created.\r\n /// \r\n /// \r\n /// Name of the event to be created.\r\n /// \r\n /// \r\n /// Target element that need to be attached to the event being created in this method.\r\n /// \r\n /// An object is created with base properties from the event passed as param. This object is then returned. \r\n\r\n let evt = null;\r\n\r\n if (doc && doc.createEvent) { // Supported by non-IE based browsers.\r\n evt = doc.createEvent(\"Events\");\r\n evt.initEvent(eventName, false, true, targetElem || window,\r\n 0, 0, 0, 0, 0, false, false, false, false, 0, null);\r\n // @ts-ignore\r\n } else if (doc && doc.createEventObject) { // Supported by IE based browsers.\r\n // @ts-ignore\r\n evt = doc.createEventObject(event);\r\n evt.type = eventName;\r\n }\r\n\r\n if (evt) {\r\n evt.customTarget = targetElem;\r\n\r\n // Store the original event type in a field\r\n evt.originalEvent = event && event.type;\r\n }\r\n\r\n return evt;\r\n}\r\n\r\nfunction preventEventDefault(event) {\r\n /// \r\n /// Cancels the event and prevents from being passed further.\r\n /// \r\n /// \r\n /// Input event parameter that need to be canceled.\r\n /// \r\n if (event.preventDefault) { // For Non IE\r\n event.preventDefault();\r\n } else { // For IE\r\n event.returnValue = false;\r\n }\r\n}\r\n\r\nfunction onContextMenu(event) {\r\n /// \r\n /// onContextMenu Handler\r\n /// we'll only track context menu events if the target is a link (A or AREA)\r\n /// This event is used to keep track of when the context menu opens....\r\n /// Right click does not generate onClick events, so we are tracking context menu on all the form factors.\r\n /// \r\n trackClickEvents(event);\r\n}\r\n\r\nfunction onClick(event) {\r\n /// \r\n /// OnClick Handler\r\n /// we'll only track clicks if the target is a link (A or AREA)\r\n /// AND the mouse button isn't the RIGHT button.\r\n /// MOST browsers think the mouse button value is 2. For those that don't, this\r\n /// might have to be revisited.\r\n /// \r\n if (2 == event.button) {\r\n return;\r\n }\r\n\r\n trackClickEvents(event);\r\n}\r\n\r\n/// \r\n/// Computes the lineage of a particular element, passing back the object containing array of 'n's and array of 'o's on the dom tree.\r\n/// \r\n/// An object containing the array of 'n's and array of 'o's on the dom tree starting with the current element, or an empty array if none are found.\r\nfunction getLineage(element) {\r\n const result: any = {};\r\n const nameLineageArray = [];\r\n const ordinalLineageArray = [];\r\n\r\n while (element) {\r\n const telemetryObject = parseDomAttributeJson(element, \"data-m\");\r\n if (telemetryObject) {\r\n if (telemetryObject.n) {\r\n nameLineageArray.push(telemetryObject.n);\r\n }\r\n\r\n if (telemetryObject.o) {\r\n ordinalLineageArray.push(telemetryObject.o);\r\n }\r\n }\r\n element = getParent(element);\r\n }\r\n\r\n result.nameLineage = nameLineageArray;\r\n result.ordinalLineage = ordinalLineageArray;\r\n return result;\r\n}\r\n\r\nfunction isClickedTwice(currentTarget) {\r\n /// \r\n /// isClickedTwice method\r\n /// Identify if more than one click event happened on the same element in short span of time.\r\n /// \r\n /// Return true if the user click on the same element twice in short span of time, otherwise false.\r\n\r\n // if lastClickedTarget is same as currentTarget means user clicked on same elements twice to be considered as double click.\r\n try {\r\n if (currentTarget && lastClickedTarget && lastClickedTarget === currentTarget) {\r\n return true;\r\n }\r\n lastClickedTarget = currentTarget;\r\n setTimeout(function () {\r\n // Reset 'lastClickedTarget' after a ceratin time period to avoid any kind of unexpected situation.\r\n lastClickedTarget = null;\r\n }, clickTargetResetTimeoutInMs);\r\n } catch (ex) {\r\n lastClickedTarget = null;\r\n return false;\r\n }\r\n return false;\r\n}\r\n\r\nfunction trackClickEvents(event) {\r\n /// \r\n /// trackClickEvents method\r\n /// Tracks all the click events on links.\r\n /// \r\n\r\n // handle error scenarios.\r\n if (!event) {\r\n return;\r\n }\r\n\r\n // If the event or in the originalEvent the developer has set customHandled=true, which means its been already explicitly fired.\r\n // In those cases, don't fire the implicit event.\r\n if (event.customHandled || (event.originalEvent && event.originalEvent.customHandled)) {\r\n return;\r\n }\r\n\r\n // Temp. Hack for Image Map: In IE9, srcElement associated with window.event is not returning correct element.\r\n // Instead of returning a element, it is returning element. element has no href attribute, neither it's parents do have.\r\n // For this reason, Tracking calls are not fired in IE9.\r\n // This hack will check if the event belongs to ImageMap. If so, it will pick activeElement from document and assign it as target/customTarget.\r\n try {\r\n // Passing the time parameter inside event object with timestamp as a value.\r\n event.time = trackInfo.getCurrentTime();\r\n if (event.customTarget && event.customTarget.useMap) {\r\n event.customTarget = event.customTarget.document.activeElement;\r\n event.target = event.customTarget;\r\n }\r\n } catch (ex) { }\r\n\r\n // we assume that an element with an href (and or an ) is the click-tracking element.\r\n // we also want to target \r\n {this.renderPopOver()}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Renders the pop over menu\r\n * @method\r\n * @returns {JSX.Element} The pop over menu JSX Element\r\n */\r\n private renderPopOver(): JSX.Element {\r\n const { menuOpened, dropDownLocation } = this.state;\r\n const enabled = menuOpened && dropDownLocation && !isNil(dropDownLocation.left) && !isNil(dropDownLocation.top);\r\n\r\n return (\r\n \r\n
\r\n \r\n {this.renderContextMenu()}\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Renders the context menu items\r\n * @method\r\n * @returns {JSX.Element} The pcontext menu items JSX Element\r\n */\r\n private renderContextMenu(): JSX.Element[] {\r\n const { menuItems } = this.props;\r\n const { contextMenuItem, contextMenuItem_contentRegion, contextMenuItem_image } = this.props.managedClasses;\r\n return menuItems.map(itemProps => (\r\n | React.KeyboardEvent): void => {\r\n e.preventDefault();\r\n this.onMenuItemClick(e, itemProps.onSelect);\r\n }}>\r\n
\r\n {itemProps.icon && (\r\n )}\r\n {itemProps.text}\r\n
\r\n \r\n ));\r\n }\r\n\r\n /**\r\n * Handles unfocusing the Context Menu or Esc key down\r\n * @method\r\n */\r\n private handleUnfocus = (e: Event) => {\r\n const buttonContainerContainsNode = (node: Node) => !this.containerRef.current || this.containerRef.current.contains(node);\r\n // Can't put ref on the PopOver react element, so we attach to a ref div and check its immediate parent\r\n // Must check parent because focus goes to PopOver, which is outside menuRef (otherwise menu closes when you try tab to it)\r\n const menuPopoverContainsNode = (node: Node) => !this.menuRef.current || this.menuRef.current.parentNode.contains(node);\r\n\r\n if (e.target && !buttonContainerContainsNode(e.target as Node) && !menuPopoverContainsNode(e.target as Node)) {\r\n this.closeMenu();\r\n } else if (e.type === \"keydown\") {\r\n const keyEvent = e as KeyboardEvent;\r\n if (keyEvent.keyCode === keyCodeEscape) {\r\n e.preventDefault();\r\n this.closeMenu();\r\n this.buttonRef.current.focus();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Handles closing the menu\r\n * @method\r\n */\r\n private closeMenu = (): void => {\r\n this.setState({ menuOpened: false });\r\n };\r\n\r\n /**\r\n * Handles the click on the menuitems\r\n * @method\r\n */\r\n private onMenuItemClick(event: any, onSelectCallback: (e) => void): void {\r\n if (onSelectCallback) {\r\n onSelectCallback(event);\r\n }\r\n this.closeMenu();\r\n }\r\n\r\n /**\r\n * Handles the click on the settings button to show the context menu\r\n * @method\r\n */\r\n private onSettingClick(e: any): void {\r\n const posOffset = this.props.positionOffset;\r\n const offsetX = posOffset ? posOffset.x : 0;\r\n const offsetY = posOffset ? posOffset.y : 0;\r\n\r\n let dropDownLocation = {};\r\n if (e.target) {\r\n const { top, left, width } = e.target.getBoundingClientRect();\r\n dropDownLocation = { top: top + offsetY + window.scrollY, left: left + offsetX + window.scrollX, offset: width };\r\n }\r\n this.setState({ menuOpened: !this.state.menuOpened, dropDownLocation });\r\n }\r\n}\r\n\r\nexport { CardContextMenu as CardContextMenu };\r\nexport * from \"./CardContextMenu.props\";","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { applyLocalizedProperty, toPx } from \"@microsoft/fast-jss-utilities\";\r\nimport {\r\n highContrastSelected,\r\n neutralFillActive,\r\n neutralFillHover,\r\n neutralFillRest,\r\n neutralOutlineActive,\r\n neutralOutlineHover,\r\n neutralOutlineRest\r\n}\r\n from \"@microsoft/fast-components-styles-msft\";\r\n\r\nimport { CardContextMenuClassNameContract } from \"./CardContextMenu.classnames\";\r\nimport { ComponentStyles } from \"@microsoft/fast-jss-manager\";\r\nimport { DesignSystem } from \"@microsoft/fast-components-styles-msft\";\r\n\r\nexport const CardContextMenuStyles: ComponentStyles = (config: DesignSystem) => {\r\n return {\r\n settingButton: {\r\n height: \"100%\",\r\n width: \"100%\",\r\n border: \"none\",\r\n background: \"none\",\r\n cursor: \"pointer\",\r\n outline: \"none\",\r\n padding: \"0\",\r\n\r\n \"&:focus\": {\r\n border: `${toPx(config.outlineWidth)} dotted`,\r\n \"border-color\": neutralOutlineActive\r\n }\r\n },\r\n settingButtonIcon: {\r\n fill: neutralOutlineHover,\r\n height: \"24px\",\r\n width: \"24px\"\r\n },\r\n contextMenuItem: {\r\n display: \"flex\",\r\n cursor: \"pointer\",\r\n border: `${toPx(config.outlineWidth)} solid transparent`, // Reserve space for hover border\r\n height: \"30px\",\r\n margin: \"0\",\r\n padding: \"0px 12px 0px\",\r\n \"user-select\": \"none\",\r\n \"&:focus, &:hover\": {\r\n background: neutralFillHover,\r\n \"border-color\": neutralOutlineHover,\r\n ...highContrastSelected\r\n },\r\n \"&:active\": {\r\n background: neutralFillActive\r\n }\r\n },\r\n contextMenuItem_contentRegion: {\r\n display: \"flex\",\r\n \"align-items\": \"center\"\r\n },\r\n contextMenuItem_image: {\r\n [applyLocalizedProperty(\"margin-right\", \"margin-left\", config.direction)]: \"8px\"\r\n },\r\n contextMenu: {\r\n \"box-shadow\": \"none\",\r\n padding: \"0\",\r\n width: \"145px\",\r\n background: neutralFillRest,\r\n border: `${toPx(config.outlineWidth)} solid`,\r\n \"border-color\": neutralOutlineRest\r\n }\r\n };\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport {\r\n CardContextMenu as BaseCardContextMenu,\r\n CardContextMenuHandledProps as BaseCardContextMenuHandledProps,\r\n CardContextMenuProps as BaseCardContextMenuProps,\r\n CardContextMenuUnHandledProps,\r\n CardContextMenusCssClassesManagedClasses\r\n} from \"./CardContextMenu\";\r\nimport manageJss, { ManagedJSSProps } from \"@microsoft/fast-jss-manager-react\";\r\n\r\nimport { CardContextMenuClassNameContract } from \"./CardContextMenu.classnames\";\r\nimport { CardContextMenuItem } from \"./CardContextMenu.props\";\r\nimport { CardContextMenuStyles } from \"./CardContextMenu.style\";\r\nimport { DesignSystem } from \"@microsoft/fast-components-styles-msft\";\r\nimport { Subtract } from \"utility-types\";\r\n\r\n/*\r\n * The type returned by manageJss type is very complicated so we'll let the\r\n * compiler infer the type instead of re-declaring just for the package export\r\n */\r\nconst CardContextMenu = manageJss(CardContextMenuStyles)(BaseCardContextMenu);\r\ntype CardContextMenu = InstanceType;\r\n\r\ntype CardContextMenuHandledProps = Subtract;\r\ntype CardContextMenuProps = ManagedJSSProps<\r\n BaseCardContextMenuProps,\r\n CardContextMenuClassNameContract,\r\n DesignSystem\r\n>;\r\n\r\nexport {\r\n CardContextMenu,\r\n CardContextMenuClassNameContract,\r\n CardContextMenuHandledProps,\r\n CardContextMenuProps,\r\n CardContextMenuUnHandledProps,\r\n CardContextMenuItem\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport {\r\n DesignSystem,\r\n applyTypeRampConfig,\r\n highContrastSelector,\r\n neutralForegroundRest\r\n} from \"@microsoft/fast-components-styles-msft\";\r\n\r\nimport { ButtonClassNameContract } from \"@microsoft/fast-components-class-name-contracts-msft\";\r\nimport { ComponentStyles } from \"@microsoft/fast-jss-manager\";\r\nimport { SocialMediaIconClassNameContract } from \"./SocialMediaIcon.classnames\";\r\nimport { toPx } from \"@microsoft/fast-jss-utilities\";\r\n\r\n/** Value for border radius on icons */\r\nconst borderRadiusIcons = 2;\r\n\r\n/** icon height */\r\nconst iconHeight = 40;\r\n\r\n/** icon width */\r\nconst iconWidth = 40;\r\n\r\n/** label width */\r\nconst labelWidth = 60;\r\n\r\n/**\r\n * The JSS stylesheet for the social media icon\r\n * @type {ComponentStyles}\r\n * @param {DesignSystem} config - The design system configuration interface\r\n */\r\nexport const SocialMediaIconStyles: ComponentStyles = (config: DesignSystem) => {\r\n return {\r\n iconContainer: {\r\n \"border-radius\": toPx(borderRadiusIcons),\r\n height: toPx(iconHeight),\r\n width: toPx(iconWidth),\r\n \"line-height\": toPx(iconHeight),\r\n margin: \"0 auto\",\r\n position: \"relative\",\r\n \"&:hover\": {\r\n cursor: \"pointer\"\r\n }\r\n },\r\n iconImage: {\r\n bottom: \"0\",\r\n left: \"0\",\r\n margin: \"auto\",\r\n position: \"absolute\",\r\n right: \"0\",\r\n top: \"0\"\r\n },\r\n iconLabel: {\r\n \"&&\": {\r\n ...applyTypeRampConfig(\"t8\"),\r\n \"line-height\": \"20px\",\r\n \"text-align\": \"center\",\r\n \"margin-top\": \"4px\",\r\n padding: \"3px 0\",\r\n width: toPx(labelWidth),\r\n \"&:hover\": {\r\n cursor: \"pointer\"\r\n },\r\n [highContrastSelector]: {\r\n background: \"ButtonFace\",\r\n color: \"LinkText\"\r\n }\r\n }\r\n }\r\n };\r\n};\r\n\r\n/** style to override button existing style */\r\nexport const ButtonStyle: Partial> = (config: DesignSystem) => {\r\n return {\r\n button__justified: {\r\n \"&&\": {\r\n \"background-color\": \"transparent\",\r\n \"text-decoration\": \"none\",\r\n height: \"inherit\",\r\n \"min-width\": \"unset\",\r\n width: \"fit-content\",\r\n \"&:focus\": {\r\n outline: `1px solid ${neutralForegroundRest(config)}`\r\n },\r\n \"& span\": {\r\n width: \"inherit\"\r\n }\r\n }\r\n }\r\n };\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { Button, ButtonAppearance, Label } from \"@microsoft/fast-components-react-msft\";\r\nimport {\r\n SharingHelper,\r\n SocialMediaDefaultConfig,\r\n SocialMediaItemConfigAttributes,\r\n SocialMediaTarget\r\n} from \"@msnews/views-helpers\";\r\nimport {\r\n SocialMediaIconHandledProps,\r\n SocialMediaIconProps,\r\n SocialMediaIconUnHandledProps\r\n} from \"./SocialMediaIcon.props\";\r\n\r\nimport { ButtonStyle } from \"./SocialMediaIcon.styles\";\r\nimport Foundation from \"@microsoft/fast-components-foundation-react\";\r\nimport { HandledPropsKeys } from \"@msnews/core\";\r\nimport { Icon } from \"@msnews/icon\";\r\nimport React from \"react\";\r\nimport { merge } from \"lodash-es\";\r\n\r\n/**\r\n * Social medial icon component\r\n * @class - The Social Media Icon class\r\n * @classdesc - Renders the visual Social Media Icon used to share links without major social media solutions.\r\n * @export\r\n * @default\r\n */\r\nexport class SocialMediaIcon extends Foundation {\r\n /**\r\n * Social media icon handled props contract\r\n * @protected\r\n * @type { HandledPropsKeys }\r\n */\r\n protected handledProps: HandledPropsKeys = {\r\n managedClasses: undefined,\r\n socialMedia: undefined,\r\n contentUrl: undefined,\r\n contentTitle: undefined,\r\n emailBody: undefined,\r\n hideLabel: undefined,\r\n socialMediaItemConfigOverride: undefined\r\n };\r\n\r\n /**\r\n * Render social media icon\r\n *\r\n * @public\r\n * @return {JSX.Element}\r\n */\r\n public render(): JSX.Element {\r\n const { managedClasses, contentUrl, contentTitle, emailBody, hideLabel, socialMedia, socialMediaItemConfigOverride } = this.props;\r\n const itemConfig = merge({}, SocialMediaDefaultConfig[socialMedia], socialMediaItemConfigOverride);\r\n if (!itemConfig) {\r\n return null;\r\n }\r\n\r\n const shareUrl = SharingHelper.getSocialMediaShareUrl(socialMedia, contentUrl, contentTitle, emailBody, itemConfig.ocid, itemConfig.url);\r\n if (!shareUrl) {\r\n return null;\r\n }\r\n\r\n const target = itemConfig.target.toString();\r\n const targetRelatedAtributes = target === SocialMediaTarget.newWindow ?\r\n { onClick: (event: any) => this.onClickNewWindow(event, shareUrl, itemConfig.newWindowOptions, itemConfig.newWindowTelemetryCall), role: \"button\", \"data-customhandled\": true } :\r\n { href: shareUrl, target: target };\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handles custom on click when targeting new windows\r\n * @public\r\n * @return {JSX.Element}\r\n */\r\n private onClickNewWindow = (event: any, shareUrl: string, newWindowOptions: any, newWindowTelemetryCall: (event: any) => void): void => {\r\n SharingHelper.openNewWindow(event, shareUrl, newWindowOptions);\r\n if (newWindowTelemetryCall) {\r\n newWindowTelemetryCall(event);\r\n }\r\n };\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport {\r\n SocialMediaIconHandledProps as BaseComponentHandledProps,\r\n SocialMediaIconProps as BaseComponentProps,\r\n SocialMediaIconManagedClasses,\r\n SocialMediaIconUnHandledProps\r\n} from \"./SocialMediaIcon.props\";\r\nimport manageJss, { ManagedJSSProps } from \"@microsoft/fast-jss-manager-react\";\r\n\r\nimport { SocialMediaIcon as BaseComponent } from \"./SocialMediaIcon\";\r\nimport { DesignSystem } from \"@microsoft/fast-components-styles-msft\";\r\nimport { SocialMediaIconClassNameContract } from \"./SocialMediaIcon.classnames\";\r\nimport { SocialMediaIconStyles } from \"./SocialMediaIcon.styles\";\r\nimport { Subtract } from \"utility-types\";\r\n\r\n/*\r\n * The type returned by manageJss type is very complicated so we'll let the\r\n * compiler infer the type instead of re-declaring just for the package export\r\n */\r\nconst SocialMediaIcon = manageJss(SocialMediaIconStyles)(BaseComponent);\r\ntype SocialMediaIcon = InstanceType;\r\n\r\n// Create a valid JSS managed interface that doesn't require managed classes which are provided by the manageJSS HOC\r\ntype SocialMediaIconHandledProps = Subtract;\r\n\r\n// Create type for manageJSS HOC styled instance we are exporting\r\ntype SocialMediaIconProps = ManagedJSSProps;\r\n\r\n// Export everything a user might need from this index file\r\nexport {\r\n SocialMediaIcon,\r\n SocialMediaIconProps,\r\n SocialMediaIconClassNameContract,\r\n SocialMediaIconHandledProps,\r\n SocialMediaIconUnHandledProps\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Shallow compare of two objects.\r\n * Compares reference and primitive values of both object's key-value pairs\r\n *\r\n * @param a\r\n * @param b\r\n * @returns {bool} result of comparison.\r\n */\r\nexport function ShallowCompare(a: Object, b: Object): boolean {\r\n for (const key in a) {\r\n if (!(key in b) || a[key] !== b[key]) {\r\n return false;\r\n }\r\n }\r\n\r\n for (const key in b) {\r\n if (!(key in a) || a[key] !== b[key]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { CSSRules, ComponentStyleSheet, ComponentStyles } from \"@microsoft/fast-jss-manager\";\r\nimport {\r\n DesignSystem,\r\n DesignSystemDefaults,\r\n applyAcrylicMaterial,\r\n applyTypeRampConfig,\r\n fontWeight,\r\n highContrastSelector,\r\n neutralForegroundRest\r\n} from \"@microsoft/fast-components-styles-msft\";\r\nimport { applyLocalizedProperty, toPx } from \"@microsoft/fast-jss-utilities\";\r\nimport { get, memoize } from \"lodash-es\";\r\n\r\nimport { DialogClassNameContract } from \"@microsoft/fast-components-react-base\";\r\nimport { ShareDialogClassNameContract } from \"./ShareDialog.classnames\";\r\nimport { ZIndex } from \"@msnews/core\";\r\nimport { canUseDOM } from \"@msnews/isomorphic-util\";\r\n\r\n/** Default values for border radius */\r\nconst borderRadiusCopyLink = 2;\r\nconst borderRadiusDialog = 4;\r\n\r\nconst dialogContainerWidth = 322;\r\n\r\n/**\r\n * Default color values for the share dialog\r\n */\r\nconst ShareDialogColors = {\r\n dividerLine: \"rgba(0,0,0, 0.05)\",\r\n inputText: \"rgba(0, 1, 0, 0.6)\",\r\n inputBorder: \"rgba(0, 0, 0, 0.2)\",\r\n copyLinkButtonBackground: \"#0078D4\",\r\n copyLinkButtonBackgroundActive: \"#1B64B0\",\r\n copyLinkButtonText: \"#FFF\",\r\n dialogOverlayBackground: \"rgba(0, 0, 0, 0.4)\"\r\n};\r\n\r\n/**\r\n * The JSS stylesheet for the base dialog\r\n * @type {ComponentStyles}\r\n * @param {DesignSystem} config - The design system configuration interface\r\n */\r\nexport const baseDialogStyles: ComponentStyles = (config: DesignSystem) => {\r\n const backgroundColor: string = get(config, \"backgroundColor\", DesignSystemDefaults.backgroundColor);\r\n\r\n return {\r\n dialog: {\r\n display: \"none\",\r\n '&[aria-hidden=\"false\"]': {\r\n display: \"block\"\r\n }\r\n },\r\n dialog_modalOverlay: {\r\n position: \"fixed\",\r\n background: ShareDialogColors.dialogOverlayBackground,\r\n top: \"0\",\r\n left: \"0\",\r\n right: \"0\",\r\n bottom: \"0\",\r\n \"z-index\": `${ZIndex.Above}`\r\n },\r\n dialog_contentRegion: {\r\n position: \"fixed\",\r\n left: \"50%\",\r\n top: \"50%\",\r\n transform: \"translate(-50%, -50%)\",\r\n \"border-radius\": toPx(borderRadiusDialog),\r\n \"box-shadow\": \"none\",\r\n \"z-index\": `${ZIndex.Above + 1}`,\r\n ...applyAcrylicMaterial(backgroundColor, 0.7, 0.7, true)\r\n }\r\n };\r\n};\r\n\r\n /**\r\n * Gets the override style for base dialog based on ZIndex\r\n * @private\r\n * @method\r\n * @return {>} the result style to be passed to base dialog\r\n */\r\nexport const setStyleByZIndex = memoize((overrides: ComponentStyleSheet = {}, zIndex: number = null) => {\r\n return zIndex == null ? overrides : {\r\n ...overrides,\r\n dialog_modalOverlay: {\r\n ...overrides.dialog_modalOverlay,\r\n \"z-index\": zIndex.toString()\r\n },\r\n dialog_contentRegion: {\r\n ...overrides.dialog_contentRegion,\r\n \"z-index\": (zIndex + 1).toString()\r\n }\r\n };\r\n});\r\n\r\n/**\r\n * The JSS stylesheet for the share dialog\r\n * @type {ComponentStyles}\r\n * @param {DesignSystem} config - The design system configuration interface\r\n */\r\nexport const ShareDialogStyles: ComponentStyles = (config: DesignSystem) => {\r\n const iconWidth = 40;\r\n const headerLineHeight = 24;\r\n const backdropFilterStyles: CSSRules = {\r\n background: \"none\"\r\n };\r\n const fallbackStyles: CSSRules = {\r\n background: get(config, \"backgroundColor\", DesignSystemDefaults.backgroundColor)\r\n };\r\n const backdropFilterSupport: boolean = canUseDOM() && (\"backdrop-filter\" in document.documentElement.style || \"-webkit-backdrop-filter\" in document.documentElement.style);\r\n const backgroundStyle: CSSRules = backdropFilterSupport ? backdropFilterStyles : fallbackStyles;\r\n return {\r\n closeButton: {\r\n background: \"transparent !important\",\r\n border: \"none\",\r\n height: `${headerLineHeight}px !important`,\r\n padding: \"0\",\r\n position: \"absolute\",\r\n \"min-width\": toPx(headerLineHeight),\r\n [applyLocalizedProperty(\"right\", \"left\", config.direction)]: \"4px\",\r\n \"&:hover, &:focus, &:active\": {\r\n cursor: \"pointer\",\r\n outline: \"auto\"\r\n },\r\n [highContrastSelector]: {\r\n background: \"ButtonFace !important\",\r\n \"& svg\": {\r\n fill: \"ButtonText\"\r\n },\r\n \"&:hover, &:focus, &:active\": {\r\n background: \"Highlight !important\",\r\n \"& svg\": {\r\n fill: \"HighlightText\"\r\n }\r\n }\r\n }\r\n },\r\n closeIcon: {\r\n fill: neutralForegroundRest\r\n },\r\n copyLinkButton: {},\r\n copyLinkInput: {},\r\n dialogContainer: {\r\n ...backgroundStyle,\r\n \"border-radius\": toPx(borderRadiusDialog),\r\n padding: \"0 12px\",\r\n width: toPx(dialogContainerWidth),\r\n \"box-sizing\": \"content-box\",\r\n \"text-align\": \"center\",\r\n \"& $inputContainer\": {\r\n \"& $copyLinkInput\": {\r\n [applyLocalizedProperty(\"border-top-left-radius\", \"border-top-right-radius\", config.direction)]: toPx(borderRadiusCopyLink),\r\n [applyLocalizedProperty(\"border-bottom-left-radius\", \"border-bottom-right-radius\", config.direction)]: toPx(borderRadiusCopyLink)\r\n }\r\n },\r\n [highContrastSelector]: {\r\n border: \"1px solid Highlight\"\r\n }\r\n },\r\n header: {\r\n \"border-bottom\": `${config.outlineWidth}px solid ${ShareDialogColors.dividerLine}`,\r\n display: \"flex\",\r\n \"line-height\": toPx(headerLineHeight),\r\n padding: \"12px 0\",\r\n \"text-align\": \"center\"\r\n },\r\n headerText: {\r\n ...applyTypeRampConfig(\"t7\"),\r\n \"font-weight\": `${fontWeight.semibold}`,\r\n margin: \"0\",\r\n width: \"100%\"\r\n },\r\n iconListContainer: {\r\n display: \"inline-block\",\r\n \"list-style\": \"none\",\r\n \"text-align\": \"center\",\r\n \"margin-top\": \"36px\",\r\n padding: \"0\",\r\n width: \"inherit\"\r\n },\r\n iconListItem: {\r\n float: applyLocalizedProperty(\"left\", \"right\", config.direction),\r\n width: \"25%\",\r\n \"&:nth-child(n+5)\": {\r\n \"margin-top\": \"24px\"\r\n },\r\n \"&:nth-child(4n+1)\": {\r\n clear: \"both\"\r\n }\r\n },\r\n inputContainer: {\r\n \"box-sizing\": \"content-box\",\r\n \"padding-top\": \"24px\",\r\n \"padding-bottom\": \"32px\",\r\n \"text-align\": \"center\",\r\n \"& $copyLinkInput\": {\r\n border: `2px solid ${ShareDialogColors.inputBorder}`,\r\n \"box-sizing\": \"content-box\",\r\n color: ShareDialogColors.inputText,\r\n ...applyTypeRampConfig(\"t8\"),\r\n padding: \"1px 0 1px 5px\",\r\n height: \"28px\",\r\n width: \"191px\"\r\n },\r\n \"& $copyLinkButton\": {\r\n background: ShareDialogColors.copyLinkButtonBackground,\r\n [applyLocalizedProperty(\"border-top-right-radius\", \"border-top-left-radius\", config.direction)]: toPx(borderRadiusCopyLink),\r\n [applyLocalizedProperty(\"border-bottom-right-radius\", \"border-bottom-left-radius\", config.direction)]: toPx(borderRadiusCopyLink),\r\n border: \"none\",\r\n color: ShareDialogColors.copyLinkButtonText,\r\n ...applyTypeRampConfig(\"t8\"),\r\n height: \"32px\",\r\n \"vertical-align\": \"middle\",\r\n width: \"89px\",\r\n \"&:hover\": {\r\n cursor: \"pointer\"\r\n },\r\n \"&:active\": {\r\n background: ShareDialogColors.copyLinkButtonBackgroundActive\r\n },\r\n [highContrastSelector]: {\r\n background: \"ButtonFace\",\r\n color: \"ButtonText\",\r\n \"&:hover, &:focus, &:active\": {\r\n background: \"Highlight\",\r\n color: \"HighlightText\"\r\n }\r\n }\r\n }\r\n }\r\n };\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\n/** String resource to be used in the Card Action components */\r\nexport const StringResource = {\r\n dialogStrings: {\r\n dialogButtonClose: \"close dialog\",\r\n dialogTitle: \"Share\",\r\n copyButton: \"Copy\",\r\n copiedButton: \"Link Copied\",\r\n copyButtonAriaLabel: \"copy link to clipboard\",\r\n copiedButtonAriaLabel: \"link copied to clipboard\"\r\n }\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport {\r\n AccentButton,\r\n Heading,\r\n HeadingSize,\r\n HeadingTag,\r\n StealthButton\r\n} from \"@microsoft/fast-components-react-msft\";\r\nimport {\r\n DialogProps,\r\n Dialog as MSFTBaseDialog\r\n} from \"@microsoft/fast-components-react-base\";\r\nimport { GlyphInline, Icon } from \"@msnews/icon\" ;\r\nimport { ShareDialogHandledProps, ShareDialogProps, ShareDialogStrings } from \"./ShareDialog.props\";\r\nimport {\r\n SocialMedia,\r\n SocialMediaConfig,\r\n SocialMediaDefaultConfig\r\n} from \"@msnews/views-helpers\";\r\nimport { Telemetry, TelemetryTags } from \"@msnews/experiences-base\";\r\nimport { baseDialogStyles, setStyleByZIndex } from \"./ShareDialog.styles\";\r\n\r\nimport Foundation from \"@microsoft/fast-components-foundation-react\";\r\nimport { HandledPropsKeys } from \"@msnews/core\";\r\nimport React from \"react\";\r\nimport { SocialMediaIcon } from \"@msnews/social-media-icon\";\r\nimport { StringResource } from \"./StringResource\";\r\nimport { logger } from \"@msnews/diagnostics\";\r\nimport manageJss from \"@microsoft/fast-jss-manager-react\";\r\n\r\n/** Base MSFT dialog with overriden style */\r\nconst Dialog = manageJss(baseDialogStyles)(MSFTBaseDialog);\r\n\r\n/** Duration the button should present the \"link copied\" text after a user click */\r\nconst linkCopiedDisplayDuration = 1600;\r\n\r\n/**\r\n * Share dialog state interface\r\n * @export\r\n * @interface ShareDialogState\r\n */\r\nexport interface ShareDialogState {\r\n isLinkCopied: boolean\r\n}\r\n/**\r\n * ShareDialog Component\r\n * @class - ShareDialog\r\n * @classdesc - The ShareDialog component. Renders the dialog that provides social media sharing options\r\n * @default\r\n */\r\nexport class ShareDialog extends Foundation {\r\n /**\r\n * Component HandledProps enumeration. Anything not enumerated here will be included in the experience root HTML tag via unhandledProps()\r\n */\r\n protected handledProps: HandledPropsKeys = {\r\n baseDialogProps: undefined,\r\n closeButtonTelemetryTags: undefined,\r\n contentTitle: undefined,\r\n contentUrl: undefined,\r\n emailBody: undefined,\r\n copyButtonAttributes: undefined,\r\n copyButtonTelemetryProps: undefined,\r\n copyButtonTelemetryTags: undefined,\r\n copyLinkOcid: undefined,\r\n dialogStrings: undefined,\r\n enabled: undefined,\r\n managedClasses: undefined,\r\n onClose: undefined,\r\n renderOneColLayout: undefined,\r\n socialMediaConfigOverride: undefined,\r\n socialMediaItems: undefined,\r\n shareIconTelemetryProps: undefined,\r\n shareIconTelemetryTags: undefined,\r\n baseDialogStyleOverride: undefined,\r\n zIndex: undefined\r\n };\r\n\r\n /**\r\n * Stores the strings to be used in the dialog. Merged default strings with passed from props\r\n * @type {ShareDialogStrings}\r\n */\r\n private dialogStrings: ShareDialogStrings;\r\n\r\n /**\r\n * Social media items config that stores merged values from default and props\r\n * @type {SocialMediaConfig}\r\n */\r\n private socialMediaItemsConfig: SocialMediaConfig;\r\n\r\n /**\r\n * Ref to input field with shared url\r\n * @type {React.RefObject}\r\n */\r\n private readonly inputRef: React.RefObject = React.createRef();\r\n\r\n /**\r\n * Constructs a ShareDialog component\r\n * @constructor\r\n * @param { ShareDialogProps } props props contract\r\n */\r\n constructor(props: ShareDialogProps) {\r\n super(props);\r\n this.state = {\r\n isLinkCopied: false\r\n };\r\n\r\n // Merges some values from props with default values\r\n this.dialogStrings = { ...StringResource.dialogStrings, ...props.dialogStrings };\r\n\r\n this.setSocialMediaItemsConfig();\r\n }\r\n\r\n /**\r\n * Component renderer\r\n * @public\r\n * @method\r\n * @returns {JSX.Element} the ShareDialog component\r\n */\r\n public render(): JSX.Element {\r\n const { managedClasses, enabled, contentUrl, baseDialogProps, onClose, children, closeButtonTelemetryTags, baseDialogStyleOverride, zIndex } = this.props;\r\n if (!enabled || !contentUrl) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n {this.dialogStrings.dialogTitle}\r\n \r\n \r\n \r\n \r\n
\r\n {children}\r\n {this.renderSocialIconsList()}\r\n {this.renderCopyLink()}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Renders the copy link input and button part of the share dialog\r\n * @private\r\n * @method\r\n * @returns {JSX.Element} the content part of the ShareDialog component\r\n */\r\n private renderCopyLink(): JSX.Element {\r\n const { managedClasses, copyLinkOcid, contentUrl, copyButtonAttributes, copyButtonTelemetryProps, copyButtonTelemetryTags } = this.props;\r\n\r\n const url = copyLinkOcid ? `${contentUrl}?ocid=${copyLinkOcid}` : contentUrl;\r\n const buttonText = this.state.isLinkCopied ? this.dialogStrings.copiedButton : this.dialogStrings.copyButton;\r\n const ariaLabel = this.state.isLinkCopied ? this.dialogStrings.copiedButtonAriaLabel : this.dialogStrings.copyButtonAriaLabel;\r\n\r\n const copyTelemetryTag = copyButtonTelemetryTags || Telemetry.render(copyButtonTelemetryProps);\r\n\r\n return (\r\n
\r\n \r\n \r\n {buttonText}\r\n \r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Copy share url to clipboard and set timer to update the copy link button text\r\n * @private\r\n * @method\r\n */\r\n private onCopyLinkToClipboard = () => {\r\n if (!this.state.isLinkCopied) {\r\n this.setState({ isLinkCopied: true });\r\n this.inputRef.current.select();\r\n document.execCommand(\"copy\");\r\n setTimeout(() => {\r\n /* istanbul ignore next */\r\n this.setState({ isLinkCopied: false });\r\n },\r\n linkCopiedDisplayDuration\r\n );\r\n }\r\n };\r\n\r\n /**\r\n * Renders the social items list part of the share dialog\r\n * @private\r\n * @method\r\n * @returns {JSX.Element} the social media list element of the ShareDialog component\r\n */\r\n private renderSocialIconsList(): JSX.Element {\r\n const { managedClasses, socialMediaItems } = this.props;\r\n if (!socialMediaItems || !socialMediaItems.length) {\r\n return null;\r\n }\r\n\r\n const socialMediaIcons = socialMediaItems.map((item) => {\r\n return this.renderSocialIcon(item);\r\n });\r\n\r\n return (\r\n
    \r\n {socialMediaIcons}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Renders each individual social media icon of the social media list\r\n * @private\r\n * @method\r\n * @param { string } socialMediaItem The social media item as string\r\n * @returns {JSX.Element} the icon part of the social media list\r\n */\r\n private renderSocialIcon(socialMediaItem: string): JSX.Element {\r\n const { managedClasses, shareIconTelemetryProps, shareIconTelemetryTags, contentTitle, contentUrl, emailBody } = this.props;\r\n const media: SocialMedia = SocialMedia[Object.keys(SocialMedia).find(key => SocialMedia[key] === socialMediaItem.toLowerCase())];\r\n if (!media) {\r\n logger.logError(`ShareDialog: renderSocialIcon: Invalid param: socialMediaItem = ${socialMediaItem}`);\r\n return null;\r\n }\r\n const mediaKey = media.toString();\r\n\r\n const iconTelemetryTags: TelemetryTags = (shareIconTelemetryTags && shareIconTelemetryTags[mediaKey]) ||\r\n (shareIconTelemetryProps && Telemetry.render(shareIconTelemetryProps[mediaKey]));\r\n\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n }\r\n\r\n /**\r\n * Sets configuration specs for social media items based on default and override props values\r\n * @method\r\n */\r\n private setSocialMediaItemsConfig(): void {\r\n this.socialMediaItemsConfig = { ...SocialMediaDefaultConfig };\r\n\r\n // merge default config with override props\r\n if (this.props.socialMediaConfigOverride) {\r\n Object.keys(this.props.socialMediaConfigOverride).forEach((key) => {\r\n const keyLower = key.toLowerCase();\r\n this.socialMediaItemsConfig[keyLower] = { ...this.socialMediaItemsConfig[keyLower], ...this.props.socialMediaConfigOverride[key] };\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the final props to apply to the dialog component\r\n * @private\r\n * @method\r\n * @param {DialogProps} props - the default dialog props\r\n * @returns {DialogProps} the resulting props to be passed to base dialog\r\n */\r\n private coerceDialogProps(props: DialogProps): DialogProps {\r\n return {\r\n visible: this.props.enabled,\r\n modal: true,\r\n contentHeight: \"auto\",\r\n contentWidth: this.props.renderOneColLayout ? \"100%\" : \"346px\",\r\n ...props\r\n };\r\n }\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport {\r\n ShareDialogHandledProps as BaseShareDialogHandledProps,\r\n ShareDialogProps as BaseShareDialogProps,\r\n ShareDialogManagedClasses,\r\n ShareDialogStrings,\r\n ShareDialogUnhandledProps\r\n} from \"./ShareDialog.props\";\r\nimport manageJss, { ManagedJSSProps } from \"@microsoft/fast-jss-manager-react\";\r\n\r\nimport { ShareDialog as BaseShareDialog } from \"./ShareDialog\";\r\nimport { DesignSystem } from \"@microsoft/fast-components-styles-msft\";\r\nimport { ShareDialogClassNameContract } from \"./ShareDialog.classnames\";\r\nimport { ShareDialogStyles } from \"./ShareDialog.styles\";\r\nimport { Subtract } from \"utility-types\";\r\n\r\n/* The type returned by manageJss type is very complicated so we'll let the\r\n* compiler infer the type instead of re-declaring just for the package export\r\n*/\r\nconst ShareDialog = manageJss(ShareDialogStyles)(BaseShareDialog);\r\ntype ShareDialog = InstanceType;\r\n\r\n// Create a valid JSS managed interface that doesn't require managed classes which are provided by the manageJSS HOC\r\ntype ShareDialogHandledProps = Subtract;\r\n\r\n// Create type for manageJSS HOC styled instance we are exporting\r\ntype ShareDialogProps = ManagedJSSProps<\r\n BaseShareDialogProps,\r\n ShareDialogClassNameContract,\r\n DesignSystem\r\n>;\r\n\r\n// Export everything a user might need from this index file\r\nexport {\r\n ShareDialog,\r\n ShareDialogProps,\r\n ShareDialogHandledProps,\r\n ShareDialogUnhandledProps,\r\n ShareDialogManagedClasses,\r\n ShareDialogClassNameContract,\r\n ShareDialogStrings\r\n};\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { ArticleCardHandledProps, ArticleCardProps, ArticleCardUnhandledProps } from \"./ArticleCard.props\";\r\nimport { HandledPropsKeys, ShallowCompare } from \"@msnews/core\";\r\nimport { Heading, Image, Typography } from \"@microsoft/fast-components-react-msft\";\r\n\r\nimport Foundation from \"@microsoft/fast-components-foundation-react\";\r\nimport React from \"react\";\r\n\r\n/**\r\n * Article card state interface\r\n */\r\nexport interface ArticleCardState {}\r\n\r\n/**\r\n * Article card component\r\n * @class - Article card\r\n * @classdesc - Article card component base; provides semantic structure of a basic article card.\r\n * @export\r\n * @default\r\n */\r\nclass ArticleCard extends Foundation {\r\n /**\r\n * Article card handled props contract\r\n * @protected\r\n * @type { HandledPropsKeys}\r\n */\r\n protected handledProps: HandledPropsKeys = {\r\n anchorRef: undefined,\r\n headlineTitle: undefined,\r\n href: undefined,\r\n image: undefined,\r\n managedClasses: undefined,\r\n provider: undefined\r\n };\r\n\r\n /**\r\n * Construct a new article card\r\n * @constructor\r\n * @param { ArticleCardHandledProps } props the props contract for ArticleCard\r\n */\r\n constructor(props: ArticleCardHandledProps) {\r\n super(props);\r\n }\r\n\r\n /**\r\n * Performs a shallow comparison on the props\r\n * @param nextProps Incoming props\r\n * @param nextState Incoming state. Ignored as component is stateless\r\n */\r\n public shouldComponentUpdate(nextProps: ArticleCardProps): boolean {\r\n return !ShallowCompare(this.props, nextProps);\r\n }\r\n\r\n /**\r\n * Renders the component\r\n * @method\r\n * @returns {JSX.Element} the ArticleCard JSX element\r\n */\r\n public render(): JSX.Element {\r\n return (\r\n \r\n {this.renderContent()}\r\n {this.props.children}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Renders the content component of the article\r\n * @method\r\n * @returns {JSX.Element} the content of an article\r\n */\r\n private renderContent(): JSX.Element {\r\n let content: JSX.Element;\r\n const { href, managedClasses } = this.props;\r\n\r\n if (href) {\r\n content = (\r\n \r\n {this.renderImage()}\r\n
    \r\n {this.renderTitle()}\r\n {this.renderProvider()}\r\n
    \r\n
    \r\n );\r\n } else {\r\n content = (\r\n
    \r\n {this.renderImage()}\r\n
    \r\n {this.renderTitle()}\r\n {this.renderProvider()}\r\n
    \r\n
    \r\n );\r\n }\r\n\r\n return content;\r\n }\r\n\r\n /**\r\n * Renders the card image component of the article\r\n * @method\r\n * @returns {JSX.Element} the image component of an article\r\n */\r\n private renderImage(): JSX.Element {\r\n if (!this.props.image) {\r\n return;\r\n }\r\n\r\n const { articleCard_imageWrapper, articleCard_image, articleCard_imageOverlay } = this.props.managedClasses;\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n /**\r\n * Renders the headline title component of the article\r\n * @method\r\n * @returns {JSX.Element} the headline title component of an article\r\n */\r\n private renderTitle(): JSX.Element {\r\n const { articleCard_headline, articleCard_headlineText, articleCard_headlineMask } = this.props.managedClasses;\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n /**\r\n * Renders the article provider component of an article\r\n * @method\r\n * @returns {JSX.Element} the article provider component if it exists\r\n */\r\n private renderProvider(): JSX.Element {\r\n if (!this.props.provider) {\r\n return;\r\n }\r\n\r\n let providerImage: JSX.Element;\r\n if (this.props.provider.image && this.props.provider.image.src) {\r\n providerImage = (\r\n \r\n );\r\n }\r\n\r\n return (\r\n
    \r\n {providerImage}\r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default ArticleCard;\r\nexport * from \"./ArticleCard.props\";","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { SocialMedia, SocialMediaDefaultConfig } from \"./SocialMediaConfig\";\r\nimport { getLocationHref, getLocationOrigin } from \"@msnews/isomorphic-util\";\r\nimport { indexOf, uniqueId } from \"lodash-es\";\r\n\r\nimport { String } from \"typescript-string-operations\";\r\nimport { format } from \"@microsoft/fast-web-utilities\";\r\nimport { getAppEnvironment } from \"@msnews/core\";\r\nimport { logger } from \"@msnews/diagnostics\";\r\n\r\n/**\r\n * Document type being shared\r\n */\r\nexport enum SharedDocumentType {\r\n CMS = \"0\",\r\n SD = \"5\"\r\n}\r\n\r\n/**\r\n * Sharing details interface to build sharing items\r\n * @interface\r\n */\r\nexport interface SharingInfo {\r\n /**\r\n * CMS document id\r\n * @type {string}\r\n */\r\n documentId: string;\r\n\r\n /**\r\n * Document type\r\n * @type {SharedDocumentType}\r\n */\r\n documentType: SharedDocumentType;\r\n\r\n /**\r\n * Sharing url for the content\r\n * @type {string}\r\n */\r\n sharingUrl?: string;\r\n}\r\n\r\n/**\r\n * Helper for building sharing details\r\n * @class\r\n */\r\nexport class SharingHelper {\r\n /**\r\n * Base production url used in the sharing link\r\n */\r\n private static readonly SharingBaseUrlDefault: string = \"http://a.msn.com/\";\r\n\r\n /**\r\n * Path format used to build the sharing url\r\n */\r\n private static readonly shortUrlPathFormat: string = \"{0}{1}/{2}/{3}\";\r\n\r\n /**\r\n * List the available options that should be mapped to prod url\r\n */\r\n private static readonly SharingProductionHosts: string = \"bing.com|www.bing.com|preview.msn.com|www.msn.com\";\r\n\r\n /**\r\n * String used to map the AppId number to single char identifier required in the sharing url\r\n */\r\n private static readonly Base36AppIdString: string = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\r\n\r\n /**\r\n * Path format used to append querystring to the sharing url\r\n */\r\n private static readonly appendQueryStringFormat: string = \"{0}?ocid={1}\";\r\n\r\n /**\r\n * List of available vertical keys to be mapped.\r\n * The order matter here as the AppId to be used is based on the array index of the key\r\n */\r\n private static readonly AppKeys: string[] = [\"finance\",\r\n \"news\",\r\n \"sports\",\r\n \"travel\",\r\n \"weather\",\r\n \"health\",\r\n \"foodanddrink\",\r\n \"entertainment\",\r\n \"autos\",\r\n \"video\",\r\n \"tv\",\r\n \"music\",\r\n \"movies\",\r\n \"games\",\r\n \"lifestyle\",\r\n \"kids\",\r\n \"sample\",\r\n \"asia\",\r\n \"africa\",\r\n \"australasia\",\r\n \"europe\",\r\n \"latinamerica\",\r\n \"middleeast\",\r\n \"northamerica\"];\r\n\r\n /**\r\n * Builds the short url that links to the article to be shared\r\n * @param sharingInfo The sharing data based on SharingInfo interface\r\n * @param locale The locale\r\n * @returns String with the short url to be shared\r\n */\r\n public static shortUrlBuilder(sharingInfo: SharingInfo, locale: string): string {\r\n const appId = this.getAppId();\r\n if (!appId) {\r\n return null;\r\n }\r\n\r\n const baseUrl = this.getSharingUrlBase(sharingInfo.sharingUrl);\r\n\r\n return baseUrl + format(this.shortUrlPathFormat, sharingInfo.documentType, appId, locale, sharingInfo.documentId);\r\n }\r\n\r\n /**\r\n * Gets the base36 AppId that is mapped from the vertical key identifier\r\n * @returns The mapped AppId\r\n */\r\n public static getAppId(): string {\r\n const { HostPage } = getAppEnvironment();\r\n const verticalKey: string = ((HostPage && HostPage.verticalKey) || \"news\").toLowerCase();\r\n let appId = indexOf(this.AppKeys, verticalKey);\r\n if (appId === -1 || appId >= this.Base36AppIdString.length) {\r\n appId = 1;\r\n }\r\n const base36Id = this.Base36AppIdString.substr(appId, 1);\r\n return base36Id;\r\n }\r\n\r\n /**\r\n * Gets the base url to be used in the shared link\r\n * @param articleUrl The full article url\r\n * @returns The base url to be used in the shared link\r\n */\r\n public static getSharingUrlBase(articleUrl: string): string {\r\n const url = new URL(articleUrl, getLocationOrigin());\r\n\r\n const host = url.host;\r\n const currentBaseUrl = url.origin + \"/\";\r\n\r\n const splitUrls = this.SharingProductionHosts.split(\"|\");\r\n\r\n const baseUrl = splitUrls.indexOf(host) > -1 ? this.SharingBaseUrlDefault : currentBaseUrl;\r\n\r\n return baseUrl;\r\n }\r\n\r\n /**\r\n * Strips off query string params\r\n * @param url Input url\r\n * @returns The plain url\r\n */\r\n public static getUrlWithoutQueryParams(url: string): string {\r\n if (url && url.length > 0) {\r\n return url.split(\"?\")[0];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Retrieves the URL for sharing with Social Media.\r\n * @param medias social media to be included\r\n * @param contentUrl The url of the content to be shared\r\n * @param contentTitle The title of the content\r\n * @param emailBody The body text to be used in the email\r\n * @param ocid The ocid to be included in the shared link\r\n * @returns The share url\r\n */\r\n public static getSocialMediaShareUrl(media: string, contentUrl: string, contentTitle: string, emailBody?: string, ocid?: string, overrideShareUrl?: string): string {\r\n if (!media || !contentUrl || !contentTitle) {\r\n logger.logError(`SharingHelper: getSocialMediaShareUrl: Parameter missing: media=${media}, contentUrl=${contentUrl}, contentTitle=${contentTitle}`);\r\n return;\r\n }\r\n\r\n const socialMediaItemConfig = SocialMediaDefaultConfig[media];\r\n if (!socialMediaItemConfig) {\r\n logger.logError(`SharingHelper: getSocialMediaShareUrl: Cannot find media type: ${socialMediaItemConfig}`);\r\n return \"\";\r\n }\r\n\r\n let shareUrl = overrideShareUrl || socialMediaItemConfig.url;\r\n if (media === SocialMedia.Skype) {\r\n shareUrl = shareUrl.replace(\"{flowid}\", uniqueId());\r\n }\r\n\r\n if (ocid) {\r\n contentUrl = format(this.appendQueryStringFormat, contentUrl, ocid);\r\n }\r\n\r\n if (media === SocialMedia.Email && emailBody) {\r\n emailBody = format(emailBody, contentTitle, contentUrl);\r\n }\r\n\r\n shareUrl = String.Format(shareUrl, {\r\n url: encodeURIComponent(contentUrl),\r\n title: encodeURIComponent(contentTitle),\r\n body: emailBody ? encodeURIComponent(emailBody): \"\",\r\n refererUrl: getLocationHref()\r\n });\r\n\r\n return shareUrl;\r\n }\r\n\r\n /**\r\n * Opens the social media sharing page in a new window\r\n * @param event Mouse event\r\n * @param shareUrl The complete url to be shared\r\n * @param options The features optional parameter in window.open\r\n */\r\n public static openNewWindow = (event: React.MouseEvent, shareUrl: string, options?: any): void => {\r\n const defaultOptions = { toolbar: 0, status: 0, resizable: 1, scrollbars: 1 };\r\n const finalOptions = Object.entries({ ...defaultOptions, ...options })\r\n .map(entry => entry.join(\"=\"))\r\n .join(\",\");\r\n\r\n window.open(shareUrl, null, finalOptions);\r\n };\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\n/**\r\n * Default name for the content action toolbar experience\r\n */\r\nexport const experienceDefaultName = \"ContentActionsToolbar\";\r\n\r\n/**\r\n * Windows sizes to trigger breakpoint tracker\r\n */\r\nexport const BreakpointIndexToPx = [0, 1152, 1263];\r\n\r\n/**\r\n * The breakpoint indexes to be maped by breakpoint tracker\r\n */\r\nexport enum ToolbarBreakpoints {\r\n Breakpoint3_1 = 0,\r\n Breakpoint3_2 = 1,\r\n Breakpoint3_3 = 2\r\n}\r\n\r\n/**\r\n * Constant names for telemetry data\r\n */\r\nexport enum TelemetryConstants {\r\n socialToolbarTelemetryName = \"socialtoolbar\",\r\n closeDialogTelemetryName = \"Close\",\r\n copyLinkTelemetryName = \"CopyLink\",\r\n shareArticleTelemetryName = \"ShareArticle\",\r\n shareDialogTelemetryName = \"ShareDialog\"\r\n}\r\n\r\n/**\r\n * Spa placeholders Ids\r\n */\r\nexport enum PlaceHolderId {\r\n vertical = \"content-actions-toolbar-vert\",\r\n horizontal = \"content-actions-toolbar-horiz\"\r\n}\r\n\r\n/**\r\n * Action keys for like/dislike\r\n */\r\nexport enum LikeDislikeActionKey {\r\n like = \"like\",\r\n dislike = \"dislike\",\r\n undoliked = \"undoliked\",\r\n undodisliked = \"undodisliked\"\r\n}\r\n\r\n/**\r\n * action keys available in content action\r\n */\r\nexport enum SelectPropKey {\r\n onLike = \"onLike\",\r\n onDislike = \"onDislike\",\r\n onOpenOptions = \"onOpenOptions\",\r\n onShareDialogOpen = \"onShareDialogOpen\"\r\n}\r\n\r\n/**\r\n * Content Status\r\n */\r\nexport enum Status {\r\n None = \"none\",\r\n Like = \"like\",\r\n DisLike = \"dislike\"\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { SocialMedia, SocialMediaTarget } from \"@msnews/views-helpers\";\r\n\r\nimport { CardContextMenuItem } from \"@msnews/card-context-menu\";\r\nimport { DialogArticleCardProps } from \"../dialog-article-card\";\r\nimport { GlyphType } from \"@msnews/icon\";\r\nimport { ManagedClasses } from \"@microsoft/fast-components-class-name-contracts-msft\";\r\nimport { ShareDialogProps } from \"@msnews/share-dialog\";\r\nimport { SharingToolbarClassNames } from \"./\";\r\nimport { Status } from \"../../ContentActionsToolbar.constants\";\r\nimport { TelemetryTags } from \"@msnews/experiences-base\";\r\nimport { ToolbarPosition } from \"../..\";\r\n\r\n/**\r\n * Enumeration of available button type options\r\n * @type {enum}\r\n */\r\nexport enum ButtonType {\r\n SocialMedia = \"SocialMedia\",\r\n ShareDialog = \"ShareDialog\",\r\n LikeDislike = \"LikeDislike\",\r\n MoreOptions = \"MoreOptions\"\r\n}\r\n\r\n/**\r\n * Coordinate position type\r\n */\r\nexport type CoordinatePos = {\r\n /**\r\n * A horizontal coordinate position\r\n * @type {number}\r\n */\r\n x: number;\r\n\r\n /**\r\n * A vertical coordinate position\r\n * @type {number}\r\n */\r\n y: number;\r\n};\r\n\r\n/**\r\n * The social media type button\r\n */\r\nexport type SocialMediaType = {\r\n /**\r\n * Optional HTML anchor attributes\r\n * @type {React.HTMLAttributes}\r\n */\r\n attributes?: React.HTMLAttributes;\r\n\r\n /**\r\n * The social media enum type\r\n * @type {SocialMedia}\r\n */\r\n mediaType: SocialMedia;\r\n\r\n /**\r\n * The shared content url\r\n * @type {string}\r\n */\r\n contentUrl: string;\r\n\r\n /**\r\n * The shared content title\r\n * @type {string}\r\n */\r\n contentTitle: string;\r\n\r\n /**\r\n * The localized email body text\r\n * @type {string}\r\n */\r\n emailBody?: string;\r\n\r\n /**\r\n * The icon to be used instead of default one\r\n * @type {GlyphType}\r\n */\r\n icon?: GlyphType;\r\n\r\n /**\r\n * The ocid value to be used\r\n * @type {string}\r\n */\r\n ocid?: string;\r\n\r\n /**\r\n * The social media anchor target attribute option to be used\r\n * @type {SocialMediaTarget}\r\n */\r\n target?: SocialMediaTarget;\r\n\r\n /**\r\n * The telemetry callback to triggered when new window is used as the anchor target\r\n * @type {(event: any) => void}\r\n */\r\n newWindowTelemetryCall?: (event: any) => void;\r\n};\r\n\r\n/**\r\n * The share dialog type button\r\n */\r\nexport type ShareDialogType = {\r\n /**\r\n * Optional HTML button attributes\r\n * @type {React.HTMLAttributes}\r\n */\r\n attributes?: React.HTMLAttributes;\r\n\r\n /**\r\n * The share dialog component props\r\n * @type {ShareDialogProps}\r\n */\r\n shareDialogProps: ShareDialogProps;\r\n\r\n /**\r\n * The dialog article card component props\r\n * @type {DialogArticleCardProps}\r\n */\r\n dialogArticleCardProps: DialogArticleCardProps;\r\n\r\n /**\r\n * The telemetry tags\r\n * @type {TelemetryTags}\r\n */\r\n articleTelemetryTags?: TelemetryTags;\r\n\r\n /**\r\n * Callback to be triggered at user click\r\n * @type {(event: any) => void}\r\n */\r\n onSelect?: (event: any) => void;\r\n};\r\n\r\n/**\r\n * The like/dislike type button\r\n */\r\nexport type LikeDislikeType = {\r\n /**\r\n * Optional HTML button attributes\r\n * @type {React.HTMLAttributes}\r\n */\r\n attributes?: React.HTMLAttributes;\r\n\r\n /**\r\n * Current status (like/dislike/none) of the content\r\n * @type {Status}\r\n */\r\n status: Status;\r\n\r\n /**\r\n * Callback to be triggered at user click\r\n * @type {(event: any) => void}\r\n */\r\n onSelect?: (event: any) => void;\r\n};\r\n\r\n/**\r\n * The more options type button\r\n */\r\nexport type MoreOptionsType = {\r\n /**\r\n * Optional HTML div attributes\r\n * @type {React.HTMLAttributes}\r\n */\r\n attributes?: React.HTMLAttributes;\r\n\r\n /**\r\n * Current status (like/dislike/none) of the content\r\n * @type {Status}\r\n */\r\n status: Status;\r\n\r\n /**\r\n * The array of items to be displayed in the menu\r\n * @type {CardContextMenuItem[]}\r\n */\r\n menuItems: CardContextMenuItem[];\r\n\r\n /**\r\n * The offset position of the menu to open in relation to its button\r\n * Default to (0,0)\r\n * @type {CoordinatePos}\r\n */\r\n offsetPos?: CoordinatePos;\r\n\r\n /**\r\n * The override zIndex to be used by the menu\r\n * @type {number}\r\n */\r\n zIndex?: number;\r\n};\r\n\r\n/**\r\n * The button item common type\r\n */\r\nexport type ButtonItemType = {\r\n /**\r\n * The content actions toolbar button type\r\n * @type {ButtonType}\r\n */\r\n buttonType: ButtonType;\r\n\r\n /**\r\n * The content actions toolbar button data type\r\n * @type {ButtonDataType}\r\n */\r\n buttonData?: ButtonDataType;\r\n\r\n /**\r\n * The telemetry tags\r\n * @type {TelemetryTags}\r\n */\r\n telemetryTags?: TelemetryTags;\r\n};\r\n\r\nexport type ButtonDataType = Partial;\r\n\r\n/**\r\n * An interface to represent the SharingToolbar jss managed classes.\r\n *\r\n * @export\r\n * @interface SharingToolbarManagedClasses\r\n */\r\nexport type SharingToolbarManagedClasses = ManagedClasses;\r\n\r\n/**\r\n * An interface to represent the SharingToolbar handled props.\r\n *\r\n * @export\r\n * @interface SharingToolbarHandledProps\r\n */\r\nexport interface SharingToolbarHandledProps extends SharingToolbarManagedClasses {\r\n\r\n /**\r\n * The toolbar position (vertical/horizontal)\r\n * @type {ToolbarPosition}\r\n */\r\n position: ToolbarPosition;\r\n\r\n /**\r\n * The sharing buttons configuration array\r\n * @type {ButtonItemType[]}\r\n */\r\n sharingButtons: ButtonItemType[];\r\n}\r\n\r\n/**\r\n * An interface to represent the SharingToolbar unhandled props.\r\n * @export\r\n * @interface SharingToolbarUnHandledProps\r\n */\r\nexport type SharingToolbarUnHandledProps = React.HTMLAttributes;\r\n\r\n/**\r\n * The SharingToolbar props type\r\n */\r\nexport type SharingToolbarProps = SharingToolbarHandledProps & SharingToolbarUnHandledProps;","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { ActionMap } from \"@msnews/experiences-redux\";\r\nimport { DocumentData } from \"./ContentActionsToolbar.state\";\r\nimport { Status } from \"./ContentActionsToolbar.constants\";\r\nimport { ToolbarPosition } from \"./ContentActionsToolbar.props\";\r\n\r\ntype InitializeToolbar = (breakpointIndex: number, isRSThreeDevice: boolean, documentId: string, staticPosition: ToolbarPosition) => void;\r\ntype ContentStatuReady = (status: Status) => void;\r\ntype DocumentDataReady = (documentData: DocumentData) => void;\r\ntype LikeContent = () => void;\r\ntype UnlikeContent = () => void;\r\ntype DislikeContent = () => void;\r\ntype UndislikeContent = () => void;\r\ntype ViewportUpdate = (breakpointIndex: number, isRSThreeDevice: boolean) => void;\r\ntype SharingToolbarError = (error: Error) => void;\r\n\r\n/**\r\n * Class containing actions that apply to the ContentActionsToolbar connector\r\n * @class\r\n */\r\nexport class ContentActionsToolbarActions {\r\n public static initializeToolbar: ActionMap = new ActionMap(\"InitializeToolbar\");\r\n public static ContentStatuReady: ActionMap = new ActionMap(\"ContentStatuReady\");\r\n public static documentDataReady: ActionMap = new ActionMap(\"DocumentDataReady\");\r\n public static likeContent: ActionMap = new ActionMap(\"LikeContent\");\r\n public static unlikeContent: ActionMap = new ActionMap(\"UnlikeContent\");\r\n public static dislikeContent: ActionMap = new ActionMap(\"DislikeContent\");\r\n public static undislikeContent: ActionMap = new ActionMap(\"UndislikeContent\");\r\n public static sharingToolbarError: ActionMap = new ActionMap(\"SharingToolbarError\");\r\n public static ViewportUpdate: ActionMap = new ActionMap(\"ViewportUpdate\");\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { CardContextMenuItem } from \"@msnews/card-context-menu\";\r\nimport { CoordinatePos } from \"./SharingToolbar.props\";\r\nimport { Glyph } from \"@msnews/icon\";\r\nimport { LikeDislikeActionKey } from \"../../ContentActionsToolbar.constants\";\r\n\r\n/**\r\n * Default color for the icon container\r\n */\r\nexport const iconContainerDefaultColor = \"#EEE\";\r\n\r\n/**\r\n * Colors for the more options icon\r\n */\r\nexport const moreOptionsIconColors = {\r\n background: iconContainerDefaultColor,\r\n foreground: \"#666\"\r\n};\r\n\r\n/**\r\n * Background colors for the like dislike icon\r\n */\r\nexport const likeDislikeIconBackroundColor = {\r\n none: iconContainerDefaultColor,\r\n like: \"#FF4343\",\r\n dislike: \"#666\"\r\n};\r\n\r\n/**\r\n * Default offset position to display the more options context menu\r\n */\r\nexport const moreOptionsMenuDefaultOffsetPos: CoordinatePos = {\r\n x: 0,\r\n y: -80\r\n};\r\n\r\n/**\r\n * Menu items to render the like option\r\n */\r\nexport const OptionItemLike: CardContextMenuItem = {\r\n key: LikeDislikeActionKey.like,\r\n text: null,\r\n onSelect: null,\r\n icon: Glyph.Like,\r\n telemetryTag: null\r\n};\r\n\r\n/**\r\n * Menu items to render the dislike option\r\n */\r\nexport const OptionItemDislike: CardContextMenuItem = {\r\n key: LikeDislikeActionKey.dislike,\r\n text: null,\r\n onSelect: null,\r\n icon: Glyph.Disliked,\r\n telemetryTag: null\r\n};\r\n\r\n/**\r\n * Menu items to render the undo like option\r\n */\r\nexport const OptionItemUndoLike: CardContextMenuItem = {\r\n key: LikeDislikeActionKey.undoliked,\r\n text: null,\r\n onSelect: null,\r\n icon: Glyph.Like,\r\n telemetryTag: null\r\n};\r\n\r\n/**\r\n * Menu items to render the undo dislike option\r\n */\r\nexport const OptionItemUndoDislike: CardContextMenuItem = {\r\n key: LikeDislikeActionKey.undodisliked,\r\n text: null,\r\n onSelect: null,\r\n icon: Glyph.Dislike,\r\n telemetryTag: null\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { ContentActionsToolbarConfig, ContentActionsToolbarProps, ContentActionsToolbarState, Status } from \".\";\r\nimport { InspectorArgs, InspectorResponse } from \"@msnews/core\";\r\nimport { OptionItemDislike, OptionItemLike, OptionItemUndoDislike, OptionItemUndoLike } from \"./components/sharing-toolbar/SharingToolbar.constants\";\r\n\r\nimport { ButtonType } from \"./components/sharing-toolbar/SharingToolbar\";\r\nimport { CardContextMenuItem } from \"@msnews/card-context-menu\";\r\nimport { SocialMediaTarget } from \"@msnews/views-helpers\";\r\nimport { cloneDeep } from \"lodash-es\";\r\n\r\n/**\r\n * Type for ContentActionsToolbar connectorArgs\r\n *\r\n * @export\r\n * @type {ContentActionsToolbarConnectorArgs}\r\n */\r\nexport type ContentActionsToolbarConnectorArgs = {\r\n /** Flag to indicate if there's a need to wait for content status endpoint response */\r\n isContentStatusRequired: boolean;\r\n};\r\n\r\nexport type ContentActionsToolbarInspectorArgs = InspectorArgs;\r\n\r\nexport namespace ContentActionsToolbarInspector {\r\n export function inspect(args: ContentActionsToolbarInspectorArgs): InspectorResponse {\r\n const { config, state, config: { localizedStrings } } = args;\r\n const { isContentStatusRequired } = args.connectorArgs as ContentActionsToolbarConnectorArgs;\r\n\r\n const newProps: ContentActionsToolbarProps = {\r\n staticPosition: state.staticPosition,\r\n position: state.position,\r\n sharingToolbar: {\r\n position: state.position,\r\n sharingButtons: []\r\n },\r\n contentStatus: args.state.status,\r\n sharingError: args.state.sharingError\r\n };\r\n\r\n const sharingShortUrl = state.documentData ? state.documentData.sharingShortUrl : undefined;\r\n const articleTitle = state.documentData ? state.documentData.articleTitle : undefined;\r\n const articleImageUrl = state.documentData ? state.documentData.articleImageUrl : undefined;\r\n const providerName = state.documentData ? state.documentData.providerName : undefined;\r\n const providerLogoUrl = state.documentData ? state.documentData.providerLogoUrl : undefined;\r\n\r\n if ((!isContentStatusRequired || state.status) && state.documentData) {\r\n newProps.sharingToolbar.sharingButtons = config.sharingButtons.map(buttonItem => {\r\n let newButtonItem = cloneDeep(buttonItem);\r\n switch (buttonItem.buttonType) {\r\n case ButtonType.SocialMedia:\r\n if (newButtonItem.buttonData) {\r\n newButtonItem.buttonData.contentUrl = sharingShortUrl;\r\n newButtonItem.buttonData.contentTitle = articleTitle;\r\n newButtonItem.buttonData.emailBody = localizedStrings.emailBodyText;\r\n newButtonItem.buttonData.target = buttonItem.buttonData.target ? SocialMediaTarget[buttonItem.buttonData.target] : undefined;\r\n } else {\r\n newButtonItem = undefined;\r\n }\r\n break;\r\n case ButtonType.ShareDialog:\r\n if (newButtonItem.buttonData && newButtonItem.buttonData.shareDialogProps && newButtonItem.buttonData.shareDialogProps.socialMediaItems) {\r\n const { shareDialogProps } = newButtonItem.buttonData;\r\n shareDialogProps.enabled = true;\r\n shareDialogProps.contentUrl = sharingShortUrl;\r\n shareDialogProps.contentTitle = articleTitle;\r\n shareDialogProps.emailBody = localizedStrings.emailBodyText;\r\n shareDialogProps.dialogStrings = {\r\n dialogTitle: localizedStrings.shareDialogTitleText,\r\n copyButton: localizedStrings.shareDialogCopyButtonText,\r\n copyButtonAriaLabel: localizedStrings.shareDialogCopyButtonAriaLabelText,\r\n copiedButton: localizedStrings.shareDialogCopiedButtonText,\r\n copiedButtonAriaLabel: localizedStrings.shareDialogCopiedButtonAriaLabelText\r\n };\r\n\r\n newButtonItem.buttonData.dialogArticleCardProps = {\r\n articleId: state.documentId,\r\n headlineTitle: {\r\n tag: undefined,\r\n children: articleTitle\r\n },\r\n href: sharingShortUrl,\r\n image: {\r\n alt: articleTitle,\r\n src: articleImageUrl\r\n },\r\n provider: {\r\n name: {\r\n title: providerName,\r\n children: providerName\r\n },\r\n image: {\r\n src: providerLogoUrl,\r\n alt: providerName\r\n }\r\n }\r\n };\r\n\r\n newButtonItem.buttonData.attributes = {\r\n \"aria-label\": localizedStrings.shareDialogButtonAriaLabelText,\r\n \"aria-hidden\": false,\r\n title: localizedStrings.shareDialogButtonAriaLabelText\r\n };\r\n } else {\r\n newButtonItem = undefined;\r\n }\r\n break;\r\n case ButtonType.LikeDislike:\r\n newButtonItem.buttonData = {\r\n attributes: {\r\n \"aria-label\": localizedStrings.likeDislikeButtonAriaLabelText,\r\n \"aria-hidden\": false,\r\n title: localizedStrings.likeDislikeButtonAriaLabelText\r\n },\r\n status: state.status\r\n };\r\n break;\r\n case ButtonType.MoreOptions: {\r\n const menuItems: CardContextMenuItem[] = [];\r\n if (state.status === Status.Like) {\r\n OptionItemUndoLike.text = localizedStrings.moreOptionsUnlikeText;\r\n OptionItemUndoLike.attr = {\r\n \"aria-label\": localizedStrings.moreOptionsUnlikeAriaLabelText,\r\n \"aria-hidden\": false,\r\n title: localizedStrings.moreOptionsUnlikeAriaLabelText\r\n };\r\n menuItems.push(OptionItemUndoLike);\r\n\r\n OptionItemDislike.text = localizedStrings.moreOptionsDislikeText;\r\n OptionItemDislike.attr = {\r\n \"aria-label\": localizedStrings.moreOptionsDislikeAriaLabelText,\r\n \"aria-hidden\": false,\r\n title: localizedStrings.moreOptionsDislikeAriaLabelText\r\n };\r\n menuItems.push(OptionItemDislike);\r\n } else if (state.status === Status.DisLike) {\r\n OptionItemUndoDislike.text = localizedStrings.moreOptionsUndislikeText;\r\n OptionItemUndoDislike.attr = {\r\n \"aria-label\": localizedStrings.moreOptionsUndislikeAriaLabelText,\r\n \"aria-hidden\": false,\r\n title: localizedStrings.moreOptionsUndislikeAriaLabelText\r\n };\r\n menuItems.push(OptionItemUndoDislike);\r\n\r\n OptionItemLike.text = localizedStrings.moreOptionsLikeText;\r\n OptionItemLike.attr = {\r\n \"aria-label\": localizedStrings.moreOptionsLikeAriaLabelText,\r\n \"aria-hidden\": false,\r\n title: localizedStrings.moreOptionsLikeAriaLabelText\r\n };\r\n menuItems.push(OptionItemLike);\r\n } else {\r\n OptionItemDislike.text = localizedStrings.moreOptionsDislikeText;\r\n OptionItemDislike.attr = {\r\n \"aria-label\": localizedStrings.moreOptionsDislikeAriaLabelText,\r\n \"aria-hidden\": false,\r\n title: localizedStrings.moreOptionsDislikeAriaLabelText\r\n };\r\n menuItems.push(OptionItemDislike);\r\n }\r\n newButtonItem.buttonData = {\r\n attributes: {\r\n \"aria-label\": localizedStrings.moreOptionsButtonAriaLabelText,\r\n \"aria-hidden\": false,\r\n title: localizedStrings.moreOptionsButtonAriaLabelText\r\n },\r\n menuItems: menuItems,\r\n status: state.status,\r\n offsetPos: buttonItem.buttonData ? buttonItem.buttonData.offsetPos : undefined,\r\n zIndex: buttonItem.buttonData ? buttonItem.buttonData.zIndex : undefined\r\n };\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n return newButtonItem;\r\n }).filter(value => value);\r\n }\r\n\r\n return {\r\n props: newProps,\r\n missingChildren: []\r\n };\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport {\r\n KeyValuePair,\r\n TelemetryBase,\r\n appEnvironment,\r\n headData,\r\n oneServiceQueryStringKeys\r\n} from \"@msnews/core\";\r\nimport { OneServiceUtility, getServiceUrlForSubpath, sendRequest } from \"@msnews/oneservice\";\r\n\r\nimport { ContentActionsToolbarAppErrors } from \"@msnews/diagnostics\";\r\nimport { DocumentData } from \"../ContentActionsToolbar.state\";\r\nimport { Status } from \"../ContentActionsToolbar.constants\";\r\nimport { get } from \"lodash-es\";\r\n\r\n/**\r\n * Class to fetch data for the content actions toolbar experience\r\n * @class ContentActionsToolbarServiceClient\r\n */\r\nexport class ContentActionsToolbarServiceClient {\r\n /**\r\n * The actions service end point\r\n */\r\n private contentActionsServiceEndpoint = \"Graph/Actions\";\r\n\r\n /**\r\n * The content preview endpoint\r\n */\r\n private contentPreviewApiEndpoint = \"view/v1/Preview\";\r\n\r\n /**\r\n * The template url for article images\r\n */\r\n private articleImageUrl = \"https://img-s-msn-com.akamaized.net/tenant/amp/entityid/${imageId}.img?h=100&w=100&m=6&q=60&u=t&o=t&l=f&f=png\";\r\n\r\n /**\r\n * The template url for provider logo images\r\n */\r\n private providerLogoUrl = \"https://img-s-msn-com.akamaized.net/tenant/amp/entityid/${logoId}.img?h=16&w=16&m=6&q=60&u=t&o=t&l=f&f=png\";\r\n\r\n /**\r\n * the ocid for request\r\n */\r\n private ocid = \"feeds\";\r\n\r\n /**\r\n * Initializes a new instance of the `ContentActionsToolbarServiceClient` class.\r\n * @constructor\r\n * @public\r\n * @param {any} fetchImpl - The fetch implementation\r\n */\r\n public constructor(private fetchImpl: any) {\r\n }\r\n\r\n /**\r\n * Get content preference initial state\r\n * @param {string} targetId target id\r\n */\r\n public async GetPreferenceInitialState(targetId: string): Promise {\r\n let initialState: Status = undefined;\r\n try {\r\n const response = await this.GetContentStatusRequest(targetId);\r\n const isLike = response && response[\"value\"] && response[\"value\"].find(obj => obj.actionType === \"Like\");\r\n const isDislike = response && response[\"value\"] && response[\"value\"].find(obj => obj.actionType === \"Dislike\");\r\n initialState = isLike ? Status.Like : (isDislike ? Status.DisLike : Status.None);\r\n } catch (error) {\r\n TelemetryBase.trackAppErrorEvent({\r\n ...ContentActionsToolbarAppErrors.ContentActionsGetContentStatusActionError,\r\n message: \"Failed obtaining content status\",\r\n pb: {\r\n ...ContentActionsToolbarAppErrors.ContentActionsGetContentStatusActionError.pb,\r\n customMessage: `Error: ${error}`\r\n }\r\n });\r\n }\r\n return initialState;\r\n }\r\n\r\n /**\r\n * Get required document data\r\n * @param {string} targetId target id\r\n */\r\n public async GetDocumentData(targetId: string): Promise {\r\n let documentData: DocumentData = undefined;\r\n try {\r\n const contentPreviewData = await this.GetContentPreviewData(targetId);\r\n documentData = this.TranslateContentPreviewDocumentData(contentPreviewData);\r\n if (!documentData) {\r\n throw new Error(`Failed to map content preview data to DocumentData. TargetId: ${targetId}`);\r\n }\r\n } catch (error) {\r\n TelemetryBase.trackAppErrorEvent({\r\n ...ContentActionsToolbarAppErrors.ContentActionsGetDocumentDataError,\r\n message: \"Failed obtaining document data\",\r\n pb: {\r\n ...ContentActionsToolbarAppErrors.ContentActionsGetDocumentDataError.pb,\r\n customMessage: `Error: ${error}`\r\n }\r\n });\r\n }\r\n return documentData;\r\n }\r\n\r\n /**\r\n * The dislike target service call\r\n * @param targetId target id to be disliked\r\n */\r\n public async Dislike(targetId: string): Promise {\r\n return this.PostContentActionRequest(targetId, \"Dislike\");\r\n }\r\n\r\n /**\r\n * The undislike target service call\r\n * @param targetId target id to be undislike\r\n */\r\n public async Undislike(targetId: string): Promise {\r\n return this.DeleteContentActionRequest(targetId, \"Dislike\");\r\n }\r\n\r\n /**\r\n * The like target service call\r\n * @param targetId target id to be like\r\n */\r\n public async Like(targetId: string): Promise {\r\n return this.PostContentActionRequest(targetId, \"Like\");\r\n }\r\n\r\n /**\r\n * The like target service call\r\n * @param targetId target id to be like\r\n */\r\n public async Unlike(targetId: string): Promise {\r\n return this.DeleteContentActionRequest(targetId, \"Like\");\r\n }\r\n\r\n /**\r\n * Set request to service to get the metadata about content status\r\n * @param targetId target id\r\n */\r\n private async GetContentStatusRequest(targetId: string): Promise {\r\n const requestParams = await OneServiceUtility.getBaseRequestData(\"GET\");\r\n requestParams.credentials = headData.UserIsSignedIn ? \"include\" : undefined;\r\n\r\n const serviceUrl = getServiceUrlForSubpath(this.contentActionsServiceEndpoint);\r\n const commonParams = OneServiceUtility.getCommonParams(this.ocid);\r\n [\r\n ...commonParams,\r\n {\r\n key: \"$filter\",\r\n value: `targetId eq '${targetId}'`\r\n }\r\n ].forEach(pair => pair.value && serviceUrl.searchParams.set(pair.key, pair.value));\r\n\r\n let contentStatusData: any;\r\n try {\r\n contentStatusData = await (sendRequest(\r\n async () => {\r\n const response: Response = await this.fetchImpl(serviceUrl.href, requestParams);\r\n if (response.status >= 400) {\r\n throw new Error(response.statusText);\r\n }\r\n return response.json();\r\n },\r\n \"getContentAction\"\r\n ));\r\n } catch (error) {\r\n TelemetryBase.trackAppErrorEvent({\r\n ...ContentActionsToolbarAppErrors.ContentActionsContentStatusFetchError,\r\n message: \"Failed to fetch from content status data endpoint\",\r\n pb: {\r\n ...ContentActionsToolbarAppErrors.ContentActionsContentStatusFetchError.pb,\r\n customMessage: `Service URL: ${serviceUrl}, error: ${error}`\r\n }\r\n });\r\n }\r\n\r\n return contentStatusData;\r\n }\r\n\r\n /**\r\n * Gets article content data from ContentPreview endpoint\r\n * @param articleId the article id\r\n * @returns Primise The article details data\r\n */\r\n private async GetContentPreviewData(articleId: string): Promise {\r\n const requestParams = await OneServiceUtility.getBaseRequestData(\"GET\");\r\n requestParams.credentials = headData.UserIsSignedIn ? \"include\" : undefined;\r\n\r\n // Build the url\r\n const serviceUrl = new URL(`${this.contentPreviewApiEndpoint}/${articleId}${appEnvironment.ContentServiceUrlBase.search}`, appEnvironment.ContentServiceUrlBase);\r\n\r\n let contentPreviewData: any;\r\n try {\r\n contentPreviewData = await (sendRequest(\r\n async () => {\r\n const response: Response = await this.fetchImpl(serviceUrl.href, requestParams);\r\n if (response.status >= 400) {\r\n throw new Error(response.statusText);\r\n }\r\n return response.json();\r\n },\r\n \"getContentAction\"\r\n ));\r\n } catch (error) {\r\n TelemetryBase.trackAppErrorEvent({\r\n ...ContentActionsToolbarAppErrors.ContentActionsContentPreviewFetchError,\r\n message: \"Failed to fetch from content views data endpoint\",\r\n pb: {\r\n ...ContentActionsToolbarAppErrors.ContentActionsContentPreviewFetchError.pb,\r\n customMessage: `Service URL: ${serviceUrl}, error: ${error}`\r\n }\r\n });\r\n }\r\n\r\n return contentPreviewData;\r\n }\r\n\r\n /**\r\n * Delete an action from target\r\n * @param targetId target to be deleted\r\n * @param actionType type of the action\r\n */\r\n private async DeleteContentActionRequest(targetId: string, actionType: string): Promise {\r\n const requestParams = await OneServiceUtility.getBaseRequestData(\"DELETE\");\r\n requestParams.credentials = headData.UserIsSignedIn ? \"include\" : undefined;\r\n\r\n const deleteQueryParam: KeyValuePair = {\r\n key: oneServiceQueryStringKeys.filter,\r\n value: `actionType eq '${actionType}' and targetId eq '${targetId}'`\r\n };\r\n\r\n const serviceUrl = getServiceUrlForSubpath(this.contentActionsServiceEndpoint);\r\n const commonParams = OneServiceUtility.getCommonParams(this.ocid);\r\n [\r\n deleteQueryParam,\r\n ...commonParams\r\n ].forEach((pair) => pair.value && serviceUrl.searchParams.set(pair.key, pair.value));\r\n\r\n let deleteResponse: Response;\r\n try {\r\n deleteResponse = await (sendRequest(\r\n async () => {\r\n const response: Response = await this.fetchImpl(serviceUrl.href, requestParams);\r\n if (response.status >= 400) {\r\n throw new Error(response.statusText);\r\n }\r\n return response;\r\n },\r\n `deleteContentAction${actionType}`\r\n ));\r\n } catch (error) {\r\n TelemetryBase.trackAppErrorEvent({\r\n ...ContentActionsToolbarAppErrors.ContentActionsDeleteActionError,\r\n message: \"Error while calling delete action for content actions toolbar\",\r\n pb: {\r\n ...ContentActionsToolbarAppErrors.ContentActionsDeleteActionError.pb,\r\n customMessage: `URL: ${serviceUrl.href}, error: ${error}`\r\n }\r\n });\r\n }\r\n\r\n return deleteResponse;\r\n }\r\n\r\n /**\r\n * create an action from target\r\n * @param targetId target to be created\r\n * @param actionType type of the action\r\n */\r\n private async PostContentActionRequest(targetId: string, actionType: string, targetType?: string): Promise {\r\n const requestParams: RequestInit = {\r\n method: \"POST\",\r\n body: JSON.stringify({\r\n actionType,\r\n targetId,\r\n targetType\r\n }),\r\n credentials: headData.UserIsSignedIn ? \"include\" : undefined,\r\n headers: await OneServiceUtility.getOneServiceHeaders()\r\n };\r\n\r\n const serviceUrl = getServiceUrlForSubpath(this.contentActionsServiceEndpoint);\r\n const commonParams = OneServiceUtility.getCommonParams(this.ocid);\r\n commonParams.forEach((pair) => {\r\n pair.value && serviceUrl.searchParams.set(pair.key, pair.value);\r\n });\r\n\r\n let postResponse: Response;\r\n try {\r\n postResponse = await (sendRequest(\r\n async () => {\r\n const response: Response = await this.fetchImpl(serviceUrl.href, requestParams);\r\n if (response.status >= 400) {\r\n throw new Error(response.statusText);\r\n }\r\n return response;\r\n },\r\n `getContentAction${actionType}`\r\n ));\r\n } catch (error) {\r\n TelemetryBase.trackAppErrorEvent({\r\n ...ContentActionsToolbarAppErrors.ContentActionsPostActionError,\r\n message: \"Error while posting action for content actions toolbar\",\r\n pb: {\r\n ...ContentActionsToolbarAppErrors.ContentActionsPostActionError.pb,\r\n customMessage: `URL: ${serviceUrl.href}, error: ${error}`\r\n }\r\n });\r\n }\r\n\r\n return postResponse;\r\n }\r\n\r\n /**\r\n * Schema Translator for content preview data\r\n * @param {any} articleDataResponse response data from content preview api\r\n * @returns {DocumentData} translated document data\r\n */\r\n private TranslateContentPreviewDocumentData(articleDataResponse: any): DocumentData {\r\n const articleImageId = get(articleDataResponse, \"images[0].id\", undefined);\r\n const providerLogoId = get(articleDataResponse, \"provider.logo.id\", undefined);\r\n\r\n return {\r\n articleTitle: get(articleDataResponse, \"title\", undefined),\r\n articleImageUrl: articleImageId ? this.articleImageUrl.replace(\"${imageId}\", articleImageId) : undefined,\r\n providerName: get(articleDataResponse, \"provider.name\", undefined),\r\n providerLogoUrl: providerLogoId ? this.providerLogoUrl.replace(\"${logoId}\", providerLogoId) : undefined\r\n };\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { BreakpointIndexToPx, LikeDislikeActionKey, Status, TelemetryConstants } from \"./ContentActionsToolbar.constants\";\r\nimport { BreakpointTracker, identifyBreakpoint } from \"@microsoft/fast-layouts-react\";\r\nimport { ButtonItemType, ButtonType } from \"./components/sharing-toolbar/SharingToolbar\";\r\nimport { ContentActionsToolbarActions, ContentActionsToolbarConfig, ContentActionsToolbarProps, ContentActionsToolbarState } from \".\";\r\nimport { ContentActionsToolbarConnectorArgs, ContentActionsToolbarInspector, ContentActionsToolbarInspectorArgs } from \"./ContentActionsToolbar.inspector\";\r\nimport { DynamicReducer, IReducer } from \"@msnews/experiences-redux\";\r\nimport { ExperienceInitialProps, Telemetry, TelemetryProps, TelemetryTags, TelemetryTypes } from \"@msnews/experiences-base\";\r\nimport { IRequestContext, InspectorResponse, TelemetryBase, getAppEnvironment } from \"@msnews/core\";\r\nimport { OptionItemDislike, OptionItemLike, OptionItemUndoDislike, OptionItemUndoLike } from \"./components/sharing-toolbar/SharingToolbar.constants\";\r\nimport { SharedDocumentType, SharingHelper, ViewsStringResource } from \"@msnews/views-helpers\";\r\n\r\nimport { ComponentConnector } from \"@msnews/experiences-connector\";\r\nimport { ContentActionsToolbarAppErrors } from \"@msnews/diagnostics\";\r\nimport { ContentActionsToolbarServiceClient } from \"./services\";\r\nimport { ContentActionsToolbarTelemetryHelper } from \"./ContentActionsToolbar.telemetry\";\r\nimport { Store } from \"redux\";\r\nimport { getInnerWidth } from \"@msnews/isomorphic-util\";\r\n\r\n/**\r\n * An interface to represent the more options menu callbacks\r\n * @interface MoreOptionsCallbacks\r\n */\r\ninterface MoreOptionsCallbacks {\r\n /** On like event handler */\r\n onLike: (event: any) => void;\r\n\r\n /** On dislike evewnt hander */\r\n onDislike: (event: any) => void;\r\n}\r\n\r\n/**\r\n * The connector for the ContentActionsToolbar Experience\r\n * @class\r\n */\r\nexport class ContentActionsToolbarConnector extends ComponentConnector {\r\n\r\n /**\r\n * Telemetry related props for the experience.\r\n * @type {TelemetryProps}\r\n */\r\n private sharingToolbarTelemetryProps: TelemetryProps;\r\n\r\n /**\r\n * Telemetry related tags for the experience.\r\n * @type {TelemetryProps}\r\n */\r\n private sharingToolbarTelemetryTags: TelemetryTags;\r\n\r\n /**\r\n * An instance of the content action service client\r\n * @type {ContentActionsToolbarServiceClient}\r\n */\r\n private actionServiceClient: ContentActionsToolbarServiceClient;\r\n\r\n /**\r\n * Flag to indicate LikeDislike button is present, so content status needs to be obtained\r\n * @type {boolean}\r\n */\r\n private isContentStatusRequired: boolean;\r\n\r\n /**\r\n * Telemetry related tags for the more option button.\r\n */\r\n private moreOptionsTelemetryTags: {\r\n Like: TelemetryTags,\r\n Dislike: TelemetryTags,\r\n UndoLike: TelemetryTags,\r\n UndoDislike: TelemetryTags\r\n };\r\n\r\n /**\r\n * Initializes the ContentActionsToolbar connector\r\n * @param {string} namespace Redux subspace name for the connector\r\n * @param {string} parentNamespace Redux subspace name for the parent connector\r\n * @param {DynamicReducer} rootReducer Application root reducer\r\n * @param {IReducer} reducer The connector reducer\r\n * @param {Store} store The store or redux subspace that the connector will be connected to\r\n * @param {ContentActionsToolbarConfig} config The configuration properties from config index\r\n */\r\n public constructor(namespace: string,\r\n parentNamespace: string,\r\n rootReducer: DynamicReducer,\r\n reducer: IReducer,\r\n store: Store,\r\n config?: ContentActionsToolbarConfig,\r\n requestContext?: IRequestContext) {\r\n super(namespace, parentNamespace, rootReducer, reducer, store, config, requestContext);\r\n\r\n this.isContentStatusRequired = config.sharingButtons.some(t => t.buttonType == ButtonType.LikeDislike);\r\n }\r\n\r\n /**\r\n * State mapper\r\n * @param state The current state for the connector\r\n */\r\n public mapStateToProps(state: ContentActionsToolbarState): ContentActionsToolbarProps {\r\n const contentActionsToolbarConnectorArgs: ContentActionsToolbarConnectorArgs = {\r\n isContentStatusRequired: this.isContentStatusRequired\r\n };\r\n\r\n const inspectorArgs: ContentActionsToolbarInspectorArgs = {\r\n config: this.config,\r\n children: {},\r\n state: state,\r\n connectorArgs: contentActionsToolbarConnectorArgs\r\n };\r\n\r\n let contentActionsToolbarProps: ContentActionsToolbarProps = {};\r\n\r\n if (state.documentId && state.documentData && (!this.isContentStatusRequired || state.status)) {\r\n const inspectorResponse: InspectorResponse = ContentActionsToolbarInspector.inspect(inspectorArgs);\r\n\r\n let likeDislikeCallbacks: MoreOptionsCallbacks;\r\n if (inspectorResponse.props.sharingToolbar && inspectorResponse.props.sharingToolbar.sharingButtons && inspectorResponse.props.sharingToolbar.sharingButtons.length > 0) {\r\n const sharingButtons = inspectorResponse.props.sharingToolbar.sharingButtons;\r\n\r\n let status: Status;\r\n if (this.isContentStatusRequired) {\r\n status = inspectorResponse.props.contentStatus;\r\n likeDislikeCallbacks = this.BuildLikeDislikeCallbacks(status, state.documentId);\r\n this.InjectCallbacksToMoreOptionsMenu(sharingButtons.find(m => m.buttonType === ButtonType.MoreOptions), status, likeDislikeCallbacks);\r\n\r\n // Set likeDislike button callback based on content status\r\n sharingButtons.find(m => m.buttonType === ButtonType.LikeDislike).buttonData\r\n .onSelect = (event: any) => status === Status.DisLike ? likeDislikeCallbacks.onDislike(event) : likeDislikeCallbacks.onLike(event);\r\n }\r\n\r\n ContentActionsToolbarTelemetryHelper.InjectTelemetry(sharingButtons, status, this.sharingToolbarTelemetryProps);\r\n }\r\n\r\n contentActionsToolbarProps = {\r\n ...inspectorResponse.props,\r\n rootTelemetryTags: this.sharingToolbarTelemetryTags,\r\n ...this.telemetryTags,\r\n ...likeDislikeCallbacks\r\n };\r\n }\r\n\r\n return contentActionsToolbarProps;\r\n }\r\n\r\n /**\r\n * Perform one time initialization of the connector, including getting initial state from config\r\n * @param {ExperienceInitialProps} connectorProps Application initial props\r\n */\r\n public async onComponentConnect(initialProps?: ExperienceInitialProps): Promise {\r\n await ComponentConnector.prototype.onComponentConnect.call(this, initialProps);\r\n\r\n const { contentId, context: { staticPosition, isRSThree = false, documentType = SharedDocumentType.CMS } } = initialProps;\r\n if (!contentId) {\r\n ContentActionsToolbarActions.sharingToolbarError.getActionSender(this).send(new Error(ViewsStringResource.sharingToolbarLoadFailure));\r\n this.onAppError({\r\n ...ContentActionsToolbarAppErrors.ContentActionsSharingToolbarLoadError,\r\n message: `Error while initializing content actions toolbar. Requried initial props is not available: InitialProps = ${initialProps}`\r\n });\r\n return;\r\n }\r\n\r\n this.actionServiceClient = new ContentActionsToolbarServiceClient(window.fetch.bind(window));\r\n\r\n this.generateTelemetryTags();\r\n\r\n if (this.isContentStatusRequired) {\r\n this.getContentStatus(contentId);\r\n }\r\n this.getDocumentData(contentId, documentType);\r\n\r\n const currentBreakpoint = this.initializeBreakpointTracker(isRSThree);\r\n ContentActionsToolbarActions.initializeToolbar.getActionSender(this).send(currentBreakpoint, isRSThree, contentId, staticPosition);\r\n }\r\n\r\n /**\r\n * Initialize and subscribe Breakpoint tracker to detect change in toolbar position\r\n */\r\n private initializeBreakpointTracker(isRSThree: boolean): number {\r\n BreakpointTracker.defaultBreakpoint = identifyBreakpoint(getInnerWidth());\r\n BreakpointTracker.breakpoints = BreakpointIndexToPx;\r\n BreakpointTracker.update();\r\n BreakpointTracker.subscribe(breakpoint => {\r\n ContentActionsToolbarActions.ViewportUpdate.getActionSender(this).send(breakpoint, isRSThree);\r\n });\r\n\r\n return BreakpointTracker.currentBreakpoint();\r\n }\r\n\r\n /**\r\n * Fetches the current status (like/dislike/none) of the document\r\n * @param {ExperienceInitialProps} documentId The document Id\r\n */\r\n private async getContentStatus(documentId: string): Promise {\r\n const contentStatus = await this.actionServiceClient.GetPreferenceInitialState(documentId);\r\n if (!contentStatus) {\r\n ContentActionsToolbarActions.sharingToolbarError.getActionSender(this).send(new Error(ViewsStringResource.sharingToolbarLoadFailure));\r\n this.onAppError({\r\n ...ContentActionsToolbarAppErrors.ContentActionsSharingToolbarLoadError,\r\n message: \"Error while retrieving content status data from API\"\r\n });\r\n return;\r\n }\r\n ContentActionsToolbarActions.ContentStatuReady.getActionSender(this).send(contentStatus);\r\n }\r\n\r\n /**\r\n * Fetches the required document data for the experience\r\n * @param {ExperienceInitialProps} documentId The document Id\r\n */\r\n private async getDocumentData(documentId: string, documentType: SharedDocumentType): Promise {\r\n const documentData = await this.actionServiceClient.GetDocumentData(documentId);\r\n if (!documentData) {\r\n ContentActionsToolbarActions.sharingToolbarError.getActionSender(this).send(new Error(ViewsStringResource.sharingToolbarLoadFailure));\r\n this.onAppError({\r\n ...ContentActionsToolbarAppErrors.ContentActionsSharingToolbarLoadError,\r\n message: \"Error while retrieving content status data from API\"\r\n });\r\n return;\r\n }\r\n\r\n documentData.sharingShortUrl = SharingHelper.shortUrlBuilder({ documentId, documentType }, getAppEnvironment().CurrentMarket);\r\n ContentActionsToolbarActions.documentDataReady.getActionSender(this).send(documentData);\r\n }\r\n\r\n /**\r\n * Builds the like and dislike callbacks\r\n * @param {Status} The content status\r\n * @param {DocumentId} The document id\r\n * @returns {MoreOptionsCallbacks} The MoreOptionsCallbacks interface implementation\r\n */\r\n private BuildLikeDislikeCallbacks(status: Status, documentId: string): MoreOptionsCallbacks {\r\n return {\r\n onLike: (event: Event) => {\r\n if (status !== Status.Like) {\r\n this.actionServiceClient.Like(documentId);\r\n TelemetryBase.trackEvent({ type: \"click_nonnav\", target: event.currentTarget }, null, null, OptionItemLike.key.toUpperCase());\r\n ContentActionsToolbarActions.likeContent.getActionSender(this).send();\r\n } else {\r\n this.actionServiceClient.Unlike(documentId);\r\n TelemetryBase.trackEvent({ type: \"click_nonnav\", target: event.currentTarget }, null, null, OptionItemUndoLike.key.toUpperCase());\r\n ContentActionsToolbarActions.unlikeContent.getActionSender(this).send();\r\n }\r\n return;\r\n },\r\n onDislike: (event: Event) => {\r\n if (status !== Status.DisLike) {\r\n this.actionServiceClient.Dislike(documentId);\r\n TelemetryBase.trackEvent({ type: \"click_nonnav\", target: event.currentTarget }, null, null, OptionItemDislike.key.toUpperCase());\r\n ContentActionsToolbarActions.dislikeContent.getActionSender(this).send();\r\n } else {\r\n this.actionServiceClient.Undislike(documentId);\r\n TelemetryBase.trackEvent({ type: \"click_nonnav\", target: event.currentTarget }, null, null, OptionItemUndoDislike.key.toUpperCase());\r\n ContentActionsToolbarActions.undislikeContent.getActionSender(this).send();\r\n }\r\n return;\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Injects callbacks to more options menu buttons\r\n * @param {ButtonItemType} moreOptionsButton The more option button\r\n * @param {Status} status The current content status\r\n * @param {MoreOptionsCallbacks} The more options menu callbacks interface\r\n */\r\n private InjectCallbacksToMoreOptionsMenu(moreOptionsButton: ButtonItemType, status: Status, callbacks: MoreOptionsCallbacks): void {\r\n if (!moreOptionsButton || !moreOptionsButton.buttonData || !moreOptionsButton.buttonData.menuItems) {\r\n return;\r\n }\r\n const { menuItems } = moreOptionsButton.buttonData;\r\n\r\n if (status === Status.Like) {\r\n menuItems.find(e => e.key === LikeDislikeActionKey.undoliked).onSelect = (event: any) => callbacks.onLike(event);\r\n menuItems.find(e => e.key === LikeDislikeActionKey.dislike).onSelect = (event: any) => callbacks.onDislike(event);\r\n } else if (status === Status.DisLike) {\r\n menuItems.find(e => e.key === LikeDislikeActionKey.undodisliked).onSelect = (event: any) => callbacks.onDislike(event);\r\n menuItems.find(e => e.key === LikeDislikeActionKey.like).onSelect = (event: any) => callbacks.onLike(event);\r\n } else {\r\n menuItems.find(e => e.key === LikeDislikeActionKey.dislike).onSelect = (event: any) => callbacks.onDislike(event);\r\n }\r\n }\r\n\r\n /**\r\n * Sets base telemetry data for Content Actions Toolbar\r\n */\r\n private generateTelemetryTags(): void {\r\n this.sharingToolbarTelemetryProps = Telemetry.getChildTelemetryItem(this.telemetryProps, TelemetryConstants.socialToolbarTelemetryName, TelemetryTypes.Module);\r\n this.sharingToolbarTelemetryTags = Telemetry.render(this.sharingToolbarTelemetryProps);\r\n this.moreOptionsTelemetryTags = {\r\n Like: Telemetry.render(Telemetry.getChildTelemetryItem(this.sharingToolbarTelemetryProps, OptionItemLike.key.toUpperCase(), TelemetryTypes.Like)),\r\n Dislike: Telemetry.render(Telemetry.getChildTelemetryItem(this.sharingToolbarTelemetryProps, OptionItemDislike.key.toUpperCase(), TelemetryTypes.Dislike)),\r\n UndoLike: Telemetry.render(Telemetry.getChildTelemetryItem(this.sharingToolbarTelemetryProps, OptionItemUndoLike.key.toUpperCase(), TelemetryTypes.Unlike)),\r\n UndoDislike: Telemetry.render(Telemetry.getChildTelemetryItem(this.sharingToolbarTelemetryProps, OptionItemUndoDislike.key.toUpperCase(), TelemetryTypes.Undislike))\r\n };\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { ButtonItemType, ButtonType } from \"./components/sharing-toolbar/SharingToolbar\";\r\nimport { LikeDislikeActionKey, TelemetryConstants } from \"./ContentActionsToolbar.constants\";\r\nimport { OptionItemDislike, OptionItemLike, OptionItemUndoDislike, OptionItemUndoLike } from \"./components/sharing-toolbar/SharingToolbar.constants\";\r\nimport { SocialMediaItemConfigAttributes, SocialMediaTarget, ViewsUtility } from \"@msnews/views-helpers\";\r\nimport { Telemetry, TelemetryProps, TelemetryTypes } from \"@msnews/experiences-base\";\r\n\r\nimport { Status } from \".\";\r\nimport { TelemetryBase } from \"@msnews/core\";\r\n\r\n/**\r\n * Helper class to implement telemetry for content actions toolbar\r\n * @export\r\n * @class\r\n */\r\nexport class ContentActionsToolbarTelemetryHelper {\r\n\r\n /**\r\n * Injects telemetry data into sharing buttons array\r\n * @param {ButtonItemType[]} sharingButtons The sharing buttons array\r\n * @param {Status} status The current content status\r\n * @param {TelemetryProps} sharingToolbarTelemetryProps The sharing toolbar telemetry props\r\n * @param {TrackTelemetryEventSignature} handleTelemetryCall Dispatches click telemetry events\r\n */\r\n public static InjectTelemetry(sharingButtons: ButtonItemType[], status: Status, sharingToolbarTelemetryProps: TelemetryProps): void {\r\n sharingButtons.map(button => {\r\n let buttonTelemetryName: string;\r\n switch (button.buttonType) {\r\n case ButtonType.SocialMedia:\r\n buttonTelemetryName = button.buttonData.mediaType.toUpperCase();\r\n button.buttonData.newWindowTelemetryCall = (event: any) => {\r\n TelemetryBase.trackEvent({ type: \"click\", target: event.currentTarget }, null, null, buttonTelemetryName);\r\n return;\r\n };\r\n break;\r\n case ButtonType.ShareDialog:\r\n if (button.buttonData.shareDialogProps && button.buttonData.shareDialogProps.socialMediaItems) {\r\n buttonTelemetryName = button.buttonType.toUpperCase();\r\n const { shareDialogProps } = button.buttonData;\r\n button.buttonData.onSelect = (event: any) => {\r\n TelemetryBase.trackEvent({ type: \"click_nonnav\", target: event.currentTarget }, null, null, buttonTelemetryName);\r\n return;\r\n };\r\n if (button.buttonData.target === SocialMediaTarget.newWindow) {\r\n button.buttonData.newWindowTelemetryCall = (event: any) => {\r\n TelemetryBase.trackEvent({ type: \"click\", target: event.currentTarget }, null, null, buttonTelemetryName);\r\n return;\r\n };\r\n }\r\n\r\n const mediaTelemetryProps: { [s: string]: TelemetryProps } = shareDialogProps.socialMediaItems.reduce(\r\n (result, value) => {\r\n if (value) {\r\n result[value.toLowerCase()] = Telemetry.getChildTelemetryItem(sharingToolbarTelemetryProps, value.toUpperCase(), TelemetryTypes.Share);\r\n result[value.toLowerCase()].userFacingText = `tmx-stb-sd-${value.toLowerCase()}`;\r\n }\r\n return result;\r\n },\r\n {}\r\n );\r\n shareDialogProps.copyButtonTelemetryProps = Telemetry.getChildTelemetryItem(sharingToolbarTelemetryProps, TelemetryConstants.copyLinkTelemetryName, TelemetryTypes.Share);\r\n const closeButtonTelemetryProps = Telemetry.getChildTelemetryItem(sharingToolbarTelemetryProps, TelemetryConstants.closeDialogTelemetryName, TelemetryTypes.Close);\r\n shareDialogProps.closeButtonTelemetryTags = Telemetry.render(closeButtonTelemetryProps);\r\n shareDialogProps.shareIconTelemetryProps = mediaTelemetryProps;\r\n shareDialogProps.socialMediaConfigOverride = shareDialogProps.socialMediaItems.reduce((result, mediaItem) => {\r\n let mediaItemOverride: SocialMediaItemConfigAttributes = {};\r\n if (shareDialogProps.socialMediaConfigOverride && shareDialogProps.socialMediaConfigOverride[mediaItem]) {\r\n mediaItemOverride = {...shareDialogProps.socialMediaConfigOverride[mediaItem]};\r\n }\r\n mediaItemOverride.newWindowTelemetryCall = event => TelemetryBase.trackEvent({ type: \"click\", target: event.currentTarget }, null, null, mediaItem.toUpperCase());\r\n result[mediaItem] = mediaItemOverride;\r\n return result;\r\n }, {}\r\n );\r\n const shareDialogTelemetryProps = Telemetry.getChildTelemetryItem(sharingToolbarTelemetryProps, TelemetryConstants.shareDialogTelemetryName, TelemetryTypes.Interaction);\r\n button.buttonData.shareDialogProps = {\r\n ...shareDialogProps,\r\n ...Telemetry.render(shareDialogTelemetryProps)\r\n\r\n };\r\n button.buttonData.articleTelemetryTags = Telemetry.render(Telemetry.getChildTelemetryItem(sharingToolbarTelemetryProps, TelemetryConstants.shareArticleTelemetryName, TelemetryTypes.Share));\r\n }\r\n break;\r\n case ButtonType.LikeDislike:\r\n if (status === Status.Like) {\r\n buttonTelemetryName = OptionItemUndoLike.key.toUpperCase();\r\n } else if (status === Status.DisLike) {\r\n buttonTelemetryName = OptionItemUndoDislike.key.toUpperCase();\r\n } else {\r\n buttonTelemetryName = OptionItemLike.key.toUpperCase();\r\n }\r\n break;\r\n case ButtonType.MoreOptions: {\r\n buttonTelemetryName = button.buttonType.toUpperCase();\r\n const menuItems = button.buttonData.menuItems;\r\n if (status === Status.Like) {\r\n menuItems.find(e => e.key === LikeDislikeActionKey.undoliked).telemetryTag = Telemetry.render(Telemetry.getChildTelemetryItem(sharingToolbarTelemetryProps, OptionItemUndoLike.key.toUpperCase(), TelemetryTypes.Unlike));\r\n menuItems.find(e => e.key === LikeDislikeActionKey.dislike).telemetryTag = Telemetry.render(Telemetry.getChildTelemetryItem(sharingToolbarTelemetryProps, OptionItemDislike.key.toUpperCase(), TelemetryTypes.Dislike));\r\n } else if (status === Status.DisLike) {\r\n menuItems.find(e => e.key === LikeDislikeActionKey.undodisliked).telemetryTag = Telemetry.render(Telemetry.getChildTelemetryItem(sharingToolbarTelemetryProps, OptionItemUndoDislike.key.toUpperCase(), TelemetryTypes.Undislike));\r\n menuItems.find(e => e.key === LikeDislikeActionKey.like).telemetryTag = Telemetry.render(Telemetry.getChildTelemetryItem(sharingToolbarTelemetryProps, OptionItemLike.key.toUpperCase(), TelemetryTypes.Like));\r\n } else {\r\n menuItems.find(e => e.key === LikeDislikeActionKey.dislike).telemetryTag = Telemetry.render(Telemetry.getChildTelemetryItem(sharingToolbarTelemetryProps, OptionItemDislike.key.toUpperCase(), TelemetryTypes.Dislike));\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n button.telemetryTags = Telemetry.render(ViewsUtility.getChildTelemetryItem(sharingToolbarTelemetryProps, buttonTelemetryName, TelemetryTypes.Share));\r\n if (button.telemetryTags) {\r\n // Keeping same telemetry headline data as found today in Prime for AB testing\r\n button.telemetryTags[\"data-hl\"] = `tmx-stb-${buttonTelemetryName.toLowerCase()}`;\r\n }\r\n });\r\n }\r\n\r\n}\r\n","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { CommonExperienceProps, TelemetryTags } from \"@msnews/experiences-base\";\r\n\r\nimport { AppError } from \"@msnews/diagnostics\";\r\nimport { ContentActionsToolbarClassNames } from \".\";\r\nimport { ManagedClasses } from \"@microsoft/fast-components-class-name-contracts-msft\";\r\nimport { SharingToolbarProps } from \"./components/sharing-toolbar\";\r\nimport { Status } from \"./ContentActionsToolbar.constants\";\r\n\r\n/**\r\n * Toolbar positioning options\r\n */\r\nexport enum ToolbarPosition {\r\n horizontal = \"horizontal\",\r\n vertical = \"vertical\"\r\n}\r\n\r\n/**\r\n * An interface to represent the ContentActionsToolbar jss managed classes.\r\n * @export\r\n * @interface ContentActionsToolbarManagedClasses\r\n */\r\nexport type ContentActionsToolbarManagedClasses = ManagedClasses;\r\n\r\n/**\r\n * An interface to represent the ContentActionsToolbar handled props.\r\n * @export\r\n * @interface ContentActionsToolbarHandledProps\r\n */\r\nexport interface ContentActionsToolbarHandledProps extends CommonExperienceProps, ContentActionsToolbarManagedClasses {\r\n /**\r\n * Defines the toolbar position in case of single static position. Undefined otherwise.\r\n */\r\n staticPosition?: ToolbarPosition;\r\n\r\n /**\r\n * Position to render toolbar in\r\n * @type {ToolbarPosition}\r\n */\r\n position?: ToolbarPosition;\r\n\r\n /**\r\n * Sharing toolbar props\r\n * @type {SharingToolbarProps}\r\n */\r\n sharingToolbar?: SharingToolbarProps;\r\n\r\n /**\r\n * Content Status\r\n * @type {Status}\r\n */\r\n contentStatus?: Status;\r\n\r\n /**\r\n * Sharing toolbar error\r\n * @type {Error}\r\n */\r\n sharingError?: Error;\r\n\r\n /**\r\n * Root element telemetry tags\r\n * @type {TelemetryTags}\r\n */\r\n rootTelemetryTags?: TelemetryTags;\r\n}\r\n\r\n/**\r\n * An interface to represent the ContentActionsToolbar unhandled props.\r\n * @export\r\n * @interface ContentActionsToolbarUnhandledProps\r\n */\r\nexport type ContentActionsToolbarUnhandledProps = React.HTMLAttributes;\r\n\r\n/**\r\n * The ContentActionsToolbar props type\r\n */\r\nexport type ContentActionsToolbarProps = ContentActionsToolbarHandledProps & ContentActionsToolbarUnhandledProps;\r\n\r\n/**\r\n * App Error Event Tracking Callback Signature\r\n */\r\nexport type TrackAppErrorEventSignature = (error: AppError) => void;\r\n\r\n/**\r\n * Click event tracking callback signature\r\n */\r\nexport type TrackTelemetryEventSignature = (event: Object, element: HTMLElement, destination: string, headline: string) => void;","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { ActionHandler, IActionPayload, IReducer } from \"@msnews/experiences-redux\";\r\nimport { ContentActionsToolbarActions, ContentActionsToolbarState, ToolbarPosition } from \".\";\r\nimport { Status, ToolbarBreakpoints } from \"./ContentActionsToolbar.constants\";\r\n\r\nimport { DocumentData } from \"./ContentActionsToolbar.state\";\r\n\r\n/**\r\n * Experience initial state.\r\n */\r\nconst initialState: ContentActionsToolbarState = {\r\n documentData: undefined,\r\n documentId: undefined,\r\n position: undefined,\r\n sharingError: undefined,\r\n staticPosition: undefined,\r\n status: undefined\r\n};\r\n\r\n/**\r\n * The reducer for the ContentActionsToolbar connector, and the ContentActionsToolbarState\r\n * @export\r\n * @class\r\n */\r\nexport class ContentActionsToolbarReducer implements IReducer {\r\n /**\r\n * Update the state for the connector, based on the action being applied\r\n * @param state The previous state\r\n * @param actionPayload The action being applied\r\n */\r\n public reduce(state: ContentActionsToolbarState, actionPayload: IActionPayload): ContentActionsToolbarState {\r\n // Return the initial state for this experience, including the config.\r\n if (!state) {\r\n return initialState;\r\n }\r\n\r\n // Return the passed in state, if there is no action specified\r\n if (!actionPayload) {\r\n return state;\r\n }\r\n\r\n let newState: ContentActionsToolbarState;\r\n\r\n // handle actions\r\n ActionHandler.handleAction(actionPayload, ContentActionsToolbarActions.initializeToolbar, (breakpointIndex: number,\r\n isRSThreeDevice: boolean,\r\n documentId: string,\r\n staticPosition: ToolbarPosition) => {\r\n newState = initialState;\r\n newState.position = this.getToolbarPosition(staticPosition, isRSThreeDevice, breakpointIndex);\r\n newState.documentId = documentId;\r\n newState.staticPosition = staticPosition;\r\n });\r\n\r\n ActionHandler.handleAction(actionPayload, ContentActionsToolbarActions.ContentStatuReady, (status: Status) => {\r\n newState = {\r\n ...state,\r\n status\r\n };\r\n });\r\n\r\n ActionHandler.handleAction(actionPayload, ContentActionsToolbarActions.documentDataReady, (documentData: DocumentData) => {\r\n newState = {\r\n ...state,\r\n documentData\r\n };\r\n });\r\n\r\n ActionHandler.handleAction(actionPayload, ContentActionsToolbarActions.likeContent, () => {\r\n newState = {\r\n ...state,\r\n status: Status.Like\r\n };\r\n });\r\n\r\n ActionHandler.handleAction(actionPayload, ContentActionsToolbarActions.unlikeContent, () => {\r\n newState = {\r\n ...state,\r\n status: Status.None\r\n };\r\n });\r\n\r\n ActionHandler.handleAction(actionPayload, ContentActionsToolbarActions.dislikeContent, () => {\r\n newState = {\r\n ...state,\r\n status: Status.DisLike\r\n };\r\n });\r\n\r\n ActionHandler.handleAction(actionPayload, ContentActionsToolbarActions.undislikeContent, () => {\r\n newState = {\r\n ...state,\r\n status: Status.None\r\n };\r\n });\r\n\r\n ActionHandler.handleAction(actionPayload, ContentActionsToolbarActions.ViewportUpdate, (breakpointIndex: number, isRSThreeDevice: boolean) => {\r\n newState = {\r\n ...state,\r\n position: this.getToolbarPosition(state.staticPosition, isRSThreeDevice, breakpointIndex)\r\n };\r\n });\r\n\r\n ActionHandler.handleAction(actionPayload, ContentActionsToolbarActions.sharingToolbarError, (error: Error) => {\r\n newState = {\r\n ...state,\r\n sharingError: error\r\n };\r\n });\r\n\r\n return newState || state;\r\n }\r\n\r\n /**\r\n * Calculates current toolbar position\r\n * @param staticPosition Defines orientation for static position if single position. Undefined otherwise.\r\n * @param isRSThreeDevice Indicates if device is RSThree\r\n * @param breakpointIndex Current breakpoint index.\r\n * @returns Toolbar current position\r\n */\r\n private getToolbarPosition(staticPosition: ToolbarPosition, isRSThreeDevice: boolean, breakpointIndex: number): ToolbarPosition {\r\n if (staticPosition) {\r\n return staticPosition;\r\n } else {\r\n const currentBreakpointIndex = isRSThreeDevice ? ToolbarBreakpoints.Breakpoint3_2 : ToolbarBreakpoints.Breakpoint3_3;\r\n return breakpointIndex >= currentBreakpointIndex ? ToolbarPosition.vertical : ToolbarPosition.horizontal;\r\n }\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport {\r\n DesignSystem,\r\n ElevationMultiplier,\r\n applyElevation,\r\n highContrastSelector,\r\n neutralFillActive,\r\n neutralFillHover,\r\n neutralForegroundRest,\r\n neutralLayerCard\r\n} from \"@microsoft/fast-components-styles-msft\";\r\nimport { applyLocalizedProperty, toPx } from \"@microsoft/fast-jss-utilities\";\r\nimport { iconContainerDefaultColor, likeDislikeIconBackroundColor, moreOptionsIconColors } from \"./SharingToolbar.constants\";\r\n\r\nimport { CardContextMenuClassNameContract } from \"@msnews/card-context-menu\";\r\nimport { ComponentStyles } from \"@microsoft/fast-jss-manager\";\r\nimport { SharingToolbarClassNames } from \"./\";\r\n\r\n// reduce listItem dimension to 32, remove margin for iconListHorizontal (3px) and add list icon margin (in between) dinamically hor/vert\r\nconst iconListItemDimension = 32;\r\nconst iconContainerDimension = 32;\r\nconst iconImageDimension = 18;\r\nconst iconPadding = 10;\r\n\r\n/**\r\n * The SharingToolbar styles\r\n * @type {ComponentStyles}\r\n */\r\nexport const SharingToolbarStyles: ComponentStyles = (config: DesignSystem) => {\r\n return {\r\n icon_none: {},\r\n icon_like: {},\r\n icon_dislike: {},\r\n iconListHorizontal: {\r\n \"list-style\": \"none\",\r\n padding: \"0\",\r\n margin: \"0\",\r\n \"text-align\": \"center\",\r\n \"& $iconListItem\": {\r\n [applyLocalizedProperty(\"margin-right\", \"margin-left\", config.direction)]: toPx(iconPadding)\r\n }\r\n },\r\n iconListVertical: {\r\n float: \"left\",\r\n height: \"auto\",\r\n width: toPx(iconListItemDimension),\r\n position: \"absolute\",\r\n \"& $iconListItem\": {\r\n \"margin-bottom\": toPx(iconPadding)\r\n }\r\n },\r\n iconListItem: {\r\n \"align-items\": \"center\",\r\n display: \"inline-flex\",\r\n height: toPx(iconListItemDimension),\r\n \"justify-content\": \"center\",\r\n width: toPx(iconListItemDimension),\r\n \"&:hover\": {\r\n cursor: \"pointer\"\r\n }\r\n },\r\n shareDialog: {\r\n \"background-color\": \"#f00\"\r\n },\r\n iconContainer: {\r\n cursor: \"pointer\",\r\n border: \"unset\",\r\n padding: \"unset\",\r\n \"background-color\": iconContainerDefaultColor,\r\n \"border-radius\": \"50%\",\r\n color: neutralForegroundRest,\r\n height: toPx(iconContainerDimension),\r\n \"justify-content\": \"center\",\r\n position: \"relative\",\r\n width: toPx(iconContainerDimension),\r\n \"$icon_none &\": {\r\n \"background-color\": likeDislikeIconBackroundColor.none\r\n },\r\n \"$icon_like &\": {\r\n \"background-color\": likeDislikeIconBackroundColor.like\r\n },\r\n \"$icon_dislike &\": {\r\n \"background-color\": likeDislikeIconBackroundColor.dislike\r\n },\r\n \"& img\": {\r\n \"vertical-align\": \"unset\"\r\n }\r\n },\r\n highContrast: {\r\n [highContrastSelector]: {\r\n background: \"Highlight\",\r\n border: \"1px solid Highlight\",\r\n \"border-radius\": \"50%\",\r\n \"& svg\": {\r\n fill: \"Highlight\"\r\n }\r\n }\r\n },\r\n iconImage: {\r\n bottom: \"0\",\r\n left: \"0\",\r\n margin: \"7px\",\r\n right: \"0\",\r\n top: \"0\",\r\n height: toPx(iconImageDimension),\r\n width: toPx(iconImageDimension)\r\n },\r\n moreOptions: {\r\n height: toPx(iconContainerDimension),\r\n width: toPx(iconContainerDimension),\r\n [highContrastSelector]: {\r\n width: toPx(iconContainerDimension - 2),\r\n height: toPx(iconContainerDimension - 2)\r\n }\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * The context menu styles\r\n * @type {ComponentStyles}\r\n */\r\nexport const contextMenuStyles: Partial> = {\r\n menuContainer: {\r\n \"background-color\": moreOptionsIconColors.background,\r\n \"border-radius\": \"50%\",\r\n height: toPx(iconContainerDimension),\r\n width: toPx(iconContainerDimension),\r\n [highContrastSelector]: {\r\n width: toPx(iconContainerDimension - 2),\r\n height: toPx(iconContainerDimension - 2)\r\n }\r\n },\r\n settingButton: {\r\n background: \"none\",\r\n border: \"0\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n padding: \"0\",\r\n height: toPx(iconContainerDimension),\r\n margin: \"0\",\r\n width: toPx(iconContainerDimension),\r\n \"& svg\": {\r\n color: moreOptionsIconColors.foreground,\r\n display: \"flex\",\r\n margin: \"auto\",\r\n height: \"inherit\",\r\n width: toPx(iconImageDimension),\r\n \"& path\": {\r\n fill: \"currentColor\"\r\n }\r\n }\r\n },\r\n contextMenu: {\r\n ...applyElevation(ElevationMultiplier.e11),\r\n \"background-color\": neutralLayerCard,\r\n border: \"none\",\r\n display: \"grid\",\r\n padding: \"8px 0\",\r\n margin: \"0 14px\",\r\n width: \"240px\"\r\n },\r\n contextMenuItem: {\r\n background: neutralLayerCard,\r\n \"box-sizing\": \"border-box\",\r\n border: \"none\",\r\n display: \"inline-block\",\r\n padding: \"6px 16px\",\r\n width: \"auto\",\r\n \"&:hover, &:focus\": {\r\n background: neutralFillHover(neutralLayerCard),\r\n border: \"none\"\r\n },\r\n \"&:active\": {\r\n background: neutralFillActive(neutralLayerCard)\r\n }\r\n },\r\n contextMenuItem_contentRegion: {\r\n color: neutralForegroundRest(neutralLayerCard),\r\n \"grid-column-start\": \"1\"\r\n }\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { ArticleCard, ArticleProviderProps } from \"@msnews/article-card\";\r\nimport {\r\n DialogArticleCardHandledProps,\r\n DialogArticleCardManagedClasses,\r\n DialogArticleCardUnhandledProps\r\n} from \"./DialogArticleCard.props\";\r\nimport { HandledPropsKeys, ImageResizeMode, generateImageUrlFromBaseUrl } from \"@msnews/core\";\r\nimport { HeadingProps, HeadingSize, HeadingTag } from \"@microsoft/fast-components-react-msft\";\r\nimport { TypographyProps, TypographySize, TypographyTag } from \"@microsoft/fast-components-react-base\";\r\n\r\nimport Foundation from \"@microsoft/fast-components-foundation-react\";\r\n\r\n/**\r\n * Dialog article card\r\n * @class - Dialog Article Card\r\n * @classdesc - An dialog article Card composed from the base article card.\r\n */\r\nexport class DialogArticleCard extends Foundation {\r\n /**\r\n * Handled props contract\r\n * @protected\r\n * @type { HandledPropsKeys }\r\n */\r\n protected handledProps: HandledPropsKeys = {\r\n anchorRef: undefined,\r\n articleId: undefined,\r\n headlineTitle: undefined,\r\n href: undefined,\r\n image: undefined,\r\n managedClasses: undefined,\r\n provider: undefined\r\n };\r\n\r\n /**\r\n * Constructs an DialogArticleCard component\r\n * @constructor\r\n * @param { DialogArticleCardHandledProps & DialogArticleCardManagedClasses } props props contract\r\n */\r\n constructor(props: DialogArticleCardHandledProps & DialogArticleCardManagedClasses) {\r\n super(props);\r\n }\r\n\r\n /**\r\n * Component rendered\r\n * @method\r\n * @returns {JSX.Element} the DialogArticleCard component\r\n */\r\n public render(): JSX.Element {\r\n const { href, image, managedClasses } = this.props;\r\n\r\n if (image && image.src) {\r\n image.src = generateImageUrlFromBaseUrl(\r\n image.src,\r\n {\r\n width: 100,\r\n height: 100,\r\n enableDpiScaling: false,\r\n mode: ImageResizeMode.Scale\r\n });\r\n }\r\n\r\n const articleCard = (\r\n \r\n );\r\n\r\n if (image) {\r\n return (\r\n articleCard\r\n );\r\n } else {\r\n return (\r\n
    \r\n {articleCard}\r\n
    \r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Coerces the title props to enforce visual level\r\n * @method\r\n * @returns {HeadingProps} the headline title props\r\n */\r\n private coerceTitleProps(): any {\r\n const coercedProps: Partial = {\r\n size: HeadingSize._6,\r\n tag: HeadingTag.h3\r\n };\r\n\r\n return { ...this.props.headlineTitle, ...coercedProps };\r\n }\r\n\r\n /**\r\n * Coerces the provider props to enforce visual level of the name\r\n * @method\r\n * @returns {ArticleProviderProps} the provider props\r\n */\r\n private coerceProviderProps(): ArticleProviderProps {\r\n const { provider } = this.props;\r\n if (!provider) {\r\n return;\r\n }\r\n\r\n const coercedProviderNameProps: Partial = {\r\n size: TypographySize._8,\r\n tag: TypographyTag.h5\r\n };\r\n\r\n const coercedProps: Partial = {\r\n name: { ...provider.name, ...coercedProviderNameProps }\r\n };\r\n\r\n const coerceProviderProps = { ...provider, ...coercedProps };\r\n if (!coerceProviderProps.image || !coerceProviderProps.image.src) {\r\n coerceProviderProps.image = undefined;\r\n }\r\n\r\n return coerceProviderProps;\r\n }\r\n}\r\n\r\nexport * from \"./DialogArticleCard.props\";","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { applyFontWeightNormal, applyFontWeightSemiBold, applyTypeRampConfig, getLineHeight, neutralFillStealthRest, neutralForegroundHover } from \"@microsoft/fast-components-styles-msft\";\r\nimport { applyLocalizedProperty, applyMaxLines, toPx } from \"@microsoft/fast-jss-utilities\";\r\n\r\nimport { ComponentStyles } from \"@microsoft/fast-jss-manager\";\r\nimport { DesignSystem } from \"@microsoft/fast-components-styles-msft\";\r\nimport { DialogArticleCardClassNameContract } from \"./DialogArticleCard.classnames\";\r\n\r\nconst ArticleCardImageBorderRadius = 2;\r\nconst RelatedCardHeight = 100;\r\nconst RelatedCardImageSize = 100;\r\nconst HeadlineTextMargin = 16;\r\n\r\nconst borderColor = \"rgba(0,0,0, 0.05)\";\r\nconst DialogArticleCardTypeRamp = \"t7\";\r\n\r\n/**\r\n * The DialogArticleCard styles\r\n * @type {ComponentStyles}\r\n */\r\nexport const DialogArticleCardStyles: ComponentStyles = (config: DesignSystem) => {\r\n return {\r\n articleCard: {\r\n background: \"none\",\r\n \"border-bottom\": `1px solid ${borderColor}`,\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n padding: \"15px 0\",\r\n position: \"relative\"\r\n },\r\n articleCard_content: {\r\n display: \"flex\",\r\n flex: \"1\",\r\n \"text-decoration\": \"none\",\r\n \"&:hover\": {\r\n \"& $articleCard_headline\": {\r\n color: neutralForegroundHover(neutralFillStealthRest),\r\n \"text-decoration\": \"underline\"\r\n },\r\n \"& $articleCard_imageOverlay\": {\r\n opacity: 0.1\r\n }\r\n }\r\n },\r\n articleCard_imageWrapper: {\r\n position: \"relative\",\r\n \"& $articleCard_image\": {\r\n height: toPx(RelatedCardImageSize)\r\n }\r\n },\r\n articleCard_image: {\r\n \"border-radius\": toPx(ArticleCardImageBorderRadius),\r\n \"object-fit\": \"cover\",\r\n width: toPx(RelatedCardImageSize)\r\n },\r\n articleCard_imageOverlay: {\r\n height: \"100%\",\r\n opacity: \"0\",\r\n position: \"absolute\",\r\n top: \"0\",\r\n width: \"100%\"\r\n },\r\n articleCard_textWrapper: {\r\n \"box-sizing\": \"border-box\",\r\n display: \"flex\",\r\n flex: \"1\",\r\n height: toPx(RelatedCardHeight),\r\n padding: applyLocalizedProperty(`0 0 0 ${toPx(HeadlineTextMargin)}`, `0 ${toPx(HeadlineTextMargin)} 0 0`, config.direction)\r\n },\r\n articleCard_headline: {\r\n \"text-align\": applyLocalizedProperty(\"left\", \"right\", config.direction),\r\n \"& $articleCard_headlineText\": {\r\n ...applyFontWeightSemiBold(),\r\n ...applyMaxLines(3, getLineHeight(DialogArticleCardTypeRamp)),\r\n ...applyTypeRampConfig(DialogArticleCardTypeRamp)\r\n }\r\n },\r\n articleCard_headlineText: {\r\n \"padding-top\": \"3px\"\r\n },\r\n articleCard_headlineMask: {},\r\n articleCard_provider: {\r\n bottom: \"23px\",\r\n display: \"inline-flex\",\r\n position: \"absolute\",\r\n \"& $articleCard_providerImage\": {\r\n height: \"16px\"\r\n },\r\n \"& $articleCard_providerTitle\": {\r\n \"line-height\": \"16px\"\r\n }\r\n },\r\n articleCard_providerImage: {\r\n display: \"inline-block\",\r\n [applyLocalizedProperty(\"padding-right\", \"padding-left\", config.direction)]: \"8px\"\r\n },\r\n articleCard_providerTitle: {\r\n display: \"inline-block\",\r\n \"vertical-align\": \"top\",\r\n ...applyFontWeightNormal()\r\n },\r\n articleCard_noImage: {\r\n \"& $articleCard_textWrapper\": {\r\n height: \"auto\",\r\n \"text-align\": applyLocalizedProperty(\"left\", \"right\", config.direction)\r\n },\r\n \"& $articleCard_provider\": {\r\n \"margin-top\": \"15px\",\r\n position: \"static\"\r\n },\r\n \"& $articleCard_headlineText\": {\r\n \"padding-top\": \"0\"\r\n }\r\n }\r\n };\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport {\r\n DialogArticleCard as BaseDialogArticleCard,\r\n DialogArticleCardHandledProps as BaseDialogArticleCardHandledProps,\r\n DialogArticleCardProps as BaseDialogArticleCardProps,\r\n DialogArticleCardManagedClasses,\r\n DialogArticleCardUnhandledProps\r\n} from \"./DialogArticleCard\";\r\nimport manageJss, { ManagedJSSProps } from \"@microsoft/fast-jss-manager-react\";\r\n\r\nimport { DesignSystem } from \"@microsoft/fast-components-styles-msft\";\r\nimport { DialogArticleCardClassNameContract } from \"./DialogArticleCard.classnames\";\r\nimport { DialogArticleCardStyles } from \"./DialogArticleCard.styles\";\r\nimport { Subtract } from \"utility-types\";\r\n\r\n/*\r\n * The type returned by manageJss type is very complicated so we'll let the\r\n * compiler infer the type instead of re-declaring just for the package export\r\n */\r\nconst DialogArticleCard = manageJss(DialogArticleCardStyles)(BaseDialogArticleCard);\r\ntype DialogArticleCard = InstanceType;\r\n\r\n// Create a valid JSS managed interface that doesn't require managed classes which are provided by the manageJSS HOC\r\ntype DialogArticleCardHandledProps = Subtract;\r\n\r\n// Create type for manageJSS HOC styled instance we are exporting\r\ntype DialogArticleCardProps = ManagedJSSProps<\r\n BaseDialogArticleCardProps,\r\n DialogArticleCardClassNameContract,\r\n DesignSystem\r\n>;\r\n\r\nexport {\r\n DialogArticleCard,\r\n DialogArticleCardProps,\r\n DialogArticleCardHandledProps,\r\n DialogArticleCardUnhandledProps,\r\n DialogArticleCardManagedClasses,\r\n DialogArticleCardClassNameContract\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport * as ReactDOM from \"react-dom\";\r\n\r\nimport {\r\n ButtonItemType,\r\n ButtonType,\r\n SharingToolbarHandledProps,\r\n SharingToolbarProps,\r\n SharingToolbarUnHandledProps\r\n} from \"./SharingToolbar.props\";\r\nimport { Glyph, Icon } from \"@msnews/icon\";\r\nimport { SharingToolbarStyles, contextMenuStyles } from \"./SharingToolbar.styles\";\r\nimport { get, merge } from \"lodash-es\";\r\n\r\nimport { CardContextMenu } from \"@msnews/card-context-menu\";\r\nimport { ComponentStyles } from \"@microsoft/fast-jss-manager\";\r\nimport { DesignSystem } from \"@microsoft/fast-components-styles-msft\";\r\nimport { DialogArticleCard } from \"../dialog-article-card\";\r\nimport { DialogClassNameContract } from \"@microsoft/fast-components-react-base\";\r\nimport Foundation from \"@microsoft/fast-components-foundation-react\";\r\nimport { HandledPropsKeys } from \"@msnews/core\";\r\nimport React from \"react\";\r\nimport { Share } from \"@edge-web-ui/news-icons\";\r\nimport { ShareDialog } from \"@msnews/share-dialog\";\r\nimport { SharingToolbarClassNames } from \".\";\r\nimport { SocialMediaIcon } from \"@msnews/social-media-icon\";\r\nimport { Status } from \"../../ContentActionsToolbar.constants\";\r\nimport { ToolbarPosition } from \"../../ContentActionsToolbar.props\";\r\nimport { moreOptionsMenuDefaultOffsetPos } from \"./SharingToolbar.constants\";\r\n\r\n/**\r\n * The local state interface of the component\r\n */\r\nexport interface SharingToolbarState {\r\n /** Flag to determine if share dialog should be displayed */\r\n shareDialogOpened: boolean\r\n}\r\n\r\n/**\r\n * Social media sharing toolbar component\r\n * @class - SharingToolbar\r\n * @classdesc - Sharing toolbar component class\r\n */\r\nexport class SharingToolbar extends Foundation {\r\n /**\r\n * Describes the object that enumerates all handled props for a component.\r\n * @protected\r\n * @type { HandledPropsKeys }\r\n */\r\n protected handledProps: HandledPropsKeys = {\r\n managedClasses: undefined,\r\n position: undefined,\r\n sharingButtons: undefined\r\n };\r\n\r\n /**\r\n * Stylesheet to apply to article card\r\n * @type {Partial>}\r\n */\r\n private articleCardStylesheet: Partial>;\r\n\r\n /**\r\n * Reference to share dialog button\r\n * @private\r\n * @type { React.RefObject}\r\n */\r\n private readonly shareDialogButtonRef: React.RefObject;\r\n\r\n /**\r\n * Constructs a SharingToolbar component\r\n * @constructor\r\n * @param { SharingToolbarProps } props props contract\r\n */\r\n constructor(props: SharingToolbarProps) {\r\n super(props);\r\n this.state = {\r\n shareDialogOpened: false\r\n };\r\n\r\n this.shareDialogButtonRef = React.createRef();\r\n }\r\n\r\n /** @inheritdoc */\r\n public componentDidUpdate(_: SharingToolbarProps, prevState: SharingToolbarState): void {\r\n if (prevState.shareDialogOpened && !this.state.shareDialogOpened && this.shareDialogButtonRef.current) {\r\n this.shareDialogButtonRef.current.focus();\r\n }\r\n }\r\n\r\n /**\r\n * Render sharing toolbar component\r\n * @public\r\n * @return {JSX.Element}\r\n */\r\n public render(): JSX.Element {\r\n return (\r\n
    \r\n
      \r\n {this.renderSharingButtons()}\r\n
    \r\n {this.renderShareDialog()}\r\n
    \r\n );\r\n }\r\n\r\n /**\r\n * Get the classname based on positioning of the toolbar\r\n */\r\n private getPositioningClassName(): string {\r\n const positionClass: string = this.props.position === ToolbarPosition.horizontal ?\r\n this.managedClass(\"iconListHorizontal\") :\r\n this.managedClass(\"iconListVertical\");\r\n\r\n return positionClass;\r\n }\r\n\r\n /**\r\n * Render the toolbar sharing buttons\r\n * @private\r\n * @return {JSX.Element} The sharing buttons element\r\n */\r\n private renderSharingButtons(): JSX.Element[] {\r\n if (!this.props.sharingButtons) {\r\n return ([]);\r\n }\r\n\r\n return this.props.sharingButtons.map(buttonItem => {\r\n if (!buttonItem.buttonData) {\r\n return null;\r\n }\r\n\r\n const buttonId: string = buttonItem.buttonType === ButtonType.SocialMedia ? buttonItem.buttonData.mediaType.toString() : buttonItem.buttonType.toString();\r\n let listItem: JSX.Element;\r\n\r\n switch (buttonItem.buttonType) {\r\n case ButtonType.SocialMedia:\r\n listItem = this.renderSocialMediaIcon(buttonItem);\r\n break;\r\n case ButtonType.ShareDialog:\r\n listItem = this.renderShareDialogIcon(buttonItem);\r\n break;\r\n case ButtonType.LikeDislike:\r\n listItem = this.renderLikeDislikeIcon(buttonItem);\r\n break;\r\n case ButtonType.MoreOptions:\r\n listItem = this.renderMoreOptionsIcon(buttonItem);\r\n break;\r\n default:\r\n return (null);\r\n }\r\n\r\n return (\r\n
  • \r\n {listItem}\r\n
  • \r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Renders the share dialog\r\n * @private\r\n * @return {JSX.Element} The share dialog element\r\n */\r\n private renderShareDialog(): JSX.Element {\r\n const shareDialogItem = this.props.sharingButtons.find(x => x.buttonType === ButtonType.ShareDialog);\r\n if (!shareDialogItem || !shareDialogItem.buttonData) {\r\n return null;\r\n }\r\n\r\n const { shareDialogProps, dialogArticleCardProps, articleTelemetryTags } = shareDialogItem.buttonData;\r\n if (!this.state.shareDialogOpened || !shareDialogProps || !dialogArticleCardProps) {\r\n return null;\r\n }\r\n\r\n const shareDialog = (\r\n \r\n \r\n \r\n );\r\n\r\n return ReactDOM.createPortal(\r\n shareDialog,\r\n document.body\r\n );\r\n }\r\n\r\n /**\r\n * Renders the social media icon element\r\n * @private\r\n * @param {ButtonItemType} buttonItem The button item data\r\n * @return {JSX.Element} The share dialog element\r\n */\r\n private renderSocialMediaIcon(buttonItem: ButtonItemType): JSX.Element {\r\n const { attributes, mediaType, contentUrl, contentTitle, emailBody, icon, ocid, target, newWindowTelemetryCall } = buttonItem.buttonData;\r\n if (!mediaType || !contentUrl || !contentTitle) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Renders the share dialog icon element\r\n * @private\r\n * @param {ButtonItemType} buttonItem The button item data\r\n * @return {JSX.Element} The share dialog icon element\r\n */\r\n private renderShareDialogIcon(buttonItem: ButtonItemType): JSX.Element {\r\n const { attributes, shareDialogProps, dialogArticleCardProps, onSelect } = buttonItem.buttonData;\r\n if (!shareDialogProps || !dialogArticleCardProps || !shareDialogProps.enabled || !shareDialogProps.contentTitle || !shareDialogProps.contentUrl) {\r\n return null;\r\n }\r\n\r\n return (\r\n this.onShareDialogOpen(event, onSelect)}\r\n ref={this.shareDialogButtonRef}\r\n {...attributes}\r\n {...buttonItem.telemetryTags}\r\n >\r\n \r\n \r\n);\r\n }\r\n\r\n /**\r\n * Renders the like/dislike icon element\r\n * @private\r\n * @param {ButtonItemType} buttonItem The button item data\r\n * @return {JSX.Element} The like/dislike icon element\r\n */\r\n private renderLikeDislikeIcon(buttonItem: ButtonItemType): JSX.Element {\r\n if (!buttonItem.buttonData.status) {\r\n return;\r\n }\r\n const { attributes, status, onSelect } = buttonItem.buttonData;\r\n\r\n const glyphType = status !== Status.DisLike ?\r\n (status === Status.Like ? Glyph.LikedText : Glyph.LikeText) :\r\n Glyph.DislikeText;\r\n\r\n const iconClassName = this.managedClass(\"icon_\" + status.toString() as keyof SharingToolbarClassNames);\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n }\r\n\r\n /**\r\n * Renders the more options icon element\r\n * @private\r\n * @param {ButtonItemType} buttonItem The button item data\r\n * @return {JSX.Element} The more options icon element\r\n */\r\n private renderMoreOptionsIcon(buttonItem: ButtonItemType): JSX.Element {\r\n if (!buttonItem.buttonData || !buttonItem.buttonData.status || !buttonItem.buttonData.menuItems) {\r\n return;\r\n }\r\n const { attributes, menuItems, offsetPos, zIndex } = buttonItem.buttonData;\r\n\r\n const positionOffset = this.props.position === ToolbarPosition.vertical\r\n ? { ...moreOptionsMenuDefaultOffsetPos, ...offsetPos }\r\n : undefined;\r\n\r\n return (\r\n \r\n \r\n
    \r\n );\r\n }\r\n\r\n /**\r\n * Enables and open the share dialog\r\n * @private\r\n * @param {any} event Event\r\n * @param {(e: any) => void)} onSelect Telemetry callback\r\n */\r\n private onShareDialogOpen = (event: any, onSelect: (e: any) => void): void => {\r\n this.setState({ shareDialogOpened: true });\r\n if (onSelect) {\r\n onSelect(event);\r\n }\r\n };\r\n\r\n /**\r\n * Disables and close the share dialog\r\n * @private\r\n */\r\n private onShareDialogClose = (): void => {\r\n this.setState({ shareDialogOpened: false });\r\n };\r\n\r\n /**\r\n * Utility function to simplify getting class name from managedClasses.\r\n * @param className - The class to get from managedClasses\r\n * @returns The managed class name\r\n */\r\n private managedClass = (className: keyof SharingToolbarClassNames): string => {\r\n return get(this.props.managedClasses, className);\r\n };\r\n\r\n /**\r\n * Utility function to obtain the highContrast styles for non social media content actions buttons\r\n * @returns The high contrast styles to append\r\n */\r\n private appendHighContrastStyle = (): string => {\r\n return this.managedClass(\"highContrast\") ? \" \" + this.managedClass(\"highContrast\") : \"\";\r\n };\r\n}\r\n\r\nexport * from \"./SharingToolbar.props\";","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport {\r\n SharingToolbarHandledProps as BaseComponentHandledProps,\r\n SharingToolbarProps as BaseComponentProps,\r\n ButtonItemType,\r\n ButtonType,\r\n SharingToolbarManagedClasses,\r\n SharingToolbarUnHandledProps\r\n} from \"./SharingToolbar.props\";\r\nimport manageJss, { ManagedJSSProps } from \"@microsoft/fast-jss-manager-react\";\r\n\r\nimport { SharingToolbar as BaseComponent } from \"./SharingToolbar\";\r\nimport { DesignSystem } from \"@microsoft/fast-components-styles-msft\";\r\nimport { SharingToolbarClassNames } from \"./SharingToolbar.classnames\";\r\nimport { SharingToolbarStyles } from \"./SharingToolbar.styles\";\r\nimport { Subtract } from \"utility-types\";\r\n\r\n/*\r\n * The type returned by manageJss type is very complicated so we'll let the\r\n * compiler infer the type instead of re-declaring just for the package export\r\n */\r\nconst SharingToolbar = manageJss(SharingToolbarStyles)(BaseComponent);\r\ntype SharingToolbar = InstanceType;\r\n\r\n// Create a valid JSS managed interface that doesn't require managed classes which are provided by the manageJSS HOC\r\ntype SharingToolbarHandledProps = Subtract;\r\n\r\n// Create type for manageJSS HOC styled instance we are exporting\r\ntype SharingToolbarProps = ManagedJSSProps;\r\n\r\n// Export everything a user might need from this index file\r\nexport {\r\n ButtonType,\r\n ButtonItemType,\r\n SharingToolbar,\r\n SharingToolbarProps,\r\n SharingToolbarClassNames,\r\n SharingToolbarHandledProps,\r\n SharingToolbarUnHandledProps\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { BaseExperience, InitialCommonExperienceProps } from \"@msnews/experiences-base\";\r\nimport {\r\n ContentActionsToolbarHandledProps,\r\n ContentActionsToolbarUnhandledProps\r\n} from \"./ContentActionsToolbar.props\";\r\nimport { ContentActionsToolbarProps, ToolbarPosition } from \".\";\r\nimport { PlaceHolderId, experienceDefaultName } from \"./ContentActionsToolbar.constants\";\r\n\r\nimport { ContentActionsToolbarAppErrors } from \"@msnews/diagnostics\";\r\nimport { HandledPropsKeys } from \"@msnews/core\";\r\nimport React from \"react\";\r\nimport { SharingToolbar } from \"./components/sharing-toolbar\";\r\nimport { TelemetryBase } from \"@msnews/core\";\r\nimport { classNames } from \"@microsoft/fast-web-utilities\";\r\nimport { markTtvr } from \"@msnews/diagnostics\";\r\n\r\n/**\r\n * Content Action toolbar base experience class\r\n * @class - ContentActionsToolbar\r\n * @classdesc - ContentActionsToolbar\r\n */\r\nexport class ContentActionsToolbar extends BaseExperience {\r\n /**\r\n * The ContentActionsToolbar default prop contract\r\n * Describes any default values for any component handled props\r\n * @public\r\n * @type { Partial }\r\n */\r\n public static defaultProps: Partial = {\r\n experienceName: experienceDefaultName\r\n };\r\n\r\n /**\r\n * The content action toolbar handled prop contract\r\n * Describes the object that enumerates all handled props for a component. This\r\n * object includes all props that can in some way consumed or manipulated by component\r\n * code.\r\n * @protected\r\n * @type { HandledPropsKeys }\r\n */\r\n protected handledProps: HandledPropsKeys = {\r\n ...InitialCommonExperienceProps,\r\n contentStatus: undefined,\r\n managedClasses: undefined,\r\n position: undefined,\r\n rootTelemetryTags: undefined,\r\n sharingError: undefined,\r\n sharingToolbar: undefined,\r\n staticPosition: undefined\r\n };\r\n\r\n /**\r\n * Flag to confirm first render is completed\r\n * @type {boolean}\r\n */\r\n private firstRenderCompleted = false;\r\n\r\n /**\r\n * Constructs a ContentActionsToolbar component\r\n * @constructor\r\n * @param { ContentActionsToolbarProps } props props contract\r\n */\r\n constructor(props: ContentActionsToolbarProps) {\r\n super(props);\r\n }\r\n\r\n /**\r\n * Render App component.\r\n *\r\n * @public\r\n * @return {JSX.Element}\r\n */\r\n public render(): JSX.Element {\r\n super.render();\r\n\r\n if (this.props.position && this.props.sharingToolbar && this.props.sharingToolbar.sharingButtons && !this.props.sharingError) {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Trigger after component update\r\n */\r\n public componentDidUpdate(prevProps: ContentActionsToolbarHandledProps): void {\r\n super.componentDidUpdate(prevProps);\r\n\r\n if (!prevProps.staticPosition && this.shouldFlip()) {\r\n this.flipToolbar();\r\n }\r\n\r\n if (!this.firstRenderCompleted) {\r\n markTtvr(this.props.experienceName);\r\n this.firstRenderCompleted = true;\r\n }\r\n }\r\n\r\n /**\r\n * A handler that gets invoked for unhandled errors.\r\n * @param error error object.\r\n */\r\n public componentDidCatch(error: Error): void {\r\n const appError = { ...ContentActionsToolbarAppErrors.ContentActionsBaseExperienceError, message: `${error.message}\\n${error.stack}` };\r\n TelemetryBase.trackAppErrorEvent(appError);\r\n }\r\n\r\n /**\r\n * Get the classname based on positioning of the toolbar\r\n */\r\n private getPositioningClassName(): string {\r\n const managedClasses = this.props.managedClasses;\r\n const positionClass: string = this.props.position === ToolbarPosition.horizontal ?\r\n managedClasses.contentActionsToolbar_horizontal :\r\n managedClasses.contentActionsToolbar_vertical;\r\n\r\n return positionClass;\r\n }\r\n\r\n /**\r\n * Check if toolbar needs to flip from one position to another\r\n * @method\r\n * @returns {boolean} True if toolbar should flip. False otherwise.\r\n */\r\n private shouldFlip(): boolean {\r\n const { position } = this.props;\r\n\r\n const currentHostId = position === ToolbarPosition.vertical ? PlaceHolderId.vertical : PlaceHolderId.horizontal;\r\n const hostElem = document.getElementById(currentHostId);\r\n if (!hostElem) {\r\n TelemetryBase.trackAppErrorEvent({\r\n ...ContentActionsToolbarAppErrors.ContentActionsFlipToolbarError,\r\n message: \"Missing toolbar placeholder while checking shouldFlip\",\r\n pb: {\r\n ...ContentActionsToolbarAppErrors.ContentActionsFlipToolbarError.pb,\r\n customMessage: `CurrentHostId: ${currentHostId}`\r\n }\r\n });\r\n return false;\r\n }\r\n return hostElem.getElementsByTagName(\"ul\").length === 0;\r\n }\r\n\r\n /**\r\n * Move toolbar from one placeholder to another, depending on the toolbar position\r\n * @method\r\n */\r\n private flipToolbar(): void {\r\n const { position } = this.props;\r\n const prevHostId = position === ToolbarPosition.vertical ? PlaceHolderId.horizontal : PlaceHolderId.vertical;\r\n const newHostId = position === ToolbarPosition.vertical ? PlaceHolderId.vertical : PlaceHolderId.horizontal;\r\n\r\n const prevHostElem = document.getElementById(prevHostId);\r\n const newHostElem = document.getElementById(newHostId);\r\n\r\n if (!prevHostElem || !newHostElem) {\r\n return null;\r\n }\r\n\r\n while (prevHostElem.childNodes.length > 0) {\r\n newHostElem.appendChild(prevHostElem.childNodes[0]);\r\n }\r\n }\r\n}","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport { ComponentStyles } from \"@microsoft/fast-jss-manager\";\r\nimport { ContentActionsToolbarClassNames } from \".\";\r\nimport { DesignSystem } from \"@microsoft/fast-components-styles-msft\";\r\nimport { toPx } from \"@microsoft/fast-jss-utilities\";\r\n\r\nconst toolbarMinDim = 40;\r\nconst iconHeight = 32;\r\n\r\n/**\r\n * The ContentActionsToolbar styles\r\n * @type {ComponentStyles}\r\n */\r\nexport const ContentActionsToolbarStyles: ComponentStyles = (config: DesignSystem) => {\r\n return {\r\n contentActionsToolbar: {\r\n \"background-color\": \"none\"\r\n },\r\n contentActionsToolbar_vertical: {\r\n width: toPx(toolbarMinDim)\r\n },\r\n contentActionsToolbar_horizontal: {\r\n width: \"auto\"\r\n }\r\n };\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport {\r\n ContentActionsToolbarHandledProps as BaseExperienceHandledProps,\r\n ContentActionsToolbarProps as BaseExperienceProps,\r\n ContentActionsToolbarManagedClasses,\r\n ContentActionsToolbarUnhandledProps,\r\n ToolbarPosition\r\n} from \"./ContentActionsToolbar.props\";\r\nimport {\r\n ContentActionsToolbarConfigSchema,\r\n ContentActionsToolbarMockConfig,\r\n ContentActionsToolbarMockState\r\n} from \"./experience-info\";\r\nimport { ContentActionsToolbarConnectorArgs, ContentActionsToolbarInspector } from \"./ContentActionsToolbar.inspector\";\r\nimport { PlaceHolderId, Status } from \"./ContentActionsToolbar.constants\";\r\nimport manageJss, { ManagedJSSProps } from \"@microsoft/fast-jss-manager-react\";\r\n\r\nimport {\r\n ContentActionsToolbar as BaseExperience\r\n} from \"./ContentActionsToolbar\";\r\nimport { ComponentClass } from \"react-redux\";\r\nimport { ContentActionsToolbarActions } from \"./ContentActionsToolbar.actions\";\r\nimport { ContentActionsToolbarClassNames } from \"./ContentActionsToolbar.classnames\";\r\nimport { ContentActionsToolbarConfig } from \"./ContentActionsToolbar.config\";\r\nimport { ContentActionsToolbarConnector } from \"./ContentActionsToolbar.connector\";\r\nimport { ContentActionsToolbarReducer } from \"./ContentActionsToolbar.reducer\";\r\nimport { ContentActionsToolbarState } from \"./ContentActionsToolbar.state\";\r\nimport { ContentActionsToolbarStyles } from \"./ContentActionsToolbar.styles\";\r\nimport { DesignSystem } from \"@microsoft/fast-components-styles-msft\";\r\nimport { ExperienceInfo } from \"@msnews/core\";\r\nimport { Subtract } from \"utility-types\";\r\n\r\n/*\r\n * The type returned by manageJss type is very complicated so we'll let the\r\n * compiler infer the type instead of re-declaring just for the package export\r\n */\r\nconst ContentActionsToolbar = manageJss(ContentActionsToolbarStyles)(BaseExperience);\r\ntype ContentActionsToolbar = InstanceType;\r\n\r\n// Create a valid JSS managed interface that doesn't require managed classes which are provided by the manageJSS HOC\r\ntype ContentActionsToolbarHandledProps = Subtract;\r\n\r\n// Create type for manageJSS HOC styled instance we are exporting\r\ntype ContentActionsToolbarProps = ManagedJSSProps;\r\n\r\nconst ToolingInfo: ExperienceInfo<\r\n ContentActionsToolbarConfig,\r\n ContentActionsToolbarState,\r\n ContentActionsToolbarProps,\r\n ContentActionsToolbarConnectorArgs\r\n> = {\r\n reactComponent: ContentActionsToolbar,\r\n experienceConfigSchema: ContentActionsToolbarConfigSchema,\r\n mockState: ContentActionsToolbarMockState,\r\n mockConfig: ContentActionsToolbarMockConfig,\r\n inspector: ContentActionsToolbarInspector.inspect\r\n};\r\n\r\n// type for ContentActionsToolbar experience to be invoked by other experiences\r\ntype ContentActionsToolbarExp = ComponentClass;\r\n\r\n// Export everything a user might need from this index file\r\nexport {\r\n ContentActionsToolbar,\r\n ContentActionsToolbarActions,\r\n ContentActionsToolbarConfig,\r\n ContentActionsToolbarConnector,\r\n ContentActionsToolbarExp,\r\n ContentActionsToolbarProps,\r\n ContentActionsToolbarReducer,\r\n ContentActionsToolbarState,\r\n ContentActionsToolbarClassNames,\r\n ContentActionsToolbarHandledProps,\r\n ContentActionsToolbarUnhandledProps,\r\n PlaceHolderId,\r\n Status,\r\n ToolbarPosition,\r\n ToolingInfo\r\n};","// © Microsoft Corporation. All rights reserved.\r\n\r\nimport \"../publicPath\";\r\n\r\nimport {\r\n ContentActionsToolbar,\r\n ContentActionsToolbarConfig,\r\n ContentActionsToolbarConnector,\r\n ContentActionsToolbarReducer,\r\n PlaceHolderId\r\n} from \"@msnews/content-actions-toolbar\";\r\nimport { ExperienceConfigWrapper, IRequestContext, RequestContext, TelemetryBase, appEnvironment, resolver } from \"@msnews/core\";\r\nimport { ExperienceInitialProps, Telemetry } from \"@msnews/experiences-base\";\r\nimport { handleAppErrorEventCall, handlePartialPageImpressionCall, handleTelemetryCall } from \"../integration/PrimeTelemetry\";\r\n\r\nimport { ContentActionsToolbarAppErrors } from \"@msnews/diagnostics\";\r\nimport { DesignSystemDefaults } from \"@microsoft/fast-components-styles-msft\";\r\nimport { DesignSystemProvider } from \"@microsoft/fast-jss-manager-react\";\r\nimport { Mediator } from \"../integration/Mediator\";\r\nimport { PageBase } from \"@msnews/experiences-redux\";\r\nimport React from \"react\";\r\nimport { SharedDocumentType } from \"@msnews/views-helpers\";\r\nimport { ToolbarPosition } from \"@msnews/content-actions-toolbar\";\r\nimport { isNullOrUndefined } from \"util\";\r\n\r\n// export default function bootstrapPrimeHybrid(): void {\r\n// Get an instance of the PageBase for this app, and start the app\r\nconst app = PageBase.getInstance();\r\n\r\nconst requestContext = new RequestContext();\r\n\r\n// Mock documentId to be used when running hybrid locally for testing purposes\r\nconst mockDocumentId = \"BBKJJOS\";\r\n\r\n// Map base telemetry to prime library for hybrid\r\nTelemetryBase.trackAppErrorEvent = handleAppErrorEventCall;\r\nTelemetryBase.trackPartialImpression = handlePartialPageImpressionCall;\r\nTelemetryBase.trackEvent = handleTelemetryCall;\r\n\r\n// Start the App\r\napp.start();\r\n\r\nlet hostElement: HTMLElement;\r\n\r\nconst appTelemetry = Telemetry.createRootProps(\"spaContentActionsToolbarExperienceContainer\", undefined, appEnvironment.RootTelemetryId);\r\nconst initialProps: ExperienceInitialProps = {\r\n contentId: mockDocumentId,\r\n parentTelemetry: appTelemetry,\r\n context: {\r\n handleTelemetryCall: handleTelemetryCall\r\n }\r\n};\r\n\r\n/**\r\n * Otains document data properties from Prime placeholder and sets up the initial props and appEnv variables\r\n */\r\nfunction setupContentActionsInitialState(): void {\r\n // For Content Actions the placeholder can be in vertical in one prime region or horizontal in another prime region (depending on pagetype and column size)\r\n hostElement = document.getElementById(PlaceHolderId.vertical) || document.getElementById(PlaceHolderId.horizontal) || document.getElementById(\"content-actions-toolbar\");\r\n\r\n const dataset = hostElement.dataset || {};\r\n const cmsDocumentId: string = dataset.documentid || mockDocumentId;\r\n const isRSThree: string = dataset.isrsthree || \"false\";\r\n\r\n // Check for the existence of second position and sets staticsPosition accordingly\r\n const staticPosition = hostElement.id === PlaceHolderId.vertical ?\r\n document.getElementById(PlaceHolderId.horizontal) ? undefined : ToolbarPosition.vertical :\r\n document.getElementById(PlaceHolderId.vertical) ? undefined : ToolbarPosition.horizontal;\r\n\r\n // Set initital props\r\n initialProps.contentId = cmsDocumentId;\r\n initialProps.context.staticPosition = staticPosition;\r\n initialProps.context.isRSThree = (isRSThree.toLowerCase() === \"true\");\r\n initialProps.context.documentType = SharedDocumentType.CMS;\r\n\r\n // Update app environment\r\n appEnvironment.HostPage = {\r\n originalUrl: location.href,\r\n hostName: location.hostname,\r\n verticalKey: dataset.verticalkey || \"news\",\r\n categoryKey: dataset.categorykey || \"other\",\r\n topDomain: appEnvironment.HostPage.topDomain\r\n };\r\n}\r\n\r\n/**\r\n * Connected the component to the Redux store passing initial props data\r\n * @param {any} experienceConfig\r\n * @returns The Redux connected component\r\n */\r\nfunction connectContentActionsComponent(contentActionsToolbarConfig: ContentActionsToolbarConfig, requestContext: IRequestContext): Promise> {\r\n const contentActionsToolbarConnector = new ContentActionsToolbarConnector(\"ContentActionsToolbar\",\r\n \"\",\r\n app.rootReducer,\r\n new ContentActionsToolbarReducer(),\r\n app.store,\r\n contentActionsToolbarConfig,\r\n requestContext);\r\n return contentActionsToolbarConnector.connectComponent(ContentActionsToolbar, initialProps);\r\n}\r\n\r\n/**\r\n * Render the experience on hostElement placeholder\r\n * @param contentActionsExperience\r\n */\r\nfunction renderExperience(contentActionsExperience: any): void {\r\n app.renderRootElement(\r\n React.createElement(\r\n DesignSystemProvider,\r\n { designSystem: DesignSystemDefaults },\r\n React.createElement(contentActionsExperience)\r\n ),\r\n hostElement\r\n );\r\n}\r\n\r\nlet contentActionsConfig: ContentActionsToolbarConfig;\r\nconst configFilePath = \"cms/api/amp/experienceConfigIndex/BBWebZe\";\r\nresolver.getConfig(configFilePath)\r\n .then((experienceConfig: ExperienceConfigWrapper) => {\r\n if (!experienceConfig) {\r\n throw Error(`Failed to load config file. Path: ${configFilePath}`);\r\n }\r\n contentActionsConfig = experienceConfig.properties;\r\n setupContentActionsInitialState();\r\n return connectContentActionsComponent(contentActionsConfig, requestContext);\r\n }).then(renderExperience)\r\n .catch(error => {\r\n handleAppErrorEventCall({\r\n ...ContentActionsToolbarAppErrors.ContentActionsExperienceLoadError,\r\n message: \"Error in hybrid loading Content Actions experience\",\r\n pb: {\r\n ...ContentActionsToolbarAppErrors.ContentActionsExperienceLoadError.pb,\r\n customMessage: `Url: ${location.href} Config: ${contentActionsConfig} Error: ${error}`\r\n }\r\n });\r\n return;\r\n }\r\n );\r\n\r\n// Listen to update events from Prime (Necessary as video page auto updates current displayed video)\r\nMediator.registerContentActionsUpdatedEvent(async () => {\r\n setupContentActionsInitialState();\r\n connectContentActionsComponent(contentActionsConfig, requestContext)\r\n .then(renderExperience);\r\n});"],"sourceRoot":""}