{"version":3,"sources":["webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_stackSet.js","webpack:///./node_modules/lodash/stubArray.js","webpack:///./node_modules/lodash/_SetCache.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_setCacheHas.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_stackClear.js","webpack:///./node_modules/lodash/_mapToArray.js","webpack:///./node_modules/lodash/clamp.js","webpack:///./node_modules/lodash/_arrayPush.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_equalByTag.js","webpack:///./src/images/icon-link.svg","webpack:///./node_modules/lodash/_Promise.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_Uint8Array.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_stackDelete.js","webpack:///./node_modules/lodash/_arrayFilter.js","webpack:///./node_modules/lodash/_getSymbols.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_WeakMap.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_arraySome.js","webpack:///./node_modules/lodash/_getTag.js","webpack:///./src/images/icon-share.svg","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_stackHas.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/isEqual.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_baseIsEqualDeep.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_baseGetAllKeys.js","webpack:///./node_modules/lodash/_Stack.js","webpack:///./node_modules/lodash/_setCacheAdd.js","webpack:///./node_modules/lodash/_baseClamp.js","webpack:///./node_modules/lodash/_stackGet.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/eq.js","webpack:///./src/components/atoms/share-modal/ShareModal.tsx","webpack:///./src/components/molecules/social-share/SocialShare.tsx","webpack:///./src/components/organisms/hero/content/animations.ts","webpack:///./src/components/organisms/hero/content/Content.tsx","webpack:///./src/components/organisms/hero/background/Background.tsx","webpack:///./src/utils/drawCoverImage.ts","webpack:///./src/components/atoms/progress-indicator/ProgressIndicator.tsx","webpack:///./src/hooks/use-image-loader/useImageLoader.ts","webpack:///./src/components/organisms/hero/Hero.tsx","webpack:///./src/components/molecules/next-art-piece/animations.ts","webpack:///./src/components/molecules/next-art-piece/NextArtPiece.tsx","webpack:///./src/components/pages/ProjectPage.tsx","webpack:///./node_modules/lodash/_equalArrays.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_getAllKeys.js","webpack:///./node_modules/lodash/_setToArray.js","webpack:///./node_modules/lodash/_equalObjects.js","webpack:///./node_modules/use-resize-observer/polyfilled.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_DataView.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_baseIsEqual.js","webpack:///./node_modules/lodash/_cacheHas.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_Set.js"],"names":["assocIndexOf","module","exports","key","this","__data__","ListCache","Map","MapCache","value","data","pairs","length","LARGE_ARRAY_SIZE","push","size","set","setCacheAdd","setCacheHas","SetCache","values","index","add","prototype","has","coreJsData","funcToString","Function","toString","func","call","e","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","entries","clear","entry","get","map","result","Array","forEach","baseClamp","toNumber","number","lower","upper","undefined","array","offset","baseIsNative","getValue","object","uid","maskSrcKey","exec","keys","IE_PROTO","type","getMapData","Symbol","Uint8Array","eq","equalArrays","mapToArray","setToArray","symbolProto","symbolValueOf","valueOf","other","tag","bitmask","customizer","equalFunc","stack","byteLength","byteOffset","buffer","name","message","convert","isPartial","stacked","Promise","getNative","nativeCreate","predicate","resIndex","arrayFilter","stubArray","propertyIsEnumerable","Object","nativeGetSymbols","getOwnPropertySymbols","getSymbols","symbol","isFunction","isMasked","isObject","toSource","reIsHostCtor","funcProto","objectProto","hasOwnProperty","reIsNative","RegExp","replace","test","WeakMap","isKeyable","DataView","Set","baseGetTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","resolve","Ctor","constructor","ctorString","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","baseIsEqual","splice","pop","MapShim","getIndex","arr","some","class_1","__entries__","defineProperty","enumerable","configurable","delete","callback","ctx","_i","_a","isBrowser","window","document","global$1","global","Math","self","requestAnimationFrame$1","requestAnimationFrame","bind","setTimeout","Date","now","transitionKeys","mutationObserverSupported","MutationObserver","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","refresh","delay","leadingCall","trailingCall","lastCallTime","resolvePending","proxy","timeoutCallback","timeStamp","throttle","addObserver","observer","indexOf","connect_","removeObserver","observers","disconnect_","updateObservers_","activeObservers","filter","gatherActive","hasActive","broadcastActive","addEventListener","observe","attributes","childList","characterData","subtree","removeEventListener","disconnect","_b","propertyName","getInstance","instance_","defineConfigurable","target","props","writable","getWindowOf","ownerDocument","defaultView","emptyRect","createRectInit","toFloat","parseFloat","getBordersSize","styles","positions","arguments","reduce","position","getHTMLElementContentRect","clientWidth","clientHeight","getComputedStyle","paddings","positions_1","getPaddings","horizPad","left","right","vertPad","top","bottom","width","height","boxSizing","round","documentElement","isDocumentElement","vertScrollbar","horizScrollbar","abs","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getBBox","getContentRect","bbox","getSVGContentRect","x","y","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","isActive","rect","broadcastRect","ResizeObserverEntry","rectInit","Constr","contentRect","DOMRectReadOnly","create","ResizeObserverSPI","controller","callbackCtx","activeObservations_","observations_","TypeError","callback_","controller_","callbackCtx_","Element","observations","unobserve","clearActive","_this","observation","ResizeObserver","method","apply","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","Stack","equalByTag","equalObjects","isArray","isBuffer","isTypedArray","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","arrayPush","keysFunc","symbolsFunc","stackClear","stackDelete","stackGet","stackHas","stackSet","ShareOptionType","ShareModal","options","onClick","onOptionClick","useCallback","StyledShareModal","hide","icon","StyledButton","StyledIcon","alt","src","styled","img","rem","button","Colors","OSLO_GREY","div","ALABASTER","StyledImage","StyledLabel","span","ShareModalWrapper","StyledDictionaryWrapper","SocialShare","media","title","dictionary","useDictionary","useState","showModal","setShowModal","shareModalWrapperRef","useRef","useEffect","onDocumentClick","event","current","contains","shareOptions","FACEBOOK","iconFacebook","LINKED_IN","iconLinkedIn","PINTEREST","iconPinterest","WEIBO","iconWeibo","navigator","clipboard","COPY","iconLink","onButtonClick","preventDefault","share","url","location","href","catch","error","console","warn","openShareDialog","screen","open","onShareOptionClick","encodedUrl","encodeURIComponent","encodedMedia","encodedTitle","writeText","copyUrl","iconShare","ref","titleAnimation","initial","opacity","visible","transition","duration","ease","subtitleAnimation","Content","forwardRef","artist","StyledContent","animate","variants","Title","responsiveSizes","tablet","TitleSizes","xxLarge","xLarge","level","medium","small","dangerouslySetInnerHTML","__html","displayName","spacings","side","root","WHITE","mediaQueries","StyledBackground","motion","isFixed","css","Canvas","canvas","isVisible","Poster","Overlay","attrs","style","BLACK_20","Background","backgroundRef","canvasRef","children","isLoaded","overlayOpacity","poster","scale","fluid","drawCoverImage","context","image","parentWidth","parentHeight","childWidth","childHeight","childRatio","cover","xOffset","yOffset","drawImage","StyledProgressIndicator","ProgressIndicator","className","progress","scaleX","exit","useImageLoader","images","imagesLoaded","imageSources","setImageSources","allImagesLoaded","setAllImagesLoaded","setProgress","loadedImages","setLoadedImages","isEqual","source","Image","onload","StyledHero","spacing","numberOfFrames","scrollThreshold","ScrollIndicatorWrapper","Hero","scrollIndicatorText","slug","contentRef","heroRef","requestId","currentIndex","setCurrentIndex","setOverlayOpacity","setIsFixed","usePresence","isPresent","safeToRemove","imageData","useImageData","isTablet","useBreakPoints","posterLandscape","posterPortrait","state","useAppState","useWindowSize","windowWidth","windowHeight","useResizeObserver","canvasWidth","canvasHeight","useMemo","isWebPSupported","from","padStart","loadingProgress","body","overflow","onScroll","offsetHeight","scrollY","getBoundingClientRect","max","scrollCorrection","innerHeight","clamp","ceil","renderImage","getContext","imageSmoothingEnabled","cancelAnimationFrame","ScrollIndicator","text","wrapperAnimation","distanceToCenter","exitActive","backgroundAnimation","hoverScaleIn","hoverScaleOut","overlayAnimation","opacityIn","StyledNexArtPieceWrapper","StyledNextArtPiece","Link","BackgroundImageWrapper","BackgroundImage","Img","Inner","section","BLACK","NextArtPiece","isDesktop","setDistanceToCenter","scaleFactor","setScaleFactor","nextArtPieceWrapperRef","setExitActive","nextArtPieceWrapperHeight","nextArtPieceImage","nextArtPieceImageNarrow","hover","setHover","centerY","onClickCallback","onHoverStart","onHoverEnd","backgroundImage","to","FooterWrapper","isNextArtPieceTransitioning","StyledProjectPage","bottomSpace","ProjectPage","pageContext","meta","next","sections","projects","ogImage","nextProject","setNextProject","footerWrapperRef","footerWrapperHeight","isNextArtPieceTransitionActive","setIsNextArtPieceTransitionActive","find","onPopstate","onNextArtPieceClick","Footer","Helmet","content","description","og","fixed","siteUrl","Sections","arraySome","cacheHas","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","baseGetAllKeys","getAllKeys","objProps","objLength","objStacked","skipCtor","objValue","objCtor","othCtor","ex","react","opts","defaultRef","onResize","onResizeRef","resizeObserverRef","_useState","setSize","previous","newWidth","newHeight","newSize","element","baseIsEqualDeep","isObjectLike","cache"],"mappings":"gFAAA,IAAIA,EAAe,EAAQ,QAe3BC,EAAOC,QAJP,SAAsBC,GACpB,OAAOH,EAAaI,KAAKC,SAAUF,IAAQ,I,uBCZ7C,IAAIG,EAAY,EAAQ,QACpBC,EAAM,EAAQ,QACdC,EAAW,EAAQ,QA+BvBP,EAAOC,QAhBP,SAAkBC,EAAKM,GACrB,IAAIC,EAAON,KAAKC,SAChB,GAAIK,aAAgBJ,EAAW,CAC7B,IAAIK,EAAQD,EAAKL,SACjB,IAAKE,GAAQI,EAAMC,OAASC,IAG1B,OAFAF,EAAMG,KAAK,CAACX,EAAKM,IACjBL,KAAKW,OAASL,EAAKK,KACZX,KAETM,EAAON,KAAKC,SAAW,IAAIG,EAASG,GAItC,OAFAD,EAAKM,IAAIb,EAAKM,GACdL,KAAKW,KAAOL,EAAKK,KACVX,O,qBCRTH,EAAOC,QAJP,WACE,MAAO,K,uBCnBT,IAAIM,EAAW,EAAQ,QACnBS,EAAc,EAAQ,QACtBC,EAAc,EAAQ,QAU1B,SAASC,EAASC,GAChB,IAAIC,GAAS,EACTT,EAAmB,MAAVQ,EAAiB,EAAIA,EAAOR,OAGzC,IADAR,KAAKC,SAAW,IAAIG,IACXa,EAAQT,GACfR,KAAKkB,IAAIF,EAAOC,IAKpBF,EAASI,UAAUD,IAAMH,EAASI,UAAUT,KAAOG,EACnDE,EAASI,UAAUC,IAAMN,EAEzBjB,EAAOC,QAAUiB,G,uBC1BjB,IAGIM,EAHO,EAAQ,QAGG,sBAEtBxB,EAAOC,QAAUuB,G,qBCQjBxB,EAAOC,QAJP,SAAqBO,GACnB,OAAOL,KAAKC,SAASmB,IAAIf,K,qBCT3B,IAGIiB,EAHYC,SAASJ,UAGIK,SAqB7B3B,EAAOC,QAZP,SAAkB2B,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOH,EAAaI,KAAKD,GACzB,MAAOE,IACT,IACE,OAAQF,EAAO,GACf,MAAOE,KAEX,MAAO,K,uBCtBT,IAAIC,EAAY,EAAQ,QACpBC,EAAa,EAAQ,QACrBC,EAAU,EAAQ,QAClBC,EAAU,EAAQ,QAClBC,EAAU,EAAQ,QAStB,SAASC,EAAKC,GACZ,IAAIjB,GAAS,EACTT,EAAoB,MAAX0B,EAAkB,EAAIA,EAAQ1B,OAG3C,IADAR,KAAKmC,UACIlB,EAAQT,GAAQ,CACvB,IAAI4B,EAAQF,EAAQjB,GACpBjB,KAAKY,IAAIwB,EAAM,GAAIA,EAAM,KAK7BH,EAAKd,UAAUgB,MAAQP,EACvBK,EAAKd,UAAkB,OAAIU,EAC3BI,EAAKd,UAAUkB,IAAMP,EACrBG,EAAKd,UAAUC,IAAMW,EACrBE,EAAKd,UAAUP,IAAMoB,EAErBnC,EAAOC,QAAUmC,G,uBC/BjB,IAAI/B,EAAY,EAAQ,QAcxBL,EAAOC,QALP,WACEE,KAAKC,SAAW,IAAIC,EACpBF,KAAKW,KAAO,I,qBCMdd,EAAOC,QAVP,SAAoBwC,GAClB,IAAIrB,GAAS,EACTsB,EAASC,MAAMF,EAAI3B,MAKvB,OAHA2B,EAAIG,SAAQ,SAASpC,EAAON,GAC1BwC,IAAStB,GAAS,CAAClB,EAAKM,MAEnBkC,I,uBCdT,IAAIG,EAAY,EAAQ,QACpBC,EAAW,EAAQ,QAqCvB9C,EAAOC,QAhBP,SAAe8C,EAAQC,EAAOC,GAa5B,YAZcC,IAAVD,IACFA,EAAQD,EACRA,OAAQE,QAEIA,IAAVD,IAEFA,GADAA,EAAQH,EAASG,KACCA,EAAQA,EAAQ,QAEtBC,IAAVF,IAEFA,GADAA,EAAQF,EAASE,KACCA,EAAQA,EAAQ,GAE7BH,EAAUC,EAASC,GAASC,EAAOC,K,mBChB5CjD,EAAOC,QAXP,SAAmBkD,EAAOhC,GAKxB,IAJA,IAAIC,GAAS,EACTT,EAASQ,EAAOR,OAChByC,EAASD,EAAMxC,SAEVS,EAAQT,GACfwC,EAAMC,EAAShC,GAASD,EAAOC,GAEjC,OAAO+B,I,qBChBT,IAAIE,EAAe,EAAQ,QACvBC,EAAW,EAAQ,QAevBtD,EAAOC,QALP,SAAmBsD,EAAQrD,GACzB,IAAIM,EAAQ8C,EAASC,EAAQrD,GAC7B,OAAOmD,EAAa7C,GAASA,OAAQ0C,I,qBCbvC,IAIMM,EAJFhC,EAAa,EAAQ,QAGrBiC,GACED,EAAM,SAASE,KAAKlC,GAAcA,EAAWmC,MAAQnC,EAAWmC,KAAKC,UAAY,KACvE,iBAAmBJ,EAAO,GAc1CxD,EAAOC,QAJP,SAAkB2B,GAChB,QAAS6B,GAAeA,KAAc7B,I,mBCFxC5B,EAAOC,QAPP,SAAmBO,GACjB,IAAIqD,SAAcrD,EAClB,MAAgB,UAARqD,GAA4B,UAARA,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAVrD,EACU,OAAVA,I,qBCXP,IAAIsD,EAAa,EAAQ,QAqBzB9D,EAAOC,QATP,SAAqBC,EAAKM,GACxB,IAAIC,EAAOqD,EAAW3D,KAAMD,GACxBY,EAAOL,EAAKK,KAIhB,OAFAL,EAAKM,IAAIb,EAAKM,GACdL,KAAKW,MAAQL,EAAKK,MAAQA,EAAO,EAAI,EAC9BX,O,qBClBT,IAAI4D,EAAS,EAAQ,QACjBC,EAAa,EAAQ,QACrBC,EAAK,EAAQ,QACbC,EAAc,EAAQ,QACtBC,EAAa,EAAQ,QACrBC,EAAa,EAAQ,QAqBrBC,EAAcN,EAASA,EAAOzC,eAAY4B,EAC1CoB,EAAgBD,EAAcA,EAAYE,aAAUrB,EAoFxDlD,EAAOC,QAjEP,SAAoBsD,EAAQiB,EAAOC,EAAKC,EAASC,EAAYC,EAAWC,GACtE,OAAQJ,GACN,IAzBc,oBA0BZ,GAAKlB,EAAOuB,YAAcN,EAAMM,YAC3BvB,EAAOwB,YAAcP,EAAMO,WAC9B,OAAO,EAETxB,EAASA,EAAOyB,OAChBR,EAAQA,EAAMQ,OAEhB,IAlCiB,uBAmCf,QAAKzB,EAAOuB,YAAcN,EAAMM,aAC3BF,EAAU,IAAIZ,EAAWT,GAAS,IAAIS,EAAWQ,KAKxD,IAnDU,mBAoDV,IAnDU,gBAoDV,IAjDY,kBAoDV,OAAOP,GAAIV,GAASiB,GAEtB,IAxDW,iBAyDT,OAAOjB,EAAO0B,MAAQT,EAAMS,MAAQ1B,EAAO2B,SAAWV,EAAMU,QAE9D,IAxDY,kBAyDZ,IAvDY,kBA2DV,OAAO3B,GAAWiB,EAAQ,GAE5B,IAjES,eAkEP,IAAIW,EAAUhB,EAEhB,IAjES,eAkEP,IAAIiB,EA5EiB,EA4ELV,EAGhB,GAFAS,IAAYA,EAAUf,GAElBb,EAAOzC,MAAQ0D,EAAM1D,OAASsE,EAChC,OAAO,EAGT,IAAIC,EAAUR,EAAMrC,IAAIe,GACxB,GAAI8B,EACF,OAAOA,GAAWb,EAEpBE,GAtFuB,EAyFvBG,EAAM9D,IAAIwC,EAAQiB,GAClB,IAAI9B,EAASwB,EAAYiB,EAAQ5B,GAAS4B,EAAQX,GAAQE,EAASC,EAAYC,EAAWC,GAE1F,OADAA,EAAc,OAAEtB,GACTb,EAET,IAnFY,kBAoFV,GAAI4B,EACF,OAAOA,EAAczC,KAAK0B,IAAWe,EAAczC,KAAK2C,GAG9D,OAAO,I,qBC5GTxE,EAAOC,QAAU,03F,qBCAjB,IAIIqF,EAJY,EAAQ,OAIVC,CAHH,EAAQ,QAGW,WAE9BvF,EAAOC,QAAUqF,G,mBCUjBtF,EAAOC,QANP,SAAoBC,GAClB,IAAIwC,EAASvC,KAAKoB,IAAIrB,WAAeC,KAAKC,SAASF,GAEnD,OADAC,KAAKW,MAAQ4B,EAAS,EAAI,EACnBA,I,qBCbT,IAGIsB,EAHO,EAAQ,QAGGA,WAEtBhE,EAAOC,QAAU+D,G,qBCLjB,IAAIF,EAAa,EAAQ,QAezB9D,EAAOC,QAJP,SAAqBC,GACnB,OAAO4D,EAAW3D,KAAMD,GAAKsC,IAAItC,K,qBCZnC,IAAIsF,EAAe,EAAQ,QAsB3BxF,EAAOC,QAPP,SAAiBC,EAAKM,GACpB,IAAIC,EAAON,KAAKC,SAGhB,OAFAD,KAAKW,MAAQX,KAAKoB,IAAIrB,GAAO,EAAI,EACjCO,EAAKP,GAAQsF,QAA0BtC,IAAV1C,EAfV,4BAekDA,EAC9DL,O,mBCPTH,EAAOC,QALP,WACEE,KAAKC,SAAW,GAChBD,KAAKW,KAAO,I,mBCQdd,EAAOC,QARP,SAAqBC,GACnB,IAAIO,EAAON,KAAKC,SACZsC,EAASjC,EAAa,OAAEP,GAG5B,OADAC,KAAKW,KAAOL,EAAKK,KACV4B,I,mBCUT1C,EAAOC,QAfP,SAAqBkD,EAAOsC,GAM1B,IALA,IAAIrE,GAAS,EACTT,EAAkB,MAATwC,EAAgB,EAAIA,EAAMxC,OACnC+E,EAAW,EACXhD,EAAS,KAEJtB,EAAQT,GAAQ,CACvB,IAAIH,EAAQ2C,EAAM/B,GACdqE,EAAUjF,EAAOY,EAAO+B,KAC1BT,EAAOgD,KAAclF,GAGzB,OAAOkC,I,qBCrBT,IAAIiD,EAAc,EAAQ,QACtBC,EAAY,EAAQ,QAMpBC,EAHcC,OAAOxE,UAGcuE,qBAGnCE,EAAmBD,OAAOE,sBAS1BC,EAAcF,EAA+B,SAASxC,GACxD,OAAc,MAAVA,EACK,IAETA,EAASuC,OAAOvC,GACToC,EAAYI,EAAiBxC,IAAS,SAAS2C,GACpD,OAAOL,EAAqBhE,KAAK0B,EAAQ2C,QANRN,EAUrC5F,EAAOC,QAAUgG,G,qBC7BjB,IAAIE,EAAa,EAAQ,QACrBC,EAAW,EAAQ,QACnBC,EAAW,EAAQ,QACnBC,EAAW,EAAQ,QASnBC,EAAe,8BAGfC,EAAY9E,SAASJ,UACrBmF,EAAcX,OAAOxE,UAGrBG,EAAe+E,EAAU7E,SAGzB+E,EAAiBD,EAAYC,eAG7BC,EAAaC,OAAO,IACtBnF,EAAaI,KAAK6E,GAAgBG,QAjBjB,sBAiBuC,QACvDA,QAAQ,yDAA0D,SAAW,KAmBhF7G,EAAOC,QARP,SAAsBO,GACpB,SAAK6F,EAAS7F,IAAU4F,EAAS5F,MAGnB2F,EAAW3F,GAASmG,EAAaJ,GAChCO,KAAKR,EAAS9F,M,mBC/B/BR,EAAOC,QAJP,SAAkBsD,EAAQrD,GACxB,OAAiB,MAAVqD,OAAiBL,EAAYK,EAAOrD,K,uBCT7C,IAII6G,EAJY,EAAQ,OAIVxB,CAHH,EAAQ,QAGW,WAE9BvF,EAAOC,QAAU8G,G,qBCNjB,IAAIC,EAAY,EAAQ,QAiBxBhH,EAAOC,QAPP,SAAoBwC,EAAKvC,GACvB,IAAIO,EAAOgC,EAAIrC,SACf,OAAO4G,EAAU9G,GACbO,EAAmB,iBAAPP,EAAkB,SAAW,QACzCO,EAAKgC,M,mBCQXzC,EAAOC,QAZP,SAAmBkD,EAAOsC,GAIxB,IAHA,IAAIrE,GAAS,EACTT,EAAkB,MAATwC,EAAgB,EAAIA,EAAMxC,SAE9BS,EAAQT,GACf,GAAI8E,EAAUtC,EAAM/B,GAAQA,EAAO+B,GACjC,OAAO,EAGX,OAAO,I,qBCnBT,IAAI8D,EAAW,EAAQ,QACnB3G,EAAM,EAAQ,QACdgF,EAAU,EAAQ,QAClB4B,EAAM,EAAQ,QACdH,EAAU,EAAQ,QAClBI,EAAa,EAAQ,QACrBb,EAAW,EAAQ,QAYnBc,EAAqBd,EAASW,GAC9BI,EAAgBf,EAAShG,GACzBgH,EAAoBhB,EAAShB,GAC7BiC,EAAgBjB,EAASY,GACzBM,EAAoBlB,EAASS,GAS7BU,EAASN,GAGRF,GAnBa,qBAmBDQ,EAAO,IAAIR,EAAS,IAAIS,YAAY,MAChDpH,GA1BQ,gBA0BDmH,EAAO,IAAInH,IAClBgF,GAzBY,oBAyBDmC,EAAOnC,EAAQqC,YAC1BT,GAzBQ,gBAyBDO,EAAO,IAAIP,IAClBH,GAzBY,oBAyBDU,EAAO,IAAIV,MACzBU,EAAS,SAASjH,GAChB,IAAIkC,EAASyE,EAAW3G,GACpBoH,EA/BQ,mBA+BDlF,EAAsBlC,EAAMqH,iBAAc3E,EACjD4E,EAAaF,EAAOtB,EAASsB,GAAQ,GAEzC,GAAIE,EACF,OAAQA,GACN,KAAKV,EAAoB,MA/Bf,oBAgCV,KAAKC,EAAe,MAtCf,eAuCL,KAAKC,EAAmB,MArCf,mBAsCT,KAAKC,EAAe,MArCf,eAsCL,KAAKC,EAAmB,MArCf,mBAwCb,OAAO9E,IAIX1C,EAAOC,QAAUwH,G,mBCzDjBzH,EAAOC,QAAU,s8H,qBCAjB,IAAIuF,EAAe,EAAQ,QAc3BxF,EAAOC,QALP,WACEE,KAAKC,SAAWoF,EAAeA,EAAa,MAAQ,GACpDrF,KAAKW,KAAO,I,mBCEdd,EAAOC,QAJP,SAAkBC,GAChB,OAAOC,KAAKC,SAASmB,IAAIrB,K,qBCV3B,IAAI6H,EAAiB,EAAQ,QACzBC,EAAkB,EAAQ,QAC1BC,EAAe,EAAQ,QACvBC,EAAe,EAAQ,QACvBC,EAAe,EAAQ,QAS3B,SAAS9H,EAAUgC,GACjB,IAAIjB,GAAS,EACTT,EAAoB,MAAX0B,EAAkB,EAAIA,EAAQ1B,OAG3C,IADAR,KAAKmC,UACIlB,EAAQT,GAAQ,CACvB,IAAI4B,EAAQF,EAAQjB,GACpBjB,KAAKY,IAAIwB,EAAM,GAAIA,EAAM,KAK7BlC,EAAUiB,UAAUgB,MAAQyF,EAC5B1H,EAAUiB,UAAkB,OAAI0G,EAChC3H,EAAUiB,UAAUkB,IAAMyF,EAC1B5H,EAAUiB,UAAUC,IAAM2G,EAC1B7H,EAAUiB,UAAUP,IAAMoH,EAE1BnI,EAAOC,QAAUI,G,uBC/BjB,IAAI+H,EAAc,EAAQ,QAkC1BpI,EAAOC,QAJP,SAAiBO,EAAOgE,GACtB,OAAO4D,EAAY5H,EAAOgE,K,qBC/B5B,IAGIgB,EAHY,EAAQ,OAGLD,CAAUO,OAAQ,UAErC9F,EAAOC,QAAUuF,G,qBCLjB,IAAIzF,EAAe,EAAQ,QAyB3BC,EAAOC,QAbP,SAAsBC,EAAKM,GACzB,IAAIC,EAAON,KAAKC,SACZgB,EAAQrB,EAAaU,EAAMP,GAQ/B,OANIkB,EAAQ,KACRjB,KAAKW,KACPL,EAAKI,KAAK,CAACX,EAAKM,KAEhBC,EAAKW,GAAO,GAAKZ,EAEZL,O,qBCtBT,IAAIJ,EAAe,EAAQ,QAMvBsI,EAHa1F,MAAMrB,UAGC+G,OA4BxBrI,EAAOC,QAjBP,SAAyBC,GACvB,IAAIO,EAAON,KAAKC,SACZgB,EAAQrB,EAAaU,EAAMP,GAE/B,QAAIkB,EAAQ,KAIRA,GADYX,EAAKE,OAAS,EAE5BF,EAAK6H,MAELD,EAAOxG,KAAKpB,EAAMW,EAAO,KAEzBjB,KAAKW,MACA,K,kCC/BT,mBAQA,IAAIyH,EAAU,WACZ,GAAmB,oBAARjI,IACT,OAAOA,IAWT,SAASkI,EAASC,EAAKvI,GACrB,IAAIwC,GAAU,EASd,OARA+F,EAAIC,MAAK,SAAUnG,EAAOnB,GACxB,OAAImB,EAAM,KAAOrC,IACfwC,EAAStB,GACF,MAKJsB,EAGT,OAEE,WACE,SAASiG,IACPxI,KAAKyI,YAAc,GAwFrB,OArFA9C,OAAO+C,eAAeF,EAAQrH,UAAW,OAAQ,CAI/CkB,IAAK,WACH,OAAOrC,KAAKyI,YAAYjI,QAE1BmI,YAAY,EACZC,cAAc,IAOhBJ,EAAQrH,UAAUkB,IAAM,SAAUtC,GAChC,IAAIkB,EAAQoH,EAASrI,KAAKyI,YAAa1I,GACnCqC,EAAQpC,KAAKyI,YAAYxH,GAC7B,OAAOmB,GAASA,EAAM,IASxBoG,EAAQrH,UAAUP,IAAM,SAAUb,EAAKM,GACrC,IAAIY,EAAQoH,EAASrI,KAAKyI,YAAa1I,IAElCkB,EACHjB,KAAKyI,YAAYxH,GAAO,GAAKZ,EAE7BL,KAAKyI,YAAY/H,KAAK,CAACX,EAAKM,KAShCmI,EAAQrH,UAAU0H,OAAS,SAAU9I,GACnC,IAAImC,EAAUlC,KAAKyI,YACfxH,EAAQoH,EAASnG,EAASnC,IAEzBkB,GACHiB,EAAQgG,OAAOjH,EAAO,IAS1BuH,EAAQrH,UAAUC,IAAM,SAAUrB,GAChC,SAAUsI,EAASrI,KAAKyI,YAAa1I,IAOvCyI,EAAQrH,UAAUgB,MAAQ,WACxBnC,KAAKyI,YAAYP,OAAO,IAS1BM,EAAQrH,UAAUsB,QAAU,SAAUqG,EAAUC,QAClC,IAARA,IACFA,EAAM,MAGR,IAAK,IAAIC,EAAK,EAAGC,EAAKjJ,KAAKyI,YAAaO,EAAKC,EAAGzI,OAAQwI,IAAM,CAC5D,IAAI5G,EAAQ6G,EAAGD,GACfF,EAASpH,KAAKqH,EAAK3G,EAAM,GAAIA,EAAM,MAIhCoG,EA5FJ,GA1BK,GA+HVU,EAA8B,oBAAXC,QAA8C,oBAAbC,UAA4BD,OAAOC,WAAaA,SAEpGC,OACoB,IAAXC,GAA0BA,EAAOC,OAASA,KAC5CD,EAGW,oBAATE,MAAwBA,KAAKD,OAASA,KACxCC,KAGa,oBAAXL,QAA0BA,OAAOI,OAASA,KAC5CJ,OAIF5H,SAAS,cAATA,GAULkI,EACmC,mBAA1BC,sBAIFA,sBAAsBC,KAAKN,GAG7B,SAAUP,GACf,OAAOc,YAAW,WAChB,OAAOd,EAASe,KAAKC,SACpB,IAAO,KAkFd,IAGIC,EAAiB,CAAC,MAAO,QAAS,SAAU,OAAQ,QAAS,SAAU,OAAQ,UAE/EC,EAAwD,oBAArBC,iBAKnCC,EAEJ,WAME,SAASA,IAMPlK,KAAKmK,YAAa,EAOlBnK,KAAKoK,sBAAuB,EAO5BpK,KAAKqK,mBAAqB,KAO1BrK,KAAKsK,WAAa,GAClBtK,KAAKuK,iBAAmBvK,KAAKuK,iBAAiBZ,KAAK3J,MACnDA,KAAKwK,QAlHT,SAAkB1B,EAAU2B,GAC1B,IAAIC,GAAc,EACdC,GAAe,EACfC,EAAe,EAQnB,SAASC,IACHH,IACFA,GAAc,EACd5B,KAGE6B,GACFG,IAYJ,SAASC,IACPtB,EAAwBoB,GAS1B,SAASC,IACP,IAAIE,EAAYnB,KAAKC,MAErB,GAAIY,EAAa,CAEf,GAAIM,EAAYJ,EAvDA,EAwDd,OAOFD,GAAe,OAEfD,GAAc,EACdC,GAAe,EACff,WAAWmB,EAAiBN,GAG9BG,EAAeI,EAGjB,OAAOF,EAmDUG,CAASjL,KAAKwK,QAAQb,KAAK3J,MA/C1B,IA8OlB,OArLAkK,EAAyB/I,UAAU+J,YAAc,SAAUC,IACnDnL,KAAKsK,WAAWc,QAAQD,IAC5BnL,KAAKsK,WAAW5J,KAAKyK,GAIlBnL,KAAKmK,YACRnK,KAAKqL,YAWTnB,EAAyB/I,UAAUmK,eAAiB,SAAUH,GAC5D,IAAII,EAAYvL,KAAKsK,WACjBrJ,EAAQsK,EAAUH,QAAQD,IAEzBlK,GACHsK,EAAUrD,OAAOjH,EAAO,IAIrBsK,EAAU/K,QAAUR,KAAKmK,YAC5BnK,KAAKwL,eAWTtB,EAAyB/I,UAAUqJ,QAAU,WACrBxK,KAAKyL,oBAIzBzL,KAAKwK,WAaTN,EAAyB/I,UAAUsK,iBAAmB,WAEpD,IAAIC,EAAkB1L,KAAKsK,WAAWqB,QAAO,SAAUR,GACrD,OAAOA,EAASS,eAAgBT,EAASU,eAU3C,OAHAH,EAAgBjJ,SAAQ,SAAU0I,GAChC,OAAOA,EAASW,qBAEXJ,EAAgBlL,OAAS,GAUlC0J,EAAyB/I,UAAUkK,SAAW,WAGvCnC,IAAalJ,KAAKmK,aAOvBf,SAAS2C,iBAAiB,gBAAiB/L,KAAKuK,kBAChDpB,OAAO4C,iBAAiB,SAAU/L,KAAKwK,SAEnCR,GACFhK,KAAKqK,mBAAqB,IAAIJ,iBAAiBjK,KAAKwK,SACpDxK,KAAKqK,mBAAmB2B,QAAQ5C,SAAU,CACxC6C,YAAY,EACZC,WAAW,EACXC,eAAe,EACfC,SAAS,MAGXhD,SAAS2C,iBAAiB,qBAAsB/L,KAAKwK,SACrDxK,KAAKoK,sBAAuB,GAG9BpK,KAAKmK,YAAa,IAUpBD,EAAyB/I,UAAUqK,YAAc,WAG1CtC,GAAclJ,KAAKmK,aAIxBf,SAASiD,oBAAoB,gBAAiBrM,KAAKuK,kBACnDpB,OAAOkD,oBAAoB,SAAUrM,KAAKwK,SAEtCxK,KAAKqK,oBACPrK,KAAKqK,mBAAmBiC,aAGtBtM,KAAKoK,sBACPhB,SAASiD,oBAAoB,qBAAsBrM,KAAKwK,SAG1DxK,KAAKqK,mBAAqB,KAC1BrK,KAAKoK,sBAAuB,EAC5BpK,KAAKmK,YAAa,IAWpBD,EAAyB/I,UAAUoJ,iBAAmB,SAAUtB,GAC9D,IAAIsD,EAAKtD,EAAGuD,aACRA,OAAsB,IAAPD,EAAgB,GAAKA,EAEjBxC,EAAexB,MAAK,SAAUxI,GACnD,SAAUyM,EAAapB,QAAQrL,OAI/BC,KAAKwK,WAUTN,EAAyBuC,YAAc,WAKrC,OAJKzM,KAAK0M,YACR1M,KAAK0M,UAAY,IAAIxC,GAGhBlK,KAAK0M,WASdxC,EAAyBwC,UAAY,KAC9BxC,EAlOT,GA6OIyC,EAAqB,SAA4BC,EAAQC,GAC3D,IAAK,IAAI7D,EAAK,EAAGC,EAAKtD,OAAOnC,KAAKqJ,GAAQ7D,EAAKC,EAAGzI,OAAQwI,IAAM,CAC9D,IAAIjJ,EAAMkJ,EAAGD,GACbrD,OAAO+C,eAAekE,EAAQ7M,EAAK,CACjCM,MAAOwM,EAAM9M,GACb4I,YAAY,EACZmE,UAAU,EACVlE,cAAc,IAIlB,OAAOgE,GAULG,EAAc,SAAqBH,GAOrC,OAHkBA,GAAUA,EAAOI,eAAiBJ,EAAOI,cAAcC,aAGnD5D,GAIpB6D,EAAYC,EAAe,EAAG,EAAG,EAAG,GAQxC,SAASC,EAAQ/M,GACf,OAAOgN,WAAWhN,IAAU,EAW9B,SAASiN,EAAeC,GAGtB,IAFA,IAAIC,EAAY,GAEPxE,EAAK,EAAGA,EAAKyE,UAAUjN,OAAQwI,IACtCwE,EAAUxE,EAAK,GAAKyE,UAAUzE,GAGhC,OAAOwE,EAAUE,QAAO,SAAU/M,EAAMgN,GAEtC,OAAOhN,EAAOyM,EADFG,EAAO,UAAYI,EAAW,aAEzC,GA2CL,SAASC,EAA0BhB,GAGjC,IAAIiB,EAAcjB,EAAOiB,YACrBC,EAAelB,EAAOkB,aAS1B,IAAKD,IAAgBC,EACnB,OAAOZ,EAGT,IAAIK,EAASR,EAAYH,GAAQmB,iBAAiBnB,GAC9CoB,EAnDN,SAAqBT,GAInB,IAHA,IACIS,EAAW,GAENhF,EAAK,EAAGiF,EAHD,CAAC,MAAO,QAAS,SAAU,QAGDjF,EAAKiF,EAAYzN,OAAQwI,IAAM,CACvE,IAAI2E,EAAWM,EAAYjF,GACvB3I,EAAQkN,EAAO,WAAaI,GAChCK,EAASL,GAAYP,EAAQ/M,GAG/B,OAAO2N,EAyCQE,CAAYX,GACvBY,EAAWH,EAASI,KAAOJ,EAASK,MACpCC,EAAUN,EAASO,IAAMP,EAASQ,OAKlCC,EAAQrB,EAAQG,EAAOkB,OACvBC,EAAStB,EAAQG,EAAOmB,QAuB5B,GApByB,eAArBnB,EAAOoB,YAOLpF,KAAKqF,MAAMH,EAAQN,KAAcN,IACnCY,GAASnB,EAAeC,EAAQ,OAAQ,SAAWY,GAGjD5E,KAAKqF,MAAMF,EAASJ,KAAaR,IACnCY,GAAUpB,EAAeC,EAAQ,MAAO,UAAYe,KA+D1D,SAA2B1B,GACzB,OAAOA,IAAWG,EAAYH,GAAQxD,SAASyF,gBAxD1CC,CAAkBlC,GAAS,CAK9B,IAAImC,EAAgBxF,KAAKqF,MAAMH,EAAQN,GAAYN,EAC/CmB,EAAiBzF,KAAKqF,MAAMF,EAASJ,GAAWR,EAMpB,IAA5BvE,KAAK0F,IAAIF,KACXN,GAASM,GAGsB,IAA7BxF,KAAK0F,IAAID,KACXN,GAAUM,GAId,OAAO7B,EAAea,EAASI,KAAMJ,EAASO,IAAKE,EAAOC,GAU5D,IAAIQ,EAGgC,oBAAvBC,mBACF,SAAUvC,GACf,OAAOA,aAAkBG,EAAYH,GAAQuC,oBAO1C,SAAUvC,GACf,OAAOA,aAAkBG,EAAYH,GAAQwC,YAAwC,mBAAnBxC,EAAOyC,SAsB7E,SAASC,EAAe1C,GACtB,OAAK1D,EAIDgG,EAAqBtC,GApI3B,SAA2BA,GACzB,IAAI2C,EAAO3C,EAAOyC,UAClB,OAAOlC,EAAe,EAAG,EAAGoC,EAAKd,MAAOc,EAAKb,QAmIpCc,CAAkB5C,GAGpBgB,EAA0BhB,GAPxBM,EAmDX,SAASC,EAAesC,EAAGC,EAAGjB,EAAOC,GACnC,MAAO,CACLe,EAAGA,EACHC,EAAGA,EACHjB,MAAOA,EACPC,OAAQA,GASZ,IAAIiB,EAEJ,WAME,SAASA,EAAkB/C,GAMzB5M,KAAK4P,eAAiB,EAOtB5P,KAAK6P,gBAAkB,EAOvB7P,KAAK8P,aAAe3C,EAAe,EAAG,EAAG,EAAG,GAC5CnN,KAAK4M,OAASA,EA8BhB,OApBA+C,EAAkBxO,UAAU4O,SAAW,WACrC,IAAIC,EAAOV,EAAetP,KAAK4M,QAE/B,OADA5M,KAAK8P,aAAeE,EACbA,EAAKvB,QAAUzO,KAAK4P,gBAAkBI,EAAKtB,SAAW1O,KAAK6P,iBAUpEF,EAAkBxO,UAAU8O,cAAgB,WAC1C,IAAID,EAAOhQ,KAAK8P,aAGhB,OAFA9P,KAAK4P,eAAiBI,EAAKvB,MAC3BzO,KAAK6P,gBAAkBG,EAAKtB,OACrBsB,GAGFL,EAzDT,GA4DIO,EASF,SAA6BtD,EAAQuD,GACnC,IAvHwBlH,EACtBwG,EACAC,EACAjB,EACAC,EAEA0B,EACAJ,EAgHEK,GAtHFZ,GADsBxG,EAuHakH,GAtH5BV,EACPC,EAAIzG,EAAGyG,EACPjB,EAAQxF,EAAGwF,MACXC,EAASzF,EAAGyF,OAEZ0B,EAAoC,oBAApBE,gBAAkCA,gBAAkB3K,OACpEqK,EAAOrK,OAAO4K,OAAOH,EAAOjP,WAEhCwL,EAAmBqD,EAAM,CACvBP,EAAGA,EACHC,EAAGA,EACHjB,MAAOA,EACPC,OAAQA,EACRH,IAAKmB,EACLrB,MAAOoB,EAAIhB,EACXD,OAAQE,EAASgB,EACjBtB,KAAMqB,IAEDO,GA2GLrD,EAAmB3M,KAAM,CACvB4M,OAAQA,EACRyD,YAAaA,KAOfG,EAEJ,WAWE,SAASA,EAAkB1H,EAAU2H,EAAYC,GAgB/C,GATA1Q,KAAK2Q,oBAAsB,GAO3B3Q,KAAK4Q,cAAgB,IAAIxI,EAED,mBAAbU,EACT,MAAM,IAAI+H,UAAU,2DAGtB7Q,KAAK8Q,UAAYhI,EACjB9I,KAAK+Q,YAAcN,EACnBzQ,KAAKgR,aAAeN,EA8ItB,OApIAF,EAAkBrP,UAAU6K,QAAU,SAAUY,GAC9C,IAAKa,UAAUjN,OACb,MAAM,IAAIqQ,UAAU,4CAItB,GAAuB,oBAAZI,SAA6BA,mBAAmBtL,OAA3D,CAIA,KAAMiH,aAAkBG,EAAYH,GAAQqE,SAC1C,MAAM,IAAIJ,UAAU,yCAGtB,IAAIK,EAAelR,KAAK4Q,cAEpBM,EAAa9P,IAAIwL,KAIrBsE,EAAatQ,IAAIgM,EAAQ,IAAI+C,EAAkB/C,IAC/C5M,KAAK+Q,YAAY7F,YAAYlL,MAE7BA,KAAK+Q,YAAYvG,aAUnBgG,EAAkBrP,UAAUgQ,UAAY,SAAUvE,GAChD,IAAKa,UAAUjN,OACb,MAAM,IAAIqQ,UAAU,4CAItB,GAAuB,oBAAZI,SAA6BA,mBAAmBtL,OAA3D,CAIA,KAAMiH,aAAkBG,EAAYH,GAAQqE,SAC1C,MAAM,IAAIJ,UAAU,yCAGtB,IAAIK,EAAelR,KAAK4Q,cAEnBM,EAAa9P,IAAIwL,KAItBsE,EAAarI,OAAO+D,GAEfsE,EAAavQ,MAChBX,KAAK+Q,YAAYzF,eAAetL,SAUpCwQ,EAAkBrP,UAAUmL,WAAa,WACvCtM,KAAKoR,cACLpR,KAAK4Q,cAAczO,QACnBnC,KAAK+Q,YAAYzF,eAAetL,OAUlCwQ,EAAkBrP,UAAUyK,aAAe,WACzC,IAAIyF,EAAQrR,KAEZA,KAAKoR,cACLpR,KAAK4Q,cAAcnO,SAAQ,SAAU6O,GAC/BA,EAAYvB,YACdsB,EAAMV,oBAAoBjQ,KAAK4Q,OAYrCd,EAAkBrP,UAAU2K,gBAAkB,WAE5C,GAAK9L,KAAK6L,YAAV,CAIA,IAAI9C,EAAM/I,KAAKgR,aAEX9O,EAAUlC,KAAK2Q,oBAAoBrO,KAAI,SAAUgP,GACnD,OAAO,IAAIpB,EAAoBoB,EAAY1E,OAAQ0E,EAAYrB,oBAEjEjQ,KAAK8Q,UAAUpP,KAAKqH,EAAK7G,EAAS6G,GAClC/I,KAAKoR,gBASPZ,EAAkBrP,UAAUiQ,YAAc,WACxCpR,KAAK2Q,oBAAoBzI,OAAO,IASlCsI,EAAkBrP,UAAU0K,UAAY,WACtC,OAAO7L,KAAK2Q,oBAAoBnQ,OAAS,GAGpCgQ,EA/KT,GAqLIjF,EAA+B,oBAAZ3E,QAA0B,IAAIA,QAAY,IAAIwB,EAMjEmJ,EASF,SAASA,EAAezI,GACtB,KAAM9I,gBAAgBuR,GACpB,MAAM,IAAIV,UAAU,sCAGtB,IAAKpD,UAAUjN,OACb,MAAM,IAAIqQ,UAAU,4CAGtB,IAAIJ,EAAavG,EAAyBuC,cACtCtB,EAAW,IAAIqF,EAAkB1H,EAAU2H,EAAYzQ,MAC3DuL,EAAU3K,IAAIZ,KAAMmL,IAOxB,CAAC,UAAW,YAAa,cAAc1I,SAAQ,SAAU+O,GACvDD,EAAepQ,UAAUqQ,GAAU,WACjC,IAAIvI,EAEJ,OAAQA,EAAKsC,EAAUlJ,IAAIrC,OAAOwR,GAAQC,MAAMxI,EAAIwE,eAIxD,IAAIxM,OAEqC,IAA5BoI,EAASkI,eACXlI,EAASkI,eAGXA,EAGM,a,2CCvlCf,IAAIG,EAAgB,EAAQ,QACxBC,EAAiB,EAAQ,QACzBC,EAAc,EAAQ,QACtBC,EAAc,EAAQ,QACtBC,EAAc,EAAQ,QAS1B,SAAS1R,EAAS8B,GAChB,IAAIjB,GAAS,EACTT,EAAoB,MAAX0B,EAAkB,EAAIA,EAAQ1B,OAG3C,IADAR,KAAKmC,UACIlB,EAAQT,GAAQ,CACvB,IAAI4B,EAAQF,EAAQjB,GACpBjB,KAAKY,IAAIwB,EAAM,GAAIA,EAAM,KAK7BhC,EAASe,UAAUgB,MAAQuP,EAC3BtR,EAASe,UAAkB,OAAIwQ,EAC/BvR,EAASe,UAAUkB,IAAMuP,EACzBxR,EAASe,UAAUC,IAAMyQ,EACzBzR,EAASe,UAAUP,IAAMkR,EAEzBjS,EAAOC,QAAUM,G,qBC/BjB,IAAI2R,EAAQ,EAAQ,QAChBhO,EAAc,EAAQ,QACtBiO,EAAa,EAAQ,QACrBC,EAAe,EAAQ,QACvB3K,EAAS,EAAQ,QACjB4K,EAAU,EAAQ,QAClBC,EAAW,EAAQ,QACnBC,EAAe,EAAQ,QAQvBC,EAAY,kBAMZ9L,EAHcZ,OAAOxE,UAGQoF,eA6DjC1G,EAAOC,QA7CP,SAAyBsD,EAAQiB,EAAOE,EAASC,EAAYC,EAAWC,GACtE,IAAI4N,EAAWJ,EAAQ9O,GACnBmP,EAAWL,EAAQ7N,GACnBmO,EAASF,EA1BA,iBA0BsBhL,EAAOlE,GACtCqP,EAASF,EA3BA,iBA2BsBjL,EAAOjD,GAKtCqO,GAHJF,EA9BY,sBA8BHA,EAAoBH,EAAYG,IAGhBH,EACrBM,GAHJF,EA/BY,sBA+BHA,EAAoBJ,EAAYI,IAGhBJ,EACrBO,EAAYJ,GAAUC,EAE1B,GAAIG,GAAaT,EAAS/O,GAAS,CACjC,IAAK+O,EAAS9N,GACZ,OAAO,EAETiO,GAAW,EACXI,GAAW,EAEb,GAAIE,IAAcF,EAEhB,OADAhO,IAAUA,EAAQ,IAAIqN,GACdO,GAAYF,EAAahP,GAC7BW,EAAYX,EAAQiB,EAAOE,EAASC,EAAYC,EAAWC,GAC3DsN,EAAW5O,EAAQiB,EAAOmO,EAAQjO,EAASC,EAAYC,EAAWC,GAExE,KArDyB,EAqDnBH,GAAiC,CACrC,IAAIsO,EAAeH,GAAYnM,EAAe7E,KAAK0B,EAAQ,eACvD0P,EAAeH,GAAYpM,EAAe7E,KAAK2C,EAAO,eAE1D,GAAIwO,GAAgBC,EAAc,CAChC,IAAIC,EAAeF,EAAezP,EAAO/C,QAAU+C,EAC/C4P,EAAeF,EAAezO,EAAMhE,QAAUgE,EAGlD,OADAK,IAAUA,EAAQ,IAAIqN,GACftN,EAAUsO,EAAcC,EAAczO,EAASC,EAAYE,IAGtE,QAAKkO,IAGLlO,IAAUA,EAAQ,IAAIqN,GACfE,EAAa7O,EAAQiB,EAAOE,EAASC,EAAYC,EAAWC,M,qBC/ErE,IAIIvE,EAJY,EAAQ,OAIdiF,CAHC,EAAQ,QAGO,OAE1BvF,EAAOC,QAAUK,G,qBCNjB,IAAIkF,EAAe,EAAQ,QAMvBkB,EAHcZ,OAAOxE,UAGQoF,eAgBjC1G,EAAOC,QALP,SAAiBC,GACf,IAAIO,EAAON,KAAKC,SAChB,OAAOoF,OAA8BtC,IAAdzC,EAAKP,GAAsBwG,EAAe7E,KAAKpB,EAAMP,K,qBCnB9E,IAAIkC,EAAO,EAAQ,QACf/B,EAAY,EAAQ,QACpBC,EAAM,EAAQ,QAkBlBN,EAAOC,QATP,WACEE,KAAKW,KAAO,EACZX,KAAKC,SAAW,CACd,KAAQ,IAAIgC,EACZ,IAAO,IAAK9B,GAAOD,GACnB,OAAU,IAAI+B,K,uBChBlB,IAAIgR,EAAY,EAAQ,QACpBf,EAAU,EAAQ,QAkBtBrS,EAAOC,QALP,SAAwBsD,EAAQ8P,EAAUC,GACxC,IAAI5Q,EAAS2Q,EAAS9P,GACtB,OAAO8O,EAAQ9O,GAAUb,EAAS0Q,EAAU1Q,EAAQ4Q,EAAY/P,M,qBChBlE,IAAIlD,EAAY,EAAQ,QACpBkT,EAAa,EAAQ,QACrBC,EAAc,EAAQ,QACtBC,EAAW,EAAQ,QACnBC,EAAW,EAAQ,QACnBC,EAAW,EAAQ,QASvB,SAASzB,EAAM7P,GACb,IAAI5B,EAAON,KAAKC,SAAW,IAAIC,EAAUgC,GACzClC,KAAKW,KAAOL,EAAKK,KAInBoR,EAAM5Q,UAAUgB,MAAQiR,EACxBrB,EAAM5Q,UAAkB,OAAIkS,EAC5BtB,EAAM5Q,UAAUkB,IAAMiR,EACtBvB,EAAM5Q,UAAUC,IAAMmS,EACtBxB,EAAM5Q,UAAUP,IAAM4S,EAEtB3T,EAAOC,QAAUiS,G,mBCRjBlS,EAAOC,QALP,SAAqBO,GAEnB,OADAL,KAAKC,SAASW,IAAIP,EAbC,6BAcZL,O,mBCMTH,EAAOC,QAZP,SAAmB8C,EAAQC,EAAOC,GAShC,OARIF,GAAWA,SACCG,IAAVD,IACFF,EAASA,GAAUE,EAAQF,EAASE,QAExBC,IAAVF,IACFD,EAASA,GAAUC,EAAQD,EAASC,IAGjCD,I,mBCLT/C,EAAOC,QAJP,SAAkBC,GAChB,OAAOC,KAAKC,SAASoC,IAAItC,K,uBCV3B,IAAI4D,EAAa,EAAQ,QAiBzB9D,EAAOC,QANP,SAAwBC,GACtB,IAAIwC,EAASoB,EAAW3D,KAAMD,GAAa,OAAEA,GAE7C,OADAC,KAAKW,MAAQ4B,EAAS,EAAI,EACnBA,I,mBCsBT1C,EAAOC,QAJP,SAAYO,EAAOgE,GACjB,OAAOhE,IAAUgE,GAAUhE,GAAUA,GAASgE,GAAUA,I,6CC5B9CoP,E,+EAAAA,K,iBAAAA,E,oBAAAA,E,qBAAAA,E,sBAAAA,E,eAAAA,M,KAmBZ,IAiCeC,EAjCwC,SAAC,GAGlD,IAFJC,EAEI,EAFJA,QACAC,EACI,EADJA,QAKMC,EAAgBC,uBACpB,SAACpQ,GACCkQ,GAAWA,EAAQlQ,KAErB,CAACkQ,IAGH,OACE,kBAACG,EAAD,KACGJ,EAAQrR,KAAI,WAAuBrB,GAAvB,IAAGyC,EAAH,EAAGA,KAAMsQ,EAAT,EAASA,KAAMC,EAAf,EAAeA,KAAf,OACVD,EAUG,KATF,kBAACE,EAAD,CACEnU,IAAG,UAAYkB,EACf2S,QAAS,WACPC,EAAcnQ,KAGhB,kBAACyQ,EAAD,CAAYC,IAAK1Q,EAAM2Q,IAAKJ,IAC3BvQ,QAUPyQ,EAAaG,IAAOC,IAAV,6EAAGD,CAAH,6EAINE,YAAI,IACHA,YAAI,KAGTN,EAAeI,IAAOG,OAAV,+EAAGH,CAAH,4RAELE,YAAI,IAAOA,YAAI,IAAOA,YAAI,IAAOA,YAAI,IAQjCA,YAAI,IACVE,IAAOC,UACHH,YAAI,KAUbT,EAAmBO,IAAOM,IAAV,mFAAGN,CAAH,qPACTE,YAAI,IAASA,YAAI,IACdA,YAAI,IACTA,YAAI,KACCE,IAAOG,UAKVL,YAAI,IACHA,YAAI,IACAE,IAAOG,W,8HC8DnBC,EAAcR,IAAOC,IAAV,2EAAGD,CAAH,sDACLE,YAAI,IACEA,YAAI,KAIhBO,EAAcT,IAAOU,KAAV,2EAAGV,CAAH,wCACAE,YAAI,KAIfS,EAAoBX,IAAOM,IAAV,iFAAGN,CAAH,oCAKjBJ,EAAeI,IAAOG,OAAV,4EAAGH,CAAH,sKAMPI,IAAOC,UAEHH,YAAI,IAEFA,YAAI,KAIfU,EAA0BZ,IAAOM,IAAV,uFAAGN,CAAH,0GACjBE,YAAI,KAAUA,YAAI,KAQfW,EA9K0C,SAAC,GAAqB,IAAnBC,EAAmB,EAAnBA,MAAOC,EAAY,EAAZA,MAC3DC,EAAaC,cAD0D,EAE3CC,oBAAS,GAApCC,EAFsE,KAE3DC,EAF2D,KAGvEC,EAAuBC,iBAAuB,MAEpDC,qBAAU,WACR,IAAMC,EAAkB,SAACC,GAAuB,QAC3B,UAAGJ,EAAqBK,eAAxB,aAAG,EAA8BC,SAClDF,EAAMnJ,UAGc6I,GACpBC,GAAa,IAMjB,OAFAtM,SAAS2C,iBAAiB,QAAS+J,GAE5B,WACL1M,SAASiD,oBAAoB,QAASyJ,OAI1C,IAAMI,EAA8B,CAClC,CACExS,KAAM+P,EAAgB0C,SACtBlC,KAAMmC,KAER,CACE1S,KAAM+P,EAAgB4C,UACtBpC,KAAMqC,KAER,CACE5S,KAAM+P,EAAgB8C,UACtBtC,KAAMuC,KAER,CACE9S,KAAM+P,EAAgBgD,MACtBxC,KAAMyC,KAER,CACE1C,OACE,oBAAO7K,QACPA,OAAOwN,WACPxN,OAAOwN,UAAUC,WAEnBlT,KAAM+P,EAAgBoD,KACtB5C,KAAM6C,MAIJC,EAAgBjD,uBACpB,SAACnS,GACCA,EAAEqV,iBAGE,oBAAO7N,QAA0BA,OAAOwN,UAAUM,MACpD9N,OAAOwN,UACJM,MAAM,CACLC,IAAK/N,OAAOgO,SAASC,OAEtBC,OAAM,SAACC,GAAD,OAAWC,QAAQC,KAAKF,MAEjC5B,GAAcD,KAGlB,CAACA,IAGGgC,EAAkB,SAACP,GACvB,IAAM9I,EAAOjF,OAAOuO,OAAOjJ,MAAQ,EAAI,IACjCF,EAAMpF,OAAOuO,OAAOhJ,OAAS,EAAI,IAEvCvF,OAAOwO,KACLT,EACA,GAFF,gFAGkF9I,EAHlF,QAG8FG,IAQ1FqJ,EAAqB9D,uBACzB,SAACpQ,GACCgS,GAAa,GAEb,IAAMwB,EAAM/N,OAAOgO,SAASC,KACtBS,EAAaC,mBAAmBZ,GAChCa,EAAeD,mBAAmB1C,GAClC4C,EAAeF,mBAAmBzC,GAExC,OAAQ3R,GACN,KAAK+P,EAAgB0C,SACnBsB,EAAgB,yCAAyCI,GACzD,MACF,KAAKpE,EAAgB4C,UACnBoB,EAAgB,uDACyCI,GAEzD,MACF,KAAKpE,EAAgB8C,UACnBkB,EAAgB,6CAC+BI,EADhC,UACoDE,GAEnE,MACF,KAAKtE,EAAgBgD,MACnBgB,EAAgB,gDACkCI,EADnC,kBAC+DG,EAD/D,oBAGf,MACF,KAAKvE,EAAgBoD,MAhCX,SAACK,GACfP,UAAUC,UAAUqB,UAAUf,GAAKG,OAAM,SAACC,GAAD,OAAWC,QAAQC,KAAKF,MAgC3DY,CAAQhB,MAId,CAAC9B,EAAOC,IAGV,OACE,kBAACH,EAAD,KACE,kBAAC,EAAD,CAActB,QAASmD,GACrB,kBAACjC,EAAD,CAAaV,IAAKkB,EAAWjT,IAAI,mBAAoBgS,IAAK8D,MAC1D,kBAACpD,EAAD,KAAcO,EAAWjT,IAAI,qBAE9BoT,GACC,kBAACR,EAAD,CAAmBmD,IAAKzC,GACtB,kBAAC,EAAD,CAAY/B,QAASgE,EAAoBjE,QAASuC,O,qEC3J/CmC,EAAiB,CAC5BC,QAAS,CACPC,QAAS,EACT7I,EAAG,IAEL8I,QAAS,CACPD,QAAS,EACT7I,EAAG,EACH+I,WAAY,CACVhO,MAAO,GACPiO,SAAU,GACVC,KAAM,aAKCC,EAAoB,CAC/BN,QAAS,CACPC,QAAS,EACT7I,EAAG,IAEL8I,QAAS,CACPD,QAAS,EACT7I,EAAG,EACH+I,WAAY,CACVhO,MAAO,GACPiO,SAAU,GACVC,KAAM,a,oCCVNE,EAA2CC,sBAC/C,WAAyBV,GAAzB,IAAGW,EAAH,EAAGA,OAAQ1D,EAAX,EAAWA,MAAO9G,EAAlB,EAAkBA,IAAlB,OACE,kBAACyK,EAAD,CAAeZ,IAAKA,EAAK7J,IAAKA,GAC5B,kBAAC,IAAOqG,IAAR,CACEqE,QAAS,CAAC,UAAW,WACrBX,QAAQ,UACRY,SAAUb,GAEV,kBAACc,EAAA,EAAD,CACEC,gBAAiB,CACfC,OAAQC,IAAWC,SAErB5Y,KAAM2Y,IAAWE,QAEhBnE,IAGL,kBAAC,IAAOT,IAAR,CACEqE,QAAS,CAAC,UAAW,WACrBX,QAAQ,UACRY,SAAUN,GAEV,kBAACO,EAAA,EAAD,CACEM,MAAM,KACNL,gBAAiB,CACfC,OAAQC,IAAWI,QAErB/Y,KAAM2Y,IAAWK,OAEjB,0BAAMC,wBAAyB,CAAEC,OAAQd,GAAU,YAO7DF,EAAQiB,YAAc,UAMtB,IAAMd,EAAgB1E,IAAOM,IAAV,6EAAGN,CAAH,4NAEV,qBAAG/F,IAAH,OAIMiG,YAAIuF,IAASC,KAAKC,MAMtBvF,IAAOwF,MAEdC,IAAad,OACA7E,YAAIuF,IAASC,KAAKX,SAIpBR,I,qBCjBTuB,EAAmB9F,YAAO+F,IAAOzF,KAAjB,+EAAGN,CAAH,yHAUlB,qBAAGgG,SAEHC,YADO,0CAYLC,EAASlG,IAAOmG,OAAV,qEAAGnG,CAAH,gEAEI,qBAAGoG,UAAqC,UAAY,YAS9DC,EAASrG,YAAO+F,IAAOzF,KAAjB,qEAAGN,CAAH,8EAKD,gBAAG3T,EAAH,EAAGA,KAAH,OAAuBA,EAAO6T,YAAI7T,EAAK8N,OAAS,UAC/C,gBAAG9N,EAAH,EAAGA,KAAH,OAAuBA,EAAO6T,YAAI7T,EAAK+N,QAAU,UAOvDkM,EAAUtG,IAAOM,IAAIiG,OAAoB,kBAAkB,CAC/DC,MAAO,CACLvC,QAF2C,EAAGA,aAArC,sEAAGjE,CAAH,gHAUSI,IAAOqG,UAIdC,EAlGwC,SAAC,GAAD,IACrDC,EADqD,EACrDA,cACAC,EAFqD,EAErDA,UACAC,EAHqD,EAGrDA,SACAb,EAJqD,EAIrDA,QACAc,EALqD,EAKrDA,SACAC,EANqD,EAMrDA,eACAC,EAPqD,EAOrDA,OACA3a,EARqD,EAQrDA,KARqD,OAUrD,kBAACyZ,EAAD,CACEnB,QAAS,CACPsC,MAAO,EACP9C,WAAY,CACVhO,MAAO,EACPiO,SAAU,KAGdJ,QAAS,CAAEiD,MAAO,MAClBjB,QAASA,EACTlC,IAAK6C,GAEL,kBAACT,EAAD,eAAQE,UAAWU,EAAUhD,IAAK8C,GAAeva,IAChD2a,GACC,kBAACX,EAAD,CAAQ1B,QAAS,CAAEV,QAAS6C,EAAW,EAAI,GAAKza,KAAMA,GACpD,kBAAC,IAAD,CAAK6a,MAAOF,EAAOE,MAAOV,MAAO,CAAErM,MAAO,OAAQC,OAAQ,WAG9D,kBAACkM,EAAD,CAASrC,QAAS8C,IACjBF,I,sBCJUM,GAlBQ,SACrBC,EACAC,EACAlB,GACS,MA3BG,SACZmB,EACAC,EACAC,EACAC,GAEA,IAAMC,EAAaF,EAAaC,EAE5BtN,EAAQmN,EACRlN,EAASmN,EAQb,OANIG,EAJgBJ,EAAcC,EAKhCnN,EAASD,EAAQuN,EAEjBvN,EAAQC,EAASsN,EAGZ,CACLvN,QACAC,UASwBuN,CACxBxB,EAAOhM,MACPgM,EAAO/L,OACPiN,EAAMlN,MACNkN,EAAMjN,QAJAD,EADC,EACDA,MAAOC,EADN,EACMA,OAOTwN,GAAWzB,EAAOhM,MAAQA,GAAS,EACnC0N,GAAW1B,EAAO/L,OAASA,GAAU,EAE3CgN,EAAQU,UAAUT,EAAOO,EAASC,EAAS1N,EAAOC,ICnB9C2N,GAA0B/H,YAAO+F,IAAOzF,KAAjB,4FAAGN,CAAH,qEAEjBE,YAAI,GACME,IAAOwF,OAIdoC,GAvBsD,SAAC,GAAD,IACnEC,EADmE,EACnEA,UACAC,EAFmE,EAEnEA,SAFmE,OAInE,kBAACH,GAAD,CACEpD,QAAS,CAAEwD,OAAQD,EAAW,KAC9BD,UAAWA,EACXG,KAAM,CAAED,OAAQ,GAChBnE,QAAS,CAAEmE,OAAQ,GACnBhE,WAAY,CACVE,KAAM,UACND,SAAU,M,yFC0BDiE,GAzCQ,SAACC,GACtB,IAAIC,EAAe,EADyD,EAGpCrH,mBAASoH,GAA1CE,EAHqE,KAGvDC,EAHuD,OAI9BvH,oBAAS,GAAhDwH,EAJqE,KAIpDC,EAJoD,OAK5CzH,mBAAS,GAAlCgH,EALqE,KAK3DU,EAL2D,OAMpC1H,mBAAuB,IAAxD2H,EANqE,KAMvDC,EANuD,KAsC5E,OA9BAvH,qBAAU,WACR,IAAIwH,KAAQP,EAAcF,GAA1B,CAIAG,EAAgBH,GAChBK,GAAmB,GACnBG,EAAgB,IAEhB,IAAMD,EAA6B,GACnCP,EAAOna,SAAQ,SAAC6a,GACd,IAAM3B,EAAQ,IAAI4B,MAGlB5B,EAAM6B,OAAS,WACbX,IACAK,EAAY3T,KAAKqF,MAAM,KAAOgO,EAAOpc,OAASqc,KAE1CA,IAAiBD,EAAOpc,QAC1Byc,GAAmB,IAIvBtB,EAAMtH,IAAMiJ,EACZH,EAAaG,GAAU3B,KAGzByB,EAAgBD,MACf,CAACP,IAEG,CAACO,EAAcH,EAAiBR,I,aCyOnCH,GAA0B/H,YAAOgI,IAAV,gFAAGhI,CAAH,qCAMvBmJ,GAAanJ,IAAOM,IAAV,mEAAGN,CAAH,uEACZoJ,gBAGQ,gBAAGC,EAAH,EAAGA,eAAgBC,EAAnB,EAAmBA,gBAAnB,OACRpJ,YAAImJ,EAAiBC,MAInBC,GAAyBvJ,IAAOM,IAAV,+EAAGN,CAAH,8GAUbwJ,GA3QuB,SAAC,GAQjC,MAPJ/E,EAOI,EAPJA,OACA4C,EAMI,EANJA,MACAgC,EAKI,EALJA,eAKI,IAJJI,2BAII,MAJkB,kBAIlB,MAHJH,uBAGI,MAHc,GAGd,EAFJI,EAEI,EAFJA,KACA3I,EACI,EADJA,MAEM4F,EAAgBrF,iBAA8B,MAC9CsF,EAAYtF,iBAAiC,MAC7CqI,EAAarI,iBAA8B,MAC3CsI,EAAUtI,iBAA8B,MACxCuI,EAAYvI,iBAAsB,MALpC,EAMoCJ,mBAAS,GAA1C4I,EANH,KAMiBC,EANjB,OAOwC7I,mBAAS,GAA9C6F,EAPH,KAOmBiD,EAPnB,OAQ0B9I,oBAAS,GAAhC8E,EARH,KAQYiE,EARZ,OAS4B/I,mBAAS,GAAlCgH,EATH,KASaU,EATb,OAU8BsB,cAA3BC,EAVH,KAUcC,EAVd,KAWEC,EAAYC,aAAa,SAAQjD,GAAS,KACxCkD,EAAaC,eAAbD,SACFvJ,EAAaC,cACbwJ,EAAkBH,aAAa,QAAQZ,EAAT,yBAC9BgB,EAAiBJ,aAAa,QAAQZ,EAAT,wBAC5BiB,EAASC,eAhBZ,KAiBgCC,eAA7BC,EAjBH,KAiBgBC,EAjBhB,KAkBE/D,EAASuD,EAAWE,EAAkBC,EAlBxC,EAoBiDM,IAAkB,CACrElH,IAAK8C,IADQqE,EApBX,EAoBI9Q,MAA4B+Q,EApBhC,EAoBwB9Q,OAItBkO,EAAS6C,mBAAQ,WACrB,MACmC,kBAA1BR,EAAMS,sBACU,IAAhBN,EAEAT,EACH,CAACA,EAAUnD,MAAMnH,KACjB7R,MAAMmd,KAAKnd,MAAMmb,GAAgBna,QAAQlB,KACvC,SAACM,GAAD,sBACkBob,EADlB,KAEIa,EAAW,YAAc,YAF7B,UAGYjc,EAAS,GAAGpB,WAAWoe,SAAS,EAAG,KAH/C,KAIIX,EAAMS,gBAAkB,OAAS,UAKtC,KACN,CACDf,EACAE,EACAlB,EACAK,EACAiB,EAAMS,gBACNN,IAhDE,EAmD8CzC,GAAeC,GAA1DO,EAnDH,KAmDiB/B,GAnDjB,KAmD2ByE,GAnD3B,KAqDJhK,qBAAU,WACH4I,GACHC,GAAgBA,MAEjB,CAACD,IAGJ5I,qBAAU,WAGR,OAFAzM,SAAS0W,KAAKhF,MAAMiF,SAAW3E,GAAW,GAAK,SAExC,WACLhS,SAAS0W,KAAKhF,MAAMiF,SAAW,MAEhC,CAAC3E,KAEJ,IAAM4E,GAAWlM,uBAAY,WAC3B,GACEoH,EAAUlF,SACViI,EAAWjI,SAEXiI,EAAWjI,QAAQiK,aAAe,GAClC/B,EAAQlI,QACR,CAEA,IAAMqF,EACJ,EACC,GACElS,OAAO+W,QACNjC,EAAWjI,QAAQmK,wBAAwB5R,IAC3C0P,EAAWjI,QAAQiK,cACrB9W,OAAO+W,QAEX5B,EAAkB/U,KAAK6W,IAAI,EAAG/E,IAG9B,IAAMgF,EACJpC,EAAWjI,QAAQmK,wBAAwB5R,IAC3C0P,EAAWjI,QAAQiK,aAEfzD,EACH,KACE0B,EAAQlI,QAAQiK,aACf9W,OAAOmX,aACNnX,OAAO+W,QAAUG,KACrBA,EAEHnD,EAAY3T,KAAKqF,MAAM2R,KAAM/D,EAAU,EAAG,OAE1C,IAAM4B,EAAe7U,KAAKiX,MAAO7C,EAAiB,GAAK,IAAOnB,GAG5D6B,EADED,GAAgB,EACF,EACPA,EAAeT,EACRS,EAEAT,EAAiB,GAIhCS,GAAgBT,GACfxU,OAAO+W,QACLhC,EAAQlI,QAAQiK,aAAe/E,EAAUlF,QAAQiK,cAClC,IAAnBtC,EAEAY,GAAW,GACFE,GACTF,GAAW,MAGd,CACDrD,EAAUlF,QACViI,EAAWjI,QACXkI,EAAQlI,QACRyI,EACAd,IAGI8C,GAAc3M,uBAAY,WAC9B,GAAIoH,EAAUlF,SAAWoF,IAAYgE,GAAeC,EAAc,CAChE,IAAM3D,EAAUR,EAAUlF,QAAQ0K,WAAW,MACvC/E,EAAQwB,EAAaP,EAAOwB,IAE9B1C,GAAWC,IACbD,EAAQiF,uBAAwB,EAChClF,GAAeC,EAASC,EAAOT,EAAUlF,aAG5C,CACDoJ,EACAC,EACAnE,EAAUlF,QACVoI,EACAxB,EACAxB,KAuCF,OA/BAvF,qBAAU,WAAM,QACT,UAAAoI,EAAWjI,eAAX,eAAoBiK,eAAgB,GAAK,IAC5CD,KACAS,QAED,WAACxC,EAAWjI,eAAZ,aAAC,EAAoBiK,eAKxBpK,qBAAU,WACR4K,OACC,CAACrB,EAAaC,IAEjBxJ,qBAAU,WAIR,OAHAmK,KACA7W,OAAO4C,iBAAiB,SAAUiU,IAE3B,kBAAY7W,OAAOkD,oBAAoB,SAAU2T,OACvD,CAACA,KAEJnK,qBAAU,WAGR,OAFAsI,EAAUnI,QAAUtM,sBAAsB+W,IAEnC,WACqB,OAAtBtC,EAAUnI,SACZ4K,qBAAqBzC,EAAUnI,YAGlC,CAACyK,KAGF,kBAAChD,GAAD,CACEE,eAAgBA,EAChBvF,IAAK8F,EACLN,gBAAiBA,GAEjB,kBAAC,EAAD,CACE3C,cAAeA,EACfC,UAAWA,EACXZ,QAASA,EACTc,SAAUA,GACVC,eAAgBA,EAChBC,OAAQA,EACR3a,KAAM,CACJ8N,MAAO8Q,GAAe,EACtB7Q,OAAQ8Q,GAAgB,IAGzBpE,IACC,kBAACyC,GAAD,CACE/C,MAAO,CAAEpM,OAAQ4L,EAAanR,OAAOmX,YAAb,KAA+B,SAEvD,kBAACO,GAAA,EAAD,CACErE,SAAUA,EACVsE,KAAMxL,EAAWjT,IAAI0b,OAK7B,kBAAC,IAAD,KACuB,MAApB8B,IACC,kBAAC,GAAD,CAAyBrD,SAAUqD,MAGvC,kBAAC,EAAD,CACE9G,OAAQA,EACRX,IAAK6F,EACL5I,MAAOA,EACP9G,IAAK8Q,EAAe,M,aCzQf0B,GAAmB,SAC9BC,EACAC,GAF8B,MAGhB,CACd3I,QAAS,CACPyH,SAAU,SACVrQ,EAAG,GAELgN,KAAMuE,EACF,CACElB,SAAU,UACVrQ,EAAGsR,EACHvI,WAAY,CACVC,SAAU,GACVC,KAAM,YAGV,KAGOuI,GAAsB,SACjC3F,EACA0F,GAFiC,MAGnB,CACd3I,QAAS,CACPiD,MAAO,GAET4F,aAAc,CACZ5F,MAAO,KACP9C,WAAY,CACVE,KAAM,YAGVyI,cAAe,CACb7F,MAAO,EACP9C,WAAY,CACVE,KAAM,WAGV+D,KAAMuE,EACF,CACE1F,QACA9C,WAAY,CACVC,SAAU,GACVC,KAAM,YAGV,KAGO0I,GAAmB,CAC9B/I,QAAS,CACPC,QAAS,IAEX+I,UAAW,CACT/I,QAAS,GACTE,WAAY,CACVE,KAAM,aCwGN4I,GAA2BjN,YAAO+F,IAAOzF,KAAjB,yFAAGN,CAAH,kDAElBE,YAAI,MAIVgN,GAAqBlN,YAAOmN,SAAV,mFAAGnN,CAAH,+FAUlBoN,GAAyBpN,YAAO+F,IAAOzF,KAAjB,uFAAGN,CAAH,oCAKtBqN,GAAkBrN,YAAOsN,KAAV,gFAAGtN,CAAH,mGASfuN,GAAQvN,YAAO+F,IAAOyH,SAAjB,sEAAGxN,CAAH,4DAQLuE,GAAUvE,YAAO+F,IAAOzF,KAAjB,wEAAGN,CAAH,qMAUEE,YAAIuF,IAASC,KAAKC,MAEtBvF,IAAOwF,MAEdC,IAAad,OACA7E,YAAIuF,IAASC,KAAKX,SAI7BuB,GAAUtG,YAAO+F,IAAOzF,KAAjB,wEAAGN,CAAH,sFAMGI,IAAOqN,OAIjBlE,GAAyBvJ,IAAOM,IAAV,uFAAGN,CAAH,0EAOb0N,GAzM4C,SAAC,GAMtD,IALJjJ,EAKI,EALJA,OACAwD,EAII,EAJJA,UACA3I,EAGI,EAHJA,QACAoK,EAEI,EAFJA,KACA3I,EACI,EADJA,MAEQ4M,EAAcnD,eAAdmD,UADJ,EAE4CzM,mBAAS,GAAlDwL,EAFH,KAEqBkB,EAFrB,OAGkC1M,mBAAS,GAAxC2M,EAHH,KAGgBC,EAHhB,KAIEC,EAAyBzM,iBAA8B,MAJzD,EAK8B4I,cAA3BC,EALH,KAKcC,EALd,OAMgClJ,oBAAS,GAAtCyL,EANH,KAMeqB,EANf,KAQJzM,qBAAU,WACH4I,GACHC,GAAgBA,MAEjB,CAACD,IAZA,IAcY8D,EAA8BjD,IAAkB,CAC9DlH,IAAKiK,IADC3T,OAIF8T,EAAoB5D,aAAa,kBACnBZ,EADkB,QAIhCyE,EAA0B7D,aAAa,yBAClBZ,EADiB,QAItC1I,EAAaC,cA1Bf,EA2BsBC,oBAAS,GAA5BkN,EA3BH,KA2BUC,EA3BV,KAgCJ9M,qBAAU,WACR,GAAIwM,EAAuBrM,QAAS,OAI9BqM,EAAuBrM,QAAQmK,wBAFjC5R,EAFgC,EAEhCA,IACAG,EAHgC,EAGhCA,OAEIf,EAAWY,EAAMG,EAAS,EAC1BkU,EAAUzZ,OAAOmX,YAAc,EAErC4B,EAAoBU,EAAUjV,GAC9ByU,EAAejZ,OAAOmX,YAAc5R,MAErC,CAAC6T,EAA2BF,EAAuBrM,UAEtD,IAAM6M,EAAkB/O,uBAAY,WAClCwO,GAAc,GAEV1O,GACFA,MAED,CAACA,IAEEkP,EAAehP,uBAAY,WAC/B6O,GAAS,KACR,IAEGI,EAAajP,uBAAY,WAC7B6O,GAAS,KACR,IAEGK,EAAkBf,EACpBO,EACAC,EAEJ,OACE,kBAAClB,GAAD,CACE7E,KAAK,OACLtE,IAAKiK,EACLnJ,SAAU6H,GAAiBC,EAAkBC,IAE7C,kBAACO,GAAD,CACEjF,UAAWA,EACX3I,QAASiP,EACTI,GAAE,aAAejF,GAEjB,kBAAC6D,GAAD,CAAOkB,WAAYA,EAAYD,aAAcA,GAC1CE,GACC,kBAACtB,GAAD,CACEzI,QACEwF,EAAaiE,EAAQ,eAAiB,gBAAmB,GAE3DhG,KAAK,OACLxD,SAAUgI,GAAoBiB,EAAalB,IAE3C,kBAACU,GAAD,CAAiBnG,MAAOwH,EAAgBxH,QACxC,kBAAC,GAAD,CACEvC,QAASyJ,EAAQ,YAAc,UAC/BxJ,SAAUmI,MAIhB,kBAAC,GAAD,KACE,kBAAClI,EAAA,EAAD,CACEC,gBAAiB,CACfC,OAAQC,IAAWC,SAErB5Y,KAAM2Y,IAAWE,QAEhBnE,GAEH,kBAAC8D,EAAA,EAAD,CACEM,MAAM,KACNL,gBAAiB,CACfC,OAAQC,IAAWI,QAErB/Y,KAAM2Y,IAAWK,OAEjB,0BAAMC,wBAAyB,CAAEC,OAAQd,OAG7C,kBAAC,GAAD,KACE,kBAAC8H,GAAA,EAAD,CAAiBC,KAAMxL,EAAWjT,IAAI,eCnB5C6gB,GAAgB5O,YAAO+F,IAAOzF,KAAjB,gFAAGN,CAAH,6FACHI,IAAOwF,OAMV,qBAAGiJ,4BACkB,EAAI,KAOhCC,GAAoB9O,IAAOM,IAAV,oFAAGN,CAAH,mFAEJ,gBAAG+O,EAAH,EAAGA,YAAH,OAA6B7O,YAAI6O,GAAe,KACnD3O,IAAOwF,OAKRoJ,UAtH0C,SAAC,GAGpD,EAFJnM,SAEI,gBADJoM,YAAexK,EACX,EADWA,OAAQyK,EACnB,EADmBA,KAAM7F,EACzB,EADyBA,eAAgB8F,EACzC,EADyCA,KAAMC,EAC/C,EAD+CA,SAAU1F,EACzD,EADyDA,KAAM3I,EAC/D,EAD+DA,MAE1DsO,EAAczE,eADnB,GACKyE,SACHC,EAAUhF,aAAa,UAAUZ,EAAX,QAFxB,EAGkCxI,mBAAkCiO,GAAjEI,EAHH,KAGgBC,EAHhB,KAIEC,EAAmBnO,iBAA8B,MAEvCoO,EAAwB1E,IAAkB,CACxDlH,IAAK2L,IADCrV,OANJ,EAaA8G,oBAAS,GAFXyO,EAXE,KAYFC,EAZE,KAkBJrO,qBAAU,WAAM,MACdiO,EACEH,SADY,UACZA,EAAUQ,MAAK,qBAAGnG,OAAwCA,YAD9C,aACZ,EAAiEyF,QAElE,CAACzF,EAAM2F,IAKV9N,qBAAU,WACR,IAAMuO,EAAa,WACjBF,GAAkC,IAKpC,OAFA/a,OAAO4C,iBAAiB,WAAYqY,GAE7B,WACLjb,OAAOkD,oBAAoB,WAAY+X,MAExC,IAEH,IAAMC,EAAsBvQ,uBAAY,WACtCoQ,GAAkC,KACjC,IAEH,OACE,kBAAC,WAAD,KACE,kBAAChB,GAAD,CACEC,4BAA6Bc,EAC7B7L,IAAK2L,GAEJF,GACC,kBAAC,GAAD,CACE9K,OAAQ8K,EAAY9K,OACpBnF,QAASyQ,EACTrG,KAAM6F,EAAY7F,KAClB3I,MAAOwO,EAAYxO,QAGvB,kBAACiP,EAAA,EAAD,OAEF,kBAAClB,GAAD,CAAmBC,YAAaW,GAC9B,kBAACO,EAAA,EAAD,KACE,+BAAQf,EAAKnO,OACb,0BAAMmP,QAAShB,EAAKiB,YAAa3f,KAAK,gBACtC,0BAAM0f,SAAS,UAAAhB,EAAKkB,UAAL,eAASrP,QAASmO,EAAKnO,MAAOvQ,KAAK,aAClD,0BACE0f,SAAS,UAAAhB,EAAKkB,UAAL,eAASD,cAAejB,EAAKiB,YACtC3f,KAAK,oBAEN8e,SAAA,UAAAA,EAASe,aAAT,eAAgBtQ,MACf,0BAAMmQ,QAAShB,EAAKoB,QAAUhB,EAAQe,MAAMtQ,IAAKvP,KAAK,cAG1D,kBAAC,GAAD,CACEiU,OAAQA,EACR4E,eAAgBA,EAChBK,KAAMA,EACN3I,MAAOA,IAET,kBAACwP,EAAA,EAAD,CAAUnB,SAAUA,IACpB,kBAAC,EAAD,CACEtO,MAAK,GAAKoO,EAAKoB,UAAUhB,SAAA,UAAAA,EAASe,aAAT,eAAgBtQ,MAAO,IAChDgB,MAAOmO,EAAKnO,Y,qBC7HtB,IAAItU,EAAW,EAAQ,QACnB+jB,EAAY,EAAQ,QACpBC,EAAW,EAAQ,QAiFvBllB,EAAOC,QA9DP,SAAqBkD,EAAOqB,EAAOE,EAASC,EAAYC,EAAWC,GACjE,IAAIO,EAjBqB,EAiBTV,EACZygB,EAAYhiB,EAAMxC,OAClBykB,EAAY5gB,EAAM7D,OAEtB,GAAIwkB,GAAaC,KAAehgB,GAAaggB,EAAYD,GACvD,OAAO,EAGT,IAAIE,EAAaxgB,EAAMrC,IAAIW,GACvBmiB,EAAazgB,EAAMrC,IAAIgC,GAC3B,GAAI6gB,GAAcC,EAChB,OAAOD,GAAc7gB,GAAS8gB,GAAcniB,EAE9C,IAAI/B,GAAS,EACTsB,GAAS,EACT6iB,EA/BuB,EA+Bf7gB,EAAoC,IAAIxD,OAAWgC,EAM/D,IAJA2B,EAAM9D,IAAIoC,EAAOqB,GACjBK,EAAM9D,IAAIyD,EAAOrB,KAGR/B,EAAQ+jB,GAAW,CAC1B,IAAIK,EAAWriB,EAAM/B,GACjBqkB,EAAWjhB,EAAMpD,GAErB,GAAIuD,EACF,IAAI+gB,EAAWtgB,EACXT,EAAW8gB,EAAUD,EAAUpkB,EAAOoD,EAAOrB,EAAO0B,GACpDF,EAAW6gB,EAAUC,EAAUrkB,EAAO+B,EAAOqB,EAAOK,GAE1D,QAAiB3B,IAAbwiB,EAAwB,CAC1B,GAAIA,EACF,SAEFhjB,GAAS,EACT,MAGF,GAAI6iB,GACF,IAAKN,EAAUzgB,GAAO,SAASihB,EAAUE,GACnC,IAAKT,EAASK,EAAMI,KACfH,IAAaC,GAAY7gB,EAAU4gB,EAAUC,EAAU/gB,EAASC,EAAYE,IAC/E,OAAO0gB,EAAK1kB,KAAK8kB,MAEjB,CACNjjB,GAAS,EACT,YAEG,GACD8iB,IAAaC,IACX7gB,EAAU4gB,EAAUC,EAAU/gB,EAASC,EAAYE,GACpD,CACLnC,GAAS,EACT,OAKJ,OAFAmC,EAAc,OAAE1B,GAChB0B,EAAc,OAAEL,GACT9B,I,qBChFT,IAAIoB,EAAa,EAAQ,QAezB9D,EAAOC,QAJP,SAAqBC,GACnB,OAAO4D,EAAW3D,KAAMD,GAAKqB,IAAIrB,K,qBCZnC,IAAI0lB,EAAiB,EAAQ,QACzB3f,EAAa,EAAQ,QACrBtC,EAAO,EAAQ,QAanB3D,EAAOC,QAJP,SAAoBsD,GAClB,OAAOqiB,EAAeriB,EAAQI,EAAMsC,K,mBCKtCjG,EAAOC,QAVP,SAAoBc,GAClB,IAAIK,GAAS,EACTsB,EAASC,MAAM5B,EAAID,MAKvB,OAHAC,EAAI6B,SAAQ,SAASpC,GACnBkC,IAAStB,GAASZ,KAEbkC,I,qBCdT,IAAImjB,EAAa,EAAQ,QASrBnf,EAHcZ,OAAOxE,UAGQoF,eAgFjC1G,EAAOC,QAjEP,SAAsBsD,EAAQiB,EAAOE,EAASC,EAAYC,EAAWC,GACnE,IAAIO,EAtBqB,EAsBTV,EACZohB,EAAWD,EAAWtiB,GACtBwiB,EAAYD,EAASnlB,OAIzB,GAAIolB,GAHWF,EAAWrhB,GACD7D,SAEMyE,EAC7B,OAAO,EAGT,IADA,IAAIhE,EAAQ2kB,EACL3kB,KAAS,CACd,IAAIlB,EAAM4lB,EAAS1kB,GACnB,KAAMgE,EAAYlF,KAAOsE,EAAQkC,EAAe7E,KAAK2C,EAAOtE,IAC1D,OAAO,EAIX,IAAI8lB,EAAanhB,EAAMrC,IAAIe,GACvB+hB,EAAazgB,EAAMrC,IAAIgC,GAC3B,GAAIwhB,GAAcV,EAChB,OAAOU,GAAcxhB,GAAS8gB,GAAc/hB,EAE9C,IAAIb,GAAS,EACbmC,EAAM9D,IAAIwC,EAAQiB,GAClBK,EAAM9D,IAAIyD,EAAOjB,GAGjB,IADA,IAAI0iB,EAAW7gB,IACNhE,EAAQ2kB,GAAW,CAE1B,IAAIG,EAAW3iB,EADfrD,EAAM4lB,EAAS1kB,IAEXqkB,EAAWjhB,EAAMtE,GAErB,GAAIyE,EACF,IAAI+gB,EAAWtgB,EACXT,EAAW8gB,EAAUS,EAAUhmB,EAAKsE,EAAOjB,EAAQsB,GACnDF,EAAWuhB,EAAUT,EAAUvlB,EAAKqD,EAAQiB,EAAOK,GAGzD,UAAmB3B,IAAbwiB,EACGQ,IAAaT,GAAY7gB,EAAUshB,EAAUT,EAAU/gB,EAASC,EAAYE,GAC7E6gB,GACD,CACLhjB,GAAS,EACT,MAEFujB,IAAaA,EAAkB,eAAP/lB,GAE1B,GAAIwC,IAAWujB,EAAU,CACvB,IAAIE,EAAU5iB,EAAOsE,YACjBue,EAAU5hB,EAAMqD,YAGhBse,GAAWC,KACV,gBAAiB7iB,MAAU,gBAAiBiB,IACzB,mBAAX2hB,GAAyBA,aAAmBA,GACjC,mBAAXC,GAAyBA,aAAmBA,IACvD1jB,GAAS,GAKb,OAFAmC,EAAc,OAAEtB,GAChBsB,EAAc,OAAEL,GACT9B,I,kCChFT,IAJyB2jB,EAIrB3U,GAJqB2U,EAIY,EAAQ,UAHhB,iBAAPA,GAAmB,YAAaA,EAAKA,EAAY,QAAIA,EAKvEC,EAAQ,EAAQ,QA0FpBtmB,EAAOC,QAxFP,SAA2BsmB,QACZ,IAATA,IACFA,EAAO,IAMT,IAAIC,EAAaF,EAAMvQ,OAAO,MAI1B0Q,EAAWF,EAAKE,SAChBC,EAAcJ,EAAMvQ,YAAO7S,GAC/BwjB,EAAYvQ,QAAUsQ,EAEtB,IAAIE,EAAoBL,EAAMvQ,SAC1BwC,EAAMgO,EAAKhO,KAAOiO,EAElBI,EAAYN,EAAM3Q,SAAS,CAC7B/G,WAAO1L,EACP2L,YAAQ3L,IAENpC,EAAO8lB,EAAU,GACjBC,EAAUD,EAAU,GAGpBE,EAAWR,EAAMvQ,OAAO,CAC1BnH,WAAO1L,EACP2L,YAAQ3L,IAkDV,OAhDAojB,EAAMtQ,WAAU,WACV2Q,EAAkBxQ,UAItBwQ,EAAkBxQ,QAAU,IAAIzE,GAAe,SAAUrP,GACvD,GAAKM,MAAM0P,QAAQhQ,IAMdA,EAAQ1B,OAAb,CAIA,IAAI4B,EAAQF,EAAQ,GAEhB0kB,EAAWrd,KAAKqF,MAAMxM,EAAMiO,YAAY5B,OACxCoY,EAAYtd,KAAKqF,MAAMxM,EAAMiO,YAAY3B,QAE7C,GAAIiY,EAAS3Q,QAAQvH,QAAUmY,GAAYD,EAAS3Q,QAAQtH,SAAWmY,EAAW,CAChF,IAAIC,EAAU,CACZrY,MAAOmY,EACPlY,OAAQmY,GAGNN,EAAYvQ,QACduQ,EAAYvQ,QAAQ8Q,IAEpBH,EAAS3Q,QAAQvH,MAAQmY,EACzBD,EAAS3Q,QAAQtH,OAASmY,EAC1BH,EAAQI,YAIb,IACHX,EAAMtQ,WAAU,WACd,GAAmB,iBAARuC,GAA4B,OAARA,GAAkBA,EAAIpC,mBAAmB/E,QAAxE,CAIA,IAAI8V,EAAU3O,EAAIpC,QAElB,OADAwQ,EAAkBxQ,QAAQhK,QAAQ+a,GAC3B,WACL,OAAOP,EAAkBxQ,QAAQ7E,UAAU4V,OAE5C,CAAC3O,IACG+N,EAAM1G,SAAQ,WACnB,MAAO,CACLrH,IAAKA,EACL3J,MAAO9N,EAAK8N,MACZC,OAAQ/N,EAAK+N,UAEd,CAAC0J,EAAKzX,EAAOA,EAAK8N,MAAQ,KAAM9N,EAAOA,EAAK+N,OAAS,S,qBC/F1D,IAAI9O,EAAe,EAAQ,QAkB3BC,EAAOC,QAPP,SAAsBC,GACpB,IAAIO,EAAON,KAAKC,SACZgB,EAAQrB,EAAaU,EAAMP,GAE/B,OAAOkB,EAAQ,OAAI8B,EAAYzC,EAAKW,GAAO,K,qBCf7C,IAII6F,EAJY,EAAQ,OAIT1B,CAHJ,EAAQ,QAGY,YAE/BvF,EAAOC,QAAUgH,G,qBCNjB,IAAIzB,EAAe,EAAQ,QASvBkB,EAHcZ,OAAOxE,UAGQoF,eAoBjC1G,EAAOC,QATP,SAAiBC,GACf,IAAIO,EAAON,KAAKC,SAChB,GAAIoF,EAAc,CAChB,IAAI9C,EAASjC,EAAKP,GAClB,MArBiB,8BAqBVwC,OAA4BQ,EAAYR,EAEjD,OAAOgE,EAAe7E,KAAKpB,EAAMP,GAAOO,EAAKP,QAAOgD,I,uBC1BtD,IAAIikB,EAAkB,EAAQ,QAC1BC,EAAe,EAAQ,QA0B3BpnB,EAAOC,QAVP,SAASmI,EAAY5H,EAAOgE,EAAOE,EAASC,EAAYE,GACtD,OAAIrE,IAAUgE,IAGD,MAAThE,GAA0B,MAATgE,IAAmB4iB,EAAa5mB,KAAW4mB,EAAa5iB,GACpEhE,GAAUA,GAASgE,GAAUA,EAE/B2iB,EAAgB3mB,EAAOgE,EAAOE,EAASC,EAAYyD,EAAavD,M,mBCZzE7E,EAAOC,QAJP,SAAkBonB,EAAOnnB,GACvB,OAAOmnB,EAAM9lB,IAAIrB,K,qBCTnB,IAAI+D,EAAK,EAAQ,QAoBjBjE,EAAOC,QAVP,SAAsBkD,EAAOjD,GAE3B,IADA,IAAIS,EAASwC,EAAMxC,OACZA,KACL,GAAIsD,EAAGd,EAAMxC,GAAQ,GAAIT,GACvB,OAAOS,EAGX,OAAQ,I,qBCjBV,IAIIuG,EAJY,EAAQ,OAId3B,CAHC,EAAQ,QAGO,OAE1BvF,EAAOC,QAAUiH","file":"component---src-components-pages-project-page-tsx-5b928ac95979d416b8b3.js","sourcesContent":["var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","var baseClamp = require('./_baseClamp'),\n toNumber = require('./toNumber');\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n}\n\nmodule.exports = clamp;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjUiIHZpZXdCb3g9IjAgMCAyNCAyNSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0LjY0NCA5LjM2NzU4QzE0LjM1OTcgOS4wODE1NiAxNC4wNDQ0IDguODI4MDIgMTMuNzA0IDguNjExNkMxMi44MDI2IDguMDM0MzUgMTEuNzU0NiA3LjcyNzYxIDEwLjY4NDEgNy43Mjc2MUM5LjE5ODM1IDcuNzI0ODQgNy43NzI5NyA4LjMxNTE3IDYuNzI0MjIgOS4zNjc1OEwxLjYzNjM2IDE0LjQ1OTRDMC41ODkzOTEgMTUuNTA4NCAwLjAwMDkzODYzMyAxNi45Mjk3IDEuMTU5MzhlLTA2IDE4LjQxMTdDLTAuMDAxOTY3NTQgMjEuNTA0NCAyLjUwMzUyIDI0LjAxMzIgNS41OTYyNSAyNC4wMTUxQzcuMDc5NzEgMjQuMDIwMyA4LjUwMzc4IDIzLjQzMjggOS41NTIxNSAyMi4zODMyTDEzLjc1MiAxOC4xODMzQzEzLjgyODMgMTguMTA3NiAxMy44NzEgMTguMDA0NCAxMy44NzAzIDE3Ljg5N0MxMy44NjkxIDE3LjY3NjEgMTMuNjg4OSAxNy40OTgxIDEzLjQ2OCAxNy40OTkzSDEzLjMwOEMxMi40MzA2IDE3LjUwMjQgMTEuNTYwOSAxNy4zMzM5IDEwLjc0ODEgMTcuMDAzNEMxMC41OTg0IDE2Ljk0MTcgMTAuNDI2MyAxNi45NzY1IDEwLjMxMjIgMTcuMDkxM0w3LjI5MjIzIDIwLjExNTJDNi4zNTQ0OCAyMS4wNTMgNC44MzQwOCAyMS4wNTMgMy44OTYzMyAyMC4xMTUyQzIuOTU4NTcgMTkuMTc3NSAyLjk1ODU3IDE3LjY1NzEgMy44OTYzMyAxNi43MTkzTDkuMDA0MiAxMS42MTU1QzkuOTQxMjEgMTAuNjc5NyAxMS40NTkxIDEwLjY3OTcgMTIuMzk2MSAxMS42MTU1QzEzLjAyNzYgMTIuMjA5OCAxNC4wMTI2IDEyLjIwOTggMTQuNjQ0IDExLjYxNTVDMTQuOTE1NyAxMS4zNDM2IDE1LjA4MDQgMTAuOTgyOSAxNS4xMDggMTAuNTk5NUMxNS4xMzcyIDEwLjE0MTMgMTQuOTY4MyA5LjY5MjYgMTQuNjQ0IDkuMzY3NThaIiBmaWxsPSIjOTM5NTk4Ii8+CjxwYXRoIGQ9Ik0yMi4zNTk4IDEuNjUxNTNDMjAuMTcyOCAtMC41MzU0NTUgMTYuNjI3IC0wLjUzNTQ1NSAxNC40NDAxIDEuNjUxNTNMMTAuMjQ0MiA1Ljg0MzRDMTAuMTI4OSA1Ljk1OTE3IDEwLjA5NTcgNi4xMzMzMSAxMC4xNjAyIDYuMjgzNEMxMC4yMjM5IDYuNDMzOTEgMTAuMzcyNyA2LjUzMDUyIDEwLjUzNjEgNi41MjczOEgxMC42ODQxQzExLjU2MDYgNi41MjU3OCAxMi40Mjg4IDYuNjk1NjEgMTMuMjQgNy4wMjczOEMxMy4zODk4IDcuMDg5MDIgMTMuNTYxOSA3LjA1NDI0IDEzLjY3NiA2LjkzOTRMMTYuNjg3OSAzLjkzMTQ3QzE3LjYyNTcgMi45OTM3MSAxOS4xNDYxIDIuOTkzNzEgMjAuMDgzOCAzLjkzMTQ3QzIxLjAyMTYgNC44NjkyMiAyMS4wMjE2IDYuMzg5NjIgMjAuMDgzOCA3LjMyNzM3TDE2LjMzMTkgMTEuMDc1MkwxNi4yOTk5IDExLjExMTJMMTQuOTg4IDEyLjQxNTJDMTQuMDUxIDEzLjM1MTEgMTIuNTMzIDEzLjM1MTEgMTEuNTk2IDEyLjQxNTJDMTAuOTY0NiAxMS44MjA5IDkuOTc5NTUgMTEuODIwOSA5LjM0ODEyIDEyLjQxNTJDOS4wNzQ3IDEyLjY4OTIgOC45MDk4NSAxMy4wNTMgOC44ODQxMSAxMy40MzkyQzguODU0ODYgMTMuODk3NCA5LjAyMzg0IDE0LjM0NjEgOS4zNDgxMiAxNC42NzEyQzkuODExMDkgMTUuMTM2MSAxMC4zNTI4IDE1LjUxNTMgMTAuOTQ4MSAxNS43OTExQzExLjAzMjEgMTUuODMxMSAxMS4xMTYxIDE1Ljg2MzEgMTEuMiAxNS44OTkxQzExLjI4NCAxNS45MzUxIDExLjM3MiAxNS45NjMxIDExLjQ1NiAxNS45OTUxQzExLjU0IDE2LjAyNzEgMTEuNjI4IDE2LjA1NTEgMTEuNzEyIDE2LjA3OTFMMTEuOTQ4IDE2LjE0MzFDMTIuMTA4IDE2LjE4MzEgMTIuMjY4IDE2LjIxNTEgMTIuNDMyIDE2LjI0MzFDMTIuNjI5NSAxNi4yNzI0IDEyLjgyODQgMTYuMjkxMSAxMy4wMjggMTYuMjk5MUgxMy4zMDhIMTMuMzMyTDEzLjU3MiAxNi4yNzExQzEzLjY1OTkgMTYuMjY3MSAxMy43NTE5IDE2LjI0NzEgMTMuODU2IDE2LjI0NzFIMTMuOTkxOUwxNC4yNjc5IDE2LjIwNzFMMTQuMzk1OSAxNi4xODMxTDE0LjYyNzkgMTYuMTM1MUgxNC42NzE5QzE1LjY1NDUgMTUuODg4MyAxNi41NTE2IDE1LjM3OTYgMTcuMjY3OCAxNC42NjMxTDIyLjM1OTcgOS41NzEzMUMyNC41NDY4IDcuMzg0MzIgMjQuNTQ2OCAzLjgzODUyIDIyLjM1OTggMS42NTE1M1oiIGZpbGw9IiM5Mzk1OTgiLz4KPC9zdmc+Cg==\"","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMCAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE2LjI1MDUgMTIuNjM4N0MxNS42NjEgMTIuNjM5MSAxNS4wNzk5IDEyLjc3ODUgMTQuNTU0NCAxMy4wNDU1QzE0LjAyODkgMTMuMzEyNiAxMy41NzM3IDEzLjY5OTcgMTMuMjI1OSAxNC4xNzU2TDcuMzM5MjUgMTEuMjMyOUM3LjU1NjYyIDEwLjUyMDMgNy41NTY2MiA5Ljc1ODk4IDcuMzM5MjUgOS4wNDYzTDEzLjIyNTkgNi4xMDM2OUMxMy43ODI1IDYuODYxMDcgMTQuNjAzMyA3LjM4MTgxIDE1LjUyNTggNy41NjI3MkMxNi40NDgzIDcuNzQzNjQgMTcuNDA1MSA3LjU3MTUzIDE4LjIwNjYgNy4wODA1QzE5LjAwODEgNi41ODk0NyAxOS41OTU5IDUuODE1MzQgMTkuODUzNSA0LjkxMTVDMjAuMTExMSA0LjAwNzY3IDIwLjAxOTggMy4wNDAwNiAxOS41OTc1IDIuMjAwNDFDMTkuMTc1MiAxLjM2MDc1IDE4LjQ1MjggMC43MTAzMTIgMTcuNTczNSAwLjM3Nzk2MUMxNi42OTQyIDAuMDQ1NjA5MyAxNS43MjIxIDAuMDU1NTk2NCAxNC44NDk4IDAuNDA1OTQzQzEzLjk3NzYgMC43NTYyOSAxMy4yNjg3IDEuNDIxNDMgMTIuODYzOCAyLjI2OTU5QzEyLjQ1ODkgMy4xMTc3NCAxMi4zODc0IDQuMDg3MDIgMTIuNjYzNSA0Ljk4NTM3TDYuNzc2ODMgNy45Mjc5OEM2LjMxMDE3IDcuMjg5NTQgNS42NTM1MyA2LjgxNDk4IDQuOTAwOCA2LjU3MjE3QzQuMTQ4MDggNi4zMjkzNyAzLjMzNzgzIDYuMzMwNzUgMi41ODU5NCA2LjU3NjEzQzEuODM0MDUgNi44MjE1MiAxLjE3OTA0IDcuMjk4MzIgMC43MTQ1NzggNy45MzgzNkMwLjI1MDExNyA4LjU3ODQgMCA5LjM0ODg4IDAgMTAuMTM5NkMwIDEwLjkzMDQgMC4yNTAxMTcgMTEuNzAwOCAwLjcxNDU3OCAxMi4zNDA5QzEuMTc5MDQgMTIuOTgwOSAxLjgzNDA1IDEzLjQ1NzcgMi41ODU5NCAxMy43MDMxQzMuMzM3ODMgMTMuOTQ4NSA0LjE0ODA4IDEzLjk0OTkgNC45MDA4IDEzLjcwNzFDNS42NTM1MyAxMy40NjQzIDYuMzEwMTcgMTIuOTg5NyA2Ljc3NjgzIDEyLjM1MTNMMTIuNjYzNSAxNS4yOTM5QzEyLjU1NSAxNS42NDgxIDEyLjUwMDIgMTYuMDE2NyAxMi41MDEgMTYuMzg3MkMxMi41MDEgMTcuMTI4NiAxMi43MjA5IDE3Ljg1MzMgMTMuMTMyOSAxOC40Njk4QzEzLjU0NDkgMTkuMDg2MiAxNC4xMzA1IDE5LjU2NjcgMTQuODE1NyAxOS44NTA0QzE1LjUwMDggMjAuMTM0MSAxNi4yNTQ3IDIwLjIwODQgMTYuOTgyIDIwLjA2MzdDMTcuNzA5MyAxOS45MTkxIDE4LjM3NzQgMTkuNTYyMSAxOC45MDE4IDE5LjAzNzhDMTkuNDI2MiAxOC41MTM2IDE5Ljc4MzMgMTcuODQ1NiAxOS45MjggMTcuMTE4NUMyMC4wNzI2IDE2LjM5MTQgMTkuOTk4NCAxNS42Mzc2IDE5LjcxNDYgMTQuOTUyN0MxOS40MzA4IDE0LjI2NzcgMTguOTUwMiAxMy42ODIzIDE4LjMzMzYgMTMuMjcwNEMxNy43MTcgMTIuODU4NSAxNi45OTIxIDEyLjYzODcgMTYuMjUwNSAxMi42Mzg3Wk0xNi4yNTA1IDEuMzkzMDJDMTYuNzQ0OSAxLjM5MzAyIDE3LjIyODIgMS41Mzk1OCAxNy42MzkyIDEuODE0MThDMTguMDUwMyAyLjA4ODc4IDE4LjM3MDcgMi40NzkwNyAxOC41NTk5IDIuOTM1NzFDMTguNzQ5MSAzLjM5MjM1IDE4Ljc5ODYgMy44OTQ4MiAxOC43MDIxIDQuMzc5NThDMTguNjA1NyA0Ljg2NDM1IDE4LjM2NzYgNS4zMDk2MyAxOC4wMTggNS42NTkxM0MxNy42Njg1IDYuMDA4NjIgMTcuMjIzMSA2LjI0NjYzIDE2LjczODIgNi4zNDMwNkMxNi4yNTMzIDYuNDM5NDkgMTUuNzUwNyA2LjM5IDE1LjI5MzkgNi4yMDA4NUMxNC44MzcyIDYuMDExNyAxNC40NDY4IDUuNjkxNCAxNC4xNzIxIDUuMjgwNDNDMTMuODk3NSA0Ljg2OTQ3IDEzLjc1MDkgNC4zODYzMSAxMy43NTA5IDMuODkyMDVDMTMuNzUwOSAzLjIyOTI2IDE0LjAxNDIgMi41OTM2MyAxNC40ODMgMi4xMjQ5N0MxNC45NTE4IDEuNjU2MzEgMTUuNTg3NiAxLjM5MzAyIDE2LjI1MDUgMS4zOTMwMlpNMy43NTIyNCAxMi42Mzg3QzMuMjU3ODYgMTIuNjM4NyAyLjc3NDU4IDEyLjQ5MjEgMi4zNjM1MSAxMi4yMTc1QzEuOTUyNDQgMTEuOTQyOSAxLjYzMjA2IDExLjU1MjYgMS40NDI4NiAxMS4wOTZDMS4yNTM2NyAxMC42MzkzIDEuMjA0MTcgMTAuMTM2OCAxLjMwMDYyIDkuNjUyMDlDMS4zOTcwNyA5LjE2NzMyIDEuNjM1MTQgOC43MjIwNCAxLjk4NDcyIDguMzcyNTRDMi4zMzQzIDguMDIzMDUgMi43Nzk3IDcuNzg1MDQgMy4yNjQ1OSA3LjY4ODYxQzMuNzQ5NDcgNy41OTIxOCA0LjI1MjA3IDcuNjQxNjcgNC43MDg4MiA3LjgzMDgyQzUuMTY1NTcgOC4wMTk5NiA1LjU1NTk2IDguMzQwMjcgNS44MzA2MyA4Ljc1MTI0QzYuMTA1MyA5LjE2MjIgNi4yNTE5IDkuNjQ1MzYgNi4yNTE5IDEwLjEzOTZDNi4yNTE5IDEwLjgwMjQgNS45ODg1NCAxMS40MzggNS41MTk3NyAxMS45MDY3QzUuMDUwOTkgMTIuMzc1NCA0LjQxNTE5IDEyLjYzODcgMy43NTIyNCAxMi42Mzg3Wk0xNi4yNTA1IDE4Ljg4NjJDMTUuNzU2MSAxOC44ODYyIDE1LjI3MjggMTguNzM5NyAxNC44NjE4IDE4LjQ2NTFDMTQuNDUwNyAxOC4xOTA1IDE0LjEzMDMgMTcuODAwMiAxMy45NDExIDE3LjM0MzVDMTMuNzUxOSAxNi44ODY5IDEzLjcwMjQgMTYuMzg0NCAxMy43OTg5IDE1Ljg5OTdDMTMuODk1MyAxNS40MTQ5IDE0LjEzMzQgMTQuOTY5NiAxNC40ODMgMTQuNjIwMUMxNC44MzI2IDE0LjI3MDYgMTUuMjc4IDE0LjAzMjYgMTUuNzYyOSAxMy45MzYyQzE2LjI0NzcgMTMuODM5OCAxNi43NTAzIDEzLjg4OTIgMTcuMjA3MSAxNC4wNzg0QzE3LjY2MzggMTQuMjY3NSAxOC4wNTQyIDE0LjU4NzggMTguMzI4OSAxNC45OTg4QzE4LjYwMzYgMTUuNDA5OCAxOC43NTAyIDE1Ljg5MjkgMTguNzUwMiAxNi4zODcyQzE4Ljc1MDIgMTcuMDUgMTguNDg2OCAxNy42ODU2IDE4LjAxOCAxOC4xNTQzQzE3LjU0OTMgMTguNjIyOSAxNi45MTM1IDE4Ljg4NjIgMTYuMjUwNSAxOC44ODYyWiIgZmlsbD0iIzkzOTU5OCIvPgo8L3N2Zz4K\"","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\n\n/* eslint-disable require-jsdoc, valid-jsdoc */\nvar MapShim = function () {\n if (typeof Map !== 'undefined') {\n return Map;\n }\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\n\n\n function getIndex(arr, key) {\n var result = -1;\n arr.some(function (entry, index) {\n if (entry[0] === key) {\n result = index;\n return true;\n }\n\n return false;\n });\n return result;\n }\n\n return (\n /** @class */\n function () {\n function class_1() {\n this.__entries__ = [];\n }\n\n Object.defineProperty(class_1.prototype, \"size\", {\n /**\r\n * @returns {boolean}\r\n */\n get: function get() {\n return this.__entries__.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\n\n class_1.prototype.get = function (key) {\n var index = getIndex(this.__entries__, key);\n var entry = this.__entries__[index];\n return entry && entry[1];\n };\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.set = function (key, value) {\n var index = getIndex(this.__entries__, key);\n\n if (~index) {\n this.__entries__[index][1] = value;\n } else {\n this.__entries__.push([key, value]);\n }\n };\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.delete = function (key) {\n var entries = this.__entries__;\n var index = getIndex(entries, key);\n\n if (~index) {\n entries.splice(index, 1);\n }\n };\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.has = function (key) {\n return !!~getIndex(this.__entries__, key);\n };\n /**\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.clear = function () {\n this.__entries__.splice(0);\n };\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.forEach = function (callback, ctx) {\n if (ctx === void 0) {\n ctx = null;\n }\n\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\n var entry = _a[_i];\n callback.call(ctx, entry[1], entry[0]);\n }\n };\n\n return class_1;\n }()\n );\n}();\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\n\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document; // Returns global object of a current environment.\n\nvar global$1 = function () {\n if (typeof global !== 'undefined' && global.Math === Math) {\n return global;\n }\n\n if (typeof self !== 'undefined' && self.Math === Math) {\n return self;\n }\n\n if (typeof window !== 'undefined' && window.Math === Math) {\n return window;\n } // eslint-disable-next-line no-new-func\n\n\n return Function('return this')();\n}();\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\n\n\nvar requestAnimationFrame$1 = function () {\n if (typeof requestAnimationFrame === 'function') {\n // It's required to use a bounded function because IE sometimes throws\n // an \"Invalid calling object\" error if rAF is invoked without the global\n // object on the left hand side.\n return requestAnimationFrame.bind(global$1);\n }\n\n return function (callback) {\n return setTimeout(function () {\n return callback(Date.now());\n }, 1000 / 60);\n };\n}(); // Defines minimum timeout before adding a trailing call.\n\n\nvar trailingTimeout = 2;\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\n\nfunction throttle(callback, delay) {\n var leadingCall = false,\n trailingCall = false,\n lastCallTime = 0;\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\n\n function resolvePending() {\n if (leadingCall) {\n leadingCall = false;\n callback();\n }\n\n if (trailingCall) {\n proxy();\n }\n }\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\n\n\n function timeoutCallback() {\n requestAnimationFrame$1(resolvePending);\n }\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\n\n\n function proxy() {\n var timeStamp = Date.now();\n\n if (leadingCall) {\n // Reject immediately following calls.\n if (timeStamp - lastCallTime < trailingTimeout) {\n return;\n } // Schedule new call to be in invoked when the pending one is resolved.\n // This is important for \"transitions\" which never actually start\n // immediately so there is a chance that we might miss one if change\n // happens amids the pending invocation.\n\n\n trailingCall = true;\n } else {\n leadingCall = true;\n trailingCall = false;\n setTimeout(timeoutCallback, delay);\n }\n\n lastCallTime = timeStamp;\n }\n\n return proxy;\n} // Minimum delay before invoking the update of observers.\n\n\nvar REFRESH_DELAY = 20; // A list of substrings of CSS properties used to find transition events that\n// might affect dimensions of observed elements.\n\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight']; // Check if MutationObserver is available.\n\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\n\nvar ResizeObserverController =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\n function ResizeObserverController() {\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\n this.connected_ = false;\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\n\n this.mutationEventsAdded_ = false;\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\n\n this.mutationsObserver_ = null;\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\n\n this.observers_ = [];\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\n }\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.addObserver = function (observer) {\n if (!~this.observers_.indexOf(observer)) {\n this.observers_.push(observer);\n } // Add listeners if they haven't been added yet.\n\n\n if (!this.connected_) {\n this.connect_();\n }\n };\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.removeObserver = function (observer) {\n var observers = this.observers_;\n var index = observers.indexOf(observer); // Remove observer if it's present in registry.\n\n if (~index) {\n observers.splice(index, 1);\n } // Remove listeners if controller has no connected observers.\n\n\n if (!observers.length && this.connected_) {\n this.disconnect_();\n }\n };\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.refresh = function () {\n var changesDetected = this.updateObservers_(); // Continue running updates if changes have been detected as there might\n // be future ones caused by CSS transitions.\n\n if (changesDetected) {\n this.refresh();\n }\n };\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\n\n\n ResizeObserverController.prototype.updateObservers_ = function () {\n // Collect observers that have active observations.\n var activeObservers = this.observers_.filter(function (observer) {\n return observer.gatherActive(), observer.hasActive();\n }); // Deliver notifications in a separate cycle in order to avoid any\n // collisions between observers, e.g. when multiple instances of\n // ResizeObserver are tracking the same element and the callback of one\n // of them changes content dimensions of the observed target. Sometimes\n // this may result in notifications being blocked for the rest of observers.\n\n activeObservers.forEach(function (observer) {\n return observer.broadcastActive();\n });\n return activeObservers.length > 0;\n };\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.connect_ = function () {\n // Do nothing if running in a non-browser environment or if listeners\n // have been already added.\n if (!isBrowser || this.connected_) {\n return;\n } // Subscription to the \"Transitionend\" event is used as a workaround for\n // delayed transitions. This way it's possible to capture at least the\n // final state of an element.\n\n\n document.addEventListener('transitionend', this.onTransitionEnd_);\n window.addEventListener('resize', this.refresh);\n\n if (mutationObserverSupported) {\n this.mutationsObserver_ = new MutationObserver(this.refresh);\n this.mutationsObserver_.observe(document, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n } else {\n document.addEventListener('DOMSubtreeModified', this.refresh);\n this.mutationEventsAdded_ = true;\n }\n\n this.connected_ = true;\n };\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.disconnect_ = function () {\n // Do nothing if running in a non-browser environment or if listeners\n // have been already removed.\n if (!isBrowser || !this.connected_) {\n return;\n }\n\n document.removeEventListener('transitionend', this.onTransitionEnd_);\n window.removeEventListener('resize', this.refresh);\n\n if (this.mutationsObserver_) {\n this.mutationsObserver_.disconnect();\n }\n\n if (this.mutationEventsAdded_) {\n document.removeEventListener('DOMSubtreeModified', this.refresh);\n }\n\n this.mutationsObserver_ = null;\n this.mutationEventsAdded_ = false;\n this.connected_ = false;\n };\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\n var _b = _a.propertyName,\n propertyName = _b === void 0 ? '' : _b; // Detect whether transition may affect dimensions of an element.\n\n var isReflowProperty = transitionKeys.some(function (key) {\n return !!~propertyName.indexOf(key);\n });\n\n if (isReflowProperty) {\n this.refresh();\n }\n };\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\n\n\n ResizeObserverController.getInstance = function () {\n if (!this.instance_) {\n this.instance_ = new ResizeObserverController();\n }\n\n return this.instance_;\n };\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\n\n\n ResizeObserverController.instance_ = null;\n return ResizeObserverController;\n}();\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\n\n\nvar defineConfigurable = function defineConfigurable(target, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var key = _a[_i];\n Object.defineProperty(target, key, {\n value: props[key],\n enumerable: false,\n writable: false,\n configurable: true\n });\n }\n\n return target;\n};\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\n\n\nvar getWindowOf = function getWindowOf(target) {\n // Assume that the element is an instance of Node, which means that it\n // has the \"ownerDocument\" property from which we can retrieve a\n // corresponding global object.\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView; // Return the local global object if it's not possible extract one from\n // provided element.\n\n return ownerGlobal || global$1;\n}; // Placeholder of an empty content rectangle.\n\n\nvar emptyRect = createRectInit(0, 0, 0, 0);\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\n\nfunction toFloat(value) {\n return parseFloat(value) || 0;\n}\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\n\n\nfunction getBordersSize(styles) {\n var positions = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n positions[_i - 1] = arguments[_i];\n }\n\n return positions.reduce(function (size, position) {\n var value = styles['border-' + position + '-width'];\n return size + toFloat(value);\n }, 0);\n}\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\n\n\nfunction getPaddings(styles) {\n var positions = ['top', 'right', 'bottom', 'left'];\n var paddings = {};\n\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\n var position = positions_1[_i];\n var value = styles['padding-' + position];\n paddings[position] = toFloat(value);\n }\n\n return paddings;\n}\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getSVGContentRect(target) {\n var bbox = target.getBBox();\n return createRectInit(0, 0, bbox.width, bbox.height);\n}\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getHTMLElementContentRect(target) {\n // Client width & height properties can't be\n // used exclusively as they provide rounded values.\n var clientWidth = target.clientWidth,\n clientHeight = target.clientHeight; // By this condition we can catch all non-replaced inline, hidden and\n // detached elements. Though elements with width & height properties less\n // than 0.5 will be discarded as well.\n //\n // Without it we would need to implement separate methods for each of\n // those cases and it's not possible to perform a precise and performance\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\n // gives wrong results for elements with width & height less than 0.5.\n\n if (!clientWidth && !clientHeight) {\n return emptyRect;\n }\n\n var styles = getWindowOf(target).getComputedStyle(target);\n var paddings = getPaddings(styles);\n var horizPad = paddings.left + paddings.right;\n var vertPad = paddings.top + paddings.bottom; // Computed styles of width & height are being used because they are the\n // only dimensions available to JS that contain non-rounded values. It could\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\n // affected by CSS transformations let alone paddings, borders and scroll bars.\n\n var width = toFloat(styles.width),\n height = toFloat(styles.height); // Width & height include paddings and borders when the 'border-box' box\n // model is applied (except for IE).\n\n if (styles.boxSizing === 'border-box') {\n // Following conditions are required to handle Internet Explorer which\n // doesn't include paddings and borders to computed CSS dimensions.\n //\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\n // properties then it's either IE, and thus we don't need to subtract\n // anything, or an element merely doesn't have paddings/borders styles.\n if (Math.round(width + horizPad) !== clientWidth) {\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\n }\n\n if (Math.round(height + vertPad) !== clientHeight) {\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\n }\n } // Following steps can't be applied to the document's root element as its\n // client[Width/Height] properties represent viewport area of the window.\n // Besides, it's as well not necessary as the itself neither has\n // rendered scroll bars nor it can be clipped.\n\n\n if (!isDocumentElement(target)) {\n // In some browsers (only in Firefox, actually) CSS width & height\n // include scroll bars size which can be removed at this step as scroll\n // bars are the only difference between rounded dimensions + paddings\n // and \"client\" properties, though that is not always true in Chrome.\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\n var horizScrollbar = Math.round(height + vertPad) - clientHeight; // Chrome has a rather weird rounding of \"client\" properties.\n // E.g. for an element with content width of 314.2px it sometimes gives\n // the client width of 315px and for the width of 314.7px it may give\n // 314px. And it doesn't happen all the time. So just ignore this delta\n // as a non-relevant.\n\n if (Math.abs(vertScrollbar) !== 1) {\n width -= vertScrollbar;\n }\n\n if (Math.abs(horizScrollbar) !== 1) {\n height -= horizScrollbar;\n }\n }\n\n return createRectInit(paddings.left, paddings.top, width, height);\n}\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\n\n\nvar isSVGGraphicsElement = function () {\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\n // interface.\n if (typeof SVGGraphicsElement !== 'undefined') {\n return function (target) {\n return target instanceof getWindowOf(target).SVGGraphicsElement;\n };\n } // If it's so, then check that element is at least an instance of the\n // SVGElement and that it has the \"getBBox\" method.\n // eslint-disable-next-line no-extra-parens\n\n\n return function (target) {\n return target instanceof getWindowOf(target).SVGElement && typeof target.getBBox === 'function';\n };\n}();\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\n\n\nfunction isDocumentElement(target) {\n return target === getWindowOf(target).document.documentElement;\n}\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getContentRect(target) {\n if (!isBrowser) {\n return emptyRect;\n }\n\n if (isSVGGraphicsElement(target)) {\n return getSVGContentRect(target);\n }\n\n return getHTMLElementContentRect(target);\n}\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\n\n\nfunction createReadOnlyRect(_a) {\n var x = _a.x,\n y = _a.y,\n width = _a.width,\n height = _a.height; // If DOMRectReadOnly is available use it as a prototype for the rectangle.\n\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\n var rect = Object.create(Constr.prototype); // Rectangle's properties are not writable and non-enumerable.\n\n defineConfigurable(rect, {\n x: x,\n y: y,\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: height + y,\n left: x\n });\n return rect;\n}\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction createRectInit(x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n}\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\n\n\nvar ResizeObservation =\n/** @class */\nfunction () {\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\n function ResizeObservation(target) {\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\n this.broadcastWidth = 0;\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\n\n this.broadcastHeight = 0;\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\n\n this.contentRect_ = createRectInit(0, 0, 0, 0);\n this.target = target;\n }\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\n\n\n ResizeObservation.prototype.isActive = function () {\n var rect = getContentRect(this.target);\n this.contentRect_ = rect;\n return rect.width !== this.broadcastWidth || rect.height !== this.broadcastHeight;\n };\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\n\n\n ResizeObservation.prototype.broadcastRect = function () {\n var rect = this.contentRect_;\n this.broadcastWidth = rect.width;\n this.broadcastHeight = rect.height;\n return rect;\n };\n\n return ResizeObservation;\n}();\n\nvar ResizeObserverEntry =\n/** @class */\nfunction () {\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\n function ResizeObserverEntry(target, rectInit) {\n var contentRect = createReadOnlyRect(rectInit); // According to the specification following properties are not writable\n // and are also not enumerable in the native implementation.\n //\n // Property accessors are not being used as they'd require to define a\n // private WeakMap storage which may cause memory leaks in browsers that\n // don't support this type of collections.\n\n defineConfigurable(this, {\n target: target,\n contentRect: contentRect\n });\n }\n\n return ResizeObserverEntry;\n}();\n\nvar ResizeObserverSPI =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\n function ResizeObserverSPI(callback, controller, callbackCtx) {\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\n this.activeObservations_ = [];\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\n\n this.observations_ = new MapShim();\n\n if (typeof callback !== 'function') {\n throw new TypeError('The callback provided as parameter 1 is not a function.');\n }\n\n this.callback_ = callback;\n this.controller_ = controller;\n this.callbackCtx_ = callbackCtx;\n }\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.observe = function (target) {\n if (!arguments.length) {\n throw new TypeError('1 argument required, but only 0 present.');\n } // Do nothing if current environment doesn't have the Element interface.\n\n\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\n return;\n }\n\n if (!(target instanceof getWindowOf(target).Element)) {\n throw new TypeError('parameter 1 is not of type \"Element\".');\n }\n\n var observations = this.observations_; // Do nothing if element is already being observed.\n\n if (observations.has(target)) {\n return;\n }\n\n observations.set(target, new ResizeObservation(target));\n this.controller_.addObserver(this); // Force the update of observations.\n\n this.controller_.refresh();\n };\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.unobserve = function (target) {\n if (!arguments.length) {\n throw new TypeError('1 argument required, but only 0 present.');\n } // Do nothing if current environment doesn't have the Element interface.\n\n\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\n return;\n }\n\n if (!(target instanceof getWindowOf(target).Element)) {\n throw new TypeError('parameter 1 is not of type \"Element\".');\n }\n\n var observations = this.observations_; // Do nothing if element is not being observed.\n\n if (!observations.has(target)) {\n return;\n }\n\n observations.delete(target);\n\n if (!observations.size) {\n this.controller_.removeObserver(this);\n }\n };\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.disconnect = function () {\n this.clearActive();\n this.observations_.clear();\n this.controller_.removeObserver(this);\n };\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.gatherActive = function () {\n var _this = this;\n\n this.clearActive();\n this.observations_.forEach(function (observation) {\n if (observation.isActive()) {\n _this.activeObservations_.push(observation);\n }\n });\n };\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.broadcastActive = function () {\n // Do nothing if observer doesn't have active observations.\n if (!this.hasActive()) {\n return;\n }\n\n var ctx = this.callbackCtx_; // Create ResizeObserverEntry instance for every active observation.\n\n var entries = this.activeObservations_.map(function (observation) {\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\n });\n this.callback_.call(ctx, entries, ctx);\n this.clearActive();\n };\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.clearActive = function () {\n this.activeObservations_.splice(0);\n };\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\n\n\n ResizeObserverSPI.prototype.hasActive = function () {\n return this.activeObservations_.length > 0;\n };\n\n return ResizeObserverSPI;\n}(); // Registry of internal observers. If WeakMap is not available use current shim\n// for the Map collection as it has all required methods and because WeakMap\n// can't be fully polyfilled anyway.\n\n\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\n\nvar ResizeObserver =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\n function ResizeObserver(callback) {\n if (!(this instanceof ResizeObserver)) {\n throw new TypeError('Cannot call a class as a function.');\n }\n\n if (!arguments.length) {\n throw new TypeError('1 argument required, but only 0 present.');\n }\n\n var controller = ResizeObserverController.getInstance();\n var observer = new ResizeObserverSPI(callback, controller, this);\n observers.set(this, observer);\n }\n\n return ResizeObserver;\n}(); // Expose public methods of ResizeObserver.\n\n\n['observe', 'unobserve', 'disconnect'].forEach(function (method) {\n ResizeObserver.prototype[method] = function () {\n var _a;\n\n return (_a = observers.get(this))[method].apply(_a, arguments);\n };\n});\n\nvar index = function () {\n // Export existing implementation if available.\n if (typeof global$1.ResizeObserver !== 'undefined') {\n return global$1.ResizeObserver;\n }\n\n return ResizeObserver;\n}();\n\nexport default index;","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nmodule.exports = baseClamp;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","import React, { FunctionComponent, useCallback } from 'react'\nimport styled from 'styled-components'\nimport Colors from '../../../tokens/Colors'\nimport { rem } from '../../../utils/rem'\n\nexport enum ShareOptionType {\n COPY = 'Copy link',\n FACEBOOK = 'Facebook',\n LINKED_IN = 'LinkedIn',\n PINTEREST = 'Pinterest',\n WEIBO = 'Weibo',\n}\n\nexport interface ShareOption {\n hide?: boolean\n icon: string\n type: ShareOptionType\n}\n\ninterface ShareModalProps {\n onClick?: (type: ShareOptionType) => void\n options: ShareOption[]\n}\n\nconst ShareModal: FunctionComponent = ({\n options,\n onClick,\n}) => {\n /**\n * Option click handler\n */\n const onOptionClick = useCallback(\n (type) => {\n onClick && onClick(type)\n },\n [onClick],\n )\n\n return (\n \n {options.map(({ type, hide, icon }, index) =>\n !hide ? (\n {\n onOptionClick(type)\n }}\n >\n \n {type}\n \n ) : null,\n )}\n \n )\n}\n\nexport default ShareModal\n\nconst StyledIcon = styled.img`\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: ${rem(32)};\n width: ${rem(24)};\n`\n\nconst StyledButton = styled.button`\n width: 100%;\n padding: ${rem(12)} ${rem(32)} ${rem(12)} ${rem(72)};\n border: none;\n background: none;\n -webkit-appearance: none;\n text-align: left;\n cursor: pointer;\n font-family: inherit;\n font-weight: 700;\n line-height: ${rem(24)};\n color: ${Colors.OSLO_GREY};\n font-size: ${rem(15)};\n white-space: nowrap;\n position: relative;\n outline: none;\n\n &:hover {\n text-decoration: underline;\n }\n`\n\nconst StyledShareModal = styled.div`\n padding: ${rem(12)} 0 ${rem(16)};\n margin: 0 0 ${rem(12)};\n width: ${rem(176)};\n background: ${Colors.ALABASTER};\n position: relative;\n\n &:after {\n content: '';\n width: ${rem(18)};\n height: ${rem(18)};\n background: ${Colors.ALABASTER};\n position: absolute;\n top: 100%;\n left: 50%;\n transform: rotate(-45deg) translate(-9px, -9px);\n transform-origin: top left;\n }\n`\n","import React, {\n FunctionComponent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport styled from 'styled-components'\nimport useDictionary from '../../../hooks/use-dictionary/useDictionary'\nimport Colors from '../../../tokens/Colors'\nimport { rem } from '../../../utils/rem'\nimport ShareModal, {\n ShareOption,\n ShareOptionType,\n} from '../../atoms/share-modal/ShareModal'\nimport iconFacebook from '../../../images/icon-facebook.svg'\nimport iconLinkedIn from '../../../images/icon-linked-in.svg'\nimport iconPinterest from '../../../images/icon-pinterest.svg'\nimport iconWeibo from '../../../images/icon-weibo.svg'\nimport iconLink from '../../../images/icon-link.svg'\nimport iconShare from '../../../images/icon-share.svg'\n\ninterface SocialShareProps {\n media: string\n title: string\n}\n\nconst SocialShare: FunctionComponent = ({ media, title }) => {\n const dictionary = useDictionary()\n const [showModal, setShowModal] = useState(false)\n const shareModalWrapperRef = useRef(null)\n\n useEffect((): (() => void) => {\n const onDocumentClick = (event: Event): void => {\n const clickedInside = shareModalWrapperRef.current?.contains(\n event.target as Node,\n )\n\n if (!clickedInside && showModal) {\n setShowModal(false)\n }\n }\n\n document.addEventListener('click', onDocumentClick)\n\n return (): void => {\n document.removeEventListener('click', onDocumentClick)\n }\n })\n\n const shareOptions: ShareOption[] = [\n {\n type: ShareOptionType.FACEBOOK,\n icon: iconFacebook,\n },\n {\n type: ShareOptionType.LINKED_IN,\n icon: iconLinkedIn,\n },\n {\n type: ShareOptionType.PINTEREST,\n icon: iconPinterest,\n },\n {\n type: ShareOptionType.WEIBO,\n icon: iconWeibo,\n },\n {\n hide: !(\n typeof window !== `undefined` &&\n window.navigator &&\n window.navigator.clipboard\n ),\n type: ShareOptionType.COPY,\n icon: iconLink,\n },\n ]\n\n const onButtonClick = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault()\n\n // show native share\n if (typeof window !== `undefined` && window.navigator.share) {\n window.navigator\n .share({\n url: window.location.href,\n })\n .catch((error) => console.warn(error))\n } else {\n setShowModal(!showModal)\n }\n },\n [showModal],\n )\n\n const openShareDialog = (url: string): void => {\n const left = window.screen.width / 2 - 600 / 2\n const top = window.screen.height / 2 - 600 / 2\n\n window.open(\n url,\n '',\n `menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600,left=${left},top=${top}`,\n )\n }\n\n const copyUrl = (url: string): void => {\n navigator.clipboard.writeText(url).catch((error) => console.warn(error))\n }\n\n const onShareOptionClick = useCallback(\n (type: ShareOptionType): void => {\n setShowModal(false)\n\n const url = window.location.href\n const encodedUrl = encodeURIComponent(url)\n const encodedMedia = encodeURIComponent(media)\n const encodedTitle = encodeURIComponent(title)\n\n switch (type) {\n case ShareOptionType.FACEBOOK:\n openShareDialog(`https://www.facebook.com/sharer.php?u=${encodedUrl}`)\n break\n case ShareOptionType.LINKED_IN:\n openShareDialog(\n `https://www.linkedin.com/sharing/share-offsite/?url=${encodedUrl}`,\n )\n break\n case ShareOptionType.PINTEREST:\n openShareDialog(\n `http://pinterest.com/pin/create/link/?url=${encodedUrl}&media=${encodedMedia}`,\n )\n break\n case ShareOptionType.WEIBO:\n openShareDialog(\n `http://service.weibo.com/share/share.php?url=${encodedUrl}&appkey=&title=${encodedTitle}&pic=&ralateUid=`,\n )\n break\n case ShareOptionType.COPY:\n copyUrl(url)\n break\n }\n },\n [media, title],\n )\n\n return (\n \n \n \n {dictionary.get('shareButtonText')}\n \n {showModal && (\n \n \n \n )}\n \n )\n}\n\nconst StyledImage = styled.img`\n height: ${rem(20)};\n margin-right: ${rem(16)};\n display: inline-block;\n`\n\nconst StyledLabel = styled.span`\n line-height: ${rem(20)};\n white-space: nowrap;\n`\n\nconst ShareModalWrapper = styled.div`\n position: absolute;\n bottom: 100%;\n`\n\nconst StyledButton = styled.button`\n border: none;\n background: none;\n appearance: none;\n font-family: inherit;\n outline: none;\n color: ${Colors.OSLO_GREY};\n font-weight: 700;\n font-size: ${rem(15)};\n cursor: pointer;\n line-height: ${rem(20)};\n display: flex;\n`\n\nconst StyledDictionaryWrapper = styled.div`\n margin: ${rem(288)} 0 ${rem(40)};\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n`\n\nexport default SocialShare\n","export const titleAnimation = {\n initial: {\n opacity: 0,\n y: 20,\n },\n visible: {\n opacity: 1,\n y: 0,\n transition: {\n delay: 0.2,\n duration: 0.8,\n ease: 'easeOut',\n },\n },\n}\n\nexport const subtitleAnimation = {\n initial: {\n opacity: 0,\n y: 30,\n },\n visible: {\n opacity: 1,\n y: 0,\n transition: {\n delay: 0.2,\n duration: 0.8,\n ease: 'easeOut',\n },\n },\n}\n","import React, { forwardRef, FunctionComponent, Ref } from 'react'\nimport { subtitleAnimation, titleAnimation } from './animations'\nimport Colors from '../../../../tokens/Colors'\nimport { mediaQueries } from '../../../../utils/mediaQueries'\nimport { motion } from 'framer-motion'\nimport { rem } from '../../../../utils/rem'\nimport { spacings } from '../../../../tokens/Spacings'\nimport styled from 'styled-components'\nimport Title, { TitleSizes } from '../../../atoms/title/Title'\n\nexport interface ContentProps {\n artist?: string\n ref?: Ref\n title?: string\n top: number\n}\n\nconst Content: FunctionComponent = forwardRef(\n ({ artist, title, top }, ref) => (\n \n \n \n {title}\n \n \n \n \n \n \n \n \n ),\n)\n\nContent.displayName = 'Content'\n\ninterface StyledContentProps {\n top: number\n}\n\nconst StyledContent = styled.div`\n position: absolute;\n top: ${({ top }): string => `${top}px`};\n left: 0;\n width: 100%;\n transform: translate3d(0, -50%, 0);\n padding: 0 ${rem(spacings.side.root)};\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n text-align: center;\n color: ${Colors.WHITE};\n\n ${mediaQueries.tablet} {\n padding: 0 ${rem(spacings.side.tablet)};\n }\n`\n\nexport default Content\n","import React, { FunctionComponent, ReactNode, Ref } from 'react'\nimport styled, { css, SimpleInterpolation } from 'styled-components'\nimport Colors from '../../../../tokens/Colors'\nimport { ImageNodeData } from '../../../../contexts/images/ImagesContext'\nimport Img from 'gatsby-image'\nimport { motion } from 'framer-motion'\nimport { rem } from '../../../../utils/rem'\n\nexport interface Size {\n height: number\n width: number\n}\n\ninterface BackgroundProps {\n backgroundRef: Ref\n canvasRef: Ref\n children: ReactNode\n isFixed: boolean\n isLoaded: boolean\n overlayOpacity: number\n poster?: ImageNodeData | null\n size: Size | null\n}\n\nconst Background: FunctionComponent = ({\n backgroundRef,\n canvasRef,\n children,\n isFixed,\n isLoaded,\n overlayOpacity,\n poster,\n size,\n}) => (\n \n \n {poster && (\n \n \n \n )}\n \n {children}\n \n)\n\ninterface StyledBackgroundProps {\n isFixed: boolean\n}\n\nconst StyledBackground = styled(motion.div)`\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100vh;\n display: flex;\n align-items: center;\n flex-direction: column;\n\n ${({ isFixed }): SimpleInterpolation =>\n isFixed &&\n css`\n position: fixed;\n top: 0;\n bottom: auto;\n `}\n`\n\ninterface CanvasProps {\n isVisible: boolean\n}\n\nconst Canvas = styled.canvas`\n position: absolute;\n visibility: ${({ isVisible }): string => (isVisible ? 'visible' : 'hidden')};\n width: 100vw;\n height: 100vh;\n`\n\ninterface PosterProps {\n size: Size | null\n}\n\nconst Poster = styled(motion.div)`\n position: absolute;\n pointer-events: none;\n top: 0;\n left: 0;\n width: ${({ size }): string => (size ? rem(size.width) : 'auto')};\n height: ${({ size }): string => (size ? rem(size.height) : 'auto')};\n`\n\ninterface OverlayProps {\n opacity: number\n}\n\nconst Overlay = styled.div.attrs(({ opacity }) => ({\n style: {\n opacity,\n },\n}))`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${Colors.BLACK_20};\n transition: opacity 100ms linear;\n`\n\nexport default Background\n","/**\n */\n\ninterface CoverDimensions {\n height: number\n width: number\n}\n\nconst cover = (\n parentWidth: number,\n parentHeight: number,\n childWidth: number,\n childHeight: number,\n): CoverDimensions => {\n const childRatio = childWidth / childHeight\n const parentRatio = parentWidth / parentHeight\n let width = parentWidth\n let height = parentHeight\n\n if (childRatio < parentRatio) {\n height = width / childRatio\n } else {\n width = height * childRatio\n }\n\n return {\n width,\n height,\n }\n}\n\nconst drawCoverImage = (\n context: CanvasRenderingContext2D,\n image: HTMLImageElement,\n canvas: HTMLCanvasElement,\n): void => {\n const { width, height } = cover(\n canvas.width,\n canvas.height,\n image.width,\n image.height,\n )\n\n const xOffset = (canvas.width - width) / 2\n const yOffset = (canvas.height - height) / 2\n\n context.drawImage(image, xOffset, yOffset, width, height)\n}\n\nexport default drawCoverImage\n","import { motion } from 'framer-motion'\nimport React, { FunctionComponent } from 'react'\nimport styled from 'styled-components'\nimport Colors from '../../../tokens/Colors'\nimport { rem } from '../../../utils/rem'\n\nexport interface ProgressIndicatorProps {\n className?: string\n progress: number\n}\n\nconst ProgressIndicator: FunctionComponent = ({\n className,\n progress,\n}) => (\n \n)\n\nconst StyledProgressIndicator = styled(motion.div)`\n width: 100%;\n height: ${rem(3)};\n background-color: ${Colors.WHITE};\n transform-origin: 0 0;\n`\n\nexport default ProgressIndicator\n","import { useEffect, useState } from 'react'\nimport isEqual from 'lodash/isEqual'\n\ninterface LoadedImages {\n [key: string]: HTMLImageElement\n}\n\nconst useImageLoader = (images: string[]): [LoadedImages, boolean, number] => {\n let imagesLoaded = 0\n\n const [imageSources, setImageSources] = useState(images)\n const [allImagesLoaded, setAllImagesLoaded] = useState(false)\n const [progress, setProgress] = useState(0)\n const [loadedImages, setLoadedImages] = useState({})\n\n useEffect(() => {\n if (isEqual(imageSources, images)) {\n return\n }\n\n setImageSources(images)\n setAllImagesLoaded(false)\n setLoadedImages({})\n\n const loadedImages: LoadedImages = {}\n images.forEach((source: string) => {\n const image = new Image()\n\n // load event handler\n image.onload = (): void => {\n imagesLoaded++\n setProgress(Math.round(100 / (images.length / imagesLoaded)))\n\n if (imagesLoaded === images.length) {\n setAllImagesLoaded(true)\n }\n }\n // set source which will trigger onLoad event\n image.src = source\n loadedImages[source] = image\n })\n\n setLoadedImages(loadedImages)\n }, [images])\n\n return [loadedImages, allImagesLoaded, progress]\n}\n\nexport default useImageLoader\n","import { AnimatePresence, usePresence } from 'framer-motion'\nimport Content, { ContentProps } from './content/Content'\nimport React, {\n FunctionComponent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport Background from './background/Background'\nimport clamp from 'lodash/clamp'\nimport drawCoverImage from '../../../utils/drawCoverImage'\nimport ProgressIndicator from '../../atoms/progress-indicator/ProgressIndicator'\nimport { rem } from '../../../utils/rem'\nimport ScrollIndicator from '../../atoms/scroll-indicator/ScrollIndicator'\nimport { spacing } from '../../../utils/spacing'\nimport styled from 'styled-components'\nimport { useAppState } from '../../../contexts/app-state/AppStateContext'\nimport useBreakPoints from '../../../hooks/use-breakpoints/useBreakPoints'\nimport useDictionary from '../../../hooks/use-dictionary/useDictionary'\nimport useImageData from '../../../hooks/use-image-data/useImageData'\nimport useImageLoader from '../../../hooks/use-image-loader/useImageLoader'\nimport useResizeObserver from 'use-resize-observer/polyfilled'\nimport useWindowSize from '../../../hooks/use-window-size/useWindowSize'\n\ninterface Hero extends Omit {\n image?: string\n numberOfFrames: number\n scrollIndicatorText?: string\n // The scrollThreshold determines the height of the hero/the amount of pixels per photo\n // By default it's 100 which means an every 100 pixels a new frame will be shown\n scrollThreshold?: number\n slug: string\n}\n\nconst Hero: FunctionComponent = ({\n artist,\n image,\n numberOfFrames,\n scrollIndicatorText = 'scrollToExplore',\n scrollThreshold = 60,\n slug,\n title,\n}) => {\n const backgroundRef = useRef(null)\n const canvasRef = useRef(null)\n const contentRef = useRef(null)\n const heroRef = useRef(null)\n const requestId = useRef(null)\n const [currentIndex, setCurrentIndex] = useState(0)\n const [overlayOpacity, setOverlayOpacity] = useState(1)\n const [isFixed, setIsFixed] = useState(false)\n const [progress, setProgress] = useState(0)\n const [isPresent, safeToRemove] = usePresence()\n const imageData = useImageData(`hero/${image || ''}`)\n const { isTablet } = useBreakPoints()\n const dictionary = useDictionary()\n const posterLandscape = useImageData(`hero/${slug}/landscape/poster.jpg`)\n const posterPortrait = useImageData(`hero/${slug}/portrait/poster.jpg`)\n const [state] = useAppState()\n const [windowWidth, windowHeight] = useWindowSize()\n const poster = isTablet ? posterLandscape : posterPortrait\n\n const { width: canvasWidth, height: canvasHeight } = useResizeObserver({\n ref: canvasRef,\n })\n\n const images = useMemo(() => {\n if (\n typeof state.isWebPSupported === 'boolean' &&\n typeof windowWidth !== 'undefined'\n ) {\n return imageData\n ? [imageData.fluid.src]\n : Array.from(Array(numberOfFrames).keys()).map(\n (number) =>\n `/images/hero/${slug}/${\n isTablet ? 'landscape' : 'portrait'\n }/thumb${(number + 1).toString().padStart(4, '0')}.${\n state.isWebPSupported ? 'webp' : 'jpg'\n }`,\n )\n }\n\n return []\n }, [\n imageData,\n isTablet,\n numberOfFrames,\n slug,\n state.isWebPSupported,\n windowWidth,\n ])\n\n const [loadedImages, isLoaded, loadingProgress] = useImageLoader(images)\n\n useEffect(() => {\n if (!isPresent) {\n safeToRemove && safeToRemove()\n }\n }, [isPresent])\n\n // disable scrolling while loading\n useEffect((): (() => void) => {\n document.body.style.overflow = isLoaded ? '' : 'hidden'\n\n return (): void => {\n document.body.style.overflow = ''\n }\n }, [isLoaded])\n\n const onScroll = useCallback(() => {\n if (\n canvasRef.current &&\n contentRef.current &&\n // This will be 0 when the component is not displayed\n contentRef.current.offsetHeight > 0 &&\n heroRef.current\n ) {\n // Calculate the overlay opacity\n const overlayOpacity =\n 1 -\n (1 /\n (window.scrollY +\n contentRef.current.getBoundingClientRect().top +\n contentRef.current.offsetHeight)) *\n window.scrollY\n\n setOverlayOpacity(Math.max(0, overlayOpacity))\n\n // The image sequence needs to start scrubbing when the subtitle leaves the screen\n const scrollCorrection =\n contentRef.current.getBoundingClientRect().top +\n contentRef.current.offsetHeight\n\n const progress =\n (100 /\n (heroRef.current.offsetHeight -\n window.innerHeight -\n (window.scrollY + scrollCorrection))) *\n -scrollCorrection\n\n setProgress(Math.round(clamp(progress, 0, 100)))\n\n const currentIndex = Math.ceil(((numberOfFrames - 1) / 100) * progress)\n\n if (currentIndex <= 0) {\n setCurrentIndex(0)\n } else if (currentIndex < numberOfFrames) {\n setCurrentIndex(currentIndex)\n } else {\n setCurrentIndex(numberOfFrames - 1)\n }\n\n if (\n (currentIndex >= numberOfFrames &&\n window.scrollY >\n heroRef.current.offsetHeight - canvasRef.current.offsetHeight) ||\n numberOfFrames === 1\n ) {\n setIsFixed(false)\n } else if (isPresent) {\n setIsFixed(true)\n }\n }\n }, [\n canvasRef.current,\n contentRef.current,\n heroRef.current,\n isPresent,\n numberOfFrames,\n ])\n\n const renderImage = useCallback(() => {\n if (canvasRef.current && isLoaded && windowWidth && windowHeight) {\n const context = canvasRef.current.getContext('2d')\n const image = loadedImages[images[currentIndex]]\n\n if (context && image) {\n context.imageSmoothingEnabled = false\n drawCoverImage(context, image, canvasRef.current)\n }\n }\n }, [\n windowWidth,\n windowHeight,\n canvasRef.current,\n currentIndex,\n images,\n isLoaded,\n ])\n\n /**\n * This useEffect checks for changes in the contentRef.current.offsetHeight\n * When you go from a project to another project the previous canvas will be hidden\n * If you then use the browser navigation to go back the canvas needs to be rendered\n */\n useEffect(() => {\n if ((contentRef.current?.offsetHeight || 0) > 0) {\n onScroll()\n renderImage()\n }\n }, [contentRef.current?.offsetHeight])\n\n /**\n * Rerender canvas when window size changes\n */\n useEffect(() => {\n renderImage()\n }, [windowWidth, windowHeight])\n\n useEffect(() => {\n onScroll()\n window.addEventListener('scroll', onScroll)\n\n return (): void => window.removeEventListener('scroll', onScroll)\n }, [onScroll])\n\n useEffect(() => {\n requestId.current = requestAnimationFrame(renderImage)\n\n return (): void => {\n if (requestId.current !== null) {\n cancelAnimationFrame(requestId.current)\n }\n }\n }, [renderImage])\n\n return (\n \n \n {isLoaded && (\n \n \n \n )}\n \n \n {loadingProgress !== 100 && (\n \n )}\n \n \n \n )\n}\n\ninterface StyledHeroProps {\n numberOfFrames: number\n scrollThreshold: number\n}\n\nconst StyledProgressIndicator = styled(ProgressIndicator)`\n position: absolute;\n top: 0;\n left: 0;\n`\n\nconst StyledHero = styled.div`\n ${spacing()};\n position: relative;\n min-height: 100vh;\n height: ${({ numberOfFrames, scrollThreshold }): string =>\n rem(numberOfFrames * scrollThreshold)};\n overflow: hidden;\n`\n\nconst ScrollIndicatorWrapper = styled.div`\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: flex-end;\n justify-content: center;\n`\n\nexport default Hero\n","import { Variants } from 'framer-motion'\n\nexport const wrapperAnimation = (\n distanceToCenter: number,\n exitActive: boolean,\n): Variants => ({\n initial: {\n overflow: 'hidden',\n y: 0,\n },\n exit: exitActive\n ? {\n overflow: 'initial',\n y: distanceToCenter,\n transition: {\n duration: 0.5,\n ease: 'easeOut',\n },\n }\n : {},\n})\n\nexport const backgroundAnimation = (\n scale: number,\n exitActive: boolean,\n): Variants => ({\n initial: {\n scale: 1,\n },\n hoverScaleIn: {\n scale: 1.06,\n transition: {\n ease: 'easeOut',\n },\n },\n hoverScaleOut: {\n scale: 1,\n transition: {\n ease: 'easeIn',\n },\n },\n exit: exitActive\n ? {\n scale,\n transition: {\n duration: 0.5,\n ease: 'easeOut',\n },\n }\n : {},\n})\n\nexport const overlayAnimation = {\n initial: {\n opacity: 0.2,\n },\n opacityIn: {\n opacity: 0.4,\n transition: {\n ease: 'easeOut',\n },\n },\n}\n","import Img, { GatsbyImageFluidProps } from 'gatsby-image'\nimport React, {\n FunctionComponent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport useResizeObserver from 'use-resize-observer/polyfilled'\nimport useBreakPoints from '../../../hooks/use-breakpoints/useBreakPoints'\nimport Title, { TitleSizes } from '../../atoms/title/Title'\nimport Colors from '../../../tokens/Colors'\nimport { ImageNodeData } from '../../../contexts/images/ImagesContext'\nimport { Link } from 'gatsby'\nimport { mediaQueries } from '../../../utils/mediaQueries'\nimport { motion, usePresence } from 'framer-motion'\nimport { rem } from '../../../utils/rem'\nimport ScrollIndicator from '../../atoms/scroll-indicator/ScrollIndicator'\nimport { spacings } from '../../../tokens/Spacings'\nimport styled from 'styled-components'\nimport useDictionary from '../../../hooks/use-dictionary/useDictionary'\nimport useImageData from '../../../hooks/use-image-data/useImageData'\nimport {\n backgroundAnimation,\n overlayAnimation,\n wrapperAnimation,\n} from './animations'\n\ninterface NextArtPieceProps {\n artist: string\n className?: string\n onClick?: () => void\n slug: string\n title: string\n}\n\nconst NextArtPiece: FunctionComponent = ({\n artist,\n className,\n onClick,\n slug,\n title,\n}) => {\n const { isDesktop } = useBreakPoints()\n const [distanceToCenter, setDistanceToCenter] = useState(0)\n const [scaleFactor, setScaleFactor] = useState(0)\n const nextArtPieceWrapperRef = useRef(null)\n const [isPresent, safeToRemove] = usePresence()\n const [exitActive, setExitActive] = useState(false)\n\n useEffect(() => {\n if (!isPresent) {\n safeToRemove && safeToRemove()\n }\n }, [isPresent])\n\n const { height: nextArtPieceWrapperHeight } = useResizeObserver({\n ref: nextArtPieceWrapperRef,\n })\n\n const nextArtPieceImage = useImageData(\n `next-art-piece/${slug}.jpg`,\n ) as ImageNodeData\n\n const nextArtPieceImageNarrow = useImageData(\n `next-art-piece-narrow/${slug}.jpg`,\n ) as ImageNodeData\n\n const dictionary = useDictionary()\n const [hover, setHover] = useState(false)\n\n /**\n * Calculate the distance to center of screen\n */\n useEffect(() => {\n if (nextArtPieceWrapperRef.current) {\n const {\n top,\n height,\n } = nextArtPieceWrapperRef.current.getBoundingClientRect()\n const position = top + height / 2\n const centerY = window.innerHeight / 2\n\n setDistanceToCenter(centerY - position)\n setScaleFactor(window.innerHeight / height)\n }\n }, [nextArtPieceWrapperHeight, nextArtPieceWrapperRef.current])\n\n const onClickCallback = useCallback(() => {\n setExitActive(true)\n\n if (onClick) {\n onClick()\n }\n }, [onClick])\n\n const onHoverStart = useCallback((): void => {\n setHover(true)\n }, [])\n\n const onHoverEnd = useCallback((): void => {\n setHover(false)\n }, [])\n\n const backgroundImage = isDesktop\n ? nextArtPieceImage\n : nextArtPieceImageNarrow\n\n return (\n \n \n \n {backgroundImage && (\n \n \n \n \n )}\n \n \n {title}\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst StyledNexArtPieceWrapper = styled(motion.div)`\n position: relative;\n height: ${rem(450)};\n overflow: hidden;\n`\n\nconst StyledNextArtPiece = styled(Link)`\n text-decoration: none;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: block;\n`\n\nconst BackgroundImageWrapper = styled(motion.div)`\n position: relative;\n height: 100%;\n`\n\nconst BackgroundImage = styled(Img)`\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n height: 100%;\n transform: translate3d(-50%, -50%, 0);\n`\n\nconst Inner = styled(motion.section)`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n`\n\nconst Content = styled(motion.div)`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n padding: 0 ${rem(spacings.side.root)};\n text-align: center;\n color: ${Colors.WHITE};\n\n ${mediaQueries.tablet} {\n padding: 0 ${rem(spacings.side.tablet)};\n }\n`\n\nconst Overlay = styled(motion.div)`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: ${Colors.BLACK};\n opacity: 0.2;\n`\n\nconst ScrollIndicatorWrapper = styled.div`\n position: absolute;\n bottom: 0;\n left: 50%;\n transform: translate3d(-50%, 0, 0);\n`\n\nexport default NextArtPiece\n","import React, {\n Fragment,\n FunctionComponent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport SocialShare from '../molecules/social-share/SocialShare'\nimport Sections, { SectionProps } from '../organisms/sections/Sections'\nimport useResizeObserver from 'use-resize-observer/polyfilled'\nimport { rem } from '../../utils/rem'\nimport Colors from '../../tokens/Colors'\nimport Footer from '../organisms/footer/Footer'\nimport { Helmet } from 'react-helmet'\nimport Hero from '../organisms/hero/Hero'\nimport MetaData from '../../types/MetaData'\nimport { motion } from 'framer-motion'\nimport NextArtPiece from '../molecules/next-art-piece/NextArtPiece'\nimport styled from 'styled-components'\nimport { useAppState } from '../../contexts/app-state/AppStateContext'\nimport useImageData from '../../hooks/use-image-data/useImageData'\n\ninterface ProjectInfo {\n artist: string\n meta: MetaData\n slug: string\n title: string\n}\n\nexport interface ProjectProps extends ProjectInfo {\n next: ProjectInfo\n numberOfFrames: number\n sections: SectionProps[]\n}\n\ninterface ProjectPageProps extends ProjectInfo {\n location: Location\n pageContext: ProjectProps\n}\n\nconst ProjectPage: FunctionComponent = ({\n location,\n pageContext: { artist, meta, numberOfFrames, next, sections, slug, title },\n}) => {\n const [{ projects }] = useAppState()\n const ogImage = useImageData(`social/${slug}.jpg`)\n const [nextProject, setNextProject] = useState(next)\n const footerWrapperRef = useRef(null)\n\n const { height: footerWrapperHeight } = useResizeObserver({\n ref: footerWrapperRef,\n })\n\n const [\n isNextArtPieceTransitionActive,\n setIsNextArtPieceTransitionActive,\n ] = useState(false)\n\n /**\n * Search current project inside app state, set the updated next in state\n */\n useEffect(() => {\n setNextProject(\n projects?.find(({ slug: projectSlug }) => projectSlug === slug)?.next,\n )\n }, [slug, projects])\n\n /**\n * Reset the isNextArtPieceTransitionActive boolean when the user use the browser navigation\n */\n useEffect(() => {\n const onPopstate = (): void => {\n setIsNextArtPieceTransitionActive(false)\n }\n\n window.addEventListener('popstate', onPopstate)\n\n return (): void => {\n window.removeEventListener('popstate', onPopstate)\n }\n }, [])\n\n const onNextArtPieceClick = useCallback(() => {\n setIsNextArtPieceTransitionActive(true)\n }, [])\n\n return (\n \n \n {nextProject && (\n \n )}\n