{"version":3,"sources":["common/i18n.ts","serviceWorker.ts","common/components/Frame/Frame.tsx","common/config.ts","common/auth.ts","redux/hooks.ts","redux/user/UserSlice.ts","common/components/Login/Login.tsx","common/usecases/UpdateProgress.ts","redux/data/trailer.ts","redux/data/shuffle.ts","redux/data/ambients.ts","redux/data/interviews.ts","redux/data/videos.ts","redux/data/books.ts","redux/library/LibrarySlice.ts","common/usecases/GetAllProgress.ts","redux/games/GameSlice.ts","games/usecases/getGameProgress.ts","redux/store.ts","common/mui.ts","fastTrack/usecases/CountDown.ts","common/components/icons/LockIcon.tsx","common/components/icons/TickIcon.tsx","common/components/icons/PlayRoundIcon.tsx","fastTrack/components/FastTrackCatalogue/VideoThumbnail.tsx","fastTrack/components/FastTrackCatalogue/VideoCard.tsx","fastTrack/components/FastTrackCatalogue/GameCard.tsx","fastTrack/components/FastTrackCatalogue/CountDown.tsx","fastTrack/components/FastTrackCatalogue/Progress.tsx","common/components/icons/svgr/Home.jsx","common/components/icons/HomeIcon.tsx","common/entities/EmojiList.ts","fastTrack/components/FastTrackCatalogue/EmojiPicker.tsx","common/usecases/PostFeedback.ts","common/components/icons/svgr/Close.jsx","common/components/icons/CloseIcon.tsx","fastTrack/components/FastTrackCatalogue/Feedback.tsx","common/components/icons/svgr/Alert.jsx","common/components/icons/AlertIcon.tsx","fastTrack/components/MessageBox.tsx","fastTrack/components/FastTrackCatalogue/index.tsx","common/components/Header/Header.tsx","experiential/components/ExperientialJourney/pathSteps/utils/Draw.ts","experiential/components/ExperientialJourney/pathSteps/styles/pathStepStyle.tsx","experiential/components/ExperientialJourney/pathSteps/Colors.ts","experiential/components/ExperientialJourney/pathSteps/TrailerStep.tsx","experiential/components/ExperientialJourney/pathSteps/InterviewStep.tsx","experiential/components/ExperientialJourney/pathSteps/NextStep.tsx","experiential/components/ExperientialJourney/pathSteps/FutureStep.tsx","common/components/ModalBox/index.tsx","experiential/components/ExperientialJourney/SelectInterview.tsx","experiential/components/Player/BurstPlayer.tsx","experiential/utils/isNoInterviewSelected.ts","common/components/Journey.tsx","common/components/icons/svgr/Nothing.jsx","common/components/icons/InvisibleIcon.tsx","experiential/components/ExperientialJourney/index.tsx","common/usecases/GetFeedback.ts","landing/components/FeedbackItem.tsx","landing/components/FeedbackPortal.tsx","common/components/icons/svgr/PlayBox.jsx","common/components/icons/PlayBoxIcon.tsx","common/components/icons/svgr/Pause.jsx","common/components/icons/PauseIcon.tsx","common/components/TrackPlayer/TrackPlayer.tsx","experiential/components/SubmitFeedback/EmojiPicker.tsx","experiential/components/SubmitFeedback/InterviewFeedback.tsx","experiential/components/Player/index.tsx","fastTrack/hooks/useEvents.ts","fastTrack/components/FastTrackPlayer.tsx","fastTrack/components/MobileDeadEnd.tsx","games/tetris/utils/gameHelpers.js","games/tetris/utils/tetrominos.js","games/tetris/hooks/useStage.js","games/tetris/hooks/useGameStatus.js","games/tetris/components/Cell.tsx","games/tetris/components/Stage.tsx","games/components/GameMessageBox.tsx","games/hooks/useOutcome.ts","games/tetris/Tetris.tsx","games/tetris/hooks/usePlayer.js","games/tetris/hooks/useInterval.js","games/slotMachine/hooks/useRoll.ts","games/slotMachine/SlotMachine.tsx","bookClub/components/BookClubJourney.tsx","bookClub/components/BookClubJourneyRoot.tsx","bookClub/components/BookPlayer.tsx","arupExperienceLanding/components/ArupExperienceLandingRoot.tsx","games/coronaInvaders/CoronaInvaders.tsx","projectCharlotte/ProjectCharlotteRoot.tsx","index.tsx"],"names":["locales","localeResources","common","require","Object","freeze","fallbackLanguages","nl","default","i18n","i18next","use","LanguageDetector","initReactI18next","init","resources","fallbackLng","ns","defaultNS","react","useSuspense","debug","cache","enabled","Boolean","window","location","hostname","match","withStyles","theme","createStyles","root","height","overflow","backgroundSize","backgroundColor","backgroundPosition","backgroundImage","container","padding","background","breakpoints","up","borderRight","palette","primary","main","borderLeft","props","className","classes","Container","maxWidth","children","config","activeDirectory","appId","redirectUri","origin","tokenStorage","api","cookies","Cookies","msal","msalConfig","auth","clientId","authority","tenant","cacheLocation","storeAuthStateInCookie","Msal","initMsal","loginRequest","scopes","loginRedirectAndSetLocal","handleRedirectPromise","tokenResponse","getAllAccounts","length","loginRedirect","acquireTokenSilentAndSetLocal","localStorage","setItem","accessToken","idToken","expiresOn","toString","set","maxAge","path","sameSite","secure","accountInfo","console","log","tokenRequest","account","acquireTokenSilent","res","isAuthenticated","getItem","expiration","expiryDate","Date","now","isAfter","useAppDispatch","useDispatch","useAppSelector","useSelector","sliceInitialState","currentUser","undefined","customSlice","createSlice","name","initialState","reducers","login","state","action","decoded","jwt","decode","payload","user","email","userActions","actions","width","display","justifyContent","alignItems","useState","isAuthorizing","setIsAuthorizing","isAuth","setIsAuth","dispatch","authorize","then","useEffect","Button","onClick","variant","color","updateProgress","progress","axios","put","response","data","trailer","id","title","author","thumbnail","document","src","shuffle","a","i","j","Math","floor","random","x","ambients","backgroundSrc","audioSrc","volume","shuffledAmbients","placeholder","interviews","thumbnailSrc","burstSrc","UTC","ambient","videos","bookClubTrailer","books","libraryPath","refreshProgress","createAsyncThunk","get","Items","progressVideo","progressInterview","progressAllVideos","thunkApi","getState","promises","libraryState","map","v","mediaId","Promise","all","extraReducers","builder","addCase","fulfilled","t","p","find","order","book","video","b","interview","pi","tetris","outcomeId","target","best","slotMachine","credits","refreshGameProgress","game","gameId","progressGame","score","setTetrisChallenge","setSlotMachineChallenge","gameActions","store","configureStore","reducer","userState","UserSlice","LibrarySlice","gamesState","GamesSlice","createTheme","secondary","typography","fontFamily","body2","fontSize","marginBottom","overrides","MuiCssBaseline","flex","flexDirection","scrollbarColor","scrollbarWidth","borderRadius","MuiButton","outlined","fontWeight","textTransform","textDecoration","cursor","boxShadow","outlinedPrimary","border","outlinedSecondary","sizeLarge","MuiIconButton","colorPrimary","setEnd","end","getTime","ALLOWANCE","clearEnd","remove","getEnd","LockIcon","SvgIcon","d","TickIcon","viewBox","PlayIcon","position","transition","shadow","transform","image","maxHeight","numb","top","right","zIndex","icon","disabled","status","clsx","substring","alt","PlayRoundIcon","margin","dark","speaker","current","history","useHistory","getStatus","useCallback","Box","push","VideoThumbnail","marginRight","fontVariantNumeric","delta","setDelta","interval","setInterval","onTimeOut","clearInterval","renderDelta","toISOString","substr","footer","info","inline","alignSelf","filled","opacity","open","setOpen","restart","progressPc","ceil","style","SvgHomeIcon","xmlns","fill","stroke","strokeWidth","strokeMiterlimit","HomeIcon","Icon","Home","emojis","fileName","transitionProperty","transitionDuration","transitionTimingFunction","filter","selected","radio","clip","wrapper","label","selectedEmoji","setSelectedEmoji","it","index","isSelected","strIndex","JSON","stringify","type","value","htmlFor","cslx","PostFeedback","feedback","post","SvgCloseIcon","y","xmlSpace","CloseIcon","Close","marginLeft","closeIcon","feedbackList","feedbackItem","emoji","setEmoji","message","setMessage","redEmojis","e","IconButton","m","preventDefault","catch","err","alert","SvgAlertIcon","AlertIcon","Alert","left","values","md","box","minHeight","down","content","contrastText","textAlign","paddingTop","paddingBottom","button","buttons","textStyle","header","flexes","marginTop","grid","flexBasis","float","setStatus","every","href","paddingRight","Grid","spacing","idx","item","lg","reduce","Modal","headerSmall","small","iconOptional","verticalSpacing","pathLayout","r","drawPlay","ctx","size","lineWidth","fillStyle","strokeStyle","beginPath","moveTo","lineTo","drawLink","curr","prev","next","colorPrev","colorNext","closePath","getDrawingNode","styles","paddingLeft","drawing","details","color_01","color_02","pathStepStyle","watched","canvasRef","useRef","node","useLayoutEffect","canvas","clearRect","h","x0","dx","dy","rect","y0","drawTrailer","draw","getContext","getWidth","devicePixelRatio","ref","colorBubble","colorProgress","arc","PI","drawWatchedInterview","drawNextInterview","passive","drawFutureInterview","borderBottom","titles","subtitle","onClose","track","greyedOut","light","onSelect","isPending","React","isPlaying","setIsPlaying","playsinline","url","controls","playing","file","hlsOptions","xhrSetup","xhr","setRequestHeader","onPause","onEnded","onPlay","isNoInterviewSelected","includes","pathRef","unwrap","progressIdShouldInclude","setOverlay","sortedInterviews","useMemo","sInterviews","slice","sort","t1","t2","nextIdx","findIndex","selectedInterviews","scrollBy","scrollHeight","behavior","playTrailer","playInterview","overlay","SvgNothingIcon","InvisibleIcon","interviewId","justifySelf","getFeedback","titleFromBook","titleFromInterview","findTitleForMediaId","feedbackContainer","bottom","flexWrap","gradient","maskImage","ui","alignText","minWidth","ribbon","lineHeight","letterSpacing","transformOrigin","overflowX","setFeedbackList","setStyle","containerEl","useTheme","fetchFeedbackAndSetInitialPosition","animationTime","offsetHeight","randomBetween","min","max","targetLength","screen","concat","Array","fb","randomizeFeedbackItems","SvgPlayRoundIcon","PlayBox","SvgPauseIcon","PauseIcon","Pause","objectFit","player","progressBar","spinner","animation","localProgress","setLocalProgress","interviewReady","setInterviewReady","ambientReady","setAmbientReady","hasEnded","setHasEnded","interviewRef","playOrPause","setPlaying","closeIconOnClick","PlayBoxIcon","offsetLeft","offsetWidth","pc","clientX","seekTo","onReady","onProgress","played","forceAudio","onSeek","s","imageChecked","fieldset","aspectRatio","onEmojiSelected","emojiOptions","form","preview","validated","setValidated","submit","autoComplete","TextField","multiline","onChange","event","autoFocus","params","thisProgress","setThisProgress","progressList","progressQuery","newProgress","useEvents","videoId","componentActions","withTimeDown","secondsLeft","first","timeout","setTimeout","schedule","text","clearTimeout","tooMuchPressure","replace","wasteTimeAndComeBack","distractionEvents","resume","playSlotMachine","v1","at","v2","v3","dontAccept","v4","v5","v6","flexGrow","timer","setEvent","eventAtHistory","setEventAtHistory","playedSeconds","setProgress","formatProgress","minutes","toLocaleString","maximumFractionDigits","minimumIntegerDigits","seconds","scheduleDelayedEvent","delay","eventLibrary","muted","progressInterval","onDuration","duration","eventItem","_","renderMessageBox","overrideText","createStage","from","checkCollision","stage","moveX","moveY","tetromino","pos","TETROMINOS","shape","I","J","L","O","S","T","Z","randomTetromino","tetrominos","randTetromino","useStage","resetPlayer","setStage","rowsCleared","setRowsCleared","updateStage","prevStage","newStage","row","cell","forEach","collided","ack","unshift","sweepRows","gridTemplateColumns","gridTemplateRows","outlineStyle","GameMessageBox","forwardRef","forwardedRef","focusId","setFocusId","handleKeyPress","key","mod","n","f","getElementById","focus","handleKeys","onKeyEvent","isExclusive","displayName","useOutcome","onWin","onLoose","modal","close","rowGap","dropTime","setDropTime","gameOver","setGameOver","outcome","setPlayer","rotate","matrix","dir","rotatedTetro","col","reverse","STAGE_WIDTH","clonedPlayer","parse","offset","usePlayer","updatePlayerPos","playerRotate","setScore","rows","setRows","level","setLevel","linePoints","calcScore","useGameStatus","movePlayer","restartGame","drop","keyUp","move","keyCode","callback","savedCallback","useInterval","useRoll","column1","setColumn1","column2","setColumn2","ICON_MAPPING","ARUP","PENGUIN","PROJECT","OVE","MUSIC","ENGAGE","LEVERAGE","DISRUPT","LOSE_MESSAGES","COLUMNS","columnGap","column","slot","spin","bgWin","popup","setPopup","spins","setSpins","results","resultSetters","isFirstGame","setIsFirstGame","hasWon","allEqual","trio","isSpinning","some","ri","intervals","ANIMATION_DURATION","durations","randBetween","snext","modalBody","buttonOverride","anchor","textDecorationLine","rel","portals","description","route","external","list","overflowY","itemList","borderTop","itemText","itemAnchor","unityContent","UnityContent","isDesktop","innerWidth","body","paragraph","titleWrapper","heigth","App","browserHistory","createBrowserHistory","interceptors","request","headers","I18nextProvider","ThemeProvider","CssBaseline","component","InterviewPlayer","FastTrackPlayer","isMobile","MobileDeadEnd","FastTrackCatalogue","FeedbackPortal","ArupExperienceLandingRoot","BookPlayer","BookClubJourneyRoot","ProjectCharlotteRoot","ReactDOM","render","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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CACEgI,GAAI,KACJC,MAAO,YACPC,OAAQ,wBACRR,SAAU,EACVW,IACE,WACAD,SAASrI,SAASC,SAClB,wHACFmI,UACE,WACAC,SAASrI,SAASC,SAClB,gFAEJ,CACEgI,GAAI,KACJC,MAAO,YACPC,OAAQ,sBACRR,SAAU,EACVW,IACE,WACAD,SAASrI,SAASC,SAClB,wHACFmI,UACE,WACAC,SAASrI,SAASC,SAClB,gFAEJ,CACEgI,GAAI,KACJC,MAAO,YACPC,OAAQ,cACRR,SAAU,EACVW,IACE,WACAD,SAASrI,SAASC,SAClB,wHACFmI,UACE,WACAC,SAASrI,SAASC,SAClB,gFAEJ,CACEgI,GAAI,KACJC,MAAO,YACPC,OAAQ,mBACRR,SAAU,EACVW,IACE,WACAD,SAASrI,SAASC,SAClB,wHACFmI,UACE,WACAC,SAASrI,SAASC,SAClB,gFAEJ,CACEgI,GAAI,KACJC,MAAO,YACPC,OAAQ,uBACRR,SAAU,EACVW,IACE,WACAD,SAASrI,SAASC,SAClB,wHACFmI,UACE,WACAC,SAASrI,SAASC,SAClB,+EClEAkJ,GAAmBZ,GAAQ,GAAD,OAdN,CACxBQ,GAAS,GACTA,GAAS,GACTA,GAAS,GACTA,GAAS,GACTA,GAAS,GACTA,GAAS,GACTA,GAAS,GACTA,GAAS,GACTA,GAAS,IACTA,GAAS,IACTA,GAAS,IACTA,GAAS,OAGLK,GACJ,WACAf,SAASrI,SAASC,SAClB,wHAEW0J,GAA0B,CACrC1B,GAAI,UACJC,MAAO,2BACPC,OAAQ,0BACRC,UACE,WACAC,SAASrI,SAASC,SAClB,4FACFqI,IACE,WACAD,SAASrI,SAASC,SAClB,wHACF0H,SAAU,GCpBNrC,GAAmC,CACvC+D,cACAO,MDqB4B,CAC5B,CACE3B,GAAI,KACJC,MAAO,gBACPC,OAAQ,eACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,iBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,EAAIA,GAAiB7F,QAC/CqE,SAAU,EACVuB,OAAQ,EACRW,YACE,0GAEJ,CACE5B,GAAI,KACJC,MAAO,kCACPC,OAAQ,kBACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,iBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,EAAIA,GAAiB7F,QAC/CqE,SAAU,EACVuB,OAAQ,EACRW,YACE,iJAEJ,CACE5B,GAAI,KACJC,MAAO,2CACPC,OAAQ,gBACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,iBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,EAAIA,GAAiB7F,QAC/CqE,SAAU,EACVuB,OAAQ,EACRW,YACE,iKAEJ,CACE5B,GAAI,KACJC,MAAO,sBACPC,OAAQ,wBACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,iBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,EAAIA,GAAiB7F,QAC/CqE,SAAU,EACVuB,OAAQ,EACRW,YACE,+HAEJ,CACE5B,GAAI,KACJC,MAAO,wDACPC,OAAQ,gBACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,iBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,EAAIA,GAAiB7F,QAC/CqE,SAAU,EACVuB,OAAQ,EACRW,YACE,2LAEJ,CACE5B,GAAI,KACJC,MAAO,yBACPC,OAAQ,qBACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,iBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,EAAIA,GAAiB7F,QAC/CqE,SAAU,EACVuB,OAAQ,EACRW,YACE,kIAEJ,CACE5B,GAAI,KACJC,MAAO,yBACPC,OAAQ,eACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,iBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,EAAIA,GAAiB7F,QAC/CqE,SAAU,EACVuB,OAAQ,EACRW,YACE,4HAEJ,CACE5B,GAAI,KACJC,MAAO,yBACPC,OAAQ,WACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,iBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,EAAIA,GAAiB7F,QAC/CqE,SAAU,EACVuB,OAAQ,EACRW,YACE,wHAEJ,CACE5B,GAAI,KACJC,MAAO,mBACPC,OAAQ,YACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,iBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,EAAIA,GAAiB7F,QAC/CqE,SAAU,EACVuB,OAAQ,EACRW,YACE,6GAEJ,CACE5B,GAAI,MACJC,MAAO,iCACPC,OAAQ,cACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,EAAIA,GAAiB7F,QAC/CqE,SAAU,EACVuB,OAAQ,EACRW,YACE,2IAEJ,CACE5B,GAAI,MACJC,MAAO,+BACPC,OAAQ,sBACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,+IAEJ,CACE5B,GAAI,MACJC,MAAO,QACPC,OAAQ,gBACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,2FAEJ,CACE5B,GAAI,MACJC,MAAO,+BACPC,OAAQ,oCACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,6JAEJ,CACE5B,GAAI,MACJC,MAAO,gBACPC,OAAQ,uCACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,kIAEJ,CACE5B,GAAI,MACJC,MAAO,iCACPC,OAAQ,cACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,2IAEJ,CACE5B,GAAI,MACJC,MAAO,sDACPC,OAAQ,qCACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,4MAEJ,CACE5B,GAAI,MACJC,MAAO,uCACPC,OAAQ,iBACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,0JAEJ,CACE5B,GAAI,MACJC,MAAO,eACPC,OAAQ,wCACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,iIAEJ,CACE5B,GAAI,MACJC,MAAO,2BACPC,OAAQ,mCACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,oJAEJ,CACE5B,GAAI,MACJC,MAAO,0BACPC,OAAQ,kBACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,iIAEJ,CACE5B,GAAI,MACJC,MAAO,4BACPC,OAAQ,iBACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,oIAEJ,CACE5B,GAAI,MACJC,MAAO,8CACPC,OAAQ,iBACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,wKAEJ,CACE5B,GAAI,MACJC,MAAO,kBACPC,OAAQ,cACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,6GAEJ,CACE5B,GAAI,MACJC,MAAO,8BACPC,OAAQ,eACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,sIAEJ,CACE5B,GAAI,MACJC,MAAO,2BACPC,OAAQ,cACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,+HAEJ,CACE5B,GAAI,MACJC,MAAO,2BACPC,OAAQ,mBACRG,IAAK,WAAaD,SAASrI,SAASC,SAAW,kBAC/CqJ,aACE,WACAjB,SAASrI,SAASC,SAClB,2EACFsJ,SACE,IAAIxE,KAAS,IAAIA,KAAKA,KAAKyE,IAAI,KAAM,EAAG,GAAI,GAAI,EAAG,IAC/CJ,GACA,WACAf,SAASrI,SAASC,SAClB,wHACNwJ,QAASN,GAAiB,GAAKA,GAAiB7F,QAChDqE,SAAU,EACVuB,OAAQ,EACRW,YACE,qICrjBJH,UACA1B,WACA2B,oBAGWG,GAAkBC,YAC7B,0BAAyB,gCACzB,wGCrBOnC,KACJoC,IAAG,UAA2BnI,EAAOM,IAAG,eACxCiF,MAAK,SAACU,GAAQ,OAAKA,EAASC,KAAKkC,OAAS,EAAE,IDoBhB,oFAIpBC,GAAgBH,YAC3B,wBAAuB,iDACvB,WAAOpC,GAAkB,2FACVD,GAAeC,GAAS,mFACtC,mDAHsB,IAMZwC,GAAoBJ,YAC/B,4BAA2B,iDAC3B,WAAOpC,GAAkB,2FACVD,GAAeC,GAAS,mFACtC,mDAH0B,IAMhByC,GAAoBL,YAI/B,4BAA2B,iDAAE,WAAOpC,EAAU0C,GAAQ,mFAIrD,OAHKtE,EAAQsE,EAASC,WACjBC,EAAWxE,EAAMyE,aAAad,OAAOe,KAAI,SAACC,GAAC,OAC/ChD,GAAe,CAAEiD,QAASD,EAAEzC,GAAIN,SAAUA,GAAW,IACtD,SACYiD,QAAQC,IAAIN,GAAS,mFACnC,qDAN4B,IAQvB9E,GAAcC,YAAY,CAC9BC,KAAM,UACNC,aAAcN,GACdO,SAAU,CASR,EAEFiF,cAAe,SAACC,GACdA,EAAQC,QAAQlB,GAAgBmB,WAAW,SAAClF,EAAOC,GAyBjD,OAxBAD,EAAMsD,WAAatD,EAAMsD,WAAWoB,KAAI,SAACS,GACvC,IAAMC,EAAInF,EAAOI,QAAQgF,MAAK,SAACD,GAAC,OAAKA,EAAER,UAAYO,EAAEjD,EAAE,IACvD,OAAO,2BACFiD,GAAC,IACJvD,UAAW,OAADwD,QAAC,IAADA,OAAC,EAADA,EAAGxD,WAAY,EACzB0D,MAAQ,OAADF,QAAC,IAADA,OAAC,EAADA,EAAGE,OAEd,IACAtF,EAAM6D,MAAQ7D,EAAM6D,MAAMa,KAAI,SAACa,GAC7B,IAAMH,EAAInF,EAAOI,QAAQgF,MAAK,SAACD,GAAC,OAAKA,EAAER,UAAYW,EAAKrD,EAAE,IAC1D,OAAO,2BACFqD,GAAI,IACP3D,UAAW,OAADwD,QAAC,IAADA,OAAC,EAADA,EAAGxD,WAAY,EACzB0D,MAAQ,OAADF,QAAC,IAADA,OAAC,EAADA,EAAGE,OAEd,IACAtF,EAAM2D,OAAS3D,EAAM2D,OAAOe,KAAI,SAACC,GAC/B,IAAMS,EAAInF,EAAOI,QAAQgF,MAAK,SAACD,GAAC,OAAKA,EAAER,UAAYD,EAAEzC,EAAE,IACvD,OAAO,2BACFyC,GAAC,IACJ/C,UAAW,OAADwD,QAAC,IAADA,OAAC,EAADA,EAAGxD,WAAY,EACzB0D,MAAQ,OAADF,QAAC,IAADA,OAAC,EAADA,EAAGE,OAEd,IACOtF,CACT,IACAgF,EAAQC,QAAQd,GAAce,WAAW,SAAClF,EAAOC,GAC/C,IAAIuF,EAAQxF,EAAM2D,OAAO0B,MAAK,SAACI,GAAC,OAAKA,EAAEvD,KAAOjC,EAAOI,QAAQuE,OAAO,IAIpE,OAHIY,IACFA,EAAM5D,SAAW3B,EAAOI,QAAQuB,UAE3B5B,CACT,IACAgF,EAAQC,QAAQb,GAAkBc,WAAW,SAAClF,EAAOC,GACnD,IAAIyF,EAAY1F,EAAMsD,WAAW+B,MAC/B,SAACF,GAAC,OAAKA,EAAEjD,KAAOjC,EAAOI,QAAQuE,OAAO,IAQxC,OANIc,IACFA,EAAU9D,SAAW3B,EAAOI,QAAQuB,cACPnC,IAAzBQ,EAAOI,QAAQiF,QACjBI,EAAUJ,MAAQrF,EAAOI,QAAQiF,QAG9BtF,CACT,IACAgF,EAAQC,QAAQZ,GAAkBa,WAAW,SAAClF,EAAOC,GACnD,IAAM2B,EAAW3B,EAAOI,QACxBL,EAAM2D,OAAS3D,EAAM2D,OAAOe,KAAI,SAACC,GAC/B,IAAMS,EAAIxD,EAASyD,MAAK,SAACM,GAAE,OAAMA,EAAGf,QAAUD,EAAEzC,EAAE,IAClD,OAAO,2BAAKyC,GAAC,IAAE/C,SAAUwD,EAAExD,UAC7B,GACF,GACF,IAIalC,IADeA,GAAYe,QAC3Bf,GAAmB,SE1H5BH,GAAiC,CACrCqG,OAAQ,CACNC,eAAWpG,EACXqG,OAAQ,IACRC,KAAM,GAERC,YAAa,CACXH,eAAWpG,EACXqG,OAAQ,KACRG,QAAS,MAIAC,GAAsBlC,YACjC,wBAAuB,iDACvB,WAAOmC,GAAa,2FCnBUC,EDoBCD,ECnBxBtE,KACJoC,IAAG,UAAcnI,EAAOM,IAAG,qBAAagK,EAAM,MAC9C/E,MAAK,SAACU,GAAQ,OAAKA,EAASC,IAAI,IDiBC,yECpBP,IAACoE,CDoBM,UACnC,mDAHsB,IAMZC,GAAerC,YAC1B,iBAAgB,iDAChB,WAAO3D,GAAyC,2FACjCsB,GAAe,CAC1BiD,QAASvE,EAAQ8F,KACjBvE,SAAUvB,EAAQiG,QAClB,mFACH,mDANe,IASZ5G,GAAcC,YAAY,CAC9BC,KAAM,QACNC,aAAcN,GACdO,SAAU,CACRyG,mBAAkB,SAChBvG,EACAC,GAOA,OAFA3B,QAAQC,IAAI0B,EAAOI,SACnBL,EAAM4F,OAAM,2BAAQ5F,EAAM4F,QAAW3F,EAAOI,SACrCL,CACT,EACAwG,wBAAuB,SACrBxG,EACAC,GAMA,OADAD,EAAMgG,YAAW,2BAAQhG,EAAMgG,aAAgB/F,EAAOI,SAC/CL,CACT,GAEF+E,cAAe,SAACC,GACdA,EAAQC,QAAQiB,GAAoBhB,WAAW,SAAClF,EAAOC,GAKrD,MAJ+B,WAA3BA,EAAOI,QAAQuE,UACjB5E,EAAM4F,OAAOG,KAAO9F,EAAOI,QAAQuB,UACN,gBAA3B3B,EAAOI,QAAQuE,UACjB5E,EAAMgG,YAAYC,QAAUhG,EAAOI,QAAQuB,UACtC5B,CACT,IACAgF,EAAQC,QAAQoB,GAAanB,WAAW,SAAClF,EAAOC,GAK9C,MAJ+B,WAA3BA,EAAOI,QAAQuE,QACjB5E,EAAM4F,OAAOG,KAAO9F,EAAOI,QAAQuB,SACD,gBAA3B3B,EAAOI,QAAQuE,UACtB5E,EAAMgG,YAAYC,QAAUhG,EAAOI,QAAQuB,UACtC5B,CACT,GACF,IAGWyG,GAAc/G,GAAYe,QACxBf,MAAmB,QEjEnBgH,GAbDC,YAAe,CAC3BC,QAAS,CACPC,UAAWC,EACXrC,aAAcsC,GACdC,WAAYC,M,UCPH5M,GAAQ6M,aAAY,CAC/B9L,QAAS,CACPC,QAAS,CACPC,KAAM,WAER6L,UAAW,CACT7L,KAAM,YAGV8L,WAAY,CACVC,WAAY,SACZC,MAAO,CACL5F,MAAO,UACP6F,SAAU,YACVC,aAAc,SAGlBC,UAAW,CACTC,eAAgB,CACd,UAAW,CACT,aAAc,CACZlN,OAAQ,OACRkG,MAAO,OACPC,QAAS,OACTgH,KAAM,GAER,QAAS,CACPhH,QAAS,OACTiH,cAAe,SACfD,KAAM,EACNjH,MAAO,QAET,IAAK,CAEHmH,eAAe,eACfC,eAAgB,OAEhB,wBAAyB,CACvBpH,MAAO,EACPlG,OAAQ,GAEV,8BAA+B,CAC7BG,gBAAiB,OACjBoN,aAAc,IAEhB,8BAA+B,CAC7BpN,gBAAiB,UACjBoN,aAAc,OAKtBC,UAAW,CACTC,SAAU,CACRV,SAAU,OACVxM,QAAS,gBACTgN,aAAc,MACdG,WAAY,OACZb,WAAY,wBACZc,cAAe,OACfC,eAAgB,OAChBC,OAAQ,UACRC,UAAW,QAEbC,gBAAiB,CACflB,WAAY,UACZ1M,gBAAiB,OACjB6N,OAAQ,oBACR9G,MAAO,UACP,wBAAyB,CACvB,kBAAmB,CACjBA,MAAO,QACP/G,gBAAiB,UACjB6N,OAAQ,sBAGZ,iBAAkB,CAChBA,OAAQ,oBACR9G,MAAO,YAGX+G,kBAAmB,CACjB9N,gBAAiB,QACjB6N,OAAQ,iBACR9G,MAAO,OACP,wBAAyB,CACvB,UAAW,CACTA,MAAO,OACP/G,gBAAiB,OACjB6N,OAAQ,oBAIdE,UAAW,CACT3N,QAAS,cACTwM,SAAU,SAGdoB,cAAe,CACbC,aAAc,CACZ,wBAAyB,CACvB,UAAW,CACT5N,WAAY,mC,8BCtGlBqB,GAAU,IAAIC,IAIPuM,GAAS,SAACC,QACTrJ,IAARqJ,EACFzM,GAAQ2B,IAAI,OAAO,IAAIgB,MAAO+J,UAAYC,KAAiB,CAAE9K,KAAM,MAEnE7B,GAAQ2B,IAAI,MAAO8K,EAAK,CAAE5K,KAAM,KAEpC,EAEa+K,GAAW,WAAH,OAAS5M,GAAQ6M,OAAO,MAAO,CAAEhL,KAAM,KAAM,EAErDiL,GAAS,WAAH,OAAS9M,GAAQ4H,IAAI,MAAM,E,oBCL/BmF,OARf,SAAkB5N,GAChB,OACE,cAAC6N,GAAA,EAAO,2BAAK7N,GAAK,aAChB,sBAAM8N,EAAE,kPAGd,ECMeC,OAZf,SAAkB/N,GAChB,OACE,cAAC6N,GAAA,EAAO,yBAACG,QAAQ,eAAkBhO,GAAK,aACtC,sBACE8N,EAAE,4QAMV,ECFeG,OARf,SAAkBjO,GAChB,OACE,cAAC6N,GAAA,EAAO,2BAAK7N,GAAK,aAChB,sBAAM8N,EAAE,yMAGd,E,QCmFelP,gBAnFA,SAACC,GAAY,OAC1BC,YAA2B,CACzB+H,UAAW,CACTqH,SAAU,WACVhJ,MAAO,OACPlG,OAAQ,OACRmG,QAAS,OACTiH,cAAe,MACfhH,eAAgB,SAChBC,WAAY,SACZ8I,WAAY,WACZ,UAAW,CACTC,OAAQ,KACRvB,OAAQ,UACRwB,UAAW,gBAGfC,MAAO,CACLJ,SAAU,WACVK,UAAW,OACXrJ,MAAO,QAETsJ,KAAM,CACJN,SAAU,WACVrC,WAAY,UACZ3F,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7BiM,SAAU,SACVW,WAAY,OACZ+B,IAAK,UACLC,MAAO,OACPC,OAAQ,GAEVC,KAAM,CACJ1I,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7BoO,SAAU,WACVnC,SAAU,QAEZ8C,SAAU,CACR,OAAQ,CACNhC,OAAQ,WAEV,UAAW,CACTA,OAAQ,UACRwB,UAAW,OACXD,OAAQ,UAGZ,GAoCWxP,EAzBwB,SAACoB,GACtC,IAAQ0G,EAA+B1G,EAA/B0G,GAAIoI,EAA2B9O,EAA3B8O,OAAQ5O,EAAmBF,EAAnBE,QAASoO,EAAUtO,EAAVsO,MAC7B,OACE,mCACE,sBACErO,UAAW8O,aACT7O,EAAQ2G,UACG,YAAXiI,GAAwB5O,EAAQ2O,UAChC,UAEF,qBAAK5O,UAAWC,EAAQsO,KAAK,SAAE9H,EAAGsI,UAAU,KAE5C,qBAAKjI,IAAKuH,EAAOW,IAAKvI,EAAIzG,UAAWC,EAAQoO,QACjC,YAAXQ,EACC,cAACI,GAAa,CAACjP,UAAWC,EAAQ0O,KAAM1I,MAAM,YACjC,YAAX4I,EACF,cAAC,GAAQ,CAAC7O,UAAWC,EAAQ0O,KAAM1I,MAAM,YAEzC,cAAC,GAAQ,CAACjG,UAAWC,EAAQ0O,KAAM1I,MAAM,gBAKnD,ICvBetH,gBArDA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJoQ,OAAQ,EACRtC,OAAQ,WAEVhG,UAAW,CACT3B,MAAO,OACP/F,gBAAiBN,EAAMe,QAAQ+L,UAAUyD,MAE3CzI,MAAO,CAAET,MAAOrH,EAAMe,QAAQC,QAAQC,KAAMqP,OAAQ,KACpDE,QAAS,CAAEnJ,MAAO,OAAQiJ,OAAQ,MAClC,GAyCWvQ,EA/BwB,SAACoB,GACtC,IAAQgK,EAAmBhK,EAAnBgK,MAAOsF,EAAYtP,EAAZsP,QACTpP,EAAUF,EAAME,QAElBqP,EAAUC,cAERC,EAAYC,uBAAY,WAC5B,OAAIJ,EAAgB,UACM,IAAnBtF,EAAM5D,SAAiB,UAAY,SAC5C,GAAG,CAAC4D,EAAOsF,IAMX,OACE,cAACK,GAAA,EAAG,CACF1P,UAAWC,EAAQnB,KACnBiH,QAAS,WACHsJ,GAPRC,EAAQK,KAAK,qBAAD,OAAsB5F,EAAMtD,IAQtC,EAAE,SAEF,cAACmJ,GAAc,CACbnJ,GAAIsD,EAAMtD,GACVoI,OAAQW,IACRnB,MAAOtE,EAAMnD,aAIrB,ICnBejI,gBApCA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJ8N,OAAQ,UACR,UAAW,CACTwB,UAAW,eAGfxH,UAAW,CACT3B,MAAO,SAET,GAyBWtG,EAjBuB,SAACoB,GACrC,IAAQ2K,EAAkB3K,EAAlB2K,KAAMzK,EAAYF,EAAZE,QACRqP,EAAUC,cAChB,OACE,cAACG,GAAA,EAAG,CACF1P,UAAWC,EAAQnB,KACnBiH,QAAS,kBAAMuJ,EAAQK,KAAK,eAAD,OAAgBjF,GAAO,EAAC,SAEnD,qBACE1K,UAAWC,EAAQ2G,UACnBoI,IAAKtE,EACL5D,IAAG,4BAAuB4D,EAAI,WAItC,ICWe/L,gBAnDA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJ8M,WAAY,UACZE,SAAU,OACV+D,YAAa,OACbpD,WAAY,OACZqD,mBAAoB,iBAEtB,GA0CWnR,EAjCwB,SAACoB,GACtC,IAAQE,EAAYF,EAAZE,QAER4F,qBAAU,gBACS7B,IAAb0J,MACFN,IAEJ,GAAG,IAEH,MAA0B/H,mBACxBqI,KAAWA,MAAW,IAAInK,MAAO+J,UAAYC,MAC9C,mBAFMwC,EAAK,KAAEC,EAAQ,KAItBnK,qBAAU,WACR,IAAMoK,EAAWC,aAAY,WACvBxC,MAAW,IAAInK,MAAO+J,YACxBE,KACAzN,EAAMoQ,aAEJJ,EAAQ,GACVC,GAAS,kBAAMtC,MAAW,IAAInK,MAAO+J,SAAS,GAElD,GAAG,KACH,OAAO,kBAAM8C,cAAcH,EAAS,CACtC,IAEA,IAAMI,EAAcZ,uBAAY,WAC9B,OAAO,IAAIlM,KAAKwM,GAAOO,cAAcC,OAAO,GAAI,EAClD,GAAG,CAACR,IAEJ,OAAO,qBAAK/P,UAAWC,EAAQnB,KAAK,SAAEuR,KACxC,IC4De1R,gBAxGA,SAACC,GAAY,OAC1BC,YAA2B,CACzB2R,OAAQ,CAAC,EACTC,KAAM,CACJvL,QAAS,OACTiH,cAAe,MACf/G,WAAY,SACZD,eAAgB,gBAChByG,WAAY,UACZ3F,MAAOrH,EAAMe,QAAQC,QAAQC,MAE/B6G,MAAO,CACLwI,OAAQ,IACRjJ,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7BiM,SAAU,SACV+D,YAAa,UAEfxQ,UAAW,CACT4F,MAAO,OACPlG,OAAQ,OACRQ,WAAY,0BAEd2M,KAAM,CACJhH,QAAS,OACTiH,cAAe,MACf/G,WAAY,YAEdsL,OAAQ,CACN9E,WAAY,mBACZa,WAAY,OACZX,SAAU,OACV6E,UAAW,UAEbC,OAAQ,CACN7R,OAAQ,OACRQ,WAAYX,EAAMe,QAAQC,QAAQC,KAClCgR,QAAS,IAEX,GAkEWlS,EA/CuB,SAACoB,GACrC,MAAiEA,EAAME,QAA/DuQ,EAAM,EAANA,OAAQC,EAAI,EAAJA,KAAM/J,EAAK,EAALA,MAAOrH,EAAS,EAATA,UAAW6M,EAAI,EAAJA,KAAMwE,EAAM,EAANA,OAAQE,EAAM,EAANA,OAC9CE,EAA2B/Q,EAA3B+Q,KAAMC,EAAqBhR,EAArBgR,QAASC,EAAYjR,EAAZiR,QAEjBC,EAAa9J,KAAK+J,KAAsB,IAAjBnR,EAAMoG,UAEnC,OACE,sBAAKnG,UAAWwQ,EAAO,UACrB,sBAAKxQ,UAAWyQ,EAAK,UACnB,sBAAKzQ,UAAWkM,EAAK,UACnB,qBAAIlM,UAAW0G,EAAM,cAAGuK,EAAU,QAClC,uBAAMjR,UAAW0Q,EAAO,4BACP,uBAAM,0BAGzB,gCACkB,MAAfO,GACC,cAACnL,EAAA,EAAM,CACLE,QAAQ,WACRC,MAAM,UACNF,QAASiL,EACTG,MAAO,CAAEtB,YAAa,QAAS,yBAKnC,cAAC/J,EAAA,EAAM,CACLE,QAAQ,WACRC,MAAM,UACNF,QAAS,kBAAMgL,GAASD,EAAK,EAAC,SAE7B,mBAIP,qBAAK9Q,UAAWX,EAAU,SACxB,qBACEW,UAAW4Q,EACXO,MAAO,CACLlM,MAAM,GAAD,OAAKgM,EAAU,YAMhC,I,UCpFeG,OAzBf,SAAqBrR,GACnB,OACE,8CACEsR,MAAM,6BACNtD,QAAQ,YACR9I,MAAM,MACNlG,OAAO,OACHgB,GAAK,cAET,sBACE8N,EAAE,sCACFyD,KAAK,OACLC,OAAO,eACPC,YAAa,IACbC,iBAAkB,KAEpB,sBACE5D,EAAE,0CACF0D,OAAO,eACPD,KAAK,oBAIb,ECbeI,OARf,SAAkB3R,GAChB,OACE,cAAC4R,GAAA,EAAI,2BAAK5R,GAAK,aACb,cAAC6R,GAAI,MAGX,ECmBeC,GA3BS,CACtB,CAAE1N,KAAM,aAAc2N,SAAU,kBAChC,CAAE3N,KAAM,aAAc2N,SAAU,kBAChC,CAAE3N,KAAM,aAAc2N,SAAU,kBAChC,CAAE3N,KAAM,aAAc2N,SAAU,kBAChC,CAAE3N,KAAM,aAAc2N,SAAU,kBAChC,CAAE3N,KAAM,aAAc2N,SAAU,kBAChC,CAAE3N,KAAM,aAAc2N,SAAU,kBAChC,CAAE3N,KAAM,aAAc2N,SAAU,kBAChC,CAAE3N,KAAM,aAAc2N,SAAU,kBAChC,CAAE3N,KAAM,aAAc2N,SAAU,kBAChC,CAAE3N,KAAM,aAAc2N,SAAU,kBAChC,CAAE3N,KAAM,aAAc2N,SAAU,kBAChC,CAAE3N,KAAM,QAAS2N,SAAU,aAC3B,CAAE3N,KAAM,QAAS2N,SAAU,aAC3B,CAAE3N,KAAM,QAAS2N,SAAU,aAC3B,CAAE3N,KAAM,QAAS2N,SAAU,aAC3B,CAAE3N,KAAM,QAAS2N,SAAU,aAC3B,CAAE3N,KAAM,QAAS2N,SAAU,aAC3B,CAAE3N,KAAM,UAAW2N,SAAU,eAC7B,CAAE3N,KAAM,UAAW2N,SAAU,eAC7B,CAAE3N,KAAM,UAAW2N,SAAU,eAC7B,CAAE3N,KAAM,UAAW2N,SAAU,eAC7B,CAAE3N,KAAM,UAAW2N,SAAU,eAC7B,CAAE3N,KAAM,UAAW2N,SAAU,gBC2EhBnT,gBA/FF,SAACC,GAAY,OACxBC,YAA2B,CACzBC,KAAM,CACJC,OAAQ,OACRkH,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7BN,WAAY,OACZ2F,QAAS,OACTC,eAAgB,eAChB4H,OAAQ,OACRzN,QAAS,EACT4P,OAAQ,QACRnD,aAAc,MAEhBsC,MAAO,CACL/O,QAAS,MACTsN,OAAQ,UACRmF,mBAAoB,sCACpBC,mBAAoB,OACpBC,yBAA0B,OAC1BC,OAAQ,gCACR,UAAW,CACTA,OAAQ,SAGZC,SAAU,CACRD,OAAQ,OACRjM,MAAO,SAETmM,MAAO,CACLnE,SAAU,WACVhJ,MAAO,MACPlG,OAAQ,MACRC,SAAU,SACVqT,KAAM,gBACNtF,OAAQ,KAEVuF,QAAS,CACPpG,KAAM,OAERqG,MAAO,CACLrN,QAAS,OACTE,WAAY,SACZrG,OAAQ,SAEV,GAmDWJ,EAvC0B,SAACoB,GACxC,IAAQE,EAAqDF,EAArDE,QAASuS,EAA4CzS,EAA5CyS,cAAeC,EAA6B1S,EAA7B0S,iBAAkBZ,EAAW9R,EAAX8R,OAElD,OACE,qBAAK7R,UAAWC,EAAQnB,KAAK,SAC1B+S,EAAO5I,KAAI,SAACyJ,EAAIC,GACf,IAAMC,EAAsBJ,IAAkBE,EACxCG,EAAWC,KAAKC,UAAUJ,GAC1BlQ,EAAO,iBAAmBiQ,EAAGZ,SACnC,OACE,sBAA4B9R,UAAWC,EAAQqS,QAAQ,UACrD,uBAEEU,KAAK,QACL7O,KAAK,aACLnE,UAAWC,EAAQmS,MACnB3L,GAAIiM,EAAGvO,KACP8O,MAAOP,EAAGvO,MALL,QAAU0O,GAOjB,uBAEEK,QAASR,EAAGvO,KACZ4B,QAAS,kBAAM0M,EAAiBC,EAAG,EACnC1S,UAAWC,EAAQsS,MAAM,SAEzB,qBAEEzL,IAAKrE,EACLuM,IAAK0D,EAAGvO,KACRnE,UAAWmT,aAAKlT,EAAQoO,MAAOuE,GAAc3S,EAAQkS,WAHhD,MAAQU,IANV,QAAUA,KAVT,MAAQA,EAwBtB,KAGN,IC/FO,SAAeO,GAAa,GAAD,gCAGjC,wDAHM,WAA4BC,GAAkB,iGAC5BjN,KAAMkN,KAAK,GAAD,OAAIjT,EAAOM,IAAG,cAAc0S,GAAS,OAAxD,OAAR/M,EAAQ,yBACPA,EAASC,MAAI,4CACrB,sBCmCcgN,OAxCf,SAAsBxT,GACpB,OACE,8CACE0G,GAAG,yBACH4K,MAAM,6BACN/J,EAAG,EACHkM,EAAG,EACHzF,QAAQ,YACR0F,SAAS,WACTxO,MAAM,MACNlG,OAAO,OACHgB,GAAK,cAET,gCACG,wEAEH,oBACE0G,GAAG,8EACH2H,UAAU,+BAA8B,UAExC,sBACE3H,GAAG,iFACHzG,UAAU,qBACV6N,EAAE,uBAEJ,sBACEpH,GAAG,iFACHzG,UAAU,qBACV6N,EAAE,2BAGN,sBACEA,EAAE,0CACF0D,OAAO,eACPD,KAAK,oBAIb,EC5BeoC,OARf,SAAmB3T,GACjB,OACE,cAAC4R,GAAA,EAAI,2BAAK5R,GAAK,aACb,cAAC4T,GAAK,MAGZ,EC6IehV,gBAtIA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAK,aACHmG,MAAO,OACPlG,OAAQ,OACRQ,WAAY,OACZ2F,QAAS,OACTiH,cAAe,SACfhH,eAAgB,eAChByO,WAAY,MACZ7G,OAAO,aAAD,OAAenO,EAAMe,QAAQC,QAAQC,MAC3CP,QAAS,SACRV,EAAMY,YAAYC,GAAG,MAAQ,CAC5BH,QAAS,SAGbuU,UAAW,CACTlD,UAAW,WACX7E,SAAU,OACV7F,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7B+M,OAAQ,UACRtN,QAAS,GAEXwU,aAAc,CACZ5O,QAAS,OACTiH,cAAe,SACfD,KAAM,EACN/G,eAAgB,gBAElB4O,aAAc,CACZnI,WAAY,qCACZE,SAAU,QACVoC,WAAY,OACZ,4BAA6B,CAC3BpC,SAAU,SAEZ,UAAW,CACTc,OAAQ,UACR3G,MAAO,UAGXkM,SAAU,CACRlM,MAAO,UAET,GA0FWtH,EA7EuB,SAACoB,GACrC,IAAQE,EAAYF,EAAZE,QACR,EAA0BoF,qBAAiB,mBAApC2O,EAAK,KAAEC,EAAQ,KACtB,EAA8B5O,qBAAkB,mBAAzC6O,EAAO,KAAEC,EAAU,KAEpBC,EAAqBvC,GAAOK,QAChC,SAACmC,GAAC,MAAgC,aAA3BA,EAAElQ,KAAK4K,UAAU,EAAG,EAAiB,IAyB9C,OACE,mCACE,sBAAK/O,UAAWC,EAAQnB,KAAK,UAC3B,cAACwV,GAAA,EAAU,CACT,aAAW,OACXvO,QAAS,kBAAMhG,EAAMgR,SAAQ,EAAM,EACnC/Q,UAAWC,EAAQ4T,UAAU,SAE7B,cAAC,GAAS,CAAC7T,UAAWC,EAAQ4T,cAEhC,qBAAK7T,UAAWC,EAAQ6T,aAAa,SAhCb,CAE5B,mFACA,gFACA,6EACA,4GACA,gFACA,qIACA,wJAyBmB7K,KAAI,SAACsL,EAAGtN,GACnB,OACE,qBAEEjH,UAAW8O,aACT7O,EAAQ8T,aACRQ,IAAML,GAAWjU,EAAQkS,UAE3BpM,QAAS,kBAAMoO,EAAWI,EAAE,EAAC,SAE5BA,GAPItN,EAUX,MAGF,cAAC,GAAW,CACVuL,cAAewB,EACfvB,iBAAkBwB,EAClBpC,OAAQuC,IAGV,cAACtO,EAAA,EAAM,CACLE,QAAQ,WACRC,MAAM,UACNF,QA/CR,SAAgBsO,GACdA,EAAEG,sBACcxQ,IAAZkQ,QAAmClQ,IAAVgQ,GAC3BZ,GAAa,CACXc,QAASA,EACTF,MAAOA,EAAM7P,KACbgF,QAAS,eACRsL,OAAM,SAACC,GAAG,OAAKC,MAAMD,EAAI,IAC9B3U,EAAMgR,SAAQ,EAChB,EAuCQnC,UAAWsF,IAAYF,EAAM,SAE5B,aAKX,IC7GeY,OAtCf,SAAsB7U,GACpB,OACE,8CACE0G,GAAG,yBACH4K,MAAM,6BACN/J,EAAG,EACHkM,EAAG,EACHzF,QAAQ,YACR0F,SAAS,WACTxO,MAAM,MACNlG,OAAO,OACHgB,GAAK,cAET,gCACG,oEAEH,sBACEuR,KAAK,eACLzD,EAAE,wEAEJ,sBACE7N,UAAU,qBACV6N,EAAE,gLAEJ,sBACEpH,GAAG,oCACHzG,UAAU,qBACV6N,EAAE,oBAEJ,sBACEpH,GAAG,oCACHzG,UAAU,qBACV6N,EAAE,sBAIV,EC1BegH,OARf,SAAmB9U,GACjB,OACE,cAAC4R,GAAA,EAAI,2BAAK5R,GAAK,aACb,cAAC+U,GAAK,MAGZ,ECmGenW,gBAxGA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAK,aACHmP,SAAU,WACV8G,KAAM,EACNvG,IAAK,EACLzP,OAAQ,QACRkG,MAAO,QACP9E,SAAUvB,EAAMY,YAAYwV,OAAOC,GACnC/P,QAAS,OACTC,eAAgB,SAChBC,WAAY,UACXxG,EAAMY,YAAYC,GAAG,MAAQ,CAC5ByP,OAAO,kBAAD,OAAoBtQ,EAAMY,YAAYwV,OAAOC,GAAE,cAGzDC,IAAI,aACFhQ,QAAS,OACTC,eAAgB,eAChBC,WAAY,SACZ+G,cAAe,SACf5M,WAAY,OACZ4V,UAAW,MACXlQ,MAAO,MACP8H,OAAO,OAAD,OAASnO,EAAMe,QAAQC,QAAQC,KAAI,UACzCgN,UAAW,cACXvN,QAAS,aACRV,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BnQ,MAAO,MACP3F,QAAS,mBAGb+V,QAAS,CACPpP,MAAOrH,EAAMe,QAAQC,QAAQ0V,aAC7B1J,WAAY,qCACZ2J,UAAW,SACXC,WAAY,OACZC,cAAe,QAEjBC,OAAO,aAEL9J,WAAY,qCACZa,WAAY,OACZM,OAAO,OAAD,OAASnO,EAAMe,QAAQC,QAAQC,KAAI,UACzCgN,UAAU,WAAD,OAAajO,EAAMe,QAAQC,QAAQC,MAC5CP,QAAS,cACTsN,OAAQ,UACR,UAAW,CACT3G,MAAOrH,EAAMe,QAAQ+L,UAAU4J,aAC/BvI,OAAO,OAAD,OAASnO,EAAMe,QAAQC,QAAQ0V,aAAY,UACjD/V,WAAYX,EAAMe,QAAQC,QAAQC,OAEnCjB,EAAMY,YAAY4V,KAAK,MAAQ,CAC9B9V,QAAS,mBAGbqW,QAAS,CACPzQ,QAAS,OACTD,MAAO,OACPE,eAAgB,gBAElBwJ,KAAK,aACH7C,SAAU,QACTlN,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BtJ,SAAU,UAGd,GAqCWnN,EA3ByB,SAACoB,GACvC,IAAQE,EAA4BF,EAA5BE,QAAS+E,EAAmBjF,EAAnBiF,QAAS0B,EAAU3G,EAAV2G,MAE1B,OACE,qBAAK1G,UAAWC,EAAQnB,KAAK,SAC3B,sBAAKkB,UAAWC,EAAQiV,IAAI,UAC1B,cAAC,GAAS,CAAClV,UAAWC,EAAQ0O,OAC7BjI,GAAS,qBAAK1G,UAAWC,EAAQoV,QAAQ,SAAE3O,IAC5C,qBAAK1G,UAAWC,EAAQoV,QAASlE,MAAOpR,EAAM6V,UAAU,SACrD7V,EAAMK,WAET,qBAAKJ,UAAWC,EAAQ0V,QAAQ,SAC7B3Q,EAAQiE,KAAI,SAACjC,EAAGC,GAAC,OAChB,qBAEEjH,UAAWC,EAAQyV,OACnB3P,QAASiB,EAAEjB,QAAQ,SAElBiB,EAAEuL,OAAK,iBAJOtL,GAKX,UAMlB,ICqIetI,gBAlNA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJC,OAAQ,OACRmG,QAAS,OACTiH,cAAe,SACf7M,QAAS,sBACTC,WAAY,mBACZH,gBAAiB,sDACjBH,eAAgB,QAChBgH,MAAOrH,EAAMe,QAAQC,QAAQC,MAE/BgW,OAAQ,CACN3Q,QAAS,OACTiH,cAAe,MACf/G,WAAY,SACZD,eAAgB,gBAChByG,WAAY,UACZG,aAAc,QAEhBrF,MAAO,CACLwI,OAAQ,IACRpD,SAAU,SACVF,WAAY,mBACZiE,YAAa,UAEfxQ,UAAW,CACT4F,MAAO,OACPlG,OAAQ,EACRmN,KAAM,EACNhH,QAAS,OACTC,eAAgB,iBAElB2Q,OAAQ,CACN/W,OAAQ,OACRmG,QAAS,OACTiH,cAAe,MACf/G,WAAY,UAEdsL,OAAQ,CACNqF,UAAW,EACXjK,SAAU,OACVW,WAAY,KAEdkC,KAAM,CACJ1I,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7BiM,SAAU,QAEZkK,KAAM,CACJ9J,KAAM,EACNlN,SAAU,OACVoG,WAAY,SACZrG,OAAQ,cACRuP,UAAW,OACX2H,UAAW,QAEb5C,SAAU,CACRnH,KAAM,EACNnN,OAAQ,OACRmX,MAAO,UAET,GAqJWvX,EArIiC,SAACoB,GAC/C,MASIA,EAAME,QARRnB,EAAI,EAAJA,KACA+W,EAAM,EAANA,OACAnP,EAAK,EAALA,MACArH,EAAS,EAATA,UACAyW,EAAM,EAANA,OACAE,EAAI,EAAJA,KACAtF,EAAM,EAANA,OACA2C,EAAQ,EAARA,SAGI3N,EAAWhC,IACX4L,EAAUC,cACVrH,EAAStE,GAAe,SAACW,GAAK,OAAKA,EAAMyE,aAAad,MAAM,IAClE,EAAwB7C,oBAAS,GAAM,mBAAhCyL,EAAI,KAAEC,EAAO,KACpB,EAA4B1L,mBAAkB,WAAU,mBAAjDwJ,EAAM,KAAEsH,EAAS,KAExBtQ,qBAAU,WACRH,EAAS4C,KACX,GAAG,CAAC5C,IAEJG,qBAAU,WACJqC,EAAOkO,OAAM,SAAClN,GAAC,OAAKA,EAAE/C,UAAY,CAAC,MACrCgQ,EAAU,WACVzQ,EACEsF,GAAYF,mBAAmB,CAC7BV,eAAWpG,EACXqG,OAAQ,KAGZ3E,EACEsF,GAAYD,wBAAwB,CAClCX,eAAWpG,EACXqG,OAAQ,KAIhB,GAAG,CAACnC,EAAQxC,IAEZ,IAAMsL,EAAUvB,uBAAY,WAC1B/J,EAASkD,GAAkB,IAC3BuN,EAAU,WACV/I,IACF,GAAG,CAAC1H,IAEJ,OACE,sBAAK1F,UAAWlB,EAAK,UACnB,sBAAKkB,UAAW6V,EAAO,UACrB,sBAAK7V,UAAW8V,EAAO,UACrB,oBAAI9V,UAAW0G,EAAM,0BACrB,uBAAM1G,UAAW0Q,EAAO,8BACL,uBAAM,4BAI3B,sBAAK1Q,UAAW8V,EAAO,UACT,YAAXjH,GACC,cAAC,GAAS,CACRsB,UAAW,WACTgG,EAAU,OACZ,IAGJ,cAAC7B,GAAA,EAAU,CACT,aAAW,OACX+B,KAAK,WACLpQ,MAAM,UACNkL,MAAO,CAAEmF,aAAc,GAAI,SAE3B,cAAC,GAAQ,CAACtW,UAAWD,EAAME,QAAQ0O,eAIzC,sBAAK3O,UAAWX,EAAU,UACxB,eAACkX,GAAA,EAAI,CAAClX,WAAS,EAACmX,QAAS,EAAGxW,UAAWgW,EAAK,UACzC9N,EAAOe,KAAI,SAACC,EAAGuN,GAAG,aACjB,cAACF,GAAA,EAAI,CAAYG,MAAI,EAACzB,GAAW,EAAO0B,GAAW,EAAM,SACvD,cAAC,GAAS,CACRtH,QAEiC,KAAf,QAAf,EAAAnH,EAAOuO,EAAM,UAAE,aAAf,EAAiBtQ,WAAkB+C,EAAE/C,SAAW,GAExC,IAARsQ,GAAavN,EAAE/C,SAAW,EAE7B4D,MAAOb,KARAA,EAAEzC,GAUN,IAEG,YAAXoI,GACC,qCACE,cAAC0H,GAAA,EAAI,CAAcG,MAAI,EAACzB,GAAW,EAAO0B,GAAW,EAAM,SACzD,cAAC,GAAQ,CAACjM,KAAK,YADP,UAGV,cAAC6L,GAAA,EAAI,CAAcG,MAAI,EAACzB,GAAW,EAAO0B,GAAW,EAAM,SACzD,cAAC,GAAQ,CAACjM,KAAK,iBADP,gBAMfoG,GACC,qBAAK9Q,UAAWqT,EAAS,SACvB,cAAC,GAAQ,CAACtC,QAASA,SAIzB,cAAC,GAAQ,CACPD,KAAMA,EACNC,QAASA,EACTC,QAASA,EACT7K,SACE+B,EAAOe,KAAI,SAACC,GAAC,OAAKA,EAAE/C,QAAQ,IAAEyQ,QAAO,SAAC5P,EAAGgD,GAAC,OAAKhD,EAAIgD,CAAC,IAAI9B,EAAOpG,SAGnE,cAAC+U,GAAA,EAAK,CAAC/F,KAAiB,SAAXjC,EAAkB,SAC7B,cAAC,GAAU,CACT7J,QAAS,CACP,CAAEuN,MAAO,YAAaxM,QAASiL,GAC/B,CACEuB,MAAO,eACPxM,QAAS,WACPuJ,EAAQK,KAAK,gBACf,IAEF,SAED,+BAKX,ICtLehR,gBA5CA,SAACC,GAAY,aAC1BC,YAA2B,CACzBgX,QAAM,GACJ3Q,QAAS,OACT5F,QAAS,OACT8F,WAAY,SACZD,eAAgB,gBAChByG,WAAY,wBACZE,SAAU,QAAM,cACflN,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BtJ,SAAU,WACX,sBACMlN,EAAMe,QAAQ+L,UAAUyD,MAAI,GAErC2H,YAAa,CACXhL,SAAU,SACVW,WAAY,MAEd,GA0BW9N,EAnBqB,SAACoB,GACnC,OACE,sBACEC,UACED,EAAMgX,MACFjI,aAAK/O,EAAME,QAAQ4V,OAAQ9V,EAAME,QAAQ6W,aACzC/W,EAAME,QAAQ4V,OAEpB1E,MAAO,CAAEjS,gBAAiBa,EAAMb,gBAAiB+G,MAAOlG,EAAMkG,OAAQ,UAEtE,qCAAQlG,EAAM2G,MAAK,OACnB,gCACG3G,EAAMiX,aACNjX,EAAM4O,UAIf,IC9CasI,GAAkB,IAClBC,GAAa,CACxB,CAAE5P,EAAG,GAAI6P,EAAG,IACZ,CAAE7P,EAAG,IAAK6P,EAAG,IACb,CAAE7P,EAAG,GAAI6P,EAAG,IACZ,CAAE7P,EAAG,GAAI6P,EAAG,IACZ,CAAE7P,EAAG,IAAK6P,EAAG,KAGFC,GAAW,SACtBC,EACA/P,EACAkM,EACA8D,EACArR,EACAsR,GAEAF,EAAIG,UAAYvR,EAChBoR,EAAII,YAAcxR,EAClBoR,EAAIE,UAAYA,GAAa,EAE7BF,EAAIK,YACJL,EAAIM,OAAOrQ,EAAIgQ,EAAO,EAAG9D,EAAI8D,EAAO,GACpCD,EAAIO,OAAOtQ,EAAIgQ,EAAO,EAAG9D,EAAI8D,EAAO,GACpCD,EAAIO,OAAOtQ,EAAK,EAAIgQ,EAAQ,EAAG9D,GAC/B6D,EAAIO,OAAOtQ,EAAIgQ,EAAO,EAAG9D,EAAI8D,EAAO,GACpCD,EAAI9F,QACN,EAgHasG,GAAW,SACtBR,EACAS,EACAC,EACAC,EACAC,EACAC,GAEAb,EAAIE,UAAY,EAChBF,EAAIK,iBAES1T,IAAT+T,EACFV,EAAIM,OAAOI,EAAKzQ,GAAG2P,IAEnBI,EAAIM,OAAOG,EAAKxQ,EAAG2P,IAErBI,EAAIO,OAAOE,EAAKxQ,EAAG2P,IACnBI,EAAII,YAAcQ,GAAa,OAC/BZ,EAAI9F,SACJ8F,EAAIc,YAEJd,EAAIK,YACJL,EAAIM,OAAOG,EAAKxQ,EAAG2P,SACNjT,IAATgU,GACFX,EAAIO,OAAOI,EAAK1Q,EAAG2P,KAErBI,EAAII,YAAcS,GAAa,OAC/Bb,EAAI9F,SACJ8F,EAAIc,WACN,EAEaC,GAAiB,SAAC3B,GAC7B,OAAOS,GAAWT,EAAMS,GAAWpV,OACrC,ECjJeuW,GA9BA,SAACzZ,GAAY,OAC1BC,YAA2B,CACzBC,KAAK,aACHoG,QAAS,OACTnG,OAAQkY,GACRrK,OAAQ,UACR,UAAW,CACTrN,WAAY,SAEbX,EAAMY,YAAYC,GAAG,MAAQ,CAC5B6Y,YAAa,QAGjBC,QAAS,CACPxZ,OAAQ,OACRkG,MAAO,MACP4K,YAAa,QAEf2I,QAAS,CACPtT,QAAS,OACTgK,OAAQ,UACR/C,cAAe,SACfhH,eAAgB,SAChByG,WAAY,mCACZa,WAAY,OACZxG,MAAO,OACPiG,KAAM,IAER,ECjCSuM,GAAW,UACXC,GAAW,UCyFT/Z,gBAAW,SAACC,GAAK,kCAC3B+Z,GAAc/Z,IA7EJ,SAACA,GAAY,OAC1BC,YAA2B,CACzB6H,MAAM,aACJ+F,WAAY,QACX7N,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BtJ,SAAU,WAGdnF,OAAO,aACL8F,WAAY,WACX7N,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BtJ,SAAU,YAGd,CAgECuM,CAAOzZ,GAAM,GAFHD,EAlD0B,SAACoB,GACxC,IAAQE,EAAmCF,EAAnCE,QAASwW,EAA0B1W,EAA1B0W,IAAKmC,EAAqB7Y,EAArB6Y,QAAS7S,EAAYhG,EAAZgG,QACzB8S,EAAYC,iBAA0B,MACtCC,EAAOX,GAAe3B,GAE5BuC,2BAAgB,WACd,IAgBMC,EAASJ,EAAUxJ,QACV,OAAX4J,IACFpW,QAAQC,IAAI,WAlBD,SAACuU,GACZ,IAAM0B,EAAOX,GAAe3B,GAC5BY,EAAI6B,UAAU,EAAG,EAAG7B,EAAI4B,OAAOhU,MAAOoS,EAAI4B,OAAOla,QACjD8Y,GACER,EACA0B,OACA/U,EACAoU,GAAe3B,EAAM,QACrBzS,EACAyU,IHqDmB,SACzBpB,EACA0B,EACAH,GAEA,IAAMO,EAAIlC,GACHmC,EAAWL,EAAKzR,EAAI6R,GACpBE,EAAWF,EAAI,EAAXG,EAAcH,EAAI,EAG7B9B,EAAIE,UAAY,EAChBF,EAAII,YAAc,QAClBJ,EAAIG,UAAY,QAEhBH,EAAIK,YACJ,IAAK,IAAIzQ,EAAI,EAAGA,EAAI,EAAGA,IACrBoQ,EAAIkC,KAAKH,EAAKnS,EAAIoS,EAAIG,GAAYH,EAAIC,GACtCjC,EAAIkC,KAAKH,EAAKnS,EAAIoS,EAAIG,IAAYH,GAAKC,GAEzCjC,EAAI/F,OACJ+F,EAAI9F,SACJ8F,EAAIc,YACJd,EAAIK,YACJL,EAAIkC,KAAKH,EAAII,KAAiBL,EAAGA,MACjC9B,EAAIG,UAAY,OAChBH,EAAI/F,OACJ+F,EAAI9F,SACJ8F,EAAIc,YAGJd,EAAIE,UAAY,EAChBF,EAAIG,UAAYoB,EACZha,GAAMe,QAAQ+L,UAAUyD,KACxBvQ,GAAMe,QAAQC,QAAQC,KAE1BuX,GAASC,EAAK+B,EAAKD,GA7BelC,GA6BJkC,EAAI,EAAG,QAAS,GAC9C9B,EAAI/F,MACN,CGvFMmI,CAAYpC,EAAK0B,EAAMH,EAEzB,CAMEc,CADYT,EAAQU,WAAW,OAGnC,GAAG,CAAClD,EAAKmC,IAET,IAAMgB,EAAW,WAAH,OACZb,EAAKzR,EAAIyR,EAAK5B,EHhEQ,EGgES5Y,OAAOsb,iBAAmB,EAAE,EAE7D,OACE,sBAAK7Z,UAAWC,EAAQnB,KAAMiH,QAASA,EAAQ,UAC7C,wBACE+T,IAAKjB,EACL7Y,UAAWC,EAAQsY,QACnBpH,MAAO,CAAElM,MAAO2U,KAChB3U,MAAO2U,IACP7a,OAAQkY,KAEV,sBAAKjX,UAAWC,EAAQuY,QAAQ,UAC9B,sBAAMxY,UAAWC,EAAQyG,MAAM,SAAE3G,EAAM2G,QACvC,sBAAM1G,UAAWC,EAAQ0G,OAAO,SAAE5G,EAAM4G,cAIhD,ICUehI,gBAAW,SAACC,GAAK,kCAC3B+Z,GAAc/Z,IApFJ,SAACA,GAAY,OAC1BC,YAA2B,CACzB6H,MAAM,aACJ+F,WAAY,QACX7N,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BtJ,SAAU,WAGdnF,OAAO,aACL8F,WAAY,WACX7N,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BtJ,SAAU,YAGd,CAuECuM,CAAOzZ,GAAM,GAFHD,EAzD4B,SAACoB,GAC1C,IAAQE,EAAqCF,EAArCE,QAASwW,EAA4B1W,EAA5B0W,IAAKxM,EAAuBlK,EAAvBkK,UAAWlE,EAAYhG,EAAZgG,QAC3B8S,EAAYC,iBAA0B,MACtCC,EAAOX,GAAe3B,GAE5BuC,2BAAgB,WACd,IAuBMC,EAASJ,EAAUxJ,QACV,OAAX4J,IACFpW,QAAQC,IAAI,WAzBD,SAACuU,GACZ,IAAM0B,EAAOX,GAAe3B,GAC5BY,EAAI6B,UAAU,EAAG,EAAG7B,EAAI4B,OAAOhU,MAAOoS,EAAI4B,OAAOla,QAEjD8Y,GACER,EACA0B,EACAX,GAAe3B,EAAM,GACrB2B,GAAe3B,EAAM,GACrBgC,GACAA,IJpB4B,SAClCpB,EACA0B,EACA9O,EACA8P,EACAC,GAGA3C,EAAIG,UAAYuC,EAChB1C,EAAIK,YACJL,EAAI4C,IAAIlB,EAAKzR,EAAG2P,GAAqB8B,EAAK5B,EAAG,EAAG,EAAIhQ,KAAK+S,IACzD7C,EAAI/F,OAGJ+F,EAAII,YAAcuC,EAClB3C,EAAIE,UAAY,EAChBF,EAAIK,YACJL,EAAI4C,IACFlB,EAAKzR,EACL2P,GACA8B,EAAK5B,EAlDiB,GAmDrB,GAAMhQ,KAAK+S,GACZ,EAAI/S,KAAK+S,GAAKjQ,EAAU9D,SAAW,GAAMgB,KAAK+S,IAEhD7C,EAAI9F,SAGJ6F,GACEC,EACA0B,EAAKzR,EACL2P,GACA,GAAM8B,EAAK5B,EACXvY,GAAMe,QAAQ+L,UAAU4J,aAE5B,CIXM6E,CACE9C,EACA0B,EACA9O,EACAlK,EAAMga,YACNha,EAAMia,cAGV,CAMEN,CADYT,EAAQU,WAAW,OAGnC,GAAG,CAAClD,EAAKxM,EAAWlK,IAEpB,IAAM6Z,EAAW,WAAH,OACZb,EAAKzR,EAAIyR,EAAK5B,EJxEQ,EIwES5Y,OAAOsb,iBAAmB,EAAE,EAE7D,OACE,sBAAK7Z,UAAWC,EAAQnB,KAAMiH,QAAS,kBAAMA,EAAQkE,EAAUxD,GAAG,EAAC,UACjE,wBACEqT,IAAKjB,EACL7Y,UAAWC,EAAQsY,QACnBpH,MAAO,CAAElM,MAAO2U,KAChB3U,MAAO2U,IACP7a,OAAQkY,KAEV,sBAAKjX,UAAWC,EAAQuY,QAAQ,UAC9B,sBAAMxY,UAAWC,EAAQyG,MAAM,SAAEuD,EAAUvD,QAC3C,sBAAM1G,UAAWC,EAAQ0G,OAAO,SAAEsD,EAAUtD,cAIpD,IC3BehI,gBAAW,SAACC,GAAK,sBAC3B+Z,GAAc/Z,GAAM,GADVD,EAjDuB,SAACoB,GACrC,IAAQE,EAA0BF,EAA1BE,QAASwW,EAAiB1W,EAAjB0W,IAAK1Q,EAAYhG,EAAZgG,QAChB8S,EAAYC,iBAA0B,MACtCC,EAAOX,GAAe3B,GAE5BuC,2BAAgB,WACd,IAgBMC,EAASJ,EAAUxJ,QACV,OAAX4J,IACFpW,QAAQC,IAAI,WAlBD,SAACuU,GACZ,IAAM0B,EAAOX,GAAe3B,GAC5BY,EAAI6B,UAAU,EAAG,EAAG7B,EAAI4B,OAAOhU,MAAOoS,EAAI4B,OAAOla,QACjD8Y,GACER,EACA0B,EACAX,GAAe3B,EAAM,GACrB2B,GAAe3B,EAAM,GACrBgC,GACAC,ILsCyB,SAC/BrB,EACA0B,GAGA1B,EAAII,YAAc7Y,GAAMe,QAAQC,QAAQC,KACxCwX,EAAIG,UAAY5Y,GAAMe,QAAQC,QAAQC,KACtCwX,EAAIE,UAAY,EAChBF,EAAIK,YACJL,EAAI4C,IAAIlB,EAAKzR,EAAG2P,GAAqB8B,EAAK5B,EAAG,EAAG,EAAIhQ,KAAK+S,IACzD7C,EAAI/F,OACJ+F,EAAI9F,SAGJ6F,GACEC,EACA0B,EAAKzR,EACL2P,GACA,GAAM8B,EAAK5B,EACXvY,GAAMe,QAAQC,QAAQ0V,cAExB+B,EAAI/F,MACN,CKzDM8I,CAAkB/C,EAAK0B,EAEzB,CAMEW,CADYT,EAAQU,WAAW,OAGnC,GAAG,CAAClD,IAEJ,IAAMmD,EAAW,WAAH,OACZb,EAAKzR,EAAIyR,EAAK5B,EL5CQ,EK4CS5Y,OAAOsb,iBAAmB,EAAE,EAE7D,OACE,sBAAK7Z,UAAWC,EAAQnB,KAAMiH,QAASA,EAAQ,UAC7C,wBACE+T,IAAKjB,EACL7Y,UAAWC,EAAQsY,QACnBpH,MAAO,CAAElM,MAAO2U,KAChB3U,MAAO2U,IACP7a,OAAQkY,KAEV,sBAAKjX,UAAWC,EAAQuY,QAAQ,yBAClB,uBAAM,uBAI1B,ICCe7Z,gBAAW,SAACC,GAAK,kCAC3B+Z,GAAc/Z,IAtDjBC,YAA2B,CACzBwb,QAAS,CACPzN,OAAQ,OACR,UAAW,CACTrN,WAAY,WAmDF,GAFHZ,EAtCyB,SAACoB,GACvC,IAAQE,EAAiBF,EAAjBE,QAASwW,EAAQ1W,EAAR0W,IACXoC,EAAYC,iBAA0B,MACtCC,EAAOX,GAAe3B,GAE5BuC,2BAAgB,WACd,IAQMC,EAASJ,EAAUxJ,QACV,OAAX4J,IACFpW,QAAQC,IAAI,WAVD,SAACuU,GACZ,IAAM0B,EAAOX,GAAe3B,GAC5BY,EAAI6B,UAAU,EAAG,EAAG7B,EAAI4B,OAAOhU,MAAOoS,EAAI4B,OAAOla,QACjD8Y,GAASR,EAAK0B,EAAMX,GAAe3B,EAAM,GAAI2B,GAAe3B,EAAM,IN0DrC,SACjCY,EACA0B,GAGA1B,EAAIG,UAAY,UAChBH,EAAIK,YACJL,EAAI4C,IAAIlB,EAAKzR,EAAG2P,GAAqB8B,EAAK5B,EAAG,EAAG,EAAIhQ,KAAK+S,IACzD7C,EAAI/F,MACN,CMlEMgJ,CAAoBjD,EAAK0B,EAE3B,CAMEW,CADYT,EAAQU,WAAW,OAGnC,GAAG,CAAClD,IAEJ,IAAMmD,EAAW,WAAH,OACZb,EAAKzR,EAAIyR,EAAK5B,EN9CQ,EM8CS5Y,OAAOsb,iBAAmB,EAAE,EAE7D,OACE,qBAAK7Z,UAAW8O,aAAK7O,EAAQnB,KAAMmB,EAAQoa,SAAS,SAClD,wBACEP,IAAKjB,EACL7Y,UAAWC,EAAQsY,QACnBpH,MAAO,CAAElM,MAAO2U,KAChB3U,MAAO2U,IACP7a,OAAQkY,MAIhB,ICsCetY,gBA7FA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJoG,QAAS,OACTC,eAAgB,SAChBC,WAAY,SACZrG,OAAQ,QAEVmW,IAAI,aACFhQ,QAAS,OACTiH,cAAe,SACf5M,WAAY,QACZR,OAAQ,OACRkG,MAAO,OACPqJ,UAAW,OACXvB,OAAQ,mBACPnO,EAAMY,YAAYC,GAAG,MAAQ,CAC5BV,OAAQ,OACRkG,MAAO,QAGX4Q,OAAQ,CACNvW,QAAS,cACT4F,QAAS,OACTE,WAAY,SACZD,eAAgB,gBAEhBc,MAAO,QACPsU,aAAc,mBAEhBC,OAAQ,CACN5O,WAAY,qCACZa,WAAY,OACZvH,QAAS,OACTiH,cAAe,UAEjBsO,SAAU,CACRhO,WAAY,SACZxG,MAAO,QAET5G,UAAW,CACTC,QAAS,EACT2O,SAAU,WACVjP,SAAU,OACVD,OAAQ,QAEV4P,KAAM,CACJ1I,MAAOrH,EAAMe,QAAQ+L,UAAUyD,KAC/BrD,SAAU,SAEZ,GA2CWnN,EAtBuB,SAACoB,GACrC,IAAQE,EAAsDF,EAAtDE,QAASyG,EAA6C3G,EAA7C2G,MAAO+T,EAAsC1a,EAAtC0a,SAAU3J,EAA4B/Q,EAA5B+Q,KAAM4J,EAAsB3a,EAAtB2a,QAASta,EAAaL,EAAbK,SACjD,OACE,cAACyW,GAAA,EAAK,CAAC/F,KAAMA,EAAM4J,QAASA,EAAQ,SAClC,qBAAK1a,UAAWC,EAAQnB,KAAK,SAC3B,sBAAKkB,UAAWC,EAAQiV,IAAI,UAC1B,sBAAKlV,UAAWC,EAAQ4V,OAAO,UAC7B,sBAAK7V,UAAWC,EAAQua,OAAO,UAC7B,+BAAO9T,IACN+T,GAAY,sBAAMza,UAAWC,EAAQwa,SAAS,SAAEA,OAEnD,cAACnG,GAAA,EAAU,CAACvO,QAAS2U,EAAQ,SAC3B,cAAC,GAAS,CAAC1a,UAAWC,EAAQ0O,YAGlC,qBAAK3O,UAAWC,EAAQZ,UAAU,SAAEe,UAK9C,ICjBezB,gBAhFA,SAACC,GAAY,OAC1BC,YAA2B,CACzB8b,MAAO,CACLrb,QAAS,aACTsN,OAAQ,UACR,UAAW,CACTrN,WAAY,SAGhBqb,UAAW,CACT3U,MAAM,kBACN2G,OAAQ,WAEVlG,MAAO,CACLkF,WAAY,qCACZa,WAAY,OACZxG,MAAOrH,EAAMe,QAAQ+L,UAAUyD,KAC/BD,OAAQ,GAEVvI,OAAQ,CACNiF,WAAY,qCACZ3F,MAAOrH,EAAMe,QAAQ+L,UAAUmP,MAC/B3L,OAAQ,IAEV,GAwDWvQ,EA9C8B,SAACoB,GAC5C,IAAQ+a,EAAsB/a,EAAtB+a,SAAU7a,EAAYF,EAAZE,QAEZ8a,EAAY,SAAC9Q,GAAqB,YAAyBjG,IAApBiG,EAAUJ,KAAmB,EAM1E,OAJAhE,qBAAU,WACRgB,SAASH,MAAQ,uBACnB,IAGE,mCACG3G,EAAM8H,WAAWoB,KAAI,SAACgB,GAAS,OAC9B,sBAEEjK,UAAW8O,aACT7O,EAAQ0a,OACPI,EAAU9Q,IAAchK,EAAQ2a,WAEnC7U,QAAS,WACHgV,EAAU9Q,IACZ6Q,EAAS7Q,EAAUxD,GAEvB,EAAE,UAEF,mBACEzG,UAAW8O,aACT7O,EAAQyG,OACPqU,EAAU9Q,IAAchK,EAAQ2a,WACjC,SAED3Q,EAAUvD,QAEb,mBACE1G,UAAW8O,aACT7O,EAAQ0G,QACPoU,EAAU9Q,IAAchK,EAAQ2a,WACjC,SAED3Q,EAAUtD,WAzBRsD,EAAUxD,GA2BX,KAId,I,oBCde9H,gBAhEF,SAACC,GAAY,OACxBC,YAA2B,CACzBC,KAAM,CACJmH,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7BN,WAAY,OACZ2F,QAAS,OACTiH,cAAe,SACfhH,eAAgB,QAChB+G,KAAM,MACNnN,OAAQ,OACR,UAAW,CACTmG,QAAS,OACTgH,KAAM,SAGV,GAiDWvN,EAzC0B,SAACoB,GACxC,IAAQE,EAAqBF,EAArBE,QAASoV,EAAYtV,EAAZsV,QACjB,EAAkC2F,IAAM3V,UAAS,GAAK,mBAA/C4V,EAAS,KAAEC,EAAY,KAM9B,OAJArV,qBAAU,WACRgB,SAASH,MAAK,0CAAsC2O,EAAQ5O,GAC9D,GAAG,CAAC4O,EAAQ5O,KAGV,qBAAKzG,UAAWC,EAAQnB,KAAK,SAC3B,cAAC,KAGC,CACAqc,aAAa,EACblW,MAAM,OACNlG,OAAO,OACPqc,IAAK,aAAc/F,EAAUA,EAAQtN,SAAWsN,EAAQvO,IACxDuU,UAAU,EACVC,QAASL,EACT5a,OAAQ,CACNkb,KAAM,CACJC,WAAY,CACVC,SAAU,SAAUC,EAAKN,GACvBM,EAAIC,iBACF,gBAAgB,UAAD,OACL1Z,aAAamB,QAAQ,gBAEnC,KAINwY,QAAS,kBAAMV,GAAa,EAAM,EAClCW,QAAS,kBAAMX,GAAa,EAAM,EAClCY,OAAQ,kBAAMZ,GAAa,EAAK,EAChCnV,QAAS,kBAAMmV,GAAcD,EAAU,KAI/C,IC7Dec,GAJe,SAAClU,EAAwBmU,GACrD,OAAyE,IAAlEnU,EAAWqK,QAAO,SAACjL,GAAC,OAAKA,EAAEkC,QAAQ6S,SAASA,EAAS,IAAEla,MAChE,ECiJenD,gBAvIA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJC,OAAQ,OACRC,SAAU,SACVkG,QAAS,OACTiH,cAAe,UAEjB1J,KAAM,CACJzD,SAAU,OACVkN,KAAM,GAERyC,KAAM,CACJ1I,MAAO,QACP6F,SAAU,SAEZ,GAuHWnN,EAvGsB,SAACoB,GACpC,IAAM2F,EAAWhC,IACXuY,EAAUnD,iBAAuB,MAEvCjT,qBAAU,WACRH,EAAS4C,MACN4T,SACAtW,MAAK,SAACO,GACD4V,GAAsB5V,EAAUpG,EAAMoc,0BACxCpc,EAAMqc,WAAW,CAAEpJ,KAAM,WAE7B,GAEJ,GAAG,CAACtN,IAEJ,IAAM2W,EAAmBC,mBAAQ,WAC/B,IAAMC,EAAcxc,EAAM8H,WAAW2U,QAAQC,MAAK,SAACC,EAAIC,GACrD,YAAiB3Y,IAAb0Y,EAAG7S,YAAoC7F,IAAb2Y,EAAG9S,MAA4B,OAC5C7F,IAAb0Y,EAAG7S,MAA4B,OAClB7F,IAAb2Y,EAAG9S,OAA6B,EAC7B6S,EAAG7S,MAAQ8S,EAAG9S,KACvB,IACM+S,EAAUL,EAAYM,WAAU,SAACnT,GAAC,YAAiB1F,IAAZ0F,EAAEG,KAAmB,IAClE,OAAI+S,EAAU,EAAUL,EACjBA,EAAYC,MAAM,EAAGI,EAAU,EACxC,GAAG,CAAC7c,EAAM8H,aAEJiV,EAAqBT,EAAiBnK,QAC1C,SAACjL,GAAC,YAAiBjD,IAAZiD,EAAE4C,KAAmB,IAY9B,OATAhE,qBAAU,WACgB,OAApBoW,EAAQ5M,SACV4M,EAAQ5M,QAAQ0N,SAAS,CACvBvO,IAAKyN,EAAQ5M,QAAQ2N,aACrBC,SAAU,UAGhB,GAAG,IAGD,qCACE,qBAAKjd,UAAWD,EAAME,QAAQnB,KAAK,SACjC,sBAAKkB,UAAWD,EAAME,QAAQwC,KAAMqX,IAAKmC,EAAQ,UAC9Clc,EAAMyG,SACL,cAAC,GAAW,CACViQ,IAAK,EACLmC,UACI7Y,EAAM8H,WAAWqK,QAAO,SAACjL,GAAC,YAAiBjD,IAAZiD,EAAE4C,KAAmB,IAAE/H,OAE1DiE,QAAShG,EAAMmd,YACfxW,MAAO3G,EAAMyG,QAAQE,MACrBC,OAAQ5G,EAAMyG,QAAQG,SAGzB0V,EACEnK,QAAO,SAACjL,GAAC,YAAiBjD,IAAZiD,EAAE4C,KAAmB,IACnCZ,KAAI,SAACgB,EAAWwM,GAAG,OAClB,cAAC,GAAa,CAEZA,IAAKA,GAAO1W,EAAMyG,QAAU,EAAI,GAChCyD,UAAWA,EACXlE,QAAShG,EAAMod,cACfpD,YAAaha,EAAMga,YACnBC,cAAeja,EAAMia,eAAc,cALvBvD,GAMZ,IAEN,cAAC,GAAQ,CACPA,IAAKqG,EAAmBhb,QAAU/B,EAAMyG,QAAU,EAAI,GACtDT,QAAS,kBAAMhG,EAAMqc,WAAW,CAAEpJ,KAAM,UAAW,IAErD,cAAC,GAAU,CACTyD,IAAKqG,EAAmBhb,QAAU/B,EAAMyG,QAAU,EAAI,KAExD,cAAC,GAAU,CACTiQ,IAAKqG,EAAmBhb,QAAU/B,EAAMyG,QAAU,EAAI,UAI5D,cAAC,GAAQ,CACPE,MAAO,6BACPoK,KAA6B,WAAvB/Q,EAAMqd,QAAQpK,KACpB0H,QAAS,kBAAM3a,EAAMqc,WAAW,CAAEpJ,KAAM,UAAW,EAAC,SAEpD,cAAC,GAAe,CACd8H,SAAU/a,EAAMod,cAChBtV,WAAY9H,EAAM8H,eAGrB9H,EAAMyG,SACL,cAAC,GAAQ,CACPE,MAAO3G,EAAMyG,QAAQE,MACrB+T,SAAU1a,EAAMyG,QAAQG,OACxBmK,KAA6B,YAAvB/Q,EAAMqd,QAAQpK,KACpB0H,QAAS,kBAAM3a,EAAMqc,WAAW,CAAEpJ,KAAM,UAAW,EAAC,SAEpD,cAAC,GAAW,CAACqC,QAAStV,EAAMyG,cAKtC,ICjJO,SAAS6W,GAAetd,GAC7B,OACE,iCACE0G,GAAG,yBACH4K,MAAM,6BACN/J,EAAG,EACHkM,EAAG,EACHzF,QAAQ,YACR0F,SAAS,WACTxO,MAAM,MACNlG,OAAO,OACHgB,GAGV,CCJeud,OARf,SAAuBvd,GACrB,OACE,cAAC4R,GAAA,EAAI,2BAAK5R,GAAK,aACb,cAACsd,GAAc,MAGrB,ECgHe1e,gBArGA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJC,OAAQ,OACRC,SAAU,SACVkG,QAAS,OACTiH,cAAe,UAEjB1J,KAAM,CACJzD,SAAU,OACVkN,KAAM,GAERyC,KAAM,CACJ1I,MAAO,QACP6F,SAAU,SAEZ,GAqFWnN,EA5EkC,SAACoB,GAChD,MAA8BsF,mBAAkB,CAAE2N,KAAM,WAAW,mBAA5DoK,EAAO,KAAEhB,EAAU,KACpB9M,EAAUC,cACV/I,EAAU5C,GAAe,SAACW,GAAK,OAAKA,EAAMyE,aAAaxC,OAAO,IAC9DyV,EAAUnD,iBAAuB,MAEjCoE,EAAczN,uBAAY,WAC9B2M,EAAW,CAAEpJ,KAAM,WACrB,GAAG,IAEGmK,EAAgB1N,uBACpB,SAAC8N,GACCjO,EAAQK,KAAK,2BAAD,OAA4B4N,GAC1C,GACA,CAACjO,IAGGzH,EAAajE,GACjB,SAACW,GAAgB,OAAKA,EAAMyE,aAAanB,UAAU,IAgBrD,OAbAhC,qBAAU,WACgB,OAApBoW,EAAQ5M,SACV4M,EAAQ5M,QAAQ0N,SAAS,CACvBvO,IAAKyN,EAAQ5M,QAAQ2N,aACrBC,SAAU,UAGhB,IAEApX,qBAAU,WACRgB,SAASH,MAAQ,uBACnB,IAGE,mCACE,sBAAK1G,UAAWD,EAAME,QAAQnB,KAAK,UACjC,cAAC,GAAM,CACL6P,KACE,cAAC2F,GAAA,EAAU,CACT,aAAW,QACXnD,MAAO,CAAEqM,YAAa,OACtBzX,QAAS,kBAAMuJ,EAAQK,KAAK,YAAY,EAAC,SAEzC,cAAC,GAAS,CAAC3P,UAAWD,EAAME,QAAQ0O,SAGxCqI,aACE,cAAC1C,GAAA,EAAU,CACT,aAAW,QACXnD,MAAO,CAAEqM,YAAa,OACtBzX,QAAS,kBAAMuJ,EAAQK,KAAK,aAAa,EAAC,SAE1C,cAAC,GAAa,CAAC3P,UAAWD,EAAME,QAAQ0O,SAG5CjI,MAAM,SACNxH,gBAAgB,QAChB+G,MAAM,UAER,cAAC,GAAO,CACN4B,WAAYA,EACZuV,QAASA,EACThB,WAAYA,EACZe,cAAeA,EACfD,YAAaA,EACb1W,QAASA,EACTuT,YAAatB,GACbuB,cAAetB,GACfyD,wBAAwB,UAKlC,I,SCjHasB,GAA4C,iDAAG,8GACnCrX,KAAMoC,IAAG,UAAsBnI,EAAOM,IAAG,eAAa,OAA/D,OAAR2F,EAAQ,yBACPA,EAASC,MAAI,2CACrB,kBAHwD,mCC0E1C5H,gBAxEA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJmG,MAAO,OACP9E,SAN8B,IAO9B8F,MAAO,QACPf,QAAS,OACTiH,cAAe,SACf/G,WAAY,SAEdsB,MAAO,CACL+F,WAAY,OACZxG,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7B+L,WAAY,qCACZE,SAAU,OACVoD,OAAQ,GAEVvI,OAAQ,CACNV,MAAO,OACP2F,WAAY,qCACZE,SAAU,QACVoD,OAAQ,EACRzC,WAAY,KAEdyH,QAAS,CACP6B,UAAW,EACXnK,WAAY,qCACZE,SAAU,QACV7F,MAAO,QACPwG,WAAY,KAEduH,MAAO,CACLrD,UAAW,SACX1L,MAAO,QAET,GAqCWtG,EA7B2B,SAACoB,GACzC,IAAMwE,EAAuBV,aAC3B,SAACU,GAAgB,OAAKA,EAAMyE,YAAY,IAElC/I,EAAsBF,EAAtBE,QAASoT,EAAatT,EAAbsT,SASjB,OACE,sBAAKrT,UAAWC,EAAQnB,KAAK,UAC3B,oBAAIkB,UAAWC,EAAQyG,MAAM,SATjC,SAA6ByC,GAAkB,IAAD,IACtCuU,EAA2D,QAA9C,EAAGnZ,EAAM6D,MAAMwB,MAAK,SAAC8I,GAAE,OAAKA,EAAGjM,KAAO0C,CAAO,WAAC,aAA3C,EAA6CzC,MAC7DiX,EAAqE,QAAnD,EAAGpZ,EAAMsD,WAAW+B,MAAK,SAAC8I,GAAE,OAAKA,EAAGjM,KAAO0C,CAAO,WAAC,aAAhD,EACvBzC,MACJ,OAAOgX,GAAiBC,CAC1B,CAKOC,CAAoBvK,EAASlK,UAAY,uBAE5C,mBAAGnJ,UAAWC,EAAQ0G,OAAO,SAAE0M,EAASxO,OACxC,oBAAG7E,UAAWC,EAAQiU,QAAQ,cAAGb,EAASa,QAAO,OACjD,qBACElU,UAAWC,EAAQ+T,MACnBlN,IAAG,wBAAmB/G,EAAMsT,SAASW,MAAK,QAC1ChF,IAAG,gBAAWjP,EAAMsT,SAASW,WAIrC,IC8IerV,gBA9MA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CAAC,EACP+W,OAAO,aACLjK,WAAY,UACZE,SAAU,OACV7F,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7B6O,OAAQ,GACRQ,OAAQ,MACPtQ,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BtJ,SAAU,WAGd+R,kBAAmB,CACjB5P,SAAU,WACV6P,OAAQ,EACR5Y,QAAS,OACT6Y,SAAU,OACV5Y,eAAgB,gBAElB6Y,SAAU,CACRhf,SAAU,SACVD,OAAQ,OACR,sBACE,iEACFkf,UACE,kEAEJC,GAAG,aACDjQ,SAAU,WACV8G,KAAM,EACNvG,IAAK,EACLvJ,MAAO,QACPlG,OAAQ,OACRO,QAAQ,2BAAD,OAA6BV,EAAMY,YAAYwV,OAAOC,GAAE,YAC/D/P,QAAS,OACTC,eAAgB,eAChBC,WAAY,WACZ,QAAS,CACP8J,OAAQ,WACRhD,KAAM,QAEPtN,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BjJ,cAAe,SACf/G,WAAY,SACZD,eAAgB,WAChB,QAAS,CACPgZ,UAAW,SACX7P,UAAW,OACX8P,SAAU,MACVrI,UAAW,UAIjBsI,OAAQ,CACNpQ,SAAU,WACVhJ,MAAO,OACPmZ,SAAU,QACV7e,WAAY,OACZ0G,MAAO,OACPsP,UAAW,QACXzJ,SAAU,SACV/M,OAAQ,OACR0N,WAAY,OACZb,WAAY,qBACZ0S,WAAY,OACZ9P,IAAK,QACLuG,KAAM,mBACNwJ,cAAe,MACfC,gBAAiB,QACjBpQ,UAAW,gBACXqQ,UAAW,SACX,2BAA4B,QAC5B,oBAAqB,kBAEvB,GAmIW9f,EAxH0B,SAACoB,GACxC,IAAQE,EAAYF,EAAZE,QACR,EAAwCoF,mBAAS,IAAiB,mBAA3DyO,EAAY,KAAE4K,EAAe,KACpC,EAA0BrZ,qBAA+B,mBAAlD8L,EAAK,KAAEwN,EAAQ,KAQhBC,EAAc9F,iBAAuB,MACrCla,EAAQigB,eAEdhZ,qBAAU,WAER,IAAMiZ,EAAqC,WACzCrB,KAAc7X,MAAK,SAACW,GAAI,OAAKmY,EAAgBnY,EAAKkC,MAAM,IACxDkW,EAAS,CAAEb,OAAQ,GACrB,EACAgB,IACA,IAAM7O,EAAWC,YACf4O,EACAC,KAEF,OAAO,kBAAM3O,cAAcH,EAAS,CACtC,GAAG,IAEHpK,qBAAU,WAAO,IAAD,EAER9G,EAA4B,QAAtB,EAAG6f,EAAYvP,eAAO,aAAnB,EAAqB2P,aAChCjgB,GACF4f,EAAS,CACPzQ,WAAW,UAAD,OA1BM,GA0BmB,YACnC4P,OAAQ/e,IAGZ8D,QAAQC,IAAIgR,EACd,GAAG,CAAC8K,EAAa9K,IAEjB,IAAMmL,EAAgB,SAACjY,EAAWgD,GAChC,OAAO7C,KAAK+X,IAAIlY,EAAGgD,GAAK7C,KAAKE,UAAYF,KAAKgY,IAAInY,EAAGgD,GAAK7C,KAAK+X,IAAIlY,EAAGgD,GACxE,EA+BA,OAJAnE,qBAAU,WACRgB,SAASH,MAAK,uBAChB,IAGE,gCACE,qBAAK1G,UAAWC,EAAQoe,OAAO,oFAG/B,oBAAIre,UAAWC,EAAQ4V,OAAO,0BAC9B,qBAAK7V,UAAWC,EAAQ+d,SAAS,SAC/B,qBACElE,IAAK8E,EACL5e,UAAWC,EAAQ4d,kBACnB1M,MAAOA,EAAM,SAvCU,SAACkC,GAA0B,IAAD,EAKjD+L,EAxCe,GAoCPjY,KAAKC,MACjBD,KAAK+X,IAAI3gB,OAAO8gB,OAAOpa,MAAOrG,EAAMY,YAAYwV,OAAOC,ID5IzB,KCqGZ,GA4CpB,OAAK5B,EAASvR,QACduR,GAAW,MACRiM,OAAM,qBACFC,MAAMpY,KAAK+J,KAAKkO,EAAe/L,EAASvR,SAASwP,KAAKwC,KAE1D0I,MAAM,EAAG4C,IACInW,KAAI,SAACuW,EAAIvY,GAAC,OACxB,qBAEEkK,MAAO,CACLjC,OAAO,GAAD,OAAK+P,EAAc,EAAG,IAAG,aAAKA,EAAc,EAAG,GAAE,MACvD,SAEF,cAAC,GAAY,CAAC5L,SAAUmM,KALnBvY,EAMD,IAdqB,EAgB/B,CAkBSwY,CAAuB3L,OAG5B,sBAAK9T,UAAWC,EAAQie,GAAG,UACzB,cAACpY,EAAA,EAAM,CACLE,QAAQ,WACRC,MAAM,UACNqR,KAAK,QACLjB,KAAK,cAAa,SAElB,sBACElF,MAAO,CACLvF,WAAY,UACZ0S,WAAY,OACZxS,SAAU,UACV,0BAKN,cAAChG,EAAA,EAAM,CACLE,QAAQ,WACRC,MAAM,UACNqR,KAAK,QACLjB,KAAK,gBAAe,SAEpB,sBAAMlF,MAAO,CAAEvF,WAAY,eAAgB0S,WAAY,QAAS,iCAO1E,ICjMeoB,OAxBf,SAA0B3f,GACxB,OACE,8CACEsR,MAAM,6BACNtD,QAAQ,YACR9I,MAAM,MACNlG,OAAO,OACHgB,GAAK,cAET,sBACEuR,KAAK,OACLC,OAAO,eACPC,YAAa,IACb3D,EAAE,oDAEJ,sBACEA,EAAE,0CACF0D,OAAO,eACPD,KAAK,oBAIb,ECZetD,OARf,SAAkBjO,GAChB,OACE,cAAC4R,GAAA,EAAI,2BAAK5R,GAAK,aACb,cAAC4f,GAAO,MAGd,EC+BeC,OAvCf,SAAsB7f,GACpB,OACE,8CACE0G,GAAG,yBACH4K,MAAM,6BACN/J,EAAG,EACHkM,EAAG,EACHzF,QAAQ,YACR0F,SAAS,WACTxO,MAAM,MACNlG,OAAO,OACHgB,GAAK,cAET,gCAEI,6FAGJ,sBACE0G,GAAG,iFACHzG,UAAU,qBACV6N,EAAE,cAEJ,sBACEpH,GAAG,iFACHzG,UAAU,qBACV6N,EAAE,cAEJ,4BACE,sBACEA,EAAE,0CACF0D,OAAO,eACPD,KAAK,sBAKf,EC3BeuO,OARf,SAAmB9f,GACjB,OACE,cAAC4R,GAAA,EAAI,2BAAK5R,GAAK,aACb,cAAC+f,GAAK,MAGZ,ECsSenhB,gBA1RF,SAACC,GAAY,OACxBC,YAA2B,CACzBC,KAAM,CACJmH,MAAOrH,EAAMe,QAAQ+L,UAAU7L,KAC/Bd,OAAQ,OACRmG,QAAS,OACTiH,cAAe,SACfhH,eAAgB,iBAElBwJ,KAAM,CACJrP,QAAS,EACT2G,MAAOrH,EAAMe,QAAQ+L,UAAU7L,KAC/BiM,SAAU,UAEZuC,MAAO,CACLtP,OAAQ,EACRqf,SAAU,OACV9P,UAAW,OACXpC,KAAM,MACN6T,UAAW,QACXnT,OAAQ,WAEVoT,OAAQ,CACN9a,QAAS,OACTE,WAAY,SACZ9F,QAAS,YAEXoH,MAAM,aACJ4R,YAAa,OACb1M,WAAY,qCACZ3F,MAAOrH,EAAMe,QAAQ+L,UAAU7L,KAC/BkM,aAAc,GACbnN,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BtJ,SAAU,UAGdnF,OAAO,aACL2R,YAAa,OACb1M,WAAY,qCACZ3F,MAAOrH,EAAMe,QAAQ+L,UAAUmP,MAC/B9E,UAAW,GACVnX,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BtJ,SAAU,UAGdmU,YAAa,CACXhb,MAAO,OACP3F,QAAS,YAEXqb,MAAO,CACL1V,MAAO,OACPlG,OAAQ,MACRQ,WAAY,QAEd4G,SAAU,CACRpH,OAAQ,MACRQ,WAAYX,EAAMe,QAAQC,QAAQC,MAEpCmF,QAAQ,aACNE,QAAS,OACT5F,QAAS,SACT2F,MAAO,OACPE,eAAgB,iBACfvG,EAAMY,YAAYC,GAAG,MAAQ,CAC5B0F,eAAgB,WAChB,MAAO,CACL+J,OAAQ,YAIdgR,QAAS,CACPjb,MAAO,OACPC,QAAS,OACTC,eAAgB,SAChBC,WAAY,SACZ8G,KAAM,EACNJ,SAAU,UACVF,WAAY,wBAEZa,WAAY,SACZ0T,UAAW,2BAEb,sBAAuB,CACrB,KAAM,CAAEla,MAAOrH,EAAMe,QAAQ+L,UAAU7L,MACvC,MAAO,CAAEoG,MAAOrH,EAAMe,QAAQ+L,UAAU7L,MACxC,MAAO,CAAEoG,MAAOrH,EAAMe,QAAQC,QAAQC,MACtC,MAAO,CAAEoG,MAAOrH,EAAMe,QAAQC,QAAQC,MACtC,OAAQ,CAAEoG,MAAOrH,EAAMe,QAAQ+L,UAAU7L,QAE3C,GAiMWlB,EAhK0B,SAACoB,GACxC,IAAQE,EAAuBF,EAAvBE,QAASgK,EAAclK,EAAdkK,UACjB,EAA0C5E,mBAAS,GAAE,mBAA9C+a,EAAa,KAAEC,EAAgB,KACtC,EAA4Chb,oBAAS,GAAM,mBAApDib,EAAc,KAAEC,EAAiB,KACxC,EAAwClb,oBAAS,GAAM,mBAAhDmb,EAAY,KAAEC,EAAe,KACpC,EAAgCpb,oBAAS,GAAM,mBAAxCqb,EAAQ,KAAEC,EAAW,KACtBC,EAAe9H,iBAAoB,MACnCmH,EAAcnH,iBAAuB,MAiBrC+H,EAAc,WAAH,OAAS9gB,EAAM+gB,YAAW,SAACxF,GAAO,OAAMA,CAAO,GAAC,EAEjE,OADAzY,QAAQC,IAAIwd,EAAgBE,EAAcvW,GAExC,sBAAKjK,UAAWC,EAAQnB,KAAK,UAC3B,cAAC,GAAM,CACL6P,KACE,cAAC2F,GAAA,EAAU,CACT,aAAW,OACXvO,QAAShG,EAAMghB,iBACf5P,MAAO,CAAE7R,QAAS,GAAI,SAEtB,cAAC,GAAS,CAACU,UAAWC,EAAQ0O,SAGlCjI,MAAO3G,EAAM2G,MACbqQ,OAAO,EACP7X,gBAAgB,QAChB+G,MAAM,UAEPqa,GAAkBE,EACjB,qBACExgB,UAAWC,EAAQoO,MACnBW,IAAI,UACJlI,IAAG,6BAAwBmD,EAAUhC,QAAQT,eAE7CzB,QAAS8a,IAGX,cAACnR,GAAA,EAAG,CAAC1P,UAAWC,EAAQigB,QAAQ,8BAMlC,sBAAKlgB,UAAWC,EAAQ+f,OAAO,UAC5BjgB,EAAMub,QACL,cAAChH,GAAA,EAAU,CACT,aAAW,QACXtU,UAAWC,EAAQ0O,KACnB5I,QAAS8a,EAAY,SAErB,cAAC,GAAS,CAAC7gB,UAAWC,EAAQ0O,SAGhC,cAAC2F,GAAA,EAAU,CACT,aAAW,OACXtU,UAAWC,EAAQ0O,KACnB5I,QAAS8a,EAAY,SAErB,cAACG,GAAW,CAAChhB,UAAWC,EAAQ0O,SAGpC,gCACE,qBAAI3O,UAAWC,EAAQyG,MAAM,cAAY,OAATuD,QAAS,IAATA,OAAS,EAATA,EAAWvD,MAAK,OAChD,qBAAI1G,UAAWC,EAAQ0G,OAAO,cAAY,OAATsD,QAAS,IAATA,OAAS,EAATA,EAAWtD,OAAM,aAGtD,qBAAK3G,UAAWC,EAAQggB,YAAY,SAClC,qBACEjgB,UAAWC,EAAQ0a,MACnBb,IAAKmG,EACLla,QAtEuB,SAACsO,GAC9B,IAAMU,EAAOkL,EAAY5Q,QAAS4R,WAC5Bhc,EAAQgb,EAAY5Q,QAAS6R,YAC7BC,GAAM9M,EAAE+M,QAAUrM,GAAQ9P,EAC5B2b,GAAgBA,EAAavR,SAC/BuR,EAAavR,QAAQgS,OAAOF,EAEhC,EA+DwC,SAEhC,qBACEnhB,UAAWC,EAAQkG,SACnBgL,MAAO,CACLlM,MAAM,GAAD,OAAqB,IAAhBmb,EAAmB,YAKrC,qBAAKpgB,UAAWC,EAAQ+E,QAAQ,SAC7BjF,EAAMiF,SACLjF,EAAMiF,QAAQiE,KAAI,SAACzE,EAAQmO,GAAK,OAC9B,cAAC7M,EAAA,EAAM,CAELE,QAAQ,WACRC,MAAM,YACNF,QAASvB,EAAOuB,QAAQ,SAEvBvB,EAAO+N,OALHI,EAME,MAGf,gCACE,cAAC,KAAW,CACVyI,IAAKnR,EAAUnD,IACfgT,IAAK8G,EACLtF,QAASvb,EAAMub,QACfvc,OAAQ,EACRkG,MAAO,EACPyC,OAAQuC,EAAUvC,OAClB4Z,QAAS,kBAAMf,GAAkB,EAAK,EACtCgB,WA3GW,SAACpb,GAClBka,EAAiBla,EAASqb,QAC1BzhB,EAAMwhB,WAAWpb,EACnB,EAyGQ0V,QAAS,kBAAM8E,GAAY,EAAK,EAChCtgB,OAAQ,CACNkb,KAAM,CACJkG,YAAY,EACZjG,WAAY,CACVC,SAAU,SAAUC,EAAKN,GACvBM,EAAIC,iBACF,gBAAgB,UAAD,OACL1Z,aAAamB,QAAQ,gBAEnC,OAKR,cAAC,KAAW,CACVgY,IAAKnR,EAAUhC,QAAQR,SACvB6T,SAASoF,GAAmB3gB,EAAMub,QAClCvc,OAAQ,EACRkG,MAAO,EACPyC,OAAQuC,EAAUhC,QAAQP,OAC1B4Z,QAAS,kBAAMb,GAAgB,EAAK,EACpCiB,OAAQ,SAACC,GAAC,OAAK9e,QAAQC,IAAI,WAAD,OAAY6e,GAAI,EAC1CthB,OAAQ,CACNkb,KAAM,CACJkG,YAAY,EACZjG,WAAY,CACVC,SAAU,SAAUC,EAAKN,GACvBM,EAAIC,iBACF,gBAAgB,UAAD,OACL1Z,aAAamB,QAAQ,gBAEnC,YAQhB,I,UCtKezE,gBAlIF,SAACC,GAAY,OACxBC,YAA2B,CACzBC,KAAM,CACJmH,MAAO,OACP1G,WAAY,OACZ2F,QAAS,OACTiH,cAAe,SACfhH,eAAgB,gBAChByG,WAAY,aACZE,SAAU,UAEZuC,MAAO,CACLpJ,MAAO,MACP2H,OAAQ,UACRmF,mBAAoB,sCACpBC,mBAAoB,OACpBC,yBAA0B,OAC1BC,OAAQ,kBAEV0P,aAAc,CACZ3c,MAAO,OACP1F,WAAY,cACZ2S,OAAQ,QAEV2P,SAAU,CACR3S,OAAQ,MACRnC,OAAO,kBACP7H,QAAS,OACT6Y,SAAU,QAEZ3L,MAAO,CACLnE,SAAU,WACVhJ,MAAO,MACPlG,OAAQ,MACRO,QAAS,IACT4P,OAAQ,OACRlQ,SAAU,SACVqT,KAAM,gBACNtF,OAAQ,KAEVuF,QAAS,CACPpG,KAAM,MACN4V,YAAa,IACb5c,QAAS,OACTC,eAAgB,SAChBC,WAAY,UAEdmN,MAAO,CACLtN,MAAO,OACP9E,SAAU,OACVpB,OAAQ,OACRmG,QAAS,OACTC,eAAgB,SAChBC,WAAY,WAEd,GA2EWzG,EA3D0B,SAACoB,GACxC,IAAQE,EAA6BF,EAA7BE,QAAS8hB,EAAoBhiB,EAApBgiB,gBAEXC,EAAenQ,GAErB,EAA0CxM,wBACxCrB,GACD,mBAFMwO,EAAa,KAAEC,EAAgB,KAUtC,OANA5M,qBAAU,gBACc7B,IAAlBwO,GACFuP,EAAgBvP,EAEpB,GAAG,CAACA,EAAeuP,IAGjB,qBAAK/hB,UAAWC,EAAQnB,KAAK,SAC3B,2BAAUkB,UAAWC,EAAQ4hB,SAAS,UACpC,4DACCG,EACE9P,QAAO,SAAC8B,GAAK,OAAKA,EAAM7P,KAAK6X,SAAS,WAAW,IACjD/S,KAAI,SAACyJ,EAAIC,GACR,IAAMC,EAAsBJ,IAAkBE,EACxCG,EAAWC,KAAKC,UAAUJ,GAC1BlQ,EAAO,iBAAmBiQ,EAAGZ,SACnC,OACE,sBAA4B9R,UAAWC,EAAQqS,QAAQ,UACrD,uBAEEU,KAAK,QACL7O,KAAK,aACLnE,UAAWC,EAAQmS,MACnB3L,GAAIiM,EAAGvO,KACP8O,MAAOP,EAAGvO,MALL,QAAU0O,GAOjB,uBAEEK,QAASR,EAAGvO,KACZ4B,QAAS,kBAAM0M,EAAiBC,EAAG,EACnC1S,UAAWC,EAAQsS,MAAM,SAEzB,qBAEEzL,IAAKrE,EACLuM,IAAK0D,EAAGvO,KACRnE,UAAWmT,aACTlT,EAAQoO,MACRuE,GAAc3S,EAAQ2hB,eALnB,MAAQ/O,IANV,QAAUA,KAVT,MAAQA,EA2BtB,QAIV,ICjBelU,gBAxGF,SAACC,GAAY,OACxBC,YAA2B,CACzBC,KAAM,CACJoG,QAAS,OACTiH,cAAe,SACfhH,eAAgB,gBAChBnG,SAAU,OACVD,OAAQ,OACR6M,WAAY,sCAEdqW,KAAM,CACJ/c,QAAS,OACTiH,cAAe,SACfhH,eAAgB,WAChB7F,QAAS,SACT4M,KAAM,EACN,QAAS,CACPH,aAAc,SAGlBmW,QAAS,CACPhW,KAAM,EACNjG,MAAOrH,EAAMe,QAAQ+L,UAAU7L,KAC/BqF,QAAS,OACTiH,cAAe,SACf/G,WAAY,SACZD,eAAgB,SAChB,UAAW,CACTF,MAAO,OACPuQ,WAAY,YAGhB,GAwEW7W,EA7DgC,SAACoB,GAC9C,IAAQE,EAA8BF,EAA9BE,QAASkJ,EAAqBpJ,EAArBoJ,QAASuR,EAAY3a,EAAZ2a,QAC1B,EAA8BrV,mBAAiB,IAAG,mBAA3C6O,EAAO,KAAEC,EAAU,KAC1B,EAA0C9O,mBAAuB,MAAK,mBAA/DmN,EAAa,KAAEC,EAAgB,KACtC,EAAkCpN,oBAAS,GAAM,mBAA1C8c,EAAS,KAAEC,EAAY,KAE9Bvc,qBAAU,WACRuc,EAAyB,KAAZlO,GAAoC,OAAlB1B,EACjC,GAAG,CAAC0B,EAAS1B,IAEb,IAAM6P,EAAS5S,uBACb,SAACyE,EAAS1B,GAAa,OACrBY,GAAa,CACXc,QAASA,EACTF,MAAOxB,EAAgBrO,KACvBgF,QAASA,IAERsL,OAAM,SAACC,GAAG,OAAKC,MAAMD,EAAI,IACzB9O,MAAK,kBAAM8U,GAAS,GAAC,GAC1B,CAACvR,EAASuR,IAGZ,OACE,qBAAK1a,UAAWC,EAAQnB,KAAK,SAC3B,uBAAMkB,UAAWC,EAAQgiB,KAAMK,aAAa,MAAK,UAC/C,sBAAKtiB,UAAWC,EAAQiiB,QAAQ,UAC9B,+BAAOhO,IACN1B,GACC,qBACExD,IAAkB,OAAbwD,QAAa,IAAbA,OAAa,EAAbA,EAAerO,KACpB2C,IAAG,wBAAgC,OAAb0L,QAAa,IAAbA,OAAa,EAAbA,EAAeV,eAI3C,cAACyQ,GAAA,EAAS,CACR9b,GAAG,mBACH8L,MAAM,0BACNvM,QAAQ,WACRwc,WAAW,EACXvP,MAAOiB,EACPuO,SAAU,SAACC,GAAK,OAAKvO,EAAWuO,EAAMrY,OAAO4I,MAAM,EACnD0P,WAAW,IAGb,cAAC,GAAW,CACVZ,gBAAiB,SAAC/N,GAAK,OAAKvB,EAAiBuB,EAAM,IAGrD,cAAClO,EAAA,EAAM,CACLE,QAAQ,WACRC,MAAM,YACN2I,UAAWuT,EACXpc,QAAS,kBAAMsc,EAAOnO,EAAS1B,EAAc,EAAC,wBAOxD,ICiCe7T,gBA7HF,SAACC,GAAY,OACxBC,YAA2B,CACzBC,KAAM,CACJmH,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7BN,WAAY,OACZ0F,MAAO,OACPlG,OAAQ,OACRmG,QAAS,OACTiH,cAAe,WAEjB,GAmHWxN,EAnGqB,SAACoB,GACnC,IAAQE,EAAYF,EAAZE,QACFsd,EAAcxd,EAAMrB,MAAMkkB,OAAOrF,YACjC7X,EAAWhC,IACjB,EAA8B2B,mBAAuB,aAAY,mBAA1D+X,EAAO,KAAEhB,EAAU,KACpB9M,EAAUC,cAChB,EAA8BlK,oBAAS,GAAM,mBAAtCiW,EAAO,KAAEwF,EAAU,KAC1B,EAAwCzb,qBAAoB,mBAArDwd,EAAY,KAAEC,EAAe,KAEpCjd,qBAAU,WACRH,EAAS4C,MACN4T,SACAtW,MAAK,SAACmd,GAEL,IAAMC,EAAsCD,EAAanZ,MACvD,SAACD,GAAC,OAAKA,EAAER,UAAYoU,CAAW,IAElC,QAAsBvZ,IAAlBgf,QAAuDhf,IAAxBgf,EAAcnZ,MAAqB,CACpEhH,QAAQC,IAAI,aAAcya,EAAawF,GACvC,IAAME,EAAwB,CAC5B9Z,QAASoU,EACTpX,SAAU,EACV0D,MAAOkZ,EAAajhB,QAEtBghB,EAAgBG,GAChBvd,EAASiD,GAAkBsa,GAC7B,MAAWD,GACTF,EAAgBE,EAEpB,GACJ,GAAG,CAACtd,EAAU6X,EAAasF,IAc3Bhd,qBAAU,WACRgB,SAASH,MAAK,0CAAsC6W,EACtD,GAAG,CAACA,EAAaH,IAEjB,IAAMnT,EAAwBrG,GAC5B,SAACqH,GAAK,OACJA,EAAMjC,aAAanB,WAAW+B,MAAK,SAACF,GAAC,OAAKA,EAAEjD,KAAO8W,CAAW,KAC9DtS,EAAMjC,aAAanB,WAAW,EAAE,IAGpC,OACE,sBAAK7H,UAAWC,EAAQnB,KAAK,eACNkF,IAApBiG,EAAUJ,OACT,cAAC,GAAW,CACVnD,MAAO,SACP4U,QAASA,EACTwF,WAAYA,EACZS,WA7BW,SAACpb,GACd0c,GAAgB1c,EAASqb,OAASvX,EAAU9D,UAC9CT,EACEiD,GAAkB,CAChBQ,QAASc,EAAUxD,GACnBN,SAAUgB,KAAKgY,IAAIhZ,EAASqb,OAAQvX,EAAU9D,UAC9C0D,MAAOgZ,EAAahZ,QAI5B,EAoBQI,UAAWA,EACX8W,iBAAkB,kBAAMzR,EAAQK,KAAK,gBAAgB,EACrD3K,QAAS,CACP,CACEuN,MAAO,QACPxM,QAAS,WACP+a,GAAW,GACX1E,EAAW,QACb,GAEF,CAAE7J,MAAO,WAAYxM,QAAS,kBAAMqW,EAAW,WAAW,MAIhE,cAAC,GAAQ,CACP1V,MAAOuD,EAAUvD,MACjB+T,SAAUxQ,EAAUtD,OACpBmK,KAAkB,UAAZsM,EACN1C,QAAS,kBAAM0B,EAAW,YAAY,EAAC,cAElBpY,IAApBiG,EAAUJ,OAAuB,cAAC,GAAW,CAACwL,QAASpL,MAE1D,cAAC,GAAQ,CACPvD,MAAOuD,EAAUvD,MACjB+T,SAAUxQ,EAAUtD,OACpBmK,KAAkB,aAAZsM,EACN1C,QAAS,kBAAM0B,EAAW,YAAY,EAAC,SAEvC,cAAC,GAAiB,CAChBjT,QAASc,EAAUxD,GACnBiU,QAAS,kBAAM0B,EAAW,YAAY,QAKhD,ICwVe8G,GA1dG,SAChBC,EACAC,GAKA,IAAM9T,EAAUC,cACV7J,EAAWhC,IAEX2f,EAAe,SAAfA,EACJC,EACAZ,EACAvS,GAEY,IADZoT,IAAK,yDAECC,EAAUC,YACd,WACMH,EAAc,EAChBF,EAAiBM,SACfL,EAAaC,EAAc,EAAGZ,EAAOvS,GAAW,GAChD,GAGFA,GAEJ,GACAoT,EAAQ,EAAI,KAERI,EAAOjB,EAAMiB,KAAI,cAAUL,EAAW,aACtCte,EAAU,aAAI0d,EAAM1d,SAASiE,KAAI,SAACjC,GAAC,MAAM,CAC7CuL,MAAOvL,EAAEuL,MACTxM,QAAS,WACP6d,aAAaJ,GACbxc,EAAEjB,SACJ,EACD,IACD,MAAO,CAAE4d,OAAM3e,UACjB,EAoBM6e,EAA0B,CAC9BF,KAAM,0EACN3e,QAAS,CAGP,CACEuN,MAAO,WACPxM,QAAS,kBACPxH,OAAOC,SAASslB,QAAQ,0CAA0C,KAKpEC,EAAuB,SAAC/L,GAAI,OAChCqL,EACE,GACA,CACEM,KAAM,mCACN3e,QAAS,KAEX,kBAAMoe,EAAiBM,SAAS1L,EAAM,EAAE,GACzC,EAEGgM,EAA8B,CAClC,CACEL,KAAM,kIACN3e,QAAS,CACP,CACEuN,MAAO,MACPxM,QAAS,kBAAMge,EAAqBC,EAAkB,GAAG,GAE3D,CACEzR,MAAO,KACPxM,QAAS,WACPqd,EAAiBM,SAASM,EAAkB,GAAI,EAClD,KAIN,CACEL,KAAM,iJACN3e,QAAS,CACP,CACEuN,MAAO,KACPxM,QAAS,WACPqd,EAAiBM,SAASM,EAAkB,GAAI,EAClD,GAEF,CACEzR,MAAO,MACPxM,QAAS,kBAAMge,EAAqBC,EAAkB,GAAG,KAI/D,CACEL,KAAM,yLACN3e,QAAS,CACP,CACEuN,MAAO,KACPxM,QAAS,kBAAMge,EAAqBC,EAAkB,GAAG,GAE3D,CACEzR,MAAO,MACPxM,QAAS,WACPqd,EAAiBM,SAASM,EAAkB,GAAI,EAClD,KAIN,CACEL,KAAM,sMACN3e,QAAS,CACP,CACEuN,MAAO,KACPxM,QAASqd,EAAiBa,QAE5B,CACE1R,MAAO,MACPxM,QAAS,kBAAMge,EAAqBC,EAAkB,GAAG,MAM3DE,EAAkB,WACtBxe,EAASkF,GAAa,CAAEF,KAAM,cAAeG,MAAO,OACjDjF,MAAK,kBACJF,EACEsF,GAAYD,wBAAwB,CAClCV,OAAQ,IACRD,UAAW,OAEd,IAEFxE,MAAK,kBAAM0J,EAAQK,KAAK,0BAA0B,GACvD,EA8TA,MA5TmC,CACjCwU,GAAI,CACF,CACEC,GAAI,GACJ1B,MAAO,CACLiB,KAAM,0BACN3e,QAAS,CACP,CACEuN,MAAO,MACPxM,QAAS,kBAAMqd,EAAiBa,QAAQ,GAE1C,CACE1R,MAAO,KACPxM,QAAS,kBAAMuJ,EAAQK,KAAK,iBAAiB,MAKrD,CACEyU,GAAI,GACJ1B,MAAO,CACLhc,MAAO,uBACPid,KAAM,uFACN/N,UAAW,CACThK,WAAY,aAEd5G,QAAS,CACP,CACEuN,MAAO,MACPxM,QAAS,WACP,IAAMiS,EAAe,CACnB2L,KAAM,uHACN3e,QAAS,CACP,CACEuN,MAAO,MAEPxM,QAAS,kBACPxH,OAAOC,SAASslB,QACd,0CACD,GAEL,CACEvR,MAAO,KACPxM,QAASqd,EAAiBa,UAIhCb,EAAiBM,SAAS1L,EAAM,EAClC,GAEF,CACEzF,MAAO,KACPxM,QAAS,WACP,IAAMiS,EAAe,CACnB2L,KAAM,oDACN3e,QAAS,CACP,CACEuN,MAAO,WACPxM,QAASqd,EAAiBa,UAIhCb,EAAiBM,SAAS1L,EAAM,EAClC,OAMVqM,GAAI,GACJC,GAAI,CACF,CACEF,GAAI,GACJ1B,MAAO,CACLiB,KAAK,oKAEL3e,QAAS,CACP,CACEuN,MAAO,KACPxM,QAAS,kBAAMqd,EAAiBM,SAASG,EAAiB,EAAE,GAE9D,CACEtR,MAAO,KACPxM,QAAS,WACP,IAAMwe,EAAsB,CAC1BhS,MAAO,KACPxM,QAAS,WACP,IAAMiS,EAAe,CACnB2L,KAAM,uKACN3e,QAAS,CACP,CACEuN,MAAO,WACPxM,QAASqd,EAAiBa,UAIhCb,EAAiBM,SAAS1L,EAAM,EAClC,GAEFoL,EAAiBM,SACfL,EACE,GACA,CACEM,KAAM,6IACN3e,QAAS,CACP,CACEuN,MAAO,KACPxM,QAAS,kBACPqd,EAAiBM,SAASG,EAAiB,EAAE,GAEjDU,IAGJA,EAAWxe,SAEb,EAEJ,MAKR,CACEqe,GAAI,GACJ1B,MAAO,kBACLW,EACE,GACA,CACEM,KAAM,yMACN3e,QAAS,CACP,CACEuN,MAAO,KACPxM,QAASme,GAEX,CACE3R,MAAO,WACPxM,QAASqd,EAAiBa,UAIhCC,EACD,IAGPM,GAAI,CACF,CACEJ,GAAI,GACJ1B,MAAOsB,EAAkB,IAE3B,CACEI,GAAI,GACJ1B,MAAO,CACLiB,KAAM,iEACN3e,QAAS,CACP,CACEuN,MAAO,QACPxM,QAASqd,EAAiBa,QAE5B,CACE1R,MAAO,OACPxM,QAAS,WACPL,EACEsF,GAAYF,mBAAmB,CAC7BT,OAAQ,IACRD,UAAW,QAGfkF,EAAQK,KAAK,qBACf,OAMV8U,GAAI,CACF,CACEL,GAAI,GACJ1B,MAAO,CACLiB,KAAM,kDACN3e,QAAS,CACP,CACEuN,MAAO,uBACPxM,QAAS,WACPyH,KACA9H,EAASkD,GAAkB,IAC3Bwa,EAAiBM,SACf,CACEC,KAAM,qFACN3e,QAAS,CACP,CACEuN,MAAO,iBACPxM,QAASqd,EAAiBa,QAE5B,CACE1R,MAAO,eACPxM,QAAS,kBAAMuJ,EAAQK,KAAK,IAAI,KAItC,EAEJ,GAEF,CACE4C,MAAO,WACPxM,QAAS,WACPyH,KACA9H,EAASkD,GAAkB,IAC3Bwa,EAAiBM,SACf,CACEC,KAAM,qFACN3e,QAAS,CACP,CACEuN,MAAO,iBACPxM,QAASqd,EAAiBa,QAE5B,CACE1R,MAAO,eACPxM,QAAS,kBAAMuJ,EAAQK,KAAK,IAAI,KAItC,EAEJ,GAEF,CACE4C,MAAO,mBACPxM,QAAS,WACPqd,EAAiBM,SACf,CACEC,KAAM,gDACN3e,QAAS,CACP,CACEuN,MAAO,WACPxM,QAASqd,EAAiBa,UAIhC,EAEJ,OAMVS,GAAI,CACF,CACEN,GAAI,IACJ1B,MAAO,CACLiB,KAAM,8EACN3e,QAAS,CACP,CACEuN,MAAO,SACPxM,QAAS,WACPL,EACEsF,GAAYF,mBAAmB,CAC7BT,OAAQ,IACRD,UAAW,QAGfkF,EAAQK,KAAK,qBACf,GAEF,CACE4C,MAAO,eACPxM,QAAS,kBACPL,EAASkF,GAAa,CAAEF,KAAM,cAAeG,MAAO,OACjDjF,MAAK,kBACJF,EACEsF,GAAYD,wBAAwB,CAClCV,OAAQ,IACRD,UAAW,OAEd,IAEFxE,MAAK,kBAAM0J,EAAQK,KAAK,0BAA0B,GAAC,GAE1D,CACE4C,MAAO,YACPxM,QAASqd,EAAiBa,WAKlC,CACEG,GAAI,IACJ1B,MAAO,CACLiB,KAAM,aACN3e,QAAS,CACP,CACEuN,MAAO,mCACPxM,QAAS,WACPL,EACEkF,GAAa,CAAEF,KAAM,cAAeG,MAAO,OAC3CjF,MAAK,kBAAMwd,EAAiBa,QAAQ,GACxC,GAEF,CACE1R,MAAO,eACPxM,QAAS,WACPL,EACEkF,GAAa,CAAEF,KAAM,cAAeG,MAAO,OAC3CjF,MAAK,kBACLF,EAASkD,GAAkB,IAAIhD,MAAK,kBAClC0J,EAAQK,KAAK,iBAAiB,GAC/B,GAEL,OAQd,EC9LehR,gBA/QF,SAACC,GAAY,OACxBC,YAA2B,CACzBC,KAAM,CACJmH,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7BqF,QAAS,OACTiH,cAAe,SACfhH,eAAgB,QAChBhF,SAAU,IACV+O,OAAQ,OACR,UAAW,CACThK,QAAS,OACTD,MAAO,QAET3F,QAAS,aAEXqP,KAAM,CACJ2J,YAAa,EACbrS,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7BiM,SAAU,QAEZ+J,OAAQ,CACNjK,WAAY,mBACZE,SAAU,SACVwS,WAAY,SACZpZ,QAAS,OACTE,WAAY,SACZuf,SAAU,EACVxf,eAAgB,iBAElBkW,SAAU,CACRnW,QAAS,OACTE,WAAY,SACZuf,SAAU,EACVzV,OAAQ,UAEV0V,MAAO,CACLhZ,WAAY,UACZE,SAAU,SACVW,WAAY,OACZvH,QAAS,QACTnG,OAAQ,EACRkG,MAAO,QACPgJ,SAAU,WACV8G,KAAM,oBACNvG,IAAK,QACLE,OAAQ,KAEVhI,MAAO,CACLkF,WAAY,qCACZ3F,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7BkM,aAAc,GAEhBpF,OAAQ,CACNiF,WAAY,qCACZ3F,MAAOrH,EAAMe,QAAQ+L,UAAUmP,MAC/B9E,UAAW,GAEb4E,MAAO,CACL1V,MAAO,OACPlG,OAAQ,MACRQ,WAAYX,EAAMe,QAAQ+L,UAAU7L,MAEtCsG,SAAU,CACRpH,OAAQ,MACRQ,WAAYX,EAAMe,QAAQC,QAAQC,OAEpC,GA6MWlB,EAjL8B,SAACoB,GAC5C,IAAQE,EAAYF,EAAZE,QACF+f,EAASlH,iBAA2B,MAC1C,EAA0BkC,IAAM3V,SAAwB,MAAK,mBAAtDqd,EAAK,KAAEmC,EAAQ,KACtB,EAAkC7J,IAAM3V,UAAS,GAAM,mBAAhD4V,EAAS,KAAEC,EAAY,KAC9B,EAA4CF,IAAM3V,SAAmB,IAAG,mBAAjEyf,EAAc,KAAEC,EAAiB,KACxC,EAAgC/J,IAAM3V,SAAoB,CACxDmc,OAAQ,EACRwD,cAAe,IACf,mBAHK7e,EAAQ,KAAE8e,EAAW,KAItB3V,EAAUC,cACV7J,EAAWhC,IAEXqG,EAAgBnG,GACpB,SAACqH,GAAK,OACJA,EAAMjC,aAAad,OAAO0B,MACxB,SAACV,GAAC,OAAKA,EAAEzC,KAAO1G,EAAMrB,MAAMkkB,OAAOO,OAAO,KACvClY,EAAMjC,aAAad,OAAO,EAAE,IAG/Bgd,EAAiBzV,uBAAY,SAACtJ,GAClC,IAAMgf,EAAUhe,KAAKC,MAAMjB,EAAW,IAAIif,oBAAephB,EAAW,CAClEqhB,sBAAuB,EACvBC,qBAAsB,IAElBC,EAAUpe,KAAKC,MAAMjB,EAAW,IAAIif,oBAAephB,EAAW,CAClEqhB,sBAAuB,EACvBC,qBAAsB,IAExB,MAAM,GAAN,OAAUH,EAAO,YAAII,EACvB,GAAG,IAEGC,EAAuB/V,uBAC3B,SAACiT,EAAgC+C,GAK/BhC,YAAW,WAHTvI,GAAa,GACb2J,EAA0B,oBAAVnC,EAAuBA,IAAUA,EAInD,GAAG+C,EACL,GACA,IAGIC,EAAexC,GAAUnZ,EAAMtD,GAAI,CACvCwd,OAAQ,WACNY,EAAS,MACT3J,GAAa,EACf,EACAwI,SAAU8B,IAqBZ,OAJA3f,qBAAU,WACRgB,SAASH,MAAK,wCAAoCqD,EAAMtD,GAC1D,GAAG,CAACsD,EAAMtD,KAGR,mCACE,cAAC,EAAK,UACJ,sBAAKzG,UAAWC,EAAQnB,KAAK,UAC3B,sBAAKkB,UAAWC,EAAQ4V,OAAO,UAC7B,8CACA,cAACvB,GAAA,EAAU,CACT,aAAW,QACXnD,MAAO,CAAEqM,YAAa,OACtBvX,MAAM,UACNF,QAAS,kBAAMuJ,EAAQK,KAAK,eAAe,EAAC,SAE5C,cAAC,GAAS,CAAC3P,UAAWC,EAAQ0O,YAGlC,sBAAK3O,UAAWC,EAAQob,SAAS,UAC/B,cAAC/G,GAAA,EAAU,CACT,aAAW,OACXrO,MAAM,UACNF,QAAS,kBAAMmV,GAAcD,EAAU,EAAC,SAEvCA,EACC,cAAC,GAAS,CAACjb,UAAWC,EAAQ0O,OAE9B,cAACqS,GAAW,CAAChhB,UAAWC,EAAQ0O,SAGpC,gCACE,qBAAI3O,UAAWC,EAAQyG,MAAM,cAAQ,OAALqD,QAAK,IAALA,OAAK,EAALA,EAAOrD,MAAK,OAC5C,qBAAI1G,UAAWC,EAAQ0G,OAAO,cAAQ,OAALoD,QAAK,IAALA,OAAK,EAALA,EAAOpD,OAAM,aAGlD,sBAAKZ,QAAS,kBAAMmV,GAAcD,EAAU,EAAC,UAC3C,qBAAKjb,UAAWC,EAAQ2kB,MAAM,SAC3BM,EAAe/e,EAAS6e,eAAiB,KAE5C,cAAC,KAAW,CACVlL,IAAKkG,EACL5E,IAAKrR,EAAMjD,IACX/H,OAAO,OACPkG,MAAM,OACN0gB,OAAO,EACPtK,SAAuC,cAA7B9c,OAAOC,SAASC,SAC1B6c,QAASL,EACT2K,iBAAkB,IAClBvlB,OAAQ,CACNkb,KAAM,CACJC,WAAY,CACVC,SAAU,SAAUC,EAAKN,GACvBM,EAAIC,iBACF,gBAAgB,UAAD,OACL1Z,aAAamB,QAAQ,gBAEnC,KAINyiB,WAAY,SAACC,GACP9F,EAAO3Q,UACT2Q,EAAO3Q,QAAQgS,OAAOtX,EAAM5D,SAAW2f,EAAU,WACjD5K,GAAa,GAEjB,EACAU,QAAS,kBAAMV,GAAa,EAAM,EAClCY,OAAQ,kBAAMZ,GAAa,EAAK,EAChCqG,WAAY,SAAC5X,GACXsb,EAAY,CACVzD,OAAQ7X,EAAE6X,OACVwD,cAAerb,EAAEqb,eAAiB,IAEpC,IAGMe,EAHeL,EAAa3b,EAAMtD,IAAImD,MAC1C,SAACyK,GAAC,OAAKA,EAAE+P,KAAOjd,KAAKC,MAAMuC,EAAEqb,eAAiB,EAAE,IAG9Ce,IAAcjB,EAAe9I,SAAS+J,EAAU3B,MAClDlJ,GAAa,GACb2J,EAASkB,EAAUrD,OACnBqC,GAAkB,SAAC5L,GAAC,6BAASA,GAAC,CAAE4M,EAAU3B,IAAE,IAEhD,EACAvI,QAAS,WACPX,GAAa,GACbxV,EACEgD,GAAc,CACZS,QAASY,EAAMtD,GACfN,SAAU,KAEZP,MAAK,SAACogB,GAAC,OAAK1W,EAAQK,KAAK,eAAe,GAC5C,OAGJ,qBAAK3P,UAAWC,EAAQ0a,MAAM,SAC5B,qBACE3a,UAAWC,EAAQkG,SACnBgL,MAAO,CACLlM,MAAM,GAAD,OAAuB,IAAlBkB,EAASqb,OAAY,UAI1B,OAAVkB,GArHgB,SAACA,GACxB,YACY1e,IAAV0e,GACE,cAAC,GAAU,CACT1d,QAAS0d,EAAM1d,QACf4Q,UAAW8M,EAAM9M,UACjBlP,MAAOgc,EAAMhc,MAAM,SAElBgc,EAAMiB,MAIf,CAyG2BsC,CAAiBvD,SAK9C,ICrOe/jB,gBAxDA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJqW,UAAW,OACXhJ,cAAe,SACf7M,QAAS,sBACTC,WAAY,OACZN,eAAgB,QAChBiG,QAAS,OACTC,eAAgB,SAElBwe,KAAM,CACJ/X,WAAY,aACZa,WAAY,OACZxG,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7BiM,SAAU,QAEZ4J,OAAQ,CACNK,UAAW,SACXnK,WAAY,aACZE,SAAU,WAEZ,GAkCWnN,EAzB4B,SAACoB,GAC1C,IAAQE,EAAYF,EAAZE,QACFqP,EAAUC,cAIhB,OAHA1J,qBAAU,WACRgB,SAASH,MAAK,0BAChB,IAEE,sBAAK1G,UAAWC,EAAQnB,KAAK,UAC3B,qBAAKkB,UAAWC,EAAQ0jB,KAAK,SAC1B5jB,EAAMmmB,aACHnmB,EAAMmmB,aACN,wHAEN,cAACpgB,EAAA,EAAM,CACLE,QAAQ,WACRC,MAAM,UACNF,QAAS,kBAAMuJ,EAAQK,KAAK,IAAI,EAChC3P,UAAWC,EAAQyV,OAAO,SAEzB,gBAIT,I,oBC9DayQ,GAAc,WAAH,OACtB5G,MAAM6G,KAAK7G,MAHe,KAGM,kBAC9B,IAAIA,MALmB,IAKAjO,KAAK,CAAC,EAAG,SAAS,GAC1C,EAEU+U,GAAiB,SAACrG,EAAQsG,EAAM,GAC3C,IADwE,IAAvBC,EAAK,EAARjf,EAAakf,EAAK,EAARhT,EAC/CA,EAAI,EAAGA,EAAIwM,EAAOyG,UAAU3kB,OAAQ0R,IAC3C,IAAK,IAAIlM,EAAI,EAAGA,EAAI0Y,EAAOyG,UAAU3kB,OAAQwF,IAC3C,GAA+B,IAA3B0Y,EAAOyG,UAAUjT,GAAGlM,MAEnBgf,EAAM9S,EAAIwM,EAAO0G,IAAIlT,EAAIgT,KACzBF,EAAM9S,EAAIwM,EAAO0G,IAAIlT,EAAIgT,GAAOlf,EAAI0Y,EAAO0G,IAAIpf,EAAIif,IAElD,UADFD,EAAM9S,EAAIwM,EAAO0G,IAAIlT,EAAIgT,GAAOlf,EAAI0Y,EAAO0G,IAAIpf,EAAIif,GAAO,IAG1D,OAAO,CAKjB,ECvBaI,GAAa,CACxB,EAAG,CAAEC,MAAO,CAAC,CAAC,IAAK3gB,MAAO,iBAC1B4gB,EAAG,CACDD,MAAO,CACL,CAAC,EAAG,IAAK,EAAG,GACZ,CAAC,EAAG,IAAK,EAAG,GACZ,CAAC,EAAG,IAAK,EAAG,GACZ,CAAC,EAAG,IAAK,EAAG,IAEd3gB,MAAO,kBAET6gB,EAAG,CACDF,MAAO,CACL,CAAC,EAAG,IAAK,GACT,CAAC,EAAG,IAAK,GACT,CAAC,IAAK,IAAK,IAEb3gB,MAAO,oBAET8gB,EAAG,CACDH,MAAO,CACL,CAAC,EAAG,IAAK,GACT,CAAC,EAAG,IAAK,GACT,CAAC,EAAG,IAAK,MAEX3gB,MAAO,oBAET+gB,EAAG,CACDJ,MAAO,CACL,CAAC,IAAK,KACN,CAAC,IAAK,MAER3gB,MAAO,oBAETghB,EAAG,CACDL,MAAO,CACL,CAAC,EAAG,IAAK,KACT,CAAC,IAAK,IAAK,GACX,CAAC,EAAG,EAAG,IAET3gB,MAAO,sBAETihB,EAAG,CACDN,MAAO,CACL,CAAC,IAAK,IAAK,KACX,CAAC,EAAG,IAAK,GACT,CAAC,EAAG,EAAG,IAET3gB,MAAO,sBAETkhB,EAAG,CACDP,MAAO,CACL,CAAC,IAAK,IAAK,GACX,CAAC,EAAG,IAAK,KACT,CAAC,EAAG,EAAG,IAET3gB,MAAO,uBAIEmhB,GAAkB,WAC7B,IAAMC,EAAa,UACbC,EACJD,EAAWlgB,KAAKC,MAAMD,KAAKE,SAAWggB,EAAWvlB,SACnD,OAAO6kB,GAAWW,EACpB,EC9DaC,GAAW,SAACvH,EAAQwH,GAC/B,MAA0BniB,mBAAS8gB,MAAc,mBAA1CG,EAAK,KAAEmB,EAAQ,KACtB,EAAsCpiB,mBAAS,GAAE,mBAA1CqiB,EAAW,KAAEC,EAAc,KA6ClC,OA3CA9hB,qBAAU,WACR8hB,EAAe,GAEf,IAWMC,EAAc,SAACC,GAEnB,IAAMC,EAAWD,EAAU5e,KAAI,SAAC8e,GAAG,OACjCA,EAAI9e,KAAI,SAAC+e,GAAI,MAAkB,UAAZA,EAAK,GAAiB,CAAC,EAAG,SAAWA,CAAI,GAAE,IAehE,OAXAhI,EAAOyG,UAAUwB,SAAQ,SAACF,EAAKvU,GAC7BuU,EAAIE,SAAQ,SAAChV,EAAO3L,GACJ,IAAV2L,IACF6U,EAAStU,EAAIwM,EAAO0G,IAAIlT,GAAGlM,EAAI0Y,EAAO0G,IAAIpf,GAAK,CAC7C2L,EAAM,GAAD,OACF+M,EAAOkI,SAAW,SAAW,UAGtC,GACF,IAEIlI,EAAOkI,UACTV,IA9Bc,SAACM,GAAQ,OACzBA,EAASlR,QAAO,SAACuR,EAAKJ,GACpB,OAAgD,IAA5CA,EAAIlL,WAAU,SAACmL,GAAI,OAAiB,IAAZA,EAAK,EAAQ,KACvCL,GAAe,SAAC5P,GAAI,OAAKA,EAAO,CAAC,IACjCoQ,EAAIC,QAAQ,IAAI7I,MAAMuI,EAAS,GAAGhmB,QAAQwP,KAAK,CAAC,EAAG,WAC5C6W,IAETA,EAAIxY,KAAKoY,GACFI,EACT,GAAG,GAAG,CAsBGE,CAAUP,IAGZA,CACT,EAEAL,GAAS,SAAC1P,GAAI,OAAK6P,EAAY7P,EAAK,GACtC,GAAG,CAACiI,EAAQwH,IAEL,CAAClB,EAAOmB,EAAUC,EAC3B,ECjDO,ICyBQ/oB,gBAvBA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJiO,OAAO,2CAET,GAkBWpO,EAVmB,SAACoB,GACjC,IAAQiT,EAAkBjT,EAAlBiT,KAAM/S,EAAYF,EAAZE,QACd,OACE,qBACED,UAAWC,EAAQnB,KACnBqS,MAAO,CAAEjS,gBAAiBynB,GAAW3T,GAAM/M,QAGjD,ICYetH,gBAjCA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJiO,OAAQ,kBACRhO,OAAQ,OACRkG,MAAO,mBACPC,QAAS,OACTojB,oBAAqB,kBACrBC,iBAAkB,mBAClBC,aAAc,OACdjpB,WAAYX,EAAMe,QAAQ+L,UAAUmP,QAEtC,GAqBWlc,EAboB,SAACoB,GAClC,IAAQumB,EAAmBvmB,EAAnBumB,MAAOrmB,EAAYF,EAAZE,QACf,OACE,qBAAKD,UAAWC,EAAQnB,KAAK,SAC1BwnB,EAAMrd,KAAI,SAAC8e,GAAG,OACbA,EAAI9e,KAAI,SAAC+e,EAAM1gB,GACb,OAAO,cAAC,GAAI,CAAS0L,KAAMgV,EAAK,IAAd1gB,EACpB,GAAE,KAIV,ICgBMmhB,GAAiBzN,IAAM0N,YAC3B,SAAC3oB,EAAO4oB,GACN,IAAQ3jB,EAA8BjF,EAA9BiF,QAASkP,EAAqBnU,EAArBmU,QAASjU,EAAYF,EAAZE,QAC1B,EAA8BoF,mBAAS,GAAE,mBAAlCujB,EAAO,KAAEC,EAAU,KAEpBC,EAAiBrZ,uBACrB,SAACsZ,GACC,IAAMC,EAAM,SAACC,EAAG1U,GAAC,OAAO0U,EAAI1U,EAAKA,GAAKA,CAAC,EAC3B,SAARwU,EACFF,GAAW,SAACK,GAAC,OAAKF,EAAIE,EAAI,EAAGlkB,EAAQlD,OAAO,IAC3B,UAARinB,GACTF,GAAW,SAACK,GAAC,OAAKF,EAAIE,EAAI,EAAGlkB,EAAQlD,OAAO,GAEhD,GACA,CAACkD,EAAQlD,SAQX,OALA+D,qBACE,wBAAuD,QAAvD,EAAMgB,SAASsiB,eAAe,eAAD,OAAgBP,WAAU,aAAjD,EAAmDQ,OAAO,GAChE,CAACR,IAID,qBAAK5oB,UAAWC,EAAQnB,KAAMgb,IAAK6O,EAAa,SAC9C,eAAC,KAAoB,CACnBU,WAAY,CAAC,OAAQ,SACrBC,WAAY,SAACP,EAAK/C,GAAC,OAAK8C,EAAeC,EAAI,EAC3CQ,aAAa,EAAK,UAElB,qBAAKvpB,UAAWC,EAAQiU,QAAQ,SAAEA,IAClC,qBAAKlU,UAAWC,EAAQ0V,QAAQ,SAC7B3Q,EAAQiE,KAAI,SAACjC,EAAGC,GAAC,OAChB,cAACnB,EAAA,EAAM,CAELW,GAAE,sBAAiBQ,GACnBjB,QAAQ,WACRC,MAAM,UACNF,QAASiB,EAAEjB,QACX4c,WAAY1b,EAAE,SAEbD,EAAEuL,OAAK,sBAPYtL,GAQb,UAMrB,IAEFwhB,GAAee,YAAc,iBAEd7qB,oBA5FA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJoG,QAAS,OACTiH,cAAe,SACfP,WAAY,mBACZ,SAAU,CACRA,WAAY,oBAEdxG,WAAY,SACZ7F,WAAY,OACZwN,OAAO,aAAD,OAAenO,EAAMe,QAAQC,QAAQC,MAC3CP,QAAS,QAEXqW,QAAS,CACPzQ,QAAS,OACTC,eAAgB,eAChB,QAAS,CACP+J,OAAQ,QAGZgF,QAAS,CACPqB,UAAW,SACXxJ,aAAc,SAEhB,GAmEWpN,CAAmB8pB,ICzCnBgB,GAlDI,SACjBrf,GAGA,IAAM1E,EAAWhC,IACX4L,EAAUC,cA0ChB,YAAqBvL,IAAdoG,EAxCU,CACfka,GAAI,CACFoF,MAAO,kBACLhkB,EAASgD,GAAc,CAAES,QAAS,KAAMhD,SAAU,KAAMP,MAAK,kBAC3D0J,EAAQK,KAAK,eAAe,GAC7B,EACHga,QAAS,kBACPjkB,EAASgD,GAAc,CAAES,QAAS,KAAMhD,SAAU,KAAMP,MAAK,kBAC3D0J,EAAQK,KAAK,wBAAwB,GACtC,GAEL6U,GAAI,CACFkF,MAAO,WACLhkB,EAASgD,GAAc,CAAES,QAAS,KAAMhD,SAAU,OAASP,MAAK,WAC9D0J,EAAQK,KAAK,wBACf,GACF,EACAga,QAAS,WACPjkB,EAASgD,GAAc,CAAES,QAAS,KAAMhD,SAAU,OAASP,MAAK,WAC9D0J,EAAQK,KAAK,wBACf,GACF,GAEF+U,GAAI,CACFgF,MAAO,WACLhkB,EAASgD,GAAc,CAAES,QAAS,KAAMhD,SAAU,IAAM,OAAQP,MAC9D,SAACogB,GACC1W,EAAQK,KAAK,wBACf,GAEJ,EACAga,QAAS,WACPjkB,EAASgD,GAAc,CAAES,QAAS,KAAMhD,SAAU,IAAM,OAAQP,MAC9D,WACE0J,EAAQK,KAAK,wBACf,GAEJ,IAGsCvF,QAAapG,CACzD,EC6NerF,gBA1PA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJoG,QAAS,OACT0G,WAAY,mBACZrM,WAAYX,EAAMe,QAAQ+L,UAAUyD,KACpC/P,gBAAiB,2CACjB6F,MAAO,OACPlG,OAAQ,OACRoN,cAAe,UAEjByd,MAAO,CACL1kB,QAAS,OACTD,MAAO,OACPlG,OAAQ,OACRoN,cAAe,SACfhH,eAAgB,SAChBC,WAAY,SACZ7F,WAAY,eAEdsqB,MAAO,CACLjW,WAAY,OACZ,MAAO,CACL3N,MAAOrH,EAAMe,QAAQC,QAAQC,KAC7BiM,SAAU,SAGdzM,UAAW,CACTN,OAAQ,qBACRkG,MAAO,OACPgJ,SAAU,WACVO,IAAK,MACLuG,KAAM,MACN3G,UAAW,wBACXlJ,QAAS,OACTqjB,iBAAkB,iBAClBuB,OAAQ,QAEVjU,OAAQ,CACN9I,OAAQ,kBACR7N,gBAAiBN,EAAMe,QAAQC,QAAQC,KACvCqF,QAAS,OACTC,eAAgB,eAChBC,WAAY,SACZa,MAAO,QACP6F,SAAU,MACV7G,MAAO,OACPuY,YAAa,UAEf8I,MAAO,CACLphB,QAAS,OACTC,eAAgB,SAChBC,WAAY,WAEd,GAoMWzG,EA9LqB,SAACoB,GACnC,IAAQE,EAAYF,EAAZE,QACR,EAAgCoF,mBAAwB,MAAK,mBAAtD0kB,EAAQ,KAAEC,EAAW,KAC5B,EAAgC3kB,oBAAS,GAAM,mBAAxC4kB,EAAQ,KAAEC,EAAW,KAC5B,EAAkC7kB,oBAAS,GAAM,mBAA1C4V,EAAS,KAAEC,EAAY,KAC9B,EAAoCtX,GAClC,SAACW,GAAgB,OAAKA,EAAMgH,WAAWpB,MAAM,IADvCE,EAAM,EAANA,OAAQC,EAAI,EAAJA,KAAMF,EAAS,EAATA,UAGhBkF,EAAUC,cACV7J,EAAWhC,IACXymB,EAAUV,GAAWrf,GAE3B,ECjGuB,WACvB,MAA4B/E,mBAAS,CACnCqhB,IAAK,CAAEpf,EAAG,EAAGkM,EAAG,GAChBiT,UAAWE,GAAW,GAAGC,MACzBsB,UAAU,IACV,mBAJKlI,EAAM,KAAEoK,EAAS,KAclBC,EAAS,SAACC,EAAQC,GACtB,IAAMC,EAAeF,EAAOrhB,KAAI,SAAC+c,EAAGrT,GAAK,OACvC2X,EAAOrhB,KAAI,SAACwhB,GAAG,OAAKA,EAAI9X,EAAM,GAAC,IAGjC,OAAI4X,EAAM,EAAUC,EAAavhB,KAAI,SAAC8e,GAAG,OAAKA,EAAI2C,SAAS,IACpDF,EAAaE,SACtB,EAqBMlD,EAAc/X,uBAAY,WAC9B2a,EAAU,CACR1D,IAAK,CAAEpf,EAAGqjB,EAAqBnX,EAAG,GAClCiT,UAAWW,KAAkBR,MAC7BsB,UAAU,GAEd,GAAG,IAEH,MAAO,CAAClI,EA5CgB,SAAH,GAA4B,IAAtB1Y,EAAC,EAADA,EAAGkM,EAAC,EAADA,EAAG0U,EAAQ,EAARA,SAC/BkC,GAAU,SAACrS,GAAI,kCACVA,GAAI,IACP2O,IAAK,CAAEpf,EAAIyQ,EAAK2O,IAAIpf,GAAKA,EAAIkM,EAAIuE,EAAK2O,IAAIlT,GAAKA,GAC/C0U,YAAQ,GAEZ,EAsCiCV,EA3BZ,SAAClB,EAAOiE,GAC3B,IAAMK,EAAe9X,KAAK+X,MAAM/X,KAAKC,UAAUiN,IAC/C4K,EAAanE,UAAY4D,EAAOO,EAAanE,UAAW8D,GAIxD,IAFA,IAAM7D,EAAMkE,EAAalE,IAAIpf,EACzBwjB,EAAS,EACNzE,GAAeuE,EAActE,EAAO,CAAEhf,EAAG,EAAGkM,EAAG,KAGpD,GAFAoX,EAAalE,IAAIpf,GAAKwjB,GACtBA,IAAWA,GAAUA,EAAS,EAAI,GAAK,KAC1BF,EAAanE,UAAU,GAAG3kB,OAGrC,OAFAuoB,EAAOO,EAAanE,WAAY8D,QAChCK,EAAalE,IAAIpf,EAAIof,GAKzB0D,EAAUQ,EACZ,EAWF,CD6C+DG,GAAW,mBAAjE/K,EAAM,KAAEgL,EAAe,KAAExD,EAAW,KAAEyD,EAAY,KACzD,EAAuC1D,GAASvH,EAAQwH,GAAY,mBAA7DlB,EAAK,KAAEmB,EAAQ,KACtB,ELtG2B,SAACC,GAC5B,MAA0BriB,mBAAS,GAAE,mBAA9BwF,EAAK,KAAEqgB,EAAQ,KACtB,EAAwB7lB,mBAAS,GAAE,mBAA5B8lB,EAAI,KAAEC,EAAO,KACpB,EAA0B/lB,mBAAS,GAAE,mBAA9BgmB,EAAK,KAAEC,EAAQ,KAEhBC,EAAajP,mBAAQ,iBAAM,CAAC,GAAI,IAAK,IAAK,KAAK,GAAE,IAEjDkP,EAAY/b,uBAAY,WACxBiY,EAAc,IAChBwD,GAAS,SAACnT,GAAI,OAAKA,EAAOwT,EAAW7D,EAAc,IAAM2D,EAAQ,EAAE,IACnED,GAAQ,SAACrT,GAAI,OAAKA,EAAO2P,CAAW,IAExC,GAAG,CAAC2D,EAAOE,EAAY7D,IAMvB,OAJA7hB,qBAAU,WACR2lB,GACF,GAAG,CAACA,EAAW9D,EAAa7c,IAErB,CAACA,EAAOqgB,EAAUC,EAAMC,EAASC,EAAOC,EACjD,CKmF4DG,CADvB,MAGlC,mBAFM5gB,EAAK,KAAEqgB,EAAQ,KAAEC,EAAI,KAAEC,EAAO,KAAEC,EAAK,KAAEC,EAAQ,KAIhDI,EAAa,SAACnB,GACblE,GAAerG,EAAQsG,EAAO,CAAEhf,EAAGijB,EAAK/W,EAAG,KAC9CwX,EAAgB,CAAE1jB,EAAGijB,EAAK/W,EAAG,GAEjC,EAEMmY,EAAc,WAElBlE,EAAStB,MACT6D,EAAY,KACZxC,IACA0C,GAAY,GACZgB,EAAS,GACTE,EAAQ,GACRE,EAAS,GACTpQ,GAAa,EACf,EAEM0Q,EAAO,WACPT,EAAqB,GAAbE,EAAQ,KAClBC,GAAS,SAACvT,GAAI,OAAKA,EAAO,CAAC,IAC3BiS,EAAY,KAAOqB,EAAQ,GAAK,MAE7BhF,GAAerG,EAAQsG,EAAO,CAAEhf,EAAG,EAAGkM,EAAG,KAGxCwM,EAAO0G,IAAIlT,EAAI,IACjB0W,GAAY,GACZF,EAAY,OAEdgB,EAAgB,CAAE1jB,EAAG,EAAGkM,EAAG,EAAG0U,UAAU,KANxC8C,EAAgB,CAAE1jB,EAAG,EAAGkM,EAAG,EAAG0U,UAAU,GAQ5C,EAEM2D,EAAQ,WACP5B,GACHD,EAAY,KAAOqB,EAAQ,GAAK,IAEpC,EAOMS,EAAO,SAACC,GACP9B,IACa,SAAZ8B,GACFL,GAAY,GACZG,KACqB,UAAZE,GACTL,EAAW,GACXG,KACqB,SAAZE,GAZb/B,EAAY,MACZ4B,IAaIC,KACqB,OAAZE,IACTd,EAAa3E,EAAO,GACpBuF,KAGN,GEvKK,SAAqBG,EAAUvG,GACpC,IAAMwG,EAAgBnT,mBACtBjT,qBAAU,WACRomB,EAAc5c,QAAU2c,CAC1B,GAAG,CAACA,IAEJnmB,qBAAU,WAIR,GAAc,OAAV4f,EAAgB,CAClB,IAAMhf,EAAKyJ,aAJb,WACE+b,EAAc5c,SAChB,GAE+BoW,GAC7B,OAAO,WACLrV,cAAc3J,EAChB,CACF,CACF,GAAG,CAACgf,GACN,CFwJEyG,EAAY,WACVN,GACF,GAAG7B,GAEHlkB,qBAAU,WACRH,EAAS+E,GAAoB,UAC/B,GAAG,CAAC/E,IAEJG,qBAAU,WACJgF,EAAQP,GAAM5E,EAASkF,GAAa,CAAEF,KAAM,SAAUG,UAC5D,GAAG,CAACA,EAAOP,EAAM5E,IAEjB,IAAMgV,EAAU,WACdpL,EAAQK,KAAK,eACf,EAqDA,OACE,sBAAK3P,UAAWC,EAAQnB,KAAK,UAC3B,cAACwV,GAAA,EAAU,CACT,aAAW,QACXvO,QAAS,gBACS/B,IAAZmmB,GAAuBA,EAAQR,UACnCjP,GACF,EACA1a,UAAWC,EAAQ4pB,MAAM,SAEzB,cAAC,GAAS,MAEZ,cAAC,KAAoB,CACnBR,WAAY,CAAC,OAAQ,QAAS,KAAM,QACpCC,WAAY,SAACP,EAAK/C,GAAC,OAAK8F,EAAK/C,EAAI,IAEnC,sBAAK/oB,UAAWC,EAAQZ,UAAU,UAChC,sBAAKW,UAAWC,EAAQ4V,OAAO,UAC7B,+CAAkBvL,OACfD,GAAU,4CAAeA,QAE9B,qBAAKrK,UAAWC,EAAQqmB,MAAM,SAC5B,cAAC,GAAK,CAACA,MAAOA,MAEhB,sBAAKtmB,UAAWC,EAAQ4V,OAAO,UAC7B,2CAAcwV,KACd,2CAAcxgB,WAGlB,cAACgM,GAAA,EAAK,CAAC/F,KAAMmK,GAAagP,EAAUjqB,UAAWC,EAAQ2pB,MAAM,SA/E3Dvf,GAAUQ,GAASR,EAEnB,cAAC,GAAc,CACb6J,QAAQ,YACRlP,QAAS,CACP,CACEuN,MAAO,UACPxM,QAAS,WACHokB,EAASA,EAAQT,QAChBhP,GACP,GAEF,CACEnI,MAAO,eACPxM,QAAS,WACHokB,GAASA,EAAQT,QACrBiC,GACF,MAKC9gB,EAAQP,EAEf,cAAC,GAAc,CACb4J,QAAQ,iBACRlP,QAAS,CAAC,CAAEuN,MAAO,kBAAmBxM,QAAS4lB,MAKjD,cAAC,GAAc,CACbzX,QAAQ,aACRlP,QAAS,CACP,CACEuN,MAAO,YACPxM,QAAS4lB,GAEX,CACEpZ,MAAO,OACPxM,QAAS,gBACkB/B,KAAd,OAAPmmB,QAAO,IAAPA,OAAO,EAAPA,EAASR,UAAuBQ,EAAQR,UAC5CjP,GACF,QAuCR,cAAC7D,GAAA,EAAK,CAAC/F,MAAOmK,EAAWjb,UAAWC,EAAQ2pB,MAAM,SAChD,cAAC,GAAc,CACb1V,QAAQ,sBACRlP,QAAS,CAAC,CAAEuN,MAAO,QAASxM,QAAS4lB,UAK/C,IGvQeQ,GAbC,WAId,MAA8B9mB,mBAAS,GAAE,mBAAlC+mB,EAAO,KAAEC,EAAU,KAC1B,EAA8BhnB,mBAAS,GAAE,mBAAlCinB,EAAO,KAAEC,EAAU,KAC1B,EAA8BlnB,mBAAS,GAAE,mBACzC,MAAO,CACL,CAAC+mB,EAASE,EAFE,MAGZ,CAACD,EAAYE,EAHW,MAK5B,ECUMC,GAAe,CACnBC,KAAM,oCACNC,QAAS,uCACTC,QAAS,uCACTC,IAAK,mCACLC,MAAO,qCACPC,OAAQ,sCACRC,SAAU,wCACVC,QAAS,wCAGLC,GAAgB,CACpB,uBACA,gBACA,gBACA,oBACA,wBACA,gCACA,kBAGIC,GAAU,CACd,CAAC,OAAQ,UAAW,UAAW,SAAU,MAAO,SAChD,CAAC,MAAO,WAAY,UAAW,OAAQ,UAAW,SAClD,CAAC,UAAW,UAAW,QAAS,UAAW,OAAQ,QA8UtCvuB,gBAnUA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAK,aACHoG,QAAS,OACTC,eAAgB,SAChBC,WAAY,SACZ+G,cAAe,SACflH,MAAO,OACPlG,OAAQ,OACR6M,WAAY,mBACZtM,QAAS,OACT,mBAAoB,CAClBsM,WAAY,oBAEdxM,gBAAiB,mDACjB0M,SAAU,QACTlN,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BtJ,SAAU,OACVxM,QAAS,WAGb0W,KAAM,CACJ9Q,QAAS,OACTqjB,iBAAkB,kBAClBuB,OAAQ,OACR7kB,MAAO,QAET4Q,OAAQ,CACN5Q,MAAO,OACPgB,MAAOrH,EAAMe,QAAQ+L,UAAU7L,KAC/BX,gBAAiB,qBACjB6N,OAAQ,kBACR7H,QAAS,OACTC,eAAgB,gBAChBC,WAAY,SACZ,WAAY,CACVF,QAAS,OACTC,eAAgB,SAChB+G,KAAM,IAGVmJ,QAAS,CACPnW,gBAAiB,qBACjB6N,OAAQ,kBACR7H,QAAS,OACTojB,oBAAqB,iBACrBhpB,QAAS,OACT6tB,UAAW,QAEbC,OAAQ,CACNrgB,OAAQ,kBACR7H,QAAS,OACTiH,cAAe,SACfhH,eAAgB,aAChBC,WAAY,SACZpG,SAAU,UAEZquB,KAAM,CACJnoB,QAAS,OACTC,eAAgB,SAChBC,WAAY,SACZH,MAAO,OACPmZ,SAAU,OACVjJ,UAAW,OACXpW,OAAQ,OACR,UAAW,CACTkG,MAAO,OAEPlG,OAAQ,MACRkP,SAAU,aAGdqf,KAAM,CACJrf,SAAU,WACVkS,UAAU,SAAD,OA5EY,IA4EiB,uBAExC0J,MAAO,CACL,SAAU,CACR5jB,MAAOrH,EAAMe,QAAQ+L,UAAU7L,KAC/BiM,SAAU,SAGd4J,OAAQ,CACNzP,MAAOrH,EAAMe,QAAQ+L,UAAU7L,KAC/BN,WAAY,qBACZwN,OAAO,aAAD,OAAenO,EAAMe,QAAQ+L,UAAU7L,MAC7CiM,SAAU,UACV,UAAW,CACT7F,MAAO,qBACP1G,WAAYX,EAAMe,QAAQ+L,UAAU7L,KACpCkN,OAAQ,+BACRH,OAAQ,WAEV,aAAc,CACZ3G,MAAOrH,EAAMe,QAAQ+L,UAAUmP,MAC/Btb,WAAY,qBACZwN,OAAO,aAAD,OAAenO,EAAMe,QAAQ+L,UAAU7L,MAC7C+M,OAAQ,YAGZgd,MAAO,CACL1kB,QAAS,OACTD,MAAO,OACPiK,OAAQ,SACRnQ,OAAQ,OACRoN,cAAe,SACfhH,eAAgB,SAChBC,WAAY,SACZ7F,WAAY,eAEdguB,MAAO,CACLpN,UAAW,+BAEb,kBAAmB,CACjB,KAAM,CACJ3R,IAAK,QAEP,OAAQ,CACNA,IAAK,UAGT,mBAAoB,CAClB,KAAM,CACJ0D,OAAQ,cAEV,OAAQ,CACNA,OAAQ,kBAGZ,GAkMWvT,EA3K0B,SAACoB,GACxC,IAGQE,EAAYF,EAAZE,QAEFqP,EAAUC,cACV7J,EAAWhC,IACjB,EAA+BE,GAC7B,SAACW,GAAgB,OAAKA,EAAMgH,WAAWhB,WAAW,IAD5CC,EAAO,EAAPA,QAASJ,EAAS,EAATA,UAGX+f,EAAUV,GAAWrf,GAE3B,EAA0B/E,qBAA8B,mBAAjDmoB,EAAK,KAAEC,EAAQ,KACtB,EAA8BpoB,mBAAS,gBAAe,mBAA/C6O,EAAO,KAAEC,EAAU,KAC1B,EAA4B9O,mBAAkB,WAAU,mBAAjDwJ,EAAM,KAAEsH,EAAS,KACxB,EAA0B9Q,mBAAS,EAAC,GAAO,GAAO,IAAO,mBAAlDqoB,EAAK,KAAEC,EAAQ,KACtB,EAAiCxB,KAAS,mBAAnCyB,EAAO,KAAEC,EAAa,KAC7B,EAAsCxoB,oBAAS,GAAK,mBAA7CyoB,EAAW,KAAEC,EAAc,KAE5BC,EAASve,uBAAY,SAACme,GAC1B,IAAMK,EACJf,GAAQ,GAAGU,EAAQ,MAAQV,GAAQ,GAAGU,EAAQ,KAC9CV,GAAQ,GAAGU,EAAQ,MAAQV,GAAQ,GAAGU,EAAQ,IAC1CM,EACuB,WAA3BhB,GAAQ,GAAGU,EAAQ,KACQ,aAA3BV,GAAQ,GAAGU,EAAQ,KACQ,YAA3BV,GAAQ,GAAGU,EAAQ,IACrB,OAAOK,GAAYC,CACrB,GAAG,IAEGC,EAAa1e,uBAAY,SAACie,GAAK,OAAKA,EAAMU,MAAK,SAACzM,GAAC,OAAKA,CAAC,GAAC,GAAE,IA+DhE9b,qBAAU,WACRH,EAAS+E,GAAoB,eAC/B,GAAG,CAAC/E,EAAU0E,IAEdvE,qBAAU,WACJ6nB,EAAMtX,OAAM,SAACuL,GAAC,OAAMA,CAAC,MAAMmM,IAC7BE,EAAOJ,IAnCTloB,EAASkF,GAAa,CAAEF,KAAM,cAAeG,MAAOL,EA/DvC,OAgEb2J,EAAW,WAAD,OAhEG,IAgEe,aAC5BgC,EAAU,OACVsN,YAAW,WACTtP,EAAW,gBACXgC,EAAU,WACNgU,GACFsD,EACE,0HAGN,GAAG,OAIHtZ,EAAW8Y,GAAc9lB,KAAKC,MAAMD,KAAKE,SAAWF,KAAKC,MAAM,MAC/D+O,EAAU,QAEVsN,YAAW,WACTtP,EAAW,gBACXgC,EAAU,WACNgU,GAAW3f,GAAW,GACxBijB,EACE,mHAGN,GAAG,MAYL,GAAG,CAACC,EAAOM,IAEXnoB,qBAAU,WACRkoB,GAAe,EACjB,GAAG,IAMH,OACE,sBAAK/tB,UAAW8O,aAAK7O,EAAQnB,KAAiB,QAAX+P,GAAoB5O,EAAQstB,OAAO,UACpE,sBAAKvtB,UAAWC,EAAQ+V,KAAK,UAC3B,sBAAKhW,UAAWC,EAAQ4V,OAAO,UAC7B,kDAAqBrL,KACrB,cAAC8J,GAAA,EAAU,CACT,aAAW,QACXvO,QAAS,gBACS/B,IAAZmmB,GACFA,EAAQR,UAZpBra,EAAQK,KAAK,eAeL,EACA3P,UAAWC,EAAQ4pB,MAAM,SAEzB,cAAC,GAAS,SAGd,qBAAK7pB,UAAWC,EAAQoV,QAAQ,SAC7BuY,EAAQ3kB,KAAI,SAAColB,EAAIpnB,GAAC,OACjB,qBAAKjH,UAAWC,EAAQmtB,OAAO,SAC7B,qBAAKptB,UAAW8O,aAAK7O,EAAQotB,KAAMK,EAAMzmB,IAAMhH,EAAQqtB,MAAM,SAC3D,qBAAKxmB,IAAK0lB,GAAaU,GAAQjmB,GAAGonB,IAAMrf,IAAKke,GAAQjmB,GAAGonB,QACpD,cAHoCpnB,GAItC,MAGV,wBACEjH,UAAWC,EAAQyV,OACnB3P,QA7GK,WACX,IAAKooB,EAAWT,IAAqB,YAAX7e,GAAwBrE,GAjCvC,IAiCwD,CAEjE9E,EAASkF,GAAa,CAAEF,KAAM,cAAeG,MAAOL,EAnC3C,OAoCTmjB,EAAS,EAAC,GAAM,GAAM,IAEtB,IAAMW,EAAY,IAAI/O,MAAM,GAAGjO,KAAK,GAAGrI,KAAI,SAAC+c,EAAG/e,GAAC,OAC9CiJ,aAAY,WACV2d,EAAc5mB,IAAG,SAAC/D,GAAG,OAAMA,EAAM,GAAKgqB,GAAQjmB,GAAGnF,MAAM,GACzD,GAAGysB,IAAyB,IAKxBC,EAAYF,EAAUrlB,KAC1B,SAAC+c,EAAG/e,GAAC,OA1Mc,IAuMD,SAACA,EAAGC,GAAC,OAAKD,EAAIE,KAAKE,UAAYH,EAAID,EAAE,CAGxBwnB,CAAY,EAAG,IAAM,EAAIxnB,EAAE,IAG5DqnB,EAAUrlB,KAAI,SAACgH,EAAUhJ,GAAC,OACxBwc,YAAW,WACTrT,cAAcH,GACd0d,GAAS,SAAChM,GACR,IAAM+M,EAAK,aAAO/M,GAElB,OADA+M,EAAMznB,IAAK,EACJynB,CACT,GACF,GAAGF,EAAUvnB,GAAG,GAEpB,CACF,EAiFQ2H,SAAUuf,EAAWT,IAAqB,YAAX7e,EAAqB,SAEnDrE,EAAU,IAAM,qBAAuB0J,YAG/BlQ,IAAZmmB,QAAmCnmB,IAAVwpB,GACxB,cAAC3W,GAAA,EAAK,CAAC/F,MAAM,EAAM9Q,UAAWC,EAAQ2pB,MAAM,SAC1C,cAAC,GAAc,CACb1V,QAASsZ,EACTxoB,QAAS,CACP,CACEuN,MAAO,KACPxM,QAAS,WACHyE,GAAW,EACb2f,EAASR,UAETQ,EAAST,OAEb,UAQhB,IC7Te/qB,gBAlDA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJC,OAAQ,OACRC,SAAU,SACVkG,QAAS,OACTiH,cAAe,UAEjB1J,KAAM,CAAC,GACP,GAyCW9D,EApC8B,SAACoB,GAC5C,MAA8BsF,mBAE3B,CAAE2N,KAAM,SAAS,mBAFboK,EAAO,KAAEhB,EAAU,KAGpBhU,EAAiBxE,GAAe,SAACqH,GAAK,OAAKA,EAAMjC,aAAaZ,KAAK,IACnE5B,EAAU5C,GAAe,SAACW,GAAK,OAAKA,EAAMyE,aAAab,eAAe,IAC5EtF,QAAQC,IAAI0D,GAEZ,IAAM8I,EAAUC,cACV4N,EAAgB1N,uBACpB,SAAC8N,GACCjO,EAAQK,KAAK,cAAD,OAAe4N,GAC7B,GACA,CAACjO,IAEG4N,EAAczN,uBAAY,WAC9B2M,EAAW,CAAEpJ,KAAM,WACrB,GAAG,IAEH,OACE,mCACE,cAAC,GAAO,CACNnL,WAAYO,EACZgV,QAASA,EACThB,WAAYA,EACZe,cAAeA,EACfD,YAAaA,EACb1W,QAASA,EACTuT,YAAatB,GACbuB,cAAetB,GACfyD,wBAAwB,OAIhC,ICEexd,gBAnDA,SAACC,GAAY,aAC1BC,YAA2B,CACzBC,KAAM,CACJC,OAAQ,OACRC,SAAU,SACVkG,QAAS,OACTiH,cAAe,UAEjB0J,QAAM,GACJ3Q,QAAS,OACTgK,OAAQ,OACR9J,WAAY,SACZD,eAAgB,gBAChByG,WAAY,wBACZE,SAAU,QAAM,cACflN,EAAMY,YAAY4V,KAAK,MAAQ,CAC9BtJ,SAAU,WACX,sBACMlN,EAAMe,QAAQ+L,UAAUyD,MAAI,GAErCR,KAAM,CACJ2J,YAAa,EACbrS,MAAO,QACP6F,SAAU,SAEZ,GA0BWnN,EApBkC,SAACoB,GAChCwP,cAIhB,OAHA1J,qBAAU,WACRgB,SAASH,MAAK,WAChB,IAEE,mCACE,sBAAK1G,UAAWD,EAAME,QAAQnB,KAAK,UACjC,cAAC,GAAM,CACL6P,KAAM,6BACNjI,MAAM,YACNxH,gBAAgB,OAChB+G,MAAM,UAER,cAAC,GAAe,QAIxB,IC6GetH,gBAlJA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CACJC,OAAQ,OACRC,SAAU,SACVkG,QAAS,OACTiH,cAAe,UAEjBwiB,UAAW,CACTzpB,QAAS,OACTiH,cAAe,SACfhH,eAAgB,SAChB7F,QAAS,SACT4M,KAAM,EACN,QAAS,CACPH,aAAc,SAGlB6iB,eAAgB,CACd3pB,MAAO,OACP,UAAW,CAAEgB,MAAO,UAEtB4oB,OAAQ,CACNC,mBAAoB,OACpB7oB,MAAO,YAET,GAwHWtH,EA5GyB,SAACoB,GACvC,IAAMwd,EAAcxd,EAAMrB,MAAMkkB,OAAOrF,YACvC,EAA8BlY,oBAAS,GAAM,mBAAtCiW,EAAO,KAAEwF,EAAU,KAC1B,EAAwCzb,qBAAoB,mBAArDwd,EAAY,KAAEC,EAAe,KAC9BxT,EAAUC,cAEVtF,EAAmBrG,GACvB,SAACqH,GAAK,OACJA,EAAMjC,aAAaZ,MAAMwB,MAAK,SAACF,GAAC,OAAKA,EAAEjD,KAAO8W,CAAW,KACzDtS,EAAMjC,aAAaZ,MAAM,EAAE,IAGzB1C,EAAWhC,IAEjBmC,qBAAU,WACRH,EAAS4C,MACN4T,SACAtW,MAAK,SAACmd,GAEL,IAAMC,EAAsCD,EAAanZ,MACvD,SAACD,GAAC,OAAKA,EAAER,UAAYoU,CAAW,IAElC,QAAsBvZ,IAAlBgf,QAAuDhf,IAAxBgf,EAAcnZ,MAAqB,CACpEhH,QAAQC,IAAI,aAAcya,EAAawF,GACvC,IAAME,EAAwB,CAC5B9Z,QAASoU,EACTpX,SAAU,EACV0D,MAAOkZ,EAAajhB,QAEtBghB,EAAgBG,GAChBvd,EAASiD,GAAkBsa,GAC7B,MAAWD,GACTF,EAAgBE,EAEpB,GACJ,GAAG,CAACtd,EAAU6X,IAEd,IAYA,EAA8BlY,mBAC5B,QACD,mBAFM+X,EAAO,KAAEhB,EAAU,KAI1B,OACE,mCACE,sBAAKpc,UAAWD,EAAME,QAAQnB,KAAK,UACjC,cAAC,GAAW,CACV4H,MAAO,YACP4U,QAASA,EACTwF,WAAYA,EACZS,WAvBW,SAACpb,GACd0c,GAAgB1c,EAASqb,OAASvX,EAAU9D,UAC9CT,EACEiD,GAAkB,CAChBQ,QAASc,EAAUxD,GACnBN,SAAUgB,KAAKgY,IAAIhZ,EAASqb,OAAQvX,EAAU9D,UAC9C0D,MAAOgZ,EAAahZ,QAI5B,EAcQI,UAAWA,EACX8W,iBAAkB,kBAAMzR,EAAQK,KAAK,aAAa,EAClD3K,QAAS,CACP,CAAEuN,MAAO,UAAWxM,QAAS,kBAAMqW,EAAW,UAAU,GACxD,CAAE7J,MAAO,WAAYxM,QAAS,kBAAMqW,EAAW,WAAW,MAG9D,cAAC,GAAQ,CACP1V,MAAOuD,EAAUvD,MACjB+T,SAAUxQ,EAAUtD,OACpBmK,KAAkB,YAAZsM,EACN1C,QAAS,kBAAM0B,EAAW,OAAO,EAAC,SAElC,qBAAKpc,UAAWD,EAAME,QAAQ0uB,UAAU,SACtC,oBACEtY,KAAMpM,EAAU5B,YAChBrI,UAAWD,EAAME,QAAQ4uB,OACzBxkB,OAAO,SACP0kB,IAAI,sBAAqB,UAExB,IACD,cAACjpB,EAAA,EAAM,CACLE,QAAQ,WACRC,MAAM,YACNjG,UAAWD,EAAME,QAAQ2uB,eAAe,6CAOhD,cAAC,GAAQ,CACPloB,MAAOuD,EAAUvD,MACjB+T,SAAUxQ,EAAUtD,OACpBmK,KAAkB,aAAZsM,EACN1C,QAAS,kBAAM0B,EAAW,OAAO,EAAC,SAElC,cAAC,GAAiB,CAChBjT,QAASc,EAAUxD,GACnBiU,QAAS,kBAAM0B,EAAW,OAAO,UAM7C,IC1FM4S,GAAU,CACd,CACEtoB,MAAO,YACPuoB,YAAa,cACbC,MAAO,aACPC,UAAU,GAEZ,CACEzoB,MAAO,UACPuoB,YAAa,cACbC,MAAO,gBACPC,UAAU,GAEZ,CACEzoB,MAAO,eACPuoB,YAAa,cACbC,MAAO,wDACPC,UAAU,GAEZ,CACEzoB,MAAO,iBACPuoB,YAAa,cACbC,MACE,8GACFC,UAAU,GAEZ,CACEzoB,MAAO,kBACPuoB,YAAa,cACbC,MAAO,mBACPC,UAAU,GAEZ,CACEzoB,MAAO,oBACPuoB,YAAa,cACbC,MAAO,qBACPC,UAAU,IA8CCxwB,gBA3JA,SAACC,GAAY,OAC1BC,YAA2B,CAEzBC,KAAM,CACJC,OAAQ,OACRC,SAAU,SACVkG,QAAS,OACTiH,cAAe,SACfjN,gBAAiB,WAEnBkwB,KAAM,CACJlqB,QAAS,OACTiH,cAAe,SACfmC,UAAW,kBACX+gB,UAAW,OACX/vB,QAAS,QAEXgwB,SAAU,CACRpwB,gBAAiB,QACjBqwB,UAAW,sBACXhV,aAAc,sBACdrV,QAAS,OACT6G,aAAc,UACduM,YAAa,OACbpK,WAAY,wBACZ,UAAW,CAAEhP,gBAAiB,UAAW0N,OAAQ,YAEnDwgB,OAAQ,CAAC,EACTze,KAAM,CACJ2J,YAAa,EACbrS,MAAO,QACP6F,SAAU,QAEZic,IAAK,CAAE7iB,QAAS,OAAQiH,cAAe,SAAUlH,MAAO,QACxDuqB,SAAU,CACR5jB,WAAY,wBACZE,SAAU,OACVoD,OAAQ,MACRjJ,MAAO,SAETwpB,WAAY,CACVxpB,MAAO,QACPwG,WAAY,OACZqiB,mBAAoB,QAEtBte,OAAQ,CACNzR,OAAQ,OACRkP,SAAU,QACVrC,WAAY,WACZmJ,KAAM,EACN+I,OAAQ,EACR7Y,MAAO,OACP/F,gBAAiB,UACjB+G,MAAO,QACPqS,YAAa,OACb/C,UAAW,SAEb,GAkGW5W,EA1CwC,SAACoB,GACtD,IAAMuP,EAAUC,cAIhB,OAHA1J,qBAAU,WACRgB,SAASH,MAAK,iBAChB,IAEE,mCACE,sBAAK1G,UAAWD,EAAME,QAAQnB,KAAK,UACjC,8BACE,wBAEF,qBAAKkB,UAAWD,EAAME,QAAQmvB,KAAK,SAChCJ,IACCA,GAAQ/lB,KAAI,SAACyJ,EAAIC,GAAK,OACpB,qBAEE3S,UAAWD,EAAME,QAAQqvB,SACzBvpB,QAAS,WACH2M,EAAGyc,SACL5wB,OAAOC,SAAS6X,KAAO3D,EAAGwc,MAE1B5f,EAAQK,KAAK+C,EAAGwc,MAEpB,EAAE,SAEF,mBAAGlvB,UAAWD,EAAME,QAAQuvB,SAAS,SACnC,mBAAGxvB,UAAWD,EAAME,QAAQwvB,WAAYpZ,KAAM3D,EAAGwc,MAAM,SACpDxc,EAAGhM,WAZHiM,EAeD,MAGZ,sBAAK3S,UAAWD,EAAME,QAAQuQ,OAAO,UACnC,gDACA,uEAKV,I,qBCpGe7R,gBAnDA,SAACC,GAAY,OAC1BC,YAA2B,CACzBC,KAAM,CAAC,GACP,GAgDWH,EA1C6B,SAACoB,GAC3C,IAAMuP,EAAUC,cACVmgB,EAAe,IAAIC,gBACvB,kCACA,wCAEIC,EAAYrxB,OAAOsxB,WAAa,IAGtC,OAFAhtB,QAAQC,IAAI8sB,EAAWrxB,OAAOsxB,YAG5B,sBACE1e,MAAO,CACLlM,MAAO,QACPlG,OAAQ,QACRG,gBAAiB,QACjB+O,SAAU,YACV,UAED2hB,GACC,qBACEze,MAAO,CACLlM,MAAO,SACPlG,OAAQ,QACRkP,SAAU,WACVO,IAAK,OACLuG,KAAM,OACN3G,UAAW,yBACX,SAEF,cAAC,KAAK,CAACshB,aAAcA,OAGvBE,GACA,cAAC,GAAa,CACZlV,QAAS,kBAAMpL,EAAQK,KAAK,aAAa,EACzCuW,aAAa,oHAKvB,I,UCsIevnB,I,cAAAA,aA/KA,WAAH,OACVE,YAA2B,CACzBC,KAAM,CACJC,OAAQ,QAEV+wB,KAAM,CACJxwB,QAAS,YACT4F,QAAS,OACTiH,cAAe,SACf/G,WAAY,SACZH,MAAO,OACPwZ,UAAW,UAEbsR,UAAW,CACT5vB,SAAU,QACV8F,MAAO,QACPsP,UAAW,WAEblH,MAAO,CACLpJ,MAAO,OACP9E,SAAU,SAEZ6vB,aAAc,CACZ/qB,MAAO,OACP/F,gBAAiB,QACjBgG,QAAS,OACTC,eAAgB,SAChB7F,QAAS,aAEXoH,MAAO,CACLoF,SAAU,OACVF,WAAY,wBACZ3F,MAAO,QACPhB,MAAO,WAETwV,SAAU,CACR3O,SAAU,OACVW,WAAY,OACZxG,MAAO,QACP3G,QAAS,YACT2F,MAAO,OACP9E,SAAU,SAEZwO,KAAM,CACJ1I,MAAO,QACP6F,SAAU,OACVmkB,OAAQ,OACRhrB,MAAO,SAET,GA8HWtG,EAjHmC,SAACoB,GACjD,IAAMuP,EAAUC,cAEhB,OACE,sBAAKvP,UAAWD,EAAME,QAAQnB,KAAK,UACjC,sBAAKkB,UAAWD,EAAME,QAAQ+vB,aAAa,UACzC,qBAAKhwB,UAAWD,EAAME,QAAQyG,MAAM,uBACpC,cAAC4N,GAAA,EAAU,CACT,aAAW,QACXnD,MAAO,CAAEqM,YAAa,OACtBvX,MAAM,YACNF,QAAS,kBAAMuJ,EAAQK,KAAK,IAAI,EAAC,SAEjC,cAAC,GAAS,CAAC3P,UAAWD,EAAME,QAAQ0O,YAGxC,sBAAK3O,UAAWD,EAAME,QAAQ6vB,KAAK,UACjC,qBAAK9vB,UAAWD,EAAME,QAAQwa,SAAS,8EAGvC,mBAAGza,UAAWD,EAAME,QAAQ8vB,UAAU,gSAMtC,mBAAG/vB,UAAWD,EAAME,QAAQ8vB,UAAU,sQAMtC,mBAAG/vB,UAAWD,EAAME,QAAQ8vB,UAAU,kMAKtC,mBAAG/vB,UAAWD,EAAME,QAAQ8vB,UAAU,mjBAUtC,mBAAG/vB,UAAWD,EAAME,QAAQ8vB,UAAU,kTAOtC,mBAAG/vB,UAAWD,EAAME,QAAQ8vB,UAAU,uRAMtC,oBAAG/vB,UAAWD,EAAME,QAAQ8vB,UAAU,oOAIrB,IACf,mBAAG1Z,KAAK,qCAAoC,+BAAsB,OAEpE,eAAC,YAAQ,CAACrW,UAAWD,EAAME,QAAQoO,MAAM,UACvC,8BACE,qBAAKvH,IAAI,sCAAsCkI,IAAI,OAErD,8BACE,qBACElI,IAAI,+DACJkI,IAAI,OAGR,8BACE,qBACElI,IAAI,+DACJkI,IAAI,OAGR,8BACE,qBACElI,IAAI,+DACJkI,IAAI,OAGR,8BACE,qBACElI,IAAI,+DACJkI,IAAI,OAGR,8BACE,qBACElI,IAAI,+DACJkI,IAAI,OAGR,8BACE,qBACElI,IAAI,+DACJkI,IAAI,eAOlB,KCzJMkhB,GAAM,WACV,IAAMC,EAAiBC,cAuCvB,OApCAhqB,KAAMiqB,aAAaC,QAAQ7yB,IAAG,iDAAC,WAAO6yB,GAAO,oFAC5B,QAD4B,EACvCA,EAAQlV,WAAG,QAAX,EAAaY,SAAS3b,EAAOM,KAAI,mBAC9BwC,IAAkB,CAAD,eAC2B,OAA/CN,QAAQC,IAAI,oCAAmC,SACzCd,IAA+B,OAEvCsuB,EAAQC,QAAuB,cAAC,iBAAatuB,aAAamB,QACxD,gBACC,gCAEEktB,GAAO,2CACf,mDAX6B,IAa9BzqB,qBAAU,WACRgB,SAASH,MAAK,iBAChB,IAsBE,cAAC,IAAQ,CAACuE,MAAOA,GAAM,SACrB,cAAC,EAAK,UACJ,cAACulB,EAAA,EAAe,CAACjzB,KAAMA,EAAK,SAC1B,eAACkzB,EAAA,EAAa,CAAC7xB,MAAOA,GAAM,UAC1B,cAAC8xB,EAAA,EAAW,IACZ,cAAC,IAAM,CAACphB,QAAS6gB,EAAe,SAC9B,eAAC,IAAM,WACL,cAAC,IAAK,CACJ1tB,KAAK,uCACLkuB,UAAWC,KAEb,cAAC,IAAK,CACJnuB,KAAK,iBACLkuB,UAAW,kBAAM,cAAC,GAAmB,GAAG,IAE1C,cAAC,IAAK,CACJluB,KAAK,6BACLkuB,UAAWE,KAEb,cAAC,IAAK,CAACpuB,KAAK,qBAAoB,SAC9B,cAAC,EAAK,UACJ,cAAC,GAAM,QAGX,cAAC,IAAK,CAACA,KAAK,0BAAyB,SACnC,cAAC,EAAK,UACJ,cAAC,GAAW,QAGhB,cAAC,IAAK,CAACA,KAAK,mBAAkB,SAC5B,cAAC,GAAc,MAEjB,cAAC,IAAK,CACJA,KAAK,eACLkuB,UAAWG,WAAWC,GAAgBC,KAExC,cAAC,IAAK,CACJvuB,KAAK,iBACLkuB,UAAW,kBACT,cAAC,EAAK,UACJ,cAACM,GAAc,KACT,IAGZ,cAAC,IAAK,CAACxuB,KAAK,WAAWkuB,UAAWO,KAClC,cAAC,IAAK,CAACzuB,KAAK,0BAA0BkuB,UAAWQ,KACjD,cAAC,IAAK,CAAC1uB,KAAK,aAAakuB,UAAWS,KACpC,cAAC,IAAK,CACJ3uB,KAAK,qBACLkuB,UAAWU,KAEb,cAAC,IAAK,CACJ5uB,KAAK,YACLkuB,UAAW,kBACT,cAAC,EAAK,UACJ,cAACM,GAAc,KACT,IAGZ,cAAC,IAAK,CAACxuB,KAAK,IAAIkuB,UAAWO,kBAQ3C,EACehB,aAEfoB,IAASC,OAAO,cAAC,GAAG,IAAK1qB,SAASsiB,eAAe,S1FT3C,kBAAmBqI,WACrBA,UAAUC,cAAcC,MAAM9rB,MAAK,SAAC+rB,GAClCA,EAAaC,YACf,G","file":"static/js/main.5e988bb1.chunk.js","sourcesContent":["import i18next from \"i18next\"\nimport { initReactI18next } from \"react-i18next\"\nimport LanguageDetector from \"i18next-browser-languagedetector\"\n\nconst locales = [\"nl-NL\", \"en-US\"]\nexport const supportedLanguages = locales\n\nconst localeResources = {\n \"en-US\": {\n common: require(\"./locales/en-US/common.json\"),\n },\n \"nl-NL\": {\n common: require(\"./locales/nl-NL/common.json\"),\n },\n}\n\nconst frozenLocales = Object.freeze(locales)\nexport function localesImmutable() {\n return frozenLocales\n}\n\nexport const getCurrentLng = () =>\n i18n.language || window.localStorage.i18nextLng || fallbackLanguages.default\n\nconst fallbackLanguages = {\n nl: [\"nl-NL\"],\n default: [\"en-US\"],\n}\n\nconst i18n = i18next\ni18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n resources: localeResources,\n fallbackLng: fallbackLanguages.default,\n ns: \"common\",\n defaultNS: \"common\",\n react: { useSuspense: true },\n debug: false,\n cache: { enabled: true },\n })\n\nexport default i18n\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/,\n ),\n)\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void\n onUpdate?: (registration: ServiceWorkerRegistration) => void\n}\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service \" +\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\",\n )\n })\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n if (installingWorker == null) {\n return\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\",\n )\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration)\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\")\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration)\n }\n }\n }\n }\n }\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { \"Service-Worker\": \"script\" },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\")\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config)\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\",\n )\n })\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister()\n })\n }\n}\n","import React from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n Container,\n} from \"@material-ui/core\"\nimport { ReactNode } from \"react\"\n\ntype IProps = {\n children?: ReactNode\n}\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n height: \"100vh\",\n overflow: \"hidden\",\n backgroundSize: \"cover\",\n backgroundColor: \"rgb(30, 30, 30)\",\n backgroundPosition: \"center\",\n backgroundImage: 'url(\"/images/background/frame.png\")',\n },\n container: {\n height: \"100%\",\n padding: 0,\n overflow: \"hidden\",\n background: \"rgba(30, 30, 30)\",\n [theme.breakpoints.up(\"md\")]: {\n borderRight: `${theme.palette.primary.main} 2px solid`,\n borderLeft: `${theme.palette.primary.main} 2px solid`,\n },\n },\n })\n\ntype ClassKey = \"root\" | \"container\"\n\ntype PropsType = IProps & WithStyles\n\nconst Frame: React.FC = (props: PropsType) => {\n return (\n
\n \n {props.children ? props.children : <>}\n \n
\n )\n}\n\nexport default withStyles(styles)(Frame)\n","interface IConfig {\n activeDirectory: {\n appId: string\n redirectUri: string\n }\n tokenStorage: string\n api: string\n}\n\nexport const config: IConfig = {\n activeDirectory: {\n appId: \"556b30fe-1c8e-4b39-937a-f09fa3f00bd8\",\n redirectUri: window.origin,\n },\n tokenStorage: \"agam21\",\n api: \"https://b8ol1nvrk5.execute-api.eu-west-1.amazonaws.com\",\n}\n\nexport default config\n","import * as Msal from \"@azure/msal-browser\"\nimport config from \"./config\"\nimport { isAfter } from \"date-fns\"\nimport Cookies from \"universal-cookie\"\n\nconst cookies = new Cookies()\n\nconst initMsal = () => {\n const msalConfig = {\n auth: {\n clientId: config.activeDirectory.appId,\n authority: \"https://login.microsoftonline.com/arup.onmicrosoft.com\",\n tenant: \"arup.onmicrosoft.com\",\n redirectUri: config.activeDirectory.redirectUri,\n },\n cache: {\n cacheLocation: \"localStorage\",\n storeAuthStateInCookie: false,\n },\n }\n\n const msal = new Msal.PublicClientApplication(msalConfig as any)\n\n return msal\n}\n\nexport const msal = initMsal()\n\nconst loginRequest = {\n scopes: [`api://${config.activeDirectory.appId}/Files.Read`],\n}\n\nexport const loginRedirectAndSetLocal = async () => {\n const tokenResponse = await msal.handleRedirectPromise()\n\n if (!tokenResponse) {\n const accounts = msal.getAllAccounts()\n if (accounts.length === 0) {\n // No user signed in\n msal.loginRedirect(loginRequest)\n } else {\n try {\n await acquireTokenSilentAndSetLocal()\n } catch {\n msal.loginRedirect(loginRequest)\n }\n }\n } else {\n localStorage.setItem(\"accessToken\", tokenResponse.accessToken)\n localStorage.setItem(\"idToken\", tokenResponse.idToken)\n localStorage.setItem(\n \"expiration\",\n (tokenResponse.expiresOn as Date).toString(),\n )\n cookies.set(\"token\", tokenResponse.accessToken, {\n maxAge: 604800,\n path: \"*\",\n sameSite: \"none\",\n secure: true,\n })\n }\n return tokenResponse\n}\n\nexport const getloginPopupResponse = async () =>\n await msal.loginPopup(loginRequest)\n\nexport const getAccount = () => msal.getAllAccounts()[0]\n\nexport const logout = () => {\n localStorage.removeItem(\"accessToken\")\n localStorage.removeItem(\"idToken\")\n localStorage.removeItem(\"expiration\")\n msal.logout()\n}\n\nexport const acquireTokenSilentAndSetLocal = async () => {\n const accountInfo = getAccount()\n if (!accountInfo) {\n console.log(\"No user logged in\")\n return\n }\n const tokenRequest = {\n account: accountInfo,\n scopes: loginRequest.scopes,\n // loginHint: accountInfo?.idTokenClaims?.preffered_username,\n }\n const res = await msal.acquireTokenSilent(tokenRequest)\n localStorage.setItem(\"accessToken\", res.accessToken)\n localStorage.setItem(\"idToken\", res.idToken)\n localStorage.setItem(\"expiration\", (res.expiresOn as Date).toString())\n cookies.set(\"token\", res.accessToken, {\n maxAge: 604800,\n path: \"/\",\n sameSite: \"none\",\n secure: true,\n })\n}\n\nexport const isAuthenticated = () => {\n const accessToken = localStorage.getItem(\"accessToken\")\n const idToken = localStorage.getItem(\"idToken\")\n const expiration = localStorage.getItem(\"expiration\")\n\n const expiryDate = expiration ? new Date(expiration) : new Date(0)\n const now = new Date()\n\n return !!(accessToken && idToken && isAfter(expiryDate, now))\n}\n","import { TypedUseSelectorHook, useDispatch, useSelector } from \"react-redux\"\nimport type { RootState, AppDispatch } from \"./store\"\n\n// Use throughout your app instead of plain `useDispatch` and `useSelector`\nexport const useAppDispatch = () => useDispatch()\nexport const useAppSelector: TypedUseSelectorHook = useSelector\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\"\nimport jwt from \"jsonwebtoken\"\n\ntype idToken = string\n\ninterface IUser {\n idToken: idToken\n email: string\n name: string\n}\ninterface ISlice {\n currentUser?: IUser\n}\n\nconst sliceInitialState: ISlice = {\n currentUser: undefined,\n}\n\nconst customSlice = createSlice({\n name: \"user\",\n initialState: sliceInitialState,\n reducers: {\n login: (state, action: PayloadAction) => {\n const decoded: { [key: string]: string } = jwt.decode(action.payload)\n const user: IUser = {\n idToken: action.payload,\n email: decoded?.email,\n name: decoded?.name,\n }\n return {\n ...state,\n currentUser: user,\n }\n },\n },\n})\n\nexport const userActions = customSlice.actions\nexport default customSlice.reducer\n","import { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\nimport Button from \"@material-ui/core/Button\"\nimport React, { useEffect, useState } from \"react\"\nimport { isAuthenticated, loginRedirectAndSetLocal } from \"../../auth\"\nimport { useAppDispatch } from \"../../../redux/hooks\"\nimport { userActions } from \"../../../redux/user/UserSlice\"\ninterface IProps {}\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n width: \"100vw\",\n height: \"100vh\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n })\n\ntype ClassKey = \"root\"\n\ntype PropsType = IProps & WithStyles\n\nconst Login: React.FC = (props) => {\n const [isAuthorizing, setIsAuthorizing] = useState(false)\n const [isAuth, setIsAuth] = useState(false)\n const dispatch = useAppDispatch()\n\n const authorize = () => {\n setIsAuthorizing(true)\n loginRedirectAndSetLocal().then(() => {\n const idToken = localStorage.getItem(\"idToken\")\n if (idToken) {\n dispatch(userActions.login(idToken))\n }\n setIsAuth(isAuthenticated())\n setIsAuthorizing(false)\n })\n }\n\n useEffect(authorize, [dispatch])\n\n if (isAuth) {\n return <>{props.children}\n } else if (isAuthorizing) {\n return
Please, wait while we log you in...
\n } else {\n return (\n
\n \n
\n )\n }\n}\n\nexport default withStyles(styles)(Login)\n","import axios from \"axios\"\nimport config from \"../config\"\nimport { Progress } from \"../entities/Progress\"\n\nexport const updateProgress = (progress: Progress): Promise => {\n return axios\n .put(`${config.api}/progress/`, progress)\n .then((response) => response.data)\n}\n","import { IVideo } from \"../interfaces\"\n\nconst trailer: IVideo = {\n id: \"trailer\",\n title: \"Welcome to the AGAM 21 Experiential Portal\",\n author: \"Developed in partnership with Arup University\",\n thumbnail:\n \"https://\" +\n document.location.hostname +\n \"/ff9e2a43-5c0b-43ac-b952-6e02e529b5b5/thumbnails/introduction_thumb.0000010.jpg\",\n src:\n \"https://\" +\n document.location.hostname +\n \"/out/v1/36a5335070e74e6aa2197f84dd366d0f/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n progress: 0,\n}\n\nexport default trailer\n","export function shuffle(a: any[]) {\n for (let i = a.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n var x = a[i]\n a[i] = a[j]\n a[j] = x\n }\n return a\n}\n","import { IAmbient } from \"../interfaces\"\n\nconst ambients: IAmbient[] = [\n {\n id: \"1\",\n backgroundSrc: \"1.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient1.m3u8\",\n volume: 1,\n },\n {\n id: \"2\",\n backgroundSrc: \"2.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient2.m3u8\",\n volume: 1,\n },\n {\n id: \"3\",\n backgroundSrc: \"3.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient3.m3u8\",\n volume: 1,\n },\n {\n id: \"4\",\n backgroundSrc: \"4.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient4.m3u8\",\n volume: 1,\n },\n {\n id: \"5\",\n backgroundSrc: \"5.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient5.m3u8\",\n volume: 1,\n },\n {\n id: \"6\",\n backgroundSrc: \"6.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient6.m3u8\",\n volume: 1,\n },\n {\n id: \"7\",\n backgroundSrc: \"7.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient7.m3u8\",\n volume: 1,\n },\n {\n id: \"8\",\n backgroundSrc: \"8.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient8.m3u8\",\n volume: 1,\n },\n {\n id: \"9\",\n backgroundSrc: \"9.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient9.m3u8\",\n volume: 1,\n },\n {\n id: \"10\",\n backgroundSrc: \"10.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient10.m3u8\",\n volume: 1,\n },\n {\n id: \"11\",\n backgroundSrc: \"11.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient11.m3u8\",\n volume: 1,\n },\n {\n id: \"12\",\n backgroundSrc: \"12.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient12.m3u8\",\n volume: 1,\n },\n {\n id: \"13\",\n backgroundSrc: \"13.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient13.m3u8\",\n volume: 1,\n },\n {\n id: \"14\",\n backgroundSrc: \"14.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient14.m3u8\",\n volume: 1,\n },\n {\n id: \"15\",\n backgroundSrc: \"15.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient15.m3u8\",\n volume: 1,\n },\n {\n id: \"16\",\n backgroundSrc: \"16.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient16.m3u8\",\n volume: 1,\n },\n {\n id: \"17\",\n backgroundSrc: \"17.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient17.m3u8\",\n volume: 1,\n },\n {\n id: \"18\",\n backgroundSrc: \"18.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient18.m3u8\",\n volume: 1,\n },\n {\n id: \"19\",\n backgroundSrc: \"19.jpg\",\n audioSrc:\n \"https://\" + document.location.hostname + \"/hls/ambient/ambient19.m3u8\",\n volume: 1,\n },\n]\n\nexport default ambients\n","import { IInterview } from \"../interfaces\"\nimport { shuffle } from \"./shuffle\"\nimport ambients from \"./ambients\"\n\nconst shuffledAmbients = shuffle([...ambients])\nconst placeholder =\n \"https://\" +\n document.location.hostname +\n \"/out/v1/f7e1b2d675d745078682311477cb6647/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\"\n\nconst interviews: IInterview[] = [\n {\n id: \"t1\",\n title: \"They started with a totally different scheme\",\n author: \"Naeem Hussain with David Farnsworth\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t1.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 29, 9, 30, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/1956cf41f5394e71ae83be1dde30e254/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[0 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t2\",\n title: \"And my uncle’s name played\",\n author: \"Malcolm Smith with Xena Petkanas, Helen Searle\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t2.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 29, 9, 30, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/a9b5b8317e4741fcbea75c2ecfc23c3a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[1 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t3\",\n title: \"Influence went both ways\",\n author: \"Rudi Scheuermann with Raphael Sperry\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t3.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 30, 11, 35, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/338e888e7af6411ebfb224c37a6e02dd/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[2 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t4\",\n title: \"A city is more than a place in space, it is a drama in time\",\n author: \"Malcolm Smith with Xavier Nuttall\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t4.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 29, 9, 30, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/083949eaba2146d5bee9705e5594d515/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[3 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t5\",\n title: \"It did open up doors\",\n author: \"Rudi Scheuermann with Chris Field\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t5.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 30, 11, 35, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/75784ee3b0b54abe992b925c19391bc7/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[4 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t6\",\n title: \"A gap in the government’s agenda\",\n author: \"Vincent Cheng with Michael Chadney\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t6.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 29, 9, 30, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/1b57bd5fd6fb406fa86fad6db3f23b6c/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[5 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t7\",\n title: \"A more transparent and participatory approach\",\n author: \"Vincent Cheng with Lily Yu\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t7.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 30, 11, 35, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/ba6a368a0e45484986c3cb2f00d3a085/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[6 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t8\",\n title: \"Innovation and creative thinking\",\n author: \"Vincent Cheng with Jacky Chan\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t8.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 29, 9, 30, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/f748733b5fbe4c2f86b017689f06405c/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[7 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t9\",\n title: \"It can be done, even if we have never done it before\",\n author: \"Malcolm Smith with Mathew Vola\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t9.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 29, 9, 30, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/869236a8cc5c4e83a500e80f85ce3791/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[8 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t10\",\n title: \"It provoked an emotional response\",\n author:\n \"Alison Norrish with Léan Doody, Orla O'Halloran, Alannah McCartney, Rebecca Chau\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t10.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 30, 11, 35, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/2a85b789422943d0966c8ac25afcd51a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[9 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t11\",\n title: \"That is pressure\",\n author: \"Alison Norrish with Javier Galán, Ana Navas, Alejandro García\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t11.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 29, 9, 30, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/6916901fa5ac4eb9869d0254eafefb18/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[10 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t12\",\n title: \"Playing Jazz\",\n author: \"Alison Norrish with Lauren Doughty, Kim Quazi, Abigaile Bromfield\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t12.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 29, 9, 30, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/7ff044b456904f77bd9bfe67f6a0dd7d/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[11 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t13\",\n title: \"It shows global expertise and global reach\",\n author: \"Alison Norrish with Susan Lamont\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t13.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 29, 9, 30, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/81dd3442fec54bb5ab59cf084655f3d1/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[12 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t14\",\n title: \"It was very positive and not expected\",\n author: \"Naeem Hussain with Hanna Grimsdale\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t14.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 30, 11, 35, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/76e4ac2340b44c098ac49c9ec58b7ebe/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[13 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t15\",\n title: \"Where is the glamour in a tunnel?\",\n author: \"Naeem Hussain with Yung Loo\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t15.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 29, 9, 30, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/e5d522f3546842cbb12a8ebdc62c9e1d/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[14 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t16\",\n title: \"Innovation from a Hackathon\",\n author: \"Graham Dodd with Grace Campbell\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t16.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 29, 9, 30, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/066dfba4d19648cda5a936adf1617e83/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[15 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t17\",\n title: \"They were about to scrap the whole project\",\n author: \"Jo da Silva with Will Whitby, Hugh Pidduck\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t17.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 30, 11, 35, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/923a0d1c5f2c4bff95900c44d65396ea/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[16 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t18\",\n title: \"Add value through data\",\n author: \"Rudi Scheuermann with Lucy Anderson, Catrina Cassie, Tom Somers\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t18.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 29, 9, 30, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8eeefe25accd401397b2c5a19ab4e693/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[17 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n {\n id: \"t19\",\n title: \"You don't have to tie yourself to the computer\",\n author: \"Alison Norrish with Melissa Mak, Rachel Ganz, Giulio Antonutto\",\n src: \"https://\" + document.location.hostname + \"/hls/tracks/t19.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[18 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n },\n]\n\nexport default interviews\n","import { IVideo } from \"../interfaces\"\n\nconst videos: IVideo[] = [\n {\n id: \"v1\",\n title: \"Episode 1\",\n author: \"Getting Started\",\n progress: 0,\n src:\n \"https://\" +\n document.location.hostname +\n \"/out/v1/7ca74bbf02b246ef93b52e8c49ed0528/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n thumbnail:\n \"https://\" +\n document.location.hostname +\n \"/ce26490d-731d-415f-ad98-4798614fb4de/thumbnails/video%201_thumb.0000001.jpg\",\n },\n {\n id: \"v2\",\n title: \"Episode 2\",\n author: \"Importance of Context\",\n progress: 0,\n src:\n \"https://\" +\n document.location.hostname +\n \"/out/v1/f709ade5733649d98ce3dcce9c654505/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n thumbnail:\n \"https://\" +\n document.location.hostname +\n \"/e9966785-7338-497c-b961-bbb8659e90b0/thumbnails/video%202_thumb.0000001.jpg\",\n },\n {\n id: \"v3\",\n title: \"Episode 3\",\n author: \"Increasing Pressure\",\n progress: 0,\n src:\n \"https://\" +\n document.location.hostname +\n \"/out/v1/c491b8502b3b497ea4e6b1bf89abcc55/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n thumbnail:\n \"https://\" +\n document.location.hostname +\n \"/acfd9903-daf9-4dcd-8b42-672f3d7e08b2/thumbnails/video%203_thumb.0000001.jpg\",\n },\n {\n id: \"v4\",\n title: \"Episode 4\",\n author: \"Mis-selling\",\n progress: 0,\n src:\n \"https://\" +\n document.location.hostname +\n \"/out/v1/6b5b64893fd34360a7a09b77a62cae21/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n thumbnail:\n \"https://\" +\n document.location.hostname +\n \"/7296c8c4-e795-4125-8fbe-7ce5a182e86f/thumbnails/video%204_thumb.0000001.jpg\",\n },\n {\n id: \"v5\",\n title: \"Episode 5\",\n author: \"The Consequences\",\n progress: 0,\n src:\n \"https://\" +\n document.location.hostname +\n \"/out/v1/f876c159f97940b9a60eed97978a1e30/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n thumbnail:\n \"https://\" +\n document.location.hostname +\n \"/45c1bbeb-6685-41a8-b7a6-435ecc16aa2e/thumbnails/video%205_thumb.0000001.jpg\",\n },\n {\n id: \"v6\",\n title: \"Episode 6\",\n author: \"Engineered Addiction\",\n progress: 0,\n src:\n \"https://\" +\n document.location.hostname +\n \"/out/v1/710d1ab3e3fa4983b3bbc9abdda6b4f9/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n thumbnail:\n \"https://\" +\n document.location.hostname +\n \"/b23f8be0-058a-42bb-9e96-ecaa4b6e9a13/thumbnails/video 6_thumb.0000001.jpg\",\n },\n]\n\nexport default videos\n","import { IBook, IVideo } from \"../interfaces\"\nimport { shuffle } from \"./shuffle\"\n\nimport ambients from \"./ambients\"\n\nconst sanitizedAmbients = [\n ambients[0],\n ambients[1],\n ambients[2],\n ambients[3],\n ambients[4],\n ambients[6],\n ambients[7],\n ambients[8],\n ambients[13],\n ambients[15],\n ambients[16],\n ambients[17],\n]\nconst shuffledAmbients = shuffle([...sanitizedAmbients])\nconst placeholder =\n \"https://\" +\n document.location.hostname +\n \"/out/v1/f7e1b2d675d745078682311477cb6647/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\"\n\nexport const bookClubTrailer: IVideo = {\n id: \"trailer\",\n title: \"Welcome to the Book Club\",\n author: \"Start your journey here\",\n thumbnail:\n \"https://\" +\n document.location.hostname +\n \"/8c2e0e1a-7fdf-406d-a2ed-cbeab630a866/thumbnails/bookclub_intro_video-3_thumb.0000000.jpg\",\n src:\n \"https://\" +\n document.location.hostname +\n \"/out/v1/66076bf67b2f4a0e8cb29120c2715ad5/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n progress: 0,\n}\n\nexport const books: IBook[] = [\n {\n id: \"b1\",\n title: \"Design As Art\",\n author: \"Bruno Munari\",\n src: \"https://\" + document.location.hostname + \"/audio/F1.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[0 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Design As Art&subject=Book request: Design As Art by Bruno Munari\",\n },\n {\n id: \"b2\",\n title: \"Wabi-Sabi: art of imperfections\",\n author: \"Osami Nishimura\",\n src: \"https://\" + document.location.hostname + \"/audio/F2.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[1 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Wabi-Sabi: art of imperfections&subject=Book request: Wabi-Sabi: art of imperfections by Osami Nishimura\",\n },\n {\n id: \"b3\",\n title: \"Theory and Design: the First Machine Age\",\n author: \"Reyner Banham\",\n src: \"https://\" + document.location.hostname + \"/audio/F3.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[2 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Theory and Design: the First Machine Age&subject=Book request: Theory and Design: the First Machine Age by Reyner Banham\",\n },\n {\n id: \"b4\",\n title: \"Towns and Buildings\",\n author: \"Steen Eiler Rasmussen\",\n src: \"https://\" + document.location.hostname + \"/audio/F4.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[3 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Towns and Buildings&subject=Book request: Towns and Buildings by Steen Eiler Rasmussen\",\n },\n {\n id: \"b5\",\n title: \"Programs and Manifestoes on 20th-Century Architecture\",\n author: \"Ulrich Conrad\",\n src: \"https://\" + document.location.hostname + \"/audio/F5.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[4 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Programs and Manifestoes on 20th-Century Architecture&subject=Book request: Programs and Manifestoes on 20th-Century Architecture by Ulrich Conrad\",\n },\n {\n id: \"b6\",\n title: \"The Three Box Solution\",\n author: \"Vijay Govindarajan\",\n src: \"https://\" + document.location.hostname + \"/audio/F6.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[5 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=The Three Box Solution&subject=Book request: The Three Box Solution by Vijay Govindarajan\",\n },\n {\n id: \"b7\",\n title: \"Design is storytelling\",\n author: \"Ellen Lupton\",\n src: \"https://\" + document.location.hostname + \"/audio/F7.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[6 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Design is storytelling&subject=Book request: Design is storytelling by Ellen Lupton\",\n },\n {\n id: \"b8\",\n title: \"Habit-Forming Products\",\n author: \"Nir Eyal\",\n src: \"https://\" + document.location.hostname + \"/audio/F8.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[7 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Habit-Forming Products&subject=Book request: Habit-Forming Products by Nir Eyal\",\n },\n {\n id: \"b9\",\n title: \"The Lean Startup\",\n author: \"Eric Ries\",\n src: \"https://\" + document.location.hostname + \"/audio/F9.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[8 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=The Lean Startup&subject=Book request: The Lean Startup by Eric Ries\",\n },\n {\n id: \"b10\",\n title: \"Zero to One: Notes on Startups\",\n author: \"Peter Thiel\",\n src: \"https://\" + document.location.hostname + \"/audio/F10.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[9 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Zero to One: Notes on Startups&subject=Book request: Zero to One: Notes on Startups by Peter Thiel\",\n },\n {\n id: \"b11\",\n title: \"The innovator’s dilemma\",\n author: \"Clayton Christensen\",\n src: \"https://\" + document.location.hostname + \"/audio/F11.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[10 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=The innovator’s dilemma&subject=Book request: The innovator’s dilemma by Clayton Christensen\",\n },\n {\n id: \"b12\",\n title: \"Range\",\n author: \"David Epstein\",\n src: \"https://\" + document.location.hostname + \"/audio/F12.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[11 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Range&subject=Book request: Range by David Epstein\",\n },\n {\n id: \"b13\",\n title: \"The Other Side of Innovation\",\n author: \"Vijay Govindarajan, Chris Trimble\",\n src: \"https://\" + document.location.hostname + \"/audio/F13.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[12 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=The Other Side of Innovation&subject=Book request: The Other Side of Innovation by Vijay Govindarajan, Chris Trimble\",\n },\n {\n id: \"b14\",\n title: \"Data Feminism\",\n author: \"Catherine D`ignazio, Lauren F. Klein\",\n src: \"https://\" + document.location.hostname + \"/audio/F14.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[13 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Data Feminism&subject=Book request: Data Feminism by Catherine D`ignazio, Lauren F. Klein\",\n },\n {\n id: \"b15\",\n title: \"The Alphabet and the Algorithm\",\n author: \"Mario Carpo\",\n src: \"https://\" + document.location.hostname + \"/audio/F15.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[14 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=The Alphabet and the Algorithm&subject=Book request: The Alphabet and the Algorithm by Mario Carpo\",\n },\n {\n id: \"b16\",\n title: \"Competing in the Age of AI: Strategy and Leadership\",\n author: \"Marco Iansiti and Karim R. Lakhani\",\n src: \"https://\" + document.location.hostname + \"/audio/F16.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[15 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Competing in the Age of AI: Strategy and Leadership&subject=Book request: Competing in the Age of AI: Strategy and Leadership by Marco Iansiti and Karim R. Lakhani\",\n },\n {\n id: \"b17\",\n title: \"Do Androids Dream of Electric Sheep?\",\n author: \"Philip K. Dick\",\n src: \"https://\" + document.location.hostname + \"/audio/F17.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[16 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Do Androids Dream of Electric Sheep?&subject=Book request: Do Androids Dream of Electric Sheep? by Philip K. Dick\",\n },\n {\n id: \"b18\",\n title: \"The Mind's I\",\n author: \"Daniel Dennett and Douglas Hofstadter\",\n src: \"https://\" + document.location.hostname + \"/audio/F18.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[17 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=The Mind's I&subject=Book request: The Mind's I by Daniel Dennett and Douglas Hofstadter\",\n },\n {\n id: \"b19\",\n title: \"The Power of Experiments\",\n author: \"Michael Luca and Max H. Bazerman\",\n src: \"https://\" + document.location.hostname + \"/audio/F19.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[18 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=The Power of Experiments&subject=Book request: The Power of Experiments by Michael Luca and Max H. Bazerman\",\n },\n {\n id: \"b20\",\n title: \"Thinking, Fast and Slow\",\n author: \"Daniel Kahneman\",\n src: \"https://\" + document.location.hostname + \"/audio/F20.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[19 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Thinking, Fast and Slow&subject=Book request: Thinking, Fast and Slow by Daniel Kahneman\",\n },\n {\n id: \"b21\",\n title: \"Innovation Lab Excellence\",\n author: \"Richard Turrin\",\n src: \"https://\" + document.location.hostname + \"/audio/F21.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[20 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Innovation Lab Excellence&subject=Book request: Innovation Lab Excellence by Richard Turrin\",\n },\n {\n id: \"b22\",\n title: \"Reality is Broken: Why Games Make Us Better\",\n author: \"Jane McGonigal\",\n src: \"https://\" + document.location.hostname + \"/audio/F22.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[21 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Reality is Broken: Why Games Make Us Better&subject=Book request: Reality is Broken: Why Games Make Us Better by Jane McGonigal\",\n },\n {\n id: \"b23\",\n title: \"Artificial Life\",\n author: \"Steven Levy\",\n src: \"https://\" + document.location.hostname + \"/audio/F23.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[22 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Artificial Life&subject=Book request: Artificial Life by Steven Levy\",\n },\n {\n id: \"b24\",\n title: \"Chaos: Making a New Science\",\n author: \"James Gleick\",\n src: \"https://\" + document.location.hostname + \"/audio/F24.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[23 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=Chaos: Making a New Science&subject=Book request: Chaos: Making a New Science by James Gleick\",\n },\n {\n id: \"b25\",\n title: \"The Signal and the Noise\",\n author: \"Nate Silver\",\n src: \"https://\" + document.location.hostname + \"/audio/F25.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[24 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=The Signal and the Noise&subject=Book request: The Signal and the Noise by Nate Silver\",\n },\n {\n id: \"b26\",\n title: \"The Quark and The Jaguar\",\n author: \"Murray Gell-Mann\",\n src: \"https://\" + document.location.hostname + \"/audio/F26.m3u8\",\n thumbnailSrc:\n \"https://\" +\n document.location.hostname +\n \"/13595bf8-e4ee-493e-bd2e-2b873ec60706/thumbnails/video_thumb.0000002.jpg\",\n burstSrc:\n new Date() < new Date(Date.UTC(2021, 8, 22, 15, 0, 0))\n ? placeholder\n : \"https://\" +\n document.location.hostname +\n \"/out/v1/8f2b22e7d5f1451fb6e49e9f3fc1743a/edc109de588040c897f881ef0f45784b/a3e52c84444e4aa6a2101a1114f86873/index.m3u8\",\n ambient: shuffledAmbients[25 % shuffledAmbients.length],\n progress: 0,\n volume: 1,\n libraryPath:\n \"mailto:arup.library@arup.com?subject=The Quark and The Jaguar&subject=Book request: The Quark and The Jaguar by Murray Gell-Mann\",\n },\n]\n","import { createSlice, createAsyncThunk } from \"@reduxjs/toolkit\"\n\n// Usecases\nimport { getAllProgress } from \"../../common/usecases/GetAllProgress\"\nimport { updateProgress } from \"../../common/usecases/UpdateProgress\"\n\n// Interfaces\nimport { Progress } from \"../../common/entities/Progress\"\nimport { ILibrarySlice } from \"../interfaces\"\nimport { RootState } from \"../store\"\n\n// Data\nimport trailer from \"../data/trailer\"\nimport interviews from \"../data/interviews\"\nimport videos from \"../data/videos\"\nimport { bookClubTrailer, books } from \"../data/books\"\n\nconst sliceInitialState: ILibrarySlice = {\n interviews,\n books,\n videos,\n trailer,\n bookClubTrailer,\n}\n\nexport const refreshProgress = createAsyncThunk(\n \"library/refreshProgress\",\n async () => {\n return await getAllProgress()\n },\n)\n\nexport const progressVideo = createAsyncThunk(\n \"library/progressVideo\",\n async (progress: Progress) => {\n return await updateProgress(progress)\n },\n)\n\nexport const progressInterview = createAsyncThunk(\n \"library/progressInterview\",\n async (progress: Progress) => {\n return await updateProgress(progress)\n },\n)\n\nexport const progressAllVideos = createAsyncThunk<\n Progress[],\n number,\n { state: RootState }\n>(\"library/progressAllVideos\", async (progress, thunkApi) => {\n const state = thunkApi.getState()\n const promises = state.libraryState.videos.map((v) =>\n updateProgress({ mediaId: v.id, progress: progress }),\n )\n return await Promise.all(promises)\n})\n\nconst customSlice = createSlice({\n name: \"library\",\n initialState: sliceInitialState,\n reducers: {\n // selectInterview(state, action: PayloadAction<{ id: string }>) {\n // let interview = state.interviews.find((t) => t.id === action.payload.id)\n // if (interview && interview.order === undefined) {\n // interview.order = state.interviews.filter(\n // (t) => t.order !== undefined,\n // ).length\n // }\n // return state\n // },\n },\n extraReducers: (builder) => {\n builder.addCase(refreshProgress.fulfilled, (state, action) => {\n state.interviews = state.interviews.map((t) => {\n const p = action.payload.find((p) => p.mediaId === t.id)\n return {\n ...t,\n progress: p?.progress || 0,\n order: p?.order,\n }\n })\n state.books = state.books.map((book) => {\n const p = action.payload.find((p) => p.mediaId === book.id)\n return {\n ...book,\n progress: p?.progress || 0,\n order: p?.order,\n }\n })\n state.videos = state.videos.map((v) => {\n const p = action.payload.find((p) => p.mediaId === v.id)\n return {\n ...v,\n progress: p?.progress || 0,\n order: p?.order,\n }\n })\n return state\n })\n builder.addCase(progressVideo.fulfilled, (state, action) => {\n let video = state.videos.find((b) => b.id === action.payload.mediaId)\n if (video) {\n video.progress = action.payload.progress\n }\n return state\n })\n builder.addCase(progressInterview.fulfilled, (state, action) => {\n let interview = state.interviews.find(\n (t) => t.id === action.payload.mediaId,\n )\n if (interview) {\n interview.progress = action.payload.progress\n if (action.payload.order !== undefined) {\n interview.order = action.payload.order\n }\n }\n return state\n })\n builder.addCase(progressAllVideos.fulfilled, (state, action) => {\n const progress = action.payload\n state.videos = state.videos.map((v) => {\n const p = progress.find((pi) => (pi.mediaId = v.id))!\n return { ...v, progress: p.progress }\n })\n })\n },\n})\n\nexport const libraryActions = customSlice.actions\nexport default customSlice.reducer\n","import axios from \"axios\"\nimport config from \"../config\"\nimport { Progress } from \"../entities/Progress\"\nimport QueryOutput from \"../entities/QueryOutput\"\n\nexport const getAllProgress = (): Promise => {\n return axios\n .get>(`${config.api}/progress/`)\n .then((response) => response.data.Items || [])\n}\n","import { createAsyncThunk, createSlice, PayloadAction } from \"@reduxjs/toolkit\"\nimport { updateProgress } from \"../../common/usecases/UpdateProgress\"\nimport { getGameProgress } from \"../../games/usecases/getGameProgress\"\nimport { GameOutcomeIdType } from \"../../games/hooks/useOutcome\"\nimport { IGamesSlice } from \"../interfaces\"\n\nexport type gameKey = \"tetris\" | \"slotMachine\"\n\nconst sliceInitialState: IGamesSlice = {\n tetris: {\n outcomeId: undefined,\n target: 100,\n best: 0,\n },\n slotMachine: {\n outcomeId: undefined,\n target: 3001,\n credits: 3000,\n },\n}\n\nexport const refreshGameProgress = createAsyncThunk(\n \"games/refreshProgress\",\n async (game: gameKey) => {\n return await getGameProgress(game)\n },\n)\n\nexport const progressGame = createAsyncThunk(\n \"games/progress\",\n async (payload: { game: gameKey; score: number }) => {\n return await updateProgress({\n mediaId: payload.game,\n progress: payload.score,\n })\n },\n)\n\nconst customSlice = createSlice({\n name: \"games\",\n initialState: sliceInitialState,\n reducers: {\n setTetrisChallenge(\n state,\n action: PayloadAction<{\n outcomeId: GameOutcomeIdType | undefined\n target: number\n }>,\n ) {\n console.log(action.payload)\n state.tetris = { ...state.tetris, ...action.payload }\n return state\n },\n setSlotMachineChallenge(\n state,\n action: PayloadAction<{\n outcomeId: GameOutcomeIdType | undefined\n target: number\n }>,\n ) {\n state.slotMachine = { ...state.slotMachine, ...action.payload }\n return state\n },\n },\n extraReducers: (builder) => {\n builder.addCase(refreshGameProgress.fulfilled, (state, action) => {\n if (action.payload.mediaId === \"tetris\")\n state.tetris.best = action.payload.progress\n if (action.payload.mediaId === \"slotMachine\")\n state.slotMachine.credits = action.payload.progress\n return state\n })\n builder.addCase(progressGame.fulfilled, (state, action) => {\n if (action.payload.mediaId === \"tetris\")\n state.tetris.best = action.payload.progress\n else if (action.payload.mediaId === \"slotMachine\")\n state.slotMachine.credits = action.payload.progress\n return state\n })\n },\n})\n\nexport const gameActions = customSlice.actions\nexport default customSlice.reducer\n","import axios from \"axios\"\nimport config from \"../../common/config\"\nimport { Progress } from \"../../common/entities/Progress\"\n\nexport const getGameProgress = (gameId: string): Promise => {\n return axios\n .get(`${config.api}/progress/${gameId}/`)\n .then((response) => response.data)\n}\n","import { configureStore } from \"@reduxjs/toolkit\"\nimport UserSlice from \"./user/UserSlice\"\nimport LibrarySlice from \"./library/LibrarySlice\"\nimport GamesSlice from \"./games/GameSlice\"\n\nconst store = configureStore({\n reducer: {\n userState: UserSlice,\n libraryState: LibrarySlice,\n gamesState: GamesSlice,\n },\n})\n\n// Infer the `RootState` and `AppDispatch` types from the store itself\nexport type RootState = ReturnType\n// Inferred type: {user: UserState}\nexport type AppDispatch = typeof store.dispatch\n\nexport default store\n","import { createTheme } from \"@material-ui/core/styles\"\n\nexport const theme = createTheme({\n palette: {\n primary: {\n main: \"#e61e28\",\n },\n secondary: {\n main: \"#2e2e2e\",\n },\n },\n typography: {\n fontFamily: \"Roboto\",\n body2: {\n color: \"#e61e28\",\n fontSize: \"0.9375rem\",\n marginBottom: \"1rem\",\n },\n },\n overrides: {\n MuiCssBaseline: {\n \"@global\": {\n \"html, body\": {\n height: \"100%\",\n width: \"100%\",\n display: \"flex\",\n flex: 1,\n },\n \"#root\": {\n display: \"flex\",\n flexDirection: \"column\",\n flex: 1,\n width: \"100%\",\n },\n \"*\": {\n // FIREFOX ONLY\n scrollbarColor: `#e61e28 #bbb`,\n scrollbarWidth: \"thin\",\n // WEBKIT ONLY\n \"& ::-webkit-scrollbar\": {\n width: 5,\n height: 5,\n },\n \"& ::-webkit-scrollbar-track\": {\n backgroundColor: \"#bbb\",\n borderRadius: 10,\n },\n \"& ::-webkit-scrollbar-thumb\": {\n backgroundColor: \"#e61e28\",\n borderRadius: 10,\n },\n },\n },\n },\n MuiButton: {\n outlined: {\n fontSize: \"1rem\",\n padding: \"0.5rem 1.5rem\",\n borderRadius: \"0px\",\n fontWeight: \"bold\",\n fontFamily: \"Cooper Black, Tourney\",\n textTransform: \"none\",\n textDecoration: \"none\",\n cursor: \"pointer\",\n boxShadow: \"none\",\n },\n outlinedPrimary: {\n fontFamily: \"Tourney\",\n backgroundColor: \"#111\",\n border: \"2px solid #e61e28\",\n color: \"#e61e28\",\n \"@media (hover: hover)\": {\n \"&:hover,&:focus\": {\n color: \"#ffff\",\n backgroundColor: \"#e61e28\",\n border: \"2px solid #e61e28\",\n },\n },\n \"&.Mui-disabled\": {\n border: \"2px solid #e61e28\",\n color: \"#e61e28\",\n },\n },\n outlinedSecondary: {\n backgroundColor: \"white\",\n border: \"2px solid #111\",\n color: \"#111\",\n \"@media (hover: hover)\": {\n \"&:hover\": {\n color: \"#ddd\",\n backgroundColor: \"#111\",\n border: \"2px solid #111\",\n },\n },\n },\n sizeLarge: {\n padding: \"0.8rem 2rem\",\n fontSize: \"2rem\",\n },\n },\n MuiIconButton: {\n colorPrimary: {\n \"@media (hover: hover)\": {\n \"&:hover\": {\n background: \"rgba(255, 255, 255, 0.04)\",\n },\n },\n },\n },\n },\n})\n","import Cookies from \"universal-cookie\"\n\nconst cookies = new Cookies()\n\nexport const ALLOWANCE = 20 * 60 // seconds\n\nexport const setEnd = (end?: number) => {\n if (end === undefined) {\n cookies.set(\"end\", new Date().getTime() + ALLOWANCE * 1e3, { path: \"/\" })\n } else {\n cookies.set(\"end\", end, { path: \"/\" })\n }\n}\n\nexport const clearEnd = () => cookies.remove(\"end\", { path: \"/\" })\n\nexport const getEnd = () => cookies.get(\"end\")\n","import { SvgIcon } from \"@material-ui/core\"\nimport React from \"react\"\n\nfunction LockIcon(props) {\n return (\n \n \n \n )\n}\n\nexport default LockIcon\n","import { SvgIcon } from \"@material-ui/core\"\nimport React from \"react\"\n\nfunction TickIcon(props) {\n return (\n \n \n \n )\n}\n\nexport default TickIcon\n","import { SvgIcon } from \"@material-ui/core\"\nimport React from \"react\"\n\nfunction PlayIcon(props) {\n return (\n \n \n \n )\n}\n\nexport default PlayIcon\n","import React from \"react\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\n\nimport { Status } from \"../../entities/Status\"\nimport LockIcon from \"../../../common/components/icons/LockIcon\"\nimport TickIcon from \"../../../common/components/icons/TickIcon\"\nimport PlayRoundIcon from \"../../../common/components/icons/PlayRoundIcon\"\nimport clsx from \"clsx\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n thumbnail: {\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n transition: \"all 0.3s\",\n \"&:hover\": {\n shadow: \"lg\",\n cursor: \"pointer\",\n transform: \"scale(1.05)\",\n },\n },\n image: {\n position: \"relative\",\n maxHeight: \"100%\",\n width: \"100%\",\n },\n numb: {\n position: \"absolute\",\n fontFamily: \"Tourney\",\n color: theme.palette.primary.main,\n fontSize: \"2.5rem\",\n fontWeight: \"bold\",\n top: \"-0.5rem\",\n right: \"1rem\",\n zIndex: 1,\n },\n icon: {\n color: theme.palette.primary.main,\n position: \"absolute\",\n fontSize: \"4rem\",\n },\n disabled: {\n \"&> *\": {\n cursor: \"default\",\n },\n \"&:hover\": {\n cursor: \"default\",\n transform: \"none\",\n shadow: \"none\",\n },\n },\n })\n\ntype ClassKey = \"thumbnail\" | \"numb\" | \"image\" | \"icon\" | \"disabled\"\n\ntype IProps = {\n id: string\n status: Status\n image: string\n}\ntype PropsType = IProps & WithStyles\n\nconst VideoCard: React.FC = (props: PropsType) => {\n const { id, status, classes, image } = props\n return (\n <>\n \n
{id.substring(1)}
\n\n {id}\n {status === \"current\" ? (\n \n ) : status === \"watched\" ? (\n \n ) : (\n \n )}\n \n \n )\n}\n\nexport default withStyles(styles)(VideoCard)\n","import React, { useCallback } from \"react\"\nimport {\n Box,\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n} from \"@material-ui/core\"\nimport { useHistory } from \"react-router\"\n\nimport { Status } from \"../../entities/Status\"\nimport VideoThumbnail from \"./VideoThumbnail\"\nimport { IVideo } from \"../../../redux/interfaces\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n margin: 0,\n cursor: \"default\",\n },\n thumbnail: {\n width: \"100%\",\n backgroundColor: theme.palette.secondary.dark,\n },\n title: { color: theme.palette.primary.main, margin: \"0\" },\n speaker: { color: \"#aaa\", margin: \"0\" },\n })\n\ntype ClassKey = \"root\" | \"title\" | \"thumbnail\" | \"speaker\"\n\ntype IProps = {\n video: IVideo\n current: boolean\n}\ntype PropsType = IProps & WithStyles\n\nconst VideoCard: React.FC = (props: PropsType) => {\n const { video, current } = props\n const classes = props.classes\n\n let history = useHistory()\n\n const getStatus = useCallback((): Status => {\n if (current) return \"current\"\n return video.progress === 1 ? \"watched\" : \"blocked\"\n }, [video, current])\n\n function pushRoute() {\n history.push(`/fast-track/video/${video.id}`)\n }\n\n return (\n {\n if (current) pushRoute()\n }}\n >\n \n \n )\n}\n\nexport default withStyles(styles)(VideoCard)\n","import React from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n Box,\n} from \"@material-ui/core\"\nimport { useHistory } from \"react-router\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n cursor: \"pointer\",\n \"&:hover\": {\n transform: \"scale(1.1)\",\n },\n },\n thumbnail: {\n width: \"100%\",\n },\n })\n\ntype ClassKey = \"root\" | \"thumbnail\"\ninterface IProps {\n game: \"tetris\" | \"slotMachine\"\n}\ntype PropsType = IProps & WithStyles\n\nconst GameCard: React.FC = (props) => {\n const { game, classes } = props\n const history = useHistory()\n return (\n history.push(`/fast-track/${game}`)}\n >\n \n \n )\n}\n\nexport default withStyles(styles)(GameCard)\n","import React, { useState, useEffect, useCallback } from \"react\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\nimport { setEnd, getEnd, clearEnd, ALLOWANCE } from \"../../usecases/CountDown\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n fontFamily: \"Tourney\",\n fontSize: \"3rem\",\n marginRight: \"6rem\",\n fontWeight: \"bold\",\n fontVariantNumeric: \"tabular-nums\",\n },\n })\n\ntype ClassKey = \"root\"\n\ntype IProps = {\n onTimeOut: () => void\n}\ntype PropsType = IProps & WithStyles\n\nconst CountDown: React.FC = (props: PropsType) => {\n const { classes } = props\n\n useEffect(() => {\n if (getEnd() === undefined) {\n setEnd()\n }\n }, [])\n\n const [delta, setDelta] = useState(\n getEnd() ? getEnd() - new Date().getTime() : ALLOWANCE * 1e3,\n )\n\n useEffect(() => {\n const interval = setInterval(() => {\n if (getEnd() < new Date().getTime()) {\n clearEnd()\n props.onTimeOut()\n }\n if (delta > 0) {\n setDelta(() => getEnd() - new Date().getTime())\n }\n }, 1e3)\n return () => clearInterval(interval)\n })\n\n const renderDelta = useCallback(() => {\n return new Date(delta).toISOString().substr(11, 8)\n }, [delta])\n\n return
{renderDelta()}
\n}\n\nexport default withStyles(styles)(CountDown)\n","import React from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n Button,\n} from \"@material-ui/core\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n footer: {},\n info: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n fontFamily: \"Tourney\",\n color: theme.palette.primary.main,\n },\n title: {\n margin: \"0\",\n color: theme.palette.primary.main,\n fontSize: \"3.5rem\",\n marginRight: \"1.5rem\",\n },\n container: {\n width: \"100%\",\n height: \"1rem\",\n background: \"rgba(255,255,255, 0.1)\",\n },\n flex: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"flex-end\",\n },\n inline: {\n fontFamily: \"Tourney, Courier\",\n fontWeight: \"bold\",\n fontSize: \"1rem\",\n alignSelf: \"center\",\n },\n filled: {\n height: \"100%\",\n background: theme.palette.primary.main,\n opacity: 1,\n },\n })\n\ntype ClassKey =\n | \"footer\"\n | \"title\"\n | \"info\"\n | \"container\"\n | \"flex\"\n | \"inline\"\n | \"filled\"\n\ntype IProps = {\n progress: number\n open: boolean\n setOpen: React.Dispatch>\n restart: () => void\n}\ntype PropsType = IProps & WithStyles\n\nconst Progress: React.FC = (props: PropsType) => {\n const { footer, info, title, container, flex, inline, filled } = props.classes\n const { open, setOpen, restart } = props\n\n const progressPc = Math.ceil(props.progress * 100)\n\n return (\n
\n
\n
\n

{progressPc}%

\n \n Total Progress
of the videogame\n
\n
\n
\n {progressPc === 100 && (\n \n start again\n \n )}\n setOpen(!open)}\n >\n {\"feedback\"}\n \n
\n
\n
\n
\n
\n \n )\n}\n\nexport default withStyles(styles)(Progress)\n","import * as React from \"react\"\n\nfunction SvgHomeIcon(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgHomeIcon\n","import React from \"react\"\nimport { Icon } from \"@material-ui/core\"\nimport Home from \"./svgr/Home.jsx\"\n\nfunction HomeIcon(props) {\n return (\n \n \n \n )\n}\n\nexport default HomeIcon\n","import { Emoji } from \"./Emoji\"\n\nconst emojis: Emoji[] = [\n { name: \"negative_1\", fileName: \"negative_1.svg\" },\n { name: \"negative_2\", fileName: \"negative_2.svg\" },\n { name: \"negative_3\", fileName: \"negative_3.svg\" },\n { name: \"negative_4\", fileName: \"negative_4.svg\" },\n { name: \"negative_5\", fileName: \"negative_5.svg\" },\n { name: \"negative_6\", fileName: \"negative_6.svg\" },\n { name: \"positive_1\", fileName: \"positive_1.svg\" },\n { name: \"positive_2\", fileName: \"positive_2.svg\" },\n { name: \"positive_3\", fileName: \"positive_3.svg\" },\n { name: \"positive_4\", fileName: \"positive_4.svg\" },\n { name: \"positive_5\", fileName: \"positive_5.svg\" },\n { name: \"positive_6\", fileName: \"positive_6.svg\" },\n { name: \"red_1\", fileName: \"red_1.svg\" },\n { name: \"red_2\", fileName: \"red_2.svg\" },\n { name: \"red_3\", fileName: \"red_3.svg\" },\n { name: \"red_4\", fileName: \"red_4.svg\" },\n { name: \"red_5\", fileName: \"red_5.svg\" },\n { name: \"red_6\", fileName: \"red_6.svg\" },\n { name: \"white_1\", fileName: \"white_1.svg\" },\n { name: \"white_2\", fileName: \"white_2.svg\" },\n { name: \"white_3\", fileName: \"white_3.svg\" },\n { name: \"white_4\", fileName: \"white_4.svg\" },\n { name: \"white_5\", fileName: \"white_5.svg\" },\n { name: \"white_6\", fileName: \"white_6.svg\" },\n]\n\nexport default emojis\n","import React from \"react\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\n\nimport cslx from \"clsx\"\nimport { Emoji } from \"../../../common/entities/Emoji\"\n\nlet styles = (theme: Theme) =>\n createStyles({\n root: {\n height: \"3rem\",\n color: theme.palette.primary.main,\n background: \"none\",\n display: \"flex\",\n justifyContent: \"space-around\",\n border: \"none\",\n padding: 0,\n margin: \".7rem\",\n marginBottom: \"7%\",\n },\n image: {\n padding: \"10%\",\n cursor: \"pointer\",\n transitionProperty: \"width, max-width, min-width, margin\",\n transitionDuration: \"0.1s\",\n transitionTimingFunction: \"ease\",\n filter: \"grayscale(1) brightness(0.85)\",\n \"&:hover\": {\n filter: \"none\",\n },\n },\n selected: {\n filter: \"none\",\n color: \"white\",\n },\n radio: {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0,0,0,0)\",\n border: \"0\",\n },\n wrapper: {\n flex: \"1 1\",\n },\n label: {\n display: \"flex\",\n alignItems: \"center\",\n height: \"100%\",\n },\n })\n\ntype ClassKey = \"root\" | \"image\" | \"radio\" | \"selected\" | \"wrapper\" | \"label\"\n\ntype IProps = {\n selectedEmoji?: Emoji\n setSelectedEmoji: React.Dispatch>\n emojis: Emoji[]\n}\n\ntype PropsType = IProps & WithStyles\n\nconst EmojiPicker: React.FC = (props: PropsType) => {\n const { classes, selectedEmoji, setSelectedEmoji, emojis } = props\n\n return (\n
\n {emojis.map((it, index) => {\n const isSelected: boolean = selectedEmoji === it\n const strIndex = JSON.stringify(index)\n const path = \"/images/emoji/\" + it.fileName\n return (\n
\n \n setSelectedEmoji(it)}\n className={classes.label}\n >\n \n \n
\n )\n })}\n
\n )\n}\n\nexport default withStyles(styles)(EmojiPicker)\n","import axios from \"axios\"\nimport config from \"../config\"\nimport { Feedback } from \"../entities/Feedback\"\n\nexport async function PostFeedback(feedback: Feedback) {\n const response = await axios.post(`${config.api}/feedback/`, feedback)\n return response.data\n}\n","import * as React from \"react\"\n\nfunction SvgCloseIcon(props) {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgCloseIcon\n","import React from \"react\"\nimport { Icon } from \"@material-ui/core\"\nimport Close from \"./svgr/Close\"\n\nfunction CloseIcon(props) {\n return (\n \n \n \n )\n}\n\nexport default CloseIcon\n","import React, { useState } from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n Button,\n IconButton,\n} from \"@material-ui/core\"\n\nimport emojis from \"../../../common/entities/EmojiList\"\nimport { Emoji } from \"../../../common/entities/Emoji\"\nimport EmojiPicker from \"./EmojiPicker\"\nimport { PostFeedback } from \"../../../common/usecases/PostFeedback\"\nimport clsx from \"clsx\"\nimport CloseIcon from \"../../../common/components/icons/CloseIcon\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n width: \"auto\",\n height: \"100%\",\n background: \"#222\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-around\",\n marginLeft: \"10%\",\n border: `3px solid ${theme.palette.primary.main}`,\n padding: \".4rem\",\n [theme.breakpoints.up(\"lg\")]: {\n padding: \"1rem\",\n },\n },\n closeIcon: {\n alignSelf: \"flex-end\",\n fontSize: \"2rem\",\n color: theme.palette.primary.main,\n cursor: \"pointer\",\n padding: 0,\n },\n feedbackList: {\n display: \"flex\",\n flexDirection: \"column\",\n flex: 1,\n justifyContent: \"space-evenly\",\n },\n feedbackItem: {\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n fontSize: \"1.3vh\",\n transition: \"0.3s\",\n \"@media(min-height: 800px)\": {\n fontSize: \".8rem\",\n },\n \"&:hover\": {\n cursor: \"pointer\",\n color: \"#ffff\",\n },\n },\n selected: {\n color: \"white\",\n },\n })\n\ntype ClassKey =\n | \"root\"\n | \"closeIcon\"\n | \"feedbackItem\"\n | \"feedbackList\"\n | \"selected\"\ntype IProps = {\n setOpen: React.Dispatch>\n}\ntype PropsType = IProps & WithStyles\n\nconst Feedback: React.FC = (props: PropsType) => {\n const { classes } = props\n const [emoji, setEmoji] = useState()\n const [message, setMessage] = useState()\n\n const redEmojis: Emoji[] = emojis.filter(\n (e) => e.name.substring(0, 8) === \"positive\",\n )\n\n const messageList: string[] = [\n // \"I wish I have used wisely my time by listening to the bursts through the experiential route. \",\n \"I have enjoyed the dark UX and I am a big fan of low cost airlines and gambling.\",\n \"Adverts and unsolicited distractions are my cup of team! Please give me more!\",\n \"Focus and attention are there to be disrupted! What a relaxing experience!\",\n \"Power to the dark side! I want a dark UX in every contract and report we issue! We design a darker world!\",\n \"When I eat, I like to watch cooking programmes and the light needs to be red.\",\n 'Terms and conditions, habit forming apps, the use of \"like\", the social network, I can now see the -lack of- light in all of this.',\n '\"We grow accustomed to the Dark – When Light is put away – As when the Neighbor holds the Lamp - To witness her Good bye\" Emily Dickinson',\n ]\n\n function submit(e) {\n e.preventDefault()\n if (message !== undefined && emoji !== undefined)\n PostFeedback({\n message: message,\n emoji: emoji.name,\n mediaId: \"fast-track\",\n }).catch((err) => alert(err))\n props.setOpen(false)\n }\n\n return (\n <>\n
\n props.setOpen(false)}\n className={classes.closeIcon}\n >\n \n \n
\n {messageList.map((m, i) => {\n return (\n setMessage(m)}\n >\n {m}\n
\n )\n })}\n
\n\n \n\n \n {\"send\"}\n \n \n \n )\n}\n\nexport default withStyles(styles)(Feedback)\n","import * as React from \"react\"\n\nfunction SvgAlertIcon(props) {\n return (\n \n \n \n \n \n \n \n )\n}\n\nexport default SvgAlertIcon\n","import React from \"react\"\nimport { Icon } from \"@material-ui/core\"\nimport Alert from \"./svgr/Alert\"\n\nfunction AlertIcon(props) {\n return (\n \n \n \n )\n}\n\nexport default AlertIcon\n","import React from \"react\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\nimport AlertIcon from \"../../common/components/icons/AlertIcon\"\nimport IAction from \"../entities/Action\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n position: \"absolute\",\n left: 0,\n top: 0,\n height: \"100vh\",\n width: \"100vw\",\n maxWidth: theme.breakpoints.values.md,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n [theme.breakpoints.up(\"md\")]: {\n margin: `0 calc((100% - ${theme.breakpoints.values.md}px) / 2)`,\n },\n },\n box: {\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n flexDirection: \"column\",\n background: \"#111\",\n minHeight: \"30%\",\n width: \"50%\",\n border: `2px ${theme.palette.primary.main} solid`,\n boxShadow: \"4px 4px red\",\n padding: \"1rem 3rem\",\n [theme.breakpoints.down(\"sm\")]: {\n width: \"80%\",\n padding: \"0.25rem 0.5rem\",\n },\n },\n content: {\n color: theme.palette.primary.contrastText,\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n textAlign: \"center\",\n paddingTop: \"1rem\",\n paddingBottom: \"1rem\",\n },\n button: {\n // fontFamily: \"Roboto Mono, Consolas, Courier New\",\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n fontWeight: \"bold\",\n border: `2px ${theme.palette.primary.main} solid`,\n boxShadow: `4px 4px ${theme.palette.primary.main}`,\n padding: \"0.5rem 1rem\",\n cursor: \"pointer\",\n \"&:hover\": {\n color: theme.palette.secondary.contrastText,\n border: `2px ${theme.palette.primary.contrastText} solid`,\n background: theme.palette.primary.main,\n },\n [theme.breakpoints.down(\"sm\")]: {\n padding: \"0.25rem 0.5rem\",\n },\n },\n buttons: {\n display: \"flex\",\n width: \"100%\",\n justifyContent: \"space-around\",\n },\n icon: {\n fontSize: \"4rem\",\n [theme.breakpoints.down(\"sm\")]: {\n fontSize: \"2rem\",\n },\n },\n })\n\ninterface IProps {\n title?: string\n textStyle?: React.CSSProperties\n actions: IAction[]\n}\ntype ClassKey = \"root\" | \"box\" | \"content\" | \"button\" | \"buttons\" | \"icon\"\ntype PropsType = IProps & WithStyles\n\nconst MessageBox: React.FC = (props) => {\n const { classes, actions, title } = props\n\n return (\n
\n
\n \n {title &&
{title}
}\n
\n {props.children}\n
\n
\n {actions.map((a, i) => (\n \n {a.label}\n
\n ))}\n
\n
\n \n )\n}\n\nexport default withStyles(styles)(MessageBox)\n","import React, { useState, useCallback, useEffect } from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n IconButton,\n Grid,\n Modal,\n} from \"@material-ui/core\"\n\n// State\nimport { setEnd } from \"../../usecases/CountDown\"\nimport { useAppDispatch, useAppSelector } from \"../../../redux/hooks\"\nimport {\n refreshProgress,\n progressAllVideos,\n} from \"../../../redux/library/LibrarySlice\"\nimport { gameActions } from \"../../../redux/games/GameSlice\"\n\n// Components\nimport VideoCard from \"./VideoCard\"\nimport GameCard from \"./GameCard\"\nimport CountDown from \"./CountDown\"\nimport Progress from \"./Progress\"\nimport HomeIcon from \"../../../common/components/icons/HomeIcon\"\nimport Feedback from \"./Feedback\"\nimport MessageBox from \"../MessageBox\"\nimport { useHistory } from \"react-router\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n padding: \"0rem 4rem 1rem 4rem\",\n background: \"rgba(30, 30, 30)\",\n backgroundImage: 'url(\"/images/background/fast_track_background.jpg\")',\n backgroundSize: \"cover\",\n color: theme.palette.primary.main,\n },\n header: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n fontFamily: \"Tourney\",\n marginBottom: \"1rem\",\n },\n title: {\n margin: \"0\",\n fontSize: \"2.5rem\",\n fontFamily: \"Digitek, Tourney\",\n marginRight: \"1.5rem\",\n },\n container: {\n width: \"100%\",\n height: 0,\n flex: 1,\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n flexes: {\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n inline: {\n marginTop: 0,\n fontSize: \"1rem\",\n fontWeight: 600,\n },\n icon: {\n color: theme.palette.primary.main,\n fontSize: \"3rem\",\n },\n grid: {\n flex: 3,\n overflow: \"auto\",\n alignItems: \"center\",\n height: \"fit-content\",\n maxHeight: \"100%\",\n flexBasis: \"1rem\",\n },\n feedback: {\n flex: 1,\n height: \"100%\",\n float: \"right\",\n },\n })\n\ntype ClassKey =\n | \"root\"\n | \"title\"\n | \"header\"\n | \"container\"\n | \"flexes\"\n | \"grid\"\n | \"inline\"\n | \"icon\"\n | \"feedback\"\n\ntype IStatus = \"fail\" | \"success\" | \"ongoing\"\ntype PropsType = WithStyles\n\nconst FastTrackCatalogue: React.FC = (props: PropsType) => {\n const {\n root,\n header,\n title,\n container,\n flexes,\n grid,\n inline,\n feedback,\n } = props.classes\n\n const dispatch = useAppDispatch()\n const history = useHistory()\n const videos = useAppSelector((state) => state.libraryState.videos)\n const [open, setOpen] = useState(false)\n const [status, setStatus] = useState(\"ongoing\")\n\n useEffect(() => {\n dispatch(refreshProgress())\n }, [dispatch])\n\n useEffect(() => {\n if (videos.every((v) => v.progress >= 1)) {\n setStatus(\"success\")\n dispatch(\n gameActions.setTetrisChallenge({\n outcomeId: undefined,\n target: 0,\n }),\n )\n dispatch(\n gameActions.setSlotMachineChallenge({\n outcomeId: undefined,\n target: 0,\n }),\n )\n }\n }, [videos, dispatch])\n\n const restart = useCallback(() => {\n dispatch(progressAllVideos(0))\n setStatus(\"ongoing\")\n setEnd()\n }, [dispatch])\n\n return (\n
\n
\n
\n

FAST TRACK

\n \n Watch all videos
\n before time expires\n
\n
\n
\n {status === \"ongoing\" && (\n {\n setStatus(\"fail\")\n }}\n />\n )}\n \n \n \n
\n
\n
\n \n {videos.map((v, idx) => (\n \n \n \n ))}\n {status === \"success\" && (\n <>\n \n \n \n \n \n \n \n )}\n \n {open && (\n
\n \n
\n )}\n
\n v.progress).reduce((a, b) => a + b) / videos.length\n }\n />\n \n {\n history.push(\"/experimental\")\n },\n },\n ]}\n >\n {\"Time's out! Game over!\"}\n \n \n
\n )\n}\n\nexport default withStyles(styles)(FastTrackCatalogue)\n","import React from \"react\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\nimport { ReactNode } from \"react\"\nimport clsx from \"clsx\"\n\ntype IProps = {\n title: string\n icon: ReactNode\n iconOptional?: ReactNode\n children?: ReactNode\n small?: boolean\n}\nconst styles = (theme: Theme) =>\n createStyles({\n header: {\n display: \"flex\",\n padding: \"1rem\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n fontFamily: \"Cooper Black, Tourney\",\n fontSize: \"3rem\",\n [theme.breakpoints.down(\"xs\")]: {\n fontSize: \"2.5rem\",\n },\n color: theme.palette.secondary.dark,\n },\n headerSmall: {\n fontSize: \"2.5rem\",\n fontWeight: 700,\n },\n })\n\ntype ClassKey = \"header\" | \"headerSmall\"\n\ntype PropsType = IProps &\n WithStyles & { backgroundColor: string; color: string }\n\nconst Header: React.FC = (props: PropsType) => {\n return (\n \n {props.title} \n
\n {props.iconOptional}\n {props.icon}\n
\n \n )\n}\n\nexport default withStyles(styles)(Header)\n","import { IInterview } from \"../../../../../redux/interfaces\"\nimport { theme } from \"../../../../../common/mui\"\n\ninterface IPathNode {\n x: number\n r: number\n}\nexport const haloOffset = 6\nexport const verticalSpacing = 130\nexport const pathLayout = [\n { x: 80, r: 40 },\n { x: 140, r: 35 },\n { x: 80, r: 50 },\n { x: 60, r: 30 },\n { x: 120, r: 40 },\n]\n\nexport const drawPlay = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n size: number,\n color: string,\n lineWidth?: number,\n) => {\n ctx.fillStyle = color\n ctx.strokeStyle = color\n ctx.lineWidth = lineWidth || 2\n\n ctx.beginPath()\n ctx.moveTo(x - size / 3, y - size / 2)\n ctx.lineTo(x - size / 3, y + size / 2)\n ctx.lineTo(x + (2 * size) / 3, y)\n ctx.lineTo(x - size / 3, y - size / 2)\n ctx.stroke()\n}\n\nexport const drawWatchedInterview = (\n ctx: CanvasRenderingContext2D,\n node: IPathNode,\n interview: IInterview,\n colorBubble: string,\n colorProgress: string,\n) => {\n // Draw bubble\n ctx.fillStyle = colorBubble\n ctx.beginPath()\n ctx.arc(node.x, verticalSpacing / 2, node.r, 0, 2 * Math.PI)\n ctx.fill()\n\n // Draw progress\n ctx.strokeStyle = colorProgress\n ctx.lineWidth = 6\n ctx.beginPath()\n ctx.arc(\n node.x,\n verticalSpacing / 2,\n node.r + haloOffset,\n -0.5 * Math.PI,\n 2 * Math.PI * interview.progress - 0.5 * Math.PI,\n )\n ctx.stroke()\n\n // Draw Play\n drawPlay(\n ctx,\n node.x,\n verticalSpacing / 2,\n 0.6 * node.r,\n theme.palette.secondary.contrastText,\n )\n}\n\nexport const drawNextInterview = (\n ctx: CanvasRenderingContext2D,\n node: IPathNode,\n) => {\n // Draw bubble\n ctx.strokeStyle = theme.palette.primary.main\n ctx.fillStyle = theme.palette.primary.main\n ctx.lineWidth = 3\n ctx.beginPath()\n ctx.arc(node.x, verticalSpacing / 2, node.r, 0, 2 * Math.PI)\n ctx.fill()\n ctx.stroke()\n\n // Draw Play\n drawPlay(\n ctx,\n node.x,\n verticalSpacing / 2,\n 0.6 * node.r,\n theme.palette.primary.contrastText,\n )\n ctx.fill()\n}\n\nexport const drawFutureInterview = (\n ctx: CanvasRenderingContext2D,\n node: IPathNode,\n) => {\n // Draw bubble\n ctx.fillStyle = \"#ECECEC\"\n ctx.beginPath()\n ctx.arc(node.x, verticalSpacing / 2, node.r, 0, 2 * Math.PI)\n ctx.fill()\n}\n\nexport const drawTrailer = (\n ctx: CanvasRenderingContext2D,\n node: IPathNode,\n watched: boolean,\n) => {\n const h = verticalSpacing * 0.6\n const [x0, y0] = [node.x - h / 2, verticalSpacing / 2]\n const [dx, dy] = [h / 5, h / 5]\n\n // Draw film\n ctx.lineWidth = 3\n ctx.strokeStyle = \"black\"\n ctx.fillStyle = \"white\"\n\n ctx.beginPath()\n for (let i = 0; i < 5; i++) {\n ctx.rect(x0 + i * dx, y0 - h / 2, dx, dy)\n ctx.rect(x0 + i * dx, y0 + h / 2, dx, -dy)\n }\n ctx.fill()\n ctx.stroke()\n ctx.closePath()\n ctx.beginPath()\n ctx.rect(x0, y0 - h / 2 + dy, h, h - 2 * dy)\n ctx.fillStyle = \"#555\"\n ctx.fill()\n ctx.stroke()\n ctx.closePath()\n\n // Draw label\n ctx.lineWidth = 1\n ctx.fillStyle = watched\n ? theme.palette.secondary.dark\n : theme.palette.primary.main\n\n drawPlay(ctx, x0 + h / 2, y0, h / 4, \"white\", 1)\n ctx.fill()\n}\n\nexport const drawLink = (\n ctx: CanvasRenderingContext2D,\n curr: IPathNode,\n prev?: IPathNode,\n next?: IPathNode,\n colorPrev?: string,\n colorNext?: string,\n) => {\n ctx.lineWidth = 3\n ctx.beginPath()\n\n if (prev !== undefined) {\n ctx.moveTo(prev.x, verticalSpacing * -0.5)\n } else {\n ctx.moveTo(curr.x, verticalSpacing * 0.5)\n }\n ctx.lineTo(curr.x, verticalSpacing * 0.5)\n ctx.strokeStyle = colorPrev || \"#ddd\"\n ctx.stroke()\n ctx.closePath()\n\n ctx.beginPath()\n ctx.moveTo(curr.x, verticalSpacing * 0.5)\n if (next !== undefined) {\n ctx.lineTo(next.x, verticalSpacing * 1.5)\n }\n ctx.strokeStyle = colorNext || \"#ddd\"\n ctx.stroke()\n ctx.closePath()\n}\n\nexport const getDrawingNode = (idx: number): IPathNode => {\n return pathLayout[idx % pathLayout.length]\n}\n","import { createStyles, Theme } from \"@material-ui/core\"\nimport { verticalSpacing } from \"../utils/Draw\"\n\nexport type ClassKey = \"root\" | \"drawing\" | \"details\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n display: \"flex\",\n height: verticalSpacing,\n cursor: \"pointer\",\n \"&:hover\": {\n background: \"#eee\",\n },\n [theme.breakpoints.up(\"md\")]: {\n paddingLeft: \"10%\",\n },\n },\n drawing: {\n height: \"100%\",\n width: \"20%\", // to be overwritten\n marginRight: \"1rem\",\n },\n details: {\n display: \"flex\",\n margin: \"-0.4rem\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n fontFamily: \"Roboto Mono, Courier, Sans Serif\",\n fontWeight: \"bold\",\n color: \"#111\",\n flex: 1,\n },\n })\n\nexport default styles\n","export const color_01 = \"#ff9ea3\"\nexport const color_02 = \"#e61e28\"\n","import React, { useLayoutEffect, useRef } from \"react\"\nimport { withStyles, WithStyles, Theme, createStyles } from \"@material-ui/core\"\nimport pathStepStyle, {\n ClassKey as pathStepClassKey,\n} from \"./styles/pathStepStyle\"\nimport {\n drawLink,\n drawTrailer,\n getDrawingNode,\n haloOffset,\n verticalSpacing,\n} from \"./utils/Draw\"\nimport { color_01 } from \"./Colors\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n title: {\n fontWeight: \"bold\",\n [theme.breakpoints.down(\"xs\")]: {\n fontSize: \"0.8rem\",\n },\n },\n author: {\n fontWeight: \"lighter\",\n [theme.breakpoints.down(\"xs\")]: {\n fontSize: \"0.8rem\",\n },\n },\n })\ntype ClassKey = \"title\" | \"author\"\n\ninterface IProps {\n idx: number\n watched: boolean\n onClick: () => void\n title: string\n author: string\n}\ntype PropsType = IProps & WithStyles\n\nconst TrailerStep: React.FC = (props) => {\n const { classes, idx, watched, onClick } = props\n const canvasRef = useRef(null)\n const node = getDrawingNode(idx)\n\n useLayoutEffect(() => {\n const draw = (ctx) => {\n const node = getDrawingNode(idx)\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)\n drawLink(\n ctx,\n node,\n undefined,\n getDrawingNode(idx + 1),\n undefined,\n color_01,\n )\n\n drawTrailer(ctx, node, watched)\n // ctx.scale(window.devicePixelRatio, window.devicePixelRatio)\n }\n\n const canvas = canvasRef.current\n if (canvas !== null) {\n console.log(\"drawing\")\n const ctx = canvas!.getContext(\"2d\")!\n draw(ctx)\n }\n }, [idx, watched])\n\n const getWidth = () =>\n node.x + node.r + haloOffset + window.devicePixelRatio + 10\n\n return (\n
\n \n
\n {props.title}\n {props.author}\n
\n
\n )\n}\n\nexport default withStyles((theme) => ({\n ...pathStepStyle(theme),\n ...styles(theme),\n}))(TrailerStep)\n","import React, { useLayoutEffect, useRef } from \"react\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\nimport { IInterview } from \"../../../../redux/interfaces\"\nimport pathStepStyle, {\n ClassKey as pathStepClassKey,\n} from \"./styles/pathStepStyle\"\nimport {\n drawLink,\n drawWatchedInterview,\n getDrawingNode,\n haloOffset,\n verticalSpacing,\n} from \"./utils/Draw\"\nimport { color_01 } from \"./Colors\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n title: {\n fontWeight: \"bold\",\n [theme.breakpoints.down(\"xs\")]: {\n fontSize: \"0.8rem\",\n },\n },\n author: {\n fontWeight: \"lighter\",\n [theme.breakpoints.down(\"xs\")]: {\n fontSize: \"0.8rem\",\n },\n },\n })\n\ntype ClassKey = \"title\" | \"author\"\ninterface IProps {\n idx: number\n interview: IInterview\n onClick: (interviewId: string) => void\n colorBubble: string\n colorProgress: string\n}\ntype PropsType = IProps & WithStyles\n\nconst InterviewStep: React.FC = (props) => {\n const { classes, idx, interview, onClick } = props\n const canvasRef = useRef(null)\n const node = getDrawingNode(idx)\n\n useLayoutEffect(() => {\n const draw = (ctx) => {\n const node = getDrawingNode(idx)\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)\n\n drawLink(\n ctx,\n node,\n getDrawingNode(idx - 1),\n getDrawingNode(idx + 1),\n color_01,\n color_01,\n )\n\n drawWatchedInterview(\n ctx,\n node,\n interview,\n props.colorBubble,\n props.colorProgress,\n )\n // ctx.scale(window.devicePixelRatio, window.devicePixelRatio)\n }\n\n const canvas = canvasRef.current\n if (canvas !== null) {\n console.log(\"drawing\")\n const ctx = canvas!.getContext(\"2d\")!\n draw(ctx)\n }\n }, [idx, interview, props])\n\n const getWidth = () =>\n node.x + node.r + haloOffset + window.devicePixelRatio + 10\n\n return (\n
onClick(interview.id)}>\n \n
\n {interview.title}\n {interview.author}\n
\n
\n )\n}\n\nexport default withStyles((theme) => ({\n ...pathStepStyle(theme),\n ...styles(theme),\n}))(InterviewStep)\n","import React, { useLayoutEffect, useRef } from \"react\"\nimport { withStyles, WithStyles } from \"@material-ui/core\"\nimport pathStepStyle, {\n ClassKey as pathStepClassKey,\n} from \"./styles/pathStepStyle\"\nimport {\n drawLink,\n drawNextInterview,\n getDrawingNode,\n haloOffset,\n verticalSpacing,\n} from \"./utils/Draw\"\nimport { color_01, color_02 } from \"./Colors\"\n\ninterface IProps {\n idx: number\n onClick: () => void\n}\ntype PropsType = IProps & WithStyles\n\nconst NextStep: React.FC = (props) => {\n const { classes, idx, onClick } = props\n const canvasRef = useRef(null)\n const node = getDrawingNode(idx)\n\n useLayoutEffect(() => {\n const draw = (ctx) => {\n const node = getDrawingNode(idx)\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)\n drawLink(\n ctx,\n node,\n getDrawingNode(idx - 1),\n getDrawingNode(idx + 1),\n color_01,\n color_02,\n )\n\n drawNextInterview(ctx, node)\n // ctx.scale(window.devicePixelRatio, window.devicePixelRatio)\n }\n\n const canvas = canvasRef.current\n if (canvas !== null) {\n console.log(\"drawing\")\n const ctx = canvas!.getContext(\"2d\")!\n draw(ctx)\n }\n }, [idx])\n\n const getWidth = () =>\n node.x + node.r + haloOffset + window.devicePixelRatio + 10\n\n return (\n
\n \n
\n Select your
next listening\n
\n
\n )\n}\n\nexport default withStyles((theme) => ({\n ...pathStepStyle(theme),\n}))(NextStep)\n","import React, { useLayoutEffect, useRef } from \"react\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\nimport pathStepStyle, {\n ClassKey as pathStepClassKey,\n} from \"./styles/pathStepStyle\"\nimport {\n drawFutureInterview,\n drawLink,\n getDrawingNode,\n haloOffset,\n verticalSpacing,\n} from \"./utils/Draw\"\nimport clsx from \"clsx\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n passive: {\n cursor: \"auto\",\n \"&:hover\": {\n background: \"none\",\n },\n },\n })\n\ntype ClassKey = \"passive\"\ninterface IProps {\n idx: number\n}\ntype PropsType = IProps & WithStyles\n\nconst FutureStep: React.FC = (props) => {\n const { classes, idx } = props\n const canvasRef = useRef(null)\n const node = getDrawingNode(idx)\n\n useLayoutEffect(() => {\n const draw = (ctx) => {\n const node = getDrawingNode(idx)\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)\n drawLink(ctx, node, getDrawingNode(idx - 1), getDrawingNode(idx + 1))\n drawFutureInterview(ctx, node)\n // ctx.scale(window.devicePixelRatio, window.devicePixelRatio)\n }\n\n const canvas = canvasRef.current\n if (canvas !== null) {\n console.log(\"drawing\")\n const ctx = canvas!.getContext(\"2d\")!\n draw(ctx)\n }\n }, [idx])\n\n const getWidth = () =>\n node.x + node.r + haloOffset + window.devicePixelRatio + 10\n\n return (\n
\n \n
\n )\n}\n\nexport default withStyles((theme) => ({\n ...pathStepStyle(theme),\n ...styles(theme),\n}))(FutureStep)\n","import React, { ReactNode } from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n IconButton,\n Modal,\n} from \"@material-ui/core\"\nimport CloseIcon from \"../../../common/components/icons/CloseIcon\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: \"100%\",\n },\n box: {\n display: \"flex\",\n flexDirection: \"column\",\n background: \"white\",\n height: \"100%\",\n width: \"100%\",\n maxHeight: \"80vh\",\n border: \"3px solid black\",\n [theme.breakpoints.up(\"md\")]: {\n height: \"auto\",\n width: \"50%\",\n },\n },\n header: {\n padding: \"0.5rem 2rem\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n\n color: \"black\",\n borderBottom: \"3px solid black\",\n },\n titles: {\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n fontWeight: \"bold\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n subtitle: {\n fontWeight: \"normal\",\n color: \"grey\",\n },\n container: {\n padding: 0,\n position: \"relative\",\n overflow: \"auto\",\n height: \"100%\",\n },\n icon: {\n color: theme.palette.secondary.dark,\n fontSize: \"2rem\",\n },\n })\n\ntype ClassKey =\n | \"root\"\n | \"box\"\n | \"header\"\n | \"titles\"\n | \"subtitle\"\n | \"container\"\n | \"icon\"\n\ninterface IProps {\n title: string\n subtitle?: string\n open: boolean\n onClose: () => void\n children: ReactNode\n}\n\ntype PropsType = IProps & WithStyles\n\nconst ModalBox: React.FC = (props) => {\n const { classes, title, subtitle, open, onClose, children } = props\n return (\n \n
\n
\n
\n
\n {title}\n {subtitle && {subtitle}}\n
\n \n \n \n
\n
{children}
\n
\n
\n
\n )\n}\n\nexport default withStyles(styles)(ModalBox)\n","import React, { useEffect } from \"react\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\nimport { IInterview } from \"../../../redux/interfaces\"\nimport clsx from \"clsx\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n track: {\n padding: \".7rem 2rem\",\n cursor: \"pointer\",\n \"&:hover\": {\n background: \"#ccc\",\n },\n },\n greyedOut: {\n color: `#bbb !important`,\n cursor: \"default\",\n },\n title: {\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n fontWeight: \"bold\",\n color: theme.palette.secondary.dark,\n margin: 0,\n },\n author: {\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n color: theme.palette.secondary.light,\n margin: 0,\n },\n })\n\ntype ClassKey = \"title\" | \"author\" | \"track\" | \"greyedOut\"\n\ntype IProps = {\n onSelect: (interview: string) => void\n interviews: IInterview[]\n}\ntype PropsType = IProps & WithStyles\n\nconst SelectInterview: React.FC = (props: PropsType) => {\n const { onSelect, classes } = props\n\n const isPending = (interview: IInterview) => interview.order === undefined\n\n useEffect(() => {\n document.title = \"AGAM21 | Select Track\"\n })\n\n return (\n <>\n {props.interviews.map((interview) => (\n {\n if (isPending(interview)) {\n onSelect(interview.id)\n }\n }}\n >\n \n {interview.title}\n

\n \n {interview.author}\n

\n \n ))}\n \n )\n}\n\nexport default withStyles(styles)(SelectInterview)\n","import React, { useEffect } from \"react\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\nimport { IVideo, IInterview } from \"../../../redux/interfaces\"\nimport ReactPlayer from \"react-player\"\n\nlet styles = (theme: Theme) =>\n createStyles({\n root: {\n color: theme.palette.primary.main,\n background: \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"start\",\n flex: \"1 1\",\n height: \"100%\",\n \"& video\": {\n display: \"flex\",\n flex: \"1 1\",\n },\n },\n })\n\ntype ClassKey = \"root\"\n\ntype IProps = { content: IInterview | IVideo }\n\ntype PropsType = IProps & WithStyles\n\nconst BurstPlayer: React.FC = (props: PropsType) => {\n const { classes, content } = props\n const [isPlaying, setIsPlaying] = React.useState(true)\n\n useEffect(() => {\n document.title = `AGAM21 | Experiential | Video | ${content.id}`\n }, [content.id])\n\n return (\n
\n setIsPlaying(false)}\n onEnded={() => setIsPlaying(false)}\n onPlay={() => setIsPlaying(true)}\n onClick={() => setIsPlaying(!isPlaying)}\n >\n
\n )\n}\n\nexport default withStyles(styles)(BurstPlayer)\n","import { Progress } from \"../../common/entities/Progress\"\n\nconst isNoInterviewSelected = (interviews: Progress[], includes: string) => {\n return interviews.filter((i) => i.mediaId.includes(includes)).length === 0\n}\n\nexport default isNoInterviewSelected\n","import React, { useEffect, useMemo, useRef } from \"react\"\nimport { withStyles, createStyles, Theme, WithStyles } from \"@material-ui/core\"\nimport { IInterview, IVideo } from \"../../redux/interfaces\"\nimport { useAppDispatch } from \"../../redux/hooks\"\nimport { refreshProgress } from \"../../redux/library/LibrarySlice\"\nimport TrailerStep from \"../../experiential/components/ExperientialJourney/pathSteps/TrailerStep\"\nimport InterviewStep from \"../../experiential/components/ExperientialJourney/pathSteps/InterviewStep\"\nimport NextStep from \"../../experiential/components/ExperientialJourney/pathSteps/NextStep\"\nimport FutureStep from \"../../experiential/components/ExperientialJourney/pathSteps/FutureStep\"\nimport ModalBox from \"./ModalBox\"\nimport SelectInterview from \"../../experiential/components/ExperientialJourney/SelectInterview\"\nimport BurstPlayer from \"../../experiential/components/Player/BurstPlayer\"\nimport isNoInterviewSelected from \"../../experiential/utils/isNoInterviewSelected\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n height: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n path: {\n overflow: \"auto\",\n flex: 1,\n },\n icon: {\n color: \"black\",\n fontSize: \"3rem\",\n },\n })\n\ntype ClassKey = \"root\" | \"path\" | \"icon\"\ntype IProps = {\n interviews: IInterview[]\n overlay: any\n setOverlay: React.Dispatch>\n playInterview: (interviewId: string) => void\n playTrailer: () => void\n trailer?: IVideo\n colorBubble: string\n colorProgress: string\n progressIdShouldInclude: string\n}\ntype PropsType = WithStyles & IProps\n\nconst Journey: React.FC = (props: PropsType) => {\n const dispatch = useAppDispatch()\n const pathRef = useRef(null)\n\n useEffect(() => {\n dispatch(refreshProgress())\n .unwrap()\n .then((progress) => {\n if (isNoInterviewSelected(progress, props.progressIdShouldInclude)) {\n props.setOverlay({ type: \"trailer\" })\n }\n })\n // eslint-disable-next-line\n }, [dispatch])\n\n const sortedInterviews = useMemo(() => {\n const sInterviews = props.interviews.slice().sort((t1, t2) => {\n if (t1.order === undefined && t2.order === undefined) return 0\n if (t1.order === undefined) return 1\n if (t2.order === undefined) return -1\n return t1.order - t2.order\n })\n const nextIdx = sInterviews.findIndex((t) => t.order === undefined)\n if (nextIdx < 0) return sInterviews\n return sInterviews.slice(0, nextIdx + 5)\n }, [props.interviews])\n\n const selectedInterviews = sortedInterviews.filter(\n (i) => i.order !== undefined,\n )\n\n useEffect(() => {\n if (pathRef.current !== null) {\n pathRef.current.scrollBy({\n top: pathRef.current.scrollHeight,\n behavior: \"smooth\",\n })\n }\n }, [])\n\n return (\n <>\n
\n
\n {props.trailer && (\n i.order !== undefined).length\n }\n onClick={props.playTrailer}\n title={props.trailer.title}\n author={props.trailer.author}\n />\n )}\n {sortedInterviews\n .filter((i) => i.order !== undefined)\n .map((interview, idx) => (\n \n ))}\n props.setOverlay({ type: \"select\" })}\n />\n \n \n
\n
\n props.setOverlay({ type: \"hidden\" })}\n >\n \n \n {props.trailer && (\n props.setOverlay({ type: \"hidden\" })}\n >\n \n \n )}\n \n )\n}\n\nexport default withStyles(styles)(Journey)\n","import * as React from \"react\"\n\nexport function SvgNothingIcon(props) {\n return (\n \n )\n}\n\n","import React from \"react\"\nimport { Icon } from \"@material-ui/core\"\nimport { SvgNothingIcon } from \"./svgr/Nothing\"\n\nfunction InvisibleIcon(props) {\n return (\n \n \n \n )\n}\n\nexport default InvisibleIcon\n","import React, { useCallback, useEffect, useRef, useState } from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n IconButton,\n} from \"@material-ui/core\"\nimport { useHistory } from \"react-router\"\n\n// State\nimport { useAppSelector } from \"../../../redux/hooks\"\nimport { RootState } from \"../../../redux/store\"\n\n// Utils\nimport CloseIcon from \"../../../common/components/icons/CloseIcon\"\nimport Header from \"../../../common/components/Header/Header\"\nimport Journey from \"../../../common/components/Journey\"\nimport { color_01, color_02 } from \"./pathSteps/Colors\"\nimport InvisibleIcon from \"../../../common/components/icons/InvisibleIcon\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n height: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n path: {\n overflow: \"auto\",\n flex: 1,\n },\n icon: {\n color: \"black\",\n fontSize: \"3rem\",\n },\n })\n\ntype ClassKey = \"root\" | \"path\" | \"icon\"\ntype PropsType = WithStyles\n\ntype Overlay = {\n type: \"hidden\" | \"select\" | \"trailer\"\n}\n\nconst ExperientialJourney: React.FC = (props: PropsType) => {\n const [overlay, setOverlay] = useState({ type: \"hidden\" })\n const history = useHistory()\n const trailer = useAppSelector((state) => state.libraryState.trailer)\n const pathRef = useRef(null)\n\n const playTrailer = useCallback(() => {\n setOverlay({ type: \"trailer\" })\n }, [])\n\n const playInterview = useCallback(\n (interviewId: string) => {\n history.push(`/experiential/interview/${interviewId}`)\n },\n [history],\n )\n\n const interviews = useAppSelector(\n (state: RootState) => state.libraryState.interviews,\n )\n\n useEffect(() => {\n if (pathRef.current !== null) {\n pathRef.current.scrollBy({\n top: pathRef.current.scrollHeight,\n behavior: \"smooth\",\n })\n }\n })\n\n useEffect(() => {\n document.title = \"AGAM21 | Experiential\"\n })\n\n return (\n <>\n
\n history.push(\"/landing/\")}\n >\n \n \n }\n iconOptional={\n history.push(\"/feedback/\")}\n >\n \n \n }\n title=\"AGAM21\"\n backgroundColor=\"white\"\n color=\"black\"\n />\n \n
\n \n )\n}\n\nexport default withStyles(styles)(ExperientialJourney)\n","import axios from \"axios\"\nimport config from \"../../common/config\"\nimport { Feedback } from \"../entities/Feedback\"\n\ninterface FeedbackResponse {\n Items: Feedback[]\n}\nexport const getFeedback: () => Promise = async () => {\n const response = await axios.get(`${config.api}/feedback/`)\n return response.data\n}\n","import React from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { RootState } from \"../../redux/store\"\nimport { ILibrarySlice } from \"../../redux/interfaces\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\nimport { Feedback } from \"../../common/entities/Feedback\"\n\nexport const maxFeedbackItemWidth = 250\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n width: \"100%\",\n maxWidth: maxFeedbackItemWidth,\n color: \"black\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"start\",\n },\n title: {\n fontWeight: \"bold\",\n color: theme.palette.primary.main,\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n fontSize: \"1rem\",\n margin: 0,\n },\n author: {\n color: \"#aaa\",\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n fontSize: \".8rem\",\n margin: 0,\n fontWeight: 300,\n },\n message: {\n marginTop: 0,\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n fontSize: \".8rem\",\n color: \"white\",\n fontWeight: 300,\n },\n emoji: {\n alignSelf: \"center\",\n width: \"30%\",\n },\n })\n\ntype IProps = {\n feedback: Feedback\n}\ntype ClassKey = \"root\" | \"title\" | \"author\" | \"message\" | \"emoji\"\ntype PropsType = IProps & WithStyles\n\nconst FeedbackItem: React.FC = (props: PropsType) => {\n const state: ILibrarySlice = useSelector(\n (state: RootState) => state.libraryState,\n )\n const { classes, feedback } = props\n\n function findTitleForMediaId(mediaId: string) {\n const titleFromBook = state.books.find((it) => it.id === mediaId)?.title\n const titleFromInterview = state.interviews.find((it) => it.id === mediaId)\n ?.title\n return titleFromBook || titleFromInterview\n }\n\n return (\n
\n

\n {findTitleForMediaId(feedback.mediaId) || \"Dark UX Experience\"}\n

\n

{feedback.user}

\n

{feedback.message}

\n \n
\n )\n}\n\nexport default withStyles(styles)(FeedbackItem)\n","import React, { useRef } from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n useTheme,\n Button,\n} from \"@material-ui/core\"\nimport { useState } from \"react\"\nimport { useEffect } from \"react\"\nimport { getFeedback } from \"../../common/usecases/GetFeedback\"\nimport { Feedback } from \"../../common/entities/Feedback\"\nimport FeedbackItem, { maxFeedbackItemWidth } from \"./FeedbackItem\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {},\n header: {\n fontFamily: \"Tourney\",\n fontSize: \"4rem\",\n color: theme.palette.primary.main,\n zIndex: 10,\n margin: \"5%\",\n [theme.breakpoints.down(\"sm\")]: {\n fontSize: \"2.6rem\",\n },\n },\n feedbackContainer: {\n position: \"relative\",\n bottom: 0,\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-around\",\n },\n gradient: {\n overflow: \"hidden\",\n height: \"80vh\",\n \"&-webkit-mask-image\":\n \"linear-gradient(to bottom, #3f87a600, white, white, #f69d3c00)\",\n maskImage:\n \"linear-gradient(to bottom, #3f87a600, white, white, #f69d3c00)\",\n },\n ui: {\n position: \"absolute\",\n left: 0,\n top: 0,\n width: \"100vw\",\n height: \"100%\",\n padding: `5% calc(3rem + (100vw - ${theme.breakpoints.values.md}px) / 2)`,\n display: \"flex\",\n justifyContent: \"space-evenly\",\n alignItems: \"flex-end\",\n \"& > *\": {\n margin: \"0 0.5rem\",\n flex: \"1 1\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n \"& > *\": {\n alignText: \"center\",\n maxHeight: \"3rem\",\n minWidth: \"80%\",\n marginTop: \"1rem\",\n },\n },\n },\n ribbon: {\n position: \"relative\",\n width: \"100%\",\n minWidth: \"500px\",\n background: \"#ff0\",\n color: \"#000\",\n textAlign: \"start\",\n fontSize: \"0.9rem\",\n height: \"2rem\",\n fontWeight: \"bold\",\n fontFamily: \"Roboto, Sans-Serif\",\n lineHeight: \"2rem\",\n top: \"-2rem\",\n left: \"calc(70% - 2rem)\",\n letterSpacing: \"1px\",\n transformOrigin: \"0 50%\",\n transform: \"rotate(45deg)\",\n overflowX: \"hidden\",\n \"-webkit-transform-origin\": \"0 50%\",\n \"-webkit-transform\": \"rotate(45deg)\",\n },\n })\n\ntype ClassKey =\n | \"root\"\n | \"header\"\n | \"feedbackContainer\"\n | \"gradient\"\n | \"ui\"\n | \"ribbon\"\ntype PropsType = WithStyles\n\nconst AgamLanding: React.FC = (props: PropsType) => {\n const { classes } = props\n const [feedbackList, setFeedbackList] = useState([] as Feedback[])\n const [style, setStyle] = useState()\n\n // Seconds that the animation loop lasts. If insuficient items are available,\n // they will be repeated to create enough feedback items\n const animationTime = 60\n // Average \"rows\" shown per second\n const animationSpeed = 0.2\n\n const containerEl = useRef(null)\n const theme = useTheme()\n\n useEffect(() => {\n // Every animationTime seconds, feedback is asked for\n const fetchFeedbackAndSetInitialPosition = () => {\n getFeedback().then((data) => setFeedbackList(data.Items))\n setStyle({ bottom: 0 })\n }\n fetchFeedbackAndSetInitialPosition()\n const interval = setInterval(\n fetchFeedbackAndSetInitialPosition,\n animationTime * 1e3,\n )\n return () => clearInterval(interval)\n }, [])\n\n useEffect(() => {\n // Animate flow everytime there's new feedback\n const height = containerEl.current?.offsetHeight\n if (height) {\n setStyle({\n transition: `bottom ${animationTime}s linear`,\n bottom: height,\n })\n }\n console.log(feedbackList)\n }, [containerEl, feedbackList])\n\n const randomBetween = (a: number, b: number) => {\n return Math.min(a, b) + Math.random() * (Math.max(a, b) - Math.min(a, b))\n }\n\n const randomizeFeedbackItems = (feedback: Feedback[]) => {\n const nCols = Math.floor(\n Math.min(window.screen.width, theme.breakpoints.values.md) /\n maxFeedbackItemWidth,\n )\n const targetLength = animationSpeed * nCols * animationTime\n\n if (!feedback.length) return []\n feedback = []\n .concat(\n ...Array(Math.ceil(targetLength / feedback.length)).fill(feedbackList),\n )\n .slice(0, targetLength)\n return feedback.map((fb, i) => (\n \n \n \n ))\n }\n\n useEffect(() => {\n document.title = `AGAM21 | Experimental`\n })\n\n return (\n
\n
\n EXPERIMENTAL! WARNING! EXPERIMIENTAL! WARNING! EXPERIMIENTAL! WARNING!\n
\n

Experimental

\n
\n \n {randomizeFeedbackItems(feedbackList)}\n
\n
\n
\n \n \n fast track\n \n \n \n \n experiential\n \n \n
\n \n )\n}\n\nexport default withStyles(styles)(AgamLanding)\n","import * as React from \"react\"\n\nfunction SvgPlayRoundIcon(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgPlayRoundIcon\n","import React from \"react\"\nimport { Icon } from \"@material-ui/core\"\nimport PlayBox from \"./svgr/PlayBox\"\n\nfunction PlayIcon(props) {\n return (\n \n \n \n )\n}\n\nexport default PlayIcon\n","import * as React from \"react\"\n\nfunction SvgPauseIcon(props) {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgPauseIcon\n","import React from \"react\"\nimport { Icon } from \"@material-ui/core\"\nimport Pause from \"./svgr/Pause\"\n\nfunction PauseIcon(props) {\n return (\n \n \n \n )\n}\n\nexport default PauseIcon\n","import React, { useRef } from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n IconButton,\n Button,\n Box,\n} from \"@material-ui/core\"\nimport ReactPlayer from \"react-player\"\nimport { useState } from \"react\"\n\n// Interfaces\nimport { IInterview } from \"../../../redux/interfaces\"\n\n// Components\nimport CloseIcon from \"../icons/CloseIcon\"\nimport PlayBoxIcon from \"../icons/PlayBoxIcon\"\nimport PauseIcon from \"../icons/PauseIcon\"\nimport Header from \"../Header/Header\"\n\nlet styles = (theme: Theme) =>\n createStyles({\n root: {\n color: theme.palette.secondary.main,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n },\n icon: {\n padding: 0,\n color: theme.palette.secondary.main,\n fontSize: \"2.5rem\",\n },\n image: {\n height: 0,\n minWidth: \"100%\",\n maxHeight: \"100%\",\n flex: \"1 1\",\n objectFit: \"cover\",\n cursor: \"pointer\",\n },\n player: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"0 1.5rem\",\n },\n title: {\n paddingLeft: \"1rem\",\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n color: theme.palette.secondary.main,\n marginBottom: 0,\n [theme.breakpoints.down(\"sm\")]: {\n fontSize: \".8rem\",\n },\n },\n author: {\n paddingLeft: \"1rem\",\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n color: theme.palette.secondary.light,\n marginTop: 0,\n [theme.breakpoints.down(\"sm\")]: {\n fontSize: \".8rem\",\n },\n },\n progressBar: {\n width: \"100%\",\n padding: \"0 1.5rem\",\n },\n track: {\n width: \"100%\",\n height: \"5px\",\n background: \"#aaa\",\n },\n progress: {\n height: \"5px\",\n background: theme.palette.primary.main,\n },\n actions: {\n display: \"flex\",\n padding: \"1.5rem\",\n width: \"100%\",\n justifyContent: \"space-between\",\n [theme.breakpoints.up(\"sm\")]: {\n justifyContent: \"flex-end\",\n \"& *\": {\n margin: \"0 2rem\",\n },\n },\n },\n spinner: {\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flex: 1,\n fontSize: \"1.25rem\",\n fontFamily: \"Cooper Black, Tourney\",\n // color: theme.palette.secondary.main,\n fontWeight: \"normal\",\n animation: \"$blinking 1.2s infinite\",\n },\n \"@keyframes blinking\": {\n \"0%\": { color: theme.palette.secondary.main },\n \"49%\": { color: theme.palette.secondary.main },\n \"60%\": { color: theme.palette.primary.main },\n \"99%\": { color: theme.palette.primary.main },\n \"100%\": { color: theme.palette.secondary.main },\n },\n })\n\ntype ClassKey =\n | \"root\"\n | \"image\"\n | \"player\"\n | \"icon\"\n | \"title\"\n | \"author\"\n | \"progressBar\"\n | \"track\"\n | \"progress\"\n | \"actions\"\n | \"spinner\"\n | \"@keyframes blinking\"\n\ntype IProps = {\n title: string\n interview: IInterview\n actions: { onClick: () => void; label: string }[]\n closeIconOnClick: () => void\n playing: boolean\n setPlaying: React.Dispatch>\n onProgress: (progress: ReactPlayerProgress) => void\n}\n\nexport interface ReactPlayerProgress {\n played: number\n playedSeconds: number\n}\n\ntype PropsType = IProps & WithStyles\n\nconst TrackPlayer: React.FC = (props: PropsType) => {\n const { classes, interview } = props\n const [localProgress, setLocalProgress] = useState(0)\n const [interviewReady, setInterviewReady] = useState(false)\n const [ambientReady, setAmbientReady] = useState(false)\n const [hasEnded, setHasEnded] = useState(false)\n const interviewRef = useRef(null)\n const progressBar = useRef(null)\n\n // Update local & store progress (more often)\n const onProgress = (progress: ReactPlayerProgress) => {\n setLocalProgress(progress.played)\n props.onProgress(progress)\n }\n\n const handleProgressBarClick = (e: React.MouseEvent) => {\n const left = progressBar.current!.offsetLeft\n const width = progressBar.current!.offsetWidth\n const pc = (e.clientX - left) / width\n if (interviewRef && interviewRef.current) {\n interviewRef.current.seekTo(pc)\n }\n }\n\n const playOrPause = () => props.setPlaying((playing) => !playing)\n console.log(interviewReady, ambientReady, interview)\n return (\n
\n \n \n \n }\n title={props.title}\n small={true}\n backgroundColor=\"white\"\n color=\"black\"\n />\n {interviewReady && ambientReady ? (\n \n ) : (\n \n Loading audio...\n {/* */}\n \n )}\n\n
\n {props.playing ? (\n \n \n \n ) : (\n \n \n \n )}\n
\n

{interview?.title}

\n

{interview?.author}

\n
\n
\n
\n \n
\n
\n \n
\n {props.actions &&\n props.actions.map((action, index) => (\n \n {action.label}\n \n ))}\n
\n
\n setInterviewReady(true)}\n onProgress={onProgress}\n onEnded={() => setHasEnded(true)}\n config={{\n file: {\n forceAudio: true,\n hlsOptions: {\n xhrSetup: function (xhr, url) {\n xhr.setRequestHeader(\n \"Authorization\",\n `Bearer ${localStorage.getItem(\"accessToken\")}`,\n )\n },\n },\n },\n }}\n />\n setAmbientReady(true)}\n onSeek={(s) => console.log(`seeking ${s}`)}\n config={{\n file: {\n forceAudio: true,\n hlsOptions: {\n xhrSetup: function (xhr, url) {\n xhr.setRequestHeader(\n \"Authorization\",\n `Bearer ${localStorage.getItem(\"accessToken\")}`,\n )\n },\n },\n },\n }}\n />\n
\n \n )\n}\n\nexport default withStyles(styles)(TrackPlayer)\n","import React, { useEffect, useState } from \"react\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\nimport emojis from \"../../../common/entities/EmojiList\"\nimport cslx from \"clsx\"\nimport { Emoji } from \"../../../common/entities/Emoji\"\n\nlet styles = (theme: Theme) =>\n createStyles({\n root: {\n color: \"#bbb\",\n background: \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n fontFamily: \"Sans-Serif\",\n fontSize: \"0.8rem\",\n },\n image: {\n width: \"75%\",\n cursor: \"pointer\",\n transitionProperty: \"width, max-width, min-width, margin\",\n transitionDuration: \"0.1s\",\n transitionTimingFunction: \"ease\",\n filter: \"grayscale(0.9)\",\n },\n imageChecked: {\n width: \"100%\",\n background: \"transparent\",\n filter: \"none\",\n },\n fieldset: {\n margin: \"0px\",\n border: `1px solid #bbb`,\n display: \"flex\",\n flexWrap: \"wrap\",\n },\n radio: {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: \"0\",\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0,0,0,0)\",\n border: \"0\",\n },\n wrapper: {\n flex: \"1 1\",\n aspectRatio: \"1\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n label: {\n width: \"100%\",\n maxWidth: \"5rem\",\n height: \"100%\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n })\n\ntype ClassKey =\n | \"root\"\n | \"image\"\n | \"fieldset\"\n | \"radio\"\n | \"imageChecked\"\n | \"wrapper\"\n | \"label\"\n\ntype IProps = {}\n\ntype PropsType = IProps &\n WithStyles & { onEmojiSelected: (emoji: Emoji) => void }\n\nconst EmojiPicker: React.FC = (props: PropsType) => {\n const { classes, onEmojiSelected } = props\n\n const emojiOptions = emojis\n\n const [selectedEmoji, setSelectedEmoji] = useState(\n undefined,\n )\n\n useEffect(() => {\n if (selectedEmoji !== undefined) {\n onEmojiSelected(selectedEmoji)\n }\n }, [selectedEmoji, onEmojiSelected])\n\n return (\n
\n
\n Pick a feeling to send\n {emojiOptions\n .filter((emoji) => emoji.name.includes(\"positive\"))\n .map((it, index) => {\n const isSelected: boolean = selectedEmoji === it\n const strIndex = JSON.stringify(index)\n const path = \"/images/emoji/\" + it.fileName\n return (\n
\n \n setSelectedEmoji(it)}\n className={classes.label}\n >\n \n \n
\n )\n })}\n
\n
\n )\n}\n\nexport default withStyles(styles)(EmojiPicker)\n","import React, { useCallback, useEffect, useState } from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n Button,\n TextField,\n} from \"@material-ui/core\"\nimport EmojiPicker from \"./EmojiPicker\"\nimport { Emoji } from \"../../../common/entities/Emoji\"\nimport { PostFeedback } from \"../../../common/usecases/PostFeedback\"\n\nlet styles = (theme: Theme) =>\n createStyles({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n overflow: \"auto\",\n height: \"100%\",\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n },\n form: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"flex-end\",\n padding: \"1.5rem\",\n flex: 1,\n \"& > *\": {\n marginBottom: \"2rem\",\n },\n },\n preview: {\n flex: 1,\n color: theme.palette.secondary.main,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n \"& > img\": {\n width: \"3rem\",\n paddingTop: \"1.5rem\",\n },\n },\n })\n\ntype ClassKey = \"root\" | \"form\" | \"preview\"\n\ntype IProps = {\n onClose: () => void\n mediaId: string\n}\n\ntype PropsType = IProps & WithStyles\n\nconst InterviewFeedback: React.FC = (props: PropsType) => {\n const { classes, mediaId, onClose } = props\n const [message, setMessage] = useState(\"\")\n const [selectedEmoji, setSelectedEmoji] = useState(null)\n const [validated, setValidated] = useState(false)\n\n useEffect(() => {\n setValidated(message !== \"\" && selectedEmoji !== null)\n }, [message, selectedEmoji])\n\n const submit = useCallback(\n (message, selectedEmoji) =>\n PostFeedback({\n message: message,\n emoji: selectedEmoji!!.name,\n mediaId: mediaId,\n })\n .catch((err) => alert(err))\n .then(() => onClose()),\n [mediaId, onClose],\n )\n\n return (\n
\n
\n
\n {message}\n {selectedEmoji && (\n \n )}\n
\n setMessage(event.target.value)}\n autoFocus={true}\n />\n\n setSelectedEmoji(emoji)}\n >\n\n submit(message, selectedEmoji)}\n >\n Submit\n \n \n
\n )\n}\n\nexport default withStyles(styles)(InterviewFeedback)\n","import React, { useState, useEffect } from \"react\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\nimport { RouteComponentProps, useHistory } from \"react-router\"\n\n// Components\nimport BurstPlayer from \"./BurstPlayer\"\nimport TrackPlayer, {\n ReactPlayerProgress,\n} from \"../../../common/components/TrackPlayer/TrackPlayer\"\nimport InterviewFeedback from \"../SubmitFeedback/InterviewFeedback\"\nimport ModalBox from \"../../../common/components/ModalBox\"\n\n// Interfaces\nimport { IInterview } from \"../../../redux/interfaces\"\n\n// State\nimport { useAppDispatch, useAppSelector } from \"../../../redux/hooks\"\nimport {\n refreshProgress,\n progressInterview,\n} from \"../../../redux/library/LibrarySlice\"\nimport { Progress } from \"../../../common/entities/Progress\"\n\nlet styles = (theme: Theme) =>\n createStyles({\n root: {\n color: theme.palette.primary.main,\n background: \"none\",\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n })\n\ntype ClassKey = \"root\"\n\ntype IMatchProps = {\n interviewId: string\n}\n\ntype IProps = {}\n\ntype PropsType = RouteComponentProps &\n IProps &\n WithStyles\n\ntype OverlayState = \"feedback\" | \"burst\" | \"interview\"\n\nconst Player: React.FC = (props: PropsType) => {\n const { classes } = props\n const interviewId = props.match.params.interviewId\n const dispatch = useAppDispatch()\n const [overlay, setOverlay] = useState(\"interview\")\n const history = useHistory()\n const [playing, setPlaying] = useState(false)\n const [thisProgress, setThisProgress] = useState()\n\n useEffect(() => {\n dispatch(refreshProgress())\n .unwrap()\n .then((progressList) => {\n // Check if this is the first time this interview was selected\n const progressQuery: Progress | undefined = progressList.find(\n (p) => p.mediaId === interviewId,\n )\n if (progressQuery === undefined || progressQuery.order === undefined) {\n console.log(\"first time\", interviewId, progressList)\n const newProgress: Progress = {\n mediaId: interviewId,\n progress: 0,\n order: progressList.length,\n }\n setThisProgress(newProgress)\n dispatch(progressInterview(newProgress))\n } else if (progressQuery) {\n setThisProgress(progressQuery)\n }\n })\n }, [dispatch, interviewId, thisProgress])\n\n const onProgress = (progress: ReactPlayerProgress) => {\n if (thisProgress && progress.played > interview.progress) {\n dispatch(\n progressInterview({\n mediaId: interview.id,\n progress: Math.max(progress.played, interview.progress),\n order: thisProgress.order,\n }),\n )\n }\n }\n\n useEffect(() => {\n document.title = `AGAM21 | Experiential | Audio | ${interviewId}`\n }, [interviewId, overlay])\n\n const interview: IInterview = useAppSelector(\n (store) =>\n store.libraryState.interviews.find((t) => t.id === interviewId) ||\n store.libraryState.interviews[0],\n )\n\n return (\n
\n {interview.order !== undefined && (\n history.push(\"/experiential\")}\n actions={[\n {\n label: \"Watch\",\n onClick: () => {\n setPlaying(false)\n setOverlay(\"burst\")\n },\n },\n { label: \"feedback\", onClick: () => setOverlay(\"feedback\") },\n ]}\n />\n )}\n setOverlay(\"interview\")}\n >\n {interview.order !== undefined && }\n \n setOverlay(\"interview\")}\n >\n setOverlay(\"interview\")}\n />\n \n
\n )\n}\n\nexport default withStyles(styles)(Player)\n","import { useHistory } from \"react-router\"\nimport { useAppDispatch } from \"../../redux/hooks\"\nimport IEvent from \"../entities/Event\"\nimport IAction from \"../entities/Action\"\nimport { clearEnd } from \"../usecases/CountDown\"\nimport { gameActions, progressGame } from \"../../redux/games/GameSlice\"\nimport { progressAllVideos } from \"../../redux/library/LibrarySlice\"\n\ntype EventLibrary = {\n [mediaId: string]: {\n delay?: number\n at?: number\n event: IEvent | (() => IEvent)\n }[]\n}\n\nconst useEvents = (\n videoId: string,\n componentActions: {\n resume: () => void\n schedule: (event: IEvent | (() => IEvent), delay: number) => void\n },\n) => {\n const history = useHistory()\n const dispatch = useAppDispatch()\n\n const withTimeDown = (\n secondsLeft: number,\n event: IEvent,\n onTimeOut: () => void,\n first = true,\n ): IEvent => {\n const timeout = setTimeout(\n () => {\n if (secondsLeft > 0) {\n componentActions.schedule(\n withTimeDown(secondsLeft - 1, event, onTimeOut, false),\n 0,\n )\n } else {\n onTimeOut()\n }\n },\n first ? 0 : 1e3,\n )\n const text = event.text + `\\n (${secondsLeft} seconds)`\n const actions = [...event.actions].map((a) => ({\n label: a.label,\n onClick: () => {\n clearTimeout(timeout)\n a.onClick()\n },\n }))\n return { text, actions }\n }\n\n // const gameOver: IEvent = {\n // text: \"Game Over\",\n // actions: [\n // {\n // label: \"Play some more\",\n // onClick: () => {\n // history.push(\"/fast-track\")\n // },\n // },\n // {\n // label: \"Try experiential\",\n // onClick: () => {\n // history.push(\"/\")\n // },\n // },\n // ],\n // }\n\n const tooMuchPressure: IEvent = {\n text: \"We got you in the end.\\n A little pressure goes a long way.\\n\\nBye bye.\",\n actions: [\n // TODO: Do this with a screenshot so they are not actually sent out\n\n {\n label: \"Continue\",\n onClick: () =>\n window.location.replace(\"https://html.spec.whatwg.org/multipage/\"),\n },\n ],\n }\n\n const wasteTimeAndComeBack = (next) =>\n withTimeDown(\n 10,\n {\n text: \"You are wasting precious time...\",\n actions: [],\n },\n () => componentActions.schedule(next, 0),\n )\n\n const distractionEvents: IEvent[] = [\n {\n text: \"Would you like to be called by our advisors regarding a holiday in your favourite location? We can dial you in right now! (1/4)\",\n actions: [\n {\n label: \"YES\",\n onClick: () => wasteTimeAndComeBack(distractionEvents[0]),\n },\n {\n label: \"NO\",\n onClick: () => {\n componentActions.schedule(distractionEvents[1], 0)\n },\n },\n ],\n },\n {\n text: \"Would you like to use a VIP fast track route to the silver bar? It should take only 10 years, ready to discuss this in our special team? (2/4)\",\n actions: [\n {\n label: \"NO\",\n onClick: () => {\n componentActions.schedule(distractionEvents[2], 0)\n },\n },\n {\n label: \"YES\",\n onClick: () => wasteTimeAndComeBack(distractionEvents[1]),\n },\n ],\n },\n {\n text: \"Would you like not to book a window seat in the office for the rest of your life? Should I not open the booking app right now? It will only take 2 days to fill in the schedule. (3/4)\",\n actions: [\n {\n label: \"NO\",\n onClick: () => wasteTimeAndComeBack(distractionEvents[2]),\n },\n {\n label: \"YES\",\n onClick: () => {\n componentActions.schedule(distractionEvents[3], 0)\n },\n },\n ],\n },\n {\n text: \"Would you like to be preselected to present a burst at a prestigious conference for the next 20 years? This is a coordination call starting now. Shall we dial in? There is plenty of time... (4/4)\",\n actions: [\n {\n label: \"NO\",\n onClick: componentActions.resume,\n },\n {\n label: \"YES\",\n onClick: () => wasteTimeAndComeBack(distractionEvents[3]),\n },\n ],\n },\n ]\n\n const playSlotMachine = () => {\n dispatch(progressGame({ game: \"slotMachine\", score: 500 }))\n .then(() =>\n dispatch(\n gameActions.setSlotMachineChallenge({\n target: 501,\n outcomeId: \"v3\",\n }),\n ),\n )\n .then(() => history.push(\"/fast-track/slotmachine\"))\n }\n\n const eventLibrary: EventLibrary = {\n v1: [\n {\n at: 40,\n event: {\n text: \"Are you ready for this?\",\n actions: [\n {\n label: \"Yes\",\n onClick: () => componentActions.resume(),\n },\n {\n label: \"No\",\n onClick: () => history.push(\"/experimental/\"),\n },\n ],\n },\n },\n {\n at: 60 + 12,\n event: {\n title: \"Terms and Conditions\",\n text: \"I am happy to spend the next year hand-editing html to get a chance to pay this game\",\n textStyle: {\n fontFamily: \"Wingdings\",\n },\n actions: [\n {\n label: \"yes\",\n onClick: () => {\n const next: IEvent = {\n text: \"Let me clarify the Terms and Conditions: Do you agree to spend the next year hand-editing html to pay for this game?\",\n actions: [\n {\n label: \"yes\",\n // TODO: Do this with a screenshot so they are not actually sent out\n onClick: () =>\n window.location.replace(\n \"https://html.spec.whatwg.org/multipage/\",\n ),\n },\n {\n label: \"no\",\n onClick: componentActions.resume,\n },\n ],\n }\n componentActions.schedule(next, 0)\n },\n },\n {\n label: \"no\",\n onClick: () => {\n const next: IEvent = {\n text: \"Well spotted! This a classic technique: deception\",\n actions: [\n {\n label: \"Continue\",\n onClick: componentActions.resume,\n },\n ],\n }\n componentActions.schedule(next, 0)\n },\n },\n ],\n },\n },\n ],\n v2: [],\n v3: [\n {\n at: 38,\n event: {\n text: `Warning! You must accept the Terms and Conditions in order to proceed.\\n\n This is your last chance to accept. And time is running out. Do you accept?`,\n actions: [\n {\n label: \"OK\",\n onClick: () => componentActions.schedule(tooMuchPressure, 0),\n },\n {\n label: \"NO\",\n onClick: () => {\n const dontAccept: IAction = {\n label: \"NO\",\n onClick: () => {\n const next: IEvent = {\n text: \"Well done!\\n As odd as it may seem, everybody using a computer has accepted some of the most unfriendly and obscure Terms and Conditions, even without reading them!\",\n actions: [\n {\n label: \"Continue\",\n onClick: componentActions.resume,\n },\n ],\n }\n componentActions.schedule(next, 0)\n },\n }\n componentActions.schedule(\n withTimeDown(\n 30,\n {\n text: \"We have given you more time to reflect. Do you accept the Terms and Conditions? Remember you have a limited time for the game... hurry up!\",\n actions: [\n {\n label: \"OK\",\n onClick: () =>\n componentActions.schedule(tooMuchPressure, 0),\n },\n dontAccept,\n ],\n },\n dontAccept.onClick,\n ),\n 0,\n )\n },\n },\n ],\n },\n },\n {\n at: 49,\n event: () =>\n withTimeDown(\n 20,\n {\n text: \"You have just been selected to unlock the whole game by gambling all your progress at the slot machines.\\nYou have 20 seconds to make up your mind. Otherwise, we assume that you whish to go and try.\",\n actions: [\n {\n label: \"GO\",\n onClick: playSlotMachine,\n },\n {\n label: \"CONTINUE\",\n onClick: componentActions.resume,\n },\n ],\n },\n playSlotMachine,\n ),\n },\n ],\n v4: [\n {\n at: 47,\n event: distractionEvents[0],\n },\n {\n at: 54,\n event: {\n text: \"Would you like to learn more about the Dark UX or play Tetris?\",\n actions: [\n {\n label: \"Learn\",\n onClick: componentActions.resume,\n },\n {\n label: \"Play\",\n onClick: () => {\n dispatch(\n gameActions.setTetrisChallenge({\n target: 100,\n outcomeId: \"v4\",\n }),\n )\n history.push(\"/fast-track/tetris\")\n },\n },\n ],\n },\n },\n ],\n v5: [\n {\n at: 24,\n event: {\n text: \"Think carefully, which one is the Right Choice?\",\n actions: [\n {\n label: \"Use public transport\",\n onClick: () => {\n clearEnd()\n dispatch(progressAllVideos(0))\n componentActions.schedule(\n {\n text: \"Good choice but you lost the game. There are more interesting things awaiting you.\",\n actions: [\n {\n label: \"Back to course\",\n onClick: componentActions.resume,\n },\n {\n label: \"Go elsewhere\",\n onClick: () => history.push(\"/\"),\n },\n ],\n },\n 0,\n )\n },\n },\n {\n label: \"Go vegan\",\n onClick: () => {\n clearEnd()\n dispatch(progressAllVideos(0))\n componentActions.schedule(\n {\n text: \"Good choice but you lost the game. There are more interesting things awaiting you.\",\n actions: [\n {\n label: \"Back to course\",\n onClick: componentActions.resume,\n },\n {\n label: \"Go elsewhere\",\n onClick: () => history.push(\"/\"),\n },\n ],\n },\n 0,\n )\n },\n },\n {\n label: \"Go to next video\",\n onClick: () => {\n componentActions.schedule(\n {\n text: \"Great choice for you, but worst for the world\",\n actions: [\n {\n label: \"Continue\",\n onClick: componentActions.resume,\n },\n ],\n },\n 0,\n )\n },\n },\n ],\n },\n },\n ],\n v6: [\n {\n at: 60 + 43,\n event: {\n text: \"Did you get a chance to play these games before? Would you like to try now?\",\n actions: [\n {\n label: \"Tetris\",\n onClick: () => {\n dispatch(\n gameActions.setTetrisChallenge({\n target: 200,\n outcomeId: \"v6\",\n }),\n )\n history.push(\"/fast-track/tetris\")\n },\n },\n {\n label: \"Slot Machine\",\n onClick: () =>\n dispatch(progressGame({ game: \"slotMachine\", score: 500 }))\n .then(() =>\n dispatch(\n gameActions.setSlotMachineChallenge({\n target: 501,\n outcomeId: \"v6\",\n }),\n ),\n )\n .then(() => history.push(\"/fast-track/slotmachine\")),\n },\n {\n label: \"No thanks\",\n onClick: componentActions.resume,\n },\n ],\n },\n },\n {\n at: 149,\n event: {\n text: \"Well done!\",\n actions: [\n {\n label: \"Play some more or leave feedback\",\n onClick: () => {\n dispatch(\n progressGame({ game: \"slotMachine\", score: 3000 }),\n ).then(() => componentActions.resume())\n },\n },\n {\n label: \"Go elsewhere\",\n onClick: () => {\n dispatch(\n progressGame({ game: \"slotMachine\", score: 3000 }),\n ).then(() =>\n dispatch(progressAllVideos(1)).then(() =>\n history.push(\"/experimental/\"),\n ),\n )\n },\n },\n ],\n },\n },\n ],\n }\n return eventLibrary\n}\n\nexport default useEvents\n","import React, { useCallback, useEffect, useRef } from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n IconButton,\n} from \"@material-ui/core\"\nimport ReactPlayer from \"react-player\"\n\n// Interfaces\nimport { IVideo } from \"../../redux/interfaces\"\nimport IEvent from \"../entities/Event\"\n\n// State\nimport { RouteComponentProps, useHistory } from \"react-router\"\nimport { useAppDispatch, useAppSelector } from \"../../redux/hooks\"\nimport { progressVideo } from \"../../redux/library/LibrarySlice\"\n\n// Components\nimport Frame from \"../../common/components/Frame/Frame\"\nimport CloseIcon from \"../../common/components/icons/CloseIcon\"\nimport PlayBoxIcon from \"../../common/components/icons/PlayBoxIcon\"\nimport PauseIcon from \"../../common/components/icons/PauseIcon\"\nimport MessageBox from \"./MessageBox\"\nimport useEvents from \"../hooks/useEvents\"\n\nlet styles = (theme: Theme) =>\n createStyles({\n root: {\n color: theme.palette.primary.main,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"start\",\n maxWidth: 800,\n margin: \"auto\",\n \"& video\": {\n display: \"flex\",\n width: \"100%\",\n },\n padding: \"1rem 2rem\",\n },\n icon: {\n paddingLeft: 0,\n color: theme.palette.primary.main,\n fontSize: \"3rem\",\n },\n header: {\n fontFamily: \"Digitek, Tourney\",\n fontSize: \"1.5rem\",\n lineHeight: \"1.5rem\",\n display: \"flex\",\n alignItems: \"center\",\n flexGrow: 1,\n justifyContent: \"space-between\",\n },\n controls: {\n display: \"flex\",\n alignItems: \"center\",\n flexGrow: 1,\n margin: \"0 1rem\",\n },\n timer: {\n fontFamily: \"Tourney\",\n fontSize: \"2.5rem\",\n fontWeight: \"bold\",\n display: \"block\",\n height: 0,\n width: \"10rem\",\n position: \"relative\",\n left: \"calc(100% - 8rem)\",\n top: \"-2rem\",\n zIndex: 100,\n },\n title: {\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n color: theme.palette.primary.main,\n marginBottom: 0,\n },\n author: {\n fontFamily: \"Roboto Mono, Consolas, Courier New\",\n color: theme.palette.secondary.light,\n marginTop: 0,\n },\n track: {\n width: \"100%\",\n height: \"5px\",\n background: theme.palette.secondary.main,\n },\n progress: {\n height: \"5px\",\n background: theme.palette.primary.main,\n },\n })\n\ntype ClassKey =\n | \"root\"\n | \"header\"\n | \"controls\"\n | \"timer\"\n | \"icon\"\n | \"title\"\n | \"author\"\n | \"track\"\n | \"progress\"\n\ntype IMatchProps = {\n videoId: string\n}\n\ninterface IProgress {\n played: number\n playedSeconds?: number\n}\n\ntype IProps = {}\n\ntype PropsType = RouteComponentProps &\n IProps &\n WithStyles\n\nconst FastTrackPlayer: React.FC = (props: PropsType) => {\n const { classes } = props\n const player = useRef(null)\n const [event, setEvent] = React.useState(null)\n const [isPlaying, setIsPlaying] = React.useState(false)\n const [eventAtHistory, setEventAtHistory] = React.useState([])\n const [progress, setProgress] = React.useState({\n played: 0,\n playedSeconds: 0,\n })\n const history = useHistory()\n const dispatch = useAppDispatch()\n\n const video: IVideo = useAppSelector(\n (store) =>\n store.libraryState.videos.find(\n (v) => v.id === props.match.params.videoId,\n ) || store.libraryState.videos[0],\n )\n\n const formatProgress = useCallback((progress: number) => {\n const minutes = Math.floor(progress / 60).toLocaleString(undefined, {\n maximumFractionDigits: 0,\n minimumIntegerDigits: 2,\n })\n const seconds = Math.floor(progress % 60).toLocaleString(undefined, {\n maximumFractionDigits: 0,\n minimumIntegerDigits: 2,\n })\n return `${minutes}:${seconds}`\n }, [])\n\n const scheduleDelayedEvent = useCallback(\n (event: IEvent | (() => IEvent), delay: number) => {\n const askQuestion = () => {\n setIsPlaying(false)\n setEvent(typeof event === \"function\" ? event() : event)\n }\n setTimeout(() => {\n askQuestion()\n }, delay)\n },\n [],\n )\n\n const eventLibrary = useEvents(video.id, {\n resume: () => {\n setEvent(null)\n setIsPlaying(true)\n },\n schedule: scheduleDelayedEvent,\n })\n\n const renderMessageBox = (event: IEvent) => {\n return (\n event !== undefined && (\n \n {event.text}\n \n )\n )\n }\n\n useEffect(() => {\n document.title = `AGAM21 | Fast Track | Video | ${video.id}`\n }, [video.id])\n\n return (\n <>\n \n
\n
\n

fast track

\n history.push(\"/fast-track/\")}\n >\n \n \n
\n
\n setIsPlaying(!isPlaying)}\n >\n {isPlaying ? (\n \n ) : (\n \n )}\n \n
\n

{video?.title}

\n

{video?.author}

\n
\n
\n
setIsPlaying(!isPlaying)}>\n
\n {formatProgress(progress.playedSeconds || 0)}\n
\n {\n if (player.current) {\n player.current.seekTo(video.progress * duration, \"seconds\")\n setIsPlaying(true)\n }\n }}\n onPause={() => setIsPlaying(false)}\n onPlay={() => setIsPlaying(true)}\n onProgress={(p: IProgress) => {\n setProgress({\n played: p.played,\n playedSeconds: p.playedSeconds || 0,\n })\n const eventLibItem = eventLibrary[video.id].find(\n (e) => e.at === Math.floor(p.playedSeconds || 0),\n )\n const eventItem = eventLibItem\n if (eventItem && !eventAtHistory.includes(eventItem.at!)) {\n setIsPlaying(false)\n setEvent(eventItem.event)\n setEventAtHistory((h) => [...h, eventItem.at!])\n }\n }}\n onEnded={() => {\n setIsPlaying(false)\n dispatch(\n progressVideo({\n mediaId: video.id,\n progress: 1,\n }),\n ).then((_) => history.push(\"/fast-track/\"))\n }}\n />\n
\n
\n
\n
\n {event !== null && renderMessageBox(event)}\n \n \n \n )\n}\n\nexport default withStyles(styles)(FastTrackPlayer)\n","import React, { useEffect } from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n Button,\n} from \"@material-ui/core\"\n\nimport { useHistory } from \"react-router\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n minHeight: \"100%\",\n flexDirection: \"column\",\n padding: \"4rem 4rem 8rem 4rem\",\n background: \"#111\",\n backgroundSize: \"cover\",\n display: \"flex\",\n justifyContent: \"start\",\n },\n text: {\n fontFamily: \"Sans-serif\",\n fontWeight: \"bold\",\n color: theme.palette.primary.main,\n fontSize: \"2rem\",\n },\n button: {\n marginTop: \"2.8rem\",\n fontFamily: \"Sans-serif\",\n fontSize: \"1.5rem\",\n },\n })\n\ninterface IProps {\n onClose: () => void\n overrideText?: string\n}\ntype ClassKey = \"root\" | \"text\" | \"button\"\ntype PropsType = IProps & WithStyles\n\nconst MobileDeadEnd: React.FC = (props) => {\n const { classes } = props\n const history = useHistory()\n useEffect(() => {\n document.title = `AGAM21 | Mobile Dead End`\n })\n return (\n
\n
\n {props.overrideText\n ? props.overrideText\n : '\"Fortunately\" the Fast Track route is best in the office. Please come back to this page from your desktop computer.'}\n
\n history.push(\"/\")}\n className={classes.button}\n >\n {\"Thank you\"}\n \n
\n )\n}\n\nexport default withStyles(styles)(MobileDeadEnd)\n","export const STAGE_WIDTH = 10\nexport const STAGE_HEIGHT = 20\n\nexport const createStage = () =>\n Array.from(Array(STAGE_HEIGHT), () =>\n new Array(STAGE_WIDTH).fill([0, \"clear\"]),\n )\n\nexport const checkCollision = (player, stage, { x: moveX, y: moveY }) => {\n for (let y = 0; y < player.tetromino.length; y++) {\n for (let x = 0; x < player.tetromino.length; x++) {\n if (player.tetromino[y][x] !== 0) {\n if (\n !stage[y + player.pos.y + moveY] ||\n !stage[y + player.pos.y + moveY][x + player.pos.x + moveX] ||\n stage[y + player.pos.y + moveY][x + player.pos.x + moveX][1] !==\n \"clear\"\n ) {\n return true\n }\n }\n }\n }\n}\n","export const TETROMINOS = {\n 0: { shape: [[0]], color: \"rgb(62,62,62)\" },\n I: {\n shape: [\n [0, \"I\", 0, 0],\n [0, \"I\", 0, 0],\n [0, \"I\", 0, 0],\n [0, \"I\", 0, 0],\n ],\n color: \"rgb(148, 6, 6)\",\n },\n J: {\n shape: [\n [0, \"J\", 0],\n [0, \"J\", 0],\n [\"J\", \"J\", 0],\n ],\n color: \"rgb(168, 46, 36)\",\n },\n L: {\n shape: [\n [0, \"L\", 0],\n [0, \"L\", 0],\n [0, \"L\", \"L\"],\n ],\n color: \"rgb(186, 73, 63)\",\n },\n O: {\n shape: [\n [\"O\", \"O\"],\n [\"O\", \"O\"],\n ],\n color: \"rgb(202, 99, 91)\",\n },\n S: {\n shape: [\n [0, \"S\", \"S\"],\n [\"S\", \"S\", 0],\n [0, 0, 0],\n ],\n color: \"rgb(217, 125, 119)\",\n },\n T: {\n shape: [\n [\"T\", \"T\", \"T\"],\n [0, \"T\", 0],\n [0, 0, 0],\n ],\n color: \"rgb(231, 151, 147)\",\n },\n Z: {\n shape: [\n [\"Z\", \"Z\", 0],\n [0, \"Z\", \"Z\"],\n [0, 0, 0],\n ],\n color: \"rgb(255, 203, 203)\",\n },\n}\n\nexport const randomTetromino = () => {\n const tetrominos = \"IJLOSTZ\"\n const randTetromino =\n tetrominos[Math.floor(Math.random() * tetrominos.length)]\n return TETROMINOS[randTetromino]\n}\n","import { useState, useEffect } from \"react\"\nimport { createStage } from \"../utils/gameHelpers\"\n\nexport const useStage = (player, resetPlayer) => {\n const [stage, setStage] = useState(createStage())\n const [rowsCleared, setRowsCleared] = useState(0)\n\n useEffect(() => {\n setRowsCleared(0)\n\n const sweepRows = (newStage) =>\n newStage.reduce((ack, row) => {\n if (row.findIndex((cell) => cell[0] === 0) === -1) {\n setRowsCleared((prev) => prev + 1)\n ack.unshift(new Array(newStage[0].length).fill([0, \"clear\"]))\n return ack\n }\n ack.push(row)\n return ack\n }, [])\n\n const updateStage = (prevStage) => {\n // Flush stage\n const newStage = prevStage.map((row) =>\n row.map((cell) => (cell[1] === \"clear\" ? [0, \"clear\"] : cell)),\n )\n\n // Draw tetromino\n player.tetromino.forEach((row, y) => {\n row.forEach((value, x) => {\n if (value !== 0) {\n newStage[y + player.pos.y][x + player.pos.x] = [\n value,\n `${player.collided ? \"merged\" : \"clear\"}`,\n ]\n }\n })\n })\n\n if (player.collided) {\n resetPlayer()\n return sweepRows(newStage)\n }\n\n return newStage\n }\n\n setStage((prev) => updateStage(prev))\n }, [player, resetPlayer])\n\n return [stage, setStage, rowsCleared]\n}\n","import { useState, useEffect, useCallback, useMemo } from \"react\"\n\nexport const useGameStatus = (rowsCleared) => {\n const [score, setScore] = useState(0)\n const [rows, setRows] = useState(0)\n const [level, setLevel] = useState(0)\n\n const linePoints = useMemo(() => [40, 100, 300, 1200], [])\n\n const calcScore = useCallback(() => {\n if (rowsCleared > 0) {\n setScore((prev) => prev + linePoints[rowsCleared - 1] * (level + 1))\n setRows((prev) => prev + rowsCleared)\n }\n }, [level, linePoints, rowsCleared])\n\n useEffect(() => {\n calcScore()\n }, [calcScore, rowsCleared, score])\n\n return [score, setScore, rows, setRows, level, setLevel]\n}\n","import React from \"react\"\nimport { TETROMINOS } from \"../utils/tetrominos\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n border: `0.1px solid rgba(255, 255, 255, 0.308)`,\n },\n })\n\ntype ClassKey = \"root\"\ninterface IProps {\n type: \"string\"\n}\ntype PropsType = IProps & WithStyles\n\nconst Cell: React.FC = (props) => {\n const { type, classes } = props\n return (\n \n )\n}\n\nexport default withStyles(styles)(Cell)\n","import React from \"react\"\nimport Cell from \"./Cell\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n border: \"3px solid white\",\n height: \"60vh\",\n width: \"calc(60vh * 0.5)\",\n display: \"grid\",\n gridTemplateColumns: \"repeat(10, 1fr)\",\n gridTemplateRows: \" repeat(20, 1fr)\",\n outlineStyle: \"none\",\n background: theme.palette.secondary.light,\n },\n })\n\ntype ClassKey = \"root\"\ninterface IProps {\n stage: any[][]\n}\ntype PropsType = IProps & WithStyles\n\nconst Stage: React.FC = (props) => {\n const { stage, classes } = props\n return (\n
\n {stage.map((row) =>\n row.map((cell, x) => {\n return \n }),\n )}\n
\n )\n}\n\nexport default withStyles(styles)(Stage)\n","import React, { useState, useEffect, useCallback } from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n Button,\n} from \"@material-ui/core\"\nimport KeyboardEventHandler from \"react-keyboard-event-handler\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n fontFamily: \"'Press Start 2P'\",\n \"& span\": {\n fontFamily: \"'Press Start 2P'\",\n },\n alignItems: \"center\",\n background: \"#111\",\n border: `1px solid ${theme.palette.primary.main}`,\n padding: \"2rem\",\n },\n buttons: {\n display: \"flex\",\n justifyContent: \"space-around\",\n \"& > *\": {\n margin: \"1em\",\n },\n },\n message: {\n textAlign: \"center\",\n marginBottom: \"1rem\",\n },\n })\n\ntype ClassKey = \"root\" | \"buttons\" | \"message\"\n\ninterface IAction {\n label: string\n onClick: () => void\n}\n\ninterface IProps {\n message: string\n actions: IAction[]\n}\n\ntype PropsType = IProps & WithStyles\n\nconst GameMessageBox = React.forwardRef(\n (props, forwardedRef) => {\n const { actions, message, classes } = props\n const [focusId, setFocusId] = useState(0)\n\n const handleKeyPress = useCallback(\n (key) => {\n const mod = (n, m) => ((n % m) + m) % m\n if (key === \"left\") {\n setFocusId((f) => mod(f - 1, actions.length))\n } else if (key === \"right\") {\n setFocusId((f) => mod(f + 1, actions.length))\n }\n },\n [actions.length],\n )\n\n useEffect(\n () => document.getElementById(`dialogAction${focusId}`)?.focus(),\n [focusId],\n )\n\n return (\n
\n handleKeyPress(key)}\n isExclusive={true}\n >\n
{message}
\n
\n {actions.map((a, i) => (\n \n {a.label}\n \n ))}\n
\n \n
\n )\n },\n)\nGameMessageBox.displayName = \"GameMessageBox\"\n\nexport default withStyles(styles)(GameMessageBox)\n","import { useHistory } from \"react-router\"\nimport { useAppDispatch } from \"../../redux/hooks\"\nimport { progressVideo } from \"../../redux/library/LibrarySlice\"\n\nexport interface IGameOutcome {\n onWin: () => void\n onLoose: () => void\n}\n\nexport type GameOutcomeIdType = \"v3\" | \"v4\" | \"v6\"\n\nconst useOutcome = (\n outcomeId?: GameOutcomeIdType,\n): IGameOutcome | undefined => {\n // const dispatch = useAppDispatch()\n const dispatch = useAppDispatch()\n const history = useHistory()\n\n const outcomes = {\n v3: {\n onWin: () =>\n dispatch(progressVideo({ mediaId: \"v3\", progress: 1 })).then(() =>\n history.push(\"/fast-track/\"),\n ),\n onLoose: () =>\n dispatch(progressVideo({ mediaId: \"v3\", progress: 0 })).then(() =>\n history.push(\"/fast-track/video/v3/\"),\n ),\n },\n v4: {\n onWin: () => {\n dispatch(progressVideo({ mediaId: \"v4\", progress: 0.99 })).then(() => {\n history.push(\"/fast-track/video/v4/\")\n })\n },\n onLoose: () => {\n dispatch(progressVideo({ mediaId: \"v4\", progress: 0.99 })).then(() => {\n history.push(\"/fast-track/video/v4/\")\n })\n },\n },\n v6: {\n onWin: () => {\n dispatch(progressVideo({ mediaId: \"v6\", progress: 103 / 149 })).then(\n (_) => {\n history.push(\"/fast-track/video/v6/\")\n },\n )\n },\n onLoose: () => {\n dispatch(progressVideo({ mediaId: \"v6\", progress: 103 / 149 })).then(\n () => {\n history.push(\"/fast-track/video/v6/\")\n },\n )\n },\n },\n }\n return outcomeId !== undefined ? outcomes[outcomeId] : undefined\n}\n\nexport default useOutcome\n","import React, { useState, useEffect } from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n Modal,\n IconButton,\n} from \"@material-ui/core\"\nimport KeyboardEventHandler from \"react-keyboard-event-handler\"\nimport { createStage, checkCollision } from \"./utils/gameHelpers\"\n\n// Hooks\nimport { usePlayer } from \"./hooks/usePlayer\"\nimport { useStage } from \"./hooks/useStage\"\nimport { useInterval } from \"./hooks/useInterval\"\nimport { useGameStatus } from \"./hooks/useGameStatus\"\n\n// Components\nimport Stage from \"./components/Stage\"\nimport GameMessageBox from \"../components/GameMessageBox\"\nimport CloseIcon from \"../../common/components/icons/CloseIcon\"\nimport { useHistory } from \"react-router\"\n\n// App state\nimport { RootState } from \"../../redux/store\"\nimport { useAppSelector, useAppDispatch } from \"../../redux/hooks\"\nimport { progressGame, refreshGameProgress } from \"../../redux/games/GameSlice\"\nimport useOutcome from \"../hooks/useOutcome\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n display: \"flex\",\n fontFamily: \"'Press Start 2P'\",\n background: theme.palette.secondary.dark,\n backgroundImage: 'url(\"/images/background/broken_red.png\")',\n width: \"100%\",\n height: \"100%\",\n flexDirection: \"column\",\n },\n modal: {\n display: \"flex\",\n width: \"100%\",\n height: \"100%\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n background: \"transparent\",\n },\n close: {\n marginLeft: \"auto\",\n \"& *\": {\n color: theme.palette.primary.main,\n fontSize: \"3rem\",\n },\n },\n container: {\n height: \"calc(60vh + 130px)\",\n width: \"50vh\",\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n display: \"grid\",\n gridTemplateRows: \"45px 60vh 45px\",\n rowGap: \"25px\",\n },\n header: {\n border: \"3px solid white\",\n backgroundColor: theme.palette.primary.main,\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n color: \"white\",\n fontSize: \"1em\",\n width: \"100%\",\n justifySelf: \"center\",\n },\n stage: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n })\n\ninterface IProps {}\ntype ClassKey = \"root\" | \"modal\" | \"close\" | \"container\" | \"header\" | \"stage\"\ntype PropsType = IProps & WithStyles\n\nconst Tetris: React.FC = (props) => {\n const { classes } = props\n const [dropTime, setDropTime] = useState(null)\n const [gameOver, setGameOver] = useState(false)\n const [isPlaying, setIsPlaying] = useState(false)\n const { target, best, outcomeId } = useAppSelector(\n (state: RootState) => state.gamesState.tetris,\n )\n const history = useHistory()\n const dispatch = useAppDispatch()\n const outcome = useOutcome(outcomeId)\n\n const [player, updatePlayerPos, resetPlayer, playerRotate] = usePlayer()\n const [stage, setStage, rowsCleared] = useStage(player, resetPlayer)\n const [score, setScore, rows, setRows, level, setLevel] = useGameStatus(\n rowsCleared,\n )\n\n const movePlayer = (dir) => {\n if (!checkCollision(player, stage, { x: dir, y: 0 })) {\n updatePlayerPos({ x: dir, y: 0 })\n }\n }\n\n const restartGame = () => {\n // Reset Game\n setStage(createStage())\n setDropTime(300)\n resetPlayer()\n setGameOver(false)\n setScore(0)\n setRows(0)\n setLevel(0)\n setIsPlaying(true)\n }\n\n const drop = () => {\n if (rows > (level + 1) * 3) {\n setLevel((prev) => prev + 1)\n setDropTime(300 / (level + 1) + 200)\n }\n if (!checkCollision(player, stage, { x: 0, y: 1 })) {\n updatePlayerPos({ x: 0, y: 1, collided: false })\n } else {\n if (player.pos.y < 1) {\n setGameOver(true)\n setDropTime(null)\n }\n updatePlayerPos({ x: 0, y: 0, collided: true })\n }\n }\n\n const keyUp = () => {\n if (!gameOver) {\n setDropTime(300 / (level + 1) + 200)\n }\n }\n\n const dropPlayer = () => {\n setDropTime(null)\n drop()\n }\n\n const move = (keyCode) => {\n if (!gameOver) {\n if (keyCode === \"left\") {\n movePlayer(-1)\n keyUp()\n } else if (keyCode === \"right\") {\n movePlayer(1)\n keyUp()\n } else if (keyCode === \"down\") {\n dropPlayer()\n keyUp()\n } else if (keyCode === \"up\") {\n playerRotate(stage, 1)\n keyUp()\n }\n }\n }\n\n useInterval(() => {\n drop()\n }, dropTime)\n\n useEffect(() => {\n dispatch(refreshGameProgress(\"tetris\"))\n }, [dispatch])\n\n useEffect(() => {\n if (score > best) dispatch(progressGame({ game: \"tetris\", score }))\n }, [score, best, dispatch])\n\n const onClose = () => {\n history.push(\"/fast-track/\")\n }\n\n const renderResultDialog = () => {\n if (target && score >= target) {\n return (\n {\n if (outcome) outcome.onWin()\n else onClose()\n },\n },\n {\n label: \"KEEP PLAYING\",\n onClick: () => {\n if (outcome) outcome.onWin()\n restartGame()\n },\n },\n ]}\n />\n )\n } else if (score > best)\n return (\n \n )\n else\n return (\n {\n if (outcome?.onLoose !== undefined) outcome.onLoose()\n onClose()\n },\n },\n ]}\n />\n )\n }\n\n return (\n
\n {\n if (outcome !== undefined) outcome.onLoose()\n onClose()\n }}\n className={classes.close}\n >\n \n \n move(key)}\n />\n
\n
\n TOP SCORE: {best}\n {!!target && TARGET: {target}}\n
\n
\n \n
\n
\n LEVEL: {level}\n SCORE: {score}\n
\n
\n \n {renderResultDialog()}\n \n \n \n \n
\n )\n}\n\nexport default withStyles(styles)(Tetris)\n","import { useState, useCallback } from \"react\"\n\nimport { TETROMINOS, randomTetromino } from \"../utils/tetrominos\"\nimport { STAGE_WIDTH, checkCollision } from \"../utils/gameHelpers\"\n\nexport const usePlayer = () => {\n const [player, setPlayer] = useState({\n pos: { x: 0, y: 0 },\n tetromino: TETROMINOS[0].shape,\n collided: false,\n })\n\n const updatePlayerPos = ({ x, y, collided }) => {\n setPlayer((prev) => ({\n ...prev,\n pos: { x: (prev.pos.x += x), y: (prev.pos.y += y) },\n collided,\n }))\n }\n\n const rotate = (matrix, dir) => {\n const rotatedTetro = matrix.map((_, index) =>\n matrix.map((col) => col[index]),\n )\n\n if (dir > 0) return rotatedTetro.map((row) => row.reverse())\n return rotatedTetro.reverse()\n }\n\n const playerRotate = (stage, dir) => {\n const clonedPlayer = JSON.parse(JSON.stringify(player))\n clonedPlayer.tetromino = rotate(clonedPlayer.tetromino, dir)\n\n const pos = clonedPlayer.pos.x\n let offset = 1\n while (checkCollision(clonedPlayer, stage, { x: 0, y: 0 })) {\n clonedPlayer.pos.x += offset\n offset = -(offset + (offset > 0 ? 1 : -1))\n if (offset > clonedPlayer.tetromino[0].length) {\n rotate(clonedPlayer.tetromino, -dir)\n clonedPlayer.pos.x = pos\n return\n }\n }\n\n setPlayer(clonedPlayer)\n }\n\n const resetPlayer = useCallback(() => {\n setPlayer({\n pos: { x: STAGE_WIDTH / 2 - 2, y: 0 },\n tetromino: randomTetromino().shape,\n collided: false,\n })\n }, [])\n\n return [player, updatePlayerPos, resetPlayer, playerRotate]\n}\n","import { useEffect, useRef } from \"react\"\n\nexport function useInterval(callback, delay) {\n const savedCallback = useRef()\n useEffect(() => {\n savedCallback.current = callback\n }, [callback])\n\n useEffect(() => {\n function tick() {\n savedCallback.current()\n }\n if (delay !== null) {\n const id = setInterval(tick, delay)\n return () => {\n clearInterval(id)\n }\n }\n }, [delay])\n}\n","import React, { useState } from \"react\"\n\nconst useRoll = (): [\n number[],\n React.Dispatch>[],\n] => {\n const [column1, setColumn1] = useState(0)\n const [column2, setColumn2] = useState(0)\n const [column3, setColumn3] = useState(0)\n return [\n [column1, column2, column3],\n [setColumn1, setColumn2, setColumn3],\n ]\n}\n\nexport default useRoll\n","import React, { useCallback, useEffect, useState } from \"react\"\nimport {\n withStyles,\n WithStyles,\n createStyles,\n Theme,\n IconButton,\n Modal,\n} from \"@material-ui/core\"\nimport clsx from \"clsx\"\nimport CloseIcon from \"../../common/components/icons/CloseIcon\"\nimport GameMessageBox from \"../components/GameMessageBox\"\n\n// Hooks\nimport { useHistory } from \"react-router\"\nimport useRoll from \"./hooks/useRoll\"\n\n// App state\nimport { RootState } from \"../../redux/store\"\nimport { useAppDispatch, useAppSelector } from \"../../redux/hooks\"\nimport { progressGame, refreshGameProgress } from \"../../redux/games/GameSlice\"\nimport useOutcome from \"../hooks/useOutcome\"\n\nconst ICON_MAPPING = {\n ARUP: \"/games/icons/slotMachine/arup.png\",\n PENGUIN: \"/games/icons/slotMachine/penguin.png\",\n PROJECT: \"/games/icons/slotMachine/project.png\",\n OVE: \"/games/icons/slotMachine/ove.png\",\n MUSIC: \"/games/icons/slotMachine/music.png\",\n ENGAGE: \"/games/icons/slotMachine/engage.png\",\n LEVERAGE: \"/games/icons/slotMachine/leverage.png\",\n DISRUPT: \"/games/icons/slotMachine/disrupt.png\",\n}\n\nconst LOSE_MESSAGES = [\n \"DON'T BLAME THE CODE\",\n \"STOP GAMBLING\",\n \"HEY, YOU LOST\",\n \"OUCH! I FELT THAT\",\n \"THERE GOES THE BUDGET\",\n \"I HAVE A CAT. YOU HAVE A LOSS\",\n \"CODING IS HARD\",\n]\n\nconst COLUMNS = [\n [\"ARUP\", \"PENGUIN\", \"PROJECT\", \"ENGAGE\", \"OVE\", \"MUSIC\"],\n [\"OVE\", \"LEVERAGE\", \"PENGUIN\", \"ARUP\", \"PROJECT\", \"MUSIC\"],\n [\"PROJECT\", \"DISRUPT\", \"MUSIC\", \"PENGUIN\", \"ARUP\", \"OVE\"],\n]\n\n// const COLUMNS = [\n// [\"ARUP\", \"PENGUIN\"],\n// [\"PENGUIN\", \"ARUP\"],\n// [\"PENGUIN\", \"ARUP\"],\n// ]\n\nconst ANIMATION_DURATION = 200 // in miliseconds\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n fontFamily: \"'Press Start 2P'\",\n padding: \"3rem\",\n \"& span, & button\": {\n fontFamily: \"'Press Start 2P'\",\n },\n backgroundImage: \"url(/games/images/slotMachine/SlotMachineBG.PNG)\",\n fontSize: \"2rem\",\n [theme.breakpoints.down(\"md\")]: {\n fontSize: \"1rem\",\n padding: \"0.5rem\",\n },\n },\n grid: {\n display: \"grid\",\n gridTemplateRows: \"75px 300px 75px\",\n rowGap: \"20px\",\n width: \"100%\",\n },\n header: {\n width: \"100%\",\n color: theme.palette.secondary.main,\n backgroundColor: \"rgb(194, 197, 187)\",\n border: \"3px solid black\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n \"& > span\": {\n display: \"flex\",\n justifyContent: \"center\",\n flex: 1,\n },\n },\n content: {\n backgroundColor: \"rgb(194, 197, 187)\",\n border: \"3px solid black\",\n display: \"grid\",\n gridTemplateColumns: \"repeat(3, 1fr)\",\n padding: \"10px\",\n columnGap: \"10px\",\n },\n column: {\n border: \"3px solid black\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n overflow: \"hidden\",\n },\n slot: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: \"100%\",\n minWidth: \"100%\",\n minHeight: \"100%\",\n height: \"100%\",\n \"& > img\": {\n width: \"auto\",\n // width: \"90%\",\n height: \"30%\",\n position: \"relative\",\n },\n },\n spin: {\n position: \"relative\",\n animation: `$spin ${ANIMATION_DURATION}ms linear infinite`,\n },\n close: {\n \"& span\": {\n color: theme.palette.secondary.main,\n fontSize: \"3rem\",\n },\n },\n button: {\n color: theme.palette.secondary.main,\n background: \"rgb(194, 197, 187)\",\n border: `3px solid ${theme.palette.secondary.main}`,\n fontSize: \"inherit\",\n \"&:hover\": {\n color: \"rgb(194, 197, 187)\",\n background: theme.palette.secondary.main,\n border: \"1px solid rgb(194, 197, 187)\",\n cursor: \"pointer\",\n },\n \"&:disabled\": {\n color: theme.palette.secondary.light,\n background: \"rgb(194, 197, 187)\",\n border: `3px solid ${theme.palette.secondary.main}`,\n cursor: \"default\",\n },\n },\n modal: {\n display: \"flex\",\n width: \"80vw\",\n margin: \"0 10vw\",\n height: \"100%\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n background: \"transparent\",\n },\n bgWin: {\n animation: \"$bgWin 0.3s linear infinite\",\n },\n \"@keyframes spin\": {\n \"0%\": {\n top: \"100%\",\n },\n \"100%\": {\n top: \"-100%\",\n },\n },\n \"@keyframes bgWin\": {\n \"0%\": {\n filter: \"invert(0%)\",\n },\n \"100%\": {\n filter: \"invert(100%)\",\n },\n },\n })\n\ntype ClassKey =\n | \"root\"\n | \"grid\"\n | \"header\"\n | \"content\"\n | \"column\"\n | \"slot\"\n | \"spin\"\n | \"close\"\n | \"button\"\n | \"modal\"\n | \"bgWin\"\n | \"@keyframes spin\"\n | \"@keyframes bgWin\"\n\ninterface IProps {}\n\ntype PropsType = IProps & WithStyles\n\ntype IStatus = \"won\" | \"lost\" | \"playing\"\n\nconst SlotMachine: React.FC = (props) => {\n const COST = 100\n const REWARD = 5000\n\n const { classes } = props\n\n const history = useHistory()\n const dispatch = useAppDispatch()\n const { credits, outcomeId } = useAppSelector(\n (state: RootState) => state.gamesState.slotMachine,\n )\n const outcome = useOutcome(outcomeId)\n\n const [popup, setPopup] = useState()\n const [message, setMessage] = useState(\"I FEEL LUCKY\")\n const [status, setStatus] = useState(\"playing\")\n const [spins, setSpins] = useState([false, false, false])\n const [results, resultSetters] = useRoll()\n const [isFirstGame, setIsFirstGame] = useState(true)\n\n const hasWon = useCallback((results) => {\n const allEqual =\n COLUMNS[0][results[0]] === COLUMNS[1][results[1]] &&\n COLUMNS[1][results[1]] === COLUMNS[2][results[2]]\n const trio =\n COLUMNS[0][results[0]] === \"ENGAGE\" &&\n COLUMNS[1][results[1]] === \"LEVERAGE\" &&\n COLUMNS[2][results[2]] === \"DISRUPT\"\n return allEqual || trio\n }, [])\n\n const isSpinning = useCallback((spins) => spins.some((s) => s), [])\n\n const spin = () => {\n if (!isSpinning(spins) && status === \"playing\" && credits >= COST) {\n // Note: state won't be updated until the end of this function's execution!\n dispatch(progressGame({ game: \"slotMachine\", score: credits - COST }))\n setSpins([true, true, true])\n\n const intervals = new Array(3).fill(0).map((_, i) =>\n setInterval(() => {\n resultSetters[i]((res) => (res + 1) % COLUMNS[i].length)\n }, ANIMATION_DURATION * 0.5),\n )\n\n const randBetween = (i, j) => i + Math.random() * (j - i)\n\n const durations = intervals.map(\n (_, i) => ANIMATION_DURATION * randBetween(3, 6) * (1 + i),\n )\n\n intervals.map((interval, i) =>\n setTimeout(() => {\n clearInterval(interval)\n setSpins((s) => {\n const snext = [...s]\n snext[i] = false\n return snext\n })\n }, durations[i]),\n )\n }\n }\n\n const onWin = () => {\n dispatch(progressGame({ game: \"slotMachine\", score: credits + REWARD }))\n setMessage(`YOU WON ${REWARD} CREDITS`)\n setStatus(\"won\")\n setTimeout(() => {\n setMessage(\"I FEEL LUCKY\")\n setStatus(\"playing\")\n if (outcome) {\n setPopup(\n \"You were lucky to win, but this is gambling, and gambling is bad. Therefore you are only allowed to continue, no extras\",\n )\n }\n }, 3e3)\n }\n\n const onLoose = () => {\n setMessage(LOSE_MESSAGES[Math.floor(Math.random() * Math.floor(7))])\n setStatus(\"lost\")\n\n setTimeout(() => {\n setMessage(\"I FEEL LUCKY\")\n setStatus(\"playing\")\n if (outcome && credits <= 0) {\n setPopup(\n \"Gambling was a bad idea, you need to start from the beginning. All progress is lost. Next time please be careful\",\n )\n }\n }, 0.75e3)\n }\n\n useEffect(() => {\n dispatch(refreshGameProgress(\"slotMachine\"))\n }, [dispatch, outcomeId])\n\n useEffect(() => {\n if (spins.every((s) => !s) && !isFirstGame) {\n hasWon(results) ? onWin() : onLoose()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [spins, hasWon])\n\n useEffect(() => {\n setIsFirstGame(false)\n }, [])\n\n const onClose = () => {\n history.push(\"/fast-track/\")\n }\n\n return (\n
\n
\n
\n YOUR CREDITS: {credits}\n {\n if (outcome !== undefined) {\n outcome.onLoose()\n }\n onClose()\n }}\n className={classes.close}\n >\n \n \n
\n
\n {results.map((ri, i) => (\n
\n
\n {COLUMNS[i][ri]}\n
\n
\n ))}\n
\n \n {credits < 100 ? \"NOT ENOUGH CREDITS\" : message}\n \n
\n {outcome !== undefined && popup !== undefined && (\n \n {\n if (credits <= 0) {\n outcome!.onLoose()\n } else {\n outcome!.onWin()\n }\n },\n },\n ]}\n />\n \n )}\n
\n )\n}\n\nexport default withStyles(styles)(SlotMachine)\n","import React, { useCallback, useState } from \"react\"\nimport { createStyles, Theme, WithStyles, withStyles } from \"@material-ui/core\"\n\nimport { useAppSelector } from \"../../redux/hooks\"\nimport { IBook } from \"../../redux/interfaces\"\nimport { useHistory } from \"react-router\"\nimport Journey from \"../../common/components/Journey\"\nimport {\n color_01,\n color_02,\n} from \"../../experiential/components/ExperientialJourney/pathSteps/Colors\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n height: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n path: {},\n })\n\ntype ClassKey = \"root\" | \"path\"\ntype PropsType = WithStyles\n\nconst BookClubJourney: React.FC = (props: PropsType) => {\n const [overlay, setOverlay] = useState<{\n type: \"none\" | \"select\" | \"trailer\"\n }>({ type: \"none\" })\n const books: IBook[] = useAppSelector((store) => store.libraryState.books)\n const trailer = useAppSelector((state) => state.libraryState.bookClubTrailer)\n console.log(trailer)\n\n const history = useHistory()\n const playInterview = useCallback(\n (interviewId: string) => {\n history.push(`/book-club/${interviewId}`)\n },\n [history],\n )\n const playTrailer = useCallback(() => {\n setOverlay({ type: \"trailer\" })\n }, [])\n\n return (\n <>\n \n \n )\n}\n\nexport default withStyles(styles)(BookClubJourney)\n","import {\n createStyles, Theme,\n WithStyles,\n withStyles\n} from \"@material-ui/core\"\nimport React, { useEffect } from \"react\"\n\nimport { useHistory } from \"react-router\"\nimport Header from \"../../common/components/Header/Header\"\nimport BookClubJourney from \"./BookClubJourney\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n height: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n header: {\n display: \"flex\",\n margin: \"1rem\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n fontFamily: \"Cooper Black, Tourney\",\n fontSize: \"3rem\",\n [theme.breakpoints.down(\"xs\")]: {\n fontSize: \"2.5rem\",\n },\n color: theme.palette.secondary.dark,\n },\n icon: {\n paddingLeft: 0,\n color: \"black\",\n fontSize: \"3rem\",\n },\n })\n\ntype ClassKey = \"root\" | \"icon\" | \"header\"\ntype IProps = {}\ntype PropsType = WithStyles & IProps\n\nconst BookClubJourneyRoot: React.FC = (props: PropsType) => {\n const history = useHistory()\n useEffect(() => {\n document.title = `Book Club`\n })\n return (\n <>\n
\n }\n title=\"Book Club\"\n backgroundColor=\"#FFF\"\n color=\"black\"\n />\n \n
\n \n )\n}\n\nexport default withStyles(styles)(BookClubJourneyRoot)\n","import React, { useEffect, useState } from \"react\"\nimport { RouteComponentProps, useHistory } from \"react-router\"\n\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles,\n Button,\n} from \"@material-ui/core\"\nimport TrackPlayer, {\n ReactPlayerProgress,\n} from \"../../common/components/TrackPlayer/TrackPlayer\"\nimport { IBook } from \"../../redux/interfaces\"\nimport { useAppDispatch, useAppSelector } from \"../../redux/hooks\"\nimport ModalBox from \"../../common/components/ModalBox\"\nimport InterviewFeedback from \"../../experiential/components/SubmitFeedback/InterviewFeedback\"\nimport {\n refreshProgress,\n progressInterview,\n} from \"../../redux/library/LibrarySlice\"\nimport { Progress } from \"../../common/entities/Progress\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n height: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n modalBody: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n padding: \"1.5rem\",\n flex: 1,\n \"& > *\": {\n marginBottom: \"2rem\",\n },\n },\n buttonOverride: {\n width: \"100%\",\n \"&:hover\": { color: \"white\" },\n },\n anchor: {\n textDecorationLine: \"none\",\n color: \"inherit\",\n },\n })\n\ntype IProps = {}\ntype IMatchProps = {\n interviewId: string\n}\ntype ClassKey = \"root\" | \"modalBody\" | \"anchor\" | \"buttonOverride\"\ntype PropsType = WithStyles &\n IProps &\n RouteComponentProps\n\n// TODO: refactor this and Experiental Journey to extract common code.\nconst BookPlayer: React.FC = (props: PropsType) => {\n const interviewId = props.match.params.interviewId\n const [playing, setPlaying] = useState(false)\n const [thisProgress, setThisProgress] = useState()\n const history = useHistory()\n\n const interview: IBook = useAppSelector(\n (store) =>\n store.libraryState.books.find((t) => t.id === interviewId) ||\n store.libraryState.books[0],\n )\n\n const dispatch = useAppDispatch()\n\n useEffect(() => {\n dispatch(refreshProgress())\n .unwrap()\n .then((progressList) => {\n // Check if this is the first time this interview was selected\n const progressQuery: Progress | undefined = progressList.find(\n (p) => p.mediaId === interviewId,\n )\n if (progressQuery === undefined || progressQuery.order === undefined) {\n console.log(\"first time\", interviewId, progressList)\n const newProgress: Progress = {\n mediaId: interviewId,\n progress: 0,\n order: progressList.length,\n }\n setThisProgress(newProgress)\n dispatch(progressInterview(newProgress))\n } else if (progressQuery) {\n setThisProgress(progressQuery)\n }\n })\n }, [dispatch, interviewId])\n\n const onProgress = (progress: ReactPlayerProgress) => {\n if (thisProgress && progress.played > interview.progress) {\n dispatch(\n progressInterview({\n mediaId: interview.id,\n progress: Math.max(progress.played, interview.progress),\n order: thisProgress.order,\n }),\n )\n }\n }\n\n const [overlay, setOverlay] = useState<\"none\" | \"feedback\" | \"request\">(\n \"none\",\n )\n\n return (\n <>\n
\n history.push(\"/book-club\")}\n actions={[\n { label: \"request\", onClick: () => setOverlay(\"request\") },\n { label: \"feedback\", onClick: () => setOverlay(\"feedback\") },\n ]}\n />\n setOverlay(\"none\")}\n >\n
\n \n {\" \"}\n \n Send mail to the library\n \n \n
\n \n setOverlay(\"none\")}\n >\n setOverlay(\"none\")}\n />\n \n
\n \n )\n}\n\nexport default withStyles(styles)(BookPlayer)\n","import React, { useEffect } from \"react\"\nimport { createStyles, Theme, WithStyles, withStyles } from \"@material-ui/core\"\nimport { useHistory } from \"react-router\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n // TODO: refactor and extract common classes to a separate\n root: {\n height: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n backgroundColor: \"#5E5E5E\",\n },\n list: {\n display: \"flex\",\n flexDirection: \"column\",\n maxHeight: \"calc(100%-7rem)\",\n overflowY: \"auto\",\n padding: \"1rem\",\n },\n itemList: {\n backgroundColor: \"black\",\n borderTop: \"0.25rem solid white\",\n borderBottom: \"0.25rem solid white\",\n display: \"flex\",\n marginBottom: \"0.33rem\",\n paddingLeft: \"1rem\",\n transition: \"background-color 0.2s\",\n \"&:hover\": { backgroundColor: \"#F20023\", cursor: \"pointer\" },\n },\n column: {},\n icon: {\n paddingLeft: 0,\n color: \"black\",\n fontSize: \"3rem\",\n },\n row: { display: \"flex\", flexDirection: \"column\", width: \"100%\" },\n itemText: {\n fontFamily: \"Cooper Black, Tourney\",\n fontSize: \"2rem\",\n margin: \"0px\",\n color: \"black\",\n },\n itemAnchor: {\n color: \"white\",\n fontWeight: \"bold\",\n textDecorationLine: \"none\",\n },\n footer: {\n height: \"6rem\",\n position: \"fixed\",\n fontFamily: \"Consolas\",\n left: 0,\n bottom: 0,\n width: \"100%\",\n backgroundColor: \"#5E5E5E\",\n color: \"white\",\n paddingLeft: \"1rem\",\n textAlign: \"left\",\n },\n })\n\ntype ClassKey =\n | \"root\"\n | \"itemList\"\n | \"itemAnchor\"\n | \"itemText\"\n | \"list\"\n | \"icon\"\n | \"row\"\n | \"column\"\n | \"footer\"\n\ntype IProps = {}\ntype PropsType = WithStyles & IProps\n\nconst portals = [\n {\n title: \"Book Club\",\n description: \"description\",\n route: \"/book-club\",\n external: false,\n },\n {\n title: \"AGAM 21\",\n description: \"description\",\n route: \"/experiential\",\n external: false,\n },\n {\n title: \"Modern Times\",\n description: \"description\",\n route: \"https://media.arup.com/playlist/dedicated/1_jauflpt3/\",\n external: true,\n },\n {\n title: \"Find Workshops\",\n description: \"description\",\n route:\n \"https://moodle.arup.com/local/search/index.php?search=digital+disruption&context=2&page=search&showcatid=-1\",\n external: true,\n },\n {\n title: \"Corona Invasion\",\n description: \"description\",\n route: \"/corona-invasion\",\n external: false,\n },\n {\n title: \"Project Charlotte\",\n description: \"description\",\n route: \"/project-charlotte\",\n external: false,\n },\n]\n\nconst ArupExperienceLandingRoot: React.FC = (props: PropsType) => {\n const history = useHistory()\n useEffect(() => {\n document.title = `Arup Experience`\n })\n return (\n <>\n
\n
\n

\n
\n
\n {portals &&\n portals.map((it, index) => (\n {\n if (it.external) {\n window.location.href = it.route\n } else {\n history.push(it.route)\n }\n }}\n >\n

\n \n {it.title}\n \n

\n
\n ))}\n
\n
\n

Update 2022.1.2

\n

Digital Disruption Experimental

\n
\n \n \n )\n}\n\nexport default withStyles(styles)(ArupExperienceLandingRoot)\n","import React from \"react\"\nimport { withStyles, WithStyles, createStyles, Theme } from \"@material-ui/core\"\nimport Unity, { UnityContent } from \"react-unity-webgl\"\nimport MobileDeadEnd from \"../../fastTrack/components/MobileDeadEnd\"\nimport { useHistory } from \"react-router\"\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {},\n })\n\ntype ClassKey = \"root\"\ninterface IProps {}\ntype PropsType = IProps & WithStyles\n\nconst CoronaInvaders: React.FC = (props) => {\n const history = useHistory()\n const unityContent = new UnityContent(\n \"games/corona-invaders/test.json\",\n \"games/corona-invaders/UnityLoader.js\",\n )\n const isDesktop = window.innerWidth > 720\n console.log(isDesktop, window.innerWidth)\n\n return (\n \n {isDesktop && (\n \n \n \n )}\n {!isDesktop && (\n history.push(\"/book-club\")}\n overrideText=\"Corona Invasion game is not avaialbe on mobile yet. Please come back to this page from your desktop computer.\"\n />\n )}\n \n )\n}\n\nexport default withStyles(styles)(CoronaInvaders)\n","import {\n createStyles,\n IconButton,\n Theme,\n WithStyles,\n withStyles,\n} from \"@material-ui/core\"\nimport React from \"react\"\nimport { Carousel } from \"react-responsive-carousel\"\nimport \"react-responsive-carousel/lib/styles/carousel.min.css\" // requires a loader\nimport { useHistory } from \"react-router\"\nimport CloseIcon from \"../common/components/icons/CloseIcon\"\nimport \"./carousel-override.css\"\n\nconst styles = () =>\n createStyles({\n root: {\n height: \"100%\",\n },\n body: {\n padding: \"0rem 1rem\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n width: \"100%\",\n overflowX: \"hidden\",\n },\n paragraph: {\n maxWidth: \"40rem\",\n color: \"black\",\n textAlign: \"justify\",\n },\n image: {\n width: \"100%\",\n maxWidth: \"40rem\",\n },\n titleWrapper: {\n width: \"100%\",\n backgroundColor: \"white\",\n display: \"flex\",\n justifyContent: \"center\",\n padding: \"1rem 1rem\",\n },\n title: {\n fontSize: \"3rem\",\n fontFamily: \"Cooper Black, Tourney\",\n color: \"black\",\n width: \"35.5rem\",\n },\n subtitle: {\n fontSize: \"1rem\",\n fontWeight: \"bold\",\n color: \"black\",\n padding: \"1rem 0rem\",\n width: \"100%\",\n maxWidth: \"40rem\",\n },\n icon: {\n color: \"black\",\n fontSize: \"3rem\",\n heigth: \"3rem\",\n width: \"3rem\",\n },\n })\n\ntype ClassKey =\n | \"root\"\n | \"body\"\n | \"paragraph\"\n | \"image\"\n | \"title\"\n | \"subtitle\"\n | \"icon\"\n | \"titleWrapper\"\ntype PropsType = WithStyles\n\nconst ProjectCharlotteRoot: React.FC = (props: PropsType) => {\n const history = useHistory()\n\n return (\n
\n
\n
Charlotte
\n history.push(\"/\")}\n >\n \n \n
\n
\n
\n Synthetic agency for user emphatic engagement, through live data\n
\n

\n Powered by Arup’s Property Insight, Project Charlotte is the first of\n its kind. It is a new concept of digital twin, where IoT, control\n systems and building performance data, are transformed, through a\n creative and imaginative design, into an alternative virtual world.\n

\n

\n At the strike of the hour, the 80 Charlotte Street auditorium screen,\n located in the new Arup London office, attracts surrounding users by\n opening a portal, introducing Charlotte, a “super cute” fictional\n character, our new office mascot.\n

\n

\n This installation is a technical feast, including anamorphic\n projections, real time data acquisition and processing, generative\n graphics, particle systems. But there is more to it.\n

\n

\n The building telemetry, including data such as temperature, humidity,\n noise levels, number of people present, to name a few, influences the\n environment and the emotions that are displayed on the screen: low air\n pressure affects the weather, while temperature, noise levels and\n relative humidity modify Charlotte phenotype, the number of people in\n the office determines Charlotte’s mood, happy, sad. It is a digital\n twin of sort. Distorted, but overcharged with empathy, designed to\n establish an emotional connection between users and Charlotte.\n

\n

\n It is easy to imagine how tracking the data over time could be used to\n change the virtual world progressively, demonstrating the impact of\n users behaviours on the environment through the metaphorical world of\n Charlotte, and thus driving change, by leveraging users’ emotional\n connection.\n

\n

\n As we are set to design for a sustainable development, it is\n lapalissian how the paradigm underpinning Project Charlotte could be\n reconfigured within the most appropriate format, to give our built\n environment a digital soul. To nudge users in doing the right thing.\n

\n

\n If you are interested and would like to know more on this, explore the\n underlying technical elements, from the UX design to the OSC\n messaging, or simply would like to explore the adoption of Charlotte\n in your office{\" \"}\n please contact us.\n

\n \n
\n \"\"\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n )\n}\n\nexport default withStyles(styles)(ProjectCharlotteRoot)\n","import React, { useEffect } from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { ThemeProvider, CssBaseline } from \"@material-ui/core\"\nimport { Router, Route, Switch } from \"react-router\"\nimport { createBrowserHistory } from \"history\"\nimport { I18nextProvider } from \"react-i18next\"\nimport { isMobile } from \"react-device-detect\"\n\nimport i18n from \"./common/i18n\"\nimport * as serviceWorker from \"./serviceWorker\"\nimport Frame from \"./common/components/Frame/Frame\"\nimport Login from \"./common/components/Login/Login\"\nimport axios from \"axios\"\nimport store from \"./redux/store\"\nimport { Provider } from \"react-redux\"\nimport config from \"./common/config\"\nimport { theme } from \"./common/mui\"\n\nimport { acquireTokenSilentAndSetLocal, isAuthenticated } from \"./common/auth\"\n\nimport FastTrackCatalogue from \"./fastTrack/components/FastTrackCatalogue\"\nimport ExperientialJourney from \"./experiential/components/ExperientialJourney\"\nimport FeedbackPortal from \"./landing/components/FeedbackPortal\"\nimport InterviewPlayer from \"./experiential/components/Player\"\nimport FastTrackPlayer from \"./fastTrack/components/FastTrackPlayer\"\nimport MobileDeadEnd from \"./fastTrack/components/MobileDeadEnd\"\nimport Tetris from \"./games/tetris/Tetris\"\nimport SlotMachine from \"./games/slotMachine/SlotMachine\"\nimport BookClubJourneyRoot from \"./bookClub/components/BookClubJourneyRoot\"\nimport BookPlayer from \"./bookClub/components/BookPlayer\"\nimport ArupExperienceLandingRoot from \"./arupExperienceLanding/components/ArupExperienceLandingRoot\"\nimport CoronaInvaders from \"./games/coronaInvaders/CoronaInvaders\"\nimport ProjectCharlotteRoot from \"./projectCharlotte/ProjectCharlotteRoot\"\n\nconst App = () => {\n const browserHistory = createBrowserHistory()\n\n // Check that user is logged in before any API Calls\n axios.interceptors.request.use(async (request) => {\n if (request.url?.includes(config.api)) {\n if (!isAuthenticated()) {\n console.log(\"Silently requesting new token...\")\n await acquireTokenSilentAndSetLocal()\n }\n request.headers[\"Authorization\"] = `Bearer ${localStorage.getItem(\n \"accessToken\",\n )}`\n }\n return request\n })\n\n useEffect(() => {\n document.title = `Arup Experience`\n })\n\n // Try again on 403, after retrieving new token\n // axios.interceptors.response.use(undefined, (err) => {\n // const status = err.response ? err.response.status : null\n // TODO: This should only retry ONCE (or maybe exponential backoff)\n // console.log(err)\n // if (status === 403) {\n // return acquireTokenSilentAndSetLocal().then((_) => {\n // err.config.headers[\"Authorization\"] = `Bearer ${localStorage.getItem(\n // \"accessToken\",\n // )}`\n // console.log(err.config.headers[\"Authorization\"])\n // return axios.request(err.config)\n // })\n // }\n // return Promise.reject(err)\n // })\n\n // For all vars available to config Material-UI theme:\n // https://v3.material-ui.com/customization/themes/\n return (\n \n \n \n \n \n \n \n \n }\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n (\n \n \n \n )}\n />\n \n \n \n \n (\n \n \n \n )}\n />\n \n \n \n \n \n \n \n )\n}\nexport default App\n\nReactDOM.render(, document.getElementById(\"root\"))\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister()\n"],"sourceRoot":""}