{"version":3,"mappings":"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","names":["ArrowRightLine","props","React.createElement","PhotoUploadLine","SidebarHideLine","SidebarShowLine","KeyboardShortcuts","styled","HeaderTitle","Title","color","ShortcutGroup","ShortcutRow","Text","ShortCutRowNoBorder","ShortcutKeySpan","DrawerOverlay","Drawer","DrawerHeader","DrawerBody","spacing","KeyboardShortcutsSidebar","open","onClose","mediaType","intl","useIntl","browser","detect","commandOrControl","keyboardMessages","getShortcutMessages","supportsAnnotations","MediaType","CommentsShortcutRowStyle","isClosing","setIsClosing","useState","content","jsx","jsxs","IconButton","UIIcon","CloseLine","isImageLike","Fragment","isAVType","ExpandableIconButton","KeyboardShortcutsMenu","loggingClient","useViewerPageContext","sidebarOpen","setSidebarOpen","React","toggleSidebar","prevSidebarOpen","hotkeys","KeyboardLine","StatusContainer","SpinnerContainer","DownloadSnackbar","error","ReelSnackbar","Snackbar","Spinner","SpinnerWrapper","MenuSegment","Menu","DownloadButtonWrapper","DownloadIcon","resolutionOrder","resolutionText","pendingStatusList","proxyContainerFormat","getDownloadButtonStrings","InnerDownloadButton","buttonType","triggerProps","triggerRef","translatedStrings","Tooltip","Button","DirectDownloadButton","onClick","DownloadButton","mediaMetadata","shareToken","downloadsEnabled","BaseDownloadButton","useProxyQuery","pollToCompletion","backoff","useBackoff","proxiesEnabled","grantBook","useGrantBook","query","useQuery","replayApi","getProxyUrls","a","b","_a","_b","data","hasPending","result","menuOpen","setMenuOpen","snackbarOpen","setSnackbarOpen","downloadError","setDownloadError","supportedProxies","proxiesLoaded","openErrorSnackbar","useErrorSnackbar","areAllProxiesGenerated","proxy","mediaAction","useMemo","downloadVideo","resolution","link","extension","PAP_Select_ReelMediaAction","res","getVideoDownloadLink","download","handleDownloadProxy","handleDownloadAllProxies","url","getProxyZipUrl","ReplayError","ReplayErrorCategory","handleToggle","isOpen","selectorText","downloadMenu","getContentProps","getTriggerProps","FormattedMessage","supportedProxy","resolutionTag","_c","documentDownloadButton","TooltipFocusWrapper","StyledTitle","StyledText","ToolTipButton","FeedbackTooltip","ThemeProvider","ThemeContainer","ViewerCountDropdown","ZeroViewerCountDropdown","ViewerCountButton","viewerCount","useViewerCountQuery","isUserInCollabSession","useSyncCollabSharedState","viewerCountLabel","teamMemberCountLabel","guestsCountLabel","ShowLine","ResetTutorialMenuItem","setPublishActions","updateViewerOnboardingActions","useViewerPageOnboardingContext","isVideoRoute","matchPath","VIDEO_ROUTE_MATCH","isDropboxer","getCurrentUser","resetOnboardingActions","resetOnboarding","updatedPublishActions","getUserPublishActions","updatedOnboardingActions","listOnboardingActions","onResetTutorialClick","ButtonSeparator","HeaderLink","Link","RightButtonsContainer","VERY_SMALL_SCREEN_WIDTH_BREAKPOINT","PeopleFeaturesSection","areCommentsEnabled","canCreateShareLinks","isImage","isWatermarkedLink","showDownloadButton","viewOnlyProjectMember","isSharePage","useVersionsContext","isSmallScreenSize","useViewport","isViewOnlyLinkAccess","hideShareButton","params","dismissedFeedback","setDismissedFeedback","renderFeedback","dismissFeedback","VersionsAwareShareFeatures","ViewerPageHeader","showDownloadsInHeader","backToUrl","hasEditAccess","isMobileDevice","liveReviewImprovsIsOn","projectName","uploadTimestamp","folderName","fileExtension","setProjectName","projectId","handleHeaderLinkClick","showLeftNavSubtitle","CommonHeaderLayout","BackChevron","HeaderReplayLogo","OnboardingChecklist","HelpMenu","SurfaceType","MediaTitleAndInfo","VIDEO_TITLE_HEIGHT","EditableMediaTitle","CommonTitle","RenameProjectIcon","MediaRenameInput","ReplayTextInput","EditableTitleRow","NonEditableTitleRow","FileExtensionLabel","LeftNavSubtitleContainer","ContainedButton","LeftNavText","BackToTutorialsButton","LeftNavSubtitle","navigationSidebarDisplayState","setNavigationSidebarDisplayState","useAtom","navigationSidebarDisplayStateAtom","textRef","useViewerPageLoggingClient","replayStorage","NavigationSidebarDisplayState","leftNavText","tooltipText","title","id","lastUpdatedTimestamp","onRename","fileExt","titleRef","timeAgoLocale","useReelAppGlobalState","matchesTutorials","handleClickBackToTutorials","useMatchesTutorialsRoute","projects","useAtomValue","viewerReadFolderListingAtom","versionsContext","currentProjectIndex","project","hasMultipleProjects","lastUpdated","getUploadedTimeForDisplay","getTooltipStyle","lastUpdatedText","TutorialsLabelText","formattedFileExt","CommonInfoSection","EditablePageTitleComponent","EditablePageTitleComponentWithButtons","NavigationButtons","LoadingTile","CommonLastUpdatedText","PreviousButtonWrapper","NextButtonWrapper","Tile","ButtonText","ButtonLoadingNonMemo","SkeletonRectangle","navigateToMedia","nextButtonOnclick","nextProject","previousButtonOnclick","nextToggleAriaLabel","previousToggleAriaLabel","ArrowLeftLine","e","name","isHoveringTitle","setIsHoveringTitle","isEditingTitle","setIsEditingTitle","editingValue","setEditingValue","hideModifyItemSnackbar","useSetAtom","hideModifyItemsSnackbarAtom","setModifyItemSnackbar","modifyItemsSnackbarAtom","nameRef","onMouseEnter","onMouseLeave","onClickTitle","handleRename","newName","renameProject","ItemType","rightSide","EditLine","ClickOutside","MAX_PROJECT_LENGTH","event","ModifyItemSnackbar","ContinueButton","ModalWrapper","DigModal","TextFormFooter","RowWrapper","NAME_INPUT_ID","GuestLogInForm","isGuestModalOpen","pendingDrawing","fullName","setFullName","sessionContext","pendingPost","setPendingPost","mobileKeyboardState","useMobileKeyboardState","onNameChange","createGuestUserInfo","splitName","lastWord","onContinueClicked","guestInfo","hideGuestForm","authUrl","useSigninUrl","messages","txt","FormRow","TeamFilmmakersHero","aspectRatio","altText","inverse","rest","viewBox","classNames","intlMessages","defineMessages","ModalHeader","Modal","ModalTitle","IllustrationContainer","StartButton","OnboardingWelcome","handleOnStart","useLoggingClient","handleToggleChecklist","useOnboardingChecklist","isWelcomeModalOpen","setIsWelcomeModalOpen","isWelcomeModalOpenAtom","onboardingType","onboardingTypeAtom","showProToolsConnectionUI","showProToolsConnectionUIAtom","handleOnRequestClose","useCallback","handleOnStartOnboarding","ONBOARDING_TYPE","ONBOARDING_OPEN_SOURCE","OnboardingWelcomeForVideo","videoPlayerInstance","useVideoViewerContext","handleCompleteStep","handlePlayVideo","STEPS","getDueDateText","dueDate","dueDateTimeframe","getDueDateTimeframe","dueDateTime","hoursToDueDate","getHoursToDueDate","DueDateTimeframe","dueDateDay","DueDateBanner","editable","isLoading","onRequestClose","bannerProps","setBannerProps","dueDateText","withCloseButtonText","WarningLine","InfoLine","Banner","DueDateSnackbar","handleCloseSnackbar","taskState","currentTaskStateAtom","FormattedDate","chunks","FullScreenButton","isFullscreen","onToggleFullscreenClick","shortcutMessages","ReelControlTooltip","FullscreenExitLine","FullscreenLine","StatusDropdownWithConsumer","buttonSize","StatusDropdown","onChange","versionStatus","SnapshotSnackbar","status","SetThumbnailButton","BaseSetThumbnailButton","snackbarStatus","setSnackbarStatus","onClickSetThumbnail","video_version_id","current_time","setThumbnail","VideoTitle","TopRow","SMALL_SCREEN_WIDTH_BREAKPOINT","$isImage","$isSmallScreenSize","$isInAdobeExtension","css","TopRowLeftSide","TopRowRightSide","LeftMargin","ViewerTopRow","statusDropdownSlot","versionSelectorSlot","dueDateSlot","sidebarSlot","visible","fullScreenButtonSlot","currentUserIsOwner","viewerSidebarDisplayState","setViewerSidebarDisplayState","viewerSidebarDisplayStateAtom","isDueDateProvisioned","useReelProvisioningEnabled","dueDateTriggerRef","showDueDatePremiumTooltip","setShowDueDatePremiumTooltip","tooltipTimeout","setTooltipTimeout","versionSummaries","showContextMenu","folderId","navigate","useNavigate","onRemove","itemType","itemId","showViewerSidebar","ViewerSidebarDisplayState","contextMenu","ContextMenu","isViewOnly","versionIsReady","showSetThumbnail","isInAdobeExtension","isInExtension","timeout","PremiumTooltip","InfoButton","ViewerSidebarToggle","Container","NEW_THREAD_COMPOSER_HEIGHT","COMMENT_PROMPT_BANNER_HEIGHT","ImageViewerTopContainer","prop","IMAGE_VIEW_DUEDATE_BANNER_HEIGHT_DUEDATE_BANNER_HEIGHT","DueDateBannerContainer","Content","ImageViewer","isHovered","image","currentUserHasEdit","selectedThreadId","useCommentsContext","showDueDate","useIsReplayInGA","isDueDateModalOpen","setIsDueDateModalOpen","clearTask","clearTaskStateAtom","showDueDateVersionModal","setShowDueDateVersionModal","dueDateVersionModalAtom","showDueDateVersionModalErrorText","setShowDueDateVersionModalErrorText","dueDateDeleteRequestInProgress","setDueDateDeleteRequestInProgress","hoverCursorIsEnabled","drawOnFileFocusStyles","useFocusRing","containerRef","fullscreenEnabled","toggleFullscreen","useFullscreen","handleToggleFullscreenClick","handleRemoveDueDate","deleteTask","handleCloseDueDateVersionModal","showDueDateSnackbar","setShowDueDateSnackbar","dismissDueDateSnackbar","showDueDateBanner","setShowDueDateBanner","handleRemoveDueDateBanner","versionSelector","VersionSelectorWithConsumer","doesDueDateExist","dueDateBanner","prevState","DueDate","showControls","Image","AddDueDateModal","DueDateVersionModal","CenteredContainer","PdfLoading","PAP_Select_SidebarPreviewIcon","properties","ThumbnailSidebar","thumbnailSidebarDisplayState","setThumbnailSidebarDisplayState","thumbnailSidebarDisplayStateAtom","mapMediaTypeToLoggingType","PDF","lazy","__vitePreload","module","PdfViewerTopContainer","breakpointSmall","getFullScreenScale","pdfRect","pdfScale","screenWidth","pdfWidth","viewportWidth","PdfViewer","setPdfScale","pdfCurrentScaleAtom","pdfCurrentPage","pdfCurrentPageAtom","getPages","useAtomCallback","get","pdfPagesAtom","updatePdfScale","scale","pdfMetadata","mediaAsDocument","Suspense","stepMilestones","useOnboardingVideoWalkthrough","completedSteps","completedStepsAtom","lastCompletedStep","lastCompletedStepAtom","setShouldFillInOnboardingComment","shouldFillInOnboardingCommentAtom","isChecklistOpen","setIsChecklistOpen","isChecklistOpenAtom","currOpenStep","setCurrOpenStep","currOpenStepAtom","isOnOnboardingVideoWalkthroughPage","useIsOnOnboardingVideoWalkthroughPage","frameRate","stepToPause","setStepToPause","currentTime","isPlaying","currOpenStepMilestone","stepToPauseMilestone","useEffect","nextStep","nextCurrOpenStepMilestone","pauseForNextStep","isFirstTime","hasCompletedDrawStep","isTransitioningFromViewToDrawStep","pauseVideoAtTime","MOBILE_KEYBOARD_IS_OPEN_CLASSNAME","CONTROL_BAR_HEIGHT","SMALL_SCREEN_HEIGHT_BREAKPOINT","VideoViewer","videoIsPlayingWhileTyping","setVideoIsPlayingWhileTyping","liveReviewVideoIsDetached","setLiveReviewVideoIsDetached","playerStatus","hosts","iAmHost","shouldShowLiveReviewImprovs","hasCompletedAnyPreviousOnboardingActions","hasCompletedAnyPreviousOnboardingActionsAtom","hasOnboardingWalkthrough","handleSetOnboardingTypeByMediaType","pauseWhileTypingEnabled","justCompletedOnboardingStep","wasPlaying","TimeBasedMediaVersionSelectorWithConsumer","NEW_THREAD_COMPOSER_CLASSNAME","showTopRow","PLAYER_STATUS","shouldShowLiveReviewBorder","FocusTab","Video","getPlaylistUrl","Annotations","FileSharedSnackbar","setIsOpen","isFileSharedSnackbarOpenAtom","firstMentionName","firstMentionNameInCommentComposerAtom","totalMentions","totalMentionsInCommentComposerAtom","msg","otherMentions","SnackbarCloseMessage","ERROR_COOKIE_SNACKBAR_HEIGHT","ErrorBannerContainer","CommentErrorBanner","deleteComment","replyToThread","resolveThread","setError","unresolveThread","setCurrentlyEditingComment","postText","deleteText","resolveText","unresolveText","editText","unknownText","errorMessage","ReplayCommentErrorType","ReplayThreadErrorType","onRetry","retryable","FailLine","StepActions","LiveReviewErrorTooltip","AvatarList","AvatarWrapper","MAX_FACEPILE_LENGTH","FacepileAvatar","Avatar","FacepileWrapper","FacepileItemWrapper","Facepile","WithFacepileTooltip","avatar","backgroundColor","stackIndex","SyncCollabFacepile","participants","isAnonymousUser","locale","setIsGuestModalOpen","hasOverflow","visibleParticipants","onAvatarClick","participant","idx","getUserInitials","NEW_MAX_FACEPILE_LENGTH","SyncCollabWatchersFacepile","consentTriggerRef","index","WatcherWrapper","radius","LiveWrapper","CapitalizedText","StyledButton","WatcherCountDropdown","ParticipantRow","NameSection","LineDivider","HostSettingsWrapper","HostSettingRow","StyledToggle","Toggle","LiveCircleSVG","SyncCollabWatchers","joinLeaveOnClick","showCursors","setShowCursors","sendShowCursorsSetting","openSession","setOpenSession","sendOpenSessionSetting","onShowCursorsSettingToggle","newValue","onOpenSessionSettingToggle","reel.LiveReviewUserRole","SyncCollabConsentTooltip","viewingAlone","str","viewingWithOneOther","otherViewerName","viewingWithMultipleOthers","numOtherParticipants","viewingWithOneOtherWhoLeaves","viewerJoinedYou","newViewerName","viewerJoinedYouAndOneOther","viewerJoinedYouAndMultipleOthers","userDisconnectedDueToShutdown","secsToShutdown","date","getMinutesMsg","minutesLeft","getSecondsMsg","secondsLeft","othersWatching","SyncCollabWrapper","SyncCollabEntrypoint","disabledProp","setShowInviteTooltip","joinState","setJoinState","shutdownState","setShutdownState","getCurrentSessionId","subscribeToMessages","markCollabOnboardingStepComplete","preloadVideoToFirstFrame","location","useLocation","snackbarMsg","setSnackbarMsg","liveLink","participantText","JoinState","messages.othersWatching","firstParticipantSnackbarMsg","messages.viewingAlone","fetchLink","getReelLink","currentSessionId","participantCount","otherParticipants","otherViewer","messages.viewingWithOneOther","displayNameForParticipant","messages.viewingWithOneOtherWhoLeaves","messages.viewingWithMultipleOthers","userJoin","newViewerFullName","messages.viewerJoinedYou","messages.viewerJoinedYouAndOneOther","messages.viewerJoinedYouAndMultipleOthers","closeSnackbar","consentTooltipOpen","setConsentTooltipOpen","showErrorTooltip","tooltipTitle","tooltipMessage","messages.userDisconnectedDueToShutdown","closeTooltip","joinLiveReviewSession","startLiveReviewSession","linkBlobPromise","reportException","USER_METADATA_FIELD","JoinLeaveButton","joinButtonText","startMessage","joinMessage","PersonLeaveLine","PersonMultipleLine","VersionsAwareSyncCollabEntrypoint","canUserSyncVersions","PortalledSyncCollabEntryPoint","mounted","setMounted","portalledElementRef","portalTo","ReactDOM","PDFThumbnailSidebar","PageContainer","$thumbnailSidebarOpen","ViewerWrapper","$isImageViewer","$isVersionLoading","MobileTitleHeaderContainer","MobileTitle","MobileLeftNavSubtitleArea","MobileSidebarWrapper","MobileTitleHeader","extensionType","Truncate","ViewerPageContent","queryClient","useQueryClient","createThread","threads","isInitialized","viewerAtom","browseToFolder","viewerBrowseToFolderAtom","useImageViewer","managePeopleInfoQuery","useGetManagePeopleInfoForAssetVersionQuery","upsellModalIsOpen","setUpsellModalIsOpen","upsellModalIsOpenAtom","modifyPeopleModalIsOpen","setModifyPeopleModalIsOpen","modifyPeopleModalIsOpenAtom","shareRecipients","useTeamProjectShareRecipients","showUpsellModal","setViewNewUploadFunction","viewNewUploadFunctionAtom","upload","hasNonReactionComments","thread","showCommmentComposer","composer","NewThreadComposer","setTaskState","setLoadingTask","loadingTaskStateAtom","updated_task","getTasksForItem","async_task_state","videoRef","className","selectedDraftCommentAndFrame","selectedDraftCommentAndFrameAtom","ViewerSidebar","ManageAccessModal","BasicAddOnUpsellModal","PlaybackLengthSnackbar","MainContent","LoadingWrapper","PendingVersionActionViewer","loadingText","previousMediaType","versionNumber","videoId","VersionSelector","VersionsAwareViewerPageContent","videoVersionId","isLiveCollabDisabled","useIsLiveCollabDisabled","ViewerProvider","ImageViewerProvider","VideoViewerProvider","AnnotationsProvider","CommentsProvider","SyncCommentsProvider","isInWebView","currentVersionNumber","pendingVersionAction","currentVersionStatus","HeaderContainer","HeaderTopRowContainer","BreadcrumbContainer","HeaderLoadingBreadcrumbsNonMemo","HeaderLoadingBreadcrumbs","HeaderBreadcrumbsNonMemo","folderChain","viewerGetBrowseStateAtom","renderBreadcrumb","folder","onBrowse","Breadcrumb","HeaderBreadcrumbs","HeaderTopRowNonMemo","onHide","HeaderTopRow","NavigationSidebarHeaderNonMemo","currentFolder","viewerGetCurrentFolderAtom","NavigationSidebarHeader","MediaTooltip","TooltipContent","PosterWrapper","$background","$hovered","MediaTypeAndDurationWrapper","AVTypeAndDurationWrapper","ImageTypeAndDurationWrapper","MediaTitle","MediaSubtitle","FooterContainer","IconsContainer","IconAndTextContainer","NavigationSidebarMediaPreviewTooltipNonMemo","commentCount","mediaName","thumbnailUrl","timeForDisplay","updatedAt","ImageLine","VideoPoster","AudioPoster","ImagePoster","CommentLine","GifLine","StatusLabel","NavigationSidebarMediaPreviewTooltip","ListContainer","$loading","$selected","PosterContainer","HoverPlayIcon","PosterInfoWrapper","TileTitle","TileSubtitle","FileCountText","SelectedText","VersionAndDurationWrapper","Separator","ProjectTileNonMemo","selected","setIsHovered","avActiveText","imgActiveText","PlayFill","ProjectTile","FolderTileNonMemo","numberOfProjects","fileCountString","FolderLine","FolderTile","LoadingTileNonMemo","opacity","NavigationSidebarLoadingListNonMemo","NavigationSidebarLoadingList","NavigationSidebarListNonMemo","folders","viewerReadBrowseListingAtom","selectedProjectId","setSidebarState","handleProjectClick","projectWithVideos","handleFolderClick","isUploadedFolder","media","mediaTypeTagToMediaType","getTimeForDisplay","findMediaProjectLatestUpdateTime","NavigationSidebarList","Sidebar","TRANSITION_DURATION_MS","NavigationSidebarNonMemo","cleanup","cleanupNavigationSidebarAtom","CSSTransition","NavigationSidebar","Integrations","StyledVideo","guessIntegration","creatorTool","CreatorToolCalloutModal","setOpen","isCalloutEnabled","StormcrowIsOn","onboardingActions","updateOnboardingActions","useOnboardingContext","isOnboardingEnabled","useE2eFeatureIsOn","handleClose","integration","PAP_Select_ModalAction","updateIntegrationState","handleNavigate","handleOpen","PAP_Shown_Modal","state","s3_static_url","Centered","isVideoNotFoundError","tag","IS_LOADING","ViewerPage","encodedVideoId","encodedProjectId","useParams","setVideoId","setSidebarPanelState","viewerSidebarPanelAtom","videoInfo","setVideoInfo","getVideoError","setGetVideoError","videoFetcher","getVideo","currentVersionInfo","dueDateModalCurrentVersionInfoAtom","setDateModalCurrentVersionInfoAtom","projectNavigator","mediaId","versionId","ViewerSidebarPanel","VERSION_ID_QUERY_STRING_KEY","logView","defaultInitalVideoId","getInitialVersionId","videoIdentifier","PageMissingPage","ErrorPage","backButtonStyle","LoadingViewerPageHeader","webContent","Page","PageContentContainer","YourRootText","integrationContent","projectAccess","ViewerPageLoggingProvider","VersionsAwareViewerPageProvider","ViewerPageOnboardingProvider","SyncCollabProvider"],"ignoreList":[0,1,2,3,13,24],"sources":["../../node_modules/@dropbox/dig-icons/dist/mjs/assets/ui-icon/line/arrow-right.js","../../node_modules/@dropbox/dig-icons/dist/mjs/assets/ui-icon/line/photo-upload.js","../../node_modules/@dropbox/dig-icons/dist/mjs/assets/ui-icon/line/sidebar-hide.js","../../node_modules/@dropbox/dig-icons/dist/mjs/assets/ui-icon/line/sidebar-show.js","../../src/pages/viewer_page/components/keyboard_shortcuts/keyboard_shortcuts_sidebar.tsx","../../src/pages/viewer_page/components/keyboard_shortcuts/keyboard_shortcuts_menu.tsx","../../src/pages/viewer_page/components/downloads/video_download_snackbar.tsx","../../src/pages/viewer_page/components/downloads/video_download_button.tsx","../../src/pages/viewer_page/components/feedback_tooltip.tsx","../../src/pages/viewer_page/components/view_counter.tsx","../../src/pages/viewer_page/reset_onboarding.tsx","../../src/pages/viewer_page/viewer_page_header.tsx","../../src/components/guest_log_in_form.tsx","../../node_modules/@dropbox/dig-illustrations/dist/mjs/hero/team-filmmakers.js","../../src/components/onboarding_v2/onboarding_welcome.tsx","../../src/components/onboarding_v2/onboarding_welcome_for_video.tsx","../../src/components/due_date/due_date_banner.tsx","../../src/components/due_date/due_date_snackbar.tsx","../../src/components/full_screen_button.tsx","../../src/pages/viewer_page/components/status_dropdown_with_consumer.tsx","../../src/pages/viewer_page/components/set_thumbnail_button.tsx","../../src/pages/viewer_page/components/viewer_top_row.tsx","../../src/pages/viewer_page/components/image_viewer.tsx","../../src/pages/viewer_page/components/documents/pdf_loading.tsx","../../node_modules/pap-events/replay/select_sidebar_preview_icon.js","../../src/pages/viewer_page/components/thumbnail_sidebar.tsx","../../src/pages/viewer_page/components/pdf_viewer.tsx","../../src/lib/onboarding_v2/use_onboarding_video_walkthrough.ts","../../src/pages/viewer_page/components/video_viewer/video_viewer.tsx","../../src/pages/viewer_page/components/comments/comment_composers/file_shared_snackbar.tsx","../../src/pages/viewer_page/components/comments/comments_error_banner.tsx","../../src/pages/viewer_page/components/sync_collab/live_review_error_tooltip.tsx","../../src/pages/viewer_page/components/sync_collab/facepile.tsx","../../src/pages/viewer_page/components/sync_collab/sync_collab_watchers.tsx","../../src/pages/viewer_page/components/sync_collab/sync_collab_consent_tooltip.tsx","../../src/pages/viewer_page/components/sync_collab/sync_collab_messages.tsx","../../src/pages/viewer_page/components/sync_collab/sync_collab_entrypoint.tsx","../../src/pages/viewer_page/viewer_page_content.tsx","../../src/pages/browse_page/components/navigation_sidebar_header.tsx","../../src/pages/browse_page/components/navigation_sidebar_media_preview_tooltip.tsx","../../src/pages/browse_page/components/navigation_sidebar_list.tsx","../../src/pages/browse_page/components/navigation_sidebar.tsx","../../src/pages/viewer_page/components/creator_tool_callouts/creator_tool_callouts.tsx","../../src/pages/viewer_page/viewer_page.tsx"],"sourcesContent":["import * as React from 'react';\n/**\n *\n * Original name: arrow right\n *\n * Figma URL: https://www.figma.com/file/RPY7Gy4EixfwdOtVIf2PaX/_Global---Icons?node-id=400%3A1087\n *\n */\nexport const ArrowRightLine = (props) => (React.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", ...props },\n    React.createElement(\"path\", { d: \"M5 11.75h12m-5.25-6.5 6.25 6.5-6.25 6.5\", stroke: \"currentColor\", strokeWidth: 1.5, strokeMiterlimit: 10, vectorEffect: \"non-scaling-stroke\" })));\n","import * as React from 'react';\n/**\n *\n * Original name: photo upload\n *\n * Figma URL: https://www.figma.com/file/RPY7Gy4EixfwdOtVIf2PaX/_Global---Icons?node-id=2916%3A1083\n *\n */\nexport const PhotoUploadLine = (props) => (React.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", ...props },\n    React.createElement(\"path\", { d: \"m18.25 3.46-2.86 2.75 1.04 1.08 1.07-1.029V10H19V6.261l1.07 1.03 1.04-1.082-2.86-2.75ZM8.5 10a1.393 1.393 0 0 0 1.5 1.5 1.392 1.392 0 0 0 1.5-1.5A1.392 1.392 0 0 0 10 8.5 1.393 1.393 0 0 0 8.5 10Z\", fill: \"currentColor\", vectorEffect: \"non-scaling-stroke\" }),\n    React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"m18.51 12.451.49.489V19H5V5h9.213v1.5h-7.71v6.366a2.224 2.224 0 0 1 2.7.356l.378.378a.75.75 0 0 0 1.061 0l2.173-2.17a3.253 3.253 0 0 1 4.595 0l1.1 1.021ZM6.5 14.864V17.5h11l-.002-3.938-.03-.03-1.1-1.021a1.76 1.76 0 0 0-2.495-.02l-2.171 2.172a2.253 2.253 0 0 1-3.182 0l-.379-.379a.75.75 0 0 0-1.061 0l-.58.58Z\", fill: \"currentColor\", vectorEffect: \"non-scaling-stroke\" })));\n","import * as React from 'react';\n/**\n *\n * Original name: sidebar hide\n *\n * Figma URL: https://www.figma.com/file/RPY7Gy4EixfwdOtVIf2PaX/_Global---Icons?node-id=2916%3A1103\n *\n */\nexport const SidebarHideLine = (props) => (React.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", ...props },\n    React.createElement(\"path\", { d: \"M5 5v13.5h13.5V5H5Zm1.5 1.5H11V17H6.5V6.5ZM17 17h-4.5V6.5H17V17Z\", fill: \"currentColor\", vectorEffect: \"non-scaling-stroke\" })));\n","import * as React from 'react';\n/**\n *\n * Original name: sidebar show\n *\n * Figma URL: https://www.figma.com/file/RPY7Gy4EixfwdOtVIf2PaX/_Global---Icons?node-id=2916%3A1000\n *\n */\nexport const SidebarShowLine = (props) => (React.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", ...props },\n    React.createElement(\"path\", { d: \"M12.5 5H5v13.5h13.5V5h-6ZM17 17h-4.5V6.5H17V17Z\", fill: \"currentColor\", vectorEffect: \"non-scaling-stroke\" })));\n","import {useState} from 'react';\n\nimport {detect} from 'detect-browser';\nimport {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Drawer} from '@dropbox/dig-components/drawer';\nimport {Text, Title} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {CloseLine} from '@dropbox/dig-icons/assets';\n\nimport {IconButton} from '~/components/button';\nimport {color, spacing} from '~/components/styled';\nimport {MediaType} from '~/lib/api';\nimport {isAVType, isImageLike} from '~/lib/helpers';\nimport {getShortcutMessages} from '~/pages/viewer_page/components/keyboard_shortcuts/keyboard_shortcuts_messages';\n\nconst KeyboardShortcuts = styled.div`\n  height: calc(100vh - 64px);\n  overflow-y: auto;\n  position: absolute;\n  right: 0;\n  top: 64px;\n  width: 370px;\n`;\n\nconst HeaderTitle = styled(Title)`\n  color: ${color('Text Base')};\n  margin: 0;\n`;\n\nconst ShortcutGroup = styled.div`\n  background: ${color('Background Base')};\n  border-radius: 10px;\n  margin: 12px 0 24px;\n  padding: 0 16px;\n`;\n\nconst ShortcutRow = styled(Text)`\n  align-content: center;\n  border-bottom: 1px solid ${color('Border Subtle')};\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  padding: 8px 0;\n`;\n\nconst ShortCutRowNoBorder = styled(ShortcutRow)`\n  border-bottom: none;\n`;\n\nconst ShortcutKeySpan = styled.span`\n  background-color: ${color('Background Raised')};\n  padding: 4px 6px;\n  margin: 0 3px;\n`;\n\nconst DrawerOverlay = styled(Drawer.OverlayDrawer)`\n  border: none;\n`;\n\nconst DrawerHeader = styled(Drawer.Header)`\n  background-color: ${color('Background Raised')};\n`;\n\nconst DrawerBody = styled(Drawer.Body)`\n  padding: ${spacing('Macro Medium')} ${spacing('Macro Small')};\n  background-color: ${color('Background Raised')};\n`;\n\ntype KeyboardShortcutsSidebarProps = {\n  /** Whether or not the sidebar is open */\n  open: boolean;\n  /** Callback for when user clicks to close sidebar */\n  onClose: () => void;\n  /** Type of media shortcuts should be filtered for */\n  mediaType: MediaType;\n};\n\nexport const KeyboardShortcutsSidebar = ({\n  open,\n  onClose,\n  mediaType,\n}: KeyboardShortcutsSidebarProps) => {\n  const intl = useIntl();\n  const browser = detect();\n  const commandOrControl =\n    browser?.os === 'Mac OS'\n      ? '⌘'\n      : intl.formatMessage({\n          defaultMessage: 'Ctrl',\n          id: 'tDzWZJ',\n          description:\n            'Text that describes the Control key on a keyboard, as part of a keyboard shortcut.',\n        });\n  const keyboardMessages = getShortcutMessages(intl);\n  const supportsAnnotations = mediaType !== MediaType.Document && mediaType !== MediaType.Audio;\n  const CommentsShortcutRowStyle = supportsAnnotations ? ShortcutRow : ShortCutRowNoBorder;\n  const [isClosing, setIsClosing] = useState(false);\n\n  const content = (\n    <DrawerOverlay\n      alignment=\"right\"\n      isOpen={open}\n      isPortaled={true}\n      onDidClose={() => setIsClosing(false)}\n      onWillClose={() => setIsClosing(true)}\n      role=\"dialog\"\n      width=\"100%\"\n    >\n      <Drawer.Container>\n        <DrawerHeader>\n          <Drawer.Layout>\n            <Drawer.LayoutItem width=\"fill\">\n              <HeaderTitle size=\"small\" tagName=\"h3\" weightVariant=\"emphasized\">\n                {keyboardMessages.title}\n              </HeaderTitle>\n            </Drawer.LayoutItem>\n            <Drawer.LayoutItem shift=\"right\">\n              <IconButton\n                aria-label={keyboardMessages.close}\n                onClick={onClose}\n                variant=\"transparent\"\n              >\n                <UIIcon src={CloseLine} />\n              </IconButton>\n            </Drawer.LayoutItem>\n          </Drawer.Layout>\n        </DrawerHeader>\n\n        <DrawerBody>\n          <Text isBold>{keyboardMessages.viewingShortcutsTitle}</Text>\n          {isImageLike(mediaType) && (\n            <>\n              <ShortcutGroup>\n                <ShortcutRow>\n                  <span>{keyboardMessages.zoomOut}</span>\n                  <code>\n                    <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                    <ShortcutKeySpan>-</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.zoomIn}</span>\n                  <code>\n                    <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                    <ShortcutKeySpan>=</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.zoomTo100}</span>\n                  <code>\n                    <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                    <ShortcutKeySpan>0</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.fitToWindow}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>b</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.fitToHeight}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>h</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.fitToWidth}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>w</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.toggleFullscreen}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>f</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.panImage}</span>\n                  <code>\n                    <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                    <ShortcutKeySpan>{keyboardMessages.drag}</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.selectZoomArea}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>z</ShortcutKeySpan>+\n                    <ShortcutKeySpan>{keyboardMessages.drag}</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.zoomWithWheel}</span>\n                  <code>\n                    <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                    <ShortcutKeySpan>{keyboardMessages.mouseWheel}</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.zoomWithPinch}</span>\n                  <code>\n                    <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                    <ShortcutKeySpan>{keyboardMessages.pinch}</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortCutRowNoBorder>\n                  <span>{keyboardMessages.toggleMap}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>m</ShortcutKeySpan>\n                  </code>\n                </ShortCutRowNoBorder>\n              </ShortcutGroup>\n            </>\n          )}\n\n          {isAVType(mediaType) && (\n            <>\n              <ShortcutGroup>\n                <ShortcutRow>\n                  <span>{keyboardMessages.playPause}</span>\n                  <code>\n                    <ShortcutKeySpan>{keyboardMessages.space}</ShortcutKeySpan>\n                    {keyboardMessages.or}\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>k</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.mute}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>m</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.toggleFullscreen}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>f</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.stepBackward1Frame}</span>\n                  <code>\n                    <ShortcutKeySpan>←</ShortcutKeySpan>\n                    {keyboardMessages.or}\n                    <ShortcutKeySpan>,</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.stepForward1Frame}</span>\n                  <code>\n                    <ShortcutKeySpan>→</ShortcutKeySpan>\n                    {keyboardMessages.or}\n                    <ShortcutKeySpan>.</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.stepBackward10Frames}</span>\n                  <code>\n                    <ShortcutKeySpan>{keyboardMessages.shift}</ShortcutKeySpan>+\n                    <ShortcutKeySpan>←</ShortcutKeySpan>\n                    {keyboardMessages.or}\n                    <ShortcutKeySpan>&lt;</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.stepForward10Frames}</span>\n                  <code>\n                    <ShortcutKeySpan>{keyboardMessages.shift}</ShortcutKeySpan>+\n                    <ShortcutKeySpan>→</ShortcutKeySpan>\n                    {keyboardMessages.or}\n                    <ShortcutKeySpan>&gt;</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.stepBackward5Seconds}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>j</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.stepForward5Seconds}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>l</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.stepBackward10Seconds}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>J</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortCutRowNoBorder>\n                  <span>{keyboardMessages.stepForward10Seconds}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>L</ShortcutKeySpan>\n                  </code>\n                </ShortCutRowNoBorder>\n              </ShortcutGroup>\n            </>\n          )}\n\n          {mediaType === MediaType.Document && (\n            <>\n              <ShortcutGroup>\n                <ShortcutRow>\n                  <span>{keyboardMessages.zoomOut}</span>\n                  <code>\n                    <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                    <ShortcutKeySpan>-</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.zoomIn}</span>\n                  <code>\n                    <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                    <ShortcutKeySpan>=</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.zoomTo100}</span>\n                  <code>\n                    <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                    <ShortcutKeySpan>0</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.toggleFullscreen}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>f</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.pageSelect}</span>\n                  <code>\n                    {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                    <ShortcutKeySpan>p</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.scrollUp}</span>\n                  <code>\n                    <ShortcutKeySpan>↑</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.scrollDown}</span>\n                  <code>\n                    <ShortcutKeySpan>↓</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortcutRow>\n                  <span>{keyboardMessages.scrollLeft}</span>\n                  <code>\n                    <ShortcutKeySpan>←</ShortcutKeySpan>\n                  </code>\n                </ShortcutRow>\n                <ShortCutRowNoBorder>\n                  <span>{keyboardMessages.scrollRight}</span>\n                  <code>\n                    <ShortcutKeySpan>→</ShortcutKeySpan>\n                  </code>\n                </ShortCutRowNoBorder>\n              </ShortcutGroup>\n            </>\n          )}\n\n          <Text isBold>\n            {supportsAnnotations\n              ? keyboardMessages.commentingAnnotatingTitle\n              : keyboardMessages.commentingOnlyTitle}\n          </Text>\n          <ShortcutGroup>\n            <CommentsShortcutRowStyle>\n              <span>{keyboardMessages.addComment}</span>\n              <code>\n                {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                <ShortcutKeySpan>c</ShortcutKeySpan>\n              </code>\n            </CommentsShortcutRowStyle>\n            <CommentsShortcutRowStyle>\n              <span>{keyboardMessages.postComment}</span>\n              <code>\n                <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                <ShortcutKeySpan>↵</ShortcutKeySpan>\n              </code>\n            </CommentsShortcutRowStyle>\n            {supportsAnnotations && (\n              <ShortCutRowNoBorder>\n                <span>{keyboardMessages.undoDrawing}</span>\n                <code>\n                  <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                  {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                  <ShortcutKeySpan>z</ShortcutKeySpan>\n                </code>\n              </ShortCutRowNoBorder>\n            )}\n          </ShortcutGroup>\n\n          <Text isBold>{keyboardMessages.applicationTitle}</Text>\n          <ShortcutGroup>\n            <ShortcutRow>\n              <span>{keyboardMessages.toggleProjectNavigation}</span>\n              <code>\n                <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                <ShortcutKeySpan>{keyboardMessages.shift}</ShortcutKeySpan>+\n                {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n                <ShortcutKeySpan>p</ShortcutKeySpan>\n              </code>\n            </ShortcutRow>\n            <ShortCutRowNoBorder>\n              <span>{keyboardMessages.toggleShortcutsSidebar}</span>\n              <code>\n                <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n                <ShortcutKeySpan>/</ShortcutKeySpan>\n              </code>\n            </ShortCutRowNoBorder>\n          </ShortcutGroup>\n        </DrawerBody>\n      </Drawer.Container>\n    </DrawerOverlay>\n  );\n\n  return (\n    <KeyboardShortcuts style={{display: open || isClosing ? 'block' : 'none'}}>\n      {content}\n    </KeyboardShortcuts>\n  );\n};\n","import React from 'react';\n\nimport {detect} from 'detect-browser';\nimport hotkeys from 'hotkeys-js';\nimport {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {KeyboardLine} from '@dropbox/dig-icons/assets';\n\nimport {IconButton} from '~/components/button';\nimport {color} from '~/components/styled';\nimport type {MediaType} from '~/lib/api';\nimport {KeyboardShortcutsSidebar} from '~/pages/viewer_page/components/keyboard_shortcuts/keyboard_shortcuts_sidebar';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\n\ntype KeyboardShortcutsMenuProps = {\n  /** Type of media shortcuts should be filtered for */\n  mediaType: MediaType;\n};\n\nconst ExpandableIconButton = styled(IconButton)`\n  &[aria-expanded='true'] {\n    color: ${color('Primary Base')};\n  }\n`;\n\nexport const KeyboardShortcutsMenu = ({mediaType}: KeyboardShortcutsMenuProps) => {\n  const browser = detect();\n  const commandOrControl = browser?.os === 'Mac OS' ? 'cmd' : 'ctrl';\n  const {loggingClient} = useViewerPageContext();\n  const [sidebarOpen, setSidebarOpen] = React.useState(false);\n\n  const toggleSidebar = React.useCallback(() => {\n    setSidebarOpen((prevSidebarOpen) => !prevSidebarOpen);\n    // eslint-disable-next-line deprecation/deprecation\n    loggingClient.logEvent('select_keyboard_shortcut_menu');\n  }, [loggingClient]);\n\n  React.useEffect(() => {\n    hotkeys(`${commandOrControl}+/`, toggleSidebar);\n\n    return () => {\n      hotkeys.unbind(`${commandOrControl}+/`, toggleSidebar);\n    };\n  }, [commandOrControl, toggleSidebar]);\n\n  const intl = useIntl();\n\n  return (\n    <div>\n      <ExpandableIconButton\n        aria-expanded={sidebarOpen}\n        aria-haspopup=\"dialog\"\n        aria-label={intl.formatMessage({\n          defaultMessage: 'Toggle keyboard shortcuts dialog',\n          id: 'yvc/Gt',\n          description:\n            'A button with a keyboard that when clicked will toggle the appearance of a dialog containing keyboard shortcuts',\n        })}\n        onClick={toggleSidebar}\n        variant=\"transparent\"\n      >\n        <UIIcon src={KeyboardLine} />\n      </ExpandableIconButton>\n\n      <KeyboardShortcutsSidebar mediaType={mediaType} onClose={toggleSidebar} open={sidebarOpen} />\n    </div>\n  );\n};\n","import {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Spinner} from '@dropbox/dig-components/progress_indicators';\nimport {Snackbar} from '@dropbox/dig-components/snackbar';\nimport {Text} from '@dropbox/dig-components/typography';\n\nimport {ReelSnackbar} from '~/components/snackbar';\n\ntype DownloadSnackbarProps = {\n  open: boolean;\n  error?: string;\n  onClose: () => void;\n};\n\nconst StatusContainer = styled.div`\n  display: flex;\n  align-items: center;\n`;\n\nconst SpinnerContainer = styled.div`\n  margin-right: var(--spacing__unit--2);\n`;\n\nexport const DownloadSnackbar = ({open, onClose, error}: DownloadSnackbarProps) => {\n  const intl = useIntl();\n  return (\n    <ReelSnackbar onRequestClose={onClose} open={open} timeout={error ? 5000 : 0}>\n      <Snackbar.Message>\n        {!error && (\n          <StatusContainer>\n            <SpinnerContainer>\n              <Spinner />\n            </SpinnerContainer>\n            <Text color=\"standard\" inverse>\n              {intl.formatMessage({\n                defaultMessage: 'Generating download...',\n                id: 'H863El',\n                description: 'Message indicating download is being generated',\n              })}\n            </Text>\n          </StatusContainer>\n        )}\n        {error && (\n          <Text color=\"error\" inverse>\n            {error}\n          </Text>\n        )}\n      </Snackbar.Message>\n    </ReelSnackbar>\n  );\n};\n","import React, {useMemo} from 'react';\n\nimport {useQuery} from '@tanstack/react-query';\nimport type {FileType} from 'pap-events/enums/file_type';\nimport {\n  PAP_Select_ReelMediaAction,\n  type Select_ReelMediaAction,\n} from 'pap-events/replay/select_reel_media_action';\nimport {FormattedMessage, type IntlShape} from 'react-intl';\nimport {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {reel} from '@dropbox/api-v2-client';\nimport type {WrapperOnToggle, WrapperTriggerProps} from '@dropbox/dig-components/menu';\nimport {Menu} from '@dropbox/dig-components/menu';\nimport type {OverlayAnchorRef} from '@dropbox/dig-components/overlay';\nimport {Spinner} from '@dropbox/dig-components/progress_indicators';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {UIIcon} from '@dropbox/dig-icons';\n\nimport {Button, IconButton} from '~/components/button';\nimport {useGrantBook} from '~/components/password_cache_provider';\nimport {useErrorSnackbar} from '~/components/snackbar/error_snackbar';\nimport {getProxyZipUrl, type MediaProp} from '~/lib/api';\nimport {getProxyUrls, getVideoDownloadLink, MediaType} from '~/lib/api';\nimport {download} from '~/lib/download';\nimport {ReplayError, ReplayErrorCategory} from '~/lib/error_reporting';\nimport type {LoggingClient} from '~/lib/logging/logger';\nimport type {QualityOptionsTypes} from '~/lib/logging/logger_types';\nimport {replayApi} from '~/lib/query_client';\nimport {useBackoff} from '~/lib/use-backoff';\n\nimport {DownloadSnackbar} from './video_download_snackbar';\nimport {useViewerPageContext} from '../../viewer_page_context';\n\nconst SpinnerWrapper = styled.div`\n  display: flex;\n  justify-content: center;\n`;\n\nconst MenuSegment = styled(Menu.Segment)`\n  // Prevent text from wrapping since these are not portaled menus\n  & .dig-Menu-segment-label {\n    white-space: nowrap;\n  }\n`;\n\nconst DownloadButtonWrapper = styled.div`\n  z-index: 12;\n`;\n\nconst DownloadIcon = (props: React.SVGProps<SVGSVGElement>) => {\n  return (\n    <svg fill=\"none\" height=\"14\" viewBox=\"0 0 15 14\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path\n        d=\"M3.53473 5.66246L6.65614 8.61948L7.5 9.41891V8.2565V1H8V8.2565V9.41891L8.84387 8.61948L11.9653 5.66246L12.3088 6.02529L7.75 10.3442L3.19123 6.02529L3.53473 5.66246ZM1 13.5V13H14.5V13.5H1Z\"\n        stroke={props.stroke || '#F7F5F2'}\n      />\n    </svg>\n  );\n};\n\nconst resolutionOrder: {[key in string]: number} = {\n  res_1080_p: 0,\n  res_1080p: 0,\n  res_720_p: 1,\n  res_720p: 1,\n  res_480_p: 2,\n  res_480p: 2,\n  res_360_p: 3,\n  res_360p: 3,\n  other: 4,\n  proxy_res_not_set: 5,\n};\n\nconst resolutionText: {[key in string]: QualityOptionsTypes} = {\n  res_1080_p: '1080P',\n  res_1080p: '1080P',\n  res_720_p: '720P',\n  res_720p: '720P',\n  res_480_p: '480P',\n  res_480p: '480P',\n  res_360_p: '360P',\n  res_360p: '360P',\n  other: 'Other',\n  proxy_res_not_set: 'Unknown',\n};\n\nconst pendingStatusList = ['in_progress', 'retryable_failure', 'proxy_status_not_set'];\n\nconst proxyContainerFormat = 'mp4';\n\nconst getDownloadButtonStrings = (intl: IntlShape) => {\n  return {\n    tooltipTitle: intl.formatMessage({\n      defaultMessage: 'Download',\n      id: 'UFpCJN',\n      description: 'Tooltip text for the button to download a file.',\n    }),\n    tooltipAriaLabel: intl.formatMessage({\n      defaultMessage: 'Download',\n      id: 'KChiUq',\n      description: 'Aria label for the button to download a file.',\n    }),\n    downloadFileMsg: intl.formatMessage({\n      description: 'Text for button that opens dropdown menu to download file',\n      defaultMessage: 'Download file',\n      id: 'M5kFqP',\n    }),\n  };\n};\n\nconst InnerDownloadButton = (props: {\n  triggerProps: WrapperTriggerProps;\n  intl: IntlShape;\n  buttonType: 'collaborator' | 'admin';\n  triggerRef: OverlayAnchorRef;\n}) => {\n  const {buttonType, intl, triggerProps, triggerRef} = props;\n  const translatedStrings = getDownloadButtonStrings(intl);\n\n  if (buttonType === 'admin') {\n    return (\n      <Tooltip placement=\"bottom\" title={translatedStrings.tooltipTitle} triggerRef={triggerRef}>\n        <IconButton\n          {...triggerProps}\n          aria-label={translatedStrings.tooltipAriaLabel}\n          data-safe-to-unmask-name=\"preview-download-button\"\n          data-testid=\"preview-download-button\"\n          variant=\"transparent\"\n        >\n          <UIIcon src={DownloadIcon} />\n        </IconButton>\n      </Tooltip>\n    );\n  }\n\n  return (\n    <Button\n      {...triggerProps}\n      aria-label={translatedStrings.downloadFileMsg}\n      data-testid=\"preview-download-button\"\n      variant=\"outline\"\n      withDropdownIcon\n      withIconStart={<UIIcon src={DownloadIcon} />}\n    >\n      {translatedStrings.downloadFileMsg}\n    </Button>\n  );\n};\n\nconst DirectDownloadButton = (props: {\n  intl: IntlShape;\n  buttonType: 'collaborator' | 'admin';\n  onClick: () => void;\n}) => {\n  const {buttonType, intl, onClick} = props;\n  const translatedStrings = getDownloadButtonStrings(intl);\n\n  if (buttonType === 'admin') {\n    return (\n      <Tooltip placement=\"bottom\" title={translatedStrings.tooltipTitle}>\n        <IconButton\n          aria-label={translatedStrings.tooltipAriaLabel}\n          onClick={onClick}\n          variant=\"transparent\"\n        >\n          <UIIcon src={DownloadIcon} />\n        </IconButton>\n      </Tooltip>\n    );\n  }\n\n  return (\n    <Button\n      aria-label={translatedStrings.downloadFileMsg}\n      onClick={onClick}\n      variant=\"outline\"\n      withIconStart={<UIIcon src={DownloadIcon} />}\n    >\n      {translatedStrings.downloadFileMsg}\n    </Button>\n  );\n};\n\nexport const DownloadButton = (props: {buttonType: 'collaborator' | 'admin'}) => {\n  const {mediaMetadata, loggingClient, shareToken, downloadsEnabled} = useViewerPageContext();\n  return (\n    <BaseDownloadButton\n      buttonType={props.buttonType}\n      downloadsEnabled={downloadsEnabled}\n      loggingClient={loggingClient}\n      mediaMetadata={mediaMetadata}\n      shareToken={shareToken}\n    />\n  );\n};\n\nfunction useProxyQuery({\n  mediaMetadata,\n  shareToken,\n  pollToCompletion,\n}: {\n  mediaMetadata: MediaProp;\n  shareToken: string | undefined;\n  pollToCompletion: boolean;\n}) {\n  const backoff = useBackoff();\n  const proxiesEnabled = mediaMetadata.mediaType === MediaType.Video;\n  const grantBook = useGrantBook(shareToken);\n\n  const query = useQuery({\n    queryKey: replayApi.getProxyUrls(mediaMetadata.id, {grantBook, shareToken}),\n    queryFn: async () => {\n      const proxyResult = await getProxyUrls({\n        videoVersionId: mediaMetadata.id,\n        resolutions: [],\n        onlyRetrieveStatus: true,\n        shareToken,\n        grantBook,\n      });\n\n      const proxyUrls = proxyResult.proxy_urls ?? [];\n      return proxyUrls.sort(\n        (a, b) =>\n          resolutionOrder[a.resolution?.['.tag']!] - resolutionOrder[b.resolution?.['.tag']!],\n      );\n    },\n    enabled: proxiesEnabled,\n    refetchInterval: (data) => {\n      const hasPending = (data ?? []).some((result) =>\n        pendingStatusList.includes(result.status?.['.tag']!),\n      );\n\n      if (!pollToCompletion || !hasPending) {\n        backoff.reset();\n        return false;\n      }\n\n      return backoff.next();\n    },\n  });\n\n  return {data: query.data ?? [], isLoading: query.isLoading};\n}\n\ninterface BaseDownloadButtonProps {\n  buttonType: 'collaborator' | 'admin';\n  mediaMetadata: MediaProp;\n  loggingClient: LoggingClient;\n  shareToken: string | undefined;\n  downloadsEnabled: boolean;\n}\n\nconst BaseDownloadButton = ({\n  mediaMetadata,\n  buttonType,\n  loggingClient,\n  shareToken,\n  downloadsEnabled,\n}: BaseDownloadButtonProps) => {\n  const [menuOpen, setMenuOpen] = React.useState(false);\n  const [snackbarOpen, setSnackbarOpen] = React.useState<boolean>(false);\n  const [downloadError, setDownloadError] = React.useState<string | undefined>(undefined);\n\n  const proxiesEnabled = mediaMetadata.mediaType === MediaType.Video;\n  const grantBook = useGrantBook(shareToken);\n  const intl = useIntl();\n  const {data: supportedProxies, isLoading: proxiesLoaded} = useProxyQuery({\n    mediaMetadata,\n    shareToken,\n    pollToCompletion: menuOpen,\n  });\n  const {openErrorSnackbar} = useErrorSnackbar();\n\n  const areAllProxiesGenerated =\n    supportedProxies.length > 0 &&\n    supportedProxies.every((proxy) => proxy.status?.['.tag']! === 'success');\n\n  const mediaAction: Select_ReelMediaAction['properties'] = useMemo(\n    () => ({\n      accessType: buttonType === 'admin' ? 'admin' : shareToken ? 'reviewer' : 'owner',\n\n      creatorId: mediaMetadata.ownerUid,\n      deviceId: loggingClient.deviceId,\n      videoId: mediaMetadata.videoIdForAmplitude,\n      videoVersionId: mediaMetadata.id,\n      projectId: mediaMetadata.projectId,\n\n      fileCategory: 'video',\n      reelMediaAction: 'download_option',\n    }),\n    [buttonType, loggingClient.deviceId, mediaMetadata, shareToken],\n  );\n\n  const downloadVideo = React.useCallback(\n    async (resolution?: reel.ProxyResolution) => {\n      try {\n        let link = '';\n        let extension = '';\n\n        if (resolution) {\n          loggingClient.logPap(PAP_Select_ReelMediaAction({...mediaAction, actionDetail: 'proxy'}));\n          const res = await getProxyUrls({\n            videoVersionId: mediaMetadata.id,\n            resolutions: [resolution],\n            onlyRetrieveStatus: false,\n            shareToken,\n            grantBook,\n            analyticsData: {\n              logger: loggingClient,\n              creatorId: mediaMetadata.ownerUid,\n              papAccessType: buttonType === 'admin' ? 'admin' : shareToken ? 'reviewer' : 'owner',\n              videoId: mediaMetadata.videoIdForAmplitude,\n              projectId: mediaMetadata.projectId,\n              fileType: mediaMetadata.fileExtension as FileType,\n            },\n          });\n          if (!res.proxy_urls || res.proxy_urls.length !== 1) {\n            throw new Error('Received invalid proxy url response');\n          }\n          link = res.proxy_urls[0].url!;\n          extension = proxyContainerFormat;\n        } else {\n          loggingClient.logPap(\n            PAP_Select_ReelMediaAction({...mediaAction, actionDetail: 'original'}),\n          );\n          const res = await getVideoDownloadLink({\n            videoId: mediaMetadata.videoId,\n            videoVersionId: mediaMetadata.id,\n            shareToken,\n            grantBook,\n            analyticsData: {\n              logger: loggingClient,\n              papAccessType: buttonType === 'admin' ? 'admin' : shareToken ? 'reviewer' : 'owner',\n              creatorId: mediaMetadata.ownerUid,\n              projectId: mediaMetadata.projectId,\n            },\n          });\n          link = res['link'];\n          extension = res['extension'];\n        }\n\n        if (!link) {\n          throw new Error('No link');\n        }\n\n        download({\n          url: link,\n          filename: `${mediaMetadata.projectName} - V${mediaMetadata.versionNum}.${extension}`,\n        });\n\n        setSnackbarOpen(false);\n      } catch (e: any) {\n        setDownloadError('Failed to create download link');\n      }\n    },\n    [mediaMetadata, loggingClient, mediaAction, shareToken, grantBook, buttonType],\n  );\n\n  const handleDownloadProxy = (resolution?: reel.ProxyResolution) => {\n    setSnackbarOpen(true);\n    setDownloadError(undefined);\n    downloadVideo(resolution);\n  };\n\n  const handleDownloadAllProxies = async () => {\n    loggingClient.logPap(PAP_Select_ReelMediaAction({...mediaAction, actionDetail: 'all_proxies'}));\n\n    try {\n      const url = await getProxyZipUrl({\n        videoVersionId: mediaMetadata.id,\n        resolutions: supportedProxies.map((proxy) => proxy.resolution!),\n        common: {\n          grant_book: grantBook,\n          share_token: shareToken,\n        },\n        analyticsData: {\n          logger: loggingClient,\n          creatorId: mediaMetadata.ownerUid,\n          videoId: mediaMetadata.videoIdForAmplitude,\n          papAccessType: buttonType === 'admin' ? 'admin' : shareToken ? 'reviewer' : 'owner',\n          projectId: mediaMetadata.projectId,\n        },\n      });\n\n      download({\n        url,\n        filename: `${mediaMetadata.projectName}.zip}`,\n      });\n    } catch (error) {\n      openErrorSnackbar(\n        intl.formatMessage({\n          defaultMessage: 'Failed to download all proxies',\n          id: 'hpIJAi',\n          description: 'Error message when we fail to download all proxies',\n        }),\n      );\n      reportError(\n        new ReplayError({\n          error,\n          severity: 'non-critical',\n          tags: ['get_proxy_zip_url_failed'],\n          category: ReplayErrorCategory.UncaughtException,\n        }),\n      );\n    }\n  };\n\n  const handleToggle: WrapperOnToggle = async ({isOpen}: {isOpen: boolean}) => {\n    setMenuOpen(isOpen);\n    // eslint-disable-next-line deprecation/deprecation\n    loggingClient.logEvent('select_reel_download_menu');\n  };\n\n  const selectorText =\n    mediaMetadata.mediaType === MediaType.Audio\n      ? mediaMetadata.containerFormat.toUpperCase()\n      : mediaMetadata.containerFormat.toUpperCase() +\n        ' ' +\n        mediaMetadata.mediaMetadata.resolutionWidth +\n        'x' +\n        mediaMetadata.mediaMetadata.resolutionHeight;\n\n  if (!downloadsEnabled) return null;\n\n  const downloadMenu = (\n    <Menu.Wrapper isPortaled={false} onToggle={handleToggle}>\n      {({getContentProps, getTriggerProps, triggerRef}) => (\n        <>\n          <InnerDownloadButton\n            buttonType={buttonType}\n            intl={intl}\n            triggerProps={getTriggerProps()}\n            triggerRef={triggerRef}\n          />\n          <Menu.Content {...getContentProps()}>\n            <MenuSegment\n              withLabel={intl.formatMessage({\n                defaultMessage: 'Download Original',\n                id: '8xDvnO',\n                description: 'Label for the option to download the original file.',\n              })}\n            >\n              <Menu.ActionItem\n                onClick={() => {\n                  handleDownloadProxy();\n                }}\n              >\n                {selectorText}\n              </Menu.ActionItem>\n            </MenuSegment>\n            {proxiesEnabled &&\n            ((proxiesLoaded && supportedProxies.length > 0) || !proxiesLoaded) ? (\n              <MenuSegment\n                withLabel={intl.formatMessage({\n                  defaultMessage: 'Download Proxy',\n                  id: '3Zd376',\n                  description:\n                    'Label for a set of options to download proxy versions of a file at different quality levels.',\n                })}\n              >\n                {areAllProxiesGenerated && (\n                  <Menu.ActionItem onClick={handleDownloadAllProxies} value=\"all\">\n                    <FormattedMessage\n                      defaultMessage=\"Download All\"\n                      description=\"Button to download all video proxies\"\n                      id=\"E2fvds\"\n                    />\n                  </Menu.ActionItem>\n                )}\n\n                {supportedProxies.length > 0 ? (\n                  supportedProxies.map((supportedProxy) => {\n                    const resolutionTag = resolutionText[supportedProxy.resolution!['.tag']];\n\n                    return (\n                      <Menu.ActionItem\n                        disabled={supportedProxy.status?.['.tag']! !== 'success'}\n                        key={`download-resolution-${resolutionTag}`}\n                        onClick={() => {\n                          handleDownloadProxy(supportedProxy.resolution);\n                        }}\n                        value={resolutionTag}\n                        withSubtitle={\n                          pendingStatusList.includes(supportedProxy.status?.['.tag']!)\n                            ? intl.formatMessage({\n                                defaultMessage: 'Generating file...',\n                                id: 'ctHH/A',\n                                description: 'Text that appears while the file is being generated.',\n                              })\n                            : supportedProxy.status?.['.tag']! === 'failed'\n                            ? intl.formatMessage({\n                                defaultMessage: 'Failed to generate file',\n                                id: '839r2i',\n                                description: 'Text that appears if file generation has failed.',\n                              })\n                            : ''\n                        }\n                      >\n                        {proxyContainerFormat.toUpperCase()} {resolutionTag}\n                      </Menu.ActionItem>\n                    );\n                  })\n                ) : (\n                  <SpinnerWrapper>\n                    <Spinner />\n                  </SpinnerWrapper>\n                )}\n              </MenuSegment>\n            ) : null}\n          </Menu.Content>\n        </>\n      )}\n    </Menu.Wrapper>\n  );\n\n  const documentDownloadButton = (\n    <DirectDownloadButton\n      buttonType={buttonType}\n      intl={intl}\n      onClick={() => handleDownloadProxy()}\n    />\n  );\n\n  return (\n    <DownloadButtonWrapper>\n      {mediaMetadata.mediaType === MediaType.Document ||\n      mediaMetadata.mediaType === MediaType.CreativeDoc\n        ? documentDownloadButton\n        : downloadMenu}\n      <DownloadSnackbar\n        error={downloadError}\n        onClose={() => setSnackbarOpen(false)}\n        open={snackbarOpen}\n      />\n    </DownloadButtonWrapper>\n  );\n};\n","import {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {OverlayAnchorRef} from '@dropbox/dig-components/overlay';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Text, Title} from '@dropbox/dig-components/typography';\nimport {ThemeContainer, ThemeProvider} from '@dropbox/dig-foundations';\n\nimport {Button} from '~/components/button';\n\ntype PlgExp1Props = {\n  isOpen: boolean;\n  triggerRef: OverlayAnchorRef;\n  onClose: () => void;\n};\n\nconst TooltipFocusWrapper = styled.div`\n  outline: none;\n  padding: var(--dig-spacing__micro__large) var(--dig-spacing__micro__medium);\n`;\n\nconst StyledTitle = styled(Title)`\n  margin-top: 0;\n  margin-bottom: 0;\n`;\n\nconst StyledText = styled(Text)`\n  margin-top: var(--dig-spacing__micro__small);\n  margin-bottom: var(--dig-spacing__micro__large);\n`;\n\nconst ToolTipButton = styled(Button)`\n  border-radius: 0;\n  margin-left: 185px;\n`;\n\nexport const FeedbackTooltip = (props: PlgExp1Props) => {\n  return (\n    <ThemeProvider mode=\"bright\" overrides=\"reset\" theme=\"vis2023\">\n      <ThemeContainer>\n        <Tooltip.Control\n          auto\n          maxWidth={272}\n          open={props.isOpen}\n          placement=\"bottom-end\"\n          triggerRef={props.triggerRef}\n        >\n          <TooltipFocusWrapper>\n            <StyledTitle>\n              <FormattedMessage\n                defaultMessage=\"Want feedback on this file?\"\n                description=\"A header describing the share function\"\n                id=\"RzZ0F8\"\n              />\n            </StyledTitle>\n            <StyledText color=\"standard\" tagName=\"p\">\n              <FormattedMessage\n                defaultMessage=\"Share to track comments and collaborate with anyone—no Dropbox account required.\"\n                description=\"Message describing specific features of Replay share and that Replay projects can be shared with users without Dropbox accounts\"\n                id=\"myK7vd\"\n              />\n            </StyledText>\n            <ToolTipButton onClick={props.onClose} variant=\"outline\">\n              <FormattedMessage\n                defaultMessage=\"Got it\"\n                description=\"Message for a button acknowledging and dismissing information text\"\n                id=\"yYS4gn\"\n              />\n            </ToolTipButton>\n          </TooltipFocusWrapper>\n        </Tooltip.Control>\n      </ThemeContainer>\n    </ThemeProvider>\n  );\n};\n","import {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Menu} from '@dropbox/dig-components/menu';\nimport {Text, Title} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {ShowLine} from '@dropbox/dig-icons/assets';\n\nimport {Button} from '~/components/button';\n\nimport {useSyncCollabSharedState} from './sync_collab/shared_state';\nimport {useViewerCountQuery} from '../viewer_page_context';\n\nconst ViewerCountDropdown = styled('div')`\n  margin-left: 16px;\n  margin-right: 64px;\n  max-width: 246px;\n`;\n\nconst ZeroViewerCountDropdown = styled('div')`\n  margin: 8px 16px 16px 16px;\n  width: 200px;\n`;\n\nexport const ViewerCountButton = () => {\n  const {data: viewerCount} = useViewerCountQuery();\n  const {isUserInCollabSession} = useSyncCollabSharedState();\n  const intl = useIntl();\n  if (!viewerCount || isUserInCollabSession) {\n    return null;\n  }\n  const viewerCountLabel = intl.formatMessage(\n    {\n      defaultMessage: '{count, plural, one{# viewed} other{# viewed}}',\n      id: 'OgLpxA',\n      description: 'Text that shows view count on a video',\n    },\n    {count: viewerCount.guests + viewerCount.teamMembers},\n  );\n\n  const teamMemberCountLabel = intl.formatMessage(\n    {\n      defaultMessage: '{count, plural, one{# project member} other{# project members}}',\n      id: '7Br7Jj',\n      description: 'Text that shows view count of team members on a video',\n    },\n    {count: viewerCount.teamMembers},\n  );\n\n  const guestsCountLabel = intl.formatMessage(\n    {\n      defaultMessage: '{count, plural, one{# guest} other{# guests}}',\n      id: 'qkrbdB',\n      description: 'Text that shows view count of guests on a video',\n    },\n    {count: viewerCount.guests},\n  );\n\n  return (\n    <>\n      <Menu.Wrapper>\n        {({getTriggerProps, getContentProps}) => (\n          <>\n            <Button\n              {...getTriggerProps()}\n              aria-label={viewerCountLabel}\n              variant=\"opacity\"\n              withDropdownIcon\n              withIconLeft={\n                <UIIcon\n                  data-safe-to-unmask-name=\"viewer-count-button\"\n                  size=\"standard\"\n                  src={ShowLine}\n                />\n              }\n            >\n              {viewerCountLabel}\n            </Button>\n            <Menu.Content {...getContentProps()} placement=\"bottom-end\">\n              {viewerCount.guests + viewerCount.teamMembers === 0 ? (\n                <Menu.Segment>\n                  <ZeroViewerCountDropdown>\n                    <Title size=\"small\" style={{marginTop: 0}}>\n                      {intl.formatMessage({\n                        defaultMessage: 'No views yet',\n                        id: 'Y9E1RE',\n                        description: 'Text indicating no one has viewed a video',\n                      })}\n                    </Title>\n                    <Text\n                      size=\"small\"\n                      style={{overflowWrap: 'break-word'}}\n                      tagName=\"p\"\n                      variant=\"label\"\n                    >\n                      {intl.formatMessage({\n                        defaultMessage:\n                          'Share your file with others and see who has viewed it here.',\n                        id: 'Jk7AMf',\n                        description: 'Message asking users to share a video',\n                      })}\n                    </Text>\n                  </ZeroViewerCountDropdown>\n                </Menu.Segment>\n              ) : (\n                <Menu.Segment>\n                  <ViewerCountDropdown>\n                    <Text color=\"subtle\" size=\"xsmall\" tagName=\"p\" variant=\"label\">\n                      {intl.formatMessage({\n                        defaultMessage: 'Viewed by',\n                        id: 'yH2aWV',\n                        description: 'Label indicating how many viewers have viewed a video',\n                      })}\n                    </Text>\n                    <Text size=\"medium\" style={{marginTop: '2px'}} tagName=\"p\" variant=\"label\">\n                      {teamMemberCountLabel}\n                    </Text>\n                    <Text size=\"medium\" style={{marginTop: '2px'}} tagName=\"p\" variant=\"label\">\n                      {guestsCountLabel}\n                    </Text>\n                  </ViewerCountDropdown>\n                </Menu.Segment>\n              )}\n            </Menu.Content>\n          </>\n        )}\n      </Menu.Wrapper>\n    </>\n  );\n};\n","import React from 'react';\n\nimport {FormattedMessage} from 'react-intl';\nimport {matchPath} from 'react-router';\n\nimport {Menu} from '@dropbox/dig-components/menu';\n\nimport {getUserPublishActions, listOnboardingActions, resetOnboarding} from '~/lib/api';\n\nimport {useViewerPageContext, useViewerPageOnboardingContext} from './viewer_page_context';\nimport {DBX_BUILD_MODE} from '../../context_utils';\nimport {getCurrentUser} from '../../lib/client';\nimport {VIDEO_ROUTE_MATCH} from '../../route_path_matches';\n\nexport const ResetTutorialMenuItem = () => {\n  const {setPublishActions} = useViewerPageContext();\n  const {updateViewerOnboardingActions} = useViewerPageOnboardingContext();\n\n  const isVideoRoute = !!matchPath(\n    {\n      path: VIDEO_ROUTE_MATCH,\n      end: true,\n    },\n    window.location.pathname,\n  );\n\n  const isDropboxer = getCurrentUser()?.is_dropboxer ?? false;\n\n  const resetOnboardingActions = React.useCallback(() => {\n    (async () => {\n      await resetOnboarding();\n      const updatedPublishActions = await getUserPublishActions();\n      setPublishActions(updatedPublishActions);\n      const updatedOnboardingActions = await listOnboardingActions();\n      updateViewerOnboardingActions(updatedOnboardingActions);\n    })();\n  }, [updateViewerOnboardingActions, setPublishActions]);\n\n  const onResetTutorialClick = () => {\n    resetOnboardingActions();\n  };\n\n  if (isVideoRoute && (DBX_BUILD_MODE === 'local' || isDropboxer)) {\n    return (\n      <Menu.Segment>\n        <Menu.ActionItem onClick={onResetTutorialClick}>\n          <FormattedMessage\n            defaultMessage=\"Reset tutorial\"\n            description=\"Link that resets tutorial onboarding tooltips.\"\n            id=\"K0RjW+\"\n          />\n        </Menu.ActionItem>\n      </Menu.Segment>\n    );\n  }\n\n  return null;\n};\n","/* eslint-disable deprecation/deprecation */\nimport React, {useMemo} from 'react';\n\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {reel} from '@dropbox/api-v2-client';\nimport {ClickOutside} from '@dropbox/dig-components/click_outside';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Link} from '@dropbox/dig-components/typography';\nimport {Text} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {ArrowLeftLine, ArrowRightLine, EditLine} from '@dropbox/dig-icons/assets';\n\nimport {Button, IconButton} from '~/components/button';\nimport {ItemType} from '~/components/common';\nimport {ModifyItemSnackbar} from '~/components/modify_item_snackbar';\nimport {OnboardingChecklist} from '~/components/onboarding_v2/onboarding_checklist';\nimport {ReplayTextInput} from '~/components/text_input';\nimport {useViewport, VERY_SMALL_SCREEN_WIDTH_BREAKPOINT} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {renameProject} from '~/lib/api';\nimport {isImageLike} from '~/lib/helpers';\nimport {useMatchesTutorialsRoute} from '~/lib/onboarding_v2/use_matches_tutorials_route';\nimport {getUploadedTimeForDisplay} from '~/lib/time';\nimport {useQuery} from '~/lib/use-query';\nimport {KeyboardShortcutsMenu} from '~/pages/viewer_page/components/keyboard_shortcuts/keyboard_shortcuts_menu';\nimport {VersionsAwareShareFeatures} from '~/pages/viewer_page/components/share_features';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\nimport {hideModifyItemsSnackbarAtom, modifyItemsSnackbarAtom} from '~/state/browse';\nimport {\n  NavigationSidebarDisplayState,\n  navigationSidebarDisplayStateAtom,\n  viewerReadFolderListingAtom,\n} from '~/state/viewer';\n\nimport {DownloadButton} from './components/downloads/video_download_button';\nimport {FeedbackTooltip} from './components/feedback_tooltip';\nimport {useSyncCollabSharedState} from './components/sync_collab/shared_state';\nimport type {VersionsContextValue} from './components/versions_context';\nimport {useVersionsContext} from './components/versions_context';\nimport {ViewerCountButton} from './components/view_counter';\nimport {ResetTutorialMenuItem} from './reset_onboarding';\nimport {useViewerPageLoggingClient} from './viewer_page_logging_context';\nimport {SkeletonRectangle} from '../../components/skeleton';\nimport {MAX_PROJECT_LENGTH} from '../../lib/constants';\nimport {SurfaceType} from '../../lib/logging/logger_types';\nimport {replayStorage} from '../../lib/storage';\nimport {\n  BackChevron,\n  CommonHeaderLayout,\n  CommonInfoSection,\n  CommonLastUpdatedText,\n  CommonTitle,\n  HeaderReplayLogo,\n} from '../layout/components/common_header';\nimport {HelpMenu} from '../layout/components/help_menu';\n\ntype ViewerPageHeaderProps = {\n  showDownloadsInHeader: boolean;\n  areCommentsEnabled: boolean;\n  backToUrl: string | null;\n  hasEditAccess: boolean; // Owner or project admin access\n  sidebarOpen?: boolean;\n  viewOnlyProjectMember: boolean;\n};\n\ntype PeopleFeaturesProps = {\n  isWatermarkedLink: boolean;\n  isImage: boolean;\n  showDownloadButton: boolean;\n  areCommentsEnabled: boolean;\n  canCreateShareLinks: boolean;\n  isSmallScreenSize: boolean;\n  viewOnlyProjectMember: boolean;\n};\n\nconst ButtonSeparator = styled('div')`\n  height: 32px;\n  border-right: 1px solid rgba(247, 245, 242, 0.3);\n`;\n\nconst HeaderLink = styled(Link)`\n  text-decoration: none;\n`;\n\nconst RightButtonsContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  grid-gap: var(--spacing__unit--1);\n\n  @media screen and (max-width: ${VERY_SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n    display: none;\n  }\n`;\n\nconst PeopleFeaturesSection = (props: PeopleFeaturesProps) => {\n  const triggerRef = React.useRef<HTMLDivElement>(null);\n  const {\n    areCommentsEnabled,\n    canCreateShareLinks,\n    isImage,\n    isWatermarkedLink,\n    showDownloadButton,\n    viewOnlyProjectMember,\n  } = props;\n  const {isSharePage} = useVersionsContext();\n\n  const {isSmallScreenSize} = useViewport();\n  const isViewOnlyLinkAccess = !areCommentsEnabled;\n\n  // For the old share modal, the share button is hidden for view-only project members and view-only share links\n  const hideShareButton =\n    (!isSharePage && viewOnlyProjectMember) || (isSharePage && isViewOnlyLinkAccess);\n\n  const params = useQuery();\n  const [dismissedFeedback, setDismissedFeedback] = React.useState(false);\n\n  const renderFeedback = params.get('plg_exp_1') === 'true';\n  const dismissFeedback = React.useCallback(() => {\n    setDismissedFeedback(true);\n  }, []);\n\n  return (\n    <>\n      {!isImage && areCommentsEnabled && (\n        <>\n          <div id=\"sync-collab-join-button-portal\"></div>\n          {!isSmallScreenSize && <ButtonSeparator />}\n        </>\n      )}\n      {!isSmallScreenSize && isSharePage && showDownloadButton && !isWatermarkedLink && (\n        <DownloadButton buttonType=\"collaborator\" />\n      )}\n      {(!viewOnlyProjectMember || isSharePage || !hideShareButton) && (\n        <div onClick={dismissFeedback} ref={triggerRef}>\n          <VersionsAwareShareFeatures\n            canCreateLinks={canCreateShareLinks}\n            focusRing={renderFeedback && !dismissedFeedback}\n            isViewOnlyLinkAccess={isViewOnlyLinkAccess}\n            location=\"video_page_header\"\n            shareButtonVariant=\"primary\"\n          />\n        </div>\n      )}\n      {renderFeedback && (\n        <FeedbackTooltip\n          isOpen={!dismissedFeedback}\n          onClose={dismissFeedback}\n          triggerRef={triggerRef}\n        />\n      )}\n    </>\n  );\n};\n\nexport const ViewerPageHeader = ({\n  showDownloadsInHeader,\n  areCommentsEnabled,\n  backToUrl,\n  hasEditAccess,\n  sidebarOpen,\n  viewOnlyProjectMember,\n}: ViewerPageHeaderProps) => {\n  const {isSharePage} = useVersionsContext();\n  const {isSmallScreenSize, isMobileDevice} = useViewport();\n  const {isUserInCollabSession, liveReviewImprovsIsOn} = useSyncCollabSharedState();\n  const {\n    isWatermarkedLink,\n    loggingClient,\n    mediaMetadata: {mediaType, projectName, uploadTimestamp, folderName, fileExtension},\n    setProjectName,\n  } = useViewerPageContext();\n  const {projectId} = useVersionsContext();\n\n  const handleHeaderLinkClick = React.useCallback(() => {\n    loggingClient.logEvent('select_logged_out_marketing_page');\n  }, [loggingClient]);\n\n  const showLeftNavSubtitle = !isSharePage && folderName && folderName.length > 0;\n\n  return (\n    <CommonHeaderLayout\n      leftSectionLink={\n        backToUrl ? (\n          <BackChevron backToUrl={backToUrl} loggingClient={loggingClient} />\n        ) : (\n          <HeaderLink\n            href=\"https://replay.dropbox.com\"\n            onClick={handleHeaderLinkClick}\n            target=\"_blank\"\n          >\n            <HeaderReplayLogo />\n          </HeaderLink>\n        )\n      }\n      rightSection={\n        <>\n          <OnboardingChecklist resizeForSmallScreenSize={false} />\n          {!isSmallScreenSize && !(liveReviewImprovsIsOn && isUserInCollabSession) && (\n            <ViewerCountButton />\n          )}\n          <PeopleFeaturesSection\n            areCommentsEnabled={areCommentsEnabled}\n            canCreateShareLinks={hasEditAccess}\n            isImage={isImageLike(mediaType)}\n            isSmallScreenSize={isSmallScreenSize}\n            isWatermarkedLink={isWatermarkedLink}\n            showDownloadButton={showDownloadsInHeader}\n            viewOnlyProjectMember={viewOnlyProjectMember}\n          />\n          {!(isSmallScreenSize && isUserInCollabSession) && (\n            <RightButtonsContainer>\n              {!isMobileDevice && !isSmallScreenSize && (\n                <KeyboardShortcutsMenu mediaType={mediaType} />\n              )}\n              <HelpMenu\n                resetOnboardingMenuItem={<ResetTutorialMenuItem />}\n                surfaceType={SurfaceType.Video}\n              />\n            </RightButtonsContainer>\n          )}\n        </>\n      }\n      sidebarOpen={sidebarOpen}\n      title={\n        // Don't duplicate the Replay logo if it's already in the spot for the\n        // link to go back\n        isSmallScreenSize && backToUrl ? (\n          <HeaderReplayLogo />\n        ) : isSmallScreenSize && !backToUrl ? null : (\n          <MediaTitleAndInfo\n            fileExt={fileExtension}\n            folderName={showLeftNavSubtitle ? folderName : undefined}\n            hasEditAccess={hasEditAccess}\n            id={projectId}\n            lastUpdatedTimestamp={uploadTimestamp}\n            onRename={setProjectName}\n            title={projectName}\n          />\n        )\n      }\n    />\n  );\n};\n\nconst VIDEO_TITLE_HEIGHT = '24px';\n\nconst EditableMediaTitle = styled(CommonTitle)<{$isHoveringTitle: boolean}>`\n  margin: ${(props) => (props.$isHoveringTitle ? '0 2px 0 0' : '0 8px 0 0')};\n  cursor: text;\n  outline: ${(props) =>\n    props.$isHoveringTitle ? 'thin solid var(--dig-color__border__base)' : 'none'};\n  max-height: ${VIDEO_TITLE_HEIGHT};\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n`;\n\nconst RenameProjectIcon = styled(UIIcon)`\n  color: var(--dig-color__text__base);\n  height: ${VIDEO_TITLE_HEIGHT}; // set height to prevent shifting of elements on hover\n`;\n\nconst MediaRenameInput = styled(ReplayTextInput)`\n  &&& {\n    font-family: var(--type__title__standard--fontfamily);\n    font-size: 16px;\n    height: 100%; // set height to prevent shifting of elements on click\n  }\n`;\n\nconst EditableTitleRow = styled.div`\n  align-items: center;\n  display: flex;\n  flex-direction: row;\n`;\n\nconst NonEditableTitleRow = styled.div`\n  align-items: center;\n  display: flex;\n  flex-direction: row;\n`;\n\nconst FileExtensionLabel = styled(Text)<{$hasEditAccess: boolean}>`\n  ${(props) => (props.$hasEditAccess ? '' : 'margin-left: 8px')};\n  margin-right: 8px;\n`;\n\nconst LeftNavSubtitleContainer = styled.div`\n  flex-basis: auto;\n  display: flex;\n  align-items: center;\n  max-width: 100%;\n`;\n\nconst ContainedButton = styled(Button)`\n  max-width: 100%;\n`;\n\nconst LeftNavText = styled(Text)`\n  margin: 0;\n  overflow: hidden;\n  padding: 0;\n  text-overflow: ellipsis;\n`;\n\nconst BackToTutorialsButton = styled(Button)`\n  && {\n    display: flex;\n    margin-top: 2px;\n  }\n`;\n\nexport const LeftNavSubtitle = ({folderName}: {folderName: string}) => {\n  const [navigationSidebarDisplayState, setNavigationSidebarDisplayState] = useAtom(\n    navigationSidebarDisplayStateAtom,\n  );\n  const textRef = React.useRef<HTMLAnchorElement>(null);\n  const intl = useIntl();\n  const loggingClient = useViewerPageLoggingClient();\n\n  const onClick = () => {\n    replayStorage.setHasClickedLeftNav(true);\n    if (navigationSidebarDisplayState === NavigationSidebarDisplayState.SHOWING) {\n      loggingClient.logEvent('close_viewer_navbar', {close_source: 'header_subtitle'});\n      setNavigationSidebarDisplayState(NavigationSidebarDisplayState.HIDDEN);\n    } else {\n      loggingClient.logEvent('open_viewer_navbar');\n      setNavigationSidebarDisplayState(NavigationSidebarDisplayState.SHOWING);\n    }\n  };\n\n  const leftNavText = intl.formatMessage(\n    {\n      defaultMessage: 'More in {folderName}',\n      id: '4CsHQC',\n      description:\n        'Header subtitle that can be clicked to open a sidebar with more files in the currently open project',\n    },\n    {\n      folderName,\n    },\n  );\n\n  const tooltipText = intl.formatMessage({\n    defaultMessage: 'Quickly navigate to other files in this project',\n    id: 'a3dQYI',\n    description:\n      'Tooltip text explaining that a button opens a file nav bar to allow users to navigate their project without leaving the page',\n  });\n\n  let content = (\n    <ContainedButton onClick={onClick} variant=\"transparent\">\n      <LeftNavText>{leftNavText}</LeftNavText>\n    </ContainedButton>\n  );\n  if (!replayStorage.getHasClickedLeftNav()) {\n    content = (\n      <Tooltip openDelay={600} title={tooltipText} triggerRef={textRef}>\n        {content}\n      </Tooltip>\n    );\n  }\n\n  return <LeftNavSubtitleContainer>{content}</LeftNavSubtitleContainer>;\n};\n\nexport const MediaTitleAndInfo = (props: {\n  title: string;\n  id?: string;\n  hasEditAccess: boolean;\n  onRename: (newName: string) => void;\n  lastUpdatedTimestamp?: string;\n  folderName?: string;\n  fileExt?: string;\n}) => {\n  const {isSmallScreenSize} = useViewport();\n  const {title, id, hasEditAccess, lastUpdatedTimestamp, onRename, folderName, fileExt} = props;\n  const titleRef = React.useRef<HTMLHeadingElement>(null);\n  const {timeAgoLocale} = useReelAppGlobalState();\n  const {matchesTutorials, handleClickBackToTutorials} = useMatchesTutorialsRoute();\n\n  const projects = useAtomValue(viewerReadFolderListingAtom);\n  const versionsContext = useVersionsContext();\n  const currentProjectIndex = projects.findIndex(\n    ({project}) => project?.id === versionsContext.projectId,\n  );\n\n  const hasMultipleProjects = projects.length > 1;\n\n  const intl = useIntl();\n  const lastUpdated = useMemo(() => {\n    if (lastUpdatedTimestamp) {\n      return getUploadedTimeForDisplay(new Date(lastUpdatedTimestamp), intl, timeAgoLocale);\n    }\n    return undefined;\n  }, [intl, lastUpdatedTimestamp, timeAgoLocale]);\n\n  const getTooltipStyle = React.useCallback(() => {\n    if (titleRef.current) {\n      const overflowed = titleRef.current.scrollWidth > titleRef.current.clientWidth;\n      const visibility = overflowed ? ('visible' as const) : ('hidden' as const);\n      return {visibility: visibility};\n    }\n    return {visibility: 'hidden' as const};\n  }, [titleRef]);\n\n  const lastUpdatedText = intl.formatMessage(\n    {\n      defaultMessage: 'Updated {lastUpdated}',\n      id: 'Avy7Nu',\n      description:\n        'Text including a date and time indicating when the Replay file was last updated.',\n    },\n    {\n      lastUpdated: lastUpdated,\n    },\n  );\n\n  const TutorialsLabelText = intl.formatMessage(\n    {\n      defaultMessage: 'More in {tutorialsFolder}',\n      id: '8tAg7O',\n      description: 'Text telling user to go back to Tutorials',\n    },\n    {\n      tutorialsFolder: 'Replay Tutorials',\n    },\n  );\n\n  const formattedFileExt = fileExt?.substring(1).toUpperCase();\n\n  return (\n    <CommonInfoSection>\n      {id && !isSmallScreenSize && hasEditAccess ? (\n        <React.Suspense\n          fallback={<EditablePageTitleComponent id={id} name={title} onRename={onRename} />}\n        >\n          <EditablePageTitleComponentWithButtons\n            fileExt={formattedFileExt}\n            folderName={folderName}\n            hasEditAccess={hasEditAccess}\n            id={id}\n            name={title}\n            onRename={onRename}\n          >\n            {title}\n          </EditablePageTitleComponentWithButtons>\n        </React.Suspense>\n      ) : (\n        <NonEditableTitleRow>\n          <Tooltip openDelay={600} style={getTooltipStyle()} title={title} triggerRef={titleRef}>\n            <CommonTitle\n              ref={titleRef}\n              style={{overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap'}}\n            >\n              {title}\n            </CommonTitle>\n          </Tooltip>\n          <FileExtensionLabel $hasEditAccess={hasEditAccess} color=\"faint\" size=\"xsmall\">\n            {formattedFileExt}\n          </FileExtensionLabel>\n\n          {folderName ? null : !hasMultipleProjects ? null : !projects[currentProjectIndex] ? (\n            <LoadingTile />\n          ) : (\n            <NavigationButtons\n              currentProjectIndex={currentProjectIndex}\n              projects={projects}\n              versionsContext={versionsContext}\n            />\n          )}\n        </NonEditableTitleRow>\n      )}\n\n      {!isSmallScreenSize && !folderName && !matchesTutorials && (\n        <CommonLastUpdatedText color=\"faint\" size=\"small\">\n          {lastUpdatedText}\n        </CommonLastUpdatedText>\n      )}\n      {!isSmallScreenSize && !folderName && matchesTutorials && (\n        <BackToTutorialsButton\n          color=\"faint\"\n          onClick={handleClickBackToTutorials}\n          variant=\"transparent\"\n        >\n          {TutorialsLabelText}\n        </BackToTutorialsButton>\n      )}\n      {folderName && <LeftNavSubtitle folderName={folderName} />}\n    </CommonInfoSection>\n  );\n};\n\nconst PreviousButtonWrapper = styled.div`\n  margin: 0px var(--spacing__unit--0_5);\n  z-index: 12;\n`;\n\nconst NextButtonWrapper = styled.div`\n  margin: 0px var(--spacing__unit--0_5);\n  z-index: 12;\n`;\n\nconst Tile = styled.div`\n  display: flex;\n  flex-direction: row;\n  background: 'transparent';\n`;\n\nconst ButtonText = styled.span`\n  color: var(--dig-color__text__base);\n`;\n\nconst ButtonLoadingNonMemo = () => {\n  return (\n    <Tile style={{opacity: 1}}>\n      <SkeletonRectangle style={{height: 12, width: 120}} />\n    </Tile>\n  );\n};\nconst LoadingTile = React.memo(ButtonLoadingNonMemo);\n\ntype NavigationButtonsProps = {\n  versionsContext: VersionsContextValue;\n  projects: reel.ProjectWithVideos[];\n  currentProjectIndex: number;\n};\n\nconst NavigationButtons = ({\n  versionsContext,\n  projects,\n  currentProjectIndex,\n}: NavigationButtonsProps) => {\n  const navigateToMedia = React.useMemo(\n    () => (versionsContext.areVersionsEnabled ? versionsContext.navigateToNewMedia : () => {}),\n    [versionsContext],\n  );\n\n  const nextButtonOnclick = React.useCallback(() => {\n    if (!projects) {\n      return;\n    }\n    const nextProject =\n      projects[currentProjectIndex < projects.length - 1 ? currentProjectIndex + 1 : 0];\n\n    if (nextProject.videos?.[0].video_id) {\n      navigateToMedia(nextProject.videos[0].video_id);\n    }\n  }, [currentProjectIndex, navigateToMedia, projects]);\n\n  const previousButtonOnclick = React.useCallback(() => {\n    if (!projects) {\n      return;\n    }\n    const nextProject =\n      projects[currentProjectIndex > 0 ? currentProjectIndex - 1 : projects.length - 1];\n\n    if (nextProject.videos?.[0].video_id) {\n      navigateToMedia(nextProject.videos[0].video_id);\n    }\n  }, [currentProjectIndex, navigateToMedia, projects]);\n\n  const intl = useIntl();\n\n  const nextToggleAriaLabel = intl.formatMessage({\n    defaultMessage: 'next',\n    id: 'T2qvln',\n    description: 'Aria label for button to go to the next project',\n  });\n\n  const previousToggleAriaLabel = intl.formatMessage({\n    defaultMessage: 'previous',\n    id: '4ttvw/',\n    description: 'Aria label for button to go to the previous project',\n  });\n\n  // up above, it seems like we default to () => {} if this isn't avail\n  // we should probably just remove the buttons if they're not\n  // gonna do anything\n  if (!versionsContext.areVersionsEnabled) {\n    return null;\n  }\n\n  return (\n    <>\n      <PreviousButtonWrapper>\n        <IconButton onClick={previousButtonOnclick} size=\"small\" variant=\"transparent\">\n          <UIIcon aria-label={previousToggleAriaLabel} src={ArrowLeftLine} />\n        </IconButton>\n      </PreviousButtonWrapper>\n      <ButtonText>\n        {currentProjectIndex + 1}&nbsp;\n        <FormattedMessage\n          defaultMessage=\"of\"\n          description=\"Text describing the index of the current projects within the current folder\"\n          id=\"Yr7+Bp\"\n        />\n        &nbsp;{projects.length}\n      </ButtonText>\n      <NextButtonWrapper>\n        <IconButton\n          onClick={nextButtonOnclick}\n          onMouseDown={(e: React.MouseEvent) => e.preventDefault()}\n          size=\"small\"\n          variant=\"transparent\"\n        >\n          <UIIcon aria-label={nextToggleAriaLabel} src={ArrowRightLine} />\n        </IconButton>\n      </NextButtonWrapper>\n    </>\n  );\n};\n\ntype EditableTitleWithButtonsProps = {\n  name: string;\n  id: string;\n  onRename: (newName: string) => void;\n  folderName?: string;\n  fileExt?: string;\n  hasEditAccess: boolean;\n};\n\nconst EditablePageTitleComponentWithButtons = ({\n  name,\n  id,\n  onRename,\n  folderName,\n  fileExt,\n  hasEditAccess,\n}: React.PropsWithChildren<EditableTitleWithButtonsProps>) => {\n  const [isHoveringTitle, setIsHoveringTitle] = React.useState<boolean>(false);\n  const [isEditingTitle, setIsEditingTitle] = React.useState<boolean>(false);\n  const [editingValue, setEditingValue] = React.useState<string>(name);\n  const loggingClient = useViewerPageLoggingClient();\n\n  const hideModifyItemSnackbar = useSetAtom(hideModifyItemsSnackbarAtom);\n  const setModifyItemSnackbar = useSetAtom(modifyItemsSnackbarAtom);\n\n  const projects = useAtomValue(viewerReadFolderListingAtom);\n  const versionsContext = useVersionsContext();\n  const currentProjectIndex = projects.findIndex(\n    ({project}) => project?.id === versionsContext.projectId,\n  );\n\n  const hasMultipleProjects = projects.length > 1;\n\n  const nameRef = React.useRef(name);\n\n  React.useEffect(() => {\n    setEditingValue(name);\n  }, [name]);\n\n  // nameRef and this effect are used to fix an issue where state was stale in the handleRename\n  // callback coming from ClickOutside dig-component\n  React.useEffect(() => {\n    nameRef.current = editingValue;\n  }, [editingValue]);\n\n  const onMouseEnter = () => {\n    setIsHoveringTitle(true);\n  };\n\n  const onMouseLeave = () => {\n    setIsHoveringTitle(false);\n  };\n\n  const onClickTitle = () => {\n    setIsEditingTitle(true);\n\n    loggingClient.logEvent('select_rename_video');\n  };\n\n  const handleRename = async () => {\n    setIsEditingTitle(false); // Always set to false immediately to disable click outside\n    setIsHoveringTitle(false);\n    hideModifyItemSnackbar();\n\n    const newName = nameRef.current.trim();\n\n    if (!newName) {\n      setEditingValue(name);\n      return;\n    }\n\n    if (newName !== name) {\n      try {\n        await renameProject(id, newName);\n        setModifyItemSnackbar({\n          type: 'rename',\n          status: 'success',\n          itemType: ItemType.PROJECT,\n          originalName: name,\n          newName,\n        });\n        onRename(newName);\n\n        loggingClient.logEvent('rename_reel_video');\n      } catch (e) {\n        console.error(e);\n        setEditingValue(name);\n        setModifyItemSnackbar({\n          type: 'rename',\n          status: 'error',\n          itemType: ItemType.PROJECT,\n          originalName: name,\n          newName,\n        });\n      }\n    }\n  };\n\n  let rightSide;\n  if (isHoveringTitle) {\n    rightSide = <RenameProjectIcon size=\"large\" src={EditLine} />;\n  } else {\n    rightSide = null;\n  }\n\n  const intl = useIntl();\n\n  if (isEditingTitle) {\n    return (\n      <ClickOutside isActive onClickOutside={handleRename} shouldPropagateMouseEvents>\n        <span\n          style={{\n            display: 'inline-flex',\n            height: VIDEO_TITLE_HEIGHT, // set height to prevent shifting of elements on click\n            alignItems: 'center',\n            maxWidth: '100%',\n          }}\n        >\n          <MediaRenameInput\n            aria-label={intl.formatMessage({\n              defaultMessage: 'Rename file',\n              id: 'w6lb4w',\n              description: 'Rename the title of the file currently being displayed',\n            })}\n            isTransparent={true}\n            maxLength={MAX_PROJECT_LENGTH}\n            onChange={(event) => setEditingValue(event.target.value)}\n            onEnter={handleRename}\n            style={{width: editingValue.length.toString().concat('ch')}}\n            value={editingValue}\n          />\n        </span>\n      </ClickOutside>\n    );\n  } else {\n    return (\n      <EditableTitleRow>\n        <Tooltip\n          placement=\"bottom-end\"\n          title={intl.formatMessage({\n            defaultMessage: 'Rename file',\n            id: 'mjrEun',\n            description: 'Click to rename the file',\n          })}\n        >\n          <span style={{display: 'inline-flex', maxWidth: 'calc(100% - 90px)'}}>\n            <EditableMediaTitle\n              $isHoveringTitle={isHoveringTitle}\n              data-testid=\"common-title\"\n              onClick={onClickTitle}\n              onMouseEnter={onMouseEnter}\n              onMouseLeave={onMouseLeave}\n            >\n              {editingValue}\n            </EditableMediaTitle>\n          </span>\n        </Tooltip>\n        {rightSide}\n        <FileExtensionLabel $hasEditAccess={hasEditAccess} color=\"faint\" size=\"xsmall\">\n          {fileExt}\n        </FileExtensionLabel>\n        {!folderName ? null : !projects[currentProjectIndex] ? (\n          <LoadingTile />\n        ) : hasMultipleProjects ? (\n          <NavigationButtons\n            currentProjectIndex={currentProjectIndex}\n            projects={projects}\n            versionsContext={versionsContext}\n          />\n        ) : null}\n        <ModifyItemSnackbar />\n      </EditableTitleRow>\n    );\n  }\n};\n\ntype EditableTitleProps = {\n  name: string;\n  id: string;\n  onRename: (newName: string) => void;\n};\n\nconst EditablePageTitleComponent = ({name, id, onRename}: EditableTitleProps) => {\n  const [isHoveringTitle, setIsHoveringTitle] = React.useState<boolean>(false);\n  const [isEditingTitle, setIsEditingTitle] = React.useState<boolean>(false);\n  const [editingValue, setEditingValue] = React.useState<string>(name);\n\n  const hideModifyItemSnackbar = useSetAtom(hideModifyItemsSnackbarAtom);\n  const setModifyItemSnackbar = useSetAtom(modifyItemsSnackbarAtom);\n\n  const nameRef = React.useRef(name);\n\n  React.useEffect(() => {\n    setEditingValue(name);\n  }, [name]);\n\n  // nameRef and this effect are used to fix an issue where state was stale in the handleRename\n  // callback coming from ClickOutside dig-component\n  React.useEffect(() => {\n    nameRef.current = editingValue;\n  }, [editingValue]);\n\n  const onMouseEnter = () => {\n    setIsHoveringTitle(true);\n  };\n\n  const onMouseLeave = () => {\n    setIsHoveringTitle(false);\n  };\n\n  const onClickTitle = () => {\n    setIsEditingTitle(true);\n  };\n\n  const handleRename = async () => {\n    setIsEditingTitle(false); // Always set to false immediately to disable click outside\n    setIsHoveringTitle(false);\n    hideModifyItemSnackbar();\n\n    const newName = nameRef.current;\n\n    if (newName !== name) {\n      try {\n        await renameProject(id, newName);\n        setModifyItemSnackbar({\n          type: 'rename',\n          status: 'success',\n          itemType: ItemType.PROJECT,\n          originalName: name,\n          newName,\n        });\n        onRename(newName);\n      } catch (e) {\n        console.error(e);\n        setEditingValue(name);\n        setModifyItemSnackbar({\n          type: 'rename',\n          status: 'error',\n          itemType: ItemType.PROJECT,\n          originalName: name,\n          newName,\n        });\n      }\n    }\n  };\n\n  let rightSide;\n  if (isHoveringTitle) {\n    rightSide = <RenameProjectIcon size=\"large\" src={EditLine} />;\n  } else {\n    rightSide = null;\n  }\n\n  const intl = useIntl();\n\n  if (isEditingTitle) {\n    return (\n      <ClickOutside isActive onClickOutside={handleRename} shouldPropagateMouseEvents>\n        <span\n          style={{\n            display: 'inline-flex',\n            height: VIDEO_TITLE_HEIGHT, // set height to prevent shifting of elements on click\n            alignItems: 'center',\n            maxWidth: '100%',\n          }}\n        >\n          <MediaRenameInput\n            aria-label={intl.formatMessage({\n              defaultMessage: 'Rename file',\n              id: 'w6lb4w',\n              description: 'Rename the title of the file currently being displayed',\n            })}\n            isTransparent={true}\n            maxLength={MAX_PROJECT_LENGTH}\n            onChange={(event) => setEditingValue(event.target.value)}\n            onEnter={handleRename}\n            style={{width: editingValue.length.toString().concat('ch')}}\n            value={editingValue}\n          />\n        </span>\n      </ClickOutside>\n    );\n  } else {\n    return (\n      <EditableTitleRow>\n        <Tooltip\n          placement=\"bottom-end\"\n          title={intl.formatMessage({\n            defaultMessage: 'Rename file',\n            id: 'mjrEun',\n            description: 'Click to rename the file',\n          })}\n        >\n          <span style={{display: 'inline-flex', maxWidth: 'calc(100% - 36px)'}}>\n            <EditableMediaTitle\n              $isHoveringTitle={isHoveringTitle}\n              onClick={onClickTitle}\n              onMouseEnter={onMouseEnter}\n              onMouseLeave={onMouseLeave}\n            >\n              {editingValue}\n            </EditableMediaTitle>\n          </span>\n        </Tooltip>\n        {rightSide}\n        <ModifyItemSnackbar />\n      </EditableTitleRow>\n    );\n  }\n};\n","import React from 'react';\n\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {FormRow} from '@dropbox/dig-components/form_row';\nimport {Modal as DigModal} from '@dropbox/dig-components/modal';\nimport {Link, Text, Title} from '@dropbox/dig-components/typography';\n\nimport {Button} from '~/components/button';\nimport {useReelAppGlobalState} from '~/context';\nimport type {GuestUserInfo} from '~/context';\nimport type {LoggingClient} from '~/lib/logging/logger';\n\nimport {ReplayTextInput} from './text_input';\nimport {useSigninUrl} from '../lib/use_signin_url';\nimport {useMobileKeyboardState} from '../pages/viewer_page/components/use_mobile_keyboard_state';\n\nconst ContinueButton = styled(Button)`\n  float: right;\n`;\n\nconst ModalWrapper = styled(DigModal)<{$pageTop?: number}>`\n  &&& {\n    ${(props) => props.$pageTop && `top: ${props.$pageTop}px`}\n  }\n  & .dig-Modal-footer {\n    padding: 10px;\n  }\n`;\n\nconst TextFormFooter = styled(Text)`\n  padding-top: 30px;\n`;\n\nconst RowWrapper = styled.div`\n  padding-top: 10px;\n`;\n\ninterface GuestLogInFormProps {\n  isGuestModalOpen?: boolean;\n  onClose?: (createPost?: boolean) => void;\n  pendingDrawing?: boolean;\n  loggingClient?: LoggingClient;\n}\n\nconst NAME_INPUT_ID = 'guest-login-name-input-6xj011';\n\nexport function GuestLogInForm({\n  onClose,\n  isGuestModalOpen = false,\n  pendingDrawing = false,\n  loggingClient,\n}: GuestLogInFormProps) {\n  const intl = useIntl();\n  const [fullName, setFullName] = React.useState('');\n  const sessionContext = useReelAppGlobalState();\n  const [pendingPost, setPendingPost] = React.useState(false);\n  const mobileKeyboardState = useMobileKeyboardState(`#${NAME_INPUT_ID}`);\n\n  function onNameChange(event: React.FormEvent<HTMLInputElement>) {\n    setFullName(event.currentTarget.value);\n  }\n\n  function createGuestUserInfo(): GuestUserInfo | undefined {\n    const splitName = fullName.trim().split(/\\s/);\n    const lastWord = splitName.pop();\n    if (lastWord) {\n      if (!fullName.length) {\n        // If the name is only one word, assume it is the first name\n        return {firstName: lastWord, lastName: null, email: null};\n      } else {\n        // If the name is multiple words, assume there are one or more first names and only one last name\n        return {firstName: splitName.join(' '), lastName: lastWord, email: null};\n      }\n    }\n    return undefined;\n  }\n\n  function onContinueClicked() {\n    if (sessionContext.status === 'logged out') {\n      const guestInfo = createGuestUserInfo();\n\n      if (loggingClient) {\n        // eslint-disable-next-line deprecation/deprecation\n        loggingClient.logEvent('select_continue_without_login', {surface: 'modal'});\n      }\n\n      if (guestInfo) {\n        sessionContext.setGuestUserInfo(guestInfo);\n      }\n      if (guestInfo && pendingDrawing) {\n        setPendingPost(true);\n      } else onClose?.(false);\n    }\n  }\n\n  React.useEffect(() => {\n    if (pendingPost) {\n      setPendingPost(false);\n      onClose?.(true);\n    }\n  }, [onClose, pendingPost]);\n\n  function hideGuestForm() {\n    onClose?.();\n  }\n\n  const authUrl = useSigninUrl();\n\n  const messages = {\n    close: intl.formatMessage({\n      defaultMessage: 'Close modal',\n      id: 'ByZQ4S',\n      description: 'Text that indicates what the button that closes the guest login modal does.',\n    }),\n    namePlaceholder: intl.formatMessage({\n      defaultMessage: 'Enter your name',\n      id: 'VY57Uf',\n      description: 'The text displayed inside the name input for the guest log in form.',\n    }),\n    privacyNotice: intl.formatMessage(\n      {\n        defaultMessage:\n          \"Your name will appear next to your comment, and your data will be handled in accordance with Dropbox's <pplink>Privacy Policy</pplink>.\",\n        id: 'VFY/25',\n        description:\n          'The text displayed at the bottom of the guest log in form. The text informs users how their data will be used.',\n      },\n      {\n        pplink: (txt: React.ReactNode) => (\n          <Link href=\"https://www.dropbox.com/privacy\" target=\"_blank\" variant=\"monochromatic\">\n            {txt}\n          </Link>\n        ),\n      },\n    ),\n  };\n\n  return (\n    <ModalWrapper\n      $pageTop={mobileKeyboardState.status === 'open' ? mobileKeyboardState.pageTop : undefined}\n      isCentered\n      onRequestClose={hideGuestForm}\n      open={isGuestModalOpen}\n      width=\"small\"\n      withCloseButton={messages.close}\n    >\n      <DigModal.Header hasBottomSpacing=\"title-small\">\n        <Title>\n          <FormattedMessage\n            defaultMessage=\"Enter your name\"\n            description=\"Header on modal that informs the user that the form is used to sign into Dropbox.\"\n            id=\"kgrHeJ\"\n          />\n        </Title>\n      </DigModal.Header>\n      <DigModal.Body>\n        <FormRow>\n          <ReplayTextInput\n            data-testid=\"comment-guest-name-input\"\n            fontSize={16}\n            id={NAME_INPUT_ID}\n            onChange={onNameChange}\n            onEnter={onContinueClicked}\n            placeholder={messages.namePlaceholder}\n            value={fullName}\n          />\n        </FormRow>\n        <RowWrapper>\n          <FormRow>\n            <Button disabled={authUrl === null} href={authUrl ?? undefined} variant=\"transparent\">\n              <FormattedMessage\n                defaultMessage=\"or sign in with Dropbox\"\n                description=\"Text on a button that when pressed attempts to sign the user into Dropbox\"\n                id=\"R3ew9K\"\n              />\n            </Button>\n            <ContinueButton\n              data-testid=\"comment-guest-name-submit\"\n              disabled={!fullName.trim()}\n              onClick={onContinueClicked}\n              size=\"standard\"\n              variant=\"primary\"\n            >\n              <FormattedMessage\n                defaultMessage=\"Continue\"\n                description=\"Text on a button to submit the guest log in form.\"\n                id=\"czGUcI\"\n              />\n            </ContinueButton>\n          </FormRow>\n        </RowWrapper>\n        <TextFormFooter color=\"faint\" size=\"small\" tagName=\"p\" variant=\"label\">\n          {messages.privacyNotice}\n        </TextFormFooter>\n      </DigModal.Body>\n      <DigModal.Footer></DigModal.Footer>\n    </ModalWrapper>\n  );\n}\n","// @generated -- This file is automatically synced from dig-illustrations\n// tslint:disable\nimport * as React from 'react';\n/**\n * Render an svg illustration from the illustration library\n *\n * Original name: team filmmakers\n *\n * Figma URL: https://www.figma.com/file/knsTCchTBQGLcCWQCXFhTq/_Global---Illustrations?node-id=2942%3A8\n *\n */\nexport const TeamFilmmakersHero = ({ aspectRatio, altText, inverse, ...rest }) => {\n    let viewBox = undefined;\n    switch (aspectRatio) {\n        case '16:9':\n            viewBox = '0 0 1696 954';\n            break;\n        case '1:1':\n            viewBox = '371 0 954 954';\n            break;\n        case '5:6':\n            viewBox = '450 0 795 954';\n            break;\n    }\n    const classNames = `dig-Illustration dig-Illustration-hero${inverse ? ' dig-Illustration--inverse' : ''}`;\n    return (React.createElement(\"svg\", { role: \"presentation\", ...rest, className: classNames, viewBox: viewBox, fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n        React.createElement(\"title\", null, altText),\n        React.createElement(\"g\", { fillRule: \"evenodd\", clipRule: \"evenodd\" },\n            React.createElement(\"path\", { d: \"M534.7 493.9c-7 .9-45.6-.8-51.2.7-11.4 1.8-14.1-2.2-23 7.9-4.8 5.1-6.4 8.3-5.4 10.2 4.5 9.2 11.5 18.5 21.8 29.5 12.3 13.7 26.3 30.1 39.3 44.4 10.1 11.5 9.9 10.2 26.4 10.8 12.7-2.9 20.4 12 29.2 17.3 1.3.5 2 1 1.8 1.5-.8 8.3-1.9 25.7 10.3 29.5 3.6 1.8 4.2 1.4 3.7 5.2-.7 2.7 2 8.8 2 11.4 0 1.5-.3 1.8-2.7 2.8-9.1 3-6.7 13-17.5 15.3-9.8 2.1-5.5 16.3 2.9 16.5 7.2.8 7.2.4-1.4 7-15.7 12.6-28 26.4-29.9 37.7-17 3.1-48 1.8-68.1 1.8-24.4-.2-50.2-2.4-57.7 21.6l-1.6 4.7c.1 10 0 30.2 0 40.2 1.9 9.7 6.4 17.6 12.1 24.4 8.9 10.9 26.9 5.1 40.8 5.1 25.4-1.8 44-2.7 69.3-2.2 17.8 0 32.5 1.4 46.4 9.1 5.8 3.6 11.3 5.7 14.3 11.4 1.6 1.8 1.9 2.3 1.2 2.7-2.2 2.5 9.4 1.6 10 3.8 12 4.8 35.2 5.9 50.9 7.5 21.9 2.1 51 3.7 76.2 1.6 15.6-1.8 26.9-2 38.6-3.6 6.7-5 18-12 19-22.5 4.2-11.1 8.8-28.8 6.4-39.4 7.1-1.1 28.3 15 23-6.4.5-4.1-.8-5.4-9.4-9.6-7.2-3.3-6.5-3.7-10.9-6-1.7-.8-2.2-1.3-2.2-2.3-.3-4.7-4.2-4.9-6.7-9.1-3.5-3.6-5.5-10.5-10.4-10.9-.9 0-1.2-.3-1.2-1.5 0-1.7-1-2.7-19.1-19.7-6.1-5.7-12.2-11.7-13.6-13.2-17.8-17.3-31-41.9-53.8-44.5-5.7-1.6-8.3-3.6-9.9-7.5-1.1-5.7-17.4.6-25.8-2.2-11.6-2.6-23-3.3-22.8-9.7-.4-2.4-1.2-4.2-3.3-7.2-4.1-3.3 5.2-25.2.1-29-3.8-9.5-17.4-5.4-24.9-9.2-8-2.5-21.8-6-29.7-7.6-1.1.2-1.3.1-1-.9.9-3.3 1.5-8.4 1.2-10.1-1.1-6.1-7.2-4.9-5.6 1.6 1.4 8.1-1.6 1.1-7.6-3.9-6.4-6.5-7.3-7.6-5.8-7.2 8.1 1 17.7 6.3 26.2 6.6 1.9 0 6-.8 14.7-2.8 7.8-3 20.8-13.2 13.3-22.4-7.5-14.4-19.8-30.1-29.1-43.5-4.7-7.3-24.3-30.1-27-31.4-5.5-2.4-15.3-5.5-22.8-4.3Z\", fill: \"#9B6400\" }),\n            React.createElement(\"path\", { d: \"M1051.3 48.9c-14 2.6-32.7 5.7-48.5 11.5-32.8 16-63.1 51.9-72.8 88.7.3 10.1-.7 39.8 1.3 41.8 2.1 13.1 10.6 26.1 10.8 42 1.8 4.8-8.7 37.2-4.8 46.5 2.8 4.6 12.7 9.5 20.1 9.4 6.7.4 7.9 1.1 9.2 5.3.8 5.6 8.1 9.3 13 9.3.8-.5.7.3-.3 3-3.7 14.4 12.6 11.7 13 22.8 10.7 32.6 29.5 33.7 58.1 21.1 14.3-8.2 23.1 1.4 34.9 10.6 5.2 5.4 4.8.3 13.2-4.7 10.1-7.6 9.9-7.5 17.8-10.5 17.2-8.4 23.3-9.7 37.4-29.6 12.4-16 24.3-29.2 39.1-40.4-22.8-41.6-37.1-27.2-26.1-85.8 3.7-20.2 3.8-23.5.5-35.8-3.6-15.2-10.5-42.4-15.4-52.6-22.8-51.6-54.5-54.3-100.5-52.6Zm34.3 321.2c-1.4 1-.4 1.9.7.7 1.2-1.2.7-1.8-.7-.7Z\", fill: \"#C3672D\" }),\n            React.createElement(\"path\", { d: \"M825.2 289.1c-2.4.9-1.1 1.9-3.6 1.9s-4.8 1.1-7.4 1.4c-4.6.8-15 14-18.3 18.9-4.7 7-5.5 7.6-10.4 7-5.9-.7-6-.7-7.3-7.3-.9-4.5-3.7-11.4-5.4-13.3-3.5-3.7-14.9 2.8-22.3 9-7.9 6.8-30 20.2-41.6 25.3-7.7 3.7-13.8 4.5-22.1 8.7-8 3.9-11.6 1.6-18.9 3.6-4.3 1.2-10.6 1.5-11.6.5-4.5-1.6-2.7 9-1.6 11 5.1 5 7.9 4.6 11.4 15.2 3.1 9.2 5.6 10.2 11 16 0 14.5-5.8 28.3 13.6 28.1 2 7.8-4.4 18.2 6.2 21 2.6.8 2.9 1 2.6 2-2.1 6 2.2 14.4 8.4 15.8 1.6.4 1.6.5 1.9 5.6.4 6 1.8 13 3 15.3 7.2 13.8 30.7 9.3 43 6.9 3.6 10 11.6 21.3 16.6 26.9 2.7 4.7 4.2 5.8 10.1 7.2 7.8 2.9 24.3-2 29.3-3.6 2.9-1.8 7-5 10.7-6.9 19.2-10.4 25.2-25.3 41.3-41 13.8-15.3 20-21 35.5-35.4 5.6-5.4 11-10.4 12.1-11.1 6.5-4 2.9-13-4.2-8.4-3.4 1.5-13.5 4.4-15.8-1.1-9.7-12-20.3-24.6-28.9-37.4-4.7-7.3-9.3-15.7-14.6-22.2-1-.4-1-2.2.1-10.1 1.3-9.3.6-26.3-1.2-31.7-.9-6.8-7.6-14.9-13.1-18.4-2.3-.5-6.4-.4-8.5.6ZM614.5 553.2c-7 3.5-6.6 11.7-1.2 17.9 3.4 5.3 5.9 12.6 11.3 17.4 7.1 7.1 8.7 4.7 16.3 5.9 5.8 1 11.6.5 17.1 1.7-3 2.1-8.4 2.1-11.8 3.6-3.7 1-9.9 2.6-13.5 2.9-.8-.5-6.3-1-22-2.1-6.6-.4-12.8-1-13.8-1.3-12.3-3-25-14.1-36.4-11.7-21.6 5.3-7.3 23.6 13.7 28.1 13.6 3.9 17.2 5.1 17.2 5.8-1.9 4.9 33.5 11.3 37.7 14.6-1.3 1.9-10.3 2.1-12.3 4.9-3.7 5.2 5.2 17.2 11.5 19.9 5.7 4 9.7 12.2 16.4 15.4 6.7 5 22 2.9 30.9 4.3 6.3 1 8.6 1.6 10.6-3.7 8.8-28.7 21.6-61.6 29.1-88.6-.4-2.8-2-4-5.1-4.2-6.2-.4-17.2-5.5-23.5-11-4.3-3.8-12.2-6.1-17.8-5.1-5.7 1-31.5-1.2-35-3-4.4-2.5-15.9-14.6-19.4-11.7Zm-49 225.9c-9.3 5.4-10.8 20.2-18.5 28.7-5.9 7-15.6 22.5-19.7 28.1.3-5.3 6.1-21.1 3.2-25.9-1.3-2.2-4.8-4.3-7-4.3-8.1.4-9.7 8.9-13.5 9.9-3.5-.8-11.9 18.3-14.1 20.2-.6.1-11.2 1.3-11.8 2.1-10.9 9.7-1.7 33.4 14.2 31.2 6.2 23.6 17.3 14 22.5 23.8 1.7 4.6 5 9.8 10.5 9.2 9.2.9 8 10.9 26 4.4 26-8.8 27.9-39.7 46.2-58.4 8.5-8.2 11.1-22-.8-25.9-3.7.4 8.4-14 3.8-24.1-3.9-8.6-12.6-5.4-18.2-.7-1.1 1.2-2.9 3.9-12.3 19.1-2.5 4.3-25.1 36.6-14.3 18.9 3.7-6.4 16.1-24 17.8-32 4.6-11.1.3-29.5-14-24.3Zm-53 78.3c-2 2.5-.2-2.7.4-1.5.2.3 0 1-.4 1.5Z\", fill: \"#DBA889\" }),\n            React.createElement(\"path\", { d: \"M841.4 283c-1.8 3.6-9.9-.4-10.5 3.6-.4 1.5 1 3 4.2 4.1 9.4 5.7 12.9 21.1 12.5 33.9-.1 10.5-1.1 11.2-4.7 17.4-1.8 2.5-2.1 4-1.1 5.5 1.7 2.6 3.3 1.9 9.3-4.3 10-8.7 9.9-19 11.9-30.1 1.1-10.3 2.5-13.6-5.3-22.4-6.4-7.5-11-12.3-16.3-7.7Zm-46.8 6.7c-6.5 2.8-24 2.6-26.2 5.4-6.4 4.7-2.6 20.6 1.9 26.7 3.6 6.4 10.7 7.1 11.8 14.4 4.3 10 4.1 35.4-2.1 43.9-1.2 2.1-3.6 6.2-5.2 9.1-5.2 9.2-15.9 24.3-16.9 32.5-.6 3-1.6 5.9-2.3 6.9-5.4 5.7-11.9 17.5-18.3 16.8-5.5.5-12.5 2.6-17.3 5.3-2.1 1.6-8.8 3.8-10.1 3.3-5.7 1.1-6.9 13.2-4.9 18.7 15.9 31.4 56.8 15.2 83.1-7.1 14.2-11.9 16.4-18.5 21-26.2 3.1-3.5 3.2-3.7 5.5-10.6 5.1-13.4 5.8-18.5 1.9-38.2-1.5-19-7.5-39.2-14.7-54.9-12.9-19.9 36.5-55.3-7.2-46ZM707.8 410c-16.3.4-32.6 31.8-9.3 26.2 12-1.2 9.9-3.3 26.6-3 6.7-.8 9.4 9.2 15.5 4.2 4.6-4.7-4.9-20.5-7.3-23.4-4.8-2.9-18.6-6.7-25.5-4Z\", fill: \"#965128\" }),\n            React.createElement(\"path\", { d: \"M1138.8 37.5c-4.6.4-12.6 2.6-16.2 4.5-1.5.6-6.9 8.1-8.6 8.4-10.9-2.7-21.7-7.8-38.3-9.9-38.3-5.6-91.7 20.7-115.8 52.1-13.3 13.8-28.1 34.4-30.8 54.4-1.4 8.1.9 5.6 2.9 10.2 3.9 10.6 12.1 26.9 23 36.4 12.8 12.2 26.2 23.1 41.9 26.6 15.7 2.9 34.7-3.7 42.7-20.1 1.6-3.5 1.7-3.7 1.3-9.3-.3-5.5-.3-6 1.2-9.4 2.1-7.3 5.1-9.7 14.3-11.7 13.9-1.8 19.9 14.2 19.6 30.3.4 17.2 1.3 16.5-2.9 19.4-1.6.5 4.4 10.9 2.8 11.4-1 1.8-.7 7.1.5 9.4 11.2 14 38.9 25 56.3 21.9 8.3-.4 16.1-6.2 22.2-9.7 8.7 32.3 21.8 63.1 52.6 84.1 16 12 30 24.7 48.7 38.1 5.4 3.1 15 10.6 19 10.6 2.3 0 4.6 1.8 7 2.1 8.3 2.7 12.1 39.2 17.8 42.9 2.8 1.8 3.7 1 8-8.3 7.8-12.3 7.1-33.4 5-46.1-7.4-51.3-30.9-109.3-63.7-153.2-30.1-45.9-23.3-109.6-51.4-156.5-10.7-18.9-40.6-30.3-59.1-28.6ZM961.1 183.9c16.9 11.9 55.2 22 69.4 18.9-21.5 25.4-59.1-.6-76.4-20-2-2.3-6.7-9-6.7-9.5 3.1 2.2 8.6 7.6 13.7 10.6Z\", fill: \"#422608\" }),\n            React.createElement(\"g\", { fill: \"currentColor\" },\n                React.createElement(\"path\", { d: \"M942.2 54.5c-17.1 6.9-44.7 10.7-67.1 18.2-10.6 2.4-39.4 14.4-46.1 13.5-.5-.5 3.2-3.4.7-2.3-1.7.8-1.3-1.8-2.6-1.9-1.5-1-5.4 25.5-7.6 33.9-3.6 18.6-8.7 39-11.5 56.6-.9 3.4 2.3 2 3.6.8 1.4-1.4 1.6-2.5.4-1.5-.7.6-.7.4-.1-1.5 5.8-24 10.1-53.7 16-77.4.5-5.1 16.3 7.3 18.4 11.4 15.7 15.3 18.5 41.2 18.2 67.5-.3 11.7-1.7 24.6-3.1 28.1-.7 1.9-3.1 10.3-2.1 12.2.6 2.3 1.6 3.5 1.2 1.4 1.6-11.1 7.8-18.5 8.1-36.4 2-22.8-1.8-57.7-18-71.7-4.9-8.8-17.9-12.4-23.2-16.9 23.4-5.7 50.7-15.9 74.8-21.6 13.3-2.5 26.6-6.6 39.2-9.5 3.5-.3 7.1-1.7 7.1-2.8-1.9-2-3.2-2.1-6.3-.1ZM831.6 83.6c.4.2.9.1 1.1 0 .4-.5-2.2-.4-1.1 0Zm-380.5 78.9c-.9 6-4 19-4.1 23.3-.4 2-.9 10-3.6 8.9-1.2-.2-6.7-1.3-6.5.9-.2 5.4-6.4 26.6-3.5 31.1.7.5 1.7 1 2.2 1 2.6-1.7-1.8 10.4-.9 11.4.4 1.5-.4 1.6-3.3.4-2.1-.9-7.7-1.4-8.3-.7-1.2 2.2-2 6.6 2 7.1 4.6 1.3 29.4 7.8 31.4 4.1.2-1.2 3.1-4.1 4.2-5.4-3.6 3.3-9.8-1.1-13.8-1.5-2.4-.2 1.3-12.1 1.1-13 4-4.2 27.9 5.7 27.2-3.9.3-3.1-.1-6.6 4.1-6.2 2.5 0 4.4 1 2.8 1.5-2.8 1.3 8.5 12.8 7.9 4 .2-2.6.7-3.3 1.6-2.1 18.6 4.4 39 4.6 59.1 8.8 14.4 1.8 29.2 5.6 43.2 7.1 21 1.8 26.3 2.8 40 6.7-2.7 8.8-3.3 37.5-4.4 43.7-1.1 4.3 1.9 16.3-3.9 18.6-15.9 11.2-32.2 26.8-48.3 37.1-17.5 7.1-9 27.3 11 18.5 9.8-3.7 23.7-12.6 33.4-17.2 11.3.4 35.3 1.4 43.3 1.4 23.2.1 57.4-19.2 77.6-32.8 9.4-4.5 29.3-23.9 33.7-18.3-.2.9 1.2.9 2-.1.4-.5 2.5-.9 6-1.1 3.5.2 7.5-1.7 7.9-.2-.1 1.1 2.2 1.2 2.2.1 0-1.1.3-1.2 3.8-1.7 2.8-.4 3-.4 2.6.8-.3 1-.1 1.2 1.1 1.2 1 0 1.4-.3 1.4-1-1.1-1.2 6.5-3.1 5.9-.6-.5 1.7 1.6 1.4 2.5-.4 3.4-3.6 11.1-3.2 16.8-4.8 4.9-1.7 29.7-5.4 19.8-9.5-2.5.9-1-7-1-7.8 26.2 7.6 47.5 12 79.6 16l-.4-3.1c-30.6-5.1-32.3-5.2-56-10.2-15.9-4.1-24.2-3.7-24.6-8.9-2.2-23.3-12.7-47.5-28.8-63.9-17.9-21.2-56.6-28.3-82.7-30.5-4.5-.1-5.6-.4-6.6-1.3-4.4-3.3-12.7-6.2-18.5-1.7-6.7 3.7.2 5.7-9 7.1-19.7 5.6-48 23.3-57.7 43.5-1.8 3.7-6 15-6 15.8 0 .5-2.5.1-6.2-.9-29.9-5-80.2-12.6-108.2-14.9-27.3-3.1-18.8-3-31-8.9-1.9-.5-2.8-1.1-4.1-3-1.6-3.2-6.6-4.1-6.2-7.9-2-8 5.8-12.6 8.7-17.9.5-2.1-.2-5.1-2.3-9.5-3.6-11.7-15.4-4.5-23-6.8-12.7-3.9-13.2-4-13.2-2.4Zm5.9 1.6c.5.3.5 1.1-.1 3.4-1 3.5-1.2 8.7-1.9 12.2-.5 2.8-2.7 16.1-4.3 16.3.4-5.9 2.6-14.2 3.4-20.6 1.3-2.7-.3-13.6 2.9-11.3Zm9.5 4.3c1.1 1.2 13 .6 16.7.5 13.4 11.3-7.5 12.2-4 27.4-.8 8.9 10.5 12.5 5.2 12.6-1.4 0-1.8.3-2.3 1.7-.3 2.4-3.2 1.2-4.2.8-.4-1.2-.1-7.2-2-7.8-3.6-3.8-14.3-1-18.1-6.6 1.9-4.8 3.5-13.2 5-22.2 1.1-8.2.9-7.8 3.7-6.4Zm258.2.7c4.9 3.3-4.9 1.6-8.6 2.4-5.9.4-6 .4-4.8-.6 4.9-3.8 9.1-3.9 13.4-1.8Zm7 6.3c2.3 1.5.1-.3.3-1.1 14.5-4 60.2 10.5 75.8 20.7 15.5 12.7 25.4 28.6 30.1 49 3.1 8.4 1.9 30.3 7.1 34.9 1.4.6 1 .8-5.5 2.5-17.5 4.5-33.6 6.9-51.3 8.8-3.3.2-33.4 3.7-38.7-.1 2.1-16.4.2-30.3-1.3-43.4-.1-7.5-5.3-43.4-11.4-52-3.5-5.5-5.7-12.8-11.2-17.1-5.4-4.3 2-4.6 6.1-2.2Zm-9.1 1.7c7.1 11.5 11.5 19.6 14 34.8 1.2 9.7 4.4 17.4 4.9 28.1.7 16.2 4.4 15.7 3.7 36.1-1.5 18.2 4.9 15.1-12.5 15.5-33.9-.5-54.6 1.7-82.6 7.5-16.7 2.2-19.5 10.3-16.1-8.8 3.3-43.2 4.6-80.4 50-103.6 7.2-4.3 21.5-9.3 30.1-11.3 4.9-1.3 5-2.1 8.5 1.7Zm-29.8 16.1c-9.8 5 9.9 5.3 8.6 1.8-2.4-2.3-5-4.3-8.6-1.8Zm5.4 1.6c-1.3.7-4.6 1.2-6.4 1.4l1.3-1.1c.1-1 8.2-1.7 5.1-.3Zm77.8.5c-2.6 4.6 7.7 6.2 10.2 4.8 3.5-2.1-8.1-9-10.2-4.8Zm6.8 1c6 2.6-6.7 3.4-6 1.4 0-1.9 2.7-2.6 6-1.4Zm-329.7 3.5c-.2.2-.7.2-1.1 0-1-.3 1.7-.4 1.1 0Zm6.8 2.2c8.1.7 11.5.9 15.5 2.1.2 4.3-.5 10.8-1.8 14.5-.9 1.7-.5 7.2-2.7 7.8-3.9 1.8-17.1-.3-23.2-1.5-5.8-1-6.1-1.3-4.7-5 6.7-23.2-4-19.7 16.9-17.9Zm-9.2 2.9c-3.7.7-2.5 6.5-3.7 9.5-4.2 10.2 14.9 10.8 21.6 11.7 2.6-4.8 1.9-13 2.6-17.9 1.7-4.7-18.1-3.2-20.5-3.3Zm17 5.3c-.6 2.4-.1 13.3-4.9 11.8-5.3 1.5.3-9.8 0-12.7-.3-1.4 5.5-2.2 4.9.9Zm2.8-1.9c0 .7-1.1.7-1.1 0-.1-.7 1.1-.7 1.1 0Zm-13.3 1.1c0 .6-.5 2.1-1.1 3.4-3.8 5.9 4.5 9.7-3.9 7.6-4.9-.8-1.4-2.6-1.8-6.3.4-4.2 1.7-5.8 4.7-5.8 1.7 0 2.1.2 2.1 1.1Zm24.9 7.3c.2 1.8-2.5.2-3.3.4-2.7.1-1.9-2.2-1.1-3.9 1.2.8 4.6 2.2 4.4 3.5Zm14.4 2.7c0 .6-3 .6-5 0-2.6-.8 5.8-.6 5 0Zm15.2.8c28.7 4.4 42.8 3.4 67.3 9.1 17.1 3.2 38.3 4.9 56 9-.3 1.5.2 4.4-1.8 4.2-3.4-.3-9-2-12.4-2.7-21.6-3.5-54-8.1-77.3-12.7-6.6-1.3-10.6-1.9-28.5-4.1-13.7-1.7-14.4-1.8-14.6-3-.1-1.5-.3-1.5 11.3.2Zm398.1 8c-15 3.3-19.8 2.3-36.9 10.1-6 3.2-16.8 2.4-21.6 5.5-4.3 1.5 1.4 2.5.6 1.6 2-3.6 21.4-4.1 25.7-7.1 10.7-5.7 25-7.3 36.7-9.3 3.3-.8-1.4 3 3.4.5 6-2.8-6.2-1.8-7.9-1.3ZM416.7 237c0 1.6 1.5 4.2 2.7 4.9 1.4.8 1.8.2.8-1.5-.5-1.2-2.6-6.9-3.5-3.4Zm-6.1 1.9c.2 2.7 6.2 7.8 6.6 10.4-3 1.5-7.6.4-10.3-2.6-7.7-6.6.9 5.5 3 4.6.6-.4 11 5.5 11.5 5.3 0-.5-5.8-4.1-7.1-5l2-.2c1.5-1.3 8.2 5.7 6.1 2-3.6-3.8 7.4-.6 8.7-2.2 8.8-2.7-11.8-1-11.2-2-.6-.9-8.2-12.3-9.3-10.3Zm510.8.8c-12.7 4.1-19.3 8.2-39.8 9.8-9.6 1.8-17.6-.1-13.9 5.6 1.6-1.9.6-4.3 5-3.8 3.8 0 25.5-2.6 30.1-3.6 1.8-.3 30.2-9.2 18.6-8Zm-485 3.9c1.8.8-1 .5-1.4 0-1-.6-.1-.6 1.4 0Zm23.6 6.7c-9.7 3.8 2.4 1.4 3.6-.1.5-.9-.7-.9-3.6.1Zm-22.4 2.4c1.3 1.4 1.5.6 1.4 4.5-1 5.8 5.8 10.3 9.6 10.6 1.5 0 1.4-.1-.8-.8-2.5-.6-5.8-4.1-7.9-6.2.8-8.8.8-6.6 7.6-2.1 1.9 1.7 4.7 3.6 5.5 3.6-.7-1-4.1-3-5-4.5l1.6.3c3.2.8-3.8-2.1-3.3-2.4-.1-.4-3.8-2.8-2-.9.5.7-.4.3-2.9-1-4-2.2-4.3-2.3-3.8-1.1Zm17.9 1.1c-.8.9-.6 1 2.3.8 2.2-.5 8.2 3.8 8.5 2.8-.4-.7-1.8-.4-2.2-1 .2-.8 6.5.3.8-.9-3.2 0-7.7-3.8-9.4-1.7Zm-27 4.1L425 260c-4.5-.1-20.7.2-20.9-1.7-1.4-1-5.4-2.6-2.8-.1.9 3.9 17.5 3.5 20.6 4.5-1 1.5-.5 1.9 1.4 1.1 4-1.3 8.3-5.6 10.9-6.5-.3-1.7-1.6-2.2-5.7.6Zm24.9.7c-6.2 4.7 11.2 2.2 11.8 4.3.9 1 .9 1.1.1 1.1-1 .2-2.4-2.1-3.2-1.2-.8.8 2.4 1.8 5.3 1.7 3.5-.1-.8-.4-1-1.4-.6-3.2-14.1-1.5-12.5-3.3.4-.5 1.2-1.1 1.9-1.3 2.4-.9-1.8-.4-2.4.1Zm-18 4.2c-.6 1-1.1 10.4 1.5 10.6-1-.2.9-13.3-1.5-10.6Zm-34.6 2.3c1.3 1 4.3 2.1 4.3 1.5.4-.5-7.6-4.5-4.3-1.5Zm26.5 2c-3.3 1.9-2.2 1.6-5.4 3.6-2.3.9-3.2 3.8-5.1 3-.7-.4-2.1-.2-5.6.8-14.6 3.9-5.1 5 2.6 1.2 2.8-1.3 3.3-1.4 3.7-.6 1 1.7 2.1 1.2 9.3-4.1 2.3-1.7 4.4-3.2 4.7-3.4.5-.4-.5-2.1-1.3-2.1-.3.2-1.6.8-2.9 1.6Zm26.9-.9c-2.8 1.7 9.6 2.1 9.1 3.2 1.1.7 1 .5-.3-.6-1.1-1-5.4-3.4-8.8-2.6Zm-42.9.9c-3.7 1-5.2 1.8-4.9 2.6-1 1.9 11.7-2.5 13.1-2.4 1-1.2-5.4-1.3-8.2-.2Zm29.2 2c-.1 3.4 6.9 5.1 9.1 7.1.7 1 .9 1 .9.3.3-2.3-7.1-3.4-7.8-6.3-.7-2.1-2.2-2.9-2.2-1.1Zm23 3.5c5.9 3.8 5.2-1.9 3.5-.2-.2.5-.7.5-2.3-.3-3-1.4-3.7-1.1-1.2.5Zm-66.3.4c-2.4 2.2 7 3.8 7.1 2.5.3-.5-.1-.6-1.8-.4-7.1.6-2.6-4.3-5.3-2.1Zm124.1 1.7c-2.1 10.5 1.1 23 .4 33.3-1.5 24.8.5 36.6 1.1 60.9.7 29.3 1 33.4.7 68.3-.1 10.9 0 12.1.8 12.3 3 2 1.6-30.3 2.1-45.1 8.7.2 18.5-1.8 28.4-.6 13.9 1.3 22.9-2.2 35.3-.5 10.2 2.1 20.2-4.2 27.4-.6 1.5-.2 1.4-.3-1.3-1.2-10.1-3.1-18.5 3.3-31.2.7-4.8-1.1-22.9 1.3-27.9.9-3.9-.6-18.8-.4-24.7.3-3 .4-5.6.5-5.8.4-.2-.6-1-32.1-1.1-32.7-.2-20.2-1.6-29.5-1.6-54.6.1-26.7-.7-19.2-1.9-36.4-.2-6.3-.4-7.5-.7-5.4Zm-96.7.8c-3.4 2.3-3.7 1.7-8.8 6.7-1.5 1.5-2 1.6-3.9 1.3-2.2-.3-11.2 1-12.9 2-2 1.1 1.2 1.1 7 0 12.9-3.3 5 2.5 10.2-.5 3.3-1.3 18.2-13.9 8.4-9.5Zm8.7-.3c2.1 4.6 10.1 12.6 14.7 15.2.9 0 .9-.1-.1-.5-1.5-.6-10.7-10.5-12.2-13.1-1.1-2.1-2.4-2.9-2.4-1.6Zm8.4 1.2c.8 1.6 10.8 9 9.7 6.9-2-2-5-3-7.2-5.5-2.9-3-5.2-4.2-2.5-1.4Zm11-.9c.9 2.5 19.2 2 5.6.1-2.5-.2-5-.6-5.7-.8-1.2-.4-1.2-.4.1.7Zm7.9 5.4c8.1 6.5 7.7-2.3 5.3.4-.8 1-.8 1-2.3-.1-.9-.9-4.5-2.1-3-.3Zm-64.1.7c1.3.9 10.5 2.6 3.6.6-5.2-1.7-6.1-1.8-3.6-.6Zm460.6 1.9c6.9 4.1 19.5 3.8 31.9 7.8 19.4 3.7 41 10.3 59 12.7-.2-6-26.8-8.3-32.7-10.8-8.7-2.2-21.7-4.2-30.5-6.4-6.9-.9-23.5-5.5-27.7-3.3Zm-429.2 2.6c-5.5 2.5-8 5.4-3 3.9 4.1-1.2 14.8-9.1 3-3.9Zm19.9-.9c-.2 1.1 11.5 1.8 12.5.2.8-.8.4-.9-6-.8-4.4 0-6.8.3-6.5.6Zm-30.7 2.3c-6 2.6-2.4 4.5 3.4 1.4 6.2-2.6 1.3-3.8-3.4-1.4Zm19.3 1.3c1.1 3.5 3.9 7.6 6.2 9.1 1.3.8 1.2.7-.5-1.5-1.1-.8-6.3-11.6-5.7-7.6Zm21.4 1 1.3 1c-2.8-.5-11 .2-11.1 1.5 3.3 1 14.1-.3 15.6.4 1.3.4 1.5-1.4.4-1.3-.6.4-9.8-4.8-6.2-1.6Zm-66.2 1.4c-1.8.8-1.5 1.2 2.1 2.8 4.6 2 10 2.1 8.8.3.6-1 3.6-.4 5.2-1.2 8-3.3-19.6 2.4-14.9-1.7.9-1.1.9-1.1-1.2-.2Zm434.5.4c-.6.4-.3.4 1.1.2 4.8-.9.1-1.1-1.1-.2Zm340.5 2.8c-7.6 7.1-26.3 26.4-29.4 30.8-5.3 7.3-10.4 11.5-22.1 18.5-10.8 7.3-24.8 13.3-26 19 .3 1.3-.1 2.2-2.2 4.8-3.1 3.9-5.9 9.9-8.5 13.9-1.2 1.8-18.4 33.4-8.9 25.7 5.2-6.2 6.3 4.7 8.7 8.5 1.9 3.7 1.9 3.9.6 3.6-.9-.2-2.6 1.8-2.8 3.1-.6 1.3-1.4 1.7-2.6 4.2-8.5 13.3-17 24.8-19.4 35.1-1 4.4-3.6 9.9-4.7 13.6-1.2 5.8-3.8.3-7.2-3.2-5.6-5.5-15.2-19-22-21.8-.4.1-2.7-2.1-1.7-2.4.6-.2-1.3-.6-2.7-.4-1-.1-8.9-4.6-11.1-5.8l-.7-3.3c-.8-3.4-1-15.2-.7-41-.6-8.8 1.5-14.4-1.4-15.7-1.2 0-1.1-.8-1.6 11.6-.8 14-1.9 33.8-.7 46-2.4.9-27.1-11.5-33.7-12.7-14.7-4.8-16.1-8-29.9-13.7-6.3-3.1-8.1-3.8-10.3-3.8-2.1 0-2.8-.2-3.5-1.2-.9-1.5-3.8-1.5-1.5.8 1.1 1.4 1.5 1.5 3.5 1.4 1.9-.2 3.1.2 7 2.4 5.9 3.3 11.8 5.2 17.5 8.8 3.8 2.4 13 6.1 15.2 6.1 2.3 1 26.5 10.7 28.9 11.6 5.2 1.5 20.1 10.4 26.3 12.9 4 .9 7.2 7.7 11.4 11.6 5.1 5.4 11.7 13.2 15.5 18.9-5.6 11.8-15.1 28.7-20.8 40.3-3.7 6.5-8.7 13.3-12.8 19.7-1.9 4.1-4 10.1-4.7 15.1.7 1.5-4.8.6-4.9 1.5-.6 1.7-28 14.1-34.3 17.1-.6-3.9 20.5-34.9 25.1-43.5 15.2-25.8 13.3-27.5-5.4 4-5.2 8.6-7.2 11.1-12.1 18.3-20.3 32.9-4.1 17.9-37.5 42-3.4 2.9-3.9 2.9-2.9-.2 6.4-19.2 10.9-40.9 15-62.5 2.7-11.3 3.9-25.5 1.1-20.1-3.2 16.2-9.2 40.8-12.8 57.2-4.1 15.9-12.4 41-13 53.5-.1.2-.2.7-.3 1.1-1.6-10.3-.6-25.4 1.7-42.3 2-24.2 6.1-58.9 12.2-74.4 1.5-1.6.4-6.6-2.1-2.5-6.6 16.3-11.2 35.1-12.5 55.1-2.1 22.5-5.3 42.7-3.5 64.8 2.6 29.6-3.2 58.8-6.9 88.1-.9 8.3-1.9 8.9.5 9.5 3-11.3 7.4-48.2 9.2-61l.8-6.9 5.8-11.3c10.3-19.2 18.4-36.7 28.9-53.8 5.4-8.2 17.8-11.5 26.1-15.9 7.9-3.3 14.5-6.7 16.6-8.4 2.3-1.7 4-2 2.9 2-2.4 8.2-3.5 44.2-.9 59.3 2 16.6 8.2 45.8 9.2 59.4 2 47.3-2.3 97.7-7.3 144.5-1.4 15.2-1.9 26.4-2.8 41.6-.6 13.4-.5 16.7.4 16.4 4.1-11.7 2.5-18.6 4.9-36.6 2.4-29.4 4.6-41.5 6.4-64.8 3.1-30.2 4.3-73.9 3.2-102.5 1.3 1.3 8 21.6 13.1 25.5 3.3.4-1.1-5.3-3.4-10.9-11.2-18.5-16.9-50-20.3-79.2-.9-13.3-.7-48.9 4.3-59.7.5-.8.6-1.5.3-1.8-.8-1.4 1.4-6.7 1.6-8.5 5.4-14.5 12.4-19 20.4-35.6 6.4-11.8 9-17.3 15-27.9.6-3 4.5-1.8 2.7-3.8-1.1-.9 9.1-18.6 10-22 1.3-4.2 9-14.8 11.2-19.5 2.7-4.1 8.8-15.4 8.3-19.2-.3-1.7.6-.4 2 2.5 5 11.2 6.2 13.2 7.9 13.8.9.3 1.7.9 1.7 1.3-4.4 10.6-13 28.5-16.3 39.1-5 15.8-13.7 33.5-14.6 49.3-7.5 39-9 76.7-10.3 116-2.2 57-5.5 114.2-7.2 170.8 4.5-1.9 6.3-36.4 6.6-52.9.9-38 3.1-69.2 4.4-104.4 1.5-36.8 2.1-76.5 8.1-116 1.3-5.3.6-13.9 2.4-15.4 2.4 64.8-.2 116 3.4 179.6 0 5.8 2.1 6.1 5.3 9.5-5-46.5-2.8-136.9-6-180.1-.4-4.5-.8-8.7-.8-9.2-.1-1.5-2-2.3-1.4-4.3.3-1.9 6.3-19.9 9.3-28.1 7.7-22.6 19.9-49.6 29.3-71.8 5.2-8.3 11.9-16.9 18-23.6 13.9-6.4 14.8-8.4 39-.4 7.5 2.3 11.6 4.7 23 13.2 16.4 12.5 33.3 21.6 40.2 38.1 2.5 5 9 15.8 12.9 21.7 2.7 4 3 5.2 1.7 6.3-1.1.9-.1 2.2 1.7 2.2 6.5 4.7 7.9 37.3 7.5 44.4-.2 3-.9 7.1-1.9 9-.1.6-1.9 5.3-1.5 5.9.2.2 0 .3-.3.3-1.3 2.6-3.2 13.5-5.3 17.4-6.5 14.4-17.7 39.7-25 54.3-6.3 10.7-10 27-16.6 40.5-2.9 4.9-1.5 2.7-3.1 7.1-7.4 23.6-7.3 48-10.3 72.3-2.9 16.9-4.4 32.4-7.7 49.9-.7 6.5-10.1 46.4-5.2 47.7 1.6 0 2.4-1.8 3-6.8 1.9-14.6 3.6-26.1 6.2-37.3 3.8-19.5 6.3-36.8 9.4-58.1 2.2-23.9 2.6-40.9 7.3-64.2 12.7-36.6 35.5-75.6 47.6-107.6 1.9-6.4 4.6-17.5 6.7-24.9.2-.6.3-.6.7.3 3.6-10.9-.2-39.2-7.2-52.7 0-.9 10.7-7.5 17.8-10.9 23.7-11.2 35.1-23.5 54.6-35.5 2.1-1.8 1.5 12.2 2.7 21.2 3.9 37.8-4.4 87.4-12.2 125.4-3.5 20.4-10.2 37.3-12.8 56.8-5.2 30.5-12.9 61.8-16 92.9 1.3 2.5-9.4 22.1-13.4 28.4-8.4 14.6-18.1 31.8-27.4 46.5-.2.1-.4.5-.4.9.1.8-3.4 5.1-3.3 5.8-.4 1.1-1.1.5-1.9 2.3-.6 1-1.3 2-1.6 2.2 2.1.2 3.6-1.2 7.1-6 11.7-16.3 29.5-47.7 37-62.1 5.2-11.4 2.8-4 3.6 7.1.1 13.8.3 18.2 1.2 22.2 6.2 29 12.2 50.5 20.8 78.4 2.1 6.8 4.6 11.8 5.3 18.1 0 1.8.7 2.4 1.6 1.3 2.4-7.9-4.9-22.3-6.7-31.3-4.8-16.3-7.3-27.6-11-42.9-10.8-39.8-6.7-76.2.6-114.9 3.1-15.4 8.4-45.1 10.2-58.2 4.4-19.8 9.1-34.7 11.4-45.9 11.2-49.6 18-99.1 11.3-148.5-.1-1.6-.4-3.2-.5-3.5-.3-.5 2.4-3.5 4.7-5 1.2-.8 1.2-.9.4-2.6-1.4-4.3-4.2.6-6.3.1-.5-.6-1.1-2.6-2.9-10.6-.7-3.1-1.6-5.6-1.9-5.5-2 1.7-3.4 3.2-2.2 6.8 3.6 15.3 6.1 12.4-14.1 26.3-17.2 11-20.3 17.2-38.4 26-7.4 3.8-13.2 7.3-19 11.4-14.1-19.1-18-38.7-41.6-52.2-18.8-13.3-26.5-22-52.3-27.5-12.8-3.8-16.7-1.7-25.3 1.8-.6-.6 13.8-17.1 21.7-24.9 5.6-4.5 6.1-9.5 10.9-10.4 3.1.6 22.2-11.5 26.4-10.8 5.3-.7 17.8-9 23.2-12.6 3.3-1.1.9-2.8-.5-4.4-9.3 5.1-16.6 12.6-27.2 15-3.3.5-9.1 4.1-10.5 3.3.2-.4.2-.8 0-.8s-.6.6-.9 1.4c.1 4.5-36.6-6.7-41.2-6.6-4.8-.6-3.3-.9.4-3.3 8.4-4.9 13.5-12.8 19.8-20.2 16.2-18.2 29.2-29.9 19.2-28.3Zm-739.6.3c-1.6.4-7.7 4.4-8.7 5.9-2.2 3 4.3.4 9-3.5 1.9-1.6 1.8-2.8-.3-2.4Zm8 3.8c.1 2.1 10.1 13.6 5.2 6.6-.7-1.2-9.3-16.4-5.2-6.6Zm-17.4-2.2c-1 .4-12 2.6-8.1 3.6 5 .3 19.7-6.2 8.1-3.6Zm27.2.2c3 7 9.6 2.6 13.3 5 1.8 1.4 4.6 1.6 4.6.3 0-.6-.3-.8-.9-.5-1 .8-6.8-5.4-6.9-3.1-.2.6 2.3 2.3 0 1.6-2-.8-7 .8-7.6-2.3-.9-2.2-3-2.9-2.5-1Zm315.9.2c-7.3 6.1-26.2 15.2-31.8 20.2-16.8 12-41.1 22.1-61.5 27-23-.3-48.8-.9-65.9-2.5-1.4-.4-14.4 2.1-13.6.9 17.4-13.2 29.9-21.7 45.1-34.3 7.1-6.4 14.5-4.1 26.9-7.2 31.2-6.3 72.7-4.8 100.8-4.1Zm7.8 2c-2.2 1.4 2.2 1 1.9 0-.4-.7-.8-.6-1.9 0Zm-377.8.5c0 .7 5.7 3.4 8 3.8 3 .4.8-.9 5.3-1.7 9.1-2.3-.8-3.4-4.7-1.4l-3.2 1.1c-1.2-.8-5.5-3.3-5.4-1.8Zm50.2 3.6c1.4 2.6 9.8 6 11.2 5.5.3-.3-10.1-5-9.8-5.3-.3-.5-3.4-2.7-1.4-.2Zm468.6.1c-.5 3-1.4 43.2-2.2 44.8-.4 11.5-4.1 34.7-2.1 45.8 4.9 2.1 4.2-38.6 5.7-46.9-.2-7.5 2.8-48.4-1.4-43.7Zm15 6.4c-1.1 29-12.6 70.6-3.4 85.8 0-18.7-.1-35 2.5-53.4 2.4-14.1 3-55.2.9-32.4Zm-492-4.7c1 4.3 2.5 9.9 6 12l-.9-1.4c-3.2-4.9 4 2.6 5.8 1.9 5.6 1.4 5.5.1-.4-2.1-6.1-2.4-6.3-2.5-7.1-5.7 0-1.7-3.5-7.9-3.4-4.7Zm-43.5-.1c0 .7 5.8 3.1 7.3 3.1 2 0 1.9.4-1 2.9-2.3 2.5-6.1 2.6-9.4 3.1 3.3-.1 9.4.1 11.2-1.7 3-1.8 9.2-4.7 10.1-6.8.5-2.5-6.3 1.6-8 2.6-2-.8-10.9-4.4-10.2-3.2Zm21.9 1.3c-6 3-8.6 7.7 1.6 2.3 2.7-1.3 5.3-2.2 5.8-2 .7.2.6.1-.2-.5-1.4-1.1-4.5-1-7.2.2Zm16.9 3.2c0 3.5 1.9 10.3 3.2 11.3.7.6.8.6.6-.4-.4-1.9-3.3-21.7-3.8-10.9Zm-7.1 1.5c-2.6 4.9-3 5.9-2.4 6.9-1.7 4.1-11.6 12.7-9.6 16.1.2.3.8-.3 1.3-1.3 1.8-3.3 2.8-3.9 5.7-7.9 1.6-2.1 3.1-4 3.4-4.2.9-1.6.7-3.5 2.4-6 3-4.3 4.2-12.4-.8-3.6Zm31.9-2.1c2 4.2 10.2 2.8 5.8 1.4-2.2-.7-4.4-4.2-7.3-3.3l1.5 1.9Zm-39.9 5.2c-3.9 2.8-10.1 8.1-6.5 8.4 2.2-2 10.2-8.4 11.8-8.5 1.3-2.2-1.8-2.7-5.3.1Zm-9.5 0c-2.2 1.4-6.7 6.8-9.3 6.6-2.2 0-7.8 2.5-7.3 3.3-.4 2.6 11.3-5.2 6.9-.8-.6.5-1 1.2-.8 1.4.4.6-3.6 4.1-4.3 3.9-1.5 0-3.5 2.4-.3 2.1 2.3 0 8.9-5 7.3-5.5-.7-.2-.4-.7 1.6-2.2 5.6-4 14.9-14.3 6.2-8.8Zm46.7 2.5c1.3 1.1 6.6 3.8 7.2 1.4-.6-.8-2.3.1-4-1.1-2.7-1.4-4.1-1.5-3.2-.3Zm-26.9 4.5c-.8 3.9-2.6 26.2 1.1 28.3 1.7-7.4-2.6-22 1.1-29.6.7-1.7-1.9-.3-2.2 1.3Zm-21.2.5c-1.9 1.2-8.4 8.5-9 10.1-.3.7-.3 1.7-.2 2.1.4 1 6.5-5.2 9.5-9.6 2.6-3.6 2.5-4.4-.3-2.6Zm34.3-.1c1.1 4.3 9.4 7 11.3 11.3 1.2 2.3 3.9 4.4 5.3 4.1 2.7-1.1-1.4-1.9-3-4.7-2.3-3.1-3.3-2.6-5.3-4-1.7-1.6-4.3-2.5-6.2-4.8-1.1-1.4-2-2.2-2.1-1.9Zm14.4 2.5c1.7 2.9 8.8 2.3 4.9.8-1.3-.2-4.5-3.1-6-3-1.2.1-1.1.3 1.1 2.2Zm-20-.8c.7 1.3 5.6 6.1 5.8 5.8.7.3-6.3-7-5.8-5.8Zm-29 7.8c-4.7 4.9-4.9 9.2-1 5.8 3.2-3.4 8.1-14.3 1-5.8Zm28.8-2c-1.8-.3 5.7 16.6 2.8 6-.9-1.4-.9-8.2-2.8-6Zm-17.1 4.3c-.6 2.2-.8 3.9-1.5 6.8-1.2 3.7.4 7.5 2 6.6 0-3.3 3.4-13.9 1.9-13.6-.9-1.1-2.1-1-2.4.2Zm-8.5 2.2c-2.7 4.3-3.9 6.6-1.2 7.9 1.3-.3 8.1-16.6 1.2-7.9Zm-11.7.3c-1.3 2.1-1.5 4.2-.5 4.2 2.6.8 6.8-10.7.5-4.2Zm49.5 1.5c1.1 4.6 5.6 9.1 6.9 5.1 0-1.2-.1-1.3-.8-.7-.9.8-1.7.1-3.3-2.9-.4-1-3.7-4-2.8-1.5Zm-15.1.6c-2.3 1.2-.4 19.5 3.2 18.6 1.5 0 2-1 .9-1.8-1.2-.9-2.4-6.9-3.1-8.1-.7-1.4-.2-7.5.7-8.7.9-1.2-1.4-.6-1.7 0Zm-28.5 1.4c-1.2 1.3-2.6 4.3-2.6 5.3 1.5 4.3 6.5-10.2 2.6-5.3Zm35.8 2.8c1 2.6 2.5 9.7 6.4 6.7 0-.3-.2-.5-.5-.3-.7.6-5.9-10.7-5.9-6.4Zm-27.9 2.3c-1.1 2.2-1.6 6.5-.9 7.7 2.8 2.7 1.8-4.7 2.8-6.7 1.2-4.6-.4-3.7-1.9-1Zm11.1 2.7c-.8 2.3-1.3 9.1 2.1 9.9 1.1.2 1.2 0 .8-1.1-1-1.1.9-13.8-2.9-8.8Zm194.1-.5c3.3.5-1.3 2.1-3 1-4.8-1.5-.6-1.8 3-1Zm518.8 3.3c2.6 1.1 31.9 6.5 29.9 7-26.9 18.8-54.2 50.4-66.9 82.1-4-6.4-6.8-13.8-11-21.3-3.4-7-4.4-10-9.6-13.6 1.1-2.8 6-12.7 7.7-16.2 4.8-8.6 13-26.7 14.1-21.9.2.7.3.4.3-.9.1-2.4.6-2.9 6.5-6.7 9.4-5.7 17-13.3 29-8.5Zm-553.4 2.8c-2 1.7-2.8 2-2.8 1.1 0-.9 7.1-4.9 2.8-1.1Zm13.3 5.8c0 .4-2.4 1.3-4.3 1.6-2.6.5 4.7-2.9 4.3-1.6Zm-17.5 2.4c.3 1 3.8 1.3 2.5 1.8-4.5 1.1-7-5.2-2.5-1.8Zm308.3 36.7c-.6.7-.6.8.1.7 1.8-.4 1.1 7-1.6 16.6-4.1 17.3-12.7 46.6-19.4 54.4-20 26.3-70.1 71.4-95 26.4.2-2.5 1.2-13.3 1.1-13.9-3-.2-2.7 3.8-3.1 5.8-1.1 3.2-.8-5.7-3.5-2.6-2 .4 1.7 10.6 2.3 11.9 1 1.9 1 3.4.9 25.8.1 18.9-.4 23.7 1.1 33.3.8 14.3 15.3 32.3 29.8 22.2 24.6-28.8 45.8-60.3 63.3-95.1.4-2.9 12.2-15.6 17.2-21.6 7.1-7.9 14.3-17.4 20.5-25.2 6.9-8.7 15.9-21.3 26.5-24.2 1.5-.4 1.6-.4.3-.5-11.5-6.2-23.8 15-31.5 23.5-7 8.1-14.5 17.8-21.2 25.5 3.9-10.8 10.2-31.8 13.9-46.6 1.1-2.5 2.7-20-1.7-16.4Zm-508.9 33.1c-.2 32 1.8 29.6 3.7 52.1 2.5 36.6 2.5 34.6 4.5 58.4 2.8 44.9-1.9 113.7 3.6 156.4 2.9 5.9 2.5-.1 1.6-5.9-4.4-38.4.5-97.8-2.8-152.7-2.8-25.1-2.7-48.7-6.3-73.9-2.6-1.7-1.6-51.8-3.5-58.3-1-.9-1 .2-.8 23.9Zm692.6 18.3c-.5.9-1.2 1.8-1.5 2.1-.3.2-.1-.6.7-1.9 1.4-2.6 2.2-2.7.8-.2ZM631.6 461c-1.3 2.5-16.7 1.7-20.1 1.5-8.3-1-20.4 1.9-28.4 1.9-1.9.4-3.2 1.1-5.4.9 2.3.8 3.7.9 7 .5 5.7-.8 12.3-.3 18.5-1.4 5.3-1.5 18.1.9 22.9-.2 1.5-.3 3.6-.4 4.7-.3 4 1.6 3.2-6.9.8-2.9Zm71.8 6.1c-19.7 9.6-24.3 7.5-38.9 19.3-17.1 16.2-27.2 44.7-28.7 69.2-2 10.1 2.5 16.7 4.2 1.7 3.5-36.9 18.7-71.8 56.2-83.3 3.6-2.4 20.3-10.3 7.2-6.9Zm517.8 18.8c-5 16.9-14.4 33.1-23.6 48.7-9.1 18.6-25.7 43.9-34.7 59.8-.4.9-8.2 12.6-9.4 14-1.8 2.2-.8 1.9 1.6-.3 14.6-16.2 9.7-12.8 22.6-32.1 7.8-12 12.8-19.9 19.3-32.6 8.7-15.8 23.2-39.4 26.4-55.2 0-1.1 0-1.1 1.2-.1s1.2 1 .3-.1c-.5-.6-1-1.8-1-2.6-.5-2.4-2.2-3.1-2.7.5Zm-367.9-.1c-16.4 33-36.9 61.9-57.6 87.9-11.5 16.3-26.3-3-28.3-15.2-2-12.7-2.3-41.1-1-54.6 18.7 18.7 48.7 12.1 68.2-2.2 7.4-5.4 14.1-12 19.1-17.1 0-.1-.1.5-.4 1.2Zm-142.5 13.4c-.7 14 4.6 82.9 2.1 85.2-5.2 14.3-9.4 38.6-15.6 56.3-3 9.4-7.1 19.6-10.9 29.8-3.6 9.4-3.6 9.4-2.5 9 2.6-.1 5.6 2.2 9 2.9 6.6 1.4 17.3 9.3 23.2 9.2.9-.3-2.9-2.5-5.5-3.1-6.2-2.1-13-6.6-18-7.4-6-1.6-6.6-2-5.3-3.9 1-1.5 2.3-4.6 7-16 11.1-25.1 15-47.1 22.3-72.2.3-1.2.7-2.3.8-2.4 9.1 2.8 18.4 11.3 29 16.6 5.4 2.5 19 13 24.9 18.4 6.7 10.4 20.3 24.4 29.8 30.6 17.6 12.2 33.8 22.6 55.9 39 7.5 4 22.1 24.5 30.7 29.3 4.5 2.6 13.8 6.7 20.5 8.5 8.9 2.3 24.7 13.2 31.7 17.6 3.4 2.5 16.2 10.8 16.9 11.7 2.6 2.9 1.8-4.9.4-5.2-9.3-7.8-26.8-18.9-38.6-25.3 2.4-5.5 8.3 1.6 31.7 11.6 4.8 2.3 8.9 4.2 9.2 4.2.4 0 2.5-3.3 2.2-3.5-7.3-3.6-15.7-7-23.2-10.3-4.7-1.9-12.5-6-16.3-6-1.2 0-3.7 2.9-4.8 4-8.8-3.4-19.4-6.5-27.4-11.8-1.9-.9-6.2-5.2-15.1-14.7-4.2-5.3-13.7-11.7-16-15.6 2.7-10.8 9.2-27.4 10.8-38.3.9-5.2 4.2-18.3 5.9-23.1 1.5-4.1 1.7-5.3.8-4.5-1.4 1.4-5.9 17.8-9.2 33.4-1.2 7.2-7.2 22.7-7.4 25.4 0 1.5-1.8 6.1-2.5 6.4-.7.3-13-7.5-17.9-11.3 3.4-12.2 3.8-19.4 8.7-32 5.8-13 8.1-17.4 14.1-33.4 8.1-20.9 15-34.9 20.1-53.2 2.4-8.3 4.2-13.3 6.6-20.7.4-1 .3-1-.4 0-7.4 16.1-11.6 37.4-19.6 53.5-5.5 11.8-12.5 33-18.7 46-5.5 9.5-9.2 31.1-12.4 38.6-16.2-12.3-48.8-31.7-56.6-46.3-11.3-16.8-23.4-21.8-39.7-30.9-10.3-6-18.2-9.8-21.7-10.6-1.7-.4-3.2-1.1-3.5-1.5-.4-2.2-1.3-32.6-1.4-35-.6-13.9-1.3-34.7-2.8-48.4-.2-1.7-1.2-2.1-1.3-.6Zm-24.8 8.3c-.2 4 4.8 47.5 5.8 57.7 1.2 7.8 0 15.1 3.4 14.4 2.5-3.6-2.5-26.4-2.3-31.8-.8-1.2-4.7-50.1-6.9-40.3Zm536.5 19.4c-.2.6-.2 1.3 0 1.5.5.2.2-1.6.9-1.5.4 12.9-.1 6.9-8 44.4-7.2 34.7-14 58.1-26.1 91.5-9.3 25.2-15.8 59.9-24.9 79.1-2 5.1-10.8 26.8-4.7 22.3 1.4.8 3.3-1.2 4-2.8-13 14.4 16.6-50.7 14.8-53.5 13.4-49.8 31.6-88.8 41.2-144.7 3.6-15.9 8.3-40.4 2.8-36.3Zm-503.1 12c.5.1 1.3.1 1.7 0 .9-.4-3.1-.4-1.7 0Zm236.4 52.8c-6.3 10.8-23.6 46.6-29.4 58.1.1-12.4 3.9-26.9 6.1-39.9.9-5 17.5-17.2 23.3-18.2Zm-78.4 26c-.8 1.7 1.2-.4.7-.7-.2-.2-.5.1-.7.7Zm325.9 33.6c.4.2.9.1 1.1 0 .5-.5-2.2-.4-1.1 0ZM716 694.6c-.4.5-.1 1 1.4 2 1.1.7 4.2 4.3 6.9 8 6.8 9.1 5.4 7.7 13.6 16.1 3.3 3.8 10.2 9.1 6.5 8.5-6.6-.4-6.8 1.1-.3 2.5 7.8 1.4 13.6 12.5 17.8 13.9 9 4.2 6.9 12.4 10.3 15.9.3-.1-1.6-7.8-1.3-7.9 7.8 6.2 22.1 22.5 30.6 31.9-8.6-2.7 7.2 6.7 9.8 10 17.1 16 15.9 14.7 15.6 16.6-4.9 20-8.8 41.1-16.9 56.5-4 7.6-7.7 26.8-1.5 11.3 7.3-21.1 13.2-32.3 17.4-55.9 2.7-12.7 2.5-12.1 3-12.1 6 5.8 12.4 13.3 20.3 19.9 12.7 11.4 28.6 27.5 41.4 36 7.1 5.2 25.5 13.9 32.6 19.3 2.8 3.9 18.6 9.5 20.7 7.7 1.9-1-14.3-3.3-15.4-5.9-2.1-1.5-1.6-1.7 1.6-.7 2.5 1.3 11.5.8 6.3-.8C870.5 857.6 822.7 796.5 770 746c-7.3-6.6-35.9-35.8-38.8-39.7-5.1-5.3-9.5-14.1-15.2-11.7Zm6 12.9c0 .7 3 3.5 3.7 3.5 1.4 0 1.4-1.1 0-2.5-1.3-1.3-3.7-1.9-3.7-1Zm190 31.1c13.3 14 33.5 42.6 41.4 57.5.7-3.3 2-5.4-.1-8.6-3.3-7.9-35.6-53.4-41.3-48.9ZM597.7 863c-.9 9.6-2.3 21-3.9 32.2.7.5 2.5 2.3 3.1 1.6.7-.7 1.2-5 .6-5-.3 0-.3-1.7.1-4.5-.2 1.4 4.1-31.3.1-24.3Zm9.9 4.4c-.3 2.7-4.1 25.3-4.1 28 .3 5.7-20-.5-18.6-1.4.3-.5-2.4-1.1-4.8-1.1-1.4 0-1.6.1-.9.9 19 11.8 45.7 4 63.7-5.8 10.4-6.9 26.3-7.4 36.3-14.9.8 8.3-1.5 26.6 0 34.2.2 1.5.3 7 .3 9.3 1.1.2 4.2 1.8 4.5.6.7-4.5.5-25.3.8-30.8.3-6.8-.4-9.6-1-14.3-.7-5.4-9.1.4-12.5.9-9.4 4.1-22.9 6.4-32.7 11.3-8.7 4.7-22.3 11.4-26.3 11.6-5.5.8-5.8.6-5.2-2.7.9-4.9 2.6-18 3-22.8.7-5.8-2.4-8-2.5-3Z\" }),\n                React.createElement(\"path\", { d: \"M513.4 2.1c-.2.2-.3.5-.3.7 2.4 3 12.7 12.9 15.5 16.8 8.7 11.5 20.6 20.8 27.5 32.6 8.2 12.2 17.9 20.9 26.6 33.1 5.8 8 12.8 15 18.8 23.2 3.4 4.4 6.6 8.2 7 8.2.4-.1 3.2-2.5 4-3.1-6.9-9.9-19.9-22-26.2-30.4-6.5-9.3-18.9-21.8-25.2-30.1-5.7-9.6-19.5-23-28.2-32.9-5.7-5.9-17.7-19.6-19.5-18.1Zm856 15.1c-44 38-90.9 73.7-133.8 113.3l1.9 1.9c16-11.7 29.3-26.6 43.7-38.2 18.8-17.2 47.2-37.7 68.3-54.3 9.3-7.2 17.2-15.1 27.9-21.1-.1-1.6-3.8-4.5-4.9-4.3-.3.1-1.7 1.3-3.1 2.7ZM9 20.3c-1.8.5-3.2 1.5-4.4 2.6C60 44.3 117.4 68.3 175.9 83.6c38.4 10.2 48.1 14.4 81.5 29 4.8 2.3 15.5 6.1 25 8.9 15 4.4 31.1 13.6 46.1 18.2 1.4.5 2.6.9 2.7.9.1-.4 1.3-3-.1-3-15.8-5-24.9-12.6-42-18-25.9-7.5-39.1-15.9-61.8-23.8-24.7-9.7-55.2-16-83.1-27.8-21.8-8.7-48.7-17.3-70.9-25.8-22.7-8-33.5-13.7-53.2-20.2-6.2-1.9-7-3.1-11.1-1.7Zm1570.8 8.6c-17.9 7.4-38.3 23.2-52.9 31.5-33.8 18.2-63.1 36.6-94.3 57.1-3.1 2.4-7.8 3.4-6.2 6.1 1.3 2.4 3.4-1 6.2-1.9 16.1-8.7 35.9-24.5 50.7-33.8 24.3-15.3 47.4-26.8 70.8-42.2 2.5-3 24.3-11.7 31.8-15.6.8-.5-.8-3.4-1.3-3.5-.2.1-2.4 1.1-4.8 2.3ZM1692.9 46c-31.6 21.4-68.1 34.9-100.3 56.1-23.1 12.1-47.7 26.3-71.1 39.5-6.3 3.7-13.9 7.6-15 7.6-.7 1.8.6 2.9-3.6 4.7-3.5 2.1-11.2-.2-14.9-1.2-13.5 1.7-36.3-1.2-50.5-1.2-2.6.6-19-1.4-17.4.7 1.4 2.6-20-.7-18.8-.3-7.9-1.1-11.6-1.2-23.4-1.5-3.9-.1-4.8 0-4.8.5s-.2.5-.8.3c-1.2-.5-28.2-1.4-61.5-1.9-22.9-.9-13.8 1.5-31 1.7-7.5 0-10.5.4-8.2 1.1 3 2 106.5-.8 100.3 1.2 15.3 2.2 41.9 3.9 56.7 2.2 17.3-3.7 19-1.2 34.5-1.6 15-.4 17.9.4 24.3 2.5 1.7.2 2.1 0 2.3-.7.8-1.8 9.4.3 12.2 0-1.9 85.5-.8 158.1-1.7 231.4-.4 5.4-.1 5.7 3.5 3.7-1.3-79.3-.3-162.2 3.3-236.4 19.5-9.5 44.3-26 62-35.4 8.8-3.6 31.5-15.9 39.2-21.8 6-3.7 27.9-14.7 36.8-18.9 7.6-3.3 11.3-5.9 17.3-9.2 8.2-4.8 22.8-11.2 30.5-16.8 2.1-1.9 4.5-2.7 5.8-4.7 1-1.3-.5-3.4-1.7-3.8-.5.3-2.3 1.1-4 2.2Zm-1232 89.6c-19 2.1-50.3 3.1-71.9 1.3-4.3 3.8-5.7 1.7-8.9 3.1 2.6 1.4 5.9-.6.9 3.1.5-2.4 1.5-2.1-4.5-2.3-5.9-.2-9.1-.4-13.2-1.1-4.4-1-5.2 1.1-7.1 4 6.4 1.4 13.5 3.3 19.5 5.4 2.2 22.7 3.8 100.1-1.2 134.2-1.6 19.8 2.8 22.3.7 48.4.6 7-3.4 43.8 1.6 39.2.9-.6.9-1.6 1-24.4.1-27.3 1.5-34.3.5-56.4 3.6-35.8 3.4-42 3.7-88.3.1-29.9.4-39 .3-51.3-.1-2.9-.2-3.4-1-3.7-2.1.1 3.6-5.1 4.3-6.1 29.7.8 61.7-.2 83-1.8 39.6 1.5 78.9 1.6 108.9 3.3 5.9-.3 37.5 1.5 42.5.5 8.1-1.3 9.9-1.2 20.9-1.5 30.2.9 80.7 3.3 118.3 2.6.9-6.6-4.6-4.7-8.9-4.5-14.6.7-18.9-.4-39.4-.3-40.1 1.1-58.6-6.8-92.7-1.3-50.8 2.5-109.2-2.2-157.3-2.1Zm-404.1 74c-1.5 1.2 1.8 1 4.3 1.1 6.4.1 20.1 2.8 26.4 3.8 17.7 5 36.9 12.6 55.6 14.5 26.3 1.3 51.4 17.4 76.7 21 3.1-.3 4-.8 3-1.7-16.7-5.1-38-12.5-55.2-17.6-11.9-4.5-26.9-2.1-39.6-7.1-22.2-5.5-48.5-15.6-71.2-14Zm1219.1 51.7c-1.8.3-.7 1.8.4 1.3 3.8-.7 14.8-.3 19 1 18.8 2.8 49.8 3.8 68.3 1.8 17.2-2.6 46.1 3.8 63.8 2.6 4-1.3 1.6-1.7-17.8-2.4-16.5-.4-31.7-3.1-45.6-1.1-4 .6-8.4.7-20.1.7-18-.5-30.9-.7-46.1-2.9-2.4-1.2-18.9-1.5-21.9-1Zm351.5 22.7c-4.5-.2-21 6.6-26.8 8.4-7.2 1.8-30.4 5.6-31.9 7.2-4.3 2.2-9.7 1.7-11.2 3.3 9.1 1.8 20-4 30.2-5.1 17-1.9 31.4-7.5 47.2-13.7-2.3-.3-4.9-.4-7.5-.1Zm-1366 46.4c-9.5 6.1-38.5 8.5-41.6 10.7-18 4.5-36.5 12.4-53.9 18.7-11.7 3.2-17.1 5.7-23.5 11-2.9 4.6-2.5 12.7-4.3 18.1-2 3.7 1.3 3.6-.5 4.8-.5.3-.8.8-.7 1-16.3 3.2-48.2-5.6-64.5-7.5-3.9-1-27.9-.4-30.4-1.8-3.2-2.2-15 .2-18.2 2.2-.5 12.7-1.9 28.7-2.4 37.6.7 9.6 12 9.2 19.5 11 11 1.5 21.6 4.3 30.3 5.9 2.8 1.4 6.1-.1 5.5 3.1-.2 2.3.6 20.3 1.1 21.7.1 1.4 2.8 1 4 1.1-2.3 61.5.1 139.6-.7 200.9-2.1 22.2-2.1 47.7-1.1 79.3-8.7 0-29.3 0-35.6 2.8-1.7.3-18.4.1-23 .1-8.2 2.7-15.5 4.9-20.9 4.4v4.6c11.6.6 14.8-5.9 31-4.8 9.6 0 11.9-.1 15.5-1.1 5.7-1.7 22.1-2 28.1-2.9 1.9-.3 2-.2 1.5.7-3.9 5.8-16.9 14.8-23.1 21.1-7.5 7.7-10.3 10.5-15.7 15.6-15.5 14.3-13.3 13.9-23.3 24.4-3.5 3.7-4.7 4.6-5.2 7.2 2.7-.4 6.1-.7 8.2.6-17.5 3.1 59 25.7 62.4 28.5 1.4.9-.5 3.1-.3 5.1-.8 4.7 3.8 7.1 7.8 5.2 16.3-6.9 1.3-12.4 10.1-19.7 4.1-2.6 13.7-7.2 18-7.9 3.3 1.3 3.3-2.9 6.4-4.5 5.2-3.7 11.6-8.1 16.8-9.5 11.1-4 19.5-8.5 34.9-15.4 8.2-3.4 8.1-4.6 9.9-2.9-11 10.8-21.4 17-34.4 18.8-12.3 4.6-43.8 18.4-50.9 25.3 11.7-1.9 38.2-20.5 52.4-22.8 15.4-1.9 28.3-14.1 40.3-23.6-11.5-13.4-39.8-39-52-51.9 1.7-1.6 30.1-2.1 30.1-1.4.3.2 9.5 1.6 11.3 1.7 2.9.4 9.9-2.1 2.9-3.2-2.7-.3-5.8-1.5-5.5-2.1 4.2-.4 6.6.9 4.4-5.2-.3-.7-1.2-.8-7.1-.6-10.1.3-16.9.6-18.4.8-29.8 5.9-19.2 7.8-42-10.7-.5-25.3-1.9-67.2-3.6-90.7-.3-54.6 2.5-124.7.8-179.6.3-5.9-3-1.9-3.3-6 0-1.1.1-1.1 2-.8 8.1 2.2 17.6 5.1 24.2 4.6-.1 9.7 7.5 11.9 11.2 21.4 4.6 9.4 9.1 13.5 14.9 21.7 5.5 10.4 16.4 29.7 24.3 37.6 7 8.3 13.8 16.3 16.2 14.1 17.9-7.1 13.8-23.2 19.9-34.6 3.2-7.4 4.7-11.5 7.8-18.2 3.9-7.1 4.8-19.7 10.2-27.3-1.9 21.6-5.3 49.1-7.4 70.6-.4 32.4-.9 78.5-4.9 107.3-1.6 11.7-.7 26.5-8.1 36.9-4.1 8.3-13.2 16.2-20.3 27.1-4.3 6.9-7.4 12.3-11.8 19.7-2.7 4.3 1.8 3.4 4.5 5.3.9 1.2-7.5-1.4-4.2.6 2 .6 13.5 4.1 15.3 5.5 5.6 2.8 13.2 7.6 19.5 8.1-3 7.8 11.7 9.7 13.2 3.5 1-2.3 8.1-2.2 12-3.9 20.6-5.9 42.7-9.1 57.6-15.1.9-.6 1-.9.6-1.8.9-5.8-.9-8.4-7.5-11.4-23.7-11.5-43.2-30.4-63-45.6.7-15.1 3-26.2 4.5-39 2-19.3 2.8-46.8 4.7-67.4 3.8-43.1 8.8-75.4 7.4-123.8 6.7 19.8 13.7 36.3 23.2 59.2 4.9 16.2 6.4 28.2 15.6 42 4.2 1.6 7.8 1.9 13.4-1.4 10.4-6 17.3-13.5 29.7-15.7 3.1-.9 2-1.4 2.9-4.6.3-1.6 1.6-6 2.8-9.9 7.1-23.7 18.1-48.2 27-69.1 4.4-9.8 7.9-23.4 11.9-31 2.4-4.2 7.1-14.7 7.1-15.7-2.9-5.4-13.1-4-25.9-3.8-5.3.4-5.5.4-8-.8-15.9-7-17.2-15.4-38.7-14.2-9.4 7.3-22.3 10.9-32.7 15.7-6.1 3.2-14.3 6.7-15.2 6.4-.6-.2-2.1.8-2.1 1.4-3.5 4.2-8.9 17.9-11.9 24.8-5.7 10.8-8.2 21.1-13.5 33.3-2.3 7.5-6.1 13.6-7 20.8-1.2 10.8-8.2 22.9-12.7 33.6-2.8 6.1-4.3 10.6-6.1 18.9-.7 5.4-3.6 7.5-6.7 9.6-13.6-12.6-27.4-29.8-36.3-44.7-5.1-9.1-15-17.8-18.7-26.6-2-6.3-14.9-18-10.3-20.2 8.3 2 24.3 9.3 31.9 11 1.7.3 2.7-.1 10.1-3.8 8.7-4.3 10.9-5.7 10.5-6.3-.8-1.5-9.4-3.8-11.7-5.8-3.2-2.4-6.7-1.8-9.1-4.6-1-1.1-2.2-1.5-7.2-2.7.7-1.1-21.3-.4-21-2 0-1 .5-1.1 7.5-1.9 12.5-2.7 29.4 6.7 38.5-.4 1.6-5.3 3.9-13.7 5.4-19.4 2.3-7.8-6.2-9.8-11.5-12.1-1.5-.8 10.8-.1 11.2-1.9 3.4-1.7 3.7-4 1.3-6.6-1.1-1-1.3-1-9.2-.7-7.2.4-35.1.7-39 2.4-1.3.7-8.6-3.4-5.8-3.7 6.1-1.2 3.8-14.8 5.8-19.5-.2-11.9 21.9-11.8 31.5-17.1 13-5.3 28.1-10.6 41.3-14.1 4.8-2.3 31.4-4.5 40.5-9.5 3.3-1.7 3.2-1 5.5 2.1 4 5.1 7.4 8.7 7.9 16.1.9 3-2 10.5-3.1 12.9-3.6 7.6-4.1 18.6-8.4 29.1-1.9 5.5-2.3 7.1-1.8 7.4 2.8.4 6.7-.4 7.3-5.9 1.5-6 4-14.7 5-20.6-.6-2.3 6.7-16.8 6.4-23.9.8-8.1-4.2-14.6-9-20-1.1-.3-6.8-.4-8.5.2ZM1329.7 377c-1.5.9-1.5.9-.8 2.7 1.3 5.1 5.2 28.7 5.9 33.5 1.9 11.7 3.3 15.3 6.3 26 4.6 19.9 8.1 39.2 12.2 56.8 1.8 10.4 2.3 9.8 4.5 19.7 1.7 5.8 1.4 9.9 4.6 12.8 12.4 1.3 27 2 40 4.7 20.4 2.5 17 6.2 33.7 6.8 15.2 0 13-.2 14.4-14 .1-5.8 3.1-30.1 5.7-36.5 1.4-4 1.1-4.7-1.5-3.5-5.6 3.9-4.1 28.5-6.9 36.2-1.8 10.3-2.7 14.4-3.1 14.8-4.5.4-13.2-.2-18.4-2.3-19.6-5-34.9-6.3-58.1-7.2 21.6-21.8 52.4-53.3 71.7-75-6.7-1.8-8.6 4.5-17.3 13.6-10.1 12-36.6 36.5-50.4 51.3-10 11.2-5.9 4.9-9.9-5.6-8.5-26.4-12.1-58.5-20.2-87.3-1.6-4.6-6.5-34.9-9.1-45.5 4.1-.1 18.9 4.3 26.5 4.4 11 .7 18 1.4 21.4 2.2 16.9 4 32.9 10.4 46.9 17.8 6.7 3.1 12.7 7.3 20.9 7.9 4.2.6 3.5-2.5.2-2.5-15.8-5.1-28.5-14.8-45.1-19.8-13.9-6.2-35.7-6.3-52.3-9-3.2-1.2-15.7-2.5-18.2-3.6-.6-.7-2-.5-3.6.6Zm-1002.5 5.4c5.4 3.5 14.1 9.6 18.7 11.2-3.9 12.4-16.4 37.9-18.5 45.8-1.2 4.4-14.7 32.5-17.9 44.8-7.1 17.9-8.7 36.2-18.8 51.6-.7.1-5.7-10-6.1-12.1-3-15.7-19.2-52.7-23.7-66.7-2.8-6.4-5-14.9-5.7-21.3-.5-.9-3.8.1-3-1.6 3.6-7.8 10-20.5 12.7-28.6.3-1.1.6-1.3 2.1-1.3 2.8 0 9.9-2.6 19.3-7.2 10.9-5 19.2-6.6 29.3-13.3 3.9-2.9 7.8-2.4 11.6-1.3Zm1017 2.3c-1.4.3-1.1 1.3.4 1.4 12.6 3.2 32.2 11.3 44.6 15 6.6 2.9 18.6 11 25.6 11.5 16.4 2.7 14.6 19.6 19.1 32 .6 2.3 6.2 2.8 4.9-1.2-3.4-12.7-6.2-29.4-22-31.3-8.3-.3-21.4-11.7-28.3-13.6-12.9-4.9-30.5-14.5-44.3-13.8ZM38.1 386.5c.2 1.2-2.6 1.5-3.2 2.4-.9.8-.9.8.2.5 6.1-1.7 3.6.6 3.8 5-.5 13-.9 27.4-3.1 38.6-13.7.7-8-14.1-7.8-23 .8-6.1 1.1-16.1 2.3-21.5.8-.1 7-3.9 7.8-2Zm24.3 2.6c18.5 1.9 24.7 5.8 48.3 9.4 2.2.5 22.5.7 24.6 1.1 5.6 2.1 2.4 5.6 2.9 12.2.7 7.2-3.5 15.3-1.5 19.7 2.1 4.3 0 13.3-1.8 17.9-5.8-.6-19.7-5.1-26.5-3.6v-26.2c2-1.1 6.8-3.1 7-5.7-.2-4.1-2.7-8.9-6.8-10.2-7.1-1.9-24.2 3.4-21.3 12.7.7 1.7 4.4 5.2 5.8 5.6 1.2.3 1.5 1.2 1.6 5.4.2 5.2 1.3 10.1 1.3 15.5-.9-.2-4.9.6-3.6-.9 1.8-1.5-12.6-2.9-14.6-3.6-9.1-1.6-22-3.2-31-4.8-4.5-.8-4.9-.9-5.2-2 .8-10.9.8-33.1 2.3-43 1.4.2 17.1-.1 18.5.5Zm1489.4 1c-12.7.8-24 13-26.9 23.4-7.6-8.8-11.1-11-23.2-9.2-1.2.3-1.7.2-1.5-.1.5-.7-3.2-.6-5.1.1-15.2 8-18.4 29.6-1.6 37.9 10.1 4.4 27.7.9 30.8-12 1-4 1.6-.3 2.3.7 5.3 7.2 15.2 17.1 25.7 16.6-14.5.4-44 3.5-58 1 .5-.6.3-.7-.9-.7-1.8-.4-2 1.9-2.9 2.3-.2 0-.3.3-.1.7-1.5 12.9-1.8 27.1-2.2 41.6 6.5-.2 14.3-2 21.5-1.4-1.6 6.1 4.5 12.2 10.6 11.5 3.3-.6-.6 10-2.5 10.5-1.5.8-1.7 1.5-.6 1.5 1.2-1 .4 9.7.4 11.5l5.1.5c-6.7 1.1-23.5 2-27.7 3.1-1.2.3-1.6.6-1.2.9.5.3.4.5-.3.7-.8.3-.9.6-.7 3 1 6-1.6 9.6-2.7 14.5-1.7 7.5-5.2 18.7-6.7 26.2-7.5 28.1-13.4 48.7-21.4 77.2-4.6 14.9-7.5 26.6-11.5 41.3-1 6.5-1.5 17.3-2.9 23.7-1.1 11.7-2.5 19.9-4.3 24.7-.7 2.5-2.7 7.3.5 7 6.9-.8 4.8-5.3 7.5-12.7 7.9-33.4 10-33.5 15-53.9 7.3-33.6 22.2-60.9 32.2-92.7 1.1 11.3-2.2 58.8-3.3 76.5-3.2 34.9-4.4 30.5-4.4 70.3 1 25.1-3.2 31.1 5.8 28.3 2.4-.7 3.6-11.7 4-14.3.7-6.8 2.1-18.7 2.3-26.5 1.2-26 4.7-44.3 8.5-69.2 1.8-13.2 4.8-13.1 7-26.3 4.9-33.2 3.2-27.7 14.6-70.2 1.3-3.9 4.6-21 5.4-15.8 0 3.6 6.6 24.7 10.2 33.1 1.5 3.4 5.3 15.7 5.4 17.5-.4 14.2-2.1 29.9-4.1 43.4-4.1 31.6-3.1 69.6-4 100-.5 6.6-1.5 18.5-1.9 1.9-1.3-16.2-3.7-42.1-4.7-60.6-1.7-23-3.9-38.3-7.5-59.2-2-6.7-.2-22-4.6-24.2-2.9-1.5-3.8-.4-2.5 3.2 1.4 2.8 2.8 16.2 4.6 22.6 5.2 24.3 7 53.8 8.8 78.2 1 6 .5 20.1 1.9 24.8.9 7.6 2 13.2 1 22.8-1.1 7.7 9.2 6.4 7.8-2.9.5-10.4.9-10 1-26.8.5-22.1 1-45.9 2-63.4 1.5-16 4.7-34.7 5.1-51.5.1-.1 2.9 7 4.3 11.1 1.6 3.4 5.7 17.9 7 21.6.8 5.8 3.3 16.4 6.3 20.8 9.8 25.9 17.7 53.7 27.5 79.7 1.6 6.5 6.4 16 1.9 13.6-12.2-2.5-26.6-7.2-38.8-12-4.8-1.3-7.5-4.1-10.6-3.3-1.4.9-1.4 2-.1 2.9 16.7 8.6 37.4 12 54 20.7 1.1 1.9 4.1 9 5.5 8.5 3.3-.1 4.6-5.1 8.4-2 10.5 4.8 26.8 8.1 37.7 13.8 7.9 3.6 17.6 6.8 25.2 12.1 2 2.7 3.8-2.8 3.5-3.4-8.9-6.3-22-10.9-32-15.5-8.1-3.3-28.3-7.6-37.6-13.2-6.3-19.8-11-37.6-18.8-55.4-6.2-12.2-8.3-34.6-13.8-47.2-2.6-2.9-2.7-17.9-3-22.1-.9-5.3-5.8-23.1-7.5-30.8-2.8-15.4-8.3-29.2-10.9-44.6-2.1-9-5.1-18.4 1.2-26.5-1-.5-6.8-2.5-6-3.1 3.4-2.2-38.2-1.7-39.4-2.1-.7-12.3-1.2-9 10.7-9.2 0 2.3.2 6.1.2 8.9.9-.1 2.8-.3 3.4-.8 1.1-1.1.7-10.8-.4-12.1-1.2-2.1-.8-7.1-.7-10.1 5.5.1 8.1-6.7 6.8-11.3 6.4.8 20.9 1 21.3-1.8 1.4-4.2-.1-24.1-.1-32.2 0-5.3.1-5.9.9-6.5 1.2-.9 1.2-1.5-.1-1.5-1.2-.2-5.1-1.2-1-1.8 7.5-1 18.2-13.8 19.7-18.5 1.7-4.7 1.8-13.3 1.8-19.7-5.2-13.6-17.2-20.2-31.6-18.1Zm13.1 2.9c15.2 7.1 18.7 22.9 12.9 37.7-5.6 6.4-15.9 19.2-27.4 14.3-8.7-2.7-15.3-10.2-19.1-17.7-1.4-2.1-1.1-14.5-.4-17.2 1.6-6.6 11.1-14.4 17-17.5 2.4-1.8 14.7-1.3 17 .4Zm-1210.1 3.6c4.5 2.1 20.6-3.9 25.4.1-.1 1.6-2.5 6.3-3.1 7.9-7.1 14.8-11.7 34.2-19.4 50.8-9.6 23.3-21.1 48.9-27 71.7-8.5 2-14.5 4.2-21 10-12.4 10.7-21.6 11-12-5.2 6.9-13.8 12.5-38.2 18.3-53.4 5.4-17.3 12.1-29.6 17.5-45.5 2.9-9 11.5-25.9 16-38.6 1.5 1 3.1 1.7 5.3 2.2ZM55 395.9c-4.1 2.3-3.1 4.9-3.5 12.1.3 3.1-1.2 13.2-.5 15.4 6.5.7 6-2.7 6.8-19.9.2-9.2.3-9-2.8-7.6Zm135.1 2.5c1.7 2 .8 1.9-3.3 2-3.6 0-6.9.6-10 1.5l-6.8-3.3c5.2-.5 15.6-1.9 20.1-.2Zm-125.9 1.5c-4.3 6.5-5.3 17.7-6.2 25.5 6.5.3 4.8-7.8 6-12.6-.3-2 5.1-18.9.2-12.9Zm89.2-.7c-.5.2-5.2 2.3-5.2 1 .2-1.7 5.1-1.2 5.2-1Zm10.8 2.3c31.1 14.5 27.3 5.9 21.1 34.1-7.1 1-17.2-3-27-2.4-2.8.6-11.7 1.2-14.2 1.7-1.1.3-1.1.3-.8-1.7.6-7.2 3.2-21.8 3.1-29 5.8-2.5 11.7-4.4 17.8-2.7Zm-92.1 1.4c-2.4 1.5-3 9.8-3.9 13.1-.1 3.1-3.8 11.9-1 12 6.9-1.6 4.8-13.7 6.6-19.5.1-3.7 2.6-7.7-1.7-5.6Zm70.1 8.5c-.9 5.3-1.4 12.4-2.1 16.8-.7 3.9-1.8 1.4-1.2-2.8 1.3-6.4 2.8-16.2 3-23.4.5 3.1.8 5.8.3 9.4Zm1368.9-5.3c5.3 3.4 13.9 11 11.7 18.6-.2 12.2-11.4 20-22.6 17-23-7.6-13.5-42.2 10.9-35.6Zm-1406.4.6c3.8.9 6.9 9.1 4.7 10.5-.4.1-.6-.3-.6-1.1 0-1.8-1.7-5.2-3-5.9-3.6-1.3-9.7-.1-13.1 2 1.1 5.8-.3 6.3-1.3.1.3-5.4 9.2-7.4 13.3-5.6Zm-4.2 5.4c3.3.5 4.2 6.3 2.7 8.2-2 8.6 2.2 10.3 1.1 25.1-.2 11.6.5 10.2.9 17 .5 2.6-2.5 1.7-3.6 1.4-1.2-6-1.2-17.2-2-24.2-.3-4.9-1.6-16.8-1-18.7-1.1 0-1.7-3.7-.6-4 .8-.6.8-.7.1-2.7-1.2-2.7-.9-3 2.4-2.1Zm1348.1.9c1.1 2.1 7 6.5 7.9 9.4 2 3.8 2.7 3.4 3.4 7-2.9 0-10.3-.1-11.8.7-3 1.1-2.7 7.8 1.2 7.5 3 .5 13.4-.1 16.1 1.1-1 1.1.7 72.5-1.2 83.7-2.5 36.4-4 79.4-5.4 116.1-1.9 9.2 1.8 14 3.6 4.7.2-37.6 2.8-83.8 3.8-121.3 1-10.4 1.7-64.3 2.2-69.5.7-2.7-.7-14.8 2-14.3 5.3-2 4.5-6.9-1.6-6.4-4.2.3-9.7-4.7-4.9-7.2-3.3-5.1-11-13.6-15.3-11.5Zm10.4 18.9c3.4.4 2.1 1.2 4.7 1.4 1.3.1 5.5.2 5.2 2-.2 1-.4 1-7 1.1-7.4.1-9.4-.1-9.4-.9.5-4.7 1.9-4.5 6.5-3.6Zm-1208.1 8.8c0 1.9-.1 2.3-.8 2.3-1.1 0-1.2 1.6-1.5 13.6-.3 14.9-1 12.2-1.5 30-4 47.8-8.8 89.3-10.8 138.4-1 14-3.3 29.4-4.9 43.2.1 2.5-2.3 8.9.2 8.7 7.6 3.2 27.7 23 35.3 27.9 10.5 10.5 25.2 15.5 32.1 24.9-5.5 1.6-6.9-1.4-11.4-4.3-6.5-4.4-8.8-6.1-14.1-10.6-9.7-7.5-19.8-16.4-30.3-23.2-2.5-1.7-8-4.7-8-7.5-.6-5-8.4-.4-10.5 1.7-12.2 13.3-18.5 19.8-28.5 38.6-3.1 5.7-4.2 7.4-4.9 7.4-3.7-.5-.8-1.4.1-3.9 5.6-11.6 18.5-29.8 27.5-40 8.3-12.4 10.8-20.2 11.4-34.9 2.6-32.9 5.1-62.9 5.6-100 .6-19 2.4-30.8 3.8-53.1 1.5-10.9 1.5-31.7 4.2-45 1.1-2.2 7-17.2 7-16.5-.1 0-.1 1 0 2.3Zm1208.2 12.1c-.3 41.3-2.8 93.2-3.8 132.8-.3 8.6-2.8 41.5-2 55.4.3 2.3.3 3.2-.2 3.5-1.7 2.3-2.3 6.8-3.9 8.7-9 9.6-34.9 36-41.6 41.4-5.2 4.7-12.3 8.4-9.4 13.1 2 1.2 3.1-2.3 3.8-3.3 3.8 0 10.3-5.9 15.6-10.6 10.3-11.9 33.3-36.2 40.4-45.1.7-1.8-2.3-.4-3.2.7-1 .9-1.6 1.2-1.5.8-.2-1.7 2.4-2.6 4-3-1.3-31.3 1.9-52.8 2.1-83.2-.1-16.8.6-16.4 1.7-29-.6-6.7 2.4-91.9-1.3-94-.6-.3-.7.7-.7 11.8ZM162.2 442.6c3.4.7 4.3 1.2 5.7 2.8 5 3.3 13.4 6.5 18.8 9.1.5.4-.6 1.1-5.2 3.2-3.2 1.5-6.3 2.7-7 2.7-9.9-2.7-22.6-8.9-32.7-11-2.4-.3-2.5-.3-2.2-1.8.4-1.3.2-5.4 1.9-5.7 3.9-.6 15.5-.6 20.7.7ZM83.9 445c1.2.4 1.5.7 1.4 1.8-.1 2.5.5 15.2 1.1 19.1l-4.7-.3c-1.2-4.1-1.3-15-1.5-21 1.1-.2 2.4-.1 3.7.4Zm9.6.5c1.6.3 2.9.6 3 .6.3.2.7 16.2.4 17.2.3 1.8-6.2 1.4-7.1 2-1 .3 2.6-2.1 2.1-2.3-1.3-3.8-1.7-3.7-2.1-11.8-.3-5.4-2.1-7.2 3.7-5.7Zm1463.6 2.1c-.5.1-1.2.1-1.7 0-1-.2 2.9-.2 1.7 0Zm-.8 3.3 1.6.4c.2 12.5 3 26 .6 37.9-21.4-.8-44.8-.8-65.5 1.7-.3-1.4.3-24.3 1.2-39.9.4-.4 12.7-.3 19 .1 8.4-.2 33.5-1.5 43.1-.2ZM107.1 471.4c-1.8 65.1-2.1 145.7 1 206-.4 19.4 2.6 30.4 1.1 45.3-7.6 1.2-11.5 2.2-17.3 10.3-.4-20 3.1-27.6 3-48.6-.9-82.5-2.2-137.2-3-216.9.7 0-.1.8.1.9 1.4.3 12-1.6 13-2.5 4-2.7 1.6.1 2.1 5.5ZM87.4 473c0 60 2.6 169.1 2 225.5-2.1 15.2-3.1 16.9-3 37.6-1.8 55.2 4.1 28 1.9 68.3-.4 4.3-.7 5.9-1.3 6.5-2 3.3-.5 11.1-.3 13.3.5.9 1.5 20.8.3 10.4-3.2-14.3-4-62-2.7-82 .2-40.9-1.1-58.9 1.3-81.9 2.8-62.3-2.8-137.3.6-202.5 1.8-.8.8 1.9 1.2 4.8Zm1449.1 19.6c.2 6.1 1.1 7.8-7.9 8-10.4 1.3-13.8-2.7-15.3-9.4 1.1-.5 17.1-1.2 22.7-1.1l.5 2.5Zm-6 14.3c0 4.6.2 4.6 1.4 6.3 0 .4-6.3.3-8.6 0-4.3-.3 1.9-5.2 0-11h7.2v4.7Zm18.2 21.8c6 .6 10.3-.7 10.3 1.6-.2 1.6-3.7 1.9-21.2 2.2-14.7.2-26.2.5-38.4.9 2.1-4.4-1.3-2.9 9.4-3.6 18.3-.7 16-2 39.9-1.1Zm9.3 6c-1.5 6.6 2.3 13 3.1 19.1 1.7 8.8 4.5 20.1 7.3 29.3 3.3 16.6 8.9 35 11.7 51.6.5 2.7.4 16.4 1.8 18.3 2.3 5.2 2.5 6.4 4.5 12.4 4.5 28.3 20.1 57.4 27.3 83.4 1.4 6.8 3.4 8.8 3.2 12.3-.6 1.5-1.1 1.2-1.9-.2-1.5-2.9-4.2-6-2.3-9.1-2.4-1.3-2.2-.4-4.2-6.6-11.2-29-20.7-63.3-30.3-91.4-7-14.9-3.2-13.2-10.7-34.1-4.2-13.5-8.4-22.9-12-34.8-4-11.2-11.1-29.4-13.8-41.1-1-9.1-4-2.2-3.3-6.2 1-5.7 2.8-2.7 8.2-3.6 3 0 6.6-.2 8-.5 4-.4 3.7-.5 3.4 1.2Zm-24.2-.1c1.5 3.9-1.7 14.2-2.8 18.9-2.8 13.4-7.9 31.3-10.4 44.9-2.5 11.5-2.6 21.6-5.5 34-3.4 10.6-7 19.5-8.1 30.5-6.4 32-4.7 68.5-11.4 100.1-.7.7-1.1-.7-1.4-4-1.3-29.3.5-64.9 3.7-92.8 1.6-28.9 6.8-96.3 1.7-131.2.9.2 7-.5 4.8.8-.8.7-.8.7.4 0 1.1-.6 3.5-.8 14.1-1 9.4 0 11.7-.8 14.9-.2Zm-37 10c.9 10.9 1.8 25.6 2 36.9.2 4.8.2 4.8-.9 4.8-4.2.2-3.6 10.5-6.3 16-3.1 9.1-6 16-9.5 24.6-14.5 35-22.2 68.5-31.8 104.5-.9 2.8-4.7 20.3-5 14.2 6.7-18.7 5.7-40.1 11.2-60.2 4.1-16.6 9.4-33.2 13.5-48.4 5.2-22.6 11.7-42.1 17.2-64.1.4-1.6 8.7-36.3 9.6-28.3ZM1396 610.3c-10.3 2.6-8.1 3.8 3.7 3.4 8.6 0 16.3-.1 16.1-3.3-1.1-.3-17-.5-19.8-.1Zm235.2 3.8-1.8 1.1c4.6 3.4 19.6 7.2 27.5 10.4 13.1-2.4 4.4-7-3.6-8.3-4-.2-18.4-6.3-22.1-3.2Zm-1399.3 80c-.1 13.2-2.2 47.5-.5 58.4.7 0-1.9 2.3-2.6 2.3-1-.3-5.9-3.1-4.5-4.8.6-.4.3-2 .9-2.2.4 0 .4-1.1.5-10 .2-6.3-.3-5.3 2.2-6.3-1.3-.5-2.4-.3-1.9-2.4.5-4.4 1.1-14.3 1.5-17.4.7-2.6.2-22.2 3.4-27.3 2.6-4.4.6 3.2 1 9.7Zm1190.8-9.6c-2.2 3.2-13.4 14.2-18.5 16.5-.6-.6 12.8-11 15.3-13.8 1.8-1.7 4.1-4.5 3.2-2.7Zm-1181.5 8.7c14.5 11 28.6 24.2 43.6 35.1-23.8.6-34.9-.1-50.3-.3.4-12.3.9-17.3 1-29.5.5-11.8-1.3-9.5 5.7-5.3Zm-17.6 3.7c-.9 13.7-.6 22.6-1.7 33.5-23.3-.4-27.9 1.3.1 2-.2 1.2.5 9-.8 7.6-4.1-1.8-21.4-7.1-24.5-7.6 6.5-12.4 16.5-29.3 26.2-39.4 1.7-2.8.6.6.7 3.9ZM392.4 708c-4.4 1.4-13.8 1.7-19.5 2.7-11.3 3.8-21.8 4.1-32.9 5.6-8.5 1.5-16.4 2.2-24.1 3.4-.6 3.7.2 5.7 6.3 4.3 16.9-4 28.4-3.2 47.2-7.5 3-.7 9-1.8 13-2.3 2.6-.7 2.1 1 2.6 2.6 34.9-2.8 58.6 1 95.9.6 21.9-.2 29.6 1.4 44.1.6 1.8-.6 5.7.2 7-1.7 3.7-3.8-4.3-5.8-8.5-4.1-18.2 1.7-94.9 1.2-117.4 0-8.1.4-14.4.6-13.5.4 2.4-.1.3-4.9-.2-4.6Zm999.9 3.3c-1.4 2-7.2 6.2-7.9 7.9 1.5.7 6 2 7.5.3 3.4-1.9 4.1-1.6 8.1-5.1 3.5-3 3.8-3.4 3.1-4-2.8-.8-8.2-3.4-10.8.9Zm25 9.4c-36.5 3.2-82.2-1.1-119.5 1.2-.9.3-1.1 2.3-1.9 3-.9 1 .1 1 .6.4.1-.2 1.6-.2 3.2 0 21.8.4 47.4-.6 73.6.2 29.3.2 43.5 1.4 47.6-1.3 6.3-1.6-3.8-3.9-3.6-3.5Zm94.3 1.6c.5.3 2.3-.2.6-.2-.7-.1-.9 0-.6.2Zm7.2 1c0 .3-.5.5-1.1.5-1.1 0-2.8 1.2-3.7 2 3.7 1.8 6.1.8 11 2.4 5.7 1.5 7.8 1.5 8.1-1.5-1.6-.7-12.1-2.5-14.3-3.4ZM107 726.2c2 .9 1.2 3 3.5 3.2 2.9.6 9.2 7.4 12.3 9.3 2.4 1 21.7 20.1 26.5 24.7 3.7 3.9-2.2-1-5-2.7-9.2-6-16.1-10.6-17.9-11.9-3.9-3.9-14.6-14-18.8-13.6.5-2-5.5.8-6.8.9-1.5.4-1.9.7-1.3.9 1.5.3-5.5 4.4-6.4 5.2-.4-2-1.4-6.3.4-5.6 6.3.3 7.3-14.7 13.5-10.4Zm158.2 4.1c27.8.6 27.1-1 8.9 4.3-10.4 3.3-27.7 7.8-38.5 8.9 4.1 2.6 35.6-6.3 43.9-8.5 5.6-2.1 18.4-3.2 24-5.2-3.8 4.3-20.2 6.5-27.5 8.9-8.8 2.3-32.8 8.6-40.6 10.3-1.3 1.9-.7-16.8-.8-19.8 9.7.6 18.6.9 30.6 1.1Zm-58.3 7.4c16.1 5.7 14.8 5.2 14.7 6.6-.1 2.3-.5 1.4-2.8.5-7.3-2.9-13.6-6-21.8-8.5-5.1-1.4-5.6-1.6-4.2-1.8 4.8-.5 6.7.8 14.1 3.2Zm-98.4.2c2.2 1.1 4.2 2.8 7.6 6.8 6.7 7.4 33.9 25.8 40.7 32.7 7.7 7.3 9.7 9.3 12.8 13.6 3.1 3.4 3 5.9 7.7 6.7-21.1 12.7-43.1 19.2-58.4 28.9-3.3-20.9-5.9-56.1-10.2-77.1-1.2-4-1-12.1-2.9-11.2-1.8.6-1.8-.3.3 13.1.4 2.3.8 4.8.9 5.4 2.1 11.8 4.3 47.1 6.2 62.2 1.2 8.1 1.5 10.4 1.3 10.7-1.9 1.8-12.9 6-17 8.1-1.6.9-3 1.6-3.1 1.5-1-.9-1.6-13.1-1.9-15.3 1.5-4.3 2.4-14.4 2.4-19.6 2.3-18.7-3.1-37.7-2.1-57.9 1.3-1.1 6.2-5.6 6.7-5.7.5 6.2.9 26.1 2 32.2 1.5 19.2 3.4 35.4 2.3 55.7-.8 7.2.8 4.9 4.2 3.4.4-21-.9-43.1-2.8-62.9-.3-.3-2.6-32.3-2.8-30.2.5-1.8 4-2.6 6.1-1.1Zm-29.1 15.9c-.5 10.1-14.2 11.9-20.4 22.7-5.5 7.6-11.7 12.8-16.3 19.4-5.7 8.3-14.2 14.4-21.6 18.5 3.7-9 24.8-27.9 32.8-36.3 1-1.3 24-24.3 24.8-25.6.6-1.2.9-.1.7 1.3Zm-.9 18.3c.2 4.3.3 14.1.2 21.7-.2 36.8-.4 31.1 1.2 41.7-17.8-3.1-28.3-11.4-49.7-15.5-12-2.4-6.4-1.3-.3-6.6 14.3-8.3 25.1-22.7 35.4-35.4 5.5-7.3 8-10.5 12.6-13.8.1 0 .4 3.5.6 7.9Zm-58.2 44c-1 .8-2.6.9-2.6.3 0-.6 4.7-1.7 2.6-.3Zm10.3 7.9c10 2.2 16.7 6.1 25.3 9.5 2.8 1.3 19.1 6.1 22.4 6.6 2.6-.2 1.6 2.7 1.8 4.5-8.2-2.3-46.1-14.2-58.5-22.7 1.9.5 4.1 1 9 2.1ZM89 846.1c-.2 3-.2 3.5.5 3.7 1.2-.1 1.4 7.3 0 7.1-3.9 3.6-7.1-6.7-3.7-7.7 2.8-1.1.7-2.4-1-2.9 2.3-2.4 5-6.5 4.2-.2Z\" })),\n            React.createElement(\"path\", { d: \"M1138.3 43.8c-2.3.7-11.2 2.8-12.3 5.5-1.6 1.9-2.5 2.5-3.7 2.5-1.8 0-1.9 1.2-.1 1.6.6.1.8 0 .6-.4-.2-.3-.1-.6.2-.6.8 0 .7.6-.2 1.6-1.2 1.4-5.8 13.4-6.5 16.8-2.5 11.6 8-14.9 9-14.1 3.3-4.9 3.7-4.8 16.9 5.4 12.3 8.3 20.2 31.3 25.1 46.8 8.3 28 13.6 55.3 19.7 84 5.5 24.6 12.8 46.2 20.1 69 8.1 19.7 19.9 40 30.3 59 2.2 6.2 15.2 29.2 19.9 39.6 3.9 6.4 8.2 19 14 23-15.8-39.2-52.2-95.3-65.7-141.5-13-38.6-18.9-79-29.4-117.9-4.7-17.9-15.2-52.7-29.6-61.3-4.5-3.3-10.4-8.4-15-9.6-2.6-.8-2.9-1-2.4-1.9 1.8-3.3 9.3-6.6 15.2-6.7 55.4 1.5 60.2 103.5 71.2 144.8 5.9 28.5 22.9 51.9 35.4 75.8 4.4 9.9 15.3 30.5 17.2 35.2 6.8 16.8 13.4 36.6 18.9 50.4 7.7 19.6 7.5 23.3 13.2 46.4 1.8 9.6 5.6 19.2 3 19.9-.8-.3-.8-.2-.2.4 1.2 1.2 2.3-.9 2.3-4.5 0-4.1-.7-8.6-3-18.5-4.1-21.9-11.1-44.2-19.6-65.3-6.5-20.8-15.7-41.6-26.5-62.4-8.1-19.1-18.5-30.5-27.5-51.9-22.3-48.1-16.1-175.1-90.5-171.1Zm-65.6 1.9c-.2.4 1.4 1.7.9.7-.6-.9-.1-.8 4.2.7 7 3.3 31.1 3.5 30.8 10.3-3.5 5-1 6.9-9.4 4.9-22.7-4.4-40.1-3-64.2.2-8.7-.4-39.4 12.1-52.1 13.5-7 .1-2.3 1.5 2.2 1.3 9.2 0 24.2-6.6 33.4-8.8 6.4-2.3 26.4-5.1 35.1-6.1 11.1-1.4 39.8-.8 49.7 2.3 1.5-.3.2 4.6-.7 7.1-16.5-.1-44.5 1.8-53.7 3.8-3.6.3-24.9 4.4-19.2 5.3 9.2-2.6 44-7 60.8-7 11.1-.3 11.4-.3 11.7.8.3 1.2 0 8.8-.4 12.5-.4 3.2-.4 11.8 0 14.9.4 2.7.4 2.7-2.1 4.5-11.5 9.9-28.5 20.8-45.1 27.1-28.8 15.9-78.9-13-94.4-30.3-1.7-2.5 2.7 1.1 2.8 1.6 2.4 1.6-4.1-5.6-5.5-3.5 4.3 10.5 25.8 20.6 38 28 13.4 6.1 42.7 15.5 58.9 7.2 15-5 38.3-18.8 46.5-27.4 1.7-1.8 2.1-1.8 2.1.2.1 1.7 1.7 8.6 2.3 10 5.4 12.7 5.2 9.8-3.8 21.2-9 11.5-22.7 30.5-38.6 25.7-1.2-1.1-3.7 1.6-7.2 1.6-6.6 1-8.4 1.7-11.1 4.1-2.7 6.1-27.8-11.2-36.4-15.4-21.5-12.7-38.3-24.5-57.5-42.8-18.1-13.8 17.8 20.9 29.5 28 14.7 10.3 29.3 19.1 43.4 26.5 13.3 7.1 7.5 2.9 0 7.4-5.7 2.4-10 5-15.2 6.7-21.6-7.6-54.4-31.1-68.9-48.4-12.7-8.8 17.3 21.2 19.9 22.3 8.3 7.2 20.6 14.9 36.7 22.9 9 4.5 10 5.1 9.1 5.8-2.5 1.5-3.9 1.8-10.3 5.5-4.7 2.6-8.8 4.7-9.1 4.7-11.9 7.5-26 14.6-37.8 22.6-.9 1-10.2 6.5-11.2 7.3-.9.6-1.5.2-4.7-3.3-4.1-4.4-5.6-4.9-9-3.1-3.5 1.8-1.5 4.8 11.7 18.4 11.3 9.1 16.1 26.6 26 18.1 0-1.6-3-3 0-4 7.7-5.5-3.2-10.2-9.1-6.4-1.8-2.3-5.1-5.5-6.4-7.6-.6-1.3-9.9-9.7-6.3-10.3 1.3-1 8.9-5.2 9.3-5.2 1.3 3.5-2.1 4.4-5.2 5.3 2.9 6.2 4.9 4 10.3 1.8 1.3 1.3 3.8 3.7 5.1 4.5 2.2.9.1 3.8-1.5 4-1.2.2-.8.5 2.7 2.2 4.1 1.9 6.6 2.8 6.6 2.3 0-1.9-3.2-2.8-5-3 .8-1.7 3-3.3 3.3-4.7.4-1.3 1.1-1 2.2-3.3 1.1-2 1.2-2.6.6-3.3-1.4-3.1-4.9 3.5-5.9 4.1-10.2-8.7-2.4-3.9 8.8-12.3-3.8-3.6-4.6-1.4-10.9 1.3-3.6 1.8-6.7 3.2-6.9 3.1-.7-3.4-1.9-4.1 3.6-7.3 15.7-10.1 34.1-20 55.4-29.9 7.6 2.8 16.6 5.5 24.5 7.3.1 2.3 2.5 7.9 2.7 2.6-.7-3.2 2.1-2 4-2.2.1 3-1 11.3 1.1 11.8 2.1 2.7 10.2 1.6 10.4 7.8.1 4.6-8.4 17.2-1.6 17.9 3.1.9 3.4.8 3.4-1.1.3-3.8-2.1 2.2-2.1-1.3.8-4.8 2.2-12.9 2-19.1-4.2-3.7-10.1-.5-9-8.9.2-8.5 3.6-20.2 12.7-20.4 3.1-.3 3.5-.3 4.7 1 1.4 1.5 3.3 1.9 3.3.7-1.8-4.1-13.5-3.8-17.3-2-1.8.8-4.5 5.1-6.8 10.6-.8 2-1 2.1-2.9 1.9-4.7.3-.3-11.3.3-12 1.4-5.5 11.8 1.4 10.8-3.6-.9-2-.6 2-4.3 0-1.4-.5-2.6-1-2.6-1.1 0-.6 3.6-3.6 5.5-4.6 2.3-1.2 10.9-2.9 15-2.9 5.5-.1 10.3 5.5 11.9 13.7 1.3 6.7.5 14.3-1.3 16.6.8 1.4-1.9 11.2-1.9 12.3.3.1.2 1.9-.2 4.6-1.3 7.4 1.4 12.9-.5 20.4-1.1 4-5.4 8.4-3.3 12.9 2.9-3.4 6.1-7.6 7.8-11.4.7.8 2 2.4 2.6 3.2-2.2.6-2.6.4 1.4 2.9 19.6 11.5 14 12.7 15.4 32.4 7.1-13.1.2-26.1 12.3 1.1.4 2.6 2.5 3.4-1.4 4.3-6.7 1.1-4.9 6.9-1.7 9.7 4.3 2.3 8.8-2.8 9.9-6.8 2.3.3 12.4 10.1 14.4 13.8 1.4.2 6.8 14.5 7.4 7.2-.3-6-14.1-21.3-20.7-23-1.2-.3-1.5-.8-2.1-3.5-2-9.7-7.2-19.3-13.3-25.4-.5-.9-.3-.9 2.4 0 9.1 4 41.4-6.3 46.2-20 5.6 11.2 13.3 31.5 18.8 36.9-4.1-9.2-12.4-29.9-15.9-37.1-2-2.3-2.4-13.6.2-5.8 31 82.7-12.7-57.3-22.5-75.9-11.5-27.2-22.7-51.8-17.9-79.6.2-3.3 0-4.2-.6-4.2-.5 0-.8.7-.8 2.1 0 2.3 0 2.1-1.5 7.9-2.6 9.3-.6 29.1 3.6 41.1 1.3 1.8-1.7 1.1-1.5 2.9-1.5 5.1-3.8-6.6-5-13.7-1.4-5.5-2.7-33.6 1-31.9 5.4-1.3-4.1-1.3-.8-7.8l.7-2.5c1.5 0 8.1.4 8.5 0 0-.7-3.4-2-5.2-2-4.2.6-1.4-3.8 0-4.6.4.1.5-.3.3-.9-.3-1.3 1.8-4.4 2.9-4.4 1.9-1.2-2.5-1.6-3.9.1l-1.5 1.2c-6.5-5.1-23.3-6.7-32.6-9-3.5-1.7-4.2-1.8-4.2-1.1Zm73.6 3.7c2.2 9.4 21.3 32 26 47.9 14.9 41.2 23.5 86.9 39.1 128.6 12.7 34 17.1 50.3 34.6 84.8 9.4 21.8 23.9 42.8 30 63.9-.1 4.8 15 27.8 6.5 9.3-7.3-15.5-9.5-29.7-18-42.5-5.4-9.6-12.3-24.4-18.3-36.1-15.6-30.8-22.4-54.1-33-82.9-13.4-38.1-20.9-71.1-33.5-111.4-7.7-27-21.5-40.7-31.9-60.5-.6-2.1-1.5-2.7-1.5-1.1ZM1122 65.7c12 28 25.1 61.7 32.1 92.2 7.1 25 9.2 42.3 15.8 66.4 4.1 14.5 7.9 25.8 15 43.4 9.3 20.3 18.8 35.5 28.3 53.5 4 7.9 11.1 20 13.4 23 3.9 4.1 1.7-2-.1-4.3-15.4-28.9-41.8-76.7-50.4-108.9-8.1-30.8-14.5-65.8-24.3-95.9-3.9-15.5-18.6-52-26.3-66-1.5-2.5-2.1-4-3.5-3.4Zm-28.2 23.9c-29.9 18.8-60.7 14.1-94.9 14-6.3.5-18.1-4.5-19.3-7.8.4-.2.3-.3-.4-.3-.6 0-2.7-.9-4.7-2-12.1-6.3-.2 4.8-3 .7-1.2-1.8-1-1.9 1.7-.3 4 1.8-1.5 1.8 1.5 2.1 14.9 7.7 18 11 47.7 10.5 16.7-.2 27.8 1.3 41.6-1.4 10.5-3.2 33.3-7.2 29.8-15.5Zm23.7 38.8c10.7 26.4 23 55.8 30.4 82.7.5 1.7 1.6 4.5 2 6.3 1.1 2.3-2.8-1.9-3.4-1.8-2.5-1.9-4.9-14.5-5.6-15.7-1.2-4.1-2.8-9.4-4.4-14.5-1.7-7.3-12-28.4-15.8-36.4-2.7-6.1-5.5-12.6-5.3-19.2.1-6.6.1-6.9 2.1-1.4Zm-6.1 9c-2.3 24-8.3 48.1-26.7 64.4-2.9-2.9-3.2-1.6-2.8-8.7.6-11.5-2.3-20-12-24.9 22.8 0 42.7-43.9 41.5-30.8Zm4.9 11c10.7 25.4 24.7 38.7 10.9 68.2-8.6 17.3-10.2 26.6-24.2 29.2-2.4 0-2.6-.1-2.9-1.7-1.5-7.3-4.3-13.9-9.4-22-2.5-4-2.6-4.2-1.6-5 9.5-9.6-9.6-9.3 2.5-18.4 22.9-19.5 21-63.8 24.7-50.3Zm-76.5 28.3c-.2.2-.7.2-1.1 0-1-.4 1.6-.4 1.1 0Zm-13.2 4.5c4.7 2.8 11.2-4.3 9.5 5.7-.7 2.6.2 4.4-1.3 5-2.1 0-18.8-5.6-20-6.7-.1-1.2 6.9-3.5 7.7-4.1 2.2-1 2.1-1 4.1.1Zm10.8.4c-.2.9-1.7 1.2-.8 0 .7-.8 1.3-1.3.8 0Zm-83 17.4c-4.6.4-9.5 0-13.6 3.1-2.8 1.2-6.7 3.5-1.9 5.5 2.2 1 3.2.9 14.1-1.5 4.1-1.3 15.7-2.2 16.8-4.7-2.4-3.4-10-3.1-15.4-2.4Zm183.7 2.9c3.6 10.7 1.7 8.4 8.5 24 1.4 3.3 1.4 3.5.6 6-2.2 14.4-40.1 30.3-46.1 16.6.1-1 .5-1.3 2.9-1.6 6.6-.9 12-4 15.9-9 2.9-3.9 15.2-27.5 16.3-36.5.4-2.9 1-2.7 1.9.5Zm-87.3-1.6c-2.2.9-3.1 2.1-2.5 3.1.6 1.4 5.8-2 6.9-1.9 4-1.8-1.5-2.7-4.4-1.2Zm32.4 1.6c-.2.8-1.8-1-1.7-1.4.2-.8 1.8 1 1.7 1.4Zm-2.8 12.9c5.2 7.6 18.4 31.3 12.1 29.7-2.4-.4-15.2-6.2-11.6-8.8 1.1-.4-2.2 0-2.5 0 1.1-3-3.8-29.7 2-20.9Zm2.1 21.5c.4.2.9.1 1.1 0 .5-.5-2.2-.4-1.1 0ZM958.4 247c3.7 6.2-7-.6-4.4-1.3 1-.3 3.3.4 4.4 1.3Zm136.5.1c1.8 2.6-3-.2-3.1-.7-.4-.7 2.7 0 3.1.7Zm27.2 5.9c-3.9 2.3 2.5 5.3 1.1 3.2-2.6-8.1 12.2 4.7 14.6 9.9 2.1 3.4 5.5 10.7 6.6 14.1 1.3 4.1 2.1 3.3 1.8-1.9-.7-13.3-15.5-28.7-24.1-25.3Zm42.5 1.6c0 .7 1.1.7 1.1 0s-1.1-.7-1.1 0Zm-199.9 10.9c5.4 11.9-8.6 12.5-12.6 18.1 1.8 1.5 3.4 1.7 6.3-.4 2.3-1.8 10.3-4.6 12.2-6.3 2.4-2.8-1.6-15.6-7-13.9l1.1 2.5Zm103.1 18.8c-.8 5.6-3.5 17.2-4.3 19.2.7 3.1 7.4-13 7.8-17 1-3.1.6-5.1-2.3-6.4-.3-.1-.9 1.8-1.2 4.2Zm43.7-1.2c.4 2.5.5 5.9-1.5 7.9-7.5-5.2-1.8-11.5 1.5-7.9Zm-262 5.6c-2 2.2-7.6 2.3-6.2 2.9 3.2 3.5 16.1-8.9 6.2-2.9Zm147.8 2.2c-4.4 1.2-38.5 6.4-18 10.6 3.4.2-.5 1.7-.8 2.8 0 .7 3.9 2.3 4.6 1.8 3.8-2.2 17.9-11.6 19.3-12.9 2.6-2.3-4.1-3-5.1-2.3Zm-166.2.5c1.3 1.5 6.2 2.3 6.1 5.5 2.6 7.6 4.1 13.4 2.9 24 0 10.6-9.4 14.5-8.2 23.2 1 5.6 9.4-15 11.1-15.9-.1-6.7.5-22.3-1.5-25.2-2.3-5.9-.9-8-7.5-11.2-1.9-.9-2.9-1-2.9-.4Zm-4.8.8c-16.7 6.3-4.3 20.7-8.4 30.7-4.6 6.3 2.2 6.4 1 13.5l-.2 4.4c8 1.1 9.9-4.8 13-13.7.7-2.1 1.9-4.9 2.9-6.2 5.3-7.5-7.8-11.9-13.4-10.1 0-2.9-.1-8.8.8-10.8 1.2-5.8 13.3-9.9 4.3-7.8Zm28.1 3c-9 6.6-6.9-3.2-9.9-.9-1.5 1 1.7 3.4 2.2 4.8 1.3 2.9 6.5 3.5 10.2 3.8-2.7 2.1-6 2.5-9.4 1.8 13.4 8.4 17.9-1.1 12.5 1.7-2.3 2.2-8.4 0-4.5-.7 2.2-.4 6.8-4.8 6.6-6.3-1.6-4.1-8.8 5.6-11.4 1.2-2.3-1.9-2.2-2.5.2-2.5 5 .8 11.7-8.3 3.5-2.9Zm136.8.3c-2.9 1.4-6.7 5.6-10.2 4.3-4.9-.9-4.3-1.7 2.7-3.5 3-.5 12.3-3.5 7.5-.8Zm-182.5 1.3c-.2.5-.7 2.5-1.2 4.5-1.4 5.9-.3 5.1 2.1-1.7 2-4.3.7-4.4-.9-2.8Zm-8.3.4c-3 9.7-5.3 17.7-4.7 20 1.5-2.4 11.3-24.7 4.7-20Zm-8.6 6.2c-.5 3.5-1 8.7-1.6 5.8 0-1.2-1.9-8.5-2.5-9.4-.5-.8 1-.3.5-1.1-3.6-1.9-3 .9-2.1 3.3 1.4 4.4 2 14.7 1.9 20.6-4.7-3.9-7.1-10.9-9.7-23.2-.1-.7-.6-1.2-1.1-1.2-3.4 3.2 4.5 24.1 9 24.8 2.5.7 2.3 5.8.1 2.9-9.1-7.3-3.6 6.4-.4 12.3 6.6 12-3 .9 3.8 13 1.5 2.9 2.7 5.3 2.6 5.4-1-.1-7.3-2.9-6.2-.6 0 .4 8.1 14.5 8.1 14.9-.7-.2-14.4-9.8-10.6-3.4 2.5 4.1 4.4 8.1 4 8.1-2.1-1.4-7.1-4.1-4.4.8.4.4.4.1.2-.8-.4-1.2 0-1 2.8 1.4 5 4.3 5.2 4.5 9.8 12.1 9.9 18.7 11 2.9 12.8 16.5-7.4-7.6-23-18.8-28-18.5-4.9.1.2 3.3 3.1 8 2.9 3.6 5.2 6.6 5.1 6.7-2-.8-13.3-6.5-13.8-4.1-.9.7-.6 1.2 4.7 6.2 3.9 3.7 5.3 5.3 4.3 5-6-1.6-8.8-2-11.6.7-.3.2 11.4 11.3 17.5 16.6-5.6-1.1-16.1-9.3-21.9-11.6-3 2.1 20.1 14.3 24.2 14.6 7.2 2.1 10.5 2.4 12.1 1.2.9-.7.8-.8-2-1.1-9.7.3-24.5-16.2-27.7-20.1 6.2-1.4 16.6 6.1 22.7 11.3 4.6 4.4 6 5.4 7.5 5.1 2.3-.8.7 3 3.1 2.6 1.1 0 1.4-.3 1.5-1.4 3.1-16.4 2.5 1.7-2.3 6.6 0 2.2-16.9.4-19.5-2-7.3-4.4-23.9-9.6-29.6-7.5 4.6 5 24.8 8.9 31.6 10.5 8.4 2.3 16.2 6 1.2 5.5-9.2.3-32.3-8.9-33.9-5.5 0 1.4 6.1 3.3 16.1 4.9 12.3 2 16.2 3 18.7 4.5 7.4 7.1-18.8 2.6-24.6-1.2-16.8-7.2-12.2-2.3 4.6 3.3 17.2 6.4-3.2 1.5-6.4.2-.6.8-14.2-5.6-5.8-3.6-1.9-1.3-8.3-4-5.8-1.3.4.4.3.8-.6 1.3-2.5 1.2 2.6 2.8-2.3 2.6-9.1.5 12.6 16.1 16.2 17 2.3 1 4.1 2.1 4.1 2.3-12.7 11.6-16.7-14.5-24.5-13.4-.8 6.1 15.8 15.7 10.7 21.2-1.2 2.2-3.3 3-5.3 2-4-.6-8.7-14.6-12-15.3-2.4-.1-6.2-5.1-5 1.1-.5 2.5 6.2 14.2 6.5 16.6-1.7 10.9-8-.8-11.9-11.1-1.7-4.5-2.2-6.1-5.1-6.3-1.7 2.5-.1 20.5 2.8 22.4 2.2 2.7 6.4 2.6 6.4-.1 0-1.9.5-2.1 2.3-.8 8.7 5.1 5.2-1.2 8.7-1.9 3.7 1.7 4.9.1 4.2-2.7-1-3.5-1.1-3.4 1.6-1.8 7.7 4.3 10.7-1 9.5-7.5 3.6 1.3 11 3.2 14.4.1 2.7-1.9 3-2 3-1.2-1.1 2.4-7.3 4.7-9.9 6-3.8 2.3-10.4 5.8-14.2 7.9 1.2-.2 3.8-.4 4.7-.7 1.8-.5 0 8 2.9 4.9 1.4-.2 0-5.5-1.2-5.4-1.6 0 1-1.4 4.5-2.4 4.4-1.3 3-1.7 7-4 1.6-.7 5.8-4.6 5.6-3.8-.7.9-.7 1.1 0 1.5 1.9 1.5 2.3-1 5.5-3.8 7-7 13.8-9.3 19.8-18.4 1.7-2.5 4.6-8.2 4.6-9.1 2.8-4.2 6-7.1 7.5-12.6 5.7-14.2 3.2-28.9.3-39.7 2-1-3.1-10.9-4.7-12.8-.4-.6-.4-.9.3-1.3 2.5-2-1-7-2.4-9.5-3.9-7.5-16.1-13.1-17.4-21.9-1.4-5.8 4.5 8 4.9 7.2 9.7 2-7.1-16.1-5.2-21.4 0-6.2.4-5.8 7.6 9 1.5 3 2.7 5.1 2.8 4.7-.1-1.4-5-18.1-9.1-19.2-.9 0-1.1-.9-.3-1.4 1.2-.8 2.6-8.3 3-17 .9-8.1-2.1-7-2.4.9Zm-22.3-3.7c-3.9 4.2 5.9 24.3 10.9 23.1 1.7.4 1.7.4.4-.5-3.9-2.1-10.5-20.2-9.8-21.9.4-1.1.2-1.2-1.5-.7Zm81 11.6c0 .7 4.6 2.8 6.1 2.8 1.1 0 1-.2-.7-.8-1.5 0-5.2-3.4-5.4-2Zm-23.9 1.2c4.9 2.6 6.3 5.5 4.1 8-1.7.9-4.9 15.9-7.6 17.4 1-10.9-2.5-5.6-2.3-12 .1-2.9 2.4-3.5 1.9-6.3-.8-3.5-2.3-10.8 3.9-7.1Zm164.5 2.8c-3.5 4-3.6 5.2 0 5.1 1.4.2 2.1-.5 4.2-4.2 1.4-2.5 1.5-2.6.4-3.2-1.6-.8-1.7-.7-4.6 2.3Zm-141.6 2.8c-2.5 2.3 3.1 6.7 5.1 7.1 1.2 0 1-.3-1.5-2.7-3.9-2.8-1.3-6.4-3.6-4.4Zm-.7 8.5c0 3 3.4 8.1 4.6 7 .7-1.3-2.9-4.7-2.7-6.4-.4-2.3-1.9-2.8-1.9-.6Zm-59.8 7.6c.4 3.4-2.5-4.9-.8-2.2.4.6.8 1.6.8 2.2Zm-65.2 5.1c-6 1.7-30.3 2.4-29.4 10.1 1.1.7 1.4.6 1.8-.4.2-1.5 6.4 0 7.3.1 6.6-.1 32.7-3.7 34.5-2.7 1.7.3 1.8.2 1.2-.8-3.2-5.6-11.7-4-18.1-4.9 3.7 0 18.3-.6 18.3.9.8.6 1.8.9 2.5.7 2.9-2.3-10.1-3.7-18.1-3Zm-5.7 2.6c0 .5-1.7.8-2 .3-.4-.7 2.1-.5 2-.3ZM838 344c-8.8 11.2-6.9 8.9-19.5 10.6-1.2.7-1.1.7 1.8 1.4 15.6 4.2 24.4-19.9 17.7-12Zm-123.9-1.4c-.2.4-2.3-.2-.7-.3.5 0 .9.1.7.3Zm10.6 1c-3.4 1-20.7 3.5-20.1 2.9 6-1.6 16.2-3.7 22.5-3.7l-2.4.8Zm69.6 6.7c2.4 1.2 17.2 19.6 13.1 19.7-2.9-5-11.1-9.6-13.8-15.7-2.9-5.6-2.7-6.7.7-4Zm-142.9.2c-1.5 1.4 14.4 4.4 11.6 4.9-2.8 0-18.9-5-10-1.3.4 1.3 20.3 3.7 17.4 5.8-.8.5-8 .2-8.8.9 0 .8 3.2 2.3 4.7 2.3 1.5-.2 5 2.6 6.2 2.8 2.3 0-2.1-4 .7-3.1 2.1 1.3 2.5 4.4 2.7 18.5 0 3 .9 8.2 2.3 4.7 2.1-7.5 1.6-20.7-5.7-26.2-.7-.6-.9-1-.5-1 .9 0 .9-1.7.1-1.7-1.4-.3-9.1-5.9-10.9-5.8-1.6 0-9.8-2.1-9.8-.8Zm78.1-.2c-7 2.2-18.5 3.6-25.6 4.3-2.2 2.4 12.1 1.8 8.8 4.4-.9 1.1-.4 1.8 1.9 2.5 3.1 1 12.5-2.5 12.5-4.7 0-1.1-1.8-1.2-3.6-.1-1.9 1.8-4.2-.8-1.7-1.2 2.7-.7 7.3-3 11-3.2 3.4-.3 4.1-.6 3.7-1.2-.6-.7-4.8-1.2-7-.8Zm-71.9 1.7c-.2.2-.7.2-1.1 0-1.1-.4 1.6-.5 1.1 0Zm134.2 6c3 1.2 18.8 30.6 19.4 28.3 1.6.3 2.6 6.3 2.5 6.6-3.3-5.5-11.9-15-15.8-20.4-4.7-8.8-13.2-19.8-6.1-14.5Zm-86.8 6.5c5.2 4.1 14 9.4 20 9.2-7.5-2.1-15.4-6.9-20.4-9.9-.4 0-.2.3.4.7Zm98.6 4.7c2.9 3.8 7.3 11.1 6.9 11.4-.4.4-2.6-2.6-6.8-9.3-4-6.4-4-7.2-.1-2.1Zm-11.5 3.4c7.8 5.8 12.5 15.1 17.2 22.5-7.9-5.4-15.8-14.7-21.3-24.7-.9-1.6-.5-1.4 4.1 2.2Zm-1.4 21c5.7 5.5 22.1 15.2 18.3 23.6-.7-.1-1.3-4.3-2.7-2.9-.1 1.4-7.2-5.1-7.3-4.8-3.2-4-30.1-31.9-8.3-15.9Zm-78.1 1c2.5 4 2.4 13.3-3 11.3-2.1-2.6-15.6 2.5-13.7 4.6 3.9-.4 5 1.4 10.5 1.3 4.4.1 5 0 7-1.4 13.2-7.7-6.2-25.7-.8-15.8Zm101.8 5.4c.4 9.8-2.2-2.4-4.8-4.2 1.2 0 3.5.1 4.7.2l.1 4Zm-22.4 7.3c5.8 4.9 10.8 9.6 14.7 14.4-.1 4.1-29.9-23-28.8-23 0-.8 9.1 4.7 14.1 8.6Zm-83.6-.5c-.5.9-3.8 2.1-5.6 2.1-4.9.3 7.7-3.8 5.6-2.1Zm10 7.2c-.4 3.7-1.2 17.3 3.8 16.9 2-.2 2.7 1.4 2.2 2.6.2 1.4-25.3 4.8-20.7 6.5 7.8 2.3 14.5-1.6 24.2-2.6 5.7-.1 4.5-3.8 9.3-2.5 2.5 1.5-6.4-13.3-6.3-16.5-.4-1.9-3.3-3-3-.2-.4 6-.7 17.4-2.4 3.2-1.3-9-1.2-8.8-2.8-8.8-1.4 0-1.4.1-1.4 5.1-.1 4.6-.1 4.9-.6 2.6-.6-1.5.7-10.8-2.3-6.3Zm-17.7 1.2c-1.7 1-8.1 18.3-1.4 18.5 1.5.4 3.7-6.4 4.6-8.4.2 1.8-.1 7.2 1.4 7.4 2.7 2.6 5.1-4.1 6.4-7.9.2 2 .3 6.5 2.3 6.3.6.1.7-.9.6-5.3-.2-11.6-.2-11.5-1.2-11.7-1.8-1-4.6 18.3-6.8 16.9-.2-.2.1-3.6.6-7.6.9-7 .8-8.9-.3-8.9-.4-1.3-8.5 21.7-7.7 14.9-.4-5 1.7-13.7 3.4-14.3 2.3-.9-1.1-1.2-1.9.1Zm-7.2 3.3c-2.6 2.9-5.3 13.5-2.2 16.6 1.3 1.3 1.9 1 1.3-.7-2.9-6 7.4-23.5.9-15.9Zm81.4 8.3c30.6 10.5-8.3 1.5-12.7-1.5-1-.9 7.3.1 12.7 1.5Zm-41.3 5.3c-6.2 3.6-3.8-1.3-3.3-5.6.8 1.1 3.3 4.9 3.3 5.6Zm37.5 4.7c7.4 2.1-8.5-.8-8-1.1-.5-.5 4.6.1 8 1.1Zm32.4-.8c9.2.2-17.3 26.8-16.7 23.3-.2-.5 4.2-5.1 2.5-5.3-1.4-2.4-3.6-3.4-6.7-4.7 9.1 1 22.7.3 7.3-7.1 4-.5 18.7.2 10.5-3.9-8.8-4.9.3-1.8 3.1-2.3Zm-46.7 7.6c3.5 3 13.7 4.5 18.1 9.1 4.5 4.2 3.5 5.2-3.2 3.1-6.1-2.3-9.9-4.5-15-8.8-4-2.9-2.9-5.7.1-3.4Zm6.2 1.2c1.6 1.2 2.6 1.4 1.7.3-.4-.7-4.5-2.2-1.7-.3Zm-37.1 3c-4.9 2.8-10.5 4.7-14.1 4.7-6.6 1.4 7.4 2.6 11 1.1 5.3-1.8 20.3-7 9.3-8.8-.5 0-3.3 1.4-6.2 3Zm29.6-.8c2.2 2.4 11.5 7.9 17 10.1 1.4.6 2.2 1.3 2.4 2.2.9 5.1-7 3.3-12 0-5.4-3.2-21.3-17.9-7.4-12.3Zm26.2 4.2c6.1.2.3 2.6-1.5 4.6-1.7-1.4-5.2-4.3-6.9-5.7 2.5.4 5.7.8 8.4 1.1Zm-28.5 7.5 1 1.8c-1.2-1.3-3.9-4.1-4.1-5.4-.7-2.4 2.7 2.9 3.1 3.6Zm31.1-2.5c-1 1.6-4.1 4.7-4.1 4.1 0-.2 1-1.6 2.3-3.3 2.3-2.9 3.6-3.6 1.8-.8Zm-6.4 2.9c-.4 2.6-3.9-1.6-1.1-.7.6.2 1.1.5 1.1.7Zm-61.7.9c-.9 2.4 1.4 20.5 6.5 21.8 1.5.7-2.7-5-2.6-6.3-.8-2.6-2.1-11.7-1.9-12.8.4-1.2-.5-6.8-2-2.7Zm23.2 4.2c2.3 6.5-1.2 1.9-2.1-2.9-.3-1.8-.3-1.8.4-.8.4.6 1.2 2.2 1.7 3.7Zm-9.8 8.8c1.6 5 2.5 6.8.6 9.2-3.3-1.2-8.9-36.2-.6-9.2Zm44.5-8.1c0 .3-1.1 1.1-1.1.3-.1-.6.9-.8 1.1-.3Zm-28.9 6.6c.9 2.8 1.2 4.5 1.1 6.6-3-2.3-2.5-5.5-3.5-8.8-2.1-5.5.4-3.6 2.4 2.2Zm-4.2-2.2c.4 1.3-.9.1-.8-.3.1-.8.5-.6.8.3Zm23.1 9.1c0 2.4.5 3.3 1.7 3 3.1-.6-1.6-7.6-1.7-3Zm-291.4 20.8c-1.5.3-2 2.9-1.5 4 1.9-.1 14.4 2 12.6-2.2 0-3.5-10-1.9-11.1-1.8Zm40.6 1.3c-6.2 4.7 5.5 4 10 5 2.7.2 2.7.1 3.4-1.9 3.2-4.8-11.9-3.3-13.4-3.1Zm-54.3 8.9c-6.8 4.9 2 15.2.5 8-.5-1.6-.9-3.3-1.2-4.9 18.6.4 33.5.9 51.5 1.4 20.6.9 25.5 1.8 40.2 8.5 3.9 3 4.1 3.2 8.2 10.2 5.8 10.3 23.6 35.5 30.1 43 8.6 10.4 10.3 14.7 7.1 18-2.5 2.6-.5 1.7 2.5-1.1 7.1-5.6-1.5-12.3-4.9-17.5 1.9.2 18.4-12.3 13.1-11.8-3.8 1.4-9.2 8-13.6 11.1-2.5-3.8-14.2-19.9-17.2-25.9-.4-.2 11.8-10.8 11.6-10.9 0-1.6-9.5 4.8-11.4 7.8-2.5 3.8-3.2-1.5-9.9-12.5-3.5-6.3-10-18.1-12.9-16.6-.7.9-.8.9-1.9-.6-7.3-6.6-11.3-3.7-27.1-4.5-19.7.3-47.3-2.7-60.4-3-2.6.1-3.4.3-4.3 1.3Zm22.2 6.1c-4.4 2.4-10.8 10.8-13.1 14.8-1.1.7.2 2 3 2.9.5 1.4 17 .1 16.5 1.7-.3.9 2.4 4.3 1 4.7-1.1.7-7.9-.1-8.4-1-.6-1-2.5-1-3.4 0-1.3 1.3-3.6.4-4.6-1.6-1.6-2.8-6.4-4.9-3.9.6.6 1.3 3.2 2.5 5.4 2.5 1.5.9-1.7 1.3-5.4.6-16.8-3.9-19.4 14.5-3.3 17.4 7.1 2.3 5.5 5 15.9 5 6.5.7 9.1-1 13.1-3.2 2.1-1.7-4.5-2.2-6.9-.5-4.3 2.7-10.4 4.2-13.5-.4 3.8.2 9.5-4 6.6-6.6-5.1-2.4-15.4-5.3-13.7 4.9-3-1.2-6.8-4-6.6-7 .8-7.6 2.4-9.6 11.5-7.8 8.8 1.1 5.5-3.6 20.4-.9 4.3 1.1 6.1-3.7 9.5-5.6 2.7-2.1 7.1-7.5 7.6-9.2.5-1.4-2.6-6.5-2.5-7.8-1.9-5.6-11.2-2.3-16.4-1.9-8.6.7-9.6 5-1.7 2.7 1.5-.8 9.4-1.4 11.1-1.9 5.9-1.5-12.3 14.4-12.9 14.5-.3.4-15.9.9-15.2-.4-1.8-2.8 20.2-21.1 9.9-16.5Zm22.7 9c-.2 5.1-6.5 9.4-10.8 13-.7-3.6-4.3-2.8-1.2-4.5 1.7 0 11.7-13.3 12-8.5Zm63.2.2c-3 2.2-3.9 1.6.5 7.1 3.6 3.9 5.7 10.8 9.7 4.7 2.4-4.5-6.1-14.3-10.2-11.8Zm-25.2 1.5c-3.9.1-4.6 2.2-7.3 2.9-1.7 0-4.9 1.5-5.2 2.5-.6 1.5.3 1.6 1.5.1 1-1.2 1.6-1.5 3.9-1.5 2.9-1.6 13.9 10.5 11.1 12.2-.3.3-.7-.1-.9-1.2-.5-3.6-9.6-11-13.1-8.4 2.8 2.2 9.5 7.1 9.8 9.9 2.1 8.4-12.1-4.3-12-7.3 0-1.5-1-1.9-2.1-.8-3.4 5.8 8.9 14.3 12.8 12.3 1.7-.3 7.9-4.5 8.8-6 1.7-1.5-2.2-6.2-1.3-8 1.2-3.4-1.8-7.6-6-6.7Zm.3 2c3.3 2.5-3.5.4-3.3-.4.7-.6 2.2-.4 3.3.4Zm9.3 21.8c-6.8 2.5-2.6 9.3.8 12.6 1.2 1 5.2.9 7.8-.2 9.9-4-1.1-17.3-8.6-12.4Zm5.9 2.2c1.3 1.3 3.1 5.5 2.6 6-.9-.7-3.9-5.3-5.7-5.4-4.1-.9 1.5-3.6 3.1-.6Zm-82.1 1c.2 1.2-1.5 2.9-2.4 3.7-.8-2.4 1.2-7.8 2.4-3.7Zm79 3.3c1.7 2.7 2 3.7 1.5 4.5-1.4 1.7-5.9-11-1.5-4.5Zm35.8-1.6c-4.8.6-3.1 5.7.4 5.8 4.9.4 4.5-7.2-.4-5.8Zm29.7 1.4c-2.8 2.8 7.6 11.8 8.9 11.9 1.2 0 3.5-1.8 3.5-2.7-.5-2.1-3.4 2.9-4.7-.3-2.3-1.7-4.7-11.9-7.7-8.9Zm22.2 18c-2.1 4.1-3.2 6.3-4.2 9.4 2.8-1.5 7.1-8.2 8-11.1.2-3.7-1-4.3-3.8 1.7ZM550.9 588c-3.3 6.4-7.6 21.1-10.7 27.1-6.1-.2-14.2-.3-16.7 3.9-4.5 4.9-5 11.4-1 13.2 7.6 2.6 12.9.5 17.9-7.7 7.9-15.9 6.8 8 30.8 10.2 3.3.6 6.3-.6 7.9-2.4-1.2-1.3-4.6-2.2-6.4-.6-8.2 5.7-16.8-8.9-24.3-13.2-2.5-1.2-3.5-2-3.1-2.4 1.5-1.9 6.3-18.1 7.2-22.2 3.9-2.5 11.3 5.1 13.9 8.2 1.6 2.3-.8 3-2.8 3.5-1.6.2-2.5-.1-5.8-2.2-8.6-6.2-3.9 1.1 2.8 5 1.7.9 1.9.9 3.7-.1 6.8-4.8 2.4-9.4-3.7-14-6.8-6.4-8.7 2.8-8.1-3.9.1-2.8-.2-3.3-1.6-2.4Zm81 6c-.8.6-.7 7.8.1 7.8 3.4 0 5.6-10.4-.1-7.8Zm-23.7 13.4c-.6 2.5-5 16-.7 17 .2.1 2.4-18.8.7-17Zm-5.3 3.4c-.5 3.5-3.3 12.1 0 12.6 2.1 2.3 2.9-19.8 0-12.6Zm8.3 4.8c.3 1.1-1 4.3-.1 3.6 1.3-1.3.7-9.6.1-3.6Zm-72.1 2.1c-17.2 30.6-20.6-.7-1.9-.9 2.5-.1 2.6 0 1.9.9Zm44.7 2.3c.4 2.5 23 11.8 27.7 13.1-1.6 11.2 4.3 24.4 15.1 27.2 7.5 1.7 11.1 19 18.8 19.3 2 0 2.5-.8.8-1.3-.6-.2-2.6-2.5-4.6-5.1-5.5-7.2-5.6-7.6-4.8-8.9.5-5.7-12-6.6-15.5-11.5-5.9-5.3-7.9-12.4-8.3-18.6.3-.3 8.2 1.4 9.4 2 2.9 1.5 3.8-1.6 1-3.3-5.6-2-13.7-3.8-19.5-5.9-5.5-1.1-16.2-8.4-20.1-7Zm52.7 3.7c1.7 6.5 33.1 10.2 37.5 6.3-8.6-.2-30.3-5.2-37.5-6.3Zm3.7 34.1c-1.1 5.5 24 8.8 26.7 5.7 2.9-1.4 5.4-4.2 3.2-3.5-9.4 2.2-14.4.7-27.2-2.1-2.1-.8-2.4-.8-2.7-.1Zm-47.9 7.5c-3 .4-4.8.8-6.9 1.5 7 1.3 12.9-.7 22.2-.2 6.7 0 9.6.2 12.2-.6-2.8-1.7-20.9-1.3-27.5-.7Zm76.4 7.3c-.9.9-17.5 1.7-19.5.9-2.3-.9-2 .7.5 2.2 2.7 2.9 20.9-.4 19-3.1Zm-65.3 8.8c-.7.4-33.1.9-33.8 1.4-4.3.9 7.3 1.3 25.8.9 18.9-1.2 34.9 1.5 28.9-1.4-1.8-.6-20.4-1.4-20.9-.9Zm-28.9 13.7c-1.2 3.3 68.5 4 70 3.1 14.3.8 33.1 1 49.4.6 7.4-.4 16.3.7 13.4-1.8-1.3-1-4.8-1.1-28.8-.8-29 .6-85-2.6-104-1.1Zm5.8 7.3c-2.8.9-3.3 1.6-4.8 1.9-.9-.4 2.5-1.7.6-1.9-2.9-.7-5 3.9-7.1 5.6-9.1 8.7-4.6 9.4 4.3 15.5 7.1 5.7 26.2 7.5 37 7.5 12-5 23.3-15.3 35.5-16.7 3.8-.4-2.2 7.9 10.2 8.3 8.9 2.1 10-14.8 14.3-7.6 1.8 4.2 8.2 9.7 12.3 5.1 2.5-2.5 3.1-6.7 7.1-6.9 3.5.8 4.8 8.9 11.2 7.5 4.6.7 5.5-5.9 8.2-8.1.5-.6 14.3-1.7 14.8-1.9 0-.3-2.2-3.1-2.8-3.8-24.7.8-12.9 2.5-22.4 9.4-4.5 1.5-2.9-4-8-6.3-3.8-1.7-9.9-.8-11.1 3.9-.4 2.3-5.9 5.4-5.5 2 0-2-3.9-5.9-6.6-6.7-7-3.4-7.7 8.9-13.1 9.4-2.4.2-2.8 0-2.8-2-7-17.9-35 6.2-46.2 10.8-13.2.2-26.5-.6-37-8.3-4.8-1.4 2.5-8.3 4.6-10.4 13 3.9 14.8 3.9 47.8 5.6 3.2.1 4.1-.3 2.9-1.5-.3-1.2-23.7-2.5-31.5-2.8-6.1-.3-16.6-1.9-16.6-2.4-.8-.3 15.7-7.4 10.2-6.6-1 .2-3.6.7-5.5 1.4Zm120.5 23.8c-.4.4-10.6.8-48.1 1.9-18.4.5-20.4.8-27 4.1-5.9 2.1-13.4 14.2-14.5 17.1 0 1.1-.1 1.1-6.4 0-8-1.4-9.9-1.4-7.9.2 1.4 1.5 16.6 3.4 20.4 4.9 1.7 1.4 4-.2 2.3 3.4-1.2 3.1-1.6 19.5-2.6 23.2-3.1 14.8-.9 24.4.5 37.3.6 11.1 3.2 15.1 12.6 19.8 7.3 3.6 11.7 4.1 22.7 2.9 9.7-1.1 15.1-2.6 17.1-4.7 4.8-1.9 3.8-49.5 4.7-48.5 16 1 44.2 8 62.1 10.1 27.9 3.3 58.1 12 85.7 13.1.7-1.8.4-3.5-2.7-3.6-5.7-.8-9.6-1.6-17-2.3-21.6-3.2-52.1-9.5-71.9-12.3.1-3.6 3.8-10.7 4.8-14.5 20.1 2.7 45 7.5 65 10.6 2.3.9 2.1.3-.8-2 .2-2.6-23.2-5.1-25.3-6.3-.6-3.8-.8-16.9-2.7-18.6-.6-.6-.6-.1-.1 2.7.8 4.6.6 10.7-.3 15.5-28.3-2.9-65-13.1-96-16.7-2.7-.2-1-8.7-3-8.1-.9.3-1-.1-1-5.1.6-7.9-4.3-14.4-13.4-14.3-7-.2-35.2 15.7-36.7 19-9.3-6-9.6-2.8-1.7-11.2 6.6-12.1 34-12.1 53.9-12.7 14.6-.8 26.4-2 43.5-2.2 16-.1 19.5-.6 17.2-2.3-5.9-.9-29.8-.5-33.4-.4ZM557 728.1c-2.9.8-4.3 2.2-7.6 3.4-9 3.9 4.6 2.1 7.2-.4 5.8-4 23.5 2.4 27.8 4.3 1.5.4 2.2 3.1 3.5 3.3.4-.1.5.1.3.4.2 1 5.5 9.7 5.8 12.2 5.1 14.9 5.6 12 5.8 37.4 0 3.9.2 4.7.9 4.9 1.2.2 1.7-4.9 1.4-15.3-.5-19.1-3.2-23.5-10.6-36.8-2.6-5-2.8-5.2-6.6-7.2-4.6-2.2-19.5-8.2-27.9-6.2Zm181 1.6c-.1.6 1.3.8.8 0-.3-.6-.7-.8-.8 0Zm-73.8 9.2c4.6.2 2.5 18.3 2.2 21.8-11.9 1.2-25.8-9.2-35.1-.1-3.4 4-5.4 8-2.5 13.4 2.2 3.6 4.6 9.1 9.2 8.6 7 .6 5.9 2.8 16 2.2 7.2-.2 8.9.6 13.5 1.1 3.9 0 4.1.8 2.9 9.9-1 7.2.7 39.6-5.4 38.8-11.6 4-45.6 9.6-43.3-12.5 0-4.4-.3-6.5-1.6-12.5-2.1-15.1 1.4-24.6 1.1-38.8.6-11.8-1.7-12.9 5-16.3 4.3-1.7 29.1-16.8 38-15.6Zm-110.1 2c-2.7.9.4 1.5 2.9 3.7 9.1 6.3 17.5 17.2 19.8 29.4 2.9 10.1-1.1 5.7-5.8 4.2-3.3 1-8.1 3.8-10.4 5.6.1-15-1.1-33-16.5-39.1-4.8-1.2-5.2-1.3-4.8-.7.2.3 1.1.6 1.9.6 1.5 0 2.8.9 8.3 6.2 6.9 5.2 8.2 21.4 9.1 31.6 1.7 5.6-5.2 13.2-7.9 18.4-2.2 2-14.8 28.4-11 13 5.8-25 3.5-60.5-21.8-70.2-6.9.6-31.2-1.4-31.5-.1 19.2 20.3 18 67.2 9.8 89.1-2.2 8.8-5.9 13 .6 10.8 4.7 1.5 14.9-32.5 18.4-31.3 0 .2.4.1.8-.3 1.6-1.1.5 1.1 0 2.4-2.3 5.4.7 11 6.3 11.8 1.9.3 2.3.5 1.9 1.2-.8 1.9-2.6 7.4-5.5 17.4-4.4 13.9-6.3 21.9-13.5 13.6-1.2-2.2-7.8-5.6-7.8-3.9-.5 2 8 7.9 10 9.3.2.3-10.8 5.8-10.5 6.1 4.1 3.7 20-6 19.1-7.1 2.8-5.8 6.7-14.3 10.5-20.2 7-10.7 17.4-21.4 22.3-31.6 4.3-8.4 6.9-12.6 11.1-19.8 2.5-4.2 3.6-6.4 2.6-1.2-3.2 9 4.9 16.3 10.7 10.5 4.7-3.2 5-20.4-.6-6.8-8.6 20.3-8.8-10.8-1.5-12.8 4-2.1 7 1.8 8.4 4.9 2.6-15.3-3.4-31.9-16.2-41.3-1.6-1.1-1.8-1.4-.8-1.1 18.3 6.4 27.4 26.8 26.6 46.2-.2 12.2 1.2 7.3 2.1.1 3.5-20.7-12.7-53.8-37.1-48.6ZM453 743.5c12.6 12.7 15.9 17.2 20.3 35.8 1.8 17.2 2.4 39.5-7.8 53.6-7.1 11.6 6-2.3 6.5-6.5 10.4-23.8 8.9-72-19-82.9Zm59.3 1.5c5.3.2 9.2.6 9.6 1 2.5 2 11.7 14.8 11.7 16.3-5 .7-24.3-1.2-33-.8-.5-1.1-2.6-4.7-2-5.4 5.3-.4 30.6 1.6 30.3.1-3.8-2.2-24-1.4-31.2-1.7-1.2-2.3-6.1-7.1-.7-5.8 2.8.3 14.6 1.4 17.3 1.8 9 1.3 16.7.5 3.9-1.4-7.9-2.5-24.1.3-28.5-4.2 1.2-2.1 17.5.5 22.6.1Zm-81.9 5.8c-1.8.6-2.2 1.8 0 .7 7.1-3.6 20.3 7.6 21.8 14.4 3.7 8.1 8.7 61.4-3.2 66.7-3.6 2.6-9.4 4.8-10.7 4.1-.8-.4-1-.4-.7.3.5 1.2 2.7.8 7.9-1.4 16.7-8.3 14.1-15 15.3-38.6-.8-20.3 1.2-27.4-9-39.4-5.4-5.1-14.9-8.9-21.4-6.8Zm-.1 9.3c-11.8 6.1-10.2 22.9-11.5 35.2-1.5 17.6 8.5 35.7 26.2 28.2 6.6-9.1 8.2-13.5 7.6-30.4-1.3-18.5.8-24-10-30.3-4.3-1.7-7.7-4.3-12.3-2.7Zm6.4 1.8c2.3 2.6 6.8 4.4 7.9 8.9 1.2 2.9 3.3 13 1.5 11.3 0-.8-.1-1.1-.8-4.9-.6-3.6-2-4.1-4.5-3.9.5-2.5 2.6-6.7-1.4-6.1-2.9-.3-.2-2-4.8-1.7-4.1-.7-4.3 2.4-6.2 3.9-1.6-1.8 5.7-13 8.3-7.5Zm209.4-1c13.5.5 11.1 14.9 1.5 19.9-2.6 1.2-2.7 1.2-6 .4-3.6-1.4-5.8.8-8.3-1.8-9-7.8 2.9-22.7 12.8-18.5Zm-8.9 1.8c-7.9 2.9-3.2 20.2 5.2 15.9 4.4-2 5.1-3 5-7.7-.1-4.1-.9-6.7-2-6.1-.3-3-3.9-5.2-8.2-2.1Zm19.1.1c18.4 3.7 45.1 7.6 66 12.4 5.2 1.3 8.2 1.1 10.2 2.5-.8 1.8-4.1 8.2-4.5 10.7-.7 3-1 3.3-3 3.2-5.8-.6-15.4-1.8-20.8-2.9-12.9-3.2-24.4-4.9-38.2-6.6-5.9-1.6-14.9.3-12.9-1 2.3-3.2 3.7-3.8 3.6-9.6 1.2-5.3-5-10.9-.4-8.7Zm-136.2 1.3c8.4.2 12.4.2 12.6-.2.8-1.2 1.4-.4 2.7 3.7 5.9 19.1 6.1 50.4-7.5 67-2.9 5.6-1.9 2.2-1.3-3 1-8.5 6.5-13.3 3.8-21.2-2.6 3.2-3.8 9.7-6.6 12.9-3.6 4.6-4.8-3.2-4.9-6.3.1-3.3 1.4-8.7 2.2-9.2.3-.2 0-.4-.7-.4-2.5 0-2.1 4.8-5 1.5-.8-1.7-8.2-1.2-10.9-1.2.1-1.4.3-4.3.4-5.7 7.8 0 25.7 2.8 32 1.1.8-.9-26.3-2.2-31.4-2.6-.9-.2-.7-4.5-.7-5.8 8.1-.7 24.6 3.7 32 1.5.6-.7.1-.9-3.9-1.2-5.8-.5-23.8-2.9-27-1.7-2 1.6-.7-5.7-.8-7.2 43.2 1.4 41.6-1.6-.1-2-1.5-8.2-.6-5.7 9.7-5.8 26 1.3 32.4-1.7 2-1.8-13.9-.7-12.3 2-13.8-6.7l9.8.4c17.4.8 23.9.6 22.7-.7 1.2-.9-29.2-1.1-32.6-1.7-.4-.4-1.6-4.5-1.3-4.8 4.5.3 9.5 1 18.6 1.1Zm124.9 4.3c1.2 2.7-8 10.4-9.5 6.2-2.8-4.3 8.7-16.3 9.5-6.2Zm-218 16.7c.6 1.8-.7 3.4.5 3.6 2.2 1.3 1.2 6.2 4.2 5.5 2.3.3 1.7-1.8 3.2-2.3 1.4-.3 1.8-5.8 3.6-5.5 2.9-.4.4 3 4.8 2.3 5.5.9 2-5.5 3.5-4.5.7-.2 1.8 16.7 0 15.3-.7 1.3-10.9 2.3-10.2 4.4 0 1.6-1.1 1.8-1.5.2-.2-.9-.8-1.1-2.4-1.1-7.9-.4-2.6 16 4.7 13.8-1.8.7-4.3 2.7-2.3 4.3.5 1.6 9.2-2.1 6.1 1-3.7 3.1-9.5-.3-12.1-6.1-4.4-1.6-5.1-42.7-2.1-30.9Zm152.8 13.1c-9.8 16.3-20.2 41.8-30.3 55.2-.5 2.3-18.7 21.4-14.4 20.7 5.9-3.2 18.9-20.1 22.3-25.8 0-1.2 9.3-18.7 13.6-25.5 1.1-.2 18.8-39.5 8.8-24.6Zm12.1.1c-2.2 3.5-5.6 11.5-3 15.3 4.4 4.3 13.1 3.6 14.5-5 1.9-6.2.8-8.4-3.6-.3-2.1 3.5-5 8.7-7.5 6.1-1.1-1.3-.4-9.8 1.1-13.5 1.5-3.3 1.8-6.7-1.5-2.6ZM769.4 809c4.3 38.5-15.5 36.2-45.2 38.4-18.4 1.6-16 2.2-38.8 2.3-24.1-.1-31.3 2.5-52.8 1.1-5.8-.4-6.7-.6-8-1.8-1.2-1.1-1.3-1.2-.3-.7 2.1 1 2.1.7.2-1.2-3.4-3.3-7.2-9.2-7.2-11.2.1-2.3-1.1-1.9-1.1-4.1-.4-4-2.6.3-2.4 3.6-.7 4.6 6.6 10.6 10.4 14.5 3 3.1 3.5 3.3 7.9 3.7 9.1.9 13.4 3.1 23.6 1.5 15.4-1.2 66.2-2.4 76.2-4.3 29.4-1.5 43.1-3.4 39.5-40.6.1-7-2.7-7.6-2-1.2Zm-256.3-.1c-1.2 1.9-7.6 7.2-9.3 3.9-1.4-5.7 6.7-4.9 9.3-3.9Zm-66.7 2.2c-.4 2.5-1 3.2-1.9 5.4-3.3 6.9 3.1-13.9 1.9-5.4Zm113.3-1.5c1.1.8 2.4.3 3.3 1.4.8 1 1.7 1.1 1.7.3.6-.6-6-2.8-5-1.7Zm-53.2 5.9c-.3 2.2-5.2 7-3 .4.2-.7 3-1.1 3-.4Zm-3.4 5.9c0 .4-.4 1.3-.8 2.1-1.9 3.3.1-5.3.8-2.1Zm92.5 3c-12 14.1-18.5 36.3-34.5 50.3-5.9 6-12.3 15.2-4.3 10.2 7.9-10.6 15.7-17.5 22.7-27.9 4.4-6 15.2-31.8 13.5-22.8-1.7 12.2 16.3 4.6 14.9-3.9 0-1.7-.2-1.9-1.2-1.8-2.3 1.1-4.1 9.8-7.8 10.7-3.5 1.1-3.6-5.2-.1-11.1 3-5.4 2.1-1.1 3.2-2.4-.2-3.4-4.3-1-5.9 2-.6 1-1.3 1.8-1.6 1.8-1.5-.4 9.8-12.1 1.1-5.1Zm-15.4-.6c-.6 1.5 5.2 3.1 5.5 2-1.2-.7-5-3.2-5.5-2Zm-67.6 5.7c.4.4 3.3 1 1.7 0-.5-.4-3.4-1-1.7 0Zm3.4 1.6c.8 1.2 1.3 1.4 1.8.6.4-1-3.6-2.8-1.8-.6Zm74.1 17.9c-.5 2.6 3.6 4.6 4.7 3 0-1.3-2.1 1.6-2.6-2.4-.7-3-2.1-3.4-2.1-.6Z\", fill: \"#1E1919\" }))));\n};\n","import {useCallback} from 'react';\n\nimport {useAtom, useAtomValue} from 'jotai';\nimport {defineMessages, FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Modal} from '@dropbox/dig-components/modal';\nimport {Text, Title} from '@dropbox/dig-components/typography';\nimport {TeamFilmmakersHero} from '@dropbox/dig-illustrations/hero/team-filmmakers';\n\nimport {Button} from '~/components/button';\nimport {useViewport} from '~/components/viewport_context';\nimport {useOnboardingChecklist} from '~/lib/onboarding_v2/use_onboarding_checklist';\nimport {useLoggingClient} from '~/lib/use_logging_client';\nimport {\n  isWelcomeModalOpenAtom,\n  ONBOARDING_OPEN_SOURCE,\n  ONBOARDING_TYPE,\n  onboardingTypeAtom,\n} from '~/state/onboarding_v2';\nimport {showProToolsConnectionUIAtom} from '~/state/pro_tools';\n\nconst intlMessages = defineMessages({\n  modalTitle: {\n    defaultMessage: 'Get to know Dropbox Replay',\n    id: 'O0s/n3',\n    description: 'Modal title of onboarding modal for Dropbox Replay',\n  },\n  modalBody: {\n    defaultMessage:\n      'Learn all about Dropbox Replay and its unique features with an interactive experience.',\n    id: 'RU3ZDi',\n    description:\n      'Description that gives an intro about the onboarding experience with a warning about volume',\n  },\n  modalBodyWithWarning: {\n    defaultMessage:\n      'Learn all about Dropbox Replay and its unique features with an interactive video experience. The video will automatically start, but it may take a moment to load.',\n    id: 'IIo6jJ',\n    description:\n      'Description that gives an intro about the onboarding experience with a warning about volume',\n  },\n  dismissCopy: {\n    defaultMessage: 'Dismiss',\n    id: 'tAmLxE',\n    description: 'Button to exit the onboarding experience',\n  },\n  startCopy: {\n    defaultMessage: 'Start',\n    id: 'YeGUhR',\n    description: 'Button to start the onboarding experience',\n  },\n});\n\nconst ModalHeader = styled(Modal.Header)`\n  padding-top: var(--spacing__unit--4);\n  padding-bottom: var(--spacing__unit--2);\n`;\n\nconst ModalTitle = styled(Title)`\n  margin: 0;\n`;\n\nconst IllustrationContainer = styled.div`\n  background-color: var(--dig-color__background__raised);\n  max-width: 100%;\n\n  & svg {\n    max-width: 100%;\n    max-height: 338px;\n    color: var(--dig-color__text__base);\n  }\n`;\n\nconst StartButton = styled(Button)`\n  // override to keep the blue\n  &.start-button {\n    background-color: rgb(48, 128, 255);\n    color: var(--dig-color__text__base);\n  }\n\n  &:hover.start-button {\n    color: var(--dig-color__primary-cta__on-base);\n  }\n`;\n\ntype OnboardingWelcomeProps = {\n  // This is optional because we need this specific for video. Videos have an extra step to play when\n  // pressing 'Start' in the modal. Images don't need to play anything.\n  handleOnStart?: () => void;\n};\n\nconst OnboardingWelcome = ({handleOnStart = () => {}}: OnboardingWelcomeProps) => {\n  // eslint-disable-next-line deprecation/deprecation\n  const {isSmallScreenSize} = useViewport();\n  const loggingClient = useLoggingClient();\n  const {handleToggleChecklist} = useOnboardingChecklist({\n    // eslint-disable-next-line deprecation/deprecation\n    logEvent: loggingClient.logEvent.bind(loggingClient),\n  });\n  const [isWelcomeModalOpen, setIsWelcomeModalOpen] = useAtom(isWelcomeModalOpenAtom);\n  const onboardingType = useAtomValue(onboardingTypeAtom) as ONBOARDING_TYPE;\n  const showProToolsConnectionUI = useAtomValue(showProToolsConnectionUIAtom);\n\n  const handleOnRequestClose = useCallback(() => {\n    // eslint-disable-next-line deprecation/deprecation\n    loggingClient.logEvent('dismiss_onboarding_welcome_modal', {\n      onboarding_type: onboardingType,\n    });\n    setIsWelcomeModalOpen(false);\n  }, [onboardingType, setIsWelcomeModalOpen, loggingClient]);\n\n  const handleOnStartOnboarding = () => {\n    // eslint-disable-next-line deprecation/deprecation\n    loggingClient.logEvent('start_onboarding_welcome_modal', {\n      onboarding_type: onboardingType,\n    });\n    setIsWelcomeModalOpen(false);\n\n    if (onboardingType !== ONBOARDING_TYPE.IMAGE_WITH_FILE) {\n      handleToggleChecklist(ONBOARDING_OPEN_SOURCE.WELCOME_MODAL);\n    }\n\n    handleOnStart();\n  };\n\n  return (\n    <Modal\n      isCentered\n      open={isWelcomeModalOpen && !showProToolsConnectionUI && !isSmallScreenSize}\n      shouldCloseOnOverlayClick={false}\n      width={600}\n    >\n      <IllustrationContainer>\n        <TeamFilmmakersHero aspectRatio=\"16:9\" />\n      </IllustrationContainer>\n      <ModalHeader hasBottomSpacing=\"title-small\">\n        <ModalTitle size=\"medium\">\n          <FormattedMessage {...intlMessages.modalTitle} />\n        </ModalTitle>\n      </ModalHeader>\n      <Modal.Body>\n        <Text>\n          <FormattedMessage\n            {...(onboardingType === ONBOARDING_TYPE.VIDEO_WITHOUT_FILE\n              ? intlMessages.modalBodyWithWarning\n              : intlMessages.modalBody)}\n          />\n        </Text>\n      </Modal.Body>\n      <Modal.Footer>\n        <Button inverse={false} onClick={handleOnRequestClose} variant=\"opacity\">\n          <FormattedMessage {...intlMessages.dismissCopy} />\n        </Button>\n        <StartButton className=\"start-button\" onClick={handleOnStartOnboarding} variant=\"primary\">\n          <FormattedMessage {...intlMessages.startCopy} />\n        </StartButton>\n      </Modal.Footer>\n    </Modal>\n  );\n};\n\nexport {OnboardingWelcome};\n","import {useAtomValue} from 'jotai';\n\nimport {OnboardingWelcome} from '~/components/onboarding_v2/onboarding_welcome';\nimport {useOnboardingChecklist} from '~/lib/onboarding_v2/use_onboarding_checklist';\nimport {useLoggingClient} from '~/lib/use_logging_client';\nimport {useVideoViewerContext} from '~/pages/viewer_page/video_viewer_context';\nimport {ONBOARDING_TYPE, onboardingTypeAtom, STEPS} from '~/state/onboarding_v2';\n\nconst OnboardingWelcomeForVideo = () => {\n  const {videoPlayerInstance} = useVideoViewerContext();\n  const loggingClient = useLoggingClient();\n  const {handleCompleteStep} = useOnboardingChecklist({\n    // eslint-disable-next-line deprecation/deprecation\n    logEvent: loggingClient.logEvent.bind(loggingClient),\n  });\n  const onboardingType = useAtomValue(onboardingTypeAtom) as ONBOARDING_TYPE;\n\n  // if a user clicks Start and they're on the demo video, play the video\n  const handlePlayVideo = () => {\n    if (onboardingType === ONBOARDING_TYPE.VIDEO_WITHOUT_FILE) {\n      if (videoPlayerInstance) {\n        videoPlayerInstance.play();\n        handleCompleteStep(STEPS.VIEW_FILE);\n      }\n    }\n  };\n\n  return <OnboardingWelcome handleOnStart={handlePlayVideo} />;\n};\n\nexport {OnboardingWelcomeForVideo};\n","import React from 'react';\n\nimport {useIntl} from 'react-intl';\nimport type {IntlShape} from 'react-intl';\n\nimport {Banner, type BannerProps} from '@dropbox/dig-components/banner';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {InfoLine, WarningLine} from '@dropbox/dig-icons/assets';\n\nimport {Button} from '~/components/button';\nimport {\n  DueDateTimeframe,\n  getDueDateTimeframe,\n  getHoursToDueDate,\n} from '~/components/due_date/due_date_utils';\n\nconst getDueDateText = (intl: IntlShape, dueDate?: Date) => {\n  if (!dueDate) {\n    return;\n  }\n\n  const dueDateTimeframe = getDueDateTimeframe(dueDate);\n  const dueDateTime = intl.formatTime(dueDate.getTime(), {hour: 'numeric'});\n  const hoursToDueDate = getHoursToDueDate(dueDate);\n\n  switch (dueDateTimeframe) {\n    case DueDateTimeframe.OVERDUE_MORE_THAN_2_DAYS:\n    case DueDateTimeframe.OVERDUE_LESS_THAN_2_DAYS:\n      return intl.formatMessage({\n        defaultMessage: 'Feedback is overdue. Consider disabling the due date for this file.',\n        id: 'v5+aAV',\n        description: 'Text that is shown when the due date to give feedback has passed.',\n      });\n    case DueDateTimeframe.WITHIN_5_HOURS:\n      return intl.formatMessage(\n        {\n          defaultMessage: 'Feedback due in {hours} {hours, plural, one{hour} other{hours}}.',\n          id: 'nNwWQp',\n          description: 'Text that is shown when the due date is within 5 hours.',\n        },\n        {\n          hours: hoursToDueDate,\n        },\n      );\n    case DueDateTimeframe.TODAY:\n      return intl.formatMessage(\n        {\n          defaultMessage: 'Feedback due today by {time}.',\n          id: 'fGEt99',\n          description: 'Text that is shown when the due date to give feedback is today.',\n        },\n        {\n          time: dueDateTime,\n        },\n      );\n    case DueDateTimeframe.TOMORROW:\n      return intl.formatMessage(\n        {\n          defaultMessage: 'Feedback due tomorrow by {time}.',\n          id: 'UySjct',\n          description: 'Text that is shown when the due date to give feedback is tomorrow.',\n        },\n        {\n          time: dueDateTime,\n        },\n      );\n    case DueDateTimeframe.FUTURE:\n      const dueDateDay = intl.formatDate(dueDate, {month: 'short', day: 'numeric'});\n      return intl.formatMessage(\n        {\n          defaultMessage: 'Feedback due on {date}.',\n          id: 'kXa71C',\n          description: 'Text that shows what day feedback on a file is due.',\n        },\n        {\n          date: dueDateDay,\n        },\n      );\n  }\n};\n\ntype DueDateBannerProps = {\n  editable: Boolean;\n  isLoading: boolean;\n  onRequestClose: () => void;\n  dueDate?: Date;\n  isImage?: boolean;\n  onClick?: () => void;\n};\n\nexport const DueDateBanner: React.FC<DueDateBannerProps> = (props) => {\n  const {editable, isLoading, dueDate, onClick, onRequestClose} = props;\n  const intl = useIntl();\n  const [bannerProps, setBannerProps] = React.useState<BannerProps>();\n  const dueDateTimeframe = dueDate ? getDueDateTimeframe(dueDate) : '';\n  const dueDateText = getDueDateText(intl, dueDate);\n\n  const withCloseButtonText = intl.formatMessage({\n    defaultMessage: 'Close',\n    id: 'EFkGCy',\n    description: 'aria-label to close the dueDate banner.',\n  });\n\n  React.useEffect(() => {\n    if (\n      dueDateTimeframe === DueDateTimeframe.OVERDUE_MORE_THAN_2_DAYS ||\n      dueDateTimeframe === DueDateTimeframe.OVERDUE_LESS_THAN_2_DAYS ||\n      dueDateTimeframe === DueDateTimeframe.WITHIN_5_HOURS\n    ) {\n      setBannerProps({\n        type: 'warning',\n        withLeftIcon: <UIIcon src={WarningLine} />,\n        onRequestClose,\n        withCloseButton: withCloseButtonText,\n      });\n    } else {\n      setBannerProps({\n        type: 'neutral',\n        withLeftIcon: <UIIcon src={InfoLine} />,\n        onRequestClose,\n        withCloseButton: withCloseButtonText,\n      });\n    }\n  }, [dueDateTimeframe, onRequestClose, withCloseButtonText]);\n\n  if (isLoading || (!editable && !dueDate)) {\n    return null;\n  }\n\n  return (\n    <Banner {...bannerProps}>\n      <Banner.Message> {dueDateText}</Banner.Message>\n      <Banner.Actions>\n        <Button onClick={onClick} variant=\"transparent\">\n          {intl.formatMessage({\n            defaultMessage: 'Manage due date',\n            id: 'E4Meyv',\n            description: 'Button label to manage due date',\n          })}\n        </Button>\n      </Banner.Actions>\n    </Banner>\n  );\n};\n","import React from 'react';\n\nimport {useAtom} from 'jotai';\nimport {FormattedDate, FormattedMessage} from 'react-intl';\n\nimport {Snackbar} from '@dropbox/dig-components/snackbar';\n\nimport {Button} from '~/components/button';\nimport {ReelSnackbar} from '~/components/snackbar';\nimport {currentTaskStateAtom} from '~/state/task';\n\ntype DueDateSnackbarProps = {\n  open: boolean;\n  handleCloseSnackbar: () => void;\n};\n\nexport const DueDateSnackbar = (props: DueDateSnackbarProps) => {\n  const {open, handleCloseSnackbar} = {...props};\n  const [taskState] = useAtom(currentTaskStateAtom);\n\n  return (\n    <ReelSnackbar onRequestClose={handleCloseSnackbar} open={open} timeout={5000}>\n      <Snackbar.Message>\n        {!taskState.isLoading && taskState.task?.dueDate ? (\n          <FormattedMessage\n            defaultMessage=\"Due date has been set to <b>{formattedDueDate}</b>.\"\n            description=\"Text for snackbar message describing the updated due date.\"\n            id=\"aq6zPU\"\n            values={{\n              formattedDueDate: (\n                <FormattedDate day=\"numeric\" month=\"numeric\" value={taskState.task?.dueDate} />\n              ),\n              b: (chunks: React.ReactNode) => <b>{chunks}</b>,\n            }}\n          />\n        ) : (\n          <FormattedMessage\n            defaultMessage=\"Due date has been removed.\"\n            description=\"Text for snackbar message describing due date removal.\"\n            id=\"nhB3Ey\"\n          />\n        )}\n      </Snackbar.Message>\n      <Snackbar.Actions>\n        <Button inverse onClick={handleCloseSnackbar} variant=\"transparent\">\n          <FormattedMessage\n            defaultMessage=\"Dismiss\"\n            description=\"Text for button to dismiss the due date snackbar.\"\n            id=\"8QA7f2\"\n          />\n        </Button>\n      </Snackbar.Actions>\n    </ReelSnackbar>\n  );\n};\n","import React from 'react';\n\nimport {useIntl} from 'react-intl';\n\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {FullscreenExitLine, FullscreenLine} from '@dropbox/dig-icons/assets';\n\nimport {ReelControlTooltip} from '~/pages/viewer_page/components/video_controls/reel_control_tooltip';\n\nimport {IconButton} from './button';\nimport {getShortcutMessages} from '../pages/viewer_page/components/keyboard_shortcuts/keyboard_shortcuts_messages';\n\ntype FullScreenButtonProps = {\n  isFullscreen: boolean;\n  onToggleFullscreenClick: () => void;\n};\n\nexport const FullScreenButton = ({\n  isFullscreen,\n  onToggleFullscreenClick,\n}: FullScreenButtonProps) => {\n  const intl = useIntl();\n  const shortcutMessages = React.useMemo(() => getShortcutMessages(intl), [intl]);\n  return (\n    <ReelControlTooltip description={shortcutMessages.toggleFullscreen} shortcutText=\"f\">\n      <IconButton onClick={onToggleFullscreenClick} variant=\"transparent\">\n        <UIIcon\n          aria-label={shortcutMessages.toggleFullscreen}\n          src={isFullscreen ? FullscreenExitLine : FullscreenLine}\n        />\n      </IconButton>\n    </ReelControlTooltip>\n  );\n};\n","import type {VersionStatus} from '~/components/status/status';\nimport {StatusDropdown} from '~/components/status/status_dropdown';\nimport type {NewVersionStatusType} from '~/lib/logging/logger_types';\nimport {useVersionsContext} from '~/pages/viewer_page/components/versions_context';\n\nimport {useViewerPageContext} from '../viewer_page_context';\n\ntype StatusDropdownVideoPageProps = {\n  buttonSize: 'small' | 'standard';\n  buttonType: 'outline' | 'opacity' | 'transparent';\n};\n\nexport const StatusDropdownWithConsumer = (props: StatusDropdownVideoPageProps) => {\n  const {buttonSize, buttonType} = props;\n  const versionsContext = useVersionsContext();\n  const {loggingClient} = useViewerPageContext();\n\n  if (!versionsContext.areVersionsEnabled) {\n    return null;\n  }\n\n  if (versionsContext.currentVersionSummaries.isLoading) {\n    return (\n      <StatusDropdown\n        buttonSize={buttonSize}\n        buttonType={buttonType}\n        disabled\n        versionStatus={versionsContext.currentVersionStatus}\n      />\n    );\n  }\n\n  const onChange = (versionStatus: VersionStatus) => {\n    versionsContext.setVersionStatus(versionStatus);\n    // eslint-disable-next-line deprecation/deprecation\n    loggingClient.logEvent('select_version_status', {\n      new_version_status: versionStatus.toLowerCase() as NewVersionStatusType,\n    });\n  };\n\n  return (\n    <StatusDropdown\n      buttonSize={buttonSize}\n      buttonType={buttonType}\n      disabled={false}\n      onChange={onChange}\n      versionStatus={versionsContext.currentVersionStatus}\n    />\n  );\n};\n","import React from 'react';\n\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport type VideoJsPlayer from 'video.js/dist/types/player';\n\nimport {Snackbar} from '@dropbox/dig-components/snackbar';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Text} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {PhotoUploadLine} from '@dropbox/dig-icons/assets';\n\nimport {Button, IconButton} from '~/components/button';\nimport {ReelSnackbar} from '~/components/snackbar';\nimport type {MediaProp} from '~/lib/api';\nimport {setThumbnail} from '~/lib/api';\nimport type {LoggingClient} from '~/lib/logging/logger';\nimport {useVideoViewerContext} from '~/pages/viewer_page/video_viewer_context';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\n\ntype SnackbarStatus = 'in_progress' | 'success' | 'failed';\n\ntype SnapshotSnackbarProps = {\n  open: boolean;\n  onClose: () => void;\n  status: SnackbarStatus;\n};\n\nexport const SnapshotSnackbar = (props: SnapshotSnackbarProps) => {\n  const {open, onClose, status} = props;\n  return (\n    <ReelSnackbar onRequestClose={onClose} open={open} timeout={5000}>\n      <Snackbar.Message>\n        {status === 'in_progress' ? (\n          <Text color=\"standard\" inverse>\n            <FormattedMessage\n              defaultMessage=\"Saving frame as new thumbnail\"\n              description=\"Message indicating that the user action to save the current frame of the video as the thumbnail is in progress\"\n              id=\"TrMqzG\"\n            />\n          </Text>\n        ) : status === 'success' ? (\n          <Text color=\"standard\" inverse>\n            <FormattedMessage\n              defaultMessage=\"Saved frame as new thumbnail\"\n              description=\"Message indicating that the user action to save the current frame of the video as the thumbnail was successful\"\n              id=\"PaAPIu\"\n            />\n          </Text>\n        ) : (\n          <Text color=\"error\" inverse>\n            <FormattedMessage\n              defaultMessage=\"Failed to save frame as new thumbnail\"\n              description=\"Message indicating that the user action to save the current frame of the video as the thumbnail failed\"\n              id=\"luEZnh\"\n            />\n          </Text>\n        )}\n      </Snackbar.Message>\n      <Snackbar.Actions>\n        <Button onClick={onClose} variant=\"transparent\">\n          <FormattedMessage\n            defaultMessage=\"Dismiss\"\n            description=\"Text for button to dismiss the new thumbnail snackbar.\"\n            id=\"CvFsQR\"\n          />\n        </Button>\n      </Snackbar.Actions>\n    </ReelSnackbar>\n  );\n};\n\nexport const SetThumbnailButton = () => {\n  const {mediaMetadata, loggingClient} = useViewerPageContext();\n  const {videoPlayerInstance} = useVideoViewerContext();\n  return (\n    <BaseSetThumbnailButton\n      loggingClient={loggingClient}\n      mediaMetadata={mediaMetadata}\n      videoPlayerInstance={videoPlayerInstance}\n    />\n  );\n};\n\nexport const BaseSetThumbnailButton = (props: {\n  mediaMetadata: MediaProp;\n  loggingClient: LoggingClient;\n  videoPlayerInstance: VideoJsPlayer | undefined;\n}) => {\n  const {mediaMetadata, loggingClient, videoPlayerInstance} = props;\n  const [snackbarOpen, setSnackbarOpen] = React.useState<boolean>(false);\n  const [snackbarStatus, setSnackbarStatus] = React.useState<SnackbarStatus>('in_progress');\n  const intl = useIntl();\n\n  const onClickSetThumbnail = async () => {\n    // eslint-disable-next-line deprecation/deprecation\n    loggingClient.logEvent('select_set_thumbnail');\n    setSnackbarStatus('in_progress');\n    setSnackbarOpen(true);\n    if (videoPlayerInstance) {\n      const video_version_id = mediaMetadata.id;\n      const current_time = videoPlayerInstance.currentTime();\n      try {\n        await setThumbnail(video_version_id, current_time);\n        setSnackbarStatus('success');\n      } catch (e) {\n        setSnackbarStatus('failed');\n      }\n    }\n  };\n\n  return (\n    <>\n      <Tooltip\n        placement=\"bottom\"\n        title={intl.formatMessage({\n          defaultMessage: 'Set frame as thumbnail',\n          id: 'p35DxH',\n          description:\n            'Tooltip text for the button that saves the current video frame as the new video thumbnail image.',\n        })}\n      >\n        <IconButton\n          aria-label={intl.formatMessage({\n            defaultMessage: 'Set frame as thumbnail',\n            id: 'QruClD',\n            description:\n              'Aria label text for the button that saves the current video frame as the new video thumbnail image.',\n          })}\n          data-safe-to-unmask-name=\"set-thumbnail-button\"\n          onClick={onClickSetThumbnail}\n          variant=\"transparent\"\n        >\n          <UIIcon src={PhotoUploadLine} />\n        </IconButton>\n      </Tooltip>\n      <SnapshotSnackbar\n        onClose={() => setSnackbarOpen(false)}\n        open={snackbarOpen}\n        status={snackbarStatus}\n      />\n    </>\n  );\n};\n","/* eslint-disable deprecation/deprecation */\nimport React from 'react';\n\nimport {useAtom} from 'jotai';\nimport {useNavigate} from 'react-router-dom';\nimport styled, {css} from 'styled-components';\n\nimport {Title} from '@dropbox/dig-components/typography';\n\nimport {ItemType} from '~/components/common';\nimport {spacing} from '~/components/styled';\nimport {SMALL_SCREEN_WIDTH_BREAKPOINT} from '~/components/viewport_context';\nimport {useViewport} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {MediaType} from '~/lib/api';\nimport {useReelProvisioningEnabled} from '~/lib/utils';\nimport {BackChevron} from '~/pages/layout/components/common_header';\nimport {ContextMenu} from '~/pages/viewer_page/components/context_menu';\nimport {DownloadButton} from '~/pages/viewer_page/components/downloads/video_download_button';\nimport {InfoButton} from '~/pages/viewer_page/components/info_button';\nimport {SetThumbnailButton} from '~/pages/viewer_page/components/set_thumbnail_button';\nimport {VersionsAwareShareFeatures} from '~/pages/viewer_page/components/share_features';\nimport {useVersionsContext} from '~/pages/viewer_page/components/versions_context';\nimport {ViewerSidebarToggle} from '~/pages/viewer_page/components/viewer_sidebar';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\nimport {ViewerSidebarDisplayState, viewerSidebarDisplayStateAtom} from '~/state/viewer';\nimport {isInAdobeExtension, isInExtension} from '~/use_extensions';\n\nimport {PremiumTooltip} from '../../layout/components/premium_tooltip';\n\nconst VideoTitle = styled(Title)`\n  margin-left: 32px;\n  max-width: calc(100vw - 420px);\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  overflow: hidden;\n`;\n\nconst TopRow = styled.div<{\n  $isSmallScreenSize: boolean;\n  $isImage: boolean;\n  $isInAdobeExtension: boolean;\n}>`\n  display: flex;\n  align-content: flex-start;\n  justify-content: space-between;\n  width: 100%;\n\n  @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n    left: 0;\n    margin-bottom: 8px;\n    padding: 0 12px;\n    position: absolute;\n    right: 0;\n    top: 8px;\n    width: calc(100% - 24px);\n    z-index: 11;\n  }\n\n  .panelMode & {\n    position: absolute;\n    width: calc(100% - 32px);\n    z-index: 11;\n    background-color: var(--dig-color__background__base);\n    padding: 8px 16px 8px 16px;\n    align-items: center;\n  }\n\n  // By default, these backgrounds are transparent, but on the image page and\n  // on mobile, the buttons float in front of user content, so we must get the\n  // opaque equivalents on a similar background\n  // However, in the Adobe extensions, we want to keep the transparent background\n  ${({$isImage, $isSmallScreenSize, $isInAdobeExtension}) =>\n    !$isInAdobeExtension &&\n    ($isImage || $isSmallScreenSize) &&\n    css`\n      && .dig-Button,\n      & .dig-IconButton {\n        background: #2b2929;\n      }\n      & .dig-Menu .dig-Button:disabled,\n      & .dig-IconButton:disabled,\n      & .dig-Menu .dig-Button[aria-disabled='true'],\n      & .dig-IconButton[aria-disabled='true'] {\n        background: #302b2b;\n      }\n    `}\n`;\n\nconst TopRowLeftSide = styled.div`\n  display: flex;\n  align-items: center;\n`;\n\nconst TopRowRightSide = styled.div`\n  display: flex;\n  gap: ${spacing('Micro XSmall')};\n`;\n\nconst LeftMargin = styled.div`\n  margin-left: 8px;\n  @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n    margin-left: 0;\n    margin-right: 8px;\n  }\n`;\n\nexport const ViewerTopRow = ({\n  statusDropdownSlot,\n  versionSelectorSlot,\n  dueDateSlot,\n  sidebarSlot,\n  visible,\n  fullScreenButtonSlot,\n}: {\n  versionSelectorSlot: React.ReactElement;\n  statusDropdownSlot: React.ReactElement;\n  dueDateSlot?: React.ReactElement;\n  sidebarSlot?: React.ReactElement;\n  fullScreenButtonSlot?: React.ReactElement;\n  visible: boolean;\n}) => {\n  const {mediaMetadata, setProjectName, loggingClient, currentUserIsOwner} = useViewerPageContext();\n  const versionsContext = useVersionsContext();\n\n  const {isSmallScreenSize} = useViewport();\n  const [viewerSidebarDisplayState, setViewerSidebarDisplayState] = useAtom(\n    viewerSidebarDisplayStateAtom,\n  );\n  const sessionContext = useReelAppGlobalState();\n  const isProvisioningEnabled = useReelProvisioningEnabled();\n  const isDueDateProvisioned =\n    !isProvisioningEnabled ||\n    (sessionContext.status === 'logged in' && sessionContext.provisions.deadlines_and_tasks);\n  const dueDateTriggerRef = React.useRef(null);\n  const [showDueDatePremiumTooltip, setShowDueDatePremiumTooltip] = React.useState<boolean>(false);\n  const [tooltipTimeout, setTooltipTimeout] = React.useState<NodeJS.Timeout>();\n\n  const versionSummaries =\n    versionsContext.areVersionsEnabled &&\n    !versionsContext.currentVersionSummaries.isLoading &&\n    versionsContext.currentVersionSummaries.versionSummaries;\n\n  const {showContextMenu, projectId} = versionsContext;\n\n  const {\n    mediaMetadata: {folderId},\n  } = useViewerPageContext();\n\n  const navigate = useNavigate();\n  const onRemove = (itemType: ItemType, [itemId]: string[]) => {\n    if (itemType == ItemType.VERSION) {\n      if (versionsContext.areVersionsEnabled) {\n        versionsContext.deleteVersionById(itemId);\n      }\n    } else {\n      navigate('/');\n    }\n  };\n\n  const showViewerSidebar = () => {\n    if (viewerSidebarDisplayState === ViewerSidebarDisplayState.REDCARPET) {\n      return;\n    }\n\n    loggingClient.logEvent('select_toggle_comments_pane', {show: 'true'});\n    setViewerSidebarDisplayState({\n      viewerSidebarDisplayState: ViewerSidebarDisplayState.SHOWING,\n      isManuallySet: true,\n    });\n  };\n\n  const contextMenu =\n    showContextMenu && projectId ? (\n      <ContextMenu\n        accessLevel={mediaMetadata.accessLevel!}\n        isSmallScreen={isSmallScreenSize}\n        loggingClient={loggingClient}\n        name={mediaMetadata.projectName}\n        numVersions={versionSummaries ? versionSummaries.length : 0}\n        onProjectRename={setProjectName}\n        onProjectsDelete={onRemove}\n        ownerUid={mediaMetadata.ownerUid}\n        projectId={projectId}\n        versionNumber={mediaMetadata.versionNum}\n        videoId={mediaMetadata.videoId}\n        videoVersionId={mediaMetadata.id}\n      />\n    ) : null;\n\n  const isViewOnly = viewerSidebarDisplayState === ViewerSidebarDisplayState.DISABLED;\n  const versionIsReady =\n    !versionsContext.areVersionsEnabled || versionsContext.pendingVersionAction === 'none';\n\n  const isSharePage = versionsContext.isSharePage;\n\n  let showSetThumbnail: boolean;\n  if (!mediaMetadata.accessLevel || mediaMetadata.accessLevel === 'none') {\n    showSetThumbnail = currentUserIsOwner;\n  } else {\n    showSetThumbnail =\n      mediaMetadata.accessLevel === 'owner' ||\n      mediaMetadata.accessLevel === 'admin' ||\n      mediaMetadata.accessLevel === 'super_admin';\n  }\n\n  return (\n    <TopRow\n      $isImage={mediaMetadata.type === 'image'}\n      $isInAdobeExtension={isInAdobeExtension()}\n      $isSmallScreenSize={isSmallScreenSize}\n      style={{visibility: visible ? 'visible' : 'hidden'}}\n    >\n      <TopRowLeftSide>\n        {isInExtension() && (\n          <BackChevron\n            backToUrl={folderId ? `/folder/${folderId}` : '/'}\n            loggingClient={loggingClient}\n          />\n        )}\n        {!isSmallScreenSize && <LeftMargin>{sidebarSlot}</LeftMargin>}\n        <LeftMargin>{versionSelectorSlot}</LeftMargin>\n        <LeftMargin>{statusDropdownSlot}</LeftMargin>\n        {!isSmallScreenSize && (\n          <LeftMargin\n            onMouseEnter={() => {\n              if (!isDueDateProvisioned) {\n                const timeout = setTimeout(() => setShowDueDatePremiumTooltip(true), 200);\n\n                setTooltipTimeout(timeout);\n              }\n            }}\n            onMouseLeave={() => clearTimeout(tooltipTimeout)}\n            ref={dueDateTriggerRef}\n          >\n            {dueDateSlot}\n          </LeftMargin>\n        )}\n        {isInExtension() && (\n          <VideoTitle data-testid=\"common-title\">{mediaMetadata.projectName}</VideoTitle>\n        )}\n        <PremiumTooltip\n          onClose={() => setShowDueDatePremiumTooltip(false)}\n          open={showDueDatePremiumTooltip}\n          placement=\"bottom\"\n          triggerRef={dueDateTriggerRef}\n        />\n      </TopRowLeftSide>\n      <TopRowRightSide>\n        {fullScreenButtonSlot}\n        {isInExtension() && (\n          <VersionsAwareShareFeatures\n            canCreateLinks={currentUserIsOwner}\n            isViewOnlyLinkAccess={isViewOnly}\n            location=\"red_carpet\"\n            shareButtonVariant=\"primary\"\n          />\n        )}\n        {!isInExtension() &&\n          !isViewOnly &&\n          versionIsReady &&\n          (!isSharePage || isSmallScreenSize) && <DownloadButton buttonType=\"admin\" />}\n        {!isInExtension() &&\n          versionIsReady &&\n          showSetThumbnail &&\n          !isSmallScreenSize &&\n          mediaMetadata.mediaType === MediaType.Video && <SetThumbnailButton />}\n        {!isInExtension() && versionIsReady && !isSmallScreenSize && (\n          <InfoButton loggingClient={loggingClient} mediaMetadata={mediaMetadata} />\n        )}\n        {versionIsReady && contextMenu}\n        {viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED &&\n          viewerSidebarDisplayState !== ViewerSidebarDisplayState.REDCARPET &&\n          viewerSidebarDisplayState !== ViewerSidebarDisplayState.SHOWING && (\n            <ViewerSidebarToggle clickHandler={showViewerSidebar} />\n          )}\n      </TopRowRightSide>\n    </TopRow>\n  );\n};\n","/* eslint-disable deprecation/deprecation */\nimport React from 'react';\n\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\nimport styled from 'styled-components';\n\nimport {\n  COMMENT_PROMPT_BANNER_HEIGHT,\n  IMAGE_VIEW_DUEDATE_BANNER_HEIGHT_DUEDATE_BANNER_HEIGHT,\n} from '~/components/common';\nimport {DueDate} from '~/components/due_date/due_date';\nimport {DueDateBanner} from '~/components/due_date/due_date_banner';\nimport {\n  AddDueDateModal,\n  DueDateVersionModal,\n  dueDateVersionModalAtom,\n} from '~/components/due_date/due_date_modal';\nimport {DueDateSnackbar} from '~/components/due_date/due_date_snackbar';\nimport {FullScreenButton} from '~/components/full_screen_button';\nimport {SMALL_SCREEN_WIDTH_BREAKPOINT, useViewport} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {deleteTask} from '~/lib/api';\nimport type {FocusStyles} from '~/lib/onboarding_v2/use_focus_ring';\nimport {useFocusRing} from '~/lib/onboarding_v2/use_focus_ring';\nimport useFullscreen from '~/lib/use-fullscreen';\nimport {useIsReplayInGA} from '~/lib/utils';\nimport {Image} from '~/pages/viewer_page/components/images/image';\nimport {StatusDropdownWithConsumer} from '~/pages/viewer_page/components/status_dropdown_with_consumer';\nimport {VersionSelectorWithConsumer} from '~/pages/viewer_page/components/versions/versions_dropdown';\nimport {ViewerTopRow} from '~/pages/viewer_page/components/viewer_top_row';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\nimport {STEPS} from '~/state/onboarding_v2';\nimport {clearTaskStateAtom, currentTaskStateAtom} from '~/state/task';\nimport {ViewerSidebarDisplayState, viewerSidebarDisplayStateAtom} from '~/state/viewer';\nimport {isInExtension} from '~/use_extensions';\n\nimport {NEW_THREAD_COMPOSER_HEIGHT} from './comments/comment_composers/comment_composers';\nimport {useCommentsContext} from '../comments_context';\n\nconst Container = styled.div`\n  height: 100%;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  margin: auto;\n  position: relative;\n  overflow: hidden;\n\n  @media screen and (min-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n    height: calc(100% - ${NEW_THREAD_COMPOSER_HEIGHT + COMMENT_PROMPT_BANNER_HEIGHT}px);\n  }\n`;\n\ntype ImageViewerTopContainerProps = {\n  $isBannerShowing: boolean;\n};\n\nconst ImageViewerTopContainer = styled.div<ImageViewerTopContainerProps>`\n  position: absolute;\n  left: 20px;\n  right: 20px;\n  top: ${(prop) =>\n    prop.$isBannerShowing\n      ? IMAGE_VIEW_DUEDATE_BANNER_HEIGHT_DUEDATE_BANNER_HEIGHT\n      : 24}px; // This changes depending on if the duedate banner is displayed\n  z-index: 15;\n\n  @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n    z-index: 4; // This sets the version dropdown above the comment editor and the image controls\n    top: 0;\n    left: 0;\n    right: 0;\n  }\n`;\n\nconst DueDateBannerContainer = styled.div`\n  margin-left: var(--dig-spacing__dimension__36);\n  margin-right: var(--dig-spacing__dimension__20);\n`;\n\ntype ContentProps = {\n  $focusStyles: FocusStyles;\n};\nconst Content = styled.div<ContentProps>`\n  flex-grow: 1;\n  max-height: 100%;\n  position: relative;\n\n  .panelMode & {\n    margin-bottom: 0;\n    margin-top: 0;\n  }\n\n  ${(props) => props.$focusStyles};\n`;\n\nContent.displayName = 'Content';\n\nexport const ImageViewer = () => {\n  const {\n    isHovered,\n    mediaMetadata: image,\n    currentUserHasEdit,\n    loggingClient,\n    currentUserIsOwner,\n  } = useViewerPageContext();\n\n  const {isSmallScreenSize} = useViewport();\n  const {selectedThreadId} = useCommentsContext();\n  const viewerSidebarDisplayState = useAtomValue(viewerSidebarDisplayStateAtom);\n  const taskState = useAtomValue(currentTaskStateAtom);\n  const showDueDate = useIsReplayInGA();\n  const [isDueDateModalOpen, setIsDueDateModalOpen] = React.useState(false);\n  const clearTask = useSetAtom(clearTaskStateAtom);\n  const [showDueDateVersionModal, setShowDueDateVersionModal] = useAtom(dueDateVersionModalAtom);\n  const [showDueDateVersionModalErrorText, setShowDueDateVersionModalErrorText] =\n    React.useState(false);\n  const [dueDateDeleteRequestInProgress, setDueDateDeleteRequestInProgress] = React.useState(false);\n  const sessionContext = useReelAppGlobalState();\n  const hoverCursorIsEnabled =\n    sessionContext.status === 'logged in'\n      ? sessionContext.preferenceSettingMetadata.REPLAY_SETTINGS_COMMENTS_SHOW_ICON_ON_HOVER\n      : 'ON';\n  const drawOnFileFocusStyles = useFocusRing([STEPS.DRAW_ON_FILE]);\n\n  const containerRef = React.useRef<HTMLDivElement>(null);\n  const {fullscreenEnabled, isFullscreen, toggleFullscreen} = useFullscreen({\n    fullScreenElementRef: containerRef,\n  });\n  const handleToggleFullscreenClick = React.useCallback(() => {\n    const mediaType = image.mediaType;\n    toggleFullscreen(loggingClient, mediaType, 'control_bar_button')();\n  }, [image.mediaType, loggingClient, toggleFullscreen]);\n\n  const handleRemoveDueDate = async () => {\n    setShowDueDateVersionModalErrorText(false);\n    setDueDateDeleteRequestInProgress(true);\n\n    try {\n      if (!taskState.isLoading && taskState.task?.taskId) {\n        await deleteTask(taskState.task.taskId);\n        clearTask(image.videoId);\n\n        loggingClient.logEvent('remove_due_date');\n        setShowDueDateVersionModal(false);\n      } else {\n        throw new Error('Task ID is missing.');\n      }\n    } catch (e) {\n      setShowDueDateVersionModalErrorText(true);\n    }\n\n    setDueDateDeleteRequestInProgress(false);\n  };\n  const handleCloseDueDateVersionModal = () => {\n    setShowDueDateVersionModal(false);\n  };\n  const [showDueDateSnackbar, setShowDueDateSnackbar] = React.useState(false);\n  const dismissDueDateSnackbar = () => setShowDueDateSnackbar(false);\n  const [showDueDateBanner, setShowDueDateBanner] = React.useState(false);\n\n  const handleRemoveDueDateBanner = () => {\n    setShowDueDateBanner(false);\n  };\n\n  const statusDropdownSlot =\n    viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension() ? (\n      <StatusDropdownWithConsumer buttonSize=\"standard\" buttonType=\"opacity\" />\n    ) : (\n      <div />\n    );\n  const versionSelector =\n    viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension() ? (\n      <VersionSelectorWithConsumer loggingClient={loggingClient} mediaMetadata={image} />\n    ) : (\n      <div />\n    );\n\n  React.useEffect(() => {\n    const doesDueDateExist =\n      currentUserIsOwner &&\n      (viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension()) &&\n      (!taskState.isLoading ? (taskState.task?.dueDate ? true : false) : false) &&\n      !isSmallScreenSize;\n\n    setShowDueDateBanner(doesDueDateExist);\n  }, [currentUserIsOwner, isSmallScreenSize, showDueDate, taskState, viewerSidebarDisplayState]);\n\n  const dueDateBanner = showDueDateBanner ? (\n    <DueDateBannerContainer>\n      <DueDateBanner\n        dueDate={!taskState.isLoading ? taskState.task?.dueDate : undefined}\n        editable={currentUserHasEdit}\n        isImage={true}\n        isLoading={taskState.isLoading}\n        onClick={() => {\n          setIsDueDateModalOpen((prevState) => !prevState);\n        }}\n        onRequestClose={handleRemoveDueDateBanner}\n      />\n    </DueDateBannerContainer>\n  ) : (\n    <div />\n  );\n\n  const dueDateSlot =\n    showDueDate &&\n    !currentUserIsOwner &&\n    (viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension()) ? (\n      <DueDate\n        dueDate={!taskState.isLoading ? taskState.task?.dueDate : undefined}\n        editable={currentUserHasEdit}\n        isImage={true}\n        isLoading={taskState.isLoading}\n        onClick={() => {\n          setIsDueDateModalOpen((prevState) => !prevState);\n\n          loggingClient.logEvent('select_open_due_date', {source: 'image_page'});\n        }}\n      />\n    ) : (\n      <div />\n    );\n\n  React.useEffect(() => {\n    const searchParams = new URLSearchParams(window.location.search);\n    const showDueDateSearchParam = searchParams.get('show_due_date');\n    if (showDueDateSearchParam === 'true') {\n      setIsDueDateModalOpen(true);\n    }\n  }, []);\n\n  const fullScreenButtonSlot = fullscreenEnabled() ? (\n    <FullScreenButton\n      isFullscreen={isFullscreen}\n      onToggleFullscreenClick={handleToggleFullscreenClick}\n    />\n  ) : (\n    <div />\n  );\n\n  const showControls = !isInExtension() || isHovered || Boolean(selectedThreadId);\n\n  // Narrow the type to only ImageProp\n  if (image.type !== 'image') {\n    return null;\n  }\n\n  return (\n    <Container data-testid=\"image-viewer-container\" ref={containerRef}>\n      {dueDateBanner}\n      <ImageViewerTopContainer $isBannerShowing={showDueDateBanner}>\n        <ViewerTopRow\n          dueDateSlot={dueDateSlot}\n          fullScreenButtonSlot={fullScreenButtonSlot}\n          statusDropdownSlot={statusDropdownSlot}\n          versionSelectorSlot={versionSelector}\n          visible={showControls}\n        />\n      </ImageViewerTopContainer>\n      <Content $focusStyles={drawOnFileFocusStyles}>\n        <Image\n          commentsSidebarOpen={viewerSidebarDisplayState === ViewerSidebarDisplayState.SHOWING}\n          hoverCursorIsEnabled={hoverCursorIsEnabled}\n          imageViewerRef={containerRef}\n          src={image.fullSizeUrl}\n          thumbnailSrc={image.thumbnailUrl}\n        />\n      </Content>\n      <AddDueDateModal\n        handleCloseModal={() => setIsDueDateModalOpen(false)}\n        handleShowDueDateSnackbar={() => setShowDueDateSnackbar(true)}\n        logEvent={loggingClient.logEvent.bind(loggingClient)}\n        open={isDueDateModalOpen}\n        videoId={image.videoId}\n      />\n      <DueDateVersionModal\n        currentVersion={image.versionNum}\n        handleCloseModal={handleCloseDueDateVersionModal}\n        handleRemoveDueDate={handleRemoveDueDate}\n        isOpen={showDueDateVersionModal}\n        projectName={image.projectName}\n        requestInProgress={dueDateDeleteRequestInProgress}\n        showErrorText={showDueDateVersionModalErrorText}\n      />\n      <DueDateSnackbar handleCloseSnackbar={dismissDueDateSnackbar} open={showDueDateSnackbar} />\n    </Container>\n  );\n};\n","import styled from 'styled-components';\n\nimport {Spinner} from '@dropbox/dig-components/progress_indicators';\n\nconst CenteredContainer = styled.div`\n  height: 100%;\n  align-items: center;\n  display: flex;\n  justify-content: center;\n`;\n\nexport const PdfLoading = () => (\n  <CenteredContainer>\n    <Spinner monochromatic size=\"large\" />\n  </CenteredContainer>\n);\n","export function PAP_Select_SidebarPreviewIcon(properties) {\n    return {\n        class: 'replay',\n        action: 'select',\n        object: 'sidebar_preview_icon',\n        properties,\n    };\n}\n//# sourceMappingURL=select_sidebar_preview_icon.js.map","import {useAtom} from 'jotai';\nimport {PAP_Select_SidebarPreviewIcon} from 'pap-events/replay/select_sidebar_preview_icon';\nimport {useIntl} from 'react-intl';\n\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {SidebarHideLine, SidebarShowLine} from '@dropbox/dig-icons/assets';\n\nimport {IconButton} from '~/components/button';\nimport {MediaType} from '~/lib/api';\nimport {mapMediaTypeToLoggingType} from '~/lib/logging/logger_types';\nimport {useLoggingClient} from '~/lib/use_logging_client';\nimport {thumbnailSidebarDisplayStateAtom} from '~/state/pdf_viewer_state';\n\nexport const ThumbnailSidebar = () => {\n  const intl = useIntl();\n  const loggingClient = useLoggingClient();\n  const [thumbnailSidebarDisplayState, setThumbnailSidebarDisplayState] = useAtom(\n    thumbnailSidebarDisplayStateAtom,\n  );\n\n  const onClick = () => {\n    setThumbnailSidebarDisplayState(\n      thumbnailSidebarDisplayState === 'showing' ? 'hidden' : 'showing',\n    );\n    // eslint-disable-next-line deprecation/deprecation\n    loggingClient.logEvent('select_sidebar_preview_icon', {\n      show: thumbnailSidebarDisplayState === 'showing' ? 'true' : 'false',\n      media_type: mapMediaTypeToLoggingType(MediaType.Document),\n    });\n    loggingClient.logPap(\n      PAP_Select_SidebarPreviewIcon({\n        show: thumbnailSidebarDisplayState === 'showing',\n        mediaType: MediaType.Document,\n      }),\n    );\n  };\n\n  return (\n    <IconButton\n      aria-label={intl.formatMessage({\n        defaultMessage: 'Toggle Thumbnail Sidebar',\n        id: '2RiC2p',\n        description: 'Aria label for the button to display pdf page thumbnails.',\n      })}\n      onClick={onClick}\n      size=\"standard\"\n      variant=\"opacity\"\n    >\n      <UIIcon\n        src={thumbnailSidebarDisplayState === 'showing' ? SidebarHideLine : SidebarShowLine}\n      />\n    </IconButton>\n  );\n};\n","/* eslint-disable deprecation/deprecation */\nimport React, {Suspense} from 'react';\n\nimport {useAtom, useAtomValue} from 'jotai';\nimport {useAtomCallback} from 'jotai/utils';\nimport styled, {css} from 'styled-components';\n\nimport {FullScreenButton} from '~/components/full_screen_button';\nimport {breakpointSmall, spacing} from '~/components/styled';\nimport {SMALL_SCREEN_WIDTH_BREAKPOINT, useViewport} from '~/components/viewport_context';\nimport {mediaAsDocument} from '~/lib/api';\nimport {lazy} from '~/lib/lazy';\nimport {useFocusRing} from '~/lib/onboarding_v2/use_focus_ring';\nimport type {FocusStyles} from '~/lib/onboarding_v2/use_focus_ring';\nimport useFullscreen from '~/lib/use-fullscreen';\nimport {useCommentsContext} from '~/pages/viewer_page/comments_context';\nimport {PdfLoading} from '~/pages/viewer_page/components/documents/pdf_loading';\nimport {StatusDropdownWithConsumer} from '~/pages/viewer_page/components/status_dropdown_with_consumer';\nimport {ThumbnailSidebar} from '~/pages/viewer_page/components/thumbnail_sidebar';\nimport {VersionSelectorWithConsumer} from '~/pages/viewer_page/components/versions/versions_dropdown';\nimport {ViewerTopRow} from '~/pages/viewer_page/components/viewer_top_row';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\nimport {STEPS} from '~/state/onboarding_v2';\nimport {pdfCurrentPageAtom, pdfCurrentScaleAtom, pdfPagesAtom} from '~/state/pdf_viewer_state';\nimport {ViewerSidebarDisplayState, viewerSidebarDisplayStateAtom} from '~/state/viewer';\nimport {isInExtension} from '~/use_extensions';\n\nconst PDF = lazy(() =>\n  import(/* webpackChunkName: 'pdf-viewer' */ './documents/pdf').then((module) => ({\n    default: module.PDF,\n  })),\n);\n\nconst Container = styled.div`\n  height: 36vh;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n\n  // Not using \"breakpointSmall\" here as useViewport is entangled\n  // with the viewer page and comment composer too deeply\n  @media (min-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT + 1}px) {\n    height: 100%;\n  }\n`;\n\nconst PdfViewerTopContainer = styled.div`\n  position: absolute;\n  top: ${spacing('Micro Small')};\n  left: ${spacing('Micro XLarge')};\n  right: ${spacing('Micro XLarge')};\n  z-index: 15;\n\n  ${breakpointSmall(css`\n    top: ${spacing('Macro Small')};\n  `)}\n`;\n\ntype ContentProps = {\n  $focusStyles: FocusStyles;\n};\n\nconst Content = styled.div<ContentProps>`\n  flex-grow: 1;\n  max-height: 100%;\n  position: relative;\n\n  .panelMode & {\n    margin-bottom: 0px;\n    margin-top: 0px;\n  }\n\n  ${(props) => props.$focusStyles};\n`;\n\nexport const getFullScreenScale = (\n  pdfRect: DOMRect | undefined,\n  pdfScale: number,\n  screenWidth: number,\n) => {\n  const maxScale = 1.75;\n  const fallbackWidth = 612; // Width of default pdf page in pixels\n  const pdfWidth = pdfRect?.width ? pdfRect.width / pdfScale : fallbackWidth;\n  const dimensionErrorMargin = 16; // scrollbar\n  const viewportWidth = screenWidth - dimensionErrorMargin;\n  const scale = Math.min(maxScale, viewportWidth / pdfWidth);\n  return scale;\n};\n\nconst PdfViewer = () => {\n  const {isHovered, mediaMetadata, loggingClient} = useViewerPageContext();\n  const {selectedThreadId} = useCommentsContext();\n  const viewerSidebarDisplayState = useAtomValue(viewerSidebarDisplayStateAtom);\n  const drawOnFileFocusStyles = useFocusRing([STEPS.DRAW_ON_FILE]);\n  const containerRef = React.useRef<HTMLDivElement>(null);\n  const {width: screenWidth} = useViewport();\n  const [pdfScale, setPdfScale] = useAtom(pdfCurrentScaleAtom);\n  const pdfCurrentPage = useAtomValue(pdfCurrentPageAtom);\n  const getPages = useAtomCallback(React.useCallback((get) => get(pdfPagesAtom), []));\n  const {fullscreenEnabled, isFullscreen, toggleFullscreen} = useFullscreen({\n    fullScreenElementRef: containerRef,\n  });\n\n  const updatePdfScale = React.useCallback(() => {\n    const pdfRect = getPages().get(pdfCurrentPage)?.current?.getBoundingClientRect();\n    const scale = getFullScreenScale(pdfRect, pdfScale, screenWidth);\n    setPdfScale(isFullscreen ? 1 : scale);\n  }, [getPages, pdfCurrentPage, pdfScale, screenWidth, setPdfScale, isFullscreen]);\n\n  const handleToggleFullscreenClick = React.useCallback(() => {\n    toggleFullscreen(loggingClient, mediaMetadata.mediaType, 'control_bar_button')();\n    updatePdfScale();\n  }, [loggingClient, mediaMetadata.mediaType, toggleFullscreen, updatePdfScale]);\n\n  const pdfMetadata = mediaAsDocument(mediaMetadata);\n\n  const statusDropdownSlot =\n    viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension() ? (\n      <StatusDropdownWithConsumer buttonSize=\"standard\" buttonType=\"opacity\" />\n    ) : (\n      <div />\n    );\n\n  const versionSelector =\n    viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension() ? (\n      <VersionSelectorWithConsumer loggingClient={loggingClient} mediaMetadata={pdfMetadata} />\n    ) : (\n      <div />\n    );\n\n  const sidebarSlot =\n    (viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension()) &&\n    !isFullscreen ? (\n      <ThumbnailSidebar />\n    ) : (\n      <div />\n    );\n\n  const showControls = !isInExtension() || isHovered || Boolean(selectedThreadId);\n\n  const fullScreenButtonSlot = fullscreenEnabled() ? (\n    <FullScreenButton\n      isFullscreen={isFullscreen}\n      onToggleFullscreenClick={handleToggleFullscreenClick}\n    />\n  ) : (\n    <div />\n  );\n\n  return (\n    <Container ref={containerRef}>\n      <PdfViewerTopContainer>\n        <ViewerTopRow\n          fullScreenButtonSlot={fullScreenButtonSlot}\n          sidebarSlot={sidebarSlot}\n          statusDropdownSlot={statusDropdownSlot}\n          versionSelectorSlot={versionSelector}\n          visible={showControls}\n        />\n      </PdfViewerTopContainer>\n      <Content $focusStyles={drawOnFileFocusStyles}>\n        <Suspense fallback={<PdfLoading />}>\n          <PDF\n            height={pdfMetadata.documentMetadata.height}\n            isFullscreen={isFullscreen}\n            src={pdfMetadata.pdfPreviewUrl}\n            totalPages={pdfMetadata.documentMetadata.pages}\n          />\n        </Suspense>\n      </Content>\n    </Container>\n  );\n};\n\nexport default PdfViewer;\n","import {useEffect, useMemo, useState} from 'react';\n\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\n\nimport {useIsOnOnboardingVideoWalkthroughPage} from '~/lib/onboarding_v2/use_is_on_onboarding_video_walkthrough_page';\nimport {pauseVideoAtTime} from '~/pages/viewer_page/video_utils';\nimport {useVideoViewerContext} from '~/pages/viewer_page/video_viewer_context';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\nimport {\n  completedStepsAtom,\n  currOpenStepAtom,\n  isChecklistOpenAtom,\n  lastCompletedStepAtom,\n  shouldFillInOnboardingCommentAtom,\n  STEPS,\n} from '~/state/onboarding_v2';\n\nexport const stepMilestones: {\n  [key: string]: {\n    start: number;\n    end: number | null;\n    nextStep?: STEPS;\n    pauseForNextStep?: boolean;\n  };\n} = {\n  [STEPS.VIEW_FILE]: {\n    start: 0,\n    end: null,\n    nextStep: STEPS.DRAW_ON_FILE,\n    pauseForNextStep: false,\n  },\n  [STEPS.DRAW_ON_FILE]: {\n    start: 13,\n    end: 29,\n    nextStep: STEPS.COMMENT_ON_FILE,\n    pauseForNextStep: true,\n  },\n  [STEPS.COMMENT_ON_FILE]: {\n    start: 29,\n    end: 56,\n    nextStep: STEPS.UPLOAD_FILE,\n    pauseForNextStep: true,\n  },\n  [STEPS.UPLOAD_FILE]: {\n    start: 56,\n    end: null,\n  },\n};\n\nconst useOnboardingVideoWalkthrough = () => {\n  const completedSteps = useAtomValue(completedStepsAtom);\n  const lastCompletedStep = useAtomValue(lastCompletedStepAtom);\n\n  const setShouldFillInOnboardingComment = useSetAtom(shouldFillInOnboardingCommentAtom);\n  const [isChecklistOpen, setIsChecklistOpen] = useAtom(isChecklistOpenAtom);\n  const [currOpenStep, setCurrOpenStep] = useAtom(currOpenStepAtom);\n\n  const isOnOnboardingVideoWalkthroughPage = useIsOnOnboardingVideoWalkthroughPage();\n  const {frameRate} = useViewerPageContext();\n  const {videoPlayerInstance} = useVideoViewerContext();\n  const [stepToPause, setStepToPause] = useState<STEPS | null>(null);\n  const currentTime = Math.floor(videoPlayerInstance?.currentTime() || 0);\n\n  const isPlaying = videoPlayerInstance && !videoPlayerInstance.paused();\n\n  const currOpenStepMilestone = useMemo(\n    () => currOpenStep && stepMilestones[currOpenStep],\n    [currOpenStep],\n  );\n  const stepToPauseMilestone = useMemo(\n    () => stepToPause && stepMilestones[stepToPause],\n    [stepToPause],\n  );\n\n  useEffect(() => {\n    if (isOnOnboardingVideoWalkthroughPage) {\n      if (!currOpenStepMilestone || !videoPlayerInstance) {\n        return;\n      }\n\n      const nextStep = currOpenStepMilestone.nextStep;\n      const nextCurrOpenStepMilestone = nextStep && stepMilestones[nextStep];\n      const pauseForNextStep = stepToPauseMilestone?.pauseForNextStep;\n\n      // Play the video if a step is newly completed and video is paused\n      if (currOpenStep !== stepToPause) {\n        const isFirstTime = stepToPause === null;\n        setStepToPause(currOpenStep);\n\n        // Special edge case where we're transitioning to the draw step, but we don't wanna skip\n        // directly to the draw step in the video\n        const hasCompletedDrawStep = completedSteps.includes(STEPS.DRAW_ON_FILE);\n        const isTransitioningFromViewToDrawStep =\n          stepToPause === STEPS.VIEW_FILE &&\n          currOpenStep === STEPS.DRAW_ON_FILE &&\n          !hasCompletedDrawStep;\n\n        // Time will skip if a step is completed early, or a user selects a step in the checklist to view\n        if (currentTime !== currOpenStepMilestone.start && !isTransitioningFromViewToDrawStep) {\n          videoPlayerInstance.currentTime(currOpenStepMilestone.start);\n        }\n\n        if (!isFirstTime) {\n          // This makes sure we're not always playing the video the first time around on page load\n          videoPlayerInstance.play();\n        }\n      } else if (\n        currOpenStep === stepToPause &&\n        isPlaying &&\n        !pauseForNextStep &&\n        nextCurrOpenStepMilestone &&\n        currentTime === nextCurrOpenStepMilestone.start\n      ) {\n        // This is a special case where a user transitions from a step that has no pause,\n        // to a paused step and we wanna open the checklist to the correct step.\n        // For instance, the VIEW_FILE step is completed, but has no pause point between that and\n        // the DRAW FILE step, so we want to just open the checklist\n        setCurrOpenStep(nextStep);\n      } else if (currOpenStep === stepToPause && lastCompletedStep === currOpenStep && nextStep) {\n        // This is a special case where a user redoes a step that has been previously completed.\n        // in the current checklist, it won't count as \"re-completing\", so we manually go to the next step here\n        setCurrOpenStep(nextStep);\n      }\n    }\n  }, [\n    completedSteps,\n    currOpenStep,\n    currOpenStepMilestone,\n    currentTime,\n    isOnOnboardingVideoWalkthroughPage,\n    isPlaying,\n    setCurrOpenStep,\n    stepToPause,\n    stepToPauseMilestone,\n    videoPlayerInstance,\n    lastCompletedStep,\n  ]);\n\n  // Pause the video at a certain amount of seconds for a current step\n  useEffect(() => {\n    if (\n      isOnOnboardingVideoWalkthroughPage &&\n      isPlaying &&\n      currOpenStepMilestone &&\n      currentTime === currOpenStepMilestone.end\n    ) {\n      pauseVideoAtTime(videoPlayerInstance, {\n        frameRate,\n        timeSecs: currentTime,\n      });\n\n      // on pause for the COMMENT step, we need to fill in the comment input. this atom helps us denote when\n      if (currOpenStep === STEPS.COMMENT_ON_FILE) {\n        setShouldFillInOnboardingComment(true);\n      }\n\n      if (!isChecklistOpen) {\n        setIsChecklistOpen(true);\n      }\n    }\n  }, [\n    currOpenStep,\n    currentTime,\n    frameRate,\n    isOnOnboardingVideoWalkthroughPage,\n    isChecklistOpen,\n    isPlaying,\n    setIsChecklistOpen,\n    setShouldFillInOnboardingComment,\n    currOpenStepMilestone,\n    videoPlayerInstance,\n  ]);\n};\n\nexport {useOnboardingVideoWalkthrough};\n","/* eslint-disable deprecation/deprecation */\nimport React from 'react';\n\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\nimport {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {DueDate} from '~/components/due_date/due_date';\nimport {DueDateBanner} from '~/components/due_date/due_date_banner';\nimport {\n  AddDueDateModal,\n  DueDateVersionModal,\n  dueDateVersionModalAtom,\n} from '~/components/due_date/due_date_modal';\nimport {DueDateSnackbar} from '~/components/due_date/due_date_snackbar';\nimport {FocusTab} from '~/components/focus_tab';\nimport {color, spacing} from '~/components/styled';\nimport {\n  SMALL_SCREEN_HEIGHT_BREAKPOINT,\n  SMALL_SCREEN_WIDTH_BREAKPOINT,\n} from '~/components/viewport_context';\nimport {useViewport} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {deleteTask} from '~/lib/api';\nimport type {FocusStyles} from '~/lib/onboarding_v2/use_focus_ring';\nimport {useFocusRing} from '~/lib/onboarding_v2/use_focus_ring';\nimport {useIsOnOnboardingVideoWalkthroughPage} from '~/lib/onboarding_v2/use_is_on_onboarding_video_walkthrough_page';\nimport {useOnboardingChecklist} from '~/lib/onboarding_v2/use_onboarding_checklist';\nimport {useOnboardingVideoWalkthrough} from '~/lib/onboarding_v2/use_onboarding_video_walkthrough';\nimport {PLAYER_STATUS} from '~/lib/ui_types';\nimport {getPlaylistUrl, useIsReplayInGA} from '~/lib/utils';\nimport {useCommentsContext} from '~/pages/viewer_page/comments_context';\nimport {Annotations} from '~/pages/viewer_page/components/annotations/annotations';\nimport {NEW_THREAD_COMPOSER_CLASSNAME} from '~/pages/viewer_page/components/comments/comment_composers/comment_composers';\nimport {CONTROL_BAR_HEIGHT} from '~/pages/viewer_page/components/reel_video_controls';\nimport {StatusDropdownWithConsumer} from '~/pages/viewer_page/components/status_dropdown_with_consumer';\nimport {useSyncCollabSharedState} from '~/pages/viewer_page/components/sync_collab/shared_state';\nimport {useMobileKeyboardState} from '~/pages/viewer_page/components/use_mobile_keyboard_state';\nimport {TimeBasedMediaVersionSelectorWithConsumer} from '~/pages/viewer_page/components/versions/versions_dropdown';\nimport {\n  MOBILE_KEYBOARD_IS_OPEN_CLASSNAME,\n  Video,\n} from '~/pages/viewer_page/components/video_viewer/video';\nimport {ViewerTopRow} from '~/pages/viewer_page/components/viewer_top_row';\nimport {useVideoViewerContext} from '~/pages/viewer_page/video_viewer_context';\nimport {\n  useViewerPageContext,\n  useViewerPageOnboardingContext,\n} from '~/pages/viewer_page/viewer_page_context';\nimport {\n  currOpenStepAtom,\n  hasCompletedAnyPreviousOnboardingActionsAtom,\n  lastCompletedStepAtom,\n  ONBOARDING_TYPE,\n  onboardingTypeAtom,\n  STEPS,\n} from '~/state/onboarding_v2';\nimport {clearTaskStateAtom, currentTaskStateAtom} from '~/state/task';\nimport {ViewerSidebarDisplayState, viewerSidebarDisplayStateAtom} from '~/state/viewer';\nimport {isInExtension} from '~/use_extensions';\n\nconst Container = styled.div`\n  height: 100%;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  margin: auto;\n\n  .${MOBILE_KEYBOARD_IS_OPEN_CLASSNAME} {\n    position: absolute;\n    top: 0;\n  }\n`;\n\ntype ContentProps = {\n  $focusStyles: FocusStyles;\n  $shouldHighlightLiveReview: boolean;\n};\nconst Content = styled.div<ContentProps>`\n  position: relative;\n  flex-grow: 1;\n  max-height: 100%;\n  overflow: hidden;\n  position: relative;\n  margin-top: ${(props) => (props.$shouldHighlightLiveReview ? `0` : spacing('Macro Small'))};\n  margin-bottom: ${CONTROL_BAR_HEIGHT}px;\n  .panelMode & {\n    margin-bottom: 0px;\n    margin-top: 0px;\n  }\n  @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n    margin-bottom: 0;\n    margin-top: 0;\n    flex-grow: 0;\n  }\n  @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) and (max-height: ${SMALL_SCREEN_HEIGHT_BREAKPOINT}px) {\n    flex-grow: 1;\n  }\n\n  ${(props) => props.$focusStyles};\n\n  ${(props) =>\n    props.$shouldHighlightLiveReview &&\n    `\n      border: ${spacing('2')} solid ${color('Identity On Purple')};\n      border-bottom: none;\n      border-radius: ${spacing('2')};\n    `}\n`;\n\nconst DueDateBannerContainer = styled.div`\n  padding-bottom: var(--dig-spacing__dimension__10);\n  margin-left: var(--dig-spacing__dimension__16);\n`;\n\nContent.displayName = 'Content';\n\nexport const VideoViewer = () => {\n  const {\n    currentUserHasEdit,\n    mediaMetadata,\n    loggingClient,\n    isHovered,\n    videoIsPlayingWhileTyping,\n    setVideoIsPlayingWhileTyping,\n    currentUserIsOwner,\n    liveReviewVideoIsDetached,\n    setLiveReviewVideoIsDetached,\n  } = useViewerPageContext();\n  const {selectedThreadId} = useCommentsContext();\n  const {playerStatus, videoPlayerInstance} = useVideoViewerContext();\n  const {isUserInCollabSession, hosts, iAmHost, liveReviewImprovsIsOn} = useSyncCollabSharedState();\n  const shouldShowLiveReviewImprovs = liveReviewImprovsIsOn && isUserInCollabSession;\n\n  const {isSmallScreenSize} = useViewport();\n  const viewerSidebarDisplayState = useAtomValue(viewerSidebarDisplayStateAtom);\n  const taskState = useAtomValue(currentTaskStateAtom);\n  const showDueDate = useIsReplayInGA();\n  const [isDueDateModalOpen, setIsDueDateModalOpen] = React.useState(false);\n  const clearTask = useSetAtom(clearTaskStateAtom);\n  const [showDueDateVersionModal, setShowDueDateVersionModal] = useAtom(dueDateVersionModalAtom);\n\n  const lastCompletedStep = useAtomValue(lastCompletedStepAtom);\n  const currOpenStep = useAtomValue(currOpenStepAtom);\n  const onboardingType = useAtomValue(onboardingTypeAtom);\n  const hasCompletedAnyPreviousOnboardingActions = useAtomValue(\n    hasCompletedAnyPreviousOnboardingActionsAtom,\n  );\n  const drawOnFileFocusStyles = useFocusRing([STEPS.DRAW_ON_FILE]);\n  const hasOnboardingWalkthrough = useIsOnOnboardingVideoWalkthroughPage();\n  const {updateViewerOnboardingActions} = useViewerPageOnboardingContext();\n  useOnboardingVideoWalkthrough();\n  const {handleSetOnboardingTypeByMediaType} = useOnboardingChecklist({\n    logEvent: loggingClient.logEvent.bind(loggingClient),\n  });\n\n  const [showDueDateVersionModalErrorText, setShowDueDateVersionModalErrorText] =\n    React.useState(false);\n  const [dueDateDeleteRequestInProgress, setDueDateDeleteRequestInProgress] = React.useState(false);\n  const [showDueDateBanner, setShowDueDateBanner] = React.useState(false);\n  const handleRemoveDueDate = async () => {\n    setShowDueDateVersionModalErrorText(false);\n    setDueDateDeleteRequestInProgress(true);\n\n    try {\n      if (!taskState.isLoading && taskState.task?.taskId) {\n        await deleteTask(taskState.task.taskId);\n        clearTask(mediaMetadata.videoId);\n\n        loggingClient.logEvent('remove_due_date');\n        setShowDueDateVersionModal(false);\n      } else {\n        throw new Error('Task ID is missing.');\n      }\n    } catch (e) {\n      setShowDueDateVersionModalErrorText(true);\n    }\n\n    setDueDateDeleteRequestInProgress(false);\n  };\n  const handleCloseDueDateVersionModal = () => {\n    setShowDueDateVersionModal(false);\n  };\n  const [showDueDateSnackbar, setShowDueDateSnackbar] = React.useState(false);\n  const dismissDueDateSnackbar = () => setShowDueDateSnackbar(false);\n\n  const sessionContext = useReelAppGlobalState();\n\n  const pauseWhileTypingEnabled =\n    sessionContext.status === 'logged in'\n      ? sessionContext.preferenceSettingMetadata.REPLAY_SETTINGS_COMMENTS_PAUSE_WHEN_TYPING\n      : 'OFF';\n\n  React.useEffect(() => {\n    // we don't want to force pause after commenting or completing drawomg while doing onboarding so we can go to the next step\n    const justCompletedOnboardingStep =\n      !videoPlayerInstance?.paused() &&\n      hasOnboardingWalkthrough &&\n      !!lastCompletedStep &&\n      [STEPS.DRAW_ON_FILE, STEPS.COMMENT_ON_FILE].includes(lastCompletedStep);\n\n    if (\n      videoIsPlayingWhileTyping &&\n      pauseWhileTypingEnabled === 'ON' &&\n      videoPlayerInstance &&\n      !justCompletedOnboardingStep\n    ) {\n      const wasPlaying = !videoPlayerInstance.paused();\n      videoPlayerInstance.pause();\n      setVideoIsPlayingWhileTyping(false);\n      // consider the detachment only if the video was playing and we don't want to interrupt it\n      if (wasPlaying && shouldShowLiveReviewImprovs && !iAmHost) {\n        setLiveReviewVideoIsDetached(true);\n      }\n    }\n  }, [\n    currOpenStep,\n    hasOnboardingWalkthrough,\n    iAmHost,\n    lastCompletedStep,\n    pauseWhileTypingEnabled,\n    setLiveReviewVideoIsDetached,\n    setVideoIsPlayingWhileTyping,\n    shouldShowLiveReviewImprovs,\n    videoIsPlayingWhileTyping,\n    videoPlayerInstance,\n  ]);\n\n  React.useEffect(() => {\n    if (mediaMetadata.isDemo) {\n      loggingClient.logEvent('succeed_open_replay_demo');\n      if (sessionContext.status === 'logged in') {\n        // if a user has the new onboarding walkthrough video set and the flags, but the type not set and has not completed previous onboarding, then set the onboarding type to show the checklist\n        if (\n          hasOnboardingWalkthrough &&\n          !onboardingType &&\n          !hasCompletedAnyPreviousOnboardingActions\n        ) {\n          handleSetOnboardingTypeByMediaType(undefined, ONBOARDING_TYPE.VIDEO_WITHOUT_FILE);\n        } else {\n          updateViewerOnboardingActions({browse_demo_prompt_actioned: true});\n        }\n      }\n    }\n  }, [\n    handleSetOnboardingTypeByMediaType,\n    hasCompletedAnyPreviousOnboardingActions,\n    hasOnboardingWalkthrough,\n    loggingClient,\n    mediaMetadata,\n    onboardingType,\n    sessionContext.status,\n    updateViewerOnboardingActions,\n  ]);\n\n  const statusDropdownSlot =\n    viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension() ? (\n      <StatusDropdownWithConsumer buttonSize=\"standard\" buttonType=\"opacity\" />\n    ) : (\n      <div />\n    );\n  const versionSelector =\n    viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension() ? (\n      <TimeBasedMediaVersionSelectorWithConsumer\n        loggingClient={loggingClient}\n        mediaMetadata={mediaMetadata}\n        videoPlayerInstance={videoPlayerInstance}\n      />\n    ) : (\n      <div />\n    );\n\n  const handleRemoveDueDateBanner = () => {\n    setShowDueDateBanner(false);\n  };\n\n  React.useEffect(() => {\n    const doesDueDateExist =\n      currentUserIsOwner &&\n      (viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension()) &&\n      (!taskState.isLoading ? (taskState.task?.dueDate ? true : false) : false) &&\n      !isSmallScreenSize;\n\n    setShowDueDateBanner(doesDueDateExist);\n  }, [currentUserIsOwner, isSmallScreenSize, showDueDate, taskState, viewerSidebarDisplayState]);\n\n  const dueDateBanner = showDueDateBanner ? (\n    <DueDateBannerContainer>\n      <DueDateBanner\n        dueDate={!taskState.isLoading ? taskState.task?.dueDate : undefined}\n        editable={currentUserHasEdit}\n        isLoading={taskState.isLoading}\n        onClick={() => {\n          setIsDueDateModalOpen((prevState) => !prevState);\n        }}\n        onRequestClose={handleRemoveDueDateBanner}\n      />\n    </DueDateBannerContainer>\n  ) : (\n    <div />\n  );\n\n  const dueDateSlot =\n    showDueDate &&\n    !currentUserIsOwner &&\n    (viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension()) ? (\n      <DueDate\n        dueDate={!taskState.isLoading ? taskState.task?.dueDate : undefined}\n        editable={currentUserHasEdit}\n        isLoading={taskState.isLoading}\n        onClick={() => {\n          setIsDueDateModalOpen((prevState) => !prevState);\n\n          loggingClient.logEvent('select_open_due_date', {source: 'video_page'});\n        }}\n      />\n    ) : (\n      <div />\n    );\n\n  React.useEffect(() => {\n    const searchParams = new URLSearchParams(window.location.search);\n    const showDueDateSearchParam = searchParams.get('show_due_date');\n    if (showDueDateSearchParam === 'true') {\n      setIsDueDateModalOpen(true);\n    }\n  }, []);\n\n  const showControls = !isInExtension() || isHovered || Boolean(selectedThreadId);\n\n  const mobileKeyboardState = useMobileKeyboardState(`.${NEW_THREAD_COMPOSER_CLASSNAME}`);\n\n  const showTopRow =\n    !isSmallScreenSize ||\n    (playerStatus !== PLAYER_STATUS.PLAYING && mobileKeyboardState.status !== 'open');\n\n  // Narrow the type to only AVProp\n  if (mediaMetadata.type !== 'av') {\n    return null;\n  }\n\n  const shouldShowLiveReviewBorder = shouldShowLiveReviewImprovs && !liveReviewVideoIsDetached;\n  return (\n    <Container\n      className={mobileKeyboardState.status === 'open' ? MOBILE_KEYBOARD_IS_OPEN_CLASSNAME : ''}\n      data-testid=\"video-viewer\"\n    >\n      {dueDateBanner}\n      <ViewerTopRow\n        dueDateSlot={dueDateSlot}\n        statusDropdownSlot={statusDropdownSlot}\n        versionSelectorSlot={versionSelector}\n        visible={showControls && showTopRow}\n      />\n      {shouldShowLiveReviewBorder && (\n        <FocusTab fillColor={color('Identity On Purple')} textColor={color('Identity Purple')}>\n          {iAmHost ? (\n            <FormattedMessage\n              defaultMessage=\"Following you\"\n              description=\"Label on focus tab indicating live review session is hosted by current user\"\n              id=\"F5I3zy\"\n            />\n          ) : hosts.length ? (\n            <FormattedMessage\n              defaultMessage=\"Following {hostName}\"\n              description=\"Label on focus tab indicating live review session is hosted by someone else\"\n              id=\"0bRlT6\"\n              values={{hostName: hosts[0].name}}\n            />\n          ) : (\n            <FormattedMessage\n              defaultMessage=\"Following host\"\n              description=\"Label on focus tab indicating live review session is hosted by someone else but we don't know the name\"\n              id=\"cHL+6K\"\n            />\n          )}\n        </FocusTab>\n      )}\n      <Content\n        $focusStyles={drawOnFileFocusStyles}\n        $shouldHighlightLiveReview={shouldShowLiveReviewBorder}\n      >\n        <Video showControls={showControls} url={getPlaylistUrl(mediaMetadata.transcodeUrl)} />\n        <Annotations />\n      </Content>\n      <AddDueDateModal\n        handleCloseModal={() => setIsDueDateModalOpen(false)}\n        handleShowDueDateSnackbar={() => setShowDueDateSnackbar(true)}\n        logEvent={loggingClient.logEvent.bind(loggingClient)}\n        open={isDueDateModalOpen}\n        videoId={mediaMetadata.videoId}\n      />\n      <DueDateVersionModal\n        currentVersion={mediaMetadata.versionNum}\n        handleCloseModal={handleCloseDueDateVersionModal}\n        handleRemoveDueDate={handleRemoveDueDate}\n        isOpen={showDueDateVersionModal}\n        projectName={mediaMetadata.projectName}\n        requestInProgress={dueDateDeleteRequestInProgress}\n        showErrorText={showDueDateVersionModalErrorText}\n      />\n      <DueDateSnackbar handleCloseSnackbar={dismissDueDateSnackbar} open={showDueDateSnackbar} />\n    </Container>\n  );\n};\n","import {useAtom, useAtomValue} from 'jotai';\nimport {useIntl} from 'react-intl';\n\nimport {Snackbar} from '@dropbox/dig-components/snackbar';\n\nimport {Button} from '~/components/button';\nimport {ReelSnackbar, SnackbarCloseMessage} from '~/components/snackbar';\n\nimport {\n  firstMentionNameInCommentComposerAtom,\n  isFileSharedSnackbarOpenAtom,\n  totalMentionsInCommentComposerAtom,\n} from './comment_composers_state';\n\nexport const FileSharedSnackbar = () => {\n  const intl = useIntl();\n  const [isOpen, setIsOpen] = useAtom(isFileSharedSnackbarOpenAtom);\n  const firstMentionName = useAtomValue(firstMentionNameInCommentComposerAtom);\n  const totalMentions = useAtomValue(totalMentionsInCommentComposerAtom);\n  const onClose = () => setIsOpen(false);\n\n  let msg;\n  if (totalMentions === 0) {\n    return null;\n  } else if (totalMentions === 1) {\n    msg = intl.formatMessage(\n      {\n        defaultMessage: 'Shared file with {firstMentionName}',\n        id: 'ncbYI2',\n        description:\n          'Snackbar text that tells the user that the file has been shared with the person mentioned in the comment',\n      },\n      {\n        firstMentionName: firstMentionName,\n      },\n    );\n  } else {\n    const otherMentions = totalMentions - 1;\n    msg = intl.formatMessage(\n      {\n        defaultMessage:\n          'Shared file with {firstMentionName} and {otherMentions, plural, one {1 other} other {# others}}',\n        id: 'x2WCdJ',\n        description:\n          'Snackbar text that tells the user that the file has been shared with the person mentioned in the comment and other people',\n      },\n      {\n        firstMentionName: firstMentionName,\n        otherMentions: otherMentions,\n      },\n    );\n  }\n\n  return (\n    <ReelSnackbar onRequestClose={onClose} open={isOpen} timeout={7000}>\n      <Snackbar.Message>{msg}</Snackbar.Message>\n      <Snackbar.Actions>\n        <Button onClick={onClose} variant=\"transparent\">\n          <SnackbarCloseMessage />\n        </Button>\n      </Snackbar.Actions>\n    </ReelSnackbar>\n  );\n};\n","import React from 'react';\n\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Snackbar} from '@dropbox/dig-components/snackbar';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {FailLine} from '@dropbox/dig-icons/assets';\n\nimport {Button} from '~/components/button';\nimport {SnackbarCloseMessage} from '~/components/snackbar';\nimport {useCommentsContext} from '~/pages/viewer_page/comments_context';\nimport {\n  ReplayCommentErrorType,\n  ReplayThreadErrorType,\n} from '~/pages/viewer_page/comments_view_types.d';\n\nconst ERROR_COOKIE_SNACKBAR_HEIGHT = 10;\n\nconst ErrorBannerContainer = styled('div')<{$isActive: boolean}>`\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: ${(props) => (props.$isActive ? ERROR_COOKIE_SNACKBAR_HEIGHT : 0) + 50}px;\n  margin: auto;\n  width: 60%;\n  z-index: 10000;\n  visibility: ${(props) => (props.$isActive ? 'visible' : 'hidden')};\n`;\n\nexport const CommentErrorBanner = () => {\n  const {\n    deleteComment,\n    error,\n    replyToThread,\n    resolveThread,\n    setError,\n    unresolveThread,\n    setCurrentlyEditingComment,\n  } = useCommentsContext();\n\n  const intl = useIntl();\n  const postText = intl.formatMessage({\n    defaultMessage: 'We were unable to post the comment.',\n    id: '1kZ2Yy',\n    description: 'Error text that is displayed when posting a comment fails',\n  });\n  const deleteText = intl.formatMessage({\n    defaultMessage: 'We were unable to delete the comment.',\n    id: 'ezUPip',\n    description: 'Error text that is displayed when deleting a comment fails',\n  });\n  const resolveText = intl.formatMessage({\n    defaultMessage: 'We were unable to resolve the thread.',\n    id: '09xl+g',\n    description: 'Error text that displays when marking a comment thread as resolved fails',\n  });\n  const unresolveText = intl.formatMessage({\n    defaultMessage: 'We were unable to unresolve the thread.',\n    id: '9UWDem',\n    description: 'Error text that displays when marking a comment thread as not resolved fails',\n  });\n  const editText = intl.formatMessage({\n    defaultMessage: 'We were unable to edit the comment.',\n    id: 'TX6I9h',\n    description: 'Error text that displays when editing the content of a comment fails',\n  });\n  const unknownText = intl.formatMessage({\n    defaultMessage: 'We received an unexpected error.',\n    id: 'tYF0au',\n    description:\n      'Error text that displays when an unknown error is encountered when performing a comment action',\n  });\n\n  // To be localized in the future\n  let errorMessage = '';\n  if (error) {\n    switch (error.errorType) {\n      case ReplayCommentErrorType.CREATE_COMMENT:\n        errorMessage = postText;\n        break;\n      case ReplayThreadErrorType.CREATE_THREAD:\n        errorMessage = error.errorReason ? `${postText} ${error.errorReason}` : postText;\n        break;\n      case ReplayCommentErrorType.DELETE_COMMENT:\n        errorMessage = deleteText;\n        break;\n      case ReplayThreadErrorType.RESOLVE_THREAD:\n        errorMessage = resolveText;\n        break;\n      case ReplayThreadErrorType.UNRESOLVE_THREAD:\n        errorMessage = unresolveText;\n        break;\n      case ReplayCommentErrorType.EDIT_COMMENT:\n        errorMessage = editText;\n        break;\n      default:\n        errorMessage = unknownText;\n        break;\n    }\n  }\n\n  const onRetry = async () => {\n    if (!error) {\n      return;\n    }\n    setError(null);\n    switch (error.errorType) {\n      case ReplayCommentErrorType.CREATE_COMMENT:\n        if (error.comment) {\n          await replyToThread(\n            error.comment.mentions,\n            error.comment.content,\n            error.comment.threadID,\n            error.isPrivateComment,\n          );\n        }\n        break;\n      case ReplayThreadErrorType.CREATE_THREAD:\n        if (error.thread) {\n          // TODO(alan): Make this work --  grab it from the draft comments state.\n        }\n        break;\n      case ReplayCommentErrorType.DELETE_COMMENT:\n        if (error.comment) {\n          await deleteComment(error.comment, error.isPrivateComment);\n        }\n        break;\n      case ReplayThreadErrorType.RESOLVE_THREAD:\n        if (error.thread) {\n          await resolveThread(error.thread.id);\n        }\n        break;\n      case ReplayThreadErrorType.UNRESOLVE_THREAD:\n        if (error.thread) {\n          await unresolveThread(error.thread.id);\n        }\n\n        break;\n      case ReplayCommentErrorType.EDIT_COMMENT:\n        if (error.comment) {\n          setCurrentlyEditingComment(error.comment);\n        }\n        break;\n      default:\n        break;\n    }\n  };\n\n  const onClose = () => setError(null);\n\n  const retryable = React.useMemo(() => {\n    if (!error) {\n      return false;\n    }\n    switch (error.errorType) {\n      case ReplayCommentErrorType.CREATE_COMMENT:\n      case ReplayCommentErrorType.DELETE_COMMENT:\n      case ReplayCommentErrorType.EDIT_COMMENT:\n        return Boolean(error.comment);\n      case ReplayThreadErrorType.MARK_THREAD_READ:\n      case ReplayThreadErrorType.RESOLVE_THREAD:\n      case ReplayThreadErrorType.UNRESOLVE_THREAD:\n      case ReplayThreadErrorType.PIN_THREAD:\n      case ReplayThreadErrorType.UNPIN_THREAD:\n        return Boolean(error.thread);\n      case ReplayThreadErrorType.CREATE_THREAD:\n        return false;\n    }\n  }, [error]);\n\n  return (\n    <ErrorBannerContainer $isActive={!!error}>\n      <Snackbar open preferComposition>\n        <Snackbar.Accessory>\n          <UIIcon src={FailLine} />\n        </Snackbar.Accessory>\n        <Snackbar.Content>\n          <Snackbar.Message>{errorMessage}</Snackbar.Message>\n          <Snackbar.Actions>\n            {retryable ? (\n              <Button inverse onClick={onRetry} variant=\"transparent\">\n                <FormattedMessage\n                  defaultMessage=\"Retry\"\n                  description=\"Button that allows a user to retry a failed comment action\"\n                  id=\"6l4Xp2\"\n                />\n              </Button>\n            ) : null}\n            <Button inverse onClick={onClose} variant=\"transparent\">\n              <SnackbarCloseMessage />\n            </Button>\n          </Snackbar.Actions>\n        </Snackbar.Content>\n      </Snackbar>\n    </ErrorBannerContainer>\n  );\n};\n","import {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {OverlayAnchorRef} from '@dropbox/dig-components/overlay';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Text, Title} from '@dropbox/dig-components/typography';\n\nimport {Button} from '~/components/button';\n\nconst StepActions = styled('div')`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n`;\n\nexport const LiveReviewErrorTooltip = (props: {\n  title: string;\n  message: string;\n  open: boolean;\n  onClose: () => void;\n  triggerRef: OverlayAnchorRef;\n}) => {\n  return (\n    <Tooltip.Control\n      auto\n      maxWidth={272}\n      open={props.open}\n      placement=\"bottom-end\"\n      triggerRef={props.triggerRef}\n      variant=\"rich\"\n    >\n      <Title inverse size=\"medium\">\n        {props.title}\n      </Title>\n      <Text color=\"standard\" inverse tagName=\"p\">\n        {props.message}\n      </Text>\n      <StepActions>\n        <Button autoFocus inverse onClick={props.onClose} variant=\"outline\">\n          <FormattedMessage\n            defaultMessage=\"Got it\"\n            description=\"Text on the action button of the Live Review onboarding tooltip to acknowledge that the user has read the tooltip's message. Clicking the button dismisses the tooltip.\"\n            id=\"2TCfvL\"\n          />\n        </Button>\n      </StepActions>\n    </Tooltip.Control>\n  );\n};\n","import React from 'react';\n\nimport styled from 'styled-components';\n\nimport {Avatar, Facepile} from '@dropbox/dig-components/avatar';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\n\nimport {color, spacing} from '~/components/styled';\nimport {useViewport} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {getUserInitials} from '~/lib/facepile_utils';\nimport type {Locale} from '~/lib/i18n';\nimport type {ParticipantInfo} from '~/lib/sync_collab/types';\n\nimport {useViewerPageContext} from '../../viewer_page_context';\n\nconst AvatarList = styled.div`\n  display: flex;\n  margin-left: 20px;\n  z-index: 2;\n`;\n\nconst AvatarWrapper = styled.div<{$backgroundColor: string; $zIndex: number}>`\n  display: inline-block;\n  margin-left: -10px;\n  position: relative;\n  z-index: ${(props) => props.$zIndex};\n\n  & .tooltip {\n    align-items: center;\n    background-color: ${(props) => props.$backgroundColor};\n    box-sizing: border-box;\n    display: none;\n    height: 26px;\n    justify-content: center;\n    left: 50%;\n    min-width: 136px;\n    padding: 0 25px;\n    position: absolute;\n    top: calc(100% + 10px);\n    transform: translateX(-50%);\n  }\n  & .tooltip span {\n    inline-size: max-content;\n  }\n  &:hover .tooltip {\n    display: flex;\n  }\n  &:hover .tooltip:before {\n    border-color: transparent transparent ${(props) => props.$backgroundColor};\n    border-style: solid;\n    border-width: 0 5px 5px 5px;\n    content: '';\n    display: block;\n    height: 0;\n    left: 50%;\n    margin-top: 5px;\n    position: absolute;\n    top: -10px;\n    transform: translateX(-50%);\n    width: 0;\n  }\n`;\n\nconst MAX_FACEPILE_LENGTH = 5;\n\nconst FacepileAvatar = styled(Avatar)<{$clickable?: boolean}>`\n  /* Override the default border, which is set to the standard background\n   * color. We need the border to be the faint background color because it has\n   * to match the background of the app header where the facepile displays */\n  border: 2px solid var(--dig-color__background__subtle);\n  cursor: ${(props) => (!!props.$clickable ? 'pointer' : 'default')};\n`;\n\nconst FacepileWrapper = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: flex-end;\n  width: max-content;\n  margin-left: ${spacing('Micro Small')};\n`;\n\nconst FacepileItemWrapper = styled(Facepile.Item)`\n  .dig-Avatar {\n    background: ${color('Identity On Purple')};\n  }\n`;\n\nconst WithFacepileTooltip = (props: {\n  avatar: React.ReactNode;\n  backgroundColor: string;\n  stackIndex: number;\n  tooltipText: string;\n}) => {\n  const {avatar, backgroundColor, stackIndex, tooltipText} = props;\n\n  return (\n    <Tooltip title={tooltipText}>\n      <AvatarWrapper $backgroundColor={backgroundColor} $zIndex={stackIndex}>\n        {avatar}\n      </AvatarWrapper>\n    </Tooltip>\n  );\n};\n\nexport const SyncCollabFacepile = (props: {participants: ParticipantInfo[]}) => {\n  const {participants} = props;\n  const {isAnonymousUser, locale} = useReelAppGlobalState();\n  const {setIsGuestModalOpen} = useViewerPageContext();\n  // eslint-disable-next-line deprecation/deprecation\n  const {isSmallScreenSize} = useViewport();\n\n  const hasOverflow = participants.length > MAX_FACEPILE_LENGTH;\n\n  const visibleParticipants = hasOverflow\n    ? participants.slice(0, MAX_FACEPILE_LENGTH - 1)\n    : participants;\n\n  const onAvatarClick = React.useCallback(() => {\n    if (isAnonymousUser) {\n      setIsGuestModalOpen(true);\n    }\n  }, [isAnonymousUser, setIsGuestModalOpen]);\n\n  return (\n    <AvatarList>\n      {visibleParticipants.map((participant, idx) => (\n        <WithFacepileTooltip\n          avatar={\n            <FacepileAvatar\n              $clickable={(participant.isMe && isAnonymousUser) || undefined}\n              alt={`${participant.name} user avatar`}\n              backgroundColor={participant.color}\n              onClick={participant.isMe && isAnonymousUser ? onAvatarClick : undefined}\n              size={isSmallScreenSize ? 'xsmall' : 'standard'}\n              src={participant.photoUrl}\n            >\n              {getUserInitials(participant.name, locale)}\n            </FacepileAvatar>\n          }\n          backgroundColor={participant.color}\n          key={participant.sessionId}\n          stackIndex={participants.length - idx + 2}\n          // add 2 because that is the minimum z-index for the avatar to show\n          // up over the comments pane\n          tooltipText={participant.name}\n        />\n      ))}\n      {hasOverflow && (\n        <WithFacepileTooltip\n          avatar={\n            <FacepileAvatar>{participants.length - visibleParticipants.length}</FacepileAvatar>\n          }\n          backgroundColor=\"var(--dig-color__background__raised)\"\n          key=\"overflow\"\n          stackIndex={2}\n          tooltipText={`${participants.length - visibleParticipants.length} other users`}\n        />\n      )}\n    </AvatarList>\n  );\n};\n\nconst NEW_MAX_FACEPILE_LENGTH = 4;\n\ntype SyncCollabWatchersFacepileProps = {\n  consentTriggerRef: React.RefObject<HTMLDivElement>;\n  participants: ParticipantInfo[];\n  locale: Locale;\n};\n\nexport const SyncCollabWatchersFacepile = (props: SyncCollabWatchersFacepileProps) => {\n  const {consentTriggerRef, participants, locale} = props;\n\n  const hasOverflow = participants.length > NEW_MAX_FACEPILE_LENGTH;\n\n  const visibleParticipants = hasOverflow\n    ? participants.slice(0, NEW_MAX_FACEPILE_LENGTH - 1)\n    : participants;\n\n  return (\n    <FacepileWrapper ref={consentTriggerRef}>\n      {participants.length > 0 ? (\n        <Facepile size=\"small\">\n          {visibleParticipants.map((participant, index) => {\n            return (\n              <FacepileItemWrapper\n                alt={`${participant.name} user avatar`}\n                backgroundColor={participant.color}\n                key={index}\n                src={participant.photoUrl}\n              >\n                {getUserInitials(participant.name, locale)}\n              </FacepileItemWrapper>\n            );\n          })}\n          {hasOverflow && (\n            <FacepileItemWrapper>\n              {participants.length - visibleParticipants.length}\n            </FacepileItemWrapper>\n          )}\n        </Facepile>\n      ) : null}\n    </FacepileWrapper>\n  );\n};\n","import React from 'react';\n\nimport {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport * as reel from '@dropbox/api-v2-client/proto/reel_collab/reel_collab_pb';\nimport {Avatar} from '@dropbox/dig-components/avatar';\nimport {Toggle} from '@dropbox/dig-components/controls';\nimport {Menu} from '@dropbox/dig-components/menu';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Text} from '@dropbox/dig-components/typography';\n\nimport {Button} from '~/components/button';\nimport {color, radius, spacing} from '~/components/styled';\nimport {useReelAppGlobalState} from '~/context';\nimport {getUserInitials} from '~/lib/facepile_utils';\nimport {SyncCollabWatchersFacepile} from '~/pages/viewer_page/components/sync_collab/facepile';\nimport {useSyncCollabSharedState} from '~/pages/viewer_page/components/sync_collab/shared_state';\n\nconst WatcherWrapper = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  background: ${color('Identity On Purple')};\n  border-radius: ${radius('Medium')};\n`;\n\nconst LiveWrapper = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  background: rgba(255, 255, 255, 0.4);\n  padding: ${spacing('Micro Small')} 10px;\n  gap: 6px;\n  border-radius: ${radius('Small')};\n`;\n\nconst CapitalizedText = styled(Text)`\n  text-transform: uppercase;\n`;\n\nconst StyledButton = styled(Button)`\n  margin: ${spacing('Micro XSmall')};\n`;\n\nconst WatcherCountDropdown = styled.div`\n  display: flex;\n  flex-direction: column;\n  margin-left: ${spacing('Micro Small')};\n`;\n\nconst ParticipantRow = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  margin: 0 ${spacing('Micro Large')} ${spacing('Micro XSmall')} ${spacing('Micro Small')};\n`;\n\nconst NameSection = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: start;\n  padding: 7px 0 7px ${spacing('Micro Small')};\n`;\n\nconst LineDivider = styled.div`\n  height: 1px;\n  align-self: stretch;\n  background: ${color('Border Subtle')};\n`;\n\nconst HostSettingsWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  padding: ${spacing('Micro Small')} 0;\n`;\n\nconst HostSettingRow = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  flex-grow: 1;\n  padding: ${spacing('Micro Small')} ${spacing('Micro Medium')} ${spacing('Micro Small')}\n    ${spacing('Micro Small')};\n`;\n\nconst StyledToggle = styled(Toggle)`\n  margin-left: ${spacing('Micro Small')};\n`;\n\nconst LiveCircleSVG = () => {\n  return (\n    <svg fill=\"none\" height=\"6\" viewBox=\"0 0 6 6\" width=\"6\" xmlns=\"http://www.w3.org/2000/svg\">\n      <circle cx=\"3\" cy=\"3\" fill=\"#9B0032\" r=\"3\" />\n    </svg>\n  );\n};\n\ntype SyncCollabWatchersProps = {\n  consentTriggerRef: React.RefObject<HTMLDivElement>;\n  joinLeaveOnClick: () => void;\n};\n\nexport const SyncCollabWatchers = (props: SyncCollabWatchersProps) => {\n  const {consentTriggerRef, joinLeaveOnClick} = props;\n  const {\n    iAmHost,\n    participants,\n    showCursors,\n    setShowCursors,\n    sendShowCursorsSetting,\n    openSession,\n    setOpenSession,\n    sendOpenSessionSetting,\n  } = useSyncCollabSharedState();\n  const {locale} = useReelAppGlobalState();\n\n  const onShowCursorsSettingToggle = React.useCallback(() => {\n    const newValue = !showCursors;\n    sendShowCursorsSetting(newValue);\n    // Set state directly here since message does not echo back to host\n    setShowCursors(newValue);\n  }, [sendShowCursorsSetting, setShowCursors, showCursors]);\n\n  const onOpenSessionSettingToggle = React.useCallback(() => {\n    const newValue = !openSession;\n    sendOpenSessionSetting(newValue);\n    // Set state directly here since message does not echo back to host\n    setOpenSession(newValue);\n  }, [sendOpenSessionSetting, setOpenSession, openSession]);\n\n  return (\n    <>\n      <Menu.Wrapper>\n        {({getTriggerProps, getContentProps}) => (\n          <>\n            <WatcherWrapper {...getTriggerProps()}>\n              <LiveWrapper>\n                <LiveCircleSVG />\n                <CapitalizedText inverse size=\"small\" variant=\"label\">\n                  <FormattedMessage\n                    defaultMessage=\"Live\"\n                    description=\"Text displayed next to record icon in watcher to indicate live review is in progress. This will be displayed in all caps (when applicable) so text should be kept short.\"\n                    id=\"h6FRlF\"\n                  />\n                </CapitalizedText>\n              </LiveWrapper>\n              <SyncCollabWatchersFacepile\n                consentTriggerRef={consentTriggerRef}\n                locale={locale}\n                participants={Array.from(participants.values())}\n              />\n              <Button inverse variant=\"borderless\" withDropdownIcon>\n                <FormattedMessage\n                  defaultMessage=\"{count} watching\"\n                  description=\"Text that shows number of participants watching live review\"\n                  id=\"1UcADT\"\n                  values={{\n                    count: participants.size,\n                  }}\n                />\n              </Button>\n              <Tooltip\n                openDelay={600}\n                title={\n                  participants.size > 1 ? (\n                    <FormattedMessage\n                      defaultMessage=\"Leave live review\"\n                      description=\"Tooltip explaining to users the button to leave a live review session if there are more participants remaining\"\n                      id=\"1ON10O\"\n                    />\n                  ) : (\n                    <FormattedMessage\n                      defaultMessage=\"End live review\"\n                      description=\"Tooltip explaining to users the button to end a live review session if there are no more participants remaining\"\n                      id=\"HQLfJZ\"\n                    />\n                  )\n                }\n              >\n                <StyledButton inverse onClick={joinLeaveOnClick} size=\"small\" variant=\"primary\">\n                  {participants.size > 1 ? (\n                    <FormattedMessage\n                      defaultMessage=\"Leave\"\n                      description=\"Text for button to leave a live review session if there are more participants remaining\"\n                      id=\"eMsUXR\"\n                    />\n                  ) : (\n                    <FormattedMessage\n                      defaultMessage=\"End\"\n                      description=\"Text for button to end a live review session if there are no more participants remaining\"\n                      id=\"A9XxRU\"\n                    />\n                  )}\n                </StyledButton>\n              </Tooltip>\n            </WatcherWrapper>\n            <Menu.Content\n              {...getContentProps()}\n              auto={false}\n              minWidth=\"matchContainingWidth\"\n              placement=\"bottom-end\"\n            >\n              <Menu.Segment>\n                <WatcherCountDropdown>\n                  {Array.from(participants.values())\n                    .sort((a, b) => a.joinTimestamp - b.joinTimestamp)\n                    .map((participant, index) => {\n                      return (\n                        <ParticipantRow key={index}>\n                          <Avatar\n                            alt={`${participant.name} user avatar`}\n                            backgroundColor={participant.color}\n                            hasNoOutline\n                            key={index}\n                            size=\"small\"\n                            src={participant.photoUrl}\n                          >\n                            {getUserInitials(participant.name, locale)}\n                          </Avatar>\n                          <NameSection>\n                            <Text color=\"standard\" variant=\"label\">\n                              {participant.name}\n                            </Text>\n                            {participant.role === reel.LiveReviewUserRole.HOST && (\n                              <Text color=\"subtle\" size=\"small\" variant=\"label\">\n                                <FormattedMessage\n                                  defaultMessage=\"Host\"\n                                  description=\"Label indicating participant is a host\"\n                                  id=\"RLf3wq\"\n                                />\n                              </Text>\n                            )}\n                          </NameSection>\n                        </ParticipantRow>\n                      );\n                    })}\n                  {iAmHost && (\n                    <>\n                      <LineDivider />\n                      <HostSettingsWrapper>\n                        <HostSettingRow>\n                          <Text color=\"standard\" variant=\"label\">\n                            <FormattedMessage\n                              defaultMessage=\"Show cursors\"\n                              description=\"Text to indicator toggle setting to show cursors for live review\"\n                              id=\"/BbaRR\"\n                            />\n                          </Text>\n                          <StyledToggle\n                            isToggled={showCursors}\n                            onChange={onShowCursorsSettingToggle}\n                          />\n                        </HostSettingRow>\n                        <HostSettingRow>\n                          <Text color=\"standard\" variant=\"label\">\n                            <FormattedMessage\n                              defaultMessage=\"Anyone can control the screen\"\n                              description=\"Text to indicator toggle setting to allow anyone to control screens for live review\"\n                              id=\"HSCyMY\"\n                            />\n                          </Text>\n                          <StyledToggle\n                            isToggled={openSession}\n                            onChange={onOpenSessionSettingToggle}\n                          />\n                        </HostSettingRow>\n                      </HostSettingsWrapper>\n                    </>\n                  )}\n                </WatcherCountDropdown>\n              </Menu.Segment>\n            </Menu.Content>\n          </>\n        )}\n      </Menu.Wrapper>\n    </>\n  );\n};\n","import {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {OverlayAnchorRef} from '@dropbox/dig-components/overlay';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Text, Title} from '@dropbox/dig-components/typography';\n\nimport {Button} from '~/components/button';\n\nconst StepActions = styled('div')`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n`;\n\nexport const SyncCollabConsentTooltip = (props: {\n  open: boolean;\n  onClose: () => void;\n  triggerRef: OverlayAnchorRef;\n}) => {\n  return (\n    <Tooltip.Control\n      auto\n      maxWidth={240}\n      open={props.open}\n      placement=\"bottom-end\"\n      triggerRef={props.triggerRef}\n      variant=\"rich\"\n    >\n      <Title inverse size=\"medium\">\n        <FormattedMessage\n          defaultMessage=\"Just a reminder\"\n          description=\"Tooltip title for reminding the user of consent during a live collab session\"\n          id=\"QQJuwE\"\n        />\n      </Title>\n      <Text color=\"standard\" inverse tagName=\"p\">\n        <FormattedMessage\n          defaultMessage=\"Your name and photo are visible in live review.\"\n          description=\"Text on the body  of the tooltip to indicate what other participants will see during a live review session\"\n          id=\"/FpIzW\"\n        />\n      </Text>\n      <StepActions>\n        <Button autoFocus inverse onClick={props.onClose} variant=\"outline\">\n          <FormattedMessage\n            defaultMessage=\"Got it\"\n            description=\"Text on the action button of the Live Review onboarding tooltip to acknowledge that the user has read the tooltip's message. Clicking the button dismisses the tooltip.\"\n            id=\"2TCfvL\"\n          />\n        </Button>\n      </StepActions>\n    </Tooltip.Control>\n  );\n};\n","import React from 'react';\n\nimport type {IntlShape} from 'react-intl';\n\nimport {Link} from '@dropbox/dig-components/typography';\n\nimport type {MediaType} from '~/lib/api';\nimport type {LoggingClient} from '~/lib/logging/logger';\n\nexport const viewingAlone = (intl: IntlShape, loggingClient: LoggingClient) => (link?: string) => {\n  if (link) {\n    return intl.formatMessage(\n      {\n        defaultMessage:\n          'You’ve started a live review session. A live review link has been copied to your clipboard. <copy>Copy link</copy>',\n        id: 'gnMDd/',\n        description:\n          'Snackbar message that appears when a user joins or starts a live review session and they are the only one in the session, and a sharing link has been copied to the clipboad. Also includes a button to copy the link again.',\n      },\n      {\n        link: link,\n        copy: (str: React.ReactNode) => (\n          <Link\n            href=\"#\"\n            onClick={() => {\n              // eslint-disable-next-line deprecation/deprecation\n              loggingClient.logEvent('copy_reel_share_link', {\n                access_type: 'review',\n                link_item_type: 'file',\n                is_onboarding_share_step: 'false',\n                replay_media_type: 'none',\n                experiment_variant: 'none',\n              });\n              navigator.clipboard.writeText(link);\n            }}\n          >\n            {str}\n          </Link>\n        ),\n      },\n    );\n  } else {\n    return intl.formatMessage({\n      defaultMessage: 'You’ve started a live review session.',\n      id: 'b/DIBV',\n      description:\n        'Snackbar message that appears when a user joins or starts a live review session and they are the only one in the session',\n    });\n  }\n};\n\nexport const viewingWithOneOther = (\n  intl: IntlShape,\n  {\n    mediaType,\n    otherViewerName,\n  }: {\n    mediaType: MediaType.Audio | MediaType.Video;\n    otherViewerName: string;\n  },\n) =>\n  intl.formatMessage(\n    {\n      defaultMessage:\n        'You are {mediaType, select, audio {listening} other {watching}} with {otherViewerName}. {mediaType, select, audio {Audio playback is synchronized, and comments are visible to everyone in the live review session.} other {Video playback is synchronized, and drawings are visible to everyone in the live review session.}}',\n      id: '5d6HKf',\n      description:\n        'Snackbar message that appears when a user joins a live review session and there is one other person already in the session',\n    },\n    {\n      otherViewerName,\n      mediaType,\n    },\n  );\n\nexport const viewingWithMultipleOthers = (\n  intl: IntlShape,\n  {\n    mediaType,\n    numOtherParticipants,\n  }: {\n    mediaType: MediaType;\n    numOtherParticipants: number;\n  },\n) =>\n  intl.formatMessage(\n    {\n      defaultMessage:\n        'You are {mediaType, select, audio {listening} other {watching}} with {numOtherParticipants, plural, one {{numOtherParticipants} other participant} other {{numOtherParticipants} others}}. {mediaType, select, audio {Audio playback is synchronized, and comments are visible to everyone in the live review session.} other {Video playback is synchronized, and drawings are visible to everyone in the live review session.}}',\n      id: 'mYKiAW',\n      description:\n        'Snackbar message that appears when a user joins a live review session and there are multiple other people already in the session.',\n    },\n    {\n      mediaType,\n      numOtherParticipants,\n    },\n  );\n\nexport const viewingWithOneOtherWhoLeaves = (\n  intl: IntlShape,\n  {mediaType}: {mediaType: MediaType},\n) =>\n  intl.formatMessage(\n    {\n      defaultMessage:\n        'You are in a live review session. {mediaType, select, audio {Audio playback is synchronized, and comments are visible to everyone in the session.} other {Video playback is synchronized, and drawings are visible to everyone in the session.}}',\n      id: 'wXMn3f',\n      description:\n        'Snackbar message that appears when a user joins a live review session and the one other participant who was in it leaves the session before this message can appear, so they are in the session by themselves.',\n    },\n    {mediaType},\n  );\n\nexport const viewerJoinedYou = (\n  intl: IntlShape,\n  {\n    newViewerName,\n  }: {\n    newViewerName: string;\n  },\n) =>\n  intl.formatMessage(\n    {\n      defaultMessage: '{new_viewer_name} joined you in the live review session',\n      id: '+4VVQh',\n      description:\n        'Snackbar message that appears when another user joins the current user in a live session that is currently in progress and the live session only had the current user in it already',\n    },\n    {new_viewer_name: newViewerName},\n  );\n\nexport const viewerJoinedYouAndOneOther = (\n  intl: IntlShape,\n  {\n    newViewerName,\n    otherViewerName,\n  }: {\n    newViewerName: string;\n    otherViewerName: string;\n  },\n) =>\n  intl.formatMessage(\n    {\n      defaultMessage:\n        '{new_viewer_name} joined you and {other_viewer_name} in the live review session',\n      id: 'Q/2cee',\n      description:\n        'Snackbar message that appears when another user joins the current user in a live session that is currently in progress and the live session had the current user and one other user in it already',\n    },\n    {\n      new_viewer_name: newViewerName,\n      other_viewer_name: otherViewerName,\n    },\n  );\n\nexport const viewerJoinedYouAndMultipleOthers = (\n  intl: IntlShape,\n  {\n    numOtherParticipants,\n    newViewerName,\n  }: {\n    numOtherParticipants: number;\n    newViewerName: string;\n  },\n) =>\n  intl.formatMessage(\n    {\n      defaultMessage:\n        '{new_viewer_name} joined you and {num_other_participants, plural, one {{num_other_participants} other participant} other {{num_other_participants} others}} in the live review session',\n      id: 'dsf5Nm',\n      description:\n        'Snackbar message that appears when another user joins the current user in a live session that is currently in progress and the live session had more than 1 other participants besides the current user in the session already',\n    },\n    {\n      new_viewer_name: newViewerName,\n      num_other_participants: numOtherParticipants,\n    },\n  );\n\nexport const userDisconnectedDueToShutdown = (\n  intl: IntlShape,\n  {\n    secsToShutdown,\n  }: {\n    secsToShutdown: number;\n  },\n) => {\n  const date = new Date(0);\n  date.setSeconds(secsToShutdown);\n\n  const getMinutesMsg = (minutesLeft: number) =>\n    intl.formatMessage(\n      {\n        defaultMessage:\n          'Review session will shut down in {minutes_left, plural, one {{minutes_left} minute} other {{minutes_left} minutes}} for maintenance. Please save any unsaved drawings or comments to avoid losing any data.',\n        id: 'SHQ1Sh',\n        description:\n          'Tooltip content when the service is restarting for maintenance in more than 1 minute',\n      },\n      {\n        minutes_left: minutesLeft,\n      },\n    );\n\n  const getSecondsMsg = (secondsLeft: number) =>\n    intl.formatMessage(\n      {\n        defaultMessage:\n          'Review session will shut down in {seconds_left, plural, one {{seconds_left} second} other {{seconds_left} seconds}} for maintenance. Please save any unsaved drawings or comments to avoid losing any data.',\n        id: 'LI/v2P',\n        description:\n          'Tooltip content when the service is restarting for maintenance in less than 1 minute',\n      },\n      {\n        seconds_left: secondsLeft,\n      },\n    );\n\n  return date.getMinutes() >= 1\n    ? getMinutesMsg(date.getMinutes())\n    : getSecondsMsg(date.getSeconds());\n};\n\nexport const othersWatching = (\n  intl: IntlShape,\n  {numOtherParticipants}: {numOtherParticipants: number},\n) =>\n  intl.formatMessage(\n    {\n      defaultMessage:\n        '{num_other_participants, plural, one {{num_other_participants} watching} other {{num_other_participants} watching now}}',\n      id: 'zkN/SU',\n      description:\n        'Text that sits next to the list of other current participants in an active live review session that summarizes how many other participants there are',\n    },\n    {\n      num_other_participants: numOtherParticipants,\n    },\n  );\n","import React from 'react';\n\nimport ReactDOM from 'react-dom';\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport {useLocation} from 'react-router';\nimport styled from 'styled-components';\n\nimport {Snackbar} from '@dropbox/dig-components/snackbar';\nimport {Text} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {PersonLeaveLine, PersonMultipleLine} from '@dropbox/dig-icons/assets';\n\nimport {Button} from '~/components/button';\nimport {displayNameForParticipant} from '~/components/common';\nimport {ReelSnackbar} from '~/components/snackbar';\nimport {useViewport} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {getReelLink, MediaType} from '~/lib/api';\nimport {ReplayError, ReplayErrorCategory, reportException} from '~/lib/error_reporting';\nimport {USER_METADATA_FIELD} from '~/lib/provisions';\nimport {JoinState} from '~/lib/sync_collab/types';\nimport {LiveReviewErrorTooltip} from '~/pages/viewer_page/components/sync_collab/live_review_error_tooltip';\nimport {useSyncCollabSharedState} from '~/pages/viewer_page/components/sync_collab/shared_state';\nimport {SyncCollabWatchers} from '~/pages/viewer_page/components/sync_collab/sync_collab_watchers';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\n\nimport {SyncCollabFacepile} from './facepile';\nimport {SyncCollabConsentTooltip} from './sync_collab_consent_tooltip';\nimport * as messages from './sync_collab_messages';\nimport {useVideoViewerContext} from '../../video_viewer_context';\nimport {useVersionsContext} from '../versions_context';\n\nconst SyncCollabWrapper = styled('div')`\n  display: flex;\n  align-items: center;\n`;\n\nconst FacepileWrapper = styled('div')`\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: flex-end;\n  width: max-content;\n`;\n\ntype SyncCollabEntrypointProps = {\n  disabled: boolean;\n};\n\nconst SyncCollabEntrypoint = ({disabled: disabledProp}: SyncCollabEntrypointProps) => {\n  const {\n    participants,\n    setShowInviteTooltip,\n    joinState,\n    setJoinState,\n    shutdownState,\n    setShutdownState,\n    getCurrentSessionId,\n    subscribeToMessages,\n  } = useSyncCollabSharedState();\n  const {loggingClient, markCollabOnboardingStepComplete, mediaMetadata} = useViewerPageContext();\n  const {preloadVideoToFirstFrame} = useVideoViewerContext();\n  const sessionContext = useReelAppGlobalState();\n  const {liveReviewImprovsIsOn} = useSyncCollabSharedState();\n  const {currentUserIsOwner} = useViewerPageContext();\n\n  const location = useLocation();\n  const [snackbarMsg, setSnackbarMsg] = React.useState<React.ReactNode | string | null>(null);\n  const liveLink = React.useRef<string | undefined>(undefined);\n\n  const intl = useIntl();\n\n  const participantText = React.useMemo(() => {\n    switch (joinState) {\n      case JoinState.JOINED:\n        return messages.othersWatching(intl, {numOtherParticipants: participants.size});\n      default:\n        return '';\n    }\n\n    return null;\n  }, [intl, joinState, participants.size]);\n\n  const firstParticipantSnackbarMsg = messages.viewingAlone(intl, loggingClient);\n\n  const fetchLink = React.useCallback(async () => {\n    return getReelLink(mediaMetadata.videoId, false, true, 'file');\n  }, [mediaMetadata.videoId]);\n\n  React.useEffect(() => {\n    const {mediaType} = mediaMetadata;\n\n    if (mediaType !== MediaType.Video && mediaType !== MediaType.Audio) return;\n\n    return subscribeToMessages((msg) => {\n      const currentSessionId = getCurrentSessionId();\n      const participantCount = participants.size;\n      if (!currentSessionId) {\n        return;\n      }\n      const otherParticipants = new Map(participants);\n      otherParticipants.delete(currentSessionId);\n\n      if (msg.messageType.case === 'replayEnd' && msg.messageType.value) {\n        if (currentUserIsOwner) {\n          // eslint-disable-next-line deprecation/deprecation\n          loggingClient.logEvent('succeed_live_review_session_start', {\n            participants: participantCount,\n          });\n        } else {\n          // eslint-disable-next-line deprecation/deprecation\n          loggingClient.logEvent('succeed_live_review_session_join', {\n            participants: participantCount,\n            is_guest: sessionContext.status === 'logged in' ? 'false' : 'true',\n          });\n        }\n        if (participantCount === 1 && participants.has(currentSessionId)) {\n          // We only want the first owner that joins the session to see the 'copy live review link' message.\n          setSnackbarMsg(\n            firstParticipantSnackbarMsg(currentUserIsOwner ? liveLink.current : undefined),\n          );\n        } else if (participantCount === 2) {\n          const otherViewer =\n            otherParticipants.size > 0 ? Array.from(otherParticipants.values())[0] : null;\n          if (otherViewer) {\n            setSnackbarMsg(\n              messages.viewingWithOneOther(intl, {\n                mediaType,\n                otherViewerName: displayNameForParticipant(otherViewer.name),\n              }),\n            );\n          } else {\n            // Fall back to this message if the one other participant leaves right as the snackbar appears\n            setSnackbarMsg(messages.viewingWithOneOtherWhoLeaves(intl, {mediaType}));\n          }\n        } else if (participantCount > 2) {\n          setSnackbarMsg(\n            messages.viewingWithMultipleOthers(intl, {\n              mediaType,\n              numOtherParticipants: participantCount - 1,\n            }),\n          );\n        }\n      } else if (msg.messageType.case === 'join' && msg.messageType.value) {\n        // TODO: Handle logged in users.\n        const userJoin = msg.messageType.value;\n        const newViewerFullName =\n          userJoin.user.case === 'userInfo' ? userJoin.user.value.name : userJoin.user.value;\n        const newViewerName = displayNameForParticipant(newViewerFullName!);\n        if (otherParticipants.size === 1) {\n          setSnackbarMsg(messages.viewerJoinedYou(intl, {newViewerName}));\n        } else if (otherParticipants.size === 2) {\n          const otherViewer =\n            otherParticipants.size > 0 ? Array.from(otherParticipants.values())[0] : null;\n          if (otherViewer) {\n            setSnackbarMsg(\n              messages.viewerJoinedYouAndOneOther(intl, {\n                newViewerName,\n                otherViewerName: displayNameForParticipant(otherViewer.name),\n              }),\n            );\n          } else {\n            // Fall back to this message if the one other participant leaves right as the snackbar appears\n            setSnackbarMsg(\n              intl.formatMessage(\n                {\n                  defaultMessage: '{new_viewer_name} joined the live review session',\n                  id: '6Rj32D',\n                  description:\n                    'Snackbar message that appears when another user joins the current user in a live session that is currently in progress and the live session had the current user and one other user in it already, but the one other user leaves right as the new user is joining',\n                },\n                {\n                  new_viewer_name: newViewerName,\n                },\n              ),\n            );\n          }\n        } else if (participantCount > 2) {\n          setSnackbarMsg(\n            messages.viewerJoinedYouAndMultipleOthers(intl, {\n              newViewerName,\n              numOtherParticipants: participantCount - 1,\n            }),\n          );\n        }\n      }\n    });\n  });\n\n  const closeSnackbar = () => {\n    if (snackbarMsg === firstParticipantSnackbarMsg()) {\n      if (participants.size === 1) {\n        setShowInviteTooltip(true);\n      }\n    }\n    setSnackbarMsg(null);\n  };\n\n  // Consent Tooltip\n  const consentTriggerRef = React.useRef<HTMLDivElement>(null);\n  const [consentTooltipOpen, setConsentTooltipOpen] = React.useState(false);\n\n  const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n  const showErrorTooltip = React.useMemo(() => {\n    return (\n      joinState === JoinState.DISCONNECTED ||\n      joinState === JoinState.CONNECTION_ERROR ||\n      joinState === JoinState.ERROR_OLD_VERSION ||\n      joinState === JoinState.AUTH_FAILED ||\n      shutdownState.showShutdownMessage\n    );\n  }, [joinState, shutdownState]);\n\n  const tooltipTitle = React.useMemo(() => {\n    if (joinState === JoinState.DISCONNECTED) {\n      return intl.formatMessage({\n        defaultMessage: 'Lost Connection',\n        id: 'sCuDY5',\n        description:\n          'Tooltip title when something goes wrong and the user disconnects from the current live session due to a lost connection',\n      });\n    } else if (joinState === JoinState.CONNECTION_ERROR) {\n      return intl.formatMessage({\n        defaultMessage: 'Service Unavailable',\n        id: 'K0oB8Y',\n        description:\n          'Tooltip title when something goes wrong and the user cannot connect to the current live session due to the service being down',\n      });\n    } else if (joinState === JoinState.AUTH_FAILED) {\n      return intl.formatMessage({\n        defaultMessage: 'Auth Failed',\n        id: 'tbs1NU',\n        description:\n          \"Tooltip title when the live review session rejects the user's attempt to authenticate with it\",\n      });\n    } else if (joinState === JoinState.ERROR_OLD_VERSION) {\n      return intl.formatMessage({\n        defaultMessage: 'Client out of date',\n        id: 'FTa0Ap',\n        description:\n          'Tooltip title when something goes wrong and the user cannot connect to the current live session due to the client being out of date',\n      });\n    } else if (shutdownState.showShutdownMessage) {\n      return intl.formatMessage({\n        defaultMessage: 'Shutdown in progress',\n        id: 'CTiXwO',\n        description:\n          'Tooltip title when the user disconnects from the current live session due to the service restarting for maintenance',\n      });\n    }\n\n    return '';\n  }, [intl, joinState, shutdownState.showShutdownMessage]);\n\n  const tooltipMessage = React.useMemo(() => {\n    if (joinState === JoinState.DISCONNECTED) {\n      return intl.formatMessage({\n        defaultMessage: 'Please check your internet connection and try again.',\n        id: 'neMh6p',\n        description:\n          'Tooltip content when something goes wrong and the user disconnects from the current live session due to a lost connection',\n      });\n    } else if (joinState === JoinState.CONNECTION_ERROR) {\n      return intl.formatMessage({\n        defaultMessage: 'Please try again later.',\n        id: 'uNW0Dd',\n        description:\n          \"Tooltip content when the live review session rejects the user's attempt to authenticate with it\",\n      });\n    } else if (joinState === JoinState.AUTH_FAILED) {\n      return intl.formatMessage({\n        defaultMessage: 'Please reload and try again.',\n        id: '3Etzin',\n        description: 'Tooltip content when the live review service rejects ',\n      });\n    } else if (joinState === JoinState.ERROR_OLD_VERSION) {\n      return intl.formatMessage({\n        defaultMessage: 'Please refresh your browser before joining.',\n        id: 'fYALC/',\n        description:\n          'Tooltip content when something goes wrong and the user cannot connect to the current live session due to the client being out of date',\n      });\n    } else if (shutdownState.showShutdownMessage) {\n      return messages.userDisconnectedDueToShutdown(intl, {\n        secsToShutdown: shutdownState.timeToShutdown,\n      });\n    }\n    return '';\n  }, [intl, joinState, shutdownState.showShutdownMessage, shutdownState.timeToShutdown]);\n\n  const closeTooltip = React.useCallback(() => {\n    if (shutdownState.showShutdownMessage) {\n      setShutdownState({showShutdownMessage: false, timeToShutdown: shutdownState.timeToShutdown});\n    } else if (showErrorTooltip) {\n      setJoinState(JoinState.LEFT);\n    }\n  }, [\n    setJoinState,\n    setShutdownState,\n    showErrorTooltip,\n    shutdownState.showShutdownMessage,\n    shutdownState.timeToShutdown,\n  ]);\n\n  const joinLiveReviewSession = React.useCallback(() => {\n    loggingClient.setIsLiveReview(true);\n    // eslint-disable-next-line deprecation/deprecation\n    loggingClient.logEvent('select_live_review_join');\n    setJoinState(JoinState.PRELOADING);\n    preloadVideoToFirstFrame().then(() => setJoinState(JoinState.AUTHING));\n  }, [loggingClient, preloadVideoToFirstFrame, setJoinState]);\n\n  const startLiveReviewSession = React.useCallback(async () => {\n    loggingClient.setIsLiveReview(true);\n    // eslint-disable-next-line deprecation/deprecation\n    loggingClient.logEvent('select_live_review_start');\n    setJoinState(JoinState.PRELOADING);\n    preloadVideoToFirstFrame().then(() => setJoinState(JoinState.AUTHING));\n    // eslint-disable-next-line deprecation/deprecation\n    loggingClient.logEvent('create_reel_link', {\n      access_type: 'review',\n      link_item_type: 'file',\n      location: 'video_page_header',\n    });\n\n    const linkBlobPromise = fetchLink().then((link) => {\n      if (!link) {\n        // This error should already have been dispatched to the snackbar\n        return Promise.reject('link_is_empty');\n      }\n      liveLink.current = link;\n      return new Blob([link], {type: 'text/plain'});\n    });\n\n    if (typeof ClipboardItem === 'undefined') {\n      // ClipboardItem introduced in Firefox 127, playwright\n      // currently at 125, can be removed starting in 2025\n      return;\n    }\n\n    try {\n      // Safari treats user activation differently, but Chromium doesn't support Promise as a clipboardItem arg,\n      // until Chrome 98\n      // https://bugs.webkit.org/show_bug.cgi?id=222262.\n      // https://chromestatus.com/feature/5733949474078720#details\n      await navigator.clipboard.write([\n        new ClipboardItem({\n          'text/plain': linkBlobPromise,\n        }),\n      ]);\n      // eslint-disable-next-line deprecation/deprecation\n      loggingClient.logEvent('copy_reel_share_link', {\n        access_type: 'review',\n        link_item_type: 'file',\n        is_onboarding_share_step: 'false',\n        replay_media_type: 'none',\n        experiment_variant: 'none',\n      });\n    } catch {\n      // Chromium < 98\n      await navigator.clipboard\n        .write([\n          new ClipboardItem({\n            'text/plain': await linkBlobPromise,\n          }),\n        ])\n        .catch((e) => {\n          reportException(\n            new ReplayError({\n              error: e,\n              severity: 'non-critical',\n              tags: ['copy_to_clipboard_failed'],\n              category: ReplayErrorCategory.UncaughtException,\n            }),\n          );\n        });\n    }\n  }, [fetchLink, loggingClient, preloadVideoToFirstFrame, setJoinState]);\n\n  const joinLeaveOnClick = React.useCallback(() => {\n    if (![JoinState.LEFT, JoinState.NONE, JoinState.JOINED].includes(joinState)) {\n      return;\n    }\n\n    markCollabOnboardingStepComplete(3);\n    if (sessionContext.status === 'logged in') {\n      sessionContext.setMetadata(USER_METADATA_FIELD.REPLAY_FIRST_LIVE_REVIEW_HOSTED, true);\n    }\n\n    if (joinState === JoinState.JOINED) {\n      setJoinState(JoinState.LEAVING);\n      setSnackbarMsg(\n        intl.formatMessage({\n          defaultMessage: 'You left the live review session and are watching privately 👻',\n          id: '1aD08a',\n          description: 'Snackbar text that appears when the user leaves a live review session',\n        }),\n      );\n      return;\n    }\n    if (joinState === JoinState.LEFT || joinState === JoinState.NONE) {\n      if (!sessionContext.isAnonymousUser) {\n        setConsentTooltipOpen(true);\n      }\n      if (currentUserIsOwner) {\n        startLiveReviewSession();\n      } else {\n        joinLiveReviewSession();\n      }\n    }\n  }, [\n    sessionContext,\n    joinState,\n    markCollabOnboardingStepComplete,\n    setJoinState,\n    intl,\n    currentUserIsOwner,\n    startLiveReviewSession,\n    joinLiveReviewSession,\n  ]);\n\n  React.useEffect(() => {\n    const isLiveLink = Boolean(new URLSearchParams(location.search).get('live'));\n\n    if (isLiveLink) {\n      joinLeaveOnClick();\n    }\n    // NOTE: only run this if location changes.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [location]);\n\n  return (\n    <>\n      {liveReviewImprovsIsOn ? (\n        <>\n          {joinState !== JoinState.JOINED ? (\n            <JoinLeaveButton\n              disabledProp={disabledProp}\n              joinLeaveOnClick={joinLeaveOnClick}\n              joinState={joinState}\n              mediaType={mediaMetadata.mediaType}\n              showErrorTooltip={showErrorTooltip}\n              triggerRef={triggerRef}\n            />\n          ) : (\n            <SyncCollabWatchers\n              consentTriggerRef={consentTriggerRef}\n              joinLeaveOnClick={joinLeaveOnClick}\n            />\n          )}\n        </>\n      ) : (\n        <SyncCollabWrapper>\n          <FacepileWrapper ref={consentTriggerRef}>\n            <Text color=\"faint\" size=\"small\" style={{whiteSpace: 'nowrap'}}>\n              {participantText}\n            </Text>\n            {participants.size > 0 ? (\n              <SyncCollabFacepile\n                participants={Array.from(participants.values()).sort(\n                  (a, b) => a.joinTimestamp - b.joinTimestamp,\n                )}\n              />\n            ) : null}\n          </FacepileWrapper>\n          <JoinLeaveButton\n            disabledProp={disabledProp}\n            joinLeaveOnClick={joinLeaveOnClick}\n            joinState={joinState}\n            mediaType={mediaMetadata.mediaType}\n            showErrorTooltip={showErrorTooltip}\n            triggerRef={triggerRef}\n          />\n          <LiveReviewErrorTooltip\n            message={tooltipMessage}\n            onClose={closeTooltip}\n            open={showErrorTooltip}\n            title={tooltipTitle}\n            triggerRef={triggerRef}\n          />\n          <SyncCollabConsentTooltip\n            onClose={() => setConsentTooltipOpen(false)}\n            open={consentTooltipOpen}\n            triggerRef={consentTriggerRef}\n          />\n        </SyncCollabWrapper>\n      )}\n      <ReelSnackbar onRequestClose={closeSnackbar} open={snackbarMsg !== null} timeout={5000}>\n        <Snackbar.Message>{snackbarMsg}</Snackbar.Message>\n        <Snackbar.Actions>\n          <Button inverse onClick={closeSnackbar} variant=\"transparent\">\n            <FormattedMessage\n              defaultMessage=\"OK\"\n              description=\"Text on a button on the Live Review snackbar that dismisses the snackbar when clicked\"\n              id=\"iJQrLQ\"\n            />\n          </Button>\n        </Snackbar.Actions>\n      </ReelSnackbar>\n    </>\n  );\n};\n\ntype JoinLeaveButtonProps = {\n  disabledProp: boolean;\n  showErrorTooltip: boolean;\n  mediaType: MediaType;\n  joinState: JoinState;\n  joinLeaveOnClick: () => void;\n  triggerRef: React.RefObject<HTMLButtonElement>;\n};\n\nconst JoinLeaveButton = (props: JoinLeaveButtonProps) => {\n  const {disabledProp, showErrorTooltip, mediaType, joinState, joinLeaveOnClick, triggerRef} =\n    props;\n\n  const intl = useIntl();\n  const {currentUserIsOwner} = useViewerPageContext();\n  // eslint-disable-next-line deprecation/deprecation\n  const {isSmallScreenSize} = useViewport();\n\n  const joinButtonText = React.useMemo(() => {\n    const startMessage = intl.formatMessage({\n      defaultMessage: 'Start live review',\n      id: 'QUZhy7',\n      description:\n        'Text for button to join or start a new live review session when the current user is the owner of the video',\n    });\n\n    const joinMessage = intl.formatMessage({\n      defaultMessage: 'Join live review',\n      id: 'kzuili',\n      description:\n        'Text for button to join or start a new live review session when the current user is not the owner of the video',\n    });\n\n    switch (joinState) {\n      case JoinState.LEFT:\n      case JoinState.NONE:\n        return currentUserIsOwner ? startMessage : joinMessage;\n      case JoinState.JOINING:\n      case JoinState.AUTHING:\n      case JoinState.PRELOADING:\n        return intl.formatMessage({\n          defaultMessage: 'Joining...',\n          id: 'QkF+oD',\n          description:\n            \"Text for button to join or leave live review session right after a user has clicked 'join' and is still joining the current session\",\n        });\n      case JoinState.JOINED:\n        return intl.formatMessage({\n          defaultMessage: 'Leave',\n          id: 'h+TksM',\n          description: 'Text for button to leave current live review session',\n        });\n    }\n    return null;\n  }, [joinState, currentUserIsOwner, intl]);\n\n  return (\n    <Button\n      aria-label={joinButtonText || ''}\n      data-safe-to-unmask-name=\"start-live-review-button\"\n      disabled={disabledProp || showErrorTooltip || mediaType === MediaType.Document}\n      isLoading={\n        joinState === JoinState.PRELOADING ||\n        joinState === JoinState.JOINING ||\n        joinState === JoinState.AUTHING ||\n        joinState === JoinState.LEAVING\n      }\n      onClick={joinLeaveOnClick}\n      ref={triggerRef}\n      variant=\"opacity\"\n      withIconLeft={\n        <UIIcon src={joinState === JoinState.JOINED ? PersonLeaveLine : PersonMultipleLine} />\n      }\n    >\n      {!isSmallScreenSize && joinButtonText}\n    </Button>\n  );\n};\n\nconst VersionsAwareSyncCollabEntrypoint = (props: {}) => {\n  const versionsContext = useVersionsContext();\n\n  // The sync collab join button can only sync the user's version with the collab\n  // service if\n  // 1. the current version summaries are all loaded and\n  // 2. the user is not currently switching versions\n  const canUserSyncVersions =\n    versionsContext.areVersionsEnabled &&\n    versionsContext.currentVersionSummaries.isLoading === false &&\n    versionsContext.pendingVersionAction === 'none';\n\n  return <SyncCollabEntrypoint {...props} disabled={!canUserSyncVersions} />;\n};\n\nexport const PortalledSyncCollabEntryPoint = () => {\n  const [mounted, setMounted] = React.useState(false);\n  const portalledElementRef = React.useRef<null | React.ReactElement>(null);\n\n  React.useEffect(() => {\n    const portalTo = document.getElementById('sync-collab-join-button-portal');\n    if (portalTo) {\n      portalledElementRef.current = ReactDOM.createPortal(\n        <VersionsAwareSyncCollabEntrypoint />,\n        portalTo,\n      );\n      setMounted(true);\n    }\n  }, []);\n\n  return mounted ? portalledElementRef.current : null;\n};\n","/* eslint-disable deprecation/deprecation */\nimport React, {Suspense, useEffect} from 'react';\n\nimport {useQueryClient} from '@tanstack/react-query';\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\nimport {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Spinner} from '@dropbox/dig-components/progress_indicators';\nimport {Truncate} from '@dropbox/dig-components/truncate';\nimport {Text} from '@dropbox/dig-components/typography';\n\nimport {BasicAddOnUpsellModal} from '~/components/add_on_upsell_modal';\nimport {GuestLogInForm} from '~/components/guest_log_in_form';\nimport {ManageAccessModal} from '~/components/manage_access_modal';\nimport {OnboardingWelcome} from '~/components/onboarding_v2/onboarding_welcome';\nimport {OnboardingWelcomeForVideo} from '~/components/onboarding_v2/onboarding_welcome_for_video';\nimport {useGrantBook} from '~/components/password_cache_provider';\nimport type {VersionStatus} from '~/components/status/status';\nimport {StatusDropdown} from '~/components/status/status_dropdown';\nimport {color, spacing} from '~/components/styled';\nimport {SyncCommentsProvider} from '~/components/sync_comments_context';\nimport {\n  SMALL_SCREEN_HEIGHT_BREAKPOINT,\n  SMALL_SCREEN_WIDTH_BREAKPOINT,\n  useViewport,\n} from '~/components/viewport_context';\nimport {getTasksForItem, MediaType} from '~/lib/api';\nimport {useGetManagePeopleInfoForAssetVersionQuery} from '~/lib/api_queries';\nimport {isAVType, isImageLike} from '~/lib/helpers';\nimport {lazy} from '~/lib/lazy';\nimport {replayApi} from '~/lib/query_client';\nimport type {UploadInfo} from '~/lib/uploads/types';\nimport {useIsLiveCollabDisabled} from '~/lib/utils';\nimport {CommonTitle} from '~/pages/layout/components/common_header';\nimport {AnnotationsProvider} from '~/pages/viewer_page/annotations_context';\nimport {CommentsProvider, useCommentsContext} from '~/pages/viewer_page/comments_context';\nimport {ImageViewer} from '~/pages/viewer_page/components/image_viewer';\nimport PdfViewer from '~/pages/viewer_page/components/pdf_viewer';\nimport {VersionSelector} from '~/pages/viewer_page/components/versions/versions_dropdown';\nimport {useVersionsContext} from '~/pages/viewer_page/components/versions_context';\nimport {PlaybackLengthSnackbar} from '~/pages/viewer_page/components/video_controls/playback_length_indicators';\nimport {VideoViewer} from '~/pages/viewer_page/components/video_viewer/video_viewer';\nimport {ViewerSidebar} from '~/pages/viewer_page/components/viewer_sidebar';\nimport {ViewerTopRow} from '~/pages/viewer_page/components/viewer_top_row';\nimport {ImageViewerProvider} from '~/pages/viewer_page/image_viewer_context';\nimport {VideoViewerProvider} from '~/pages/viewer_page/video_viewer_context';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\nimport {selectedDraftCommentAndFrameAtom} from '~/state/draft_comments';\nimport {thumbnailSidebarDisplayStateAtom} from '~/state/pdf_viewer_state';\nimport {currentTaskStateAtom, loadingTaskStateAtom} from '~/state/task';\nimport {viewNewUploadFunctionAtom} from '~/state/uploads';\nimport {\n  modifyPeopleModalIsOpenAtom,\n  NavigationSidebarDisplayState,\n  upsellModalIsOpenAtom,\n  viewerAtom,\n  viewerBrowseToFolderAtom,\n  ViewerSidebarDisplayState,\n  viewerSidebarDisplayStateAtom,\n} from '~/state/viewer';\nimport {isInExtension, isInWebView} from '~/use_extensions';\n\nimport {NewThreadComposer} from './components/comments/comment_composers/comment_composers';\nimport {FileSharedSnackbar} from './components/comments/comment_composers/file_shared_snackbar';\nimport {CommentErrorBanner} from './components/comments/comments_error_banner';\nimport {useTeamProjectShareRecipients} from './components/comments/use_team_project_share_recipients';\nimport {PortalledSyncCollabEntryPoint} from './components/sync_collab/sync_collab_entrypoint';\nimport {LeftNavSubtitle} from './viewer_page_header';\n\nconst PDFThumbnailSidebar = lazy(\n  () => import(/* webpackChunkName: 'pdf-viewer' */ './components/documents/pdf_thumbnail_sidebar'),\n);\n\ninterface PageContainerDivProps {\n  $thumbnailSidebarOpen: boolean;\n}\n\nconst PageContainer = styled.div<PageContainerDivProps>`\n  margin-left: ${({$thumbnailSidebarOpen}) => ($thumbnailSidebarOpen ? 200 : 0)}px;\n  display: flex;\n  height: 100%;\n  overflow: hidden;\n  @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n    height: 100%;\n    flex-direction: column;\n    overflow: visible;\n  }\n`;\n\nPageContainer.displayName = 'PageContainer';\n\nconst ViewerWrapper = styled.div<{$isVersionLoading: boolean; $isImageViewer: boolean}>`\n  flex-grow: 1;\n  min-width: 0;\n  padding: ${({$isImageViewer, $isVersionLoading}) =>\n    $isImageViewer && !$isVersionLoading\n      ? `0 ${spacing('Micro Large')} ${spacing('Micro Large')}`\n      : spacing('Micro Large')};\n  position: relative;\n  background-color: ${({$isImageViewer}) => ($isImageViewer ? '#1e1919' : 'transparent')};\n\n  &.panelMode {\n    padding: 0;\n  }\n\n  @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n    padding: 0;\n    background-color: ${color('Background Raised')};\n    flex-grow: 0;\n  }\n  @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) and (max-height: ${SMALL_SCREEN_HEIGHT_BREAKPOINT}px) {\n    flex-grow: 0;\n  }\n\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n`;\n\nconst MobileTitleHeaderContainer = styled.div`\n  background: var(--dig-color__background__base);\n  z-index: 1; // Required to sit above images when zoomed\n`;\n\nconst MobileTitle = styled(CommonTitle)`\n  display: inline-flex;\n  gap: ${spacing('Micro Small')};\n  align-items: center;\n  margin: 0;\n  padding: ${spacing('Micro Large')} ${spacing('Micro Large')} 0;\n  overflow-x: hidden;\n  white-space: nowrap;\n`;\n\nconst MobileLeftNavSubtitleArea = styled.div`\n  margin-left: ${spacing('Micro Large')};\n  margin-top: ${spacing('Micro Small')};\n`;\n\nconst MobileSidebarWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  overflow-y: auto;\n`;\n\ntype MobiletitleHeaderProps = {\n  title: string;\n  folderName?: string;\n  extensionType?: string;\n};\n\nexport const MobileTitleHeader = ({title, folderName, extensionType}: MobiletitleHeaderProps) => {\n  return (\n    <MobileTitleHeaderContainer>\n      <MobileTitle>\n        <Truncate data-testid=\"common-title\" maxWidth={250}>\n          {title}\n        </Truncate>\n        <Text color=\"subtle\" size=\"xsmall\">\n          {extensionType}\n        </Text>\n      </MobileTitle>\n      {folderName && (\n        <MobileLeftNavSubtitleArea>\n          <LeftNavSubtitle folderName={folderName} />\n        </MobileLeftNavSubtitleArea>\n      )}\n    </MobileTitleHeaderContainer>\n  );\n};\n\nViewerWrapper.displayName = 'ViewerWrapper';\n\nconst ViewerPageContent = ({areCommentsEnabled}: {areCommentsEnabled: boolean}) => {\n  const queryClient = useQueryClient();\n\n  const {isGuestModalOpen, setIsGuestModalOpen, mediaMetadata, shareToken} = useViewerPageContext();\n  const versionsContext = useVersionsContext();\n  const {pendingDrawing, loggingClient} = useViewerPageContext();\n  const {createThread, threads, isInitialized} = useCommentsContext();\n\n  const {isSmallScreenSize, isMobileDevice} = useViewport();\n  const [viewerSidebarDisplayState, setViewerSidebarDisplayState] = useAtom(\n    viewerSidebarDisplayStateAtom,\n  );\n  const {navigationSidebarDisplayState} = useAtomValue(viewerAtom);\n  const thumbnailSidebarDisplayState = useAtomValue(thumbnailSidebarDisplayStateAtom);\n\n  const browseToFolder = useSetAtom(viewerBrowseToFolderAtom);\n  const useImageViewer = mediaMetadata.type == 'image';\n  const extensionType = mediaMetadata.fileExtension.toUpperCase().replace(/\\./g, '');\n\n  const managePeopleInfoQuery = useGetManagePeopleInfoForAssetVersionQuery(mediaMetadata);\n  const [upsellModalIsOpen, setUpsellModalIsOpen] = useAtom(upsellModalIsOpenAtom);\n  const [modifyPeopleModalIsOpen, setModifyPeopleModalIsOpen] = useAtom(\n    modifyPeopleModalIsOpenAtom,\n  );\n\n  const shareRecipients = useTeamProjectShareRecipients(mediaMetadata);\n\n  const showUpsellModal = !isMobileDevice;\n\n  // for upload drawer\n  const setViewNewUploadFunction = useSetAtom(viewNewUploadFunctionAtom);\n  useEffect(() => {\n    setViewNewUploadFunction({\n      fn: (upload: UploadInfo) => {\n        if (versionsContext.areVersionsEnabled && upload.videoId) {\n          versionsContext.navigateToNewMedia(upload.videoId, upload.versionId);\n        }\n      },\n    });\n\n    return () => {\n      setViewNewUploadFunction({fn: null});\n    };\n  }, [setViewNewUploadFunction, versionsContext]);\n\n  React.useEffect(() => {\n    const hasNonReactionComments = threads.some((thread) => !thread.isQuickReaction);\n\n    if (isInExtension()) {\n      setViewerSidebarDisplayState({\n        viewerSidebarDisplayState: ViewerSidebarDisplayState.REDCARPET,\n        isManuallySet: false,\n      });\n    } else if (versionsContext.isSharePage) {\n      if (!areCommentsEnabled) {\n        setViewerSidebarDisplayState({\n          viewerSidebarDisplayState: ViewerSidebarDisplayState.DISABLED,\n          isManuallySet: false,\n        });\n      } else if (isSmallScreenSize) {\n        // If comments are enabled, we should always show them on mobile as there is no sidebar to expand/collapse\n        setViewerSidebarDisplayState({\n          viewerSidebarDisplayState: ViewerSidebarDisplayState.SHOWING,\n          isManuallySet: false,\n        });\n      } else {\n        if (isInitialized) {\n          setViewerSidebarDisplayState({\n            viewerSidebarDisplayState:\n              threads.length && hasNonReactionComments\n                ? ViewerSidebarDisplayState.SHOWING\n                : ViewerSidebarDisplayState.HIDDEN,\n            isManuallySet: false,\n          });\n        }\n      }\n    } else {\n      if (threads.length === 0 || !hasNonReactionComments) {\n        setViewerSidebarDisplayState({\n          viewerSidebarDisplayState: ViewerSidebarDisplayState.HIDDEN,\n          isManuallySet: false,\n        });\n      } else if (navigationSidebarDisplayState === NavigationSidebarDisplayState.SHOWING) {\n        // Do nothing. (If navigation sidebar is open, we do not want to automatically close.)\n      } else {\n        setViewerSidebarDisplayState({\n          viewerSidebarDisplayState: ViewerSidebarDisplayState.SHOWING,\n          isManuallySet: false,\n        });\n      }\n    }\n    // We only want this to set the initial sidebar state, so it should run only when the comment thread initialization changes\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isInitialized]);\n\n  React.useEffect(() => {\n    if (isInExtension()) {\n      setViewerSidebarDisplayState({\n        viewerSidebarDisplayState: ViewerSidebarDisplayState.REDCARPET,\n        isManuallySet: false,\n      });\n    }\n  }, [setViewerSidebarDisplayState]);\n\n  const showCommmentComposer =\n    viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED &&\n    viewerSidebarDisplayState !== ViewerSidebarDisplayState.REDCARPET;\n\n  const composer = React.useMemo(() => {\n    return showCommmentComposer && <NewThreadComposer panelMode={false} />;\n  }, [showCommmentComposer]);\n\n  const [taskState, setTaskState] = useAtom(currentTaskStateAtom);\n  const setLoadingTask = useSetAtom(loadingTaskStateAtom);\n  const grantBook = useGrantBook(shareToken);\n\n  React.useEffect(() => {\n    (async () => {\n      const updated_task = await getTasksForItem(mediaMetadata.videoId, shareToken, grantBook);\n      const async_task_state = {\n        isLoading: false,\n        videoId: mediaMetadata.videoId,\n        task: updated_task,\n      };\n      setTaskState(async_task_state);\n    })();\n  }, [grantBook, setTaskState, shareToken, mediaMetadata.videoId]);\n\n  React.useEffect(() => {\n    if (!taskState.isLoading && mediaMetadata.videoId !== taskState.videoId) {\n      setLoadingTask();\n    }\n  }, [setLoadingTask, taskState, mediaMetadata.videoId]);\n\n  React.useEffect(() => {\n    if (mediaMetadata.folderId && mediaMetadata.folderName) {\n      browseToFolder({\n        folder: {\n          id: mediaMetadata.folderId,\n          name: mediaMetadata.folderName,\n        },\n        isInitialLoad: true,\n      });\n    }\n  }, [browseToFolder, mediaMetadata.folderId, mediaMetadata.folderName]);\n\n  const videoRef = React.useRef<HTMLDivElement | null>(null);\n  const className = isInExtension() ? 'panelMode' : '';\n\n  const selectedDraftCommentAndFrame = useAtomValue(selectedDraftCommentAndFrameAtom);\n\n  const onClose = React.useCallback(\n    (pendingPost?: boolean) => {\n      setIsGuestModalOpen(false);\n      if (pendingPost && selectedDraftCommentAndFrame) {\n        createThread(selectedDraftCommentAndFrame.draft, selectedDraftCommentAndFrame.frameRange);\n      }\n    },\n    [createThread, selectedDraftCommentAndFrame, setIsGuestModalOpen],\n  );\n\n  return (\n    <>\n      {mediaMetadata.type === 'document' && (\n        <Suspense fallback={null}>\n          <PDFThumbnailSidebar pdfMetadata={mediaMetadata} />\n        </Suspense>\n      )}\n      <PageContainer\n        $thumbnailSidebarOpen={\n          mediaMetadata.mediaType === MediaType.Document &&\n          thumbnailSidebarDisplayState === 'showing'\n        }\n        id=\"main\"\n      >\n        <ViewerWrapper\n          $isImageViewer={useImageViewer}\n          $isVersionLoading={false}\n          className={className}\n          ref={videoRef}\n        >\n          {useImageViewer ? (\n            <ImageViewer />\n          ) : mediaMetadata.mediaType === MediaType.Document ? (\n            <PdfViewer />\n          ) : (\n            <VideoViewer />\n          )}\n          {!isSmallScreenSize && composer}\n        </ViewerWrapper>\n        {!isSmallScreenSize &&\n          viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED &&\n          viewerSidebarDisplayState !== ViewerSidebarDisplayState.REDCARPET && <ViewerSidebar />}\n        {isSmallScreenSize && (\n          <MobileSidebarWrapper>\n            <MobileTitleHeader\n              extensionType={extensionType}\n              folderName={mediaMetadata.folderName}\n              title={mediaMetadata.projectName}\n            />\n            {viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED &&\n              viewerSidebarDisplayState !== ViewerSidebarDisplayState.REDCARPET && (\n                <ViewerSidebar />\n              )}\n            {composer}\n          </MobileSidebarWrapper>\n        )}\n        <GuestLogInForm\n          isGuestModalOpen={isGuestModalOpen}\n          loggingClient={loggingClient}\n          onClose={onClose}\n          pendingDrawing={pendingDrawing}\n        />\n        <ManageAccessModal\n          accessLevel={mediaMetadata.accessLevel ?? 'other'}\n          allowSuperAdminRights={managePeopleInfoQuery.data?.allow_super_admin_rights}\n          logEvent={loggingClient.logEvent.bind(loggingClient)}\n          modalType=\"manage_access_combo\"\n          open={modifyPeopleModalIsOpen}\n          requestClose={() => {\n            setModifyPeopleModalIsOpen(false);\n          }}\n          settingsChangeCallback={() => {\n            queryClient.invalidateQueries({\n              queryKey: replayApi.getManagePeopleInfoForAssetVersion(mediaMetadata.id),\n            });\n          }}\n          shareRecipients={shareRecipients}\n          teamFolderId={mediaMetadata.folderId || ''}\n          teamFolderName={mediaMetadata.teamProjectName || ''}\n        />\n        {showUpsellModal && (\n          <BasicAddOnUpsellModal\n            clickSource=\"post_comment_menu\"\n            onClose={() => {\n              setUpsellModalIsOpen(false);\n            }}\n            open={upsellModalIsOpen}\n            variant=\"team_only_commenting\"\n          />\n        )}\n        <PlaybackLengthSnackbar />\n        <CommentErrorBanner />\n        <FileSharedSnackbar />\n      </PageContainer>\n    </>\n  );\n};\n\nconst MainContent = styled.div`\n  align-items: center;\n  display: flex;\n  height: 100%;\n  justify-content: center;\n  width: 100%;\n`;\n\nconst LoadingWrapper = styled.div`\n  align-items: center;\n  display: flex;\n  flex-direction: column;\n`;\n\nconst PendingVersionActionViewer = ({\n  loadingText,\n  previousMediaType,\n  versionNumber,\n  versionStatus,\n  videoId,\n}: {\n  previousMediaType: MediaType;\n  versionStatus: VersionStatus;\n  versionNumber: number;\n  loadingText: string;\n  videoId: string;\n}) => {\n  const {mediaMetadata, loggingClient} = useViewerPageContext();\n  return (\n    <PageContainer $thumbnailSidebarOpen={false}>\n      <ViewerWrapper $isImageViewer={isImageLike(previousMediaType)} $isVersionLoading={true}>\n        <ViewerTopRow\n          statusDropdownSlot={\n            <StatusDropdown\n              buttonSize=\"standard\"\n              buttonType=\"transparent\"\n              disabled\n              versionStatus={versionStatus}\n            />\n          }\n          versionSelectorSlot={\n            <VersionSelector\n              currentVersionNumber={versionNumber}\n              disabled\n              loggingClient={loggingClient}\n              mediaMetadata={mediaMetadata}\n            />\n          }\n          visible={true}\n        />\n        <MainContent>\n          <LoadingWrapper>\n            <Spinner />\n            <p>\n              <Text>{loadingText}</Text>\n            </p>\n          </LoadingWrapper>\n        </MainContent>\n      </ViewerWrapper>\n    </PageContainer>\n  );\n};\n\nexport const VersionsAwareViewerPageContent = ({\n  areCommentsEnabled,\n}: {\n  areCommentsEnabled: boolean;\n}) => {\n  const queryClient = useQueryClient();\n  const versionsContext = useVersionsContext();\n  const {mediaMetadata, shareToken} = useViewerPageContext();\n  const {mediaType, videoId, id: videoVersionId} = mediaMetadata;\n  const isLiveCollabDisabled = useIsLiveCollabDisabled();\n  const browseToFolder = useSetAtom(viewerBrowseToFolderAtom);\n\n  // On new asset load, invalidate this query so we fetch up to date share permissions\n  React.useEffect(() => {\n    queryClient.invalidateQueries({\n      queryKey: replayApi.getManagePeopleInfoForAssetVersion(mediaMetadata.id),\n    });\n  }, [mediaMetadata.id, queryClient]);\n\n  const ViewerProvider =\n    mediaMetadata.type === 'document'\n      ? React.Fragment\n      : mediaMetadata.type === 'image'\n      ? ImageViewerProvider\n      : VideoViewerProvider;\n  const intl = useIntl();\n\n  React.useEffect(() => {\n    if (mediaMetadata.folderId) {\n      browseToFolder({\n        folder: {\n          id: mediaMetadata.folderId,\n          name: mediaMetadata.folderName,\n        },\n        isInitialLoad: true,\n        shareToken,\n      });\n    }\n  }, [browseToFolder, mediaMetadata.folderId, mediaMetadata.folderName, shareToken]);\n\n  if (\n    versionsContext.areVersionsEnabled === false ||\n    versionsContext.pendingVersionAction === 'none'\n  ) {\n    return (\n      <AnnotationsProvider>\n        <CommentsProvider>\n          <SyncCommentsProvider videoId={videoId} videoVersionId={videoVersionId}>\n            <ViewerProvider>\n              {mediaType === MediaType.Image ? (\n                <OnboardingWelcome />\n              ) : mediaType === MediaType.Video ? (\n                <OnboardingWelcomeForVideo />\n              ) : null}\n              <ViewerPageContent areCommentsEnabled={areCommentsEnabled} />\n              {!isLiveCollabDisabled && isAVType(mediaType) && !isInWebView() && (\n                <PortalledSyncCollabEntryPoint />\n              )}\n            </ViewerProvider>\n          </SyncCommentsProvider>\n        </CommentsProvider>\n      </AnnotationsProvider>\n    );\n  }\n\n  const {currentVersionNumber, pendingVersionAction, currentVersionStatus} = versionsContext;\n\n  return (\n    <PendingVersionActionViewer\n      loadingText={\n        pendingVersionAction === 'create'\n          ? intl.formatMessage({\n              defaultMessage: 'Creating new version…',\n              id: 'bQXeQ3',\n              description: 'Text to display while a new version is being created.',\n            })\n          : intl.formatMessage(\n              {\n                defaultMessage: 'Loading V{currentVersionNumber}…',\n                id: 'xV+oBB',\n                description: 'Text to display while a version is being loaded.',\n              },\n              {\n                currentVersionNumber: currentVersionNumber,\n              },\n            )\n      }\n      previousMediaType={mediaType}\n      versionNumber={currentVersionNumber}\n      versionStatus={currentVersionStatus}\n      videoId={videoId}\n    />\n  );\n};\n","import React from 'react';\n\nimport {useAtomValue, useSetAtom} from 'jotai';\nimport {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {reel} from '@dropbox/api-v2-client';\nimport {Breadcrumb} from '@dropbox/dig-components/breadcrumb';\nimport {Truncate} from '@dropbox/dig-components/truncate';\nimport {Text, Title} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {CloseLine} from '@dropbox/dig-icons/assets';\n\nimport {IconButton} from '~/components/button';\nimport {SkeletonRectangle} from '~/components/skeleton';\nimport {\n  NavigationSidebarDisplayState,\n  navigationSidebarDisplayStateAtom,\n  viewerBrowseToFolderAtom,\n  viewerGetBrowseStateAtom,\n  viewerGetCurrentFolderAtom,\n} from '~/state/viewer';\n\nimport {useViewerPageLoggingClient} from '../../viewer_page/viewer_page_logging_context';\n\nconst HeaderContainer = styled.div`\n  border-bottom: 1px solid var(--dig-color__border__subtle);\n  display: flex;\n  flex-direction: column;\n  padding: 24px 16px;\n`;\n\nconst HeaderTitle = styled(Title)`\n  margin: 4px 0 0;\n`;\n\nconst HeaderTopRowContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n`;\n\nconst BreadcrumbContainer = styled.div`\n  flex-grow: 1;\n  max-width: 100%;\n`;\n\nconst HeaderLoadingBreadcrumbsNonMemo = () => {\n  return (\n    <BreadcrumbContainer>\n      <SkeletonRectangle style={{width: 160}} />\n    </BreadcrumbContainer>\n  );\n};\nconst HeaderLoadingBreadcrumbs = React.memo(HeaderLoadingBreadcrumbsNonMemo);\n\nconst HeaderBreadcrumbsNonMemo = () => {\n  const {folderChain} = useAtomValue(viewerGetBrowseStateAtom);\n  const browseToFolder = useSetAtom(viewerBrowseToFolderAtom);\n  const loggingClient = useViewerPageLoggingClient();\n\n  if (folderChain.length === 1) {\n    return (\n      <BreadcrumbContainer>\n        <Text color=\"faint\">\n          <FormattedMessage\n            defaultMessage=\"More files in this project\"\n            description=\"Text that displays in place of breadcrumbs in a navigation sidebar when a user is at the top folder level\"\n            id=\"Ro7KIr\"\n          />\n        </Text>\n      </BreadcrumbContainer>\n    );\n  }\n\n  const renderBreadcrumb = (folder: reel.Folder): React.ReactElement => {\n    const onBrowse = () => {\n      // eslint-disable-next-line deprecation/deprecation\n      loggingClient.logEvent('viewer_navbar_navigate_action', {action: 'select_breadcrumb'});\n      browseToFolder({folder});\n    };\n\n    return (\n      <Breadcrumb.Link\n        isCurrentPath={folder.id === folderChain[folderChain.length - 1].id}\n        key={folder.id}\n        onClick={onBrowse}\n      >\n        {folder.name}\n      </Breadcrumb.Link>\n    );\n  };\n\n  return (\n    <BreadcrumbContainer>\n      <Breadcrumb>{folderChain.map(renderBreadcrumb)}</Breadcrumb>\n    </BreadcrumbContainer>\n  );\n};\nconst HeaderBreadcrumbs = React.memo(HeaderBreadcrumbsNonMemo);\n\nconst HeaderTopRowNonMemo = () => {\n  const setNavigationSidebarDisplayState = useSetAtom(navigationSidebarDisplayStateAtom);\n  const loggingClient = useViewerPageLoggingClient();\n\n  const onHide = () => {\n    // eslint-disable-next-line deprecation/deprecation\n    loggingClient.logEvent('open_viewer_navbar');\n    setNavigationSidebarDisplayState(NavigationSidebarDisplayState.HIDDEN);\n  };\n\n  return (\n    <HeaderTopRowContainer>\n      <React.Suspense fallback={<HeaderLoadingBreadcrumbs />}>\n        <HeaderBreadcrumbs />\n      </React.Suspense>\n      <IconButton onClick={onHide} variant=\"transparent\">\n        <UIIcon size=\"large\" src={CloseLine} />\n      </IconButton>\n    </HeaderTopRowContainer>\n  );\n};\nconst HeaderTopRow = React.memo(HeaderTopRowNonMemo);\n\nconst NavigationSidebarHeaderNonMemo = () => {\n  const currentFolder = useAtomValue(viewerGetCurrentFolderAtom);\n\n  return (\n    <HeaderContainer>\n      <HeaderTopRow />\n      <HeaderTitle>\n        <Truncate tooltipControlProps={{placement: 'bottom'}}>{currentFolder.name}</Truncate>\n      </HeaderTitle>\n    </HeaderContainer>\n  );\n};\nexport const NavigationSidebarHeader = React.memo(NavigationSidebarHeaderNonMemo);\n","import React from 'react';\n\nimport {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Truncate} from '@dropbox/dig-components/truncate';\nimport {Text} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {CommentLine, GifLine, ImageLine} from '@dropbox/dig-icons/assets';\n\nimport {MediaType} from '~/lib/api';\nimport {isAVType, isImageLike} from '~/lib/helpers';\nimport {StatusLabel} from '~/pages/browse_page/components/common';\nimport {AudioPoster, ImagePoster, VideoPoster} from '~/pages/browse_page/components/tiles/poster';\n\nconst MediaTooltip = styled(Tooltip.Control)`\n  cursor: pointer;\n\n  & .dig-Tooltip-content {\n    padding: 0;\n  }\n`;\n\nconst TooltipContent = styled.div`\n  padding: 8px;\n  width: 200px;\n`;\n\nconst PosterWrapper = styled.div<{$background?: string; $hovered?: boolean}>`\n  align-items: center;\n  background: ${({$background}) => $background || 'none'};\n  display: flex;\n  height: 105px;\n  justify-content: center;\n  opacity: ${({$hovered}) => ($hovered ? 0.5 : 1)};\n  position: relative;\n  width: 200px;\n`;\n\nconst MediaTypeAndDurationWrapper = styled.div`\n  align-items: center;\n  background: var(--dig-color__background__base);\n  color: var(--dig-color__text__base);\n  display: flex;\n  left: 8px;\n  position: absolute;\n  top: 8px;\n  z-index: 1;\n`;\n\nconst AVTypeAndDurationWrapper = styled(MediaTypeAndDurationWrapper)`\n  padding: 1px 5px;\n`;\nconst ImageTypeAndDurationWrapper = styled(MediaTypeAndDurationWrapper)`\n  padding: 8px;\n`;\n\nconst MediaTitle = styled.div`\n  color: var(--color__inverse__standard__text);\n  font-size: 12px;\n  font-weight: 500;\n  margin-top: 6px;\n`;\n\nconst MediaSubtitle = styled.div`\n  color: var(--dig-color__secondary__on-surface);\n  font-size: 12px;\n  font-weight: 400;\n  margin-bottom: 16px;\n`;\n\nconst FooterContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n`;\n\nconst IconsContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n`;\n\nconst IconAndTextContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  font-size: 12px;\n  margin-right: 6px;\n`;\n\nconst StyledText = styled.span`\n  color: var(--dig-color__secondary__on-surface);\n  font-size: 10px;\n  line-height: 15px;\n`;\n\ntype NavigationSidebarMediaPreviewTooltipProps = {\n  commentCount: number;\n  mediaName: string;\n  mediaType?: MediaType;\n  onClick: () => void;\n  open: boolean;\n  status?: number;\n  thumbnailUrl?: string;\n  timeForDisplay: string;\n  triggerRef: React.RefObject<HTMLDivElement>;\n  updatedAt: string;\n  versionNumber?: number;\n};\n\nconst NavigationSidebarMediaPreviewTooltipNonMemo = ({\n  commentCount,\n  mediaName,\n  mediaType,\n  onClick,\n  open,\n  status,\n  thumbnailUrl,\n  timeForDisplay,\n  triggerRef,\n  updatedAt,\n  versionNumber,\n}: NavigationSidebarMediaPreviewTooltipProps) => {\n  return (\n    <MediaTooltip\n      auto\n      onClick={onClick}\n      open={open}\n      placement=\"right\"\n      triggerRef={triggerRef}\n      variant=\"rich\"\n    >\n      <TooltipContent>\n        <PosterWrapper>\n          <Text size=\"small\" variant=\"label\">\n            {isImageLike(mediaType) ? (\n              <ImageTypeAndDurationWrapper>\n                <UIIcon size=\"small\" src={ImageLine} />\n              </ImageTypeAndDurationWrapper>\n            ) : isAVType(mediaType) ? (\n              <AVTypeAndDurationWrapper>{timeForDisplay}</AVTypeAndDurationWrapper>\n            ) : null}\n          </Text>\n          {mediaType === MediaType.Video ? (\n            <VideoPoster src={thumbnailUrl} />\n          ) : mediaType === MediaType.Audio ? (\n            <AudioPoster waveformUrl={thumbnailUrl} />\n          ) : (\n            <ImagePoster src={thumbnailUrl} variant=\"small\" />\n          )}\n        </PosterWrapper>\n        <MediaTitle>\n          <Truncate>{mediaName}</Truncate>\n        </MediaTitle>\n        <MediaSubtitle>{updatedAt}</MediaSubtitle>\n        <FooterContainer>\n          <IconsContainer>\n            <IconAndTextContainer>\n              <UIIcon size=\"small\" src={CommentLine} />\n              <StyledText>{commentCount}</StyledText>\n            </IconAndTextContainer>\n            {versionNumber && (\n              <IconAndTextContainer>\n                <UIIcon size=\"small\" src={GifLine} />\n                <StyledText>\n                  <FormattedMessage\n                    defaultMessage=\"V{versionNumber}\"\n                    description=\"Text describing the version number for media preview tooltips in the project navigation sidebar.\"\n                    id=\"f/c6H5\"\n                    values={{versionNumber: versionNumber}}\n                  />\n                </StyledText>\n              </IconAndTextContainer>\n            )}\n          </IconsContainer>\n          <StatusLabel\n            dotSize={8}\n            dotTextSpacing={8}\n            status={status || 0}\n            textColor=\"faint\"\n            textInverse\n            textSize=\"small\"\n          />\n        </FooterContainer>\n      </TooltipContent>\n    </MediaTooltip>\n  );\n};\nexport const NavigationSidebarMediaPreviewTooltip = React.memo(\n  NavigationSidebarMediaPreviewTooltipNonMemo,\n);\n","import React from 'react';\n\nimport {useAtomValue, useSetAtom} from 'jotai';\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {reel} from '@dropbox/api-v2-client';\nimport {Truncate} from '@dropbox/dig-components/truncate';\nimport {Text} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {FolderLine, GifLine} from '@dropbox/dig-icons/assets';\n\nimport {SkeletonRectangle} from '~/components/skeleton';\nimport {useViewport} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {MediaType, mediaTypeTagToMediaType} from '~/lib/api';\nimport {isAVType, isImageLike} from '~/lib/helpers';\nimport {JoinState} from '~/lib/sync_collab/types';\nimport {getTimeForDisplay, getUploadedTimeForDisplay} from '~/lib/time';\nimport {\n  findMediaProjectLatestUpdateTime,\n  isUploadedFolder,\n} from '~/pages/browse_page/components/common';\nimport {NavigationSidebarMediaPreviewTooltip} from '~/pages/browse_page/components/navigation_sidebar_media_preview_tooltip';\nimport {AudioPoster, ImagePoster, VideoPoster} from '~/pages/browse_page/components/tiles/poster';\nimport {useVersionsContext} from '~/pages/viewer_page/components/versions_context';\nimport {PlayFill} from '~/pages/viewer_page/components/video_controls/player_icons';\nimport {\n  NavigationSidebarDisplayState,\n  navigationSidebarDisplayStateAtom,\n  viewerBrowseToFolderAtom,\n  viewerReadBrowseListingAtom,\n} from '~/state/viewer';\n\nimport {useSyncCollabSharedState} from '../../viewer_page/components/sync_collab/shared_state';\nimport {useViewerPageLoggingClient} from '../../viewer_page/viewer_page_logging_context';\n\nconst ListContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nconst Tile = styled.div<{$hovered?: boolean; $loading?: boolean; $selected?: boolean}>`\n  display: flex;\n  flex-direction: row;\n  padding: 12px 16px;\n  border-bottom: 1px solid var(--dig-color__border__subtle);\n  cursor: ${({$loading, $selected}) => ($loading || $selected ? 'default' : 'pointer')};\n  background: ${({$hovered, $selected}) =>\n    $selected\n      ? 'rgba(57, 132, 255, 0.16)'\n      : $hovered\n      ? 'var(--dig-color__opacity__surface)'\n      : 'transparent'};\n`;\n\nconst PosterContainer = styled.div`\n  position: relative;\n`;\n\nconst PosterWrapper = styled.div<{$background?: string; $hovered?: boolean}>`\n  align-items: center;\n  background: ${({$background}) => $background || 'none'};\n  display: flex;\n  height: 33px;\n  justify-content: center;\n  min-width: 50px;\n  opacity: ${({$hovered}) => ($hovered ? 0.5 : 1)};\n  position: relative;\n  width: 50px;\n`;\n\nconst HoverPlayIcon = styled.div`\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: var(--dig-color__text__base);\n`;\n\nconst PosterInfoWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  margin-left: 8px;\n  overflow: hidden;\n`;\n\nconst TileTitle = styled(Text)<{$isSmallScreenSize: boolean}>`\n  font-size: ${({$isSmallScreenSize}) => ($isSmallScreenSize ? '14px' : '12px')};\n  font-weight: 500;\n  line-height: 14px;\n`;\n\nconst TileSubtitle = styled.div<{$isSmallScreenSize: boolean}>`\n  color: var(--dig-color__text__subtle);\n  font-size: ${({$isSmallScreenSize}) => ($isSmallScreenSize ? '12px' : '10px')};\n`;\n\nconst FileCountText = styled(Text)`\n  color: var(--dig-color__text__subtle);\n  font-size: 12px;\n`;\n\nconst SelectedText = styled(Text)`\n  font-size: 10px;\n`;\n\nconst VersionAndDurationWrapper = styled.div`\n  display: flex;\n  flex-direction: row;\n  margin: 4px 0 0 -2px;\n`;\n\nconst StyledText = styled.span`\n  color: var(--dig-color__text__subtle);\n  font-size: 10px;\n  line-height: 15px;\n`;\n\nconst Separator = styled.span`\n  margin: 0 4px;\n`;\n\ntype ProjectTileProps = {\n  commentCount: number;\n  isSmallScreenSize: boolean;\n  mediaName: string;\n  mediaType?: MediaType;\n  onClick?: () => void;\n  selected: boolean;\n  status?: number;\n  thumbnailUrl?: string;\n  timeForDisplay: string;\n  updatedAt: string;\n  versionNumber?: number;\n};\nconst ProjectTileNonMemo = ({\n  commentCount,\n  isSmallScreenSize,\n  mediaName,\n  mediaType,\n  onClick,\n  selected,\n  status,\n  thumbnailUrl,\n  timeForDisplay,\n  updatedAt,\n  versionNumber,\n}: ProjectTileProps) => {\n  const triggerRef = React.useRef<HTMLDivElement>(null);\n  const [isHovered, setIsHovered] = React.useState(false);\n  const intl = useIntl();\n\n  const avActiveText = intl.formatMessage({\n    defaultMessage: 'Now playing',\n    id: 'a6ooWj',\n    description: 'Message on a project navigation tile that designates the current active project',\n  });\n  const imgActiveText = intl.formatMessage({\n    defaultMessage: 'Now viewing',\n    id: 'wklCzh',\n    description: 'Message on a project navigation tile that designates the current active project',\n  });\n\n  return (\n    <div\n      onClick={onClick}\n      onMouseEnter={() => setIsHovered(!selected)}\n      onMouseLeave={() => setIsHovered(false)}\n    >\n      <Tile $hovered={isHovered} $selected={selected} ref={triggerRef}>\n        <PosterContainer>\n          <PosterWrapper $hovered={isHovered}>\n            {mediaType === MediaType.Video ? (\n              <VideoPoster src={thumbnailUrl} />\n            ) : mediaType === MediaType.Audio ? (\n              <AudioPoster variant=\"small\" waveformUrl={thumbnailUrl} />\n            ) : (\n              <ImagePoster src={thumbnailUrl} variant=\"small\" />\n            )}\n          </PosterWrapper>\n          {isHovered && (\n            <HoverPlayIcon>\n              <UIIcon size=\"standard\" src={PlayFill} />\n            </HoverPlayIcon>\n          )}\n        </PosterContainer>\n        <PosterInfoWrapper>\n          <TileTitle $isSmallScreenSize={isSmallScreenSize}>\n            <Truncate>{mediaName}</Truncate>\n          </TileTitle>\n          <TileSubtitle $isSmallScreenSize={isSmallScreenSize}>\n            {selected ? (\n              <SelectedText>{isImageLike(mediaType) ? imgActiveText : avActiveText}</SelectedText>\n            ) : (\n              versionNumber && (\n                <VersionAndDurationWrapper>\n                  <UIIcon size=\"small\" src={GifLine} />\n                  <StyledText>\n                    <FormattedMessage\n                      defaultMessage=\"V{versionNumber}\"\n                      description=\"Text describing the version number for media in the project navigation sidebar.\"\n                      id=\"CNYrGY\"\n                      values={{versionNumber: versionNumber}}\n                    />\n                  </StyledText>\n                  {isAVType(mediaType) ? (\n                    <StyledText>\n                      <Separator>·</Separator>\n                      {timeForDisplay}\n                    </StyledText>\n                  ) : null}\n                </VersionAndDurationWrapper>\n              )\n            )}\n          </TileSubtitle>\n        </PosterInfoWrapper>\n      </Tile>\n      <NavigationSidebarMediaPreviewTooltip\n        commentCount={commentCount}\n        mediaName={mediaName}\n        mediaType={mediaType}\n        onClick={() => setIsHovered(false)}\n        open={isHovered}\n        status={status}\n        thumbnailUrl={thumbnailUrl}\n        timeForDisplay={timeForDisplay}\n        triggerRef={triggerRef}\n        updatedAt={updatedAt}\n        versionNumber={versionNumber}\n      />\n    </div>\n  );\n};\nconst ProjectTile = React.memo(ProjectTileNonMemo);\n\ntype FolderTileProps = {\n  folderName: string;\n  numberOfProjects: number;\n  onClick: () => void;\n  isSmallScreenSize: boolean;\n};\nconst FolderTileNonMemo = ({\n  folderName,\n  isSmallScreenSize,\n  numberOfProjects,\n  onClick,\n}: FolderTileProps) => {\n  const intl = useIntl();\n\n  const [isHovered, setIsHovered] = React.useState(false);\n\n  const fileCountString = intl.formatMessage(\n    {\n      defaultMessage: '{numberOfProjects} {numberOfProjects, plural, one {file} other {files}}',\n      id: 'dzH8/v',\n      description: 'Displays how many files are contained within the current folder or project',\n    },\n    {numberOfProjects},\n  );\n\n  return (\n    <div\n      onClick={onClick}\n      onMouseEnter={() => setIsHovered(true)}\n      onMouseLeave={() => setIsHovered(false)}\n    >\n      <Tile $hovered={isHovered} onClick={onClick}>\n        <PosterWrapper $background=\"var(--dig-color__background__raised)\">\n          <UIIcon color=\"var(--dig-color__border__base)\" src={FolderLine} />\n        </PosterWrapper>\n        <PosterInfoWrapper>\n          <TileTitle $isSmallScreenSize={isSmallScreenSize}>\n            <Truncate>{folderName}</Truncate>\n          </TileTitle>\n          <TileSubtitle $isSmallScreenSize={isSmallScreenSize}>\n            <FileCountText>{fileCountString}</FileCountText>\n          </TileSubtitle>\n        </PosterInfoWrapper>\n      </Tile>\n    </div>\n  );\n};\nconst FolderTile = React.memo(FolderTileNonMemo);\n\ntype LoadingTileProps = {\n  opacity?: number;\n};\nconst LoadingTileNonMemo = ({opacity}: LoadingTileProps) => {\n  return (\n    <Tile $loading style={{opacity: opacity || 1}}>\n      <SkeletonRectangle style={{height: 33, width: 50}} />\n      <div>\n        <SkeletonRectangle style={{height: 12, width: 120, margin: '0 0 8px 8px'}} />\n        <SkeletonRectangle style={{height: 10, width: 50, marginLeft: '8px'}} />\n      </div>\n    </Tile>\n  );\n};\nconst LoadingTile = React.memo(LoadingTileNonMemo);\n\nconst NavigationSidebarLoadingListNonMemo = () => {\n  return (\n    <ListContainer>\n      <LoadingTile key=\"tile-loading-skeleton-1\" />\n      <LoadingTile key=\"tile-loading-skeleton-2\" opacity={0.8} />\n      <LoadingTile key=\"tile-loading-skeleton-3\" opacity={0.4} />\n    </ListContainer>\n  );\n};\nexport const NavigationSidebarLoadingList = React.memo(NavigationSidebarLoadingListNonMemo);\n\nconst NavigationSidebarListNonMemo = () => {\n  const {folders, projects} = useAtomValue(viewerReadBrowseListingAtom);\n  const browseToFolder = useSetAtom(viewerBrowseToFolderAtom);\n  const {projectId: selectedProjectId} = useVersionsContext();\n  const loggingClient = useViewerPageLoggingClient();\n  const intl = useIntl();\n  const {timeAgoLocale} = useReelAppGlobalState();\n\n  const versionsContext = useVersionsContext();\n  const navigateToMedia = versionsContext.areVersionsEnabled\n    ? versionsContext.navigateToNewMedia\n    : () => {};\n  const {setJoinState, joinState} = useSyncCollabSharedState();\n  const setSidebarState = useSetAtom(navigationSidebarDisplayStateAtom);\n  // eslint-disable-next-line deprecation/deprecation\n  const {isSmallScreenSize} = useViewport();\n\n  const handleProjectClick = (projectWithVideos: reel.ProjectWithVideos) => {\n    if (projectWithVideos.project?.id === selectedProjectId) return;\n\n    if (projectWithVideos.videos && projectWithVideos.videos.length > 0) {\n      if (projectWithVideos.videos[0].video_id) {\n        navigateToMedia(projectWithVideos.videos[0].video_id);\n        // eslint-disable-next-line deprecation/deprecation\n        loggingClient.logEvent('viewer_navbar_navigate_action', {action: 'select_file'});\n        if ([JoinState.JOINED, JoinState.JOINING].includes(joinState)) {\n          setJoinState(JoinState.LEAVING); // TODO - remove this when sync collab supports navigation\n        }\n        if (isSmallScreenSize) {\n          setSidebarState(NavigationSidebarDisplayState.HIDDEN);\n        }\n      }\n    }\n  };\n\n  const handleFolderClick = (folder: reel.Folder) => {\n    // eslint-disable-next-line deprecation/deprecation\n    loggingClient.logEvent('viewer_navbar_navigate_action', {action: 'select_folder'});\n    browseToFolder({folder});\n  };\n\n  return (\n    <ListContainer>\n      {folders.filter(isUploadedFolder).map((folder) => {\n        const folderName = folder.name || '';\n        const numberOfProjects = folder.num_projects || 0;\n\n        return (\n          <FolderTile\n            folderName={folderName}\n            isSmallScreenSize={isSmallScreenSize}\n            key={folder.id}\n            numberOfProjects={numberOfProjects}\n            onClick={() => handleFolderClick(folder)}\n          />\n        );\n      })}\n      {projects.map((projectWithVideos) => {\n        const project = projectWithVideos.project;\n        const media = projectWithVideos.videos?.[0];\n\n        if (!project || !media || !media.media_type) {\n          return null;\n        }\n\n        const projectId = project.id;\n        const mediaName = project.name || '';\n        const mediaType = mediaTypeTagToMediaType(media.media_type);\n        const commentCount = media.comments_info?.num_comments || 0;\n        const status = media.status;\n        const timeForDisplay = getTimeForDisplay(media.video_metadata?.duration_precise);\n        const thumbnailUrl =\n          mediaType === MediaType.Audio ? media.waveform_url : media.thumbnail_url;\n        const updatedAt = getUploadedTimeForDisplay(\n          findMediaProjectLatestUpdateTime(projectWithVideos) || new Date(),\n          intl,\n          timeAgoLocale,\n        );\n        const versionNumber = media.version_num;\n\n        const selected = projectId === selectedProjectId;\n\n        return (\n          <ProjectTile\n            commentCount={commentCount}\n            isSmallScreenSize={isSmallScreenSize}\n            key={projectId}\n            mediaName={mediaName}\n            mediaType={mediaType}\n            onClick={() => handleProjectClick(projectWithVideos)}\n            selected={selected}\n            status={status}\n            thumbnailUrl={thumbnailUrl}\n            timeForDisplay={timeForDisplay}\n            updatedAt={updatedAt}\n            versionNumber={versionNumber}\n          />\n        );\n      })}\n    </ListContainer>\n  );\n};\nexport const NavigationSidebarList = React.memo(NavigationSidebarListNonMemo);\n","import React from 'react';\n\nimport {detect} from 'detect-browser';\nimport hotkeys from 'hotkeys-js';\nimport {useAtom, useSetAtom} from 'jotai';\nimport {CSSTransition} from 'react-transition-group';\nimport styled from 'styled-components';\n\nimport {TRANSITION_DURATION_MS} from '~/components/viewport_context';\nimport {\n  cleanupNavigationSidebarAtom,\n  NavigationSidebarDisplayState,\n  navigationSidebarDisplayStateAtom,\n} from '~/state/viewer';\n\nimport {NavigationSidebarHeader} from './navigation_sidebar_header';\nimport {NavigationSidebarList, NavigationSidebarLoadingList} from './navigation_sidebar_list';\nconst Sidebar = styled.div`\n  background-color: var(--dig-color__background__subtle);\n  border-right: 1px solid var(--dig-color__border__subtle);\n  display: block;\n  height: 100%;\n  overflow-y: auto;\n  position: absolute;\n  left: -300px;\n  top: 0;\n  width: 300px;\n  z-index: 17; // Navigation left rail is z-index 16\n\n  &.enter {\n    left: -300px;\n  }\n  &.enter-active {\n    left: 0;\n    transition-duration: ${TRANSITION_DURATION_MS}ms;\n  }\n  &.enter-done {\n    left: 0;\n  }\n  &.exit {\n    left: 0;\n  }\n  &.exit-active {\n    left: -300px;\n    transition-duration: ${TRANSITION_DURATION_MS}ms;\n  }\n  &.exit-done {\n    left: -300px;\n  }\n`;\n\nconst NavigationSidebarNonMemo = () => {\n  const browser = detect();\n  const [navigationSidebarDisplayState, setNavigationSidebarDisplayState] = useAtom(\n    navigationSidebarDisplayStateAtom,\n  );\n  const cleanup = useSetAtom(cleanupNavigationSidebarAtom);\n\n  // reset state on cleanup\n  React.useEffect(() => {\n    return cleanup;\n  }, [cleanup]);\n\n  const commandOrControl = browser?.os === 'Mac OS' ? '⌘' : 'Ctrl';\n\n  // Attach Cmd + Shift + p to open sidebar\n  React.useEffect(() => {\n    const toggleSidebar = () =>\n      setNavigationSidebarDisplayState(\n        navigationSidebarDisplayState === NavigationSidebarDisplayState.SHOWING\n          ? NavigationSidebarDisplayState.HIDDEN\n          : NavigationSidebarDisplayState.SHOWING,\n      );\n\n    hotkeys(`${commandOrControl}+Shift+p`, toggleSidebar);\n\n    return () => {\n      hotkeys.unbind(`${commandOrControl}+Shift+p`, toggleSidebar);\n    };\n  }, [commandOrControl, navigationSidebarDisplayState, setNavigationSidebarDisplayState]);\n\n  return (\n    <CSSTransition\n      in={navigationSidebarDisplayState === NavigationSidebarDisplayState.SHOWING}\n      timeout={TRANSITION_DURATION_MS}\n    >\n      <Sidebar>\n        <NavigationSidebarHeader />\n        <React.Suspense fallback={<NavigationSidebarLoadingList />}>\n          <NavigationSidebarList />\n        </React.Suspense>\n      </Sidebar>\n    </CSSTransition>\n  );\n};\nexport const NavigationSidebar = React.memo(NavigationSidebarNonMemo);\n","import React, {useCallback} from 'react';\n\nimport type {Integration} from 'pap-events/enums/integration';\nimport {PAP_Select_ModalAction} from 'pap-events/replay/select_modal_action';\nimport {PAP_Shown_Modal} from 'pap-events/replay/shown_modal';\nimport {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {reel} from '@dropbox/api-v2-client';\nimport {Modal} from '@dropbox/dig-components/modal';\n\nimport {Button} from '~/components/button';\nimport {useOnboardingContext} from '~/components/onboarding_v2/onboarding_provider';\nimport {s3_static_url} from '~/lib/static_urls';\nimport {StormcrowIsOn} from '~/lib/stormcrow';\nimport {useLoggingClient} from '~/lib/use_logging_client';\nimport {useE2eFeatureIsOn} from '~/state/e2e_features';\n\nimport {useViewerPageContext} from '../../viewer_page_context';\n\ntype IntegrationKey = 'ADOBE_PREMIERE_PRO' | 'ADOBE_AFTER_EFFECTS' | 'DAVINCI' | 'PRO_TOOLS';\ntype IntegrationStateKey =\n  | 'integration_premierepro'\n  | 'integration_aftereffects'\n  | 'integration_davinci'\n  | 'integration_protools';\ntype IntegrationInfo = {\n  name: string;\n  url: string;\n  stateKey: IntegrationStateKey;\n  PAPIntegration: Integration;\n};\ntype IntegrationDictionary = Record<IntegrationKey, IntegrationInfo>;\n\nconst Integrations: IntegrationDictionary = {\n  ADOBE_PREMIERE_PRO: {\n    name: 'Adobe Premiere Pro',\n    url: 'https://exchange.adobe.com/apps/cc/107770/dropbox-replay',\n    stateKey: 'integration_premierepro',\n    PAPIntegration: 'adobe_premiere_pro',\n  },\n  ADOBE_AFTER_EFFECTS: {\n    name: 'Adobe After Effects',\n    url: 'https://exchange.adobe.com/apps/cc/107770/dropbox-replay',\n    stateKey: 'integration_aftereffects',\n    PAPIntegration: 'adobe_after_effects',\n  },\n  DAVINCI: {\n    name: 'DaVinci Resolve',\n    url: 'https://help.dropbox.com/integrations/dropbox-replay-davinci-resolve',\n    stateKey: 'integration_davinci',\n    PAPIntegration: 'blackmagic_davinci',\n  },\n  PRO_TOOLS: {\n    name: 'Pro Tools',\n    url: 'https://help.dropbox.com/integrations/dropbox-replay-avid-pro-tools',\n    stateKey: 'integration_protools',\n    PAPIntegration: 'avid_pro_tools',\n  },\n};\n\nconst StyledVideo = styled.video`\n  width: 100%;\n  height: 100%;\n  object-fit: fill;\n`;\n\nconst guessIntegration = (creatorTool: string): IntegrationInfo | null => {\n  if (creatorTool.includes('Premiere Pro')) {\n    return Integrations['ADOBE_PREMIERE_PRO'];\n  }\n\n  if (creatorTool.includes('Photoshop')) {\n    return Integrations['ADOBE_AFTER_EFFECTS'];\n  }\n\n  if (creatorTool.includes('DaVinci')) {\n    return Integrations['DAVINCI'];\n  }\n\n  if (creatorTool.includes('Pro Tools')) {\n    return Integrations['PRO_TOOLS'];\n  }\n\n  return null;\n};\n\n/**\n * TODOs\n * - Make sure the modal doesn't show up on top of other modals or onboarding processes\n */\nexport function CreatorToolCalloutModal() {\n  const {mediaMetadata} = useViewerPageContext();\n  const [open, setOpen] = React.useState(true);\n  const isCalloutEnabled = StormcrowIsOn.useReplayCreatorToolCallout();\n  const {onboardingActions, updateOnboardingActions} = useOnboardingContext();\n  const isOnboardingEnabled = useE2eFeatureIsOn('onboarding');\n  const loggingClient = useLoggingClient();\n\n  const handleClose = (integration: IntegrationInfo) => {\n    loggingClient.logPap(\n      PAP_Select_ModalAction({\n        modal: 'integration_callout',\n        modalAction: 'cancel',\n        integration: integration.PAPIntegration,\n      }),\n    );\n    updateIntegrationState(integration, {'.tag': 'integration_onboarding_dismissed'});\n    setOpen(false);\n  };\n  const handleNavigate = (integration: IntegrationInfo) => {\n    loggingClient.logPap(\n      PAP_Select_ModalAction({\n        modal: 'integration_callout',\n        modalAction: 'get_integration',\n        integration: integration.PAPIntegration,\n      }),\n    );\n    updateIntegrationState(integration, {'.tag': 'integration_onboarding_completed'});\n    setOpen(false);\n  };\n\n  const handleOpen = (integration: IntegrationInfo) => {\n    // log modal when shown\n    loggingClient.logPap(\n      PAP_Shown_Modal({\n        modal: 'integration_callout',\n        integration: integration.PAPIntegration,\n      }),\n    );\n  };\n\n  const updateIntegrationState = useCallback(\n    (integration: IntegrationInfo, state: reel.ReelIntegrationOnboardingStatus) => {\n      (async () => {\n        await updateOnboardingActions({\n          [integration.stateKey]: state,\n        });\n      })();\n    },\n    [updateOnboardingActions],\n  );\n\n  if (\n    !isOnboardingEnabled ||\n    !isCalloutEnabled ||\n    mediaMetadata?.isDemo || // Do NOT show the CretorToolCalloutModal in demo files\n    !mediaMetadata?.mediaMetadata.creatorTool\n  ) {\n    return null;\n  }\n\n  const integration = guessIntegration(mediaMetadata.mediaMetadata.creatorTool);\n\n  // No need to show the modal if we don't have a creator tool to promote\n  if (\n    !integration ||\n    onboardingActions?.[integration.stateKey]?.['.tag'] !== 'integration_onboarding_not_set'\n  ) {\n    return null;\n  }\n\n  return (\n    <Modal\n      aria-labelledby=\"CreatorToolCallout\"\n      isCentered\n      onAfterOpen={() => handleOpen(integration)}\n      onRequestClose={() => handleClose(integration)}\n      open={open}\n    >\n      <Modal.FullBleed>\n        <StyledVideo\n          autoPlay\n          loop\n          muted\n          poster={s3_static_url('/images/video-tool-integration.png')}\n        >\n          <source src={s3_static_url('/images/video-tool-integration.webm')} type=\"video/webm\" />\n          <source src={s3_static_url('/images/video-tool-integration.mov')} type=\"video/mov\" />\n          <source src={s3_static_url('/images/video-tool-integration.mp4')} type=\"video/mp4\" />\n        </StyledVideo>\n      </Modal.FullBleed>\n      <Modal.Header hasBottomSpacing=\"title-standard\">\n        <Modal.Title id=\"CreatorToolCallout\">\n          <FormattedMessage\n            defaultMessage=\"Enhance your editing experience\"\n            description=\"Title for modal that encourages users to download and use Replay integrations for their creative tools\"\n            id=\"bbP5u2\"\n          />\n        </Modal.Title>\n      </Modal.Header>\n\n      <Modal.Body>\n        <FormattedMessage\n          defaultMessage=\"Download the free Dropbox Replay integration for {integrationName} to get projects reviewed and approved faster. \"\n          description=\"Body text for modal that encourages users to download and use Replay integrations for their creative tools\"\n          id=\"qv2tfF\"\n          values={{integrationName: integration.name}}\n        />\n      </Modal.Body>\n\n      <Modal.Footer>\n        <Button\n          autoFocus\n          data-testid=\"creator-tool-modal-dismiss-button\"\n          onClick={() => handleClose(integration)}\n          variant=\"opacity\"\n        >\n          <FormattedMessage\n            defaultMessage=\"Dismiss\"\n            description=\"Button to close modal\"\n            id=\"CT7Q45\"\n          />\n        </Button>\n        <Button\n          href={integration.url}\n          onClick={() => handleNavigate(integration)}\n          target=\"_blank\"\n          variant=\"primary\"\n        >\n          <FormattedMessage\n            defaultMessage=\"Get integration\"\n            description=\"Button to take the user to the page where they can download a Replay integration\"\n            id=\"zq+GQ8\"\n          />\n        </Button>\n      </Modal.Footer>\n    </Modal>\n  );\n}\n","import React from 'react';\n\nimport {useAtomValue, useSetAtom} from 'jotai';\nimport {useParams} from 'react-router';\nimport styled from 'styled-components';\n\nimport type {reel} from '@dropbox/api-v2-client';\nimport {Spinner} from '@dropbox/dig-components/progress_indicators';\n\nimport {getVideo, logView, MediaType} from '~/lib/api';\nimport type {MediaProp} from '~/lib/api';\nimport {useOnboardingChecklist} from '~/lib/onboarding_v2/use_onboarding_checklist';\nimport {getInitialVersionId, VERSION_ID_QUERY_STRING_KEY} from '~/lib/url_utils';\nimport {useLoggingClient} from '~/lib/use_logging_client';\nimport {NavigationSidebar} from '~/pages/browse_page/components/navigation_sidebar';\nimport {ErrorPage} from '~/pages/error_page';\nimport {PageMissingPage} from '~/pages/page_missing_page';\nimport {SyncCollabProvider} from '~/pages/viewer_page/components/sync_collab/shared_state';\nimport {VersionsAwareViewerPageProvider} from '~/pages/viewer_page/components/versions_context';\nimport {VersionsAwareViewerPageContent} from '~/pages/viewer_page/viewer_page_content';\nimport {onboardingTypeAtom} from '~/state/onboarding_v2';\nimport {STEPS} from '~/state/onboarding_v2';\nimport {\n  NavigationSidebarDisplayState,\n  navigationSidebarDisplayStateAtom,\n  ViewerSidebarPanel,\n  viewerSidebarPanelAtom,\n} from '~/state/viewer';\n\nimport {CreatorToolCalloutModal} from './components/creator_tool_callouts/creator_tool_callouts';\nimport {PageContentContainer} from './components/page_content_container';\nimport {ViewerPageOnboardingProvider} from './viewer_page_context';\nimport {ViewerPageHeader} from './viewer_page_header';\nimport {ViewerPageLoggingProvider} from './viewer_page_logging_context';\nimport {dueDateModalCurrentVersionInfoAtom} from '../../components/due_date/due_date_modal';\nimport {useViewport} from '../../components/viewport_context';\nimport {getCurrentUser} from '../../lib/client';\nimport type {VideoPageRouteParams} from '../../route_path_matches';\nimport {isInExtension} from '../../use_extensions';\nimport {YourRootText} from '../browse_page/components/header/browse_page_folder_header';\nimport {Page} from '../components/page';\nimport {LoadingViewerPageHeader} from '../layout/components/common_header';\n\nexport const Centered = styled.div`\n  align-items: center;\n  display: flex;\n  height: 100%;\n  justify-content: center;\n  position: absolute;\n  width: 100%;\n`;\n\nfunction isVideoNotFoundError(error: any): error is reel.GetVideoErrorVideoNotFound {\n  const tag = error?.error && error.error['.tag'];\n  if (!tag) {\n    return false;\n  }\n  return tag === 'other' || tag === 'video_not_found';\n}\n\nconst IS_LOADING = 'is_loading' as const;\n\nexport const ViewerPage = () => {\n  const {videoId: encodedVideoId, projectId: encodedProjectId} =\n    useParams() as VideoPageRouteParams;\n  const [videoId, setVideoId] = React.useState(decodeURIComponent(encodedVideoId));\n  const projectId = decodeURIComponent(encodedProjectId);\n  const navigationSidebarDisplayState = useAtomValue(navigationSidebarDisplayStateAtom);\n  const setSidebarPanelState = useSetAtom(viewerSidebarPanelAtom);\n  // eslint-disable-next-line deprecation/deprecation\n  const {isSmallScreenSize} = useViewport();\n  const loggingClient = useLoggingClient();\n  const {handleCompleteStep} = useOnboardingChecklist({\n    // eslint-disable-next-line deprecation/deprecation\n    logEvent: loggingClient.logEvent.bind(loggingClient),\n  });\n  const onboardingType = useAtomValue(onboardingTypeAtom);\n\n  const [videoInfo, setVideoInfo] = React.useState<MediaProp | typeof IS_LOADING>(IS_LOADING);\n  const [getVideoError, setGetVideoError] = React.useState<Error | null>(null);\n\n  const sidebarOpen =\n    navigationSidebarDisplayState === NavigationSidebarDisplayState.SHOWING && !isSmallScreenSize;\n\n  const videoFetcher = React.useCallback(\n    (videoVersionId: string) => getVideo(videoId, videoVersionId),\n    [videoId],\n  );\n\n  const currentVersionInfo = useAtomValue(dueDateModalCurrentVersionInfoAtom);\n  const setDateModalCurrentVersionInfoAtom = useSetAtom(dueDateModalCurrentVersionInfoAtom);\n\n  const projectNavigator = React.useCallback(\n    async (mediaId: string, versionId?: string): Promise<MediaProp | null> => {\n      try {\n        setSidebarPanelState(ViewerSidebarPanel.COMMENTS);\n        const result = await getVideo(mediaId, versionId);\n        if (result) {\n          setVideoInfo(result);\n          if (mediaId !== videoId) {\n            const params = new URLSearchParams(window.location.search);\n            if (versionId) {\n              params.set(VERSION_ID_QUERY_STRING_KEY, versionId);\n            } else {\n              params.delete(VERSION_ID_QUERY_STRING_KEY);\n            }\n            history.replaceState(\n              null,\n              '',\n              `/project/${result.projectId}/video/${result.videoId}?${params.toString()}`,\n            );\n          }\n        } else {\n          throw new Error('No video returned from api');\n        }\n        logView(mediaId);\n        return result;\n      } catch (e) {\n        setGetVideoError(e);\n      }\n      return null;\n    },\n    [videoId, setSidebarPanelState],\n  );\n\n  React.useEffect(() => {\n    if (videoInfo !== IS_LOADING) {\n      setVideoId(videoInfo.videoId);\n\n      if (videoInfo.mediaType === MediaType.Image) {\n        handleCompleteStep(STEPS.VIEW_FILE);\n      }\n    }\n  }, [videoInfo, onboardingType, handleCompleteStep]);\n\n  React.useEffect(() => {\n    // When uploading new versions in the project tile/list views,\n    // the displayed information may vary depending on the tile/column you hover over.\n    // Because there are multiple ways to navigate to a project: by clicking into a project,\n    // creating a new version, or being in a project upon app load.\n    // We are taking steps to ensure that the correct videoID\n    // is used to navigate to the intended project.\n    const defaultInitalVideoId =\n      currentVersionInfo.videoId !== '' ? currentVersionInfo.videoId : videoId;\n\n    (async () => await projectNavigator(defaultInitalVideoId, getInitialVersionId()))();\n    // Only run once when initial page loads\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  React.useEffect(() => {\n    // Reset this for the next version uploaded via project tile/list views,\n    if (currentVersionInfo.videoId !== '') {\n      setDateModalCurrentVersionInfoAtom({\n        videoId: '',\n        projectName: '',\n        projectId: '',\n        versionNumber: 0,\n      });\n    }\n  }, [currentVersionInfo, setDateModalCurrentVersionInfoAtom, videoId]);\n\n  const videoIdentifier = React.useMemo(\n    () => ({\n      type: 'video_id' as const,\n      videoId,\n    }),\n    [videoId],\n  );\n\n  if (getVideoError && isVideoNotFoundError(getVideoError)) {\n    return <PageMissingPage />;\n  }\n\n  if (getVideoError) {\n    return <ErrorPage errorToReport={getVideoError} />;\n  }\n\n  // Before the video loads, show only the header with skeleton components where text would be and help link\n  if (videoInfo === IS_LOADING) {\n    const backButtonStyle = Boolean(getCurrentUser()) ? 'chevron' : 'logo';\n    return (\n      <>\n        <LoadingViewerPageHeader backButtonStyle={backButtonStyle} />\n        <Centered>\n          <Spinner monochromatic />\n        </Centered>\n      </>\n    );\n  }\n\n  const webContent = (\n    <Page title={videoInfo.projectName}>\n      <>\n        <ViewerPageHeader\n          areCommentsEnabled={true} // On non-share pages, comments are always shown\n          backToUrl={videoInfo.folderId ? `/folder/${videoInfo.folderId}` : '/'}\n          hasEditAccess={\n            videoInfo.accessLevel === 'owner' ||\n            videoInfo.accessLevel === 'admin' ||\n            videoInfo.accessLevel === 'super_admin' ||\n            videoInfo.accessLevel === 'none' // On a non-share page, access level of none means the folder has not been shared yet\n          }\n          showDownloadsInHeader={false}\n          sidebarOpen={sidebarOpen}\n          viewOnlyProjectMember={videoInfo.accessLevel === 'reviewer'}\n        />\n        <PageContentContainer sidebarOpen={sidebarOpen}>\n          <VersionsAwareViewerPageContent areCommentsEnabled={true} />\n        </PageContentContainer>\n        {videoInfo.folderName && videoInfo.folderName !== YourRootText && <NavigationSidebar />}\n        <CreatorToolCalloutModal />\n      </>\n    </Page>\n  );\n\n  const integrationContent = <VersionsAwareViewerPageContent areCommentsEnabled={true} />;\n\n  let projectAccess;\n  switch (videoInfo.accessLevel) {\n    case undefined:\n    case 'none':\n      projectAccess = 'owner' as const;\n      break;\n    case 'owner':\n    case 'admin':\n    case 'reviewer':\n    case 'super_admin':\n      projectAccess = videoInfo.accessLevel;\n      break;\n    default:\n      projectAccess = 'other' as const;\n  }\n\n  return (\n    <ViewerPageLoggingProvider\n      accessType={projectAccess}\n      mediaType={videoInfo.mediaType}\n      pageSource=\"video_page\"\n      videoId={videoInfo.videoIdForAmplitude}\n    >\n      <VersionsAwareViewerPageProvider\n        areVersionsEnabled\n        downloadsEnabled={true}\n        initialVersionInfo={videoInfo}\n        projectId={projectId}\n        projectNavigator={projectNavigator}\n        showContextMenu={videoInfo.accessLevel !== 'reviewer'}\n        videoIdentifier={videoIdentifier}\n        videoVersionFetcher={videoFetcher}\n      >\n        <ViewerPageOnboardingProvider>\n          <SyncCollabProvider>\n            {isInExtension() ? integrationContent : webContent}\n          </SyncCollabProvider>\n        </ViewerPageOnboardingProvider>\n      </VersionsAwareViewerPageProvider>\n    </ViewerPageLoggingProvider>\n  );\n};\n"],"file":"static/viewer_page-CAHLPhlD.js"}