{"version":3,"sources":["webpack:///./src/components/helpers/Container/index.tsx","webpack:///./src/configs.ts","webpack:///./src/utilities/objects.ts","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/core/api/models/index.ts","webpack:///./src/core/api/models/endpoints/news.ts","webpack:///./src/core/api/models/endpoints/contact.ts","webpack:///./src/core/api/models/endpoints/calendar.ts","webpack:///./src/core/api/models/endpoints/racehub.ts","webpack:///./src/core/api/models/endpoints/riders.ts","webpack:///./src/core/api/models/endpoints/rankings.ts","webpack:///./src/core/api/models/constants.ts","webpack:///./src/components/common/SvgImage/index.tsx","webpack:///./src/components/common/Button/index.tsx","webpack:///./src/components/common/Hero/index.tsx","webpack:///./src/components/common/ImageWithFocalPoint/index.tsx","webpack:///./src/components/common/Link/index.tsx","webpack:///./src/components/common/Overlay/index.tsx","webpack:///./src/components/common/Stats/index.tsx","webpack:///./src/core/config/index.ts","webpack:///./src/contexts/Localizations/index.tsx","webpack:///./src/contexts/Localizations/defaultLocalizations.ts","webpack:///./src/components/common/Tag/index.tsx","webpack:///./src/components/common/Image/index.tsx","webpack:///./src/components/common/ImageObject/index.tsx","webpack:///./src/components/common/UnderlineTitle/index.tsx","webpack:///./src/utilities/number.ts","webpack:///./src/components/common/Content/index.tsx","webpack:///./src/components/common/Contact/index.tsx","webpack:///./src/components/common/RichText/index.tsx","webpack:///./src/components/ResultsTable/index.tsx","webpack:///./src/components/Podium/index.tsx","webpack:///./src/hooks/useHabitat.tsx","webpack:///./src/utilities/browser.ts","webpack:///./src/components/ResultsAccordion/index.tsx","webpack:///./src/components/common/JumpList/index.tsx","webpack:///./src/breakpoints.ts","webpack:///./src/components/common/ResponsiveTable/index.tsx","webpack:///./src/components/common/DateCategory/index.tsx","webpack:///./src/components/common/Accordion/index.tsx","webpack:///./src/components/common/ImageBasic/index.tsx","webpack:///./src/components/common/Loader/index.tsx","webpack:///./src/components/common/SocialLinks/index.tsx","webpack:///./src/components/common/TagList/index.tsx","webpack:///./src/components/common/Paginaton/index.tsx","webpack:///./src/components/helpers/Grid/index.tsx","webpack:///./src/hooks/UseOutsideAlerter.ts","webpack:///./src/components/CompetitionDetails/index.tsx","webpack:///./src/components/CompetitionSchedule/index.tsx","webpack:///./src/components/Commissaires/index.tsx","webpack:///./src/modules/CompetitionDetails/index.tsx"],"names":["children","className","CSS_CLASSES","isActive","isOpen","isShowing","navIsShowing","overlayIsShowing","DISCIPLINE","gravel","indoor","para","road","track","trials","other","isIdenticalObject","objectA","objectB","aProps","Object","getOwnPropertyNames","bProps","length","i","propName","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","resolve","module","exports","news","contact","calendar","racehub","riders","rankings","getNews","pageIndex","pageSize","featuredArticleId","newsCategoryId","type","tag","get","apiUrl","params","postMail","entryId","name","email","phone","message","getUpcoming","discipline","raceCategory","raceType","raceClass","country","year","seasonId","getPast","getResult","eventCode","disciplineCode","raceName","getCwc","downloadCalendar","url","bearerToken","post","responseType","headers","Authorization","getCommentary","eventId","lastCommentId","getCompetitionRiders","page","countryCode","search","getRiders","category","getTeams","getRankings","currentYear","now","Date","transition","DEFAULT","getFullYear","month","day","transitionDate","getRankingYear","getTechnicalRankings","CRO","ROA","title","reference","ariaHidden","aria-hidden","xlinkHref","style","text","icon","ariaLabel","disabled","showLoader","iconOnly","fullWidth","isProcessing","handleClick","buttonClass","onClick","aria-label","SvgImage","Hero","backLink","colorTheme","image","imageSize","isDarkened","isLanding","isForPage","root","classes","push","join","Container","href","ImageObject","fitType","useFocalPoint","aspectRatio","aspectRatioMobile","mobileImageTriggerWidth","widthSizes","isLoaded","hasTransparentBackground","focalPoint","setFocalPoint","file","details","xPercentile","x","width","yPercentile","y","height","Image","alt","cropTo","xQuadrant","yQuadrant","setFocalArea","isExternal","isButton","iconAfter","buttonType","buttonColour","target","rel","bodyElm","document","body","handleClose","hasCloseRedirect","containerLess","closeOverlay","classList","remove","setTimeout","handleKeyUp","event","keyCode","add","window","addEventListener","removeEventListener","stats","head","slice","label","value","stat","key","config","env","webSettings","baseUrl","webUrl","storybookApi","localizations","shareConfig","shareUrl","mobileOnly","cookieConfig","cookiePolicy","cookiePolicyExpirationDays","xsrfRequestToken","translationsNotation","assign","LocalizationContext","locale","documentElement","lang","translations","expand","mobileImageTriggerWidthDefault","md","aspectRatioMap","undefined","lowQualityWidth","media","data-sizes","data-srcset","widthSize","Math","ceil","parseInt","onLoad","objectPosition","data-src","innerWidth","defaultWidths","noAnimate","srcset","setSrcset","src","size","index","Number","containerTheme","disableUppercase","toOrdinal","number","b","intro","content","link","secondaryLink","downloads","isTitleFloating","Boolean","download","toReadable","phoneNumber","split","replace","addr","tel","fax","website","facebook","instagram","twitter","dangerouslySetInnerHTML","__html","ResultsTable","results","podium","asyncRequest","nested","isLoading","setIsLoading","apiError","setApiError","resultData","setResultData","onBeforeLoad","data","then","rows","result","modifiedResult","values","nationality","row","table","Table","stickyCol","headerType","rank","team","teamRowHeader","trim","firstname","lastname","riderRowHeader","moreClassName","time","position","updateHabitat","insertUrlParam","includeHash","history","pushState","searchParams","URLSearchParams","location","set","newurl","protocol","host","pathname","toString","hash","path","getUrlParamValue","entries","hashes","indexOf","val","decodeURIComponent","getAllUrlParams","filter","param","isMobile","test","navigator","scrollIntoView","elemToScrollTo","behaviour","MSInputMethodContext","behavior","isPortrait","Content","accordion","toContentPanel","isAsync","panels","toNestedPanel","themeColor","isResults","items","action","selectedValue","theme","useScroller","useSearch","disableFirst","withDatePicker","defaultDatePickerValue","onDateChange","includeDates","datePickerLocale","wrapperRef","setValue","setIsOpen","options","setOptions","isClosing","setIsClosing","searchValue","setSearchValue","close","mapSelection","item","visible","handleChange","optionIndex","preventDefault","optionsSelection","selected","filteredOptions","option","displayText","toLowerCase","includes","createOption","role","createSearch","placeholder","searchLabel","onChange","currentTarget","ref","toggle","date","dateIndex","findIndex","format","inline","xxs","xs","sm","ml","lg","xl","xxl","xxxl","xxxxl","headerClassName","rowClassName","cellClassName","isExpanded","setExpanded","rowExpandedStates","setRowExpandedStates","some","fromEntries","aria-expanded","header","alwaysVisible","hiddenOnMobile","scope","rowIndex","colIndex","Fragment","toggleExpandRow","colSpan","dateFormat","dateTime","AccordionPanel","activeTab","toggleTab","setHeight","asyncContentLoaded","setAsyncContentLoaded","wrapper","calculatePanelHeight","panelElement","current","ontransitionend","scrollHeight","requestAnimationFrame","props","panelsInState","setPanelsInState","mappedPanels","panel","useIntrinsicHeight","setIsLoaded","list","tags","defaultProps","pageQueryKey","state","pages","firstPageIndex","lastPageIndex","previousPageIndex","nextPageIndex","currentPage","isFirstPageDisabled","isLastPageDisabled","totalAmountOfPages","isPreviousDisabled","isNextDisabled","maxVisiblePagesMobile","maxVisiblePagesDesktop","maxVisiblePages","componentDidMount","this","handdleMaxVisiblePages","stopPropagation","getPager","componentDidUpdate","prevProps","totalItems","itemsPerPage","setState","generateVisablePages","maxVisibleOffset","startPage","endPage","Array","from","s","l","viewportWidth","changePage","retainRoute","String","generateButton","isDisabled","rootLocation","render","overflowHidden","Column","isFlush","container","handler","handleClickOutside","contains","competitionClass","venue","dates","classLabel","emailLabel","websiteLabel","races","race","subtitle","competitionDetails","schedule","assignments","competition","ResultsAccordion","racesLabel","assignmentsLabel","appointedByLabel"],"mappings":"sGAAA,kBAae,IANG,SAAC,G,IAAEA,EAAQ,WAAuB,OAClD,uBAAKC,UAAU,aACZD,K,iCCFL,oEAAO,IAMME,EAAc,CACzBC,SAAU,UACVC,OAAQ,UACRC,UAAW,aACXC,aAAc,iBACdC,iBAAkB,sBAsBPC,EAAkD,CAC7D,gBAAiB,MACjB,aAAc,MACd,iBAAkB,MAClB,cAAe,MACfC,OAAQ,MACRC,OAAQ,MACR,gBAAiB,MACjBC,KAAM,MACNC,KAAM,MACNC,MAAO,MACPC,OAAQ,MACRC,MAAO,Q,kiBChDHC,EAAoB,SAACC,EAAcC,GACvC,IAAMC,EAASC,OAAOC,oBAAoBJ,GACpCK,EAASF,OAAOC,oBAAoBH,GAE1C,GAAIC,EAAOI,SAAWD,EAAOC,OAC3B,OAAO,EAIT,IAAK,IAAIC,EAAI,EAAGA,EAAIL,EAAOI,OAAQC,IAAK,CACtC,IAAMC,EAAWN,EAAOK,GACxB,GAAIP,EAAQQ,KAAcP,EAAQO,GAChC,OAAO,EAGX,OAAO,K,mJCnBT,IAAIC,EAAM,CACT,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,aAAc,GACd,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,aAAc,GACd,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,GACR,UAAW,GACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,QAAS,IACT,WAAY,IACZ,OAAQ,IACR,UAAW,IACX,OAAQ,GACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,GACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,gBAAiB,IACjB,aAAc,IACd,gBAAiB,IACjB,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,WAAY,IACZ,cAAe,IACf,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,YAAa,IACb,eAAgB,IAChB,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,QAAS,IACT,WAAY,IACZ,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,QAAS,IACT,WAAY,IACZ,OAAQ,IACR,UAAW,IACX,QAAS,IACT,WAAY,IACZ,QAAS,IACT,aAAc,IACd,gBAAiB,IACjB,WAAY,IACZ,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,YAAa,IACb,eAAgB,IAChB,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,gBAAiB,IACjB,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,KAIf,SAASC,EAAeC,GACvB,IAAIC,EAAKC,EAAsBF,GAC/B,OAAOG,EAAoBF,GAE5B,SAASC,EAAsBF,GAC9B,IAAIG,EAAoBC,EAAEN,EAAKE,GAAM,CACpC,IAAIK,EAAI,IAAIC,MAAM,uBAAyBN,EAAM,KAEjD,MADAK,EAAEE,KAAO,mBACHF,EAEP,OAAOP,EAAIE,GAEZD,EAAeS,KAAO,WACrB,OAAOhB,OAAOgB,KAAKV,IAEpBC,EAAeU,QAAUP,EACzBQ,EAAOC,QAAUZ,EACjBA,EAAeE,GAAK,K,iCCnSpB,0DAOe,KACbW,KAAI,EACJC,QAAO,EACPC,SAAQ,EACRC,QAAO,EACPC,OAAM,EACNC,SAAQ,I,g8CCTGC,EAAU,SACrBC,EACAC,EACAC,EACAC,EACAC,EACAC,GAAY,0C,kDAEoB,SAAM,IAAMC,IAAO,IAAOC,OAAM,gBAAiB,CAC/EC,OAAQ,CACNL,eAAc,EACdH,UAAS,EACTC,SAAQ,EACRG,KAAI,EACJF,kBAAiB,EACjBG,IAAG,M,OAIP,SAXgC,SAApB,e,k9CCRDI,EAAW,SACtBC,EACAC,EACAC,EACAC,EACAC,GAAe,0C,kDAEiB,SAAM,IAAMR,IAAO,IAAOC,OAAM,gBAAiB,CAC/EC,OAAQ,CACNE,QAAO,EACPC,KAAI,EACJC,MAAK,EACLC,MAAK,EACLC,QAAO,M,OAIX,SAVgC,SAApB,e,+nDCHDC,EAAc,SAAO,G,IAChCC,EAAU,aACVC,EAAY,eACZC,EAAQ,WACRC,EAAS,YACTC,EAAO,UACPC,EAAI,OACJC,EAAQ,W,4FAEwB,SAAM,IAAMhB,IAAO,IAAOC,OAAM,qBAAsB,CACpFC,OAAQ,CACNQ,WAAU,EACVC,aAAY,EACZC,SAAQ,EACRC,UAAS,EACTC,QAAO,EACPC,KAAI,EACJC,SAAQ,M,OAIZ,SAZgC,SAApB,cAeDC,EAAU,SAAO,G,IAC5BP,EAAU,aACVC,EAAY,eACZC,EAAQ,WACRC,EAAS,YACTC,EAAO,UACPE,EAAQ,WACRD,EAAI,O,4FAE4B,SAAM,IAAMf,IAAO,IAAOC,OAAM,iBAAkB,CAChFC,OAAQ,CACNQ,WAAU,EACVC,aAAY,EACZC,SAAQ,EACRC,UAAS,EACTC,QAAO,EACPE,SAAQ,EACRD,KAAI,M,OAIR,SAZgC,SAApB,cAeDG,EAAY,SAAO,G,IAC9BC,EAAS,YACTP,EAAQ,WACRQ,EAAc,iBACdC,EAAQ,W,4FAEwB,SAAM,IAAMrB,IAAO,IAAOC,OAAM,qBAAqBkB,EAAa,CAChGjB,OAAQ,CACNQ,WAAYU,EACZR,SAAQ,EACRS,SAAQ,M,OAIZ,SARgC,SAApB,cAWDC,EAAS,SAAOZ,GAAkB,0C,kDACb,SAAM,IAAMV,IAAO,IAAOC,OAAM,gBAAiB,CAC/EC,OAAQ,CAAEQ,WAAYA,GAAc,O,OAGtC,SAJgC,SAApB,cAODa,EAAmB,SAC9BC,EACAC,EACAvB,GAAiC,0C,kDAED,SAAM,IAAMwB,KAAKF,EAAKtB,EAAQ,CAC5DyB,aAAc,OACdC,QAAS,CAAEC,cAAe,UAAUJ,M,OAGtC,SALgC,mB,u9CClFrBK,EAAgB,SAC3BC,EACAC,GAAqB,0C,kDAEW,SAAM,IAAMhC,IAAO,IAAOC,OAAM,wBAAwB8B,EAAW,CACjG7B,OAAQ,CACN8B,cAAa,M,OAIjB,SANgC,SAApB,e,ijDCJDC,EAAuB,SAAO,G,IACzCzD,EAAE,KACF0D,EAAI,OACJC,EAAW,cACXC,EAAM,S,4FAE0B,SAAM,IAAMpC,IAAO,IAAOC,OAAM,2BAA2BzB,EAAM,CAC/F0B,OAAQ,CACNgC,KAAI,EACJC,YAAW,EACXC,OAAM,M,OAIV,SARgC,SAApB,cAWDC,EAAY,SAAO,G,IAC9BH,EAAI,OACJC,EAAW,cACXzB,EAAU,aACV4B,EAAQ,WACRvB,EAAI,OACJqB,EAAM,S,4FAE0B,SAAM,IAAMpC,IAAO,IAAOC,OAAM,WAAWS,EAAU,IAAIK,EAAQ,CAC/Fb,OAAQ,CACNgC,KAAI,EACJpB,QAASqB,EACTG,SAAQ,EACRF,OAAM,M,OAIV,SATgC,SAApB,cAYDG,EAAW,SAAO,G,IAC7BL,EAAI,OACJC,EAAW,cACXzB,EAAU,aACV4B,EAAQ,WACRvB,EAAI,OACJqB,EAAM,S,4FAE0B,SAAM,IAAMpC,IAAO,IAAOC,OAAM,UAAUS,EAAU,IAAIK,EAAQ,CAC9Fb,OAAQ,CACNgC,KAAI,EACJpB,QAASqB,EACTG,SAAQ,EACRF,OAAM,M,OAIV,SATgC,SAApB,e,mhDC7BDI,EAAc,SAAO,G,IAChC9B,EAAU,aACV4B,EAAQ,WACRxC,EAAI,OACJtB,EAAE,K,kGAG8B,OAD1BiE,EArBe,SAAC/B,GACtB,IAAMgC,EAAM,IAAIC,KACVC,EAAa,IAAyBlC,IAAe,IAAyBmC,QAEpF,GAAID,IAAe,IAAyBC,QAC1C,OAAOH,EAAII,cAGL,IAAAC,EAAeH,EAAV,MAAEI,EAAQJ,EAAL,IACZK,EAAiB,IAAIN,KAAKD,EAAII,cAAeC,EAAQ,EAAGC,GAE9D,OAAON,GAAOO,EAAiBP,EAAII,cAAgB,EAAIJ,EAAII,cAUvCI,CAAexC,UAAc,WACjB,GAAM,IAAMV,IACvC,IAAOC,OAAM,oCAAoCS,EAAU,eAAe+B,EAAW,aAAaH,EAAQ,gBAAgBxC,EAAI,cAActB,I,OAGjJ,SAJgC,SAApB,cAOD2E,EAAuB,qD,kDACF,SAAM,IAAMnD,IAAO,IAAOC,OAAM,wB,OAEhE,SAFgC,SAApB,e,kDC7BC,IANkE,CAC/EmD,IAAK,CAAEL,MAAO,EAAGC,IAAK,GACtBK,IAAK,CAAEN,MAAO,GAAIC,IAAK,IACvBH,QAAS,CAAEE,MAAO,EAAGC,IAAK,K,gCCH5B,WAuBe,IAdE,SAAC,G,IAChBM,EAAK,QACLC,EAAS,YACTC,EAAU,aACV5G,EAAS,YACU,OACnB,uBAAKA,UAAWA,EAAW6G,cAAaD,GACrCF,GACC,6BAAQA,GAEV,uBAAKI,UAAWH,O,svBCmDL,G,qBAhDA,SAAC,G,IACd,IAAAzD,YAAI,IAAG,WAAQ,EACf,IAAA6D,aAAK,IAAG,YAAS,EACjBC,EAAI,OACJC,EAAI,OACJC,EAAS,YACT,IAAAC,gBAAQ,IAAG,GAAK,EAChB,IAAAC,kBAAU,IAAG,GAAK,EAClB,IAAAC,gBAAQ,IAAG,GAAK,EAChB,IAAAC,iBAAS,IAAG,GAAK,EACjB,IAAAC,oBAAY,IAAG,GAAK,EACpBC,EAAW,cAELC,EAAc,6BAERV,EAAK,UACbC,GAAQ,qBAAmB,UAC3BC,GAAQ,oBAAkB,UAC1BI,GAAY,qBAAmB,UAC/BC,GAAa,sBAAoB,UACjCF,GAAc,oBAAkB,UAChCD,GAAY,oBAAkB,UAC9BI,GAAgB,sBAAoB,OAGxC,OACE,0BACErE,KAAMA,EACNwE,QAASF,EACTL,SAAUA,EACVQ,aAAYT,EACZlH,UAAWyH,GAEVR,GACC,uBAAKjH,UAAU,gBACb,gBAAC4H,EAAA,EAAaX,IAIjBD,GACC,uBAAKhH,UAAU,iBACZgH,M,kDCaIa,G,OApEI,SAAC,G,IAClBjB,EAAU,aACVkB,EAAQ,WACR/H,EAAQ,WACR,IAAAgI,kBAAU,IAAG,SAAM,EACnBC,EAAK,QACL,IAAAC,iBAAS,IAAG,SAAM,EAClBC,EAAU,aACVC,EAAS,YACTC,EAAS,YAEHC,EAAO,cACPC,EAAU,CACdD,EACGA,EAAI,WAAWN,GAkBpB,OAhBIG,GACFI,EAAQC,KAAQF,EAAI,cAElBL,GACFM,EAAQC,KAAQF,EAAI,KAAKJ,GAEtBD,GACHM,EAAQC,KAAQF,EAAI,cAElBF,GACFG,EAAQC,KAAQF,EAAI,aAElBD,GACFE,EAAQC,KAAQF,EAAI,cAIpB,uBAAKrI,UAAWsI,EAAQE,KAAK,KAAM3B,cAAaD,GAC9C,uBAAK5G,UAAcqI,EAAI,UACrB,uBAAKrI,UAAcqI,EAAI,aACrB,gBAACI,EAAA,EAAD,KACE,uBAAKzI,UAAcqI,EAAI,wBACpBP,EACC,qBAAGY,KAAMZ,EAASlD,KAChB,gBAACgD,EAAA,EAAD,CAAUf,cAAY,OAAOH,MAAM,YAAYC,UAAU,qBACxDmB,aAAQ,EAARA,EAAUpB,OAEX,8BAGN,uBAAK1G,UAAcqI,EAAI,mBACpBtI,OAMPoI,GACA,uBAAKnI,UAAcqI,EAAI,UACpBL,GACC,uBAAKhI,UAAcqI,EAAI,qBACrB,uBAAKrI,UAAcqI,EAAI,WACrB,gBAACM,EAAA,QAAD,CAAaX,MAAOA,EAAOY,QAAQ,QAAQC,eAAa,EAACC,YAAY,c,kTCetE,EAjEa,SAAC,G,IAC3Bd,EAAK,QACLc,EAAW,cACXC,EAAiB,oBACjBC,EAAuB,0BACvBC,EAAU,aACVC,EAAQ,WACR,IAAAC,gCAAwB,IAAG,GAAK,EAChC,IAAAjB,kBAAU,IAAG,GAAK,EAEZ,IAA8B,mBAAwB,MAAK,GAA1DkB,EAAU,KAAEC,EAAa,KAsChC,OARA,qBAAU,WACR,GAAIrB,EAAMoB,YAAcpB,EAAMsB,KAAKC,QAAS,CAC1C,IAAMC,EAAexB,EAAMoB,WAAWK,EAAIzB,EAAMsB,KAAKC,QAAQvB,MAAM0B,MAAS,IACtEC,EAAe3B,EAAMoB,WAAWQ,EAAI5B,EAAMsB,KAAKC,QAAQvB,MAAM6B,OAAU,IAC7ER,EAAiBG,EAAW,KAAKG,EAAW,QAE7C,CAAC3B,IAGF,gBAAC8B,EAAA,QAAD,CACElF,IAAKoD,EAAMsB,KAAK1E,IAChBmF,IAAK/B,EAAMtB,MACX0C,WAAYA,EACZN,YAAaA,EACbG,WAAYA,EACZF,kBAAmBA,EACnBC,wBAAyBA,EACzBE,SAAUA,EACVC,yBAA0BA,EAC1BjB,WAAYA,EACZ8B,OAzCiB,WACnB,IAAKhC,EAAMoB,WAAY,MAAO,SAC9B,IAAKpB,EAAMsB,OAAStB,EAAMsB,KAAKC,QAAS,MAAO,SAE/C,IAAMC,EAAexB,EAAMoB,WAAWK,EAAIzB,EAAMsB,KAAKC,QAAQvB,MAAM0B,MAAS,IAGtEO,EAAYT,EAAc,GAAK,OAASA,EAAc,GAAK,QAAU,SAErEU,EAJelC,EAAMoB,WAAWQ,EAAI5B,EAAMsB,KAAKC,QAAQvB,MAAM6B,OAAU,IAI7C,GAAK,MAAQL,EAAc,GAAK,SAAW,SAE3E,MAAkB,WAAdS,EACKC,EAES,WAAdA,EACKD,EAGCC,EAAS,IAAID,EAuBbE,M,QCTC,G,OA9DF,SAAC,G,IACZzD,EAAK,QACL9B,EAAG,MACH,IAAAwF,kBAAU,IAAG,GAAK,EAClB,IAAAC,gBAAQ,IAAG,GAAK,EAChBpD,EAAI,OACJqD,EAAS,YACT,IAAAtK,iBAAS,IAAG,KAAE,EACdkH,EAAS,YACT,IAAAqD,kBAAU,IAAG,cAAW,EACxB,IAAAC,oBAAY,IAAG,UAAO,EAOhBlC,EAAU,CADH,OACUtI,GAsBvB,OApBIiH,GAAQqD,IACVhC,EAAQC,KAAQF,kBAGdgC,GACF/B,EAAQC,KAAK,UAXL,OAAR3D,GADuB,KACPA,GAehB0D,EAAQC,KAAQF,kBAGdkC,GACFjC,EAAQC,KAAKgC,GAGXC,GACFlC,EAAQC,KAAQF,SAASmC,GAIzB,qBACExK,UAAWsI,EAAQE,KAAK,KACxBiC,OAAQL,EAAa,SAAW,QAChC1B,KAAM9D,EACN8F,IAAI,aACJ/C,aAAYT,GAEXD,GACC,uBAAKjH,UAAU,cACb,gBAAC4H,EAAA,EAAaX,IAGlB,4BAAOP,GACN4D,GACC,uBAAKtK,UAAU,gCACb,gBAAC4H,EAAA,EAAa0C,O,iBCtDlBK,G,OAAUC,SAASC,MA+DV,EApDC,SAAC,G,IACf9K,EAAQ,WACR+K,EAAW,cACX/D,EAAK,QACLnF,EAAE,KACFmJ,EAAgB,mBAChBC,EAAa,gBAEPC,EAAe,WACnBN,EAAQO,UAAUC,OAAO,IAAY7K,kBAEjCyK,EACFD,IAGFM,YAAW,WACTN,MACC,MAGCO,EAAc,SAACC,GACG,KAAlBA,EAAMC,SACRN,KAeJ,OAXA,qBAAU,WAQR,OAPAN,EAAQO,UAAUM,IAAI,IAAYlL,kBAKlCmL,OAAOC,iBAAiB,QAASL,GAE1B,WAAM,OAAAI,OAAOE,oBAAoB,QAA3B,MACZ,IAGD,uBAAK3L,UAAW,YAAW+G,GAAS,YAAYA,GAAWnF,GAAIA,GAAM,IACnE,uBAAK5B,UAAWgL,EAAgB,GAAK,aACnC,0BAAQhL,UAAU,iBAAiB0H,QAAS,WAAM,OAAAuD,MAChD,wBAAMjL,UAAU,mBAAkB,SAClC,gBAAC4H,EAAA,EAAD,CAAUlB,MAAM,aAAaC,UAAU,iBAEzC,uBAAK3G,UAAU,oBACZD,M,wBCXI,G,2BApCD,SAAC,G,IACb6L,EAAK,QACL5E,EAAI,OACJlD,EAAU,aAEJ+H,EAAOD,EAAM,GACbf,EAAOe,EAAME,MAAM,GAEzB,OACE,uBAAK9L,UAAW,UAAS8D,EAAa,UAAUA,EAAe,KAC7D,uBAAK9D,UAAU,iBACZgH,GACC,uBAAKhH,UAAU,mCAAmCgH,GAGpD,uBAAKhH,UAAU,gBAAgB6L,EAAKE,OACpC,uBAAK/L,UAAU,mCAAmC6L,EAAKG,OAEtDhF,GACC,uBAAKhH,UAAU,oCAAoCgH,IAGvD,sBAAIhH,UAAU,eACX6K,EAAKpJ,KAAI,SAACwK,GAAe,OACxB,gBAAC,WAAD,CAAgBC,IAAKD,EAAKF,OACxB,sBAAI/L,UAAU,eACZ,uBAAKA,UAAU,gBAAgBiM,EAAKF,OACpC,uBAAK/L,UAAU,gBAAgBiM,EAAKD,gB,uDCnBlD,sGAAO,IAAMG,EAA2B,CACtCC,IAAK,MACL/I,OAAWgJ,YAAYC,QAAU,MACjCC,OAAQF,YAAYC,QACpBE,aAAoC,OACpCC,cAAeJ,YAAYI,eAShBC,EAAqC,CAChD,CACER,IAAK,EACLtK,GAAI,WACJ+K,SAAU,gDACVC,YAAY,GAEd,CACEV,IAAK,EACLtK,GAAI,UACJ+K,SAAU,wCACVC,YAAY,GAEd,CACEV,IAAK,EACLtK,GAAI,WACJ+K,SAAU,wBACVC,YAAY,GAEd,CACEV,IAAK,EACLtK,GAAI,WACJ+K,SAAU,KACVC,YAAY,IAIHC,EAA6B,CACxCC,aAAc,WACdC,2BAA4B,GAC5BC,iBAAkB,uB,kEC/CdC,EAAuB,IAAI,WAC/B9L,OAAO+L,OCrBM,CACb,qBAAsB,qBACtB,0BAA2B,0BAC3B,kBAAmB,kBACnB,0BAA2B,0BAC3B,uBAAwB,uBACxB,mCAAoC,mCACpC,+BAAgC,+BAChC,uBAAwB,uBACxB,yBAA0B,yBAC1B,yBAA0B,yBAC1B,2BAA4B,2BAC5B,yBAA0B,yBAC1B,2BAA4B,2BAC5B,+BAAgC,+BAChC,+BAAgC,+BAChC,uBAAwB,uBACxB,yBAA0B,yBAC1B,qBAAsB,qBACtB,4BAA6B,4BAC7B,6BAA8B,6BAC9B,yBAA0B,yBAC1B,0BAA2B,0BAC3B,0BAA2B,0BAC3B,2BAA4B,2BAC5B,yBAA0B,yBAC1B,uBAAwB,uBACxB,sBAAuB,sBACvB,qBAAsB,qBACtB,yBAA0B,yBAC1B,4BAA6B,4BAC7B,2BAA4B,2BAC5B,6BAA8B,6BAC9B,yBAA0B,yBAC1B,kCAAmC,kCACnC,+BAAgC,+BAChC,4BAA6B,4BAC7B,gCAAiC,gCACjC,kCAAmC,kCACnC,gCAAiC,gCACjC,mCAAoC,mCACpC,sCAAuC,sCACvC,4CAA6C,4CAC7C,wBAAyB,wBACzB,6BAA8B,6BAC9B,yBAA0B,yBAC1B,2BAA4B,2BAC5B,uBAAwB,uBACxB,sBAAuB,sBACvB,0BAA2B,0BAC3B,iBAAkB,iBAClB,iBAAkB,iBAClB,iBAAkB,iBAClB,iBAAkB,iBAClB,iBAAkB,iBAClB,iBAAkB,iBAClB,iBAAkB,iBAClB,iBAAkB,iBAClB,iBAAkB,iBAClB,iBAAkB,iBAClB,iBAAkB,iBAClB,iBAAkB,iBAClB,iBAAkB,iBAClB,qBAAsB,qBACtB,kBAAmB,kBACnB,sBAAuB,sBACvB,wBAAyB,wBACzB,0BAA2B,0BAC3B,0BAA2B,0BAC3B,2BAA4B,2BAC5B,0BAA2B,0BAC3B,sBAAuB,sBACvB,oBAAqB,oBACrB,sBAAuB,sBACvB,oBAAqB,oBACrB,qBAAsB,qBACtB,kBAAmB,kBACnB,0BAA2B,0BAC3B,wBAAyB,wBACzB,4BAA6B,4BAC7B,gCAAiC,gCACjC,sCAAuC,sCACvC,6BAA8B,6BAC9B,+BAAgC,+BAChC,cAAe,cACf,qBAAsB,qBACtB,6BAA8B,6BAC9B,qBAAsB,qBACtB,gBAAiB,gBACjB,eAAgB,eAChB,cAAe,cACf,cAAe,cACf,gBAAiB,gBACjB,kBAAmB,kBACnB,kBAAmB,kBACnB,sBAAuB,sBACvB,4BAA6B,4BAC7B,yBAA0B,yBAC1B,2BAA4B,2BAC5B,iCAAkC,iCAClC,gCAAiC,gCACjC,uCAAwC,uCACxC,oCAAqC,oCACrC,+BAAgC,+BAChC,uCAAwC,uCACxC,yCAA0C,yCAC1C,0BAA2B,0BAC3B,oCAAqC,oCACrC,mCAAoC,oCDvFAf,EAAA,EAAOM,gBAGvCU,EAAsB,wBAC1B,CACEC,OAAQxC,SAASyC,gBAAgBC,KACjCC,aAAcN,EAAqBO,SAASxB,QAIjC,O,gCE/Bf,kBAYe,IAJH,SAAC,G,IAAEhF,EAAI,OAAEpC,EAAG,MAAiB,OACvC,qBAAG5E,UAAU,MAAM0I,KAAM9D,EAAK8B,MAAOM,GAAOA,K,gCCT9C,0BAcMyG,GAdN,kBAcuC,IAAYC,IAG7CC,EAAiB,CACrB,MAAO,GACP,OAAQ,MACR,MAAO,KACP,MAAO,IACP,MAAO,EACP,MAAO,IACP,MAAO,IACP,MAAO,IACP,YAAa,MAiFA,UA/DD,SAAC,G,IACb/I,EAAG,MACHmF,EAAG,MACH,IAAAjB,mBAAW,IAAG,EAlCW,OAkCO,EAChCC,EAAiB,oBACjB,IAAAC,+BAAuB,IAAG,EAAAyE,EAA8B,EACxD,IAAAzD,cAAM,IAAG,OAAA4D,EAAS,EAClB,IAAA3E,kBAAU,IAAG,GAxCM,QAwCQ,EAC3B,IAAA4E,uBAAe,IAAG,EAxCW,KAwCW,EACxC3E,EAAQ,WACR,IAAAC,gCAAwB,IAAG,GAAK,EAChCC,EAAU,aACV,IAAAlB,kBAAU,IAAG,GAAK,EAOlB,OACE,2BACElI,UACE,qBAAoB8I,EAAc,qBAAqBA,EAAgB,IAAE,cACvEC,EAAoB,4BAA4BA,EAAsB,IAAE,cACxEI,EAA2B,gCAAkC,KAGhEJ,GACC,0BACE+E,MAAO,eAAe9E,EAAuB,OAC7C+E,aAAW,OACXC,cACE/E,EAAWxH,KAAI,SAACwM,GAAc,OAEzBrJ,wBAAqCoF,GAAU,IAAE,qBAAqBiE,EAAS,MAAMC,KAAKC,KAAKC,SAASH,EAAW,IAAMN,EAAe5E,IAAmB,IAAIkF,EAFtI,SAQpC,uBACEI,OAAQ,WACFnF,GACFA,KAGJ6E,aAAW,OACXhH,MAAO,CAAEuH,eAAgBlF,GAAc,WAEvCmF,WAAa3J,EAAG,gBAAgBiJ,EAAe,OAAM7D,GAAU,IAAE,MAAMkE,KAAKC,KAAKC,SAASP,EAAiB,IAAMF,EAlChH5E,GACE0C,OAAO+C,WAAaxF,EAA0BD,EADtBD,IAmC3BkF,cACE/E,EAAWxH,KAAI,SAACwM,GAAc,OAEzBrJ,wBAAqCoF,GAAU,IAAE,qBAAqBiE,EAAS,MAAMC,KAAKC,KAAKC,SAASH,EAAW,IAAMN,EAAe7E,IAAa,IAAImF,EAFhI,OAKhCjO,UAAW,sBAAqBkI,EAAa,cAAgB,IAC7D6B,IAAKA,GAAO,iC,iWC9Fd0E,EAAgB,CAAC,MAAO,MAAO,OAAQ,OAAQ,QAE/Cd,EAAyC,CAC7C,MAAO,GACP,OAAQ,MACR,MAAO,KACP,MAAO,IACP,MAAO,EACP,MAAO,IACP,MAAO,KAyEM,UAvDK,SAAC,G,IACnB3F,EAAK,QACL,IAAAiB,kBAAU,IAAG,EAAAwF,EAAa,EAC1B3F,EAAW,cACX,IAAAZ,kBAAU,IAAG,GAAK,EAClB,IAAAW,qBAAa,IAAG,GAAI,EACpB,IAAAD,eAAO,IAAG,UAAO,EACjBM,EAAQ,WACRwF,EAAS,YAEH,IAA8B,qBAAsB,GAAnDtF,EAAU,KAAEC,EAAa,KAC1B,IAAsB,qBAAkB,GAAvCsF,EAAM,KAAEC,EAAS,KAExB,qBAAU,W,YACR,GAAI5G,EAAMoB,WAAY,CAEpB,IAAMI,EAAexB,EAAMoB,WAAWK,GAA6B,QAAzB,EAAkB,QAAlB,EAAAzB,EAAMsB,KAAKC,eAAO,eAAEvB,aAAK,eAAE0B,OAAS,IAExEC,EAAe3B,EAAMoB,WAAWQ,GAA6B,QAAzB,EAAkB,QAAlB,EAAA5B,EAAMsB,KAAKC,eAAO,eAAEvB,aAAK,eAAE6B,QAAU,IAC/ER,EAAc,CACZiF,eAAmB9E,EAAW,KAAKG,EAAW,MAIlD,IAAMkF,EAAM5F,EACTxH,KAAI,SAACqN,EAAcC,GAAkB,OAAG/G,EAAMsB,KAAK1E,IAAG,+BAA+BkK,EAAI,OAAMhG,EAAcoF,KAAKC,KAAKa,OAAO/F,EAAW8F,IAAUpB,EAAe7E,IAAgB,IAAE,IAAIgG,EAAnJ,OAExCF,EAAUC,EAAIrG,KAAK,QAClB,CAACR,IAEJ,IAAMM,EAAU,CACd,eACA,iBAAiBM,EACjB,YASF,OAPIV,GACFI,EAAQC,KAAK,eAEXmG,GACFpG,EAAQC,KAAK,4BAIb,uBACE8F,OAAQ,WAAM,OAAAnF,aAAQ,EAARA,KACd6E,aAAW,OACXC,cAAaW,EACbJ,WAAavG,EAAMsB,KAAK1E,IAAG,+BAA+BqE,EAAW,GAAE,OAAMH,EAAcoF,KAAKC,KAAKa,OAAO/F,EAAW,IAAM0E,EAAe7E,IAAgB,IAC5J9I,UAAWsI,EAAQE,KAAK,KACxBuB,IAAK/B,EAAMtB,MAAQsB,EAAMtB,MAAQ,4BACjCK,MAAO8B,EAAgBO,OAAawE,M,gCCpF1C,kBAyBe,IAfQ,SAAC,G,IACtBlH,EAAK,QACLuI,EAAc,iBACdjP,EAAS,YACTkP,EAAgB,mBACS,OACzB,sBAAIlP,UAAW,0CACsBiP,EAAc,SAC/CjP,EAAS,KAAIkP,EAAmB,qCAAuC,IAAE,QAG1ExI,K,iCCrBL,sCAQMyI,EAAY,SAACC,GACjB,IAAMC,EAAID,EAAS,GAEnB,OAAMA,EAAS,IAAO,IAAQ,EAClBA,EAAM,KAER,IAANC,EACQD,EAAM,KAER,IAANC,EACQD,EAAM,KAER,IAANC,EACQD,EAAM,KAGRA,EAAM,O,gCCxBlB,qEA2He,IApGC,SAAC,G,IACf1I,EAAK,QACL4I,EAAK,QACL9M,EAAO,UACP+M,EAAO,UACPC,EAAI,OACJC,EAAa,gBACbC,EAAS,YACT,IAAAT,sBAAc,IAAG,UAAO,EACxBU,EAAe,kBACfT,EAAgB,mBAIhB,OAFA,cAGE,uBAAKlP,UAAW,oBAAoBiP,EAAc,KAAIU,EAAkB,oBAAsB,KAC3FC,QAAQlJ,GAASlE,IAChB,uBAAKxC,UAAU,mBACZ0G,GACC,gBAAC,IAAD,CACEA,MAAOA,EACPuI,eAAgBA,EAChBC,iBAAkBA,IAIpB1M,IAAY,kBAAQA,IACpB,gBAAC,IAAD,CAASA,QAASA,EAASyM,eAAgBA,MAK/CvI,GACA,gCACG4I,KAAW9M,GAAW,kBAAQA,MAAekE,EAE1C,sBAAI1G,UAAU,kBAAkBsP,GADhC,sBAAItP,UAAU,kBAAkBsP,KAIxC,uBAAKtP,UAAU,iBACZ0G,GACC,gCACG4I,IAAU9M,IAAY,kBAAQA,MAAckE,EACzC,sBAAI1G,UAAU,kBAAkBsP,GAChC,sBAAItP,UAAU,kBAAkBsP,KAIvCC,GACC,gBAAC,IAAD,CAAUA,QAASA,EAASN,eAAgBA,IAG7CS,GACC,sBAAI1P,UAAU,qBACX0P,EAAUjO,KAAI,SAACoO,GAAa,OAC3B,sBAAI3D,IAAK2D,EAASjL,IAAK5E,UAAU,0BAC/B,qBACEA,UAAW,2BAA0B6P,EAASX,iBAAmB,oBAAsB,IACvFxG,KAAMmH,EAASjL,IACf6F,OAAO,SACPC,IAAI,uBACJ/C,aAAY,kBAAkBkI,EAASnJ,OAEtCmJ,EAASnJ,MACV,gBAAC,IAAD,CAAUC,UAAU,iBAAiBC,YAAU,UAOxD4I,GAEC,qBACExP,UAAU,gBACV0I,KAAM8G,EAAK5K,IACX6F,OAAQ+E,EAAKpF,WAAa,SAAW,QACrCM,IAAK8E,EAAKpF,WAAa,sBAAwB,IAE9CoF,EAAK9I,MACN,gBAAC,IAAD,CAAUA,MAAO8I,EAAKpF,WAAa,gBAAkB,GAAIzD,UAAU,sBAGtE8I,GAEC,qBACEzP,UAAU,gBACV0I,KAAM+G,EAAc7K,IACpB6F,OAAQgF,EAAcrF,WAAa,SAAW,QAC9CM,IAAK+E,EAAcrF,WAAa,sBAAwB,IAEvDqF,EAAc/I,MACf,gBAAC,IAAD,CAAUA,MAAO+I,EAAcrF,WAAa,gBAAkB,GAAIzD,UAAU,0B,gCCnHxF,kCA+Ge,IAnGC,SAAC,G,IACfnE,EAAO,UACPyM,EAAc,iBAEN1B,EAAiB,qBAAW,KAAhB,aAGduC,EAAa,SAACC,GAAgC,OAAAA,EACjDC,MAAM,KACNxH,KAAK,IACLwH,MAAM,IACNxH,KAAK,KACLyH,QAAQ,QALyC,QAOpD,OACE,uBAAKjQ,UAAW,oBAAoBiP,GAClC,sBAAIjP,UAAU,kBACXuN,EAAa/K,QAAQkE,OAGxB,sBAAI1G,UAAU,iBACVwC,EAAQ0N,MAAQ1N,EAAQ0N,KAAK5O,QAC7B,sBAAItB,UAAU,iBACZ,wBAAMA,UAAU,kBACVuN,EAAa/K,QAAQ0N,KAAI,KAE9B1N,EAAQ0N,MAGX1N,EAAQ2N,KAAO3N,EAAQ2N,IAAI7O,QAC3B,sBAAItB,UAAU,iBACZ,wBAAMA,UAAU,kBACVuN,EAAa/K,QAAQ2N,IAAG,KAE9B,qBAAGnQ,UAAU,gBAAgB0I,KAAM,OAAOlG,EAAQ2N,IAAOxI,aAAYmI,EAAWtN,EAAQ2N,MACrF3N,EAAQ2N,MAIb3N,EAAQ4N,KAAO5N,EAAQ4N,IAAI9O,QAC3B,sBAAItB,UAAU,iBACZ,wBAAMA,UAAU,kBACVuN,EAAa/K,QAAQ4N,IAAG,KAE9B,qBAAGpQ,UAAU,gBAAgB0I,KAAM,OAAOlG,EAAQ4N,IAAOzI,aAAYmI,EAAWtN,EAAQ4N,MACrF5N,EAAQ4N,MAIb5N,EAAQkB,OAASlB,EAAQkB,MAAMpC,QAC/B,sBAAItB,UAAU,iBACZ,wBAAMA,UAAU,kBACVuN,EAAa/K,QAAQkB,MAAK,KAEhC,qBAAG1D,UAAU,gBAAgB0I,KAAM,UAAUlG,EAAQkB,OAClDlB,EAAQkB,QAIblB,EAAQ6N,SAAW7N,EAAQ6N,QAAQ/O,QACnC,sBAAItB,UAAU,iBACZ,wBAAMA,UAAU,kBACVuN,EAAa/K,QAAQ6N,QAAO,KAElC,qBAAGrQ,UAAU,gBAAgB0I,KAAMlG,EAAQ6N,QAAS5F,OAAO,SAASC,IAAI,cACrElI,EAAQ6N,UAIf,sBAAIrQ,UAAU,iBACZ,sBAAIA,UAAU,mBACVwC,EAAQ8N,UAAY9N,EAAQ8N,SAAShP,QACrC,sBAAItB,UAAU,wBACZ,qBAAGA,UAAU,uBAAuByK,OAAO,SAASC,IAAI,aAAahC,KAAMlG,EAAQ8N,UACjF,gBAAC,IAAD,CAAU5J,MAAM,WAAWC,UAAU,qBAIzCnE,EAAQ+N,WAAa/N,EAAQ+N,UAAUjP,QACvC,sBAAItB,UAAU,wBACZ,qBAAGA,UAAU,uBAAuByK,OAAO,SAASC,IAAI,aAAahC,KAAMlG,EAAQ+N,WACjF,gBAAC,IAAD,CAAU7J,MAAM,YAAYC,UAAU,sBAI1CnE,EAAQgO,SAAWhO,EAAQgO,QAAQlP,QACnC,sBAAItB,UAAU,wBACZ,qBAAGA,UAAU,uBAAuByK,OAAO,SAASC,IAAI,aAAahC,KAAMlG,EAAQgO,SACjF,gBAAC,IAAD,CAAU9J,MAAM,UAAUC,UAAU,0B,gCCpGtD,kBAsBe,IAdE,SAAC,G,IAChB4I,EAAO,UACPN,EAAc,iBACK,OACnB,uBAAKjP,UAAW,wBAAwBiP,GACtC,uBACEjP,UAAU,qBACVyQ,wBAAyB,CACvBC,OAAQnB,Q,unECmJD,IAtHM,SAAfoB,EAAgB,G,IACpBjK,EAAK,QACL1B,EAAO,UACP4L,EAAO,UACPC,EAAM,SACNC,EAAY,eACZC,EAAM,SAEA,IAA4B,qBAAoBD,GAAa,GAA5DE,EAAS,KAAEC,EAAY,KACxB,IAA0B,qBAAkB,GAA3CC,EAAQ,KAAEC,EAAW,KACtB,IAA8B,mBAAS,CAC3CzK,MAAK,EACL1B,QAAO,EACP4L,QAAO,EACPC,OAAM,IACN,GALKO,EAAU,KAAEC,EAAa,KAkEhC,OAVA,qBAAU,WACJP,IACEA,EAAaQ,cACfR,EAAaQ,eAtBE,mC,0DAEJ,O,sBAAA,GAAM,IAAI7O,SAAS6B,UAAU,CACxCC,UAAWuM,aAAY,EAAZA,EAAcvM,UACzBP,SAAU8M,aAAY,EAAZA,EAAc9M,SACxBS,UAAUqM,aAAY,EAAZA,EAAcrM,gBAAsBmJ,EAC9CpJ,eAAgBsM,aAAY,EAAZA,EAActM,kB,cAJ1B+M,EAAO,SAObF,EAAc,EAAD,KACRD,GACAG,IAELN,GAAa,G,+BAEbE,EAAY,G,8BAUGK,KAAKV,EAAazC,WAElC,IAGD,yBAAKrO,UAAW,kBAAiB+Q,EAAS,wBAA0B,KACjEK,EAAW1K,OACV,wBAAI1G,UAAU,wBAAwBoR,EAAW1K,OAGlD0K,EAAWP,QACV,oCACE,kBAAC,IAAD,CAAQA,OAAQO,EAAWP,OAAOA,OAAQ/M,WAAYsN,EAAWP,OAAO/M,aAExE,yBAAK9D,UAAU,8BAIlBkR,GACC,yBAAKlR,UAAU,4BACb,4BAAKkR,IAIRF,GACC,yBAAKhR,UAAU,yBACb,kBAAC,IAAD,QAIFgR,GACA,kBAAC,IAAD,CACEhM,QAASoM,EAAWpM,QACpByM,KAAML,EAAWR,QAAQnP,KAxFlB,SAACiQ,GAEd,IAAIC,EAAiBD,EAUrB,MAT0C,QAAtCC,EAAeC,OAAOC,aAA+D,QAAtCF,EAAeC,OAAOC,cACvEF,EAAiB,EAAH,KACTD,GAAM,CACTE,OAAQ,EAAF,KACDF,EAAOE,QAAM,CAChBC,YAAa,WAIZ,GACLC,IAAKH,EAAeC,QACfD,EAAeI,OACf,CAAEC,MAAO,kBAACrB,EAAD,GAAcI,QAAM,GAAKY,EAAeI,UAAgB,OA4ElEE,UAAWb,EAAWR,QAAQnP,KAxEjB,SAACiQ,EAAiB3C,GACrC,MAA0B,SAAtB2C,EAAOQ,WAjDO,SAAC,EAAqBnD,G,IAAnB6C,EAAM,SAA+B,OAC5D,yBAAK5R,UAAW,8BAA6B+O,GAAS,GAAK,mCAAqC,KAC9F,yBACE/O,UAAU,8BACV2H,aAAYiK,EAAOO,KAAU,YAAUP,EAAOO,MAAK,YAAc,IAEhEP,EAAOO,MAEV,yBAAKnS,UAAU,8BAA8B4R,EAAOQ,OA0C3CC,CAAcX,EAAQ3C,GAEL,UAAtB2C,EAAOQ,WA5EQ,SAAC,EAAqBnD,G,IAAnB6C,EAAM,SAA+B,OAC7D,yBAAK5R,WAAW,6CAEV+O,GAAS,GAAK,mCAAqC,IAAE,UACvDuD,QAEDV,EAAOO,MACN,yBACEnS,UAAU,8BACV2H,aAAYiK,EAAOO,KAAU,YAAUP,EAAOO,MAAK,YAAc,IAEhEP,EAAOO,MAGZ,yBAAKnS,UAAU,6BACb,yBAAKA,UAAU,gCAAgC4R,EAAOW,WACtD,yBAAKvS,UAAU,+BAA+B4R,EAAOY,UACpDZ,EAAOQ,MACN,yBAAKpS,UAAU,2BAA2B4R,EAAOQ,QA2D5CK,CAAef,EAAQ3C,GAGzB,iCAiED/O,UAAU,uBACV0S,cAAc,4BACd3B,OAAQA,Q,kDC5JlB,0BAsDe,IAjDA,SAAC,G,IACdF,EAAM,SACN/M,EAAU,aACO,OACjB,uBAAK9D,UAAW,kBAAkB8D,GAChC,sBAAI9D,UAAU,gBACX6Q,EAAOpP,KAAI,SAAC,EAMVsN,G,IALDwD,EAAS,YACTC,EAAQ,WACRJ,EAAI,OACJO,EAAI,OACJR,EAAI,OAIES,EAAWT,UAAQpD,EAAQ,EAEjC,OACE,sBACE7C,IAAQqG,EAAS,IAAIC,EACrBxS,UAAW,iBAA6B,IAAb4S,EAAiB,sBAAwB,KAEpE,uBAAK5S,UAAU,yBACC,IAAb4S,GACC,gBAAC,IAAD,CAAUlM,MAAM,cAAcC,UAAU,cAEzCiM,EAAW,GAAKA,GAEnB,uBAAK5S,UAAU,wBACb,uBAAKA,UAAU,0BACZuS,GAEH,uBAAKvS,UAAU,yBACZwS,GAEH,uBAAKxS,UAAU,qBACZoS,GAEH,uBAAKpS,UAAU,qBACZ2S,Y,kGC5CjB,WAYe,IAVI,WAOjB,OANA,qBAAU,WACJlH,OAAOoH,eACTpH,OAAOoH,kBAER,IAEIpH,OAAOoH,gB,weCIVC,EAAiB,SAAC5G,EAAaF,EAAe+G,GAElD,GAAIC,QAAQC,UAAW,CACrB,IAAMC,EAAe,IAAIC,gBAAgB1H,OAAO2H,SAAS5N,QACzD0N,EAAaG,IAAInH,EAAKF,GACtB,IAAIsH,EAAY7H,OAAO2H,SAASG,SAAQ,KAAK9H,OAAO2H,SAASI,KAAO/H,OAAO2H,SAASK,SAAQ,IAAIP,EAAaQ,WACzGX,GAAetH,OAAO2H,SAASO,OACjCL,EAAS,GAAGA,EAAS7H,OAAO2H,SAASO,MAEvClI,OAAOuH,QAAQC,UAAU,CAAEW,KAAMN,GAAU,GAAIA,KAuB7CO,EAAmB,SAAC3H,GACxB,IAAM1G,EAASrE,OAAO2S,QAbA,SAACtO,GACvB,IAAMuO,EAASvO,EAAOsG,MAAMtG,EAAOwO,QAAQ,KAAO,GAAGhE,MAAM,KACrD1M,EAAoC,GAM1C,OALAyQ,EAAOtS,KAAI,SAACkS,GACJ,QAAaA,EAAK3D,MAAM,KAAI,GAA3B9D,EAAG,KAAE+H,EAAG,KAEf,OADA3Q,EAAO4I,GAAOgI,mBAAmBD,IAC1B,KAEF3Q,EAKuB6Q,CAAgB1I,OAAO2H,SAAS1K,OAAO0L,QAAO,SAACC,GAAU,OACrFA,EAAM,KAD+E,KAGvF,OAAO7O,EAAO,GAAKA,EAAO,GAAG,GAAK,MAK9B8O,EAAW,WAAM,MACrB,OAAOC,KAAKC,UADS,YAIjBC,EAAiB,SAACC,EAA6BC,GAjDjDlJ,OAAOmJ,sBAA0BhK,SADlB,cAoDf8J,EAAeD,eAAe,CAC5BI,SAAUF,KAKVG,EAAa,SAAC9M,GAAiB,OAElCA,EAAMsB,KAAKC,QAAQvB,MAAM6B,OAAS7B,EAAMsB,KAAKC,QAAQvB,MAFnB,Q,iCClErC,4CAgBM+M,GAhBN,OAgBgB,SAAC,G,IACfxQ,EAAS,YACTC,EAAc,iBACdR,EAAQ,WACR0C,EAAK,QACLjC,EAAQ,WACR6M,EAAY,eACZjD,EAAM,SACY,OAClB,yBAAKrO,UAAU,8BACb,kBAAC,IAAD,CACE0G,MAAOA,EACPoK,aAAc,CACZvM,UAAS,EACTP,SAAQ,EACRS,SAAQ,EACRD,eAAc,EAEd6J,OAAQA,GAAW,aACnBiD,aAAY,QAyDL,UApDU,SAAC,G,IACxB0D,EAAS,YACTlR,EAAU,aACVU,EAAc,iBAERyQ,EAAiB,SAAC3J,GAAiB,MAAC,CACxCS,MAAO,0BAAM/L,UAAU,8BAA8BsL,EAAM5E,OAC3D6I,QACE,kBAACwF,EAAD,CACExQ,UAAW+G,EAAM/G,UACjBC,eAAgBA,EAChBR,SAAUsH,EAAMtH,SAChBS,SAAU6G,EAAM5E,MAChBA,MAAO4E,EAAM5E,QAGjBwO,SAAS,IA4BX,OACE,yBAAKlV,UAAU,qBACb,yBAAKA,UAAU,gCACb,kBAAC,IAAD,CAAWmV,OAAQH,EAAUvT,KA5Bb,SAAhB2T,EAAiBrE,GACb,IAAAH,EAAYG,EAAL,QACf,GAAIH,GAA8B,IAAnBA,EAAQtP,OAAc,CACnC,IAAMgK,EAAQsF,EAAQ,GACtB,MAAO,CACL7E,MAAO,0BAAM/L,UAAU,8BAA8B+Q,EAAOhF,OAC5DwD,QACE,kBAACwF,EAAD,CACExQ,UAAW+G,EAAM/G,UACjBP,SAAUsH,EAAMtH,SAChBS,SAAUsM,EAAOhF,MACjBvH,eAAgBA,EAChBkC,MAAO4E,EAAM5E,QAGjBwO,SAAS,GAGb,MAAO,CACLnJ,MAAO,0BAAM/L,UAAU,8BAA8B+Q,EAAOhF,OAC5DwD,QAAUwB,EAAyBiE,UAC/B,kBAAC,IAAD,CAAWG,OAASpE,EAAyBiE,UAAUvT,IAAI2T,GAAgBC,WAAW,QAAQvR,WAAYA,IAC1G,kBAAC,IAAD,CAAWqR,OAASpE,EAAuBH,QAAQnP,IAAIwT,GAAiBI,WAAW,QAAQvR,WAAYA,QAMxDuR,WAAW,QAAQvR,WAAYA,EAAYwR,WAAS,Q,4nBCzE7G,yBAAe,KAAM,MA2SN,IAhRE,SAAC,G,IAChBC,EAAK,QACLC,EAAM,SACNC,EAAa,gBACb,IAAAxO,YAAI,IAAG,oBAAiB,EACxB,IAAAyO,aAAK,IAAG,YAAS,EACjB,IAAAC,mBAAW,IAAG,GAAK,EACnB,IAAAC,iBAAS,IAAG,GAAK,EACjBnS,EAAI,OACJ,IAAAoS,oBAAY,IAAG,GAAK,EACpB,IAAAC,sBAAc,IAAG,GAAK,EACtBC,EAAsB,yBACtBC,EAAY,eACZC,EAAY,eACZC,EAAgB,mBAEVC,EAAa,iBAAkC,MAC/C,IAAoB,qBAA0B,GAA7CnK,EAAK,KAAEoK,EAAQ,KAChB,IAAsB,oBAAkB,GAAM,GAA7CjW,EAAM,KAAEkW,EAAS,KAClB,IAAwB,qBAA4B,GAAnDC,EAAO,KAAEC,EAAU,KACpB,IAA4B,oBAAkB,GAAM,GAAnDC,EAAS,KAAEC,EAAY,KACxB,IAAgC,mBAAwB,MAAK,GAA5DC,EAAW,KAAEC,EAAc,KAC1BpJ,EAAiB,qBAAW,KAAhB,aAKdqJ,EAAQ,WACZH,GAAa,GACbrL,YAAW,WACTqL,GAAa,GACbJ,GAAU,GACNT,GACFe,EAAe,QAEhBf,EAAY,EAAI,MAOrB,YAAkBO,GAAY,WAC5BS,OAQF,IAqBMC,EAAe,WAAM,OAAAtB,EAAM9T,KAAI,SAACqV,EAAM/H,GAAU,cACjD+H,GAAI,CACPrT,KAAI,EACJgS,cAAeqB,EAAK9K,QAAUyJ,EAC9BsB,UAAWjB,GAAkBC,GAA0BhH,EAJH,SAYhDiI,EAAe,SAAC1L,EAAyB2L,GAC7C3L,EAAM4L,iBACNX,EAAWM,KACXT,EAASE,EAAUA,EAAQW,QAAerJ,GAC1CgJ,IAEIpB,GAA4B,mBAAXA,GACnBA,EAAOc,EAAUA,EAAQW,QAAerJ,IAO5C,qBAAU,WACR,GAAI2H,EAAMjU,OAAQ,CAChB,IAAM6V,EAAmBN,IACzBN,EAAWY,MAEZ,IAMH,qBAAU,WACR,GAAIb,EAAS,CACX,IAAMc,EAA2Bd,EAAQlC,QACvC,SAAC0C,GAAyB,OAAAA,EAAK9K,QAAL,KAC1B,GAEFoK,EAASgB,GAAYd,EAAQ,OAE9B,CAACA,EAASb,IAOb,qBAAU,WACR,GAAIa,EACF,GAAoB,OAAhBI,GAAwC,KAAhBA,EAC1BH,EAAWM,SACN,CACL,IAAMQ,EAAoCf,aAAO,EAAPA,EAAS7U,KAAI,SAAC6V,GAAW,cAC9DA,GAAM,CACTP,QAASO,EAAOC,YAAYC,cAAcC,SAASf,EAFc,oBAKnEH,EAAWc,MAGd,CAACX,EAAajB,EAAeF,IAQhC,IAAMmC,EAAe,SAACJ,EAAwBvI,GAAkB,OAC9D,sBAAI7C,IAAK,cAAUlM,UAAW,oBAAmBsX,EAAO7B,eAAiB,8BACvE,qBAAG/M,KAAK,IAAIiP,KAAK,SAASjQ,QAAS,SAAC4D,GAA4B,OAAA0L,EAAa1L,EAAb,KAC7DgM,EAAOC,eAURK,EAAe,WAAM,OACzB,uBAAK5X,UAAU,qBACb,yBACEkD,KAAK,OACL2U,YAAatK,EAAa9K,SAASqV,YACnC9L,MAAO0K,GAAe,GACtBqB,SAAU,SAACzM,GAA6B,OACtCqL,EAAgBrL,EAAM0M,cADgB,UAIzCpI,UAAS0G,aAAO,EAAPA,EAASlC,QAAO,SAACkD,GAAW,OAAAA,EAAA,WAAgBhW,UACpD,uBAAKtB,UAAU,yBACZ,0BAA0B0W,EAAW,OA2E9C,OACE,uBAEEuB,IAAK9B,EACLnW,UACE,cAAaG,GAAU,mBAAiB,cACtCqW,GAAa,sBAAoB,wBACtBd,GAGf,uBAAK1V,UAAW,qBAAoB6V,GAAgB,aACjD7J,GACC,2BACE,qBAAGtD,KAAK,IAAIhB,QAAS,SAAC4D,GAA4B,OA/M7C,SAACA,GAKd,OAJIA,GACFA,EAAM4L,iBAGJrB,EACK,KAGL1V,EACKyW,IAGFP,GAAWlW,GAkMwC+X,CAAA,KAC/ClM,EAAMuL,eAKf,uBAAKvX,UAAW,oBAAmB6V,GAAgB,cACjD,gBAAC,IAAD,CAAUnP,MAAM,SAASC,UAAW,IAAIM,KAnFxC0O,EAEA,uBAAK3V,UAAW,8BAA6B8V,EAAiB,mBAAqB,KAChFF,GAAagC,IACd,gBAAC,IAAD,KACE,gCACGtB,GACC,sBAAItW,UAAU,sBACXsW,aAAO,EAAPA,EAAS7U,KAAI,SAAC6V,EAAQpL,GAAQ,OAAAoL,EAAOP,SAAWW,EAAaJ,EAA/B,OAIlCxB,GAAkBC,GACjB,gBAAC,IAAD,CACEqB,SAAUrB,EACVgC,SAAU,SAACI,EAAY7M,GACrB,GAAI0K,EAAc,CAChB,IAAMoC,EAAY9B,aAAO,EAAPA,EAAS+B,WAAU,SAACf,GAIpC,OAHqB,IAAOA,EAAOtL,OAAOsM,OAAO,gBAC1B,IAAOH,GAAMG,OAAO,sBAK3B1K,IAAdwK,GAA2BA,GAAa,IAC1CpC,EAAamC,GAEbnB,EAAa1L,EAAO8M,MAI1BnC,aAAcA,EACdsC,QAAM,EACNnL,OAAQ8I,OAUpB,uBAAKlW,UAAU,sBACZ4V,GAAagC,IACbtB,GACC,sBAAItW,UAAU,sBACXsW,aAAO,EAAPA,EAAS7U,KAAI,SAAC6V,EAAQpL,GAAQ,OAAAoL,EAAOP,SAAWW,EAAaJ,EAA/B,OAIlCxB,GAAkBC,GACjB,gBAAC,IAAD,CACEqB,SAAUrB,EACVgC,SAAU/B,EACVC,aAAcA,EACdsC,QAAM,Q,gCCvRH,KACbC,IAAK,IACLC,GAAI,IACJC,GAAI,IACJhL,GAAI,IACJiL,GAAI,IACJC,GAAI,KACJC,GAAI,KACJC,IAAK,KACLC,KAAM,KACNC,MAAO,O,mkBCgKM,IAjJS,SAAC,G,IACvBhU,EAAO,UACPyM,EAAI,OACJQ,EAAS,YACTjS,EAAS,YACT0S,EAAa,gBACbuG,EAAe,kBACfC,EAAY,eACZC,EAAa,gBACbpI,EAAM,SAEA,IAA4B,oBAAkB,GAAM,GAAnDqI,EAAU,KAAEC,EAAW,KACxB,IAA4C,mBAAkC,IAAG,GAAhFC,EAAiB,KAAEC,EAAoB,KAmB9C,OANA,qBAAU,WACJ9H,EAAK+H,MAAK,SAAC1H,GAAQ,OAAAA,EAAA,UACrByH,EAAqBpY,OAAOsY,YAAYtY,OAAO2S,QAAQrC,EAAKhQ,KAAI,WAAM,iBAEvE,IAGD,yBAAKzB,UAAW,qBAAoB+Q,EAAS,2BAA6B,MACtEA,GACA,yBAAK/Q,UAAW0S,GAAiB,IAC/B,4BACE1S,UAAU,yBACV0Z,gBAAeN,EACf1R,QAxBgB,WACxB2R,GAAaD,KAyBL,iBAKN,yBAAKpZ,UAAW,gCAA+BA,GAAa,IAAE,KAAIoZ,EAAgBpZ,EAAS,SAAW,KACpG,2BACEA,UAAW,4BAA2BoZ,EAAa,gCAAkC,KAErF,+BACE,4BACGnH,GACC,wBAAIjS,UAAU,qDAGfgF,EAAQvD,KAAI,SAACkY,GAAW,OACvB,wBACEzN,IAAKyN,EAAOzN,IACZlM,WAAW,qEAEP2Z,EAAOC,cAAgB,mCAAqC,IAAE,sEAE9DD,EAAOE,eAAiB,wCAA0C,IAAE,0BACpEF,EAAOC,cAAgB,oCAAsC,IAAE,0BAC/DX,GAAmB,IAAE,wBACvB3G,OACFwH,MAAM,OAELH,EAAO5N,UAIX0F,EAAK+H,MAAK,SAAC1H,GAAQ,OAAAA,EAAA,UAClB,wBACE9R,UAAW,gFAA+EiZ,GAAmB,IAC7Ga,MAAM,OAEN,yBAAK9Z,UAAU,WACb,aAMV,+BACGyR,EAAKhQ,KAAI,SAAC,EAAgBsY,G,IAAdjI,EAAG,MAAEE,EAAK,QAAiB,OACtC,kBAAC,WAAD,CAAU9F,IAAK,OAAO6N,GACpB,wBACE/Z,WAAW,qEAEPgS,GAASsH,EAAkBS,GAAY,yCAA2C,IAAE,0BACpFb,GAAgB,IAAE,wBACpB5G,QAEDtN,EAAQvD,KAAI,SAACkY,EAAQK,GAAa,OACjC,kBAAC,IAAMC,SAAP,CAAgB/N,IAAK,OAAO6N,EAAQ,QAAQC,GACzC/H,GAA0B,IAAb+H,GACZ,wBAAIha,UAAW,8BAA8BmZ,EAAiBW,MAAM,OAAO7H,EAAU8H,IAEvF,wBACE/Z,WAAW,kFAEP2Z,EAAOC,cAAgB,oCAAsC,IAAE,gCAC/DD,EAAOE,eAAiB,wCAA0C,IAAE,gCACpEV,GAAiB,IAAE,8BACrB7G,QAEDR,EAAI6H,EAAOzN,UAKjB8F,GACC,wBACEhS,UAAW,0DAAyDmZ,GAAiB,KAErF,4BACEnZ,UAAU,+BACV0Z,gBAAeJ,EAAkBS,GACjCrS,QAAS,WAAM,OArGb,SAACqS,G,MACvBR,EAAqB,EAAD,KACfD,KAAiB,MACnBS,IAAYT,EAAkBS,GAAS,KAkGPG,CAAA,KAEf,kBAAC,IAAD,CAAUxT,MAAM,aAAaC,UAAU,oBAK9CqL,GACC,wBAAIhS,UAAWsZ,EAAkBS,GAAY,kCAAoC,oCAC/E,wBACE/Z,UAAW,6BAA4BsZ,EAAkBS,GAAY,qCAAuC,IAC5GI,QAASnV,EAAQ1D,QAAU2Q,EAAY,EAAI,IAEzCD,c,gCC7JxB,0CA4Be,UAjBS,SAAC,G,IAAEmG,EAAI,OAAEzS,EAAQ,WAAE0U,EAAU,aAA6B,OAChF,uBAAKpa,UAAU,qBACZ0F,GACC,uBAAK1F,UAAU,+BACb,qBAAG0I,KAAMhD,EAASd,KAAMc,EAASgB,QAGpCyR,GACC,wBAAMnY,UAAU,0BAA0Bqa,SAAUlC,IAChDiC,GAAcjC,EACfiC,GAAc,IAAOjC,GAAMG,OAAO8B,O,g1BCFrCE,EAAiB,SAAC,G,IACtBvL,EAAK,QACLwL,EAAS,YACTC,EAAS,YACTzO,EAAK,QACLwD,EAAO,UACP8F,EAAU,aACVvR,EAAU,aACVoR,EAAO,UACPI,EAAS,YAEH,IAAsB,mBAAiB,OAAM,GAA5CzL,EAAM,KAAE4Q,EAAS,KAClB,IAA8C,oBAAkB,GAAM,GAArEC,EAAkB,KAAEC,EAAqB,KAC1CC,EAAU,iBAAuB,MAEjCC,EAAuB,WAC3B,IAAMC,EAAeF,EAAQG,QAEzBR,GACFO,EAAaE,gBAAkB,WAC7BP,EAAU,SAGZA,EAAaK,EAAaG,aAAY,QAEtCH,EAAaE,gBAAkB,KAE/BP,EAAaK,EAAaG,aAAY,MAEtCC,uBAAsB,WACpBT,EAAU,YAchB,OAJA,qBAAU,WACRI,MACC,CAACN,IAGF,uBAAKva,UAAW,gBAAgBqV,EAAU,KAAIC,EAAY,iBAAmB,IAAE,KAAIA,GAAaiF,EAAY,uBAAyB,KACnI,0BACErX,KAAK,SACLlD,UAAW,iBACT8D,EAAa,iBAAiBA,EAAe,IAE/C4V,gBAAea,EACf7S,QAAS,WAAM,OAAA8S,EAAA,KAEdzO,GAEH,uBACEkM,IAAK2C,EACL5a,UAAU,eACV6G,eAAc0T,EACdxT,MAAO,CACL8C,OAAQ,GAAGA,IAGO,iBAAZ0F,GACN,uBAAKvP,UAAU,kBACb,gBAAC,IAAD,CAASuP,QAASA,EAASN,eAAgBoG,MAI7CH,GAAW,iBAAqB3F,IAAYA,EAE7C2F,IAAYqF,GAAaG,IAAuB,iBAAqBnL,IACpE,gBAACA,EAAQrM,KAAT,KACMqM,EAAQ4L,MADd,CAEE9M,OAxCkB,WAC1BsM,GAAsB,GACtBE,KAuCQvJ,aAAcuJ,QA2EX,IAjDG,SAAC,G,IACjB1F,EAAM,SACNE,EAAU,aACVvR,EAAU,aACVwR,EAAS,YAEH,IAAoC,mBAAwB,IAAG,GAA9D8F,EAAa,KAAEC,EAAgB,KACtC,cAEA,IAAMb,EAAY,SAACzL,GACjB,IAAMgM,EAAO,OAAsBK,IAEnCL,EAAQhM,GAAOwL,WAAaa,EAAcrM,GAAOwL,UACjDc,EAAiBN,IAcnB,OAXA,qBAAU,WACR,GAAI5F,EAAQ,CACV,IAAMmG,EAA8BnG,EAAO1T,KAAI,SAAC8Z,GAAU,cACrDA,GAAK,CACRhB,WAFwD,OAK1Dc,EAAiBC,MAElB,IAGD,uBAAKtb,UAAU,aACZob,GACC,gCACGA,EAAc3Z,KAAI,SAAC8Z,EAAOxM,GAAU,OACnC,gBAACuL,EAAD,GAEEpO,IAAK6C,EACLyL,UAAWA,EACXzL,MAAOA,EACPsG,WAAYA,EACZvR,WAAYA,EACZwR,UAAWA,GARsB,W,mVClJzC7G,EAAgB,CAAC,MAAO,MAAO,OAAQ,OAAQ,QAsCtC,IA7BI,SAAC,G,MAClBzG,EAAK,QACL,IAAAiB,kBAAU,IAAG,EAAAwF,EAAa,EAC1B,IAAAvG,kBAAU,IAAG,GAAK,EAClBsT,EAAkB,qBAEZ,IAA0B,oBAAkB,GAAM,GAAjDtS,EAAQ,KAAEuS,EAAW,KACtB,IAAsB,qBAAkB,GAAvC9M,EAAM,KAAEC,EAAS,KASxB,OAPA,qBAAU,WACR,IAAMC,EAAM5F,EACTxH,KAAI,SAACqN,GAAiB,OAAG9G,EAAMsB,KAAK1E,IAAG,+BAA+BkK,EAAI,IAAIA,EAAxD,OAEzBF,EAAUC,EAAIrG,KAAK,QAClB,CAACR,IAGF,uBACE+F,aAAW,OACXC,cAAaW,EACb9E,OAAQ2R,EAAuC,QAAlB,EAAAxT,EAAMsB,KAAKC,eAAO,eAAEvB,MAAM6B,YAAS+D,EAChEiB,IAAQ7G,EAAMsB,KAAK1E,IAAG,gCAA+BqE,EAAW,GAAKA,EAAW,GAAKwF,EAAc,IACnGzO,UAAW,kCAAiCkJ,GAAY,mBAAiB,KAAIhB,EAAa,cAAgB,IAC1G6B,IAAK/B,EAAMtB,MAAQsB,EAAMtB,MAAQ,4BACjC2H,OAAQ,WAAM,OAAAoN,GAAA,Q,gCCvCpB,kBAgBe,IAZU,WAAM,OAC7B,uBAAKzb,UAAU,UACb,uBAAKA,UAAU,gBACb,uBAAKA,UAAU,QACf,uBAAKA,UAAU,QACf,uBAAKA,UAAU,QACf,uBAAKA,UAAU,QACf,uBAAKA,UAAU,Y,gCCXrB,0CA8Be,UAjBK,SAAC,G,IAAE0b,EAAI,OAAyB,OAClD,uBAAK1b,UAAU,gBACb,sBAAIA,UAAU,sBACX0b,EAAKja,KAAI,SAACqV,GAAS,OAClB,sBAAI5K,IAAK,cAAUlM,UAAU,sBAC3B,qBAAGA,UAAU,qBAAqB0I,KAAMoO,EAAKlS,IAAK6F,OAAO,SAASC,IAAI,cACpE,4BAAOoM,EAAKrT,MACZ,uBAAKzD,UAAU,2BACb,gBAAC,IAAD,CAAU0G,MAAOoQ,EAAK5T,KAAMyD,UAAW,SAASmQ,EAAK5T,iB,gCCrBnE,iCAqBe,UAVC,SAAC,G,IAAEyY,EAAI,OAAiB,OACtC,sBAAI3b,UAAU,YACX2b,EAAKla,KAAI,SAAC0B,GAAQ,OACjB,sBAAInD,UAAU,kBACZ,gBAAC,IAAQmD,U,m2DCuBXyY,EAAe,CACnBC,aAAc,QAEhB,cAIE,WAAYV,GAAZ,MACE,YAAMA,IAAM,K,OACZ,EAAKW,MAAQ,CACXC,MAAO,GACPC,oBAAgBpO,EAChBqO,mBAAerO,EACfsO,uBAAmBtO,EACnBuO,mBAAevO,EAEfwO,iBAAaxO,EACbyO,yBAAqBzO,EACrB0O,wBAAoB1O,EACpB2O,wBAAoB3O,EACpB4O,wBAAoB5O,EACpB6O,oBAAgB7O,EAChB8O,sBAAuB,EACvBC,uBAAwB,EACxBC,gBAAiB,G,EA2OvB,OAhQwC,OAyBhC,YAAAC,kBAAN,W,qGACE,SAAMC,KAAKC,uBAAuBtR,OAAO+C,a,cAAzC,SACA/C,OAAOC,iBAAiB,UAAU,SAAOJ,GAAK,qC,kDAE5C,OADAA,EAAM0R,kBACN,GAAMF,KAAKC,uBAAuBtR,OAAO+C,a,cAAzC,S,cAGFsO,KAAKG,W,YAGP,YAAAC,mBAAA,SAAmBC,GACO,YAAkBA,EAAWL,KAAK3B,QAExD2B,KAAKG,YAUT,YAAAA,SAAA,WACQ,MAIFH,KAAK3B,MAHPiC,EAAU,aACVhB,EAAW,cACXiB,EAAY,eAIZT,EACEE,KAAKhB,MADQ,gBAGXS,EAAqBrO,KAAKC,KAAKiP,EAAaC,GAC5ChB,IACDD,EAAelO,KAAKC,KAAKyO,EAAkB,KAASL,GAAsBK,EAEzEN,EAAqBF,EAAcG,EAAqBrO,KAAKC,KAAKyO,EAAkB,IACrFL,GAAsBK,EACrBX,EAAgBM,EAChBL,EAAqBE,EAAc,EACnCI,IAAuBJ,EAAc,GACrCK,EAAkBL,EAAc,EAAKH,EAE3Ca,KAAKQ,SAAS,CACZvB,MAAOe,KAAKS,qBACVhB,EACAH,GAEFJ,eAAgB,EAChBC,cAAa,EACbC,kBAAiB,EACjBC,cAAgBC,EAAc,EAE9BA,YAAW,EACXG,mBAAkB,EAClBF,oBAAmB,EACnBC,mBAAkB,EAClBE,mBAAkB,EAClBC,eAAc,KAWlB,YAAAc,qBAAA,SAAqBhB,EAA4BH,GACvC,IAAAQ,EAAoBE,KAAKhB,MAAV,gBACjB0B,EAAoBZ,EAAkB,GAAM,EAAK,EAAI,GACvDa,EAAY,EACZC,EAAWd,EAAkB,EAiBjC,OAfIR,EAAc,IAChBqB,EAAarB,GAAeQ,EAAkB,EAAIY,GAClDE,EAAWtB,GAAeQ,EAAkB,EAAIY,IAG9CpB,EAAeG,EAAqB,IACtCkB,EAAalB,GAAsBK,EAAkB,GACrDc,EAAUnB,EAAqB,GAG7BA,GAAsBK,IACxBa,EAAY,EACZC,EAAUnB,EAAqB,GAG1BoB,MAAMC,KAAK,CAChBtc,OAASoc,EAAUD,IAClB,SAACI,EAAGC,GAAM,OAAAA,EAAA,MAQT,YAAAf,uBAAN,SAA6BgB,G,+GACrB,EAKFjB,KAAKhB,MAJPY,EAAqB,wBACrBC,EAAsB,yBACtBJ,EAAkB,qBAClBH,EAAW,cAGT2B,EA5IW,IA6Ib,GAAMjB,KAAKQ,SAAS,CAClBV,gBAAiBF,KAFjB,M,cACF,S,aAIA,SAAMI,KAAKQ,SAAS,CAClBV,gBAAiBD,K,OADnB,S,wBAKFG,KAAKQ,SAAS,CACZvB,MAAOe,KAAKS,qBACVhB,EACAH,K,YAUN,YAAA4B,WAAA,SAAW1S,EAAyBhG,GAC5B,MAIFwX,KAAK3B,MAHPU,EAAY,eACZoC,EAAW,cACXzW,EAAW,cAGb8D,EAAM4L,iBACN,YAAgB2E,GAAgB,GAAKqC,OAAO5Y,GAAO2Y,GAC/CzW,GACFA,EAAYlC,IAUhB,YAAA6Y,eAAA,SAAe7Y,EAAc0B,EAAcoX,GAA3C,WAEQC,EADkBvB,KAAK3B,MAAV,YACgB,GAAQ1P,OAAO2H,SAASK,SAAQ,SAASnO,EAC5E,OACE,qBACEtF,UAAW,4BAA2Boe,EAAa,mBAAqB,IACxE1W,QAAS,SAAC4D,GAAU,OAAE8S,EAAF,KAAe,EAAKJ,WAAW1S,EAAOhG,IAC1DoD,KAAM2V,EACN1G,KAAK,UAEL,4BAAO3Q,KAKb,YAAAsX,OAAA,sBAEIvX,EACE+V,KAAK3B,MADF,MAGD,EAYF2B,KAAKhB,MAXPC,EAAK,QACLC,EAAc,iBACdC,EAAa,gBACbC,EAAiB,oBACjBC,EAAa,gBACbC,EAAW,cACXC,EAAmB,sBACnBC,EAAkB,qBAClBE,EAAkB,qBAClBC,EAAc,iBACdF,EAAkB,qBAGpB,OACE,uBAAKvc,UAAW,eAAc+G,GAAS,eAAeA,IACpD,sBAAI/G,UAAU,SAGZ,sBAAIA,UAAW,wCAAuCqc,GAAuB,0BAC1ES,KAAKqB,eAAenC,EAA0B,IAAKK,IAIrDN,EAAMta,KAAI,SAACqV,GAAS,OACnB,sBAAI5K,IAAK4K,EAAM9W,UAAW,gBAAgB8W,IAASsF,EAAe,sBAAwB,KACvF,EAAK+B,eAAerH,EAAMoH,OAAOpH,IAAO,OAK7C,sBAAI9W,UAAW,uCAAsCsc,GAAsB,0BACxEQ,KAAKqB,eAAelC,EAAyB,GAAGM,EAAsBD,KAI3E,uBAAKtc,UAAU,uBAEb,uBAAKA,UAAW,kBAAiBwc,GAAsB,4BACrD,gBAAC,IAAD,CAAU9V,MAAM,iBAAiBC,UAAU,uBAC3C,qBAAG+B,KAAK,IAAIhB,QAAS,SAAC4D,GAAU,OAAEkR,EAA2E,aAAtD,EAAKwB,WAAW1S,EAAO4Q,KAC5E,4BAAM,mBAKV,uBAAKlc,UAAW,cAAayc,GAAkB,wBAC7C,gBAAC,IAAD,CAAU/V,MAAM,aAAaC,UAAU,uBACvC,qBAAG+B,KAAK,IAAIhB,QAAS,SAAC4D,GAAU,OAAEmR,EAAmE,aAAlD,EAAKuB,WAAW1S,EAAO6Q,KACxE,4BAAM,kBArPX,EAAAP,aAAeA,EA8PxB,EAhQA,CAAwC,aAAnB,Q,okBCnBRnT,EAAY,SAAC,G,IACxB1I,EAAQ,WACRC,EAAS,YACT,IAAAue,sBAAc,IAAG,GAAK,EACF,OACpB,uBAAKve,UAAW,cAAaue,GAAkB,8BAA4B,IAAIve,GAC5ED,IAICye,EAAS,SAAC,G,IACd,IAAA9F,UAAE,IAAG,IAAC,EACN,IAAAhL,UAAE,IAAG,IAAC,EACN,IAAAkL,UAAE,IAAG,KAAE,EACPC,EAAE,KACF7Y,EAAS,YACTD,EAAQ,WACS,OACjB,uBAAKC,UAAW,iBAAiB0Y,EAAE,WAAWhL,EAAE,WAAWkL,EAAE,KAAIC,GAAM,UAAUA,GAAI,IAAI7Y,GACtFD,IAIL,2B,+CAiBA,OAjB0B,OAKxB,YAAAue,OAAA,WACQ,MAIFxB,KAAK3B,MAHPpb,EAAQ,WACR0e,EAAO,UACPze,EAAS,YAEX,OACE,uBAAKA,UAAW,SAAQye,GAAW,eAAa,IAAIze,GACjDD,IAZA,EAAA2e,UAAYjW,EAEZ,EAAA+V,OAASA,EAclB,EAjBA,CAA0B,c,gCC7C1B,WAmBe,IAjBW,SAACvG,EAAU0G,GACnC,qBAAU,WACR,IAAMC,EAAqB,SAACtT,GACtB2M,EAAI8C,UAAY9C,EAAI8C,QAAQ8D,SAASvT,EAAMb,SACzCkU,GAA8B,mBAAZA,GACpBA,KAMN,OADA/T,SAASc,iBAAiB,YAAakT,GAChC,WACLhU,SAASe,oBAAoB,YAAaiT,MAE3C,CAAC3G,M,4JCwDS,G,OAlEY,SAAC,G,IAC1B6G,EAAgB,mBAChBC,EAAK,QACL7a,EAAO,UACP8a,EAAK,QACLtb,EAAK,QACLD,EAAI,OACJ4M,EAAO,UACP4O,EAAU,aACVC,EAAU,aACVC,EAAY,eACiB,OAC7B,2BAASnf,UAAU,uBACjB,gBAAC,IAAD,KACE,uBAAKA,UAAU,8BACb,0BAAQA,UAAU,+BAChB,uBAAKA,UAAU,6BACb,0BAAKyD,IAEP,uBAAKzD,UAAU,8BACZ+e,GAAYA,EAAK,KACjB7a,GAEH,uBAAKlE,UAAU,8BACZgf,IAGL,uBAAKhf,UAAU,8BACZ8e,GACC,uBAAK9e,UAAU,mCACb,4BAAOif,GACNH,GAGJzO,GACC,uBAAKrQ,UAAU,mCACb,4BAAOmf,GAEP,qBACEzW,KAAM2H,EAAQzL,IACd6F,OAAQ4F,EAAQjG,WAAa,SAAW,QACxCM,IAAK2F,EAAQjG,WAAa,sBAAwB,IAEjDiG,EAAQ3J,QAIdhD,GACC,uBAAK1D,UAAU,mCACb,4BAAOkf,GAEP,qBACExW,KAAMhF,EAAMkB,IACZ6F,OAAQ/G,EAAM0G,WAAa,SAAW,QACtCM,IAAKhH,EAAM0G,WAAa,sBAAwB,IAE/C1G,EAAMgD,cCtDV,G,OAA2B,SAAC,G,IACvChB,EAAQ,WACRzB,EAAS,YACTQ,EAAQ,WACRT,EAAQ,WACiB,OACzB,uBAAKhE,UAAU,8BACb,uBAAKA,UAAU,qCACb,uBAAKA,UAAU,oCACZyE,GAEH,uBAAKzE,UAAU,oCACZgE,IAGL,uBAAKhE,UAAU,uCACb,uBAAKA,UAAU,wCACZ0F,GAEH,uBAAK1F,UAAU,qCACZiE,OAMI,EAA+B,SAAC,G,IAC3CkU,EAAI,OACJiH,EAAK,QACqB,OAC1B,uBAAKpf,UAAU,4BACb,uBAAKA,UAAU,kCACb,0BAAKmY,IAEP,uBAAKnY,UAAU,mCACZof,EAAM3d,KAAI,SAAC4d,GAAS,OACnB,gBAAC,EADkB,SAyBZ,EAlBa,SAAC,G,IAC3B3Y,EAAK,QACL6O,EAAK,QACyB,OAC9B,2BAASvV,UAAU,wBACjB,gBAAC,IAAD,KACE,uBAAKA,UAAU,+BACb,uBAAKA,UAAU,+BACb,0BAAK0G,IAEP,uBAAK1G,UAAU,8BACZuV,EAAM9T,KAAI,SAAC2E,GAAQ,uBAAC,EAAD,WCxDxB,G,OAAa,SAAC,G,IAClB3C,EAAI,OACJoO,EAAW,cACX8F,EAAI,OACiB,OACrB,uBAAK3X,UAAU,eACb,uBAAKA,UAAU,wBACb,uBAAKA,UAAU,qBACZyD,GAEH,uBAAKzD,UAAU,qBACZ2X,IAGL,uBAAK3X,UAAU,4BACZ6R,MA+BQ,EA1BM,SAAC,G,IACpBnL,EAAK,QACL4Y,EAAQ,WACR/J,EAAK,QACkB,OACvB,2BAASvV,UAAU,gBACjB,gBAAC,IAAD,KACE,uBAAKA,UAAU,uBACb,uBAAKA,UAAU,sBACb,sBAAIA,UAAU,uBACX0G,GAEH,uBAAK1G,UAAU,2BACZsf,IAGL,uBAAKtf,UAAU,sBACZuV,EAAM9T,KAAI,SAACqV,GAAS,OACnB,gBAAC,EADkB,W,uOCQhB,UAzCkB,SAAC,G,IAChCyI,EAAkB,qBAClBC,EAAQ,WACRC,EAAW,cACX7O,EAAO,UAECrD,EAAiB,qBAAW,KAAhB,aAEpB,OACE,6BAASvN,UAAU,4CAChBuf,GACC,kBAAC,EAAD,KACMA,EADN,CAEEN,WAAY1R,EAAamS,YAAYT,WACrCE,aAAc5R,EAAamS,YAAYP,aACvCD,WAAY3R,EAAamS,YAAYR,cAIxCtO,GACC,kBAAC+O,EAAA,QAAqB/O,GAGvBhB,QAAQ4P,GAAYA,EAASjK,MAAMjU,SAClC,kBAAC,EAAD,KACMke,EADN,CAEE9Y,MAAO6G,EAAamS,YAAYE,cAInChQ,QAAQ6P,GAAeA,EAAYne,SAClC,kBAAC,EAAD,CACEoF,MAAO6G,EAAamS,YAAYG,iBAChCP,SAAU/R,EAAamS,YAAYI,iBACnCvK,MAAOkK","file":"habitat.20.component.js","sourcesContent":["import * as React from 'react';\r\nimport './styles.scss';\r\n\r\ninterface ContainerProps {\r\n children: JSX.Element | JSX.Element[];\r\n}\r\n\r\nconst Container = ({ children }: ContainerProps) => (\r\n
\r\n {children}\r\n
\r\n);\r\n\r\nexport default Container;\r\n","import { Discipline, DisciplineCodes } from 'core/typings';\r\n\r\nimport {\r\n CookieConfig,\r\n SharePlatformDetail,\r\n} from './typings/configs';\r\n\r\nexport const COOKIE_CONFIG: CookieConfig = {\r\n cookiePolicy: 'c_policy',\r\n cookiePolicyExpirationDays: 60,\r\n xsrfRequestToken: 'XSRF-REQUEST-TOKEN',\r\n};\r\n\r\nexport const CSS_CLASSES = {\r\n isActive: 'is-open',\r\n isOpen: 'is-open',\r\n isShowing: 'is-showing',\r\n navIsShowing: 'nav-is-showing',\r\n overlayIsShowing: 'overlay-is-showing',\r\n};\r\n\r\nexport const SHARE_PLATFORM_DETAILS: SharePlatformDetail[] = [\r\n {\r\n id: 'facebook',\r\n shareUrl: 'https://www.facebook.com/sharer/sharer.php?u=',\r\n },\r\n {\r\n id: 'twitter',\r\n shareUrl: 'https://twitter.com/intent/tweet?url=',\r\n },\r\n {\r\n id: 'whatsapp',\r\n shareUrl: 'whatsapp://send?text=',\r\n },\r\n {\r\n id: 'copylink',\r\n shareUrl: null,\r\n },\r\n];\r\n\r\nexport const DISCIPLINE: Record = {\r\n 'bmx-freestyle': 'bfr',\r\n 'bmx-racing': 'bmx',\r\n 'cycling-esport': 'ces',\r\n 'cyclo-cross': 'cro',\r\n gravel: 'gra',\r\n indoor: 'ind',\r\n 'mountain-bike': 'mtb',\r\n para: 'par',\r\n road: 'roa',\r\n track: 'pis',\r\n trials: 'tri',\r\n other: 'cpt',\r\n};\r\n","/**\r\n * Checks if two objects are identical\r\n * This is a good method for prop checking in componentDidUpdate\r\n */\r\nconst isIdenticalObject = (objectA: any, objectB: any) => {\r\n const aProps = Object.getOwnPropertyNames(objectA);\r\n const bProps = Object.getOwnPropertyNames(objectB);\r\n\r\n if (aProps.length !== bProps.length) {\r\n return false;\r\n }\r\n\r\n // eslint-disable-next-line no-plusplus\r\n for (let i = 0; i < aProps.length; i++) {\r\n const propName = aProps[i];\r\n if (objectA[propName] !== objectB[propName]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n};\r\n\r\n/**\r\n * Breaks arrar into chunks based on a specified size\r\n */\r\nconst arrChunks = (arr: any[], size: number) => {\r\n if (!Array.isArray(arr)) {\r\n throw new Error('Chunk expects argument one to be type of array.');\r\n }\r\n\r\n const len = {\r\n length: Math.ceil(arr.length / size),\r\n };\r\n\r\n return Array.from(len).map((value, index) => (\r\n arr.slice(index * size, (index * size) + size)\r\n ));\r\n};\r\n\r\n// Put asyncForEach into a module\r\nconst asyncForEach = async (array: any[], callback: Function) => {\r\n // eslint-disable-next-line no-plusplus\r\n for (let index = 0; index < array.length; index++) {\r\n // eslint-disable-next-line no-await-in-loop\r\n await callback(array[index], index, array);\r\n }\r\n};\r\n\r\nexport {\r\n isIdenticalObject,\r\n arrChunks,\r\n asyncForEach,\r\n};\r\n","var map = {\n\t\"./af\": 58,\n\t\"./af.js\": 58,\n\t\"./ar\": 59,\n\t\"./ar-dz\": 60,\n\t\"./ar-dz.js\": 60,\n\t\"./ar-kw\": 61,\n\t\"./ar-kw.js\": 61,\n\t\"./ar-ly\": 62,\n\t\"./ar-ly.js\": 62,\n\t\"./ar-ma\": 63,\n\t\"./ar-ma.js\": 63,\n\t\"./ar-sa\": 64,\n\t\"./ar-sa.js\": 64,\n\t\"./ar-tn\": 65,\n\t\"./ar-tn.js\": 65,\n\t\"./ar.js\": 59,\n\t\"./az\": 66,\n\t\"./az.js\": 66,\n\t\"./be\": 67,\n\t\"./be.js\": 67,\n\t\"./bg\": 68,\n\t\"./bg.js\": 68,\n\t\"./bm\": 69,\n\t\"./bm.js\": 69,\n\t\"./bn\": 70,\n\t\"./bn-bd\": 71,\n\t\"./bn-bd.js\": 71,\n\t\"./bn.js\": 70,\n\t\"./bo\": 72,\n\t\"./bo.js\": 72,\n\t\"./br\": 73,\n\t\"./br.js\": 73,\n\t\"./bs\": 74,\n\t\"./bs.js\": 74,\n\t\"./ca\": 75,\n\t\"./ca.js\": 75,\n\t\"./cs\": 76,\n\t\"./cs.js\": 76,\n\t\"./cv\": 77,\n\t\"./cv.js\": 77,\n\t\"./cy\": 78,\n\t\"./cy.js\": 78,\n\t\"./da\": 79,\n\t\"./da.js\": 79,\n\t\"./de\": 80,\n\t\"./de-at\": 81,\n\t\"./de-at.js\": 81,\n\t\"./de-ch\": 82,\n\t\"./de-ch.js\": 82,\n\t\"./de.js\": 80,\n\t\"./dv\": 83,\n\t\"./dv.js\": 83,\n\t\"./el\": 84,\n\t\"./el.js\": 84,\n\t\"./en-au\": 85,\n\t\"./en-au.js\": 85,\n\t\"./en-ca\": 86,\n\t\"./en-ca.js\": 86,\n\t\"./en-gb\": 87,\n\t\"./en-gb.js\": 87,\n\t\"./en-ie\": 88,\n\t\"./en-ie.js\": 88,\n\t\"./en-il\": 89,\n\t\"./en-il.js\": 89,\n\t\"./en-in\": 90,\n\t\"./en-in.js\": 90,\n\t\"./en-nz\": 91,\n\t\"./en-nz.js\": 91,\n\t\"./en-sg\": 92,\n\t\"./en-sg.js\": 92,\n\t\"./eo\": 93,\n\t\"./eo.js\": 93,\n\t\"./es\": 94,\n\t\"./es-do\": 95,\n\t\"./es-do.js\": 95,\n\t\"./es-mx\": 96,\n\t\"./es-mx.js\": 96,\n\t\"./es-us\": 97,\n\t\"./es-us.js\": 97,\n\t\"./es.js\": 94,\n\t\"./et\": 98,\n\t\"./et.js\": 98,\n\t\"./eu\": 99,\n\t\"./eu.js\": 99,\n\t\"./fa\": 100,\n\t\"./fa.js\": 100,\n\t\"./fi\": 101,\n\t\"./fi.js\": 101,\n\t\"./fil\": 102,\n\t\"./fil.js\": 102,\n\t\"./fo\": 103,\n\t\"./fo.js\": 103,\n\t\"./fr\": 40,\n\t\"./fr-ca\": 104,\n\t\"./fr-ca.js\": 104,\n\t\"./fr-ch\": 105,\n\t\"./fr-ch.js\": 105,\n\t\"./fr.js\": 40,\n\t\"./fy\": 106,\n\t\"./fy.js\": 106,\n\t\"./ga\": 107,\n\t\"./ga.js\": 107,\n\t\"./gd\": 108,\n\t\"./gd.js\": 108,\n\t\"./gl\": 109,\n\t\"./gl.js\": 109,\n\t\"./gom-deva\": 110,\n\t\"./gom-deva.js\": 110,\n\t\"./gom-latn\": 111,\n\t\"./gom-latn.js\": 111,\n\t\"./gu\": 112,\n\t\"./gu.js\": 112,\n\t\"./he\": 113,\n\t\"./he.js\": 113,\n\t\"./hi\": 114,\n\t\"./hi.js\": 114,\n\t\"./hr\": 115,\n\t\"./hr.js\": 115,\n\t\"./hu\": 116,\n\t\"./hu.js\": 116,\n\t\"./hy-am\": 117,\n\t\"./hy-am.js\": 117,\n\t\"./id\": 118,\n\t\"./id.js\": 118,\n\t\"./is\": 119,\n\t\"./is.js\": 119,\n\t\"./it\": 120,\n\t\"./it-ch\": 121,\n\t\"./it-ch.js\": 121,\n\t\"./it.js\": 120,\n\t\"./ja\": 122,\n\t\"./ja.js\": 122,\n\t\"./jv\": 123,\n\t\"./jv.js\": 123,\n\t\"./ka\": 124,\n\t\"./ka.js\": 124,\n\t\"./kk\": 125,\n\t\"./kk.js\": 125,\n\t\"./km\": 126,\n\t\"./km.js\": 126,\n\t\"./kn\": 127,\n\t\"./kn.js\": 127,\n\t\"./ko\": 128,\n\t\"./ko.js\": 128,\n\t\"./ku\": 129,\n\t\"./ku.js\": 129,\n\t\"./ky\": 130,\n\t\"./ky.js\": 130,\n\t\"./lb\": 131,\n\t\"./lb.js\": 131,\n\t\"./lo\": 132,\n\t\"./lo.js\": 132,\n\t\"./lt\": 133,\n\t\"./lt.js\": 133,\n\t\"./lv\": 134,\n\t\"./lv.js\": 134,\n\t\"./me\": 135,\n\t\"./me.js\": 135,\n\t\"./mi\": 136,\n\t\"./mi.js\": 136,\n\t\"./mk\": 137,\n\t\"./mk.js\": 137,\n\t\"./ml\": 138,\n\t\"./ml.js\": 138,\n\t\"./mn\": 139,\n\t\"./mn.js\": 139,\n\t\"./mr\": 140,\n\t\"./mr.js\": 140,\n\t\"./ms\": 141,\n\t\"./ms-my\": 142,\n\t\"./ms-my.js\": 142,\n\t\"./ms.js\": 141,\n\t\"./mt\": 143,\n\t\"./mt.js\": 143,\n\t\"./my\": 144,\n\t\"./my.js\": 144,\n\t\"./nb\": 145,\n\t\"./nb.js\": 145,\n\t\"./ne\": 146,\n\t\"./ne.js\": 146,\n\t\"./nl\": 147,\n\t\"./nl-be\": 148,\n\t\"./nl-be.js\": 148,\n\t\"./nl.js\": 147,\n\t\"./nn\": 149,\n\t\"./nn.js\": 149,\n\t\"./oc-lnc\": 150,\n\t\"./oc-lnc.js\": 150,\n\t\"./pa-in\": 151,\n\t\"./pa-in.js\": 151,\n\t\"./pl\": 152,\n\t\"./pl.js\": 152,\n\t\"./pt\": 153,\n\t\"./pt-br\": 154,\n\t\"./pt-br.js\": 154,\n\t\"./pt.js\": 153,\n\t\"./ro\": 155,\n\t\"./ro.js\": 155,\n\t\"./ru\": 156,\n\t\"./ru.js\": 156,\n\t\"./sd\": 157,\n\t\"./sd.js\": 157,\n\t\"./se\": 158,\n\t\"./se.js\": 158,\n\t\"./si\": 159,\n\t\"./si.js\": 159,\n\t\"./sk\": 160,\n\t\"./sk.js\": 160,\n\t\"./sl\": 161,\n\t\"./sl.js\": 161,\n\t\"./sq\": 162,\n\t\"./sq.js\": 162,\n\t\"./sr\": 163,\n\t\"./sr-cyrl\": 164,\n\t\"./sr-cyrl.js\": 164,\n\t\"./sr.js\": 163,\n\t\"./ss\": 165,\n\t\"./ss.js\": 165,\n\t\"./sv\": 166,\n\t\"./sv.js\": 166,\n\t\"./sw\": 167,\n\t\"./sw.js\": 167,\n\t\"./ta\": 168,\n\t\"./ta.js\": 168,\n\t\"./te\": 169,\n\t\"./te.js\": 169,\n\t\"./tet\": 170,\n\t\"./tet.js\": 170,\n\t\"./tg\": 171,\n\t\"./tg.js\": 171,\n\t\"./th\": 172,\n\t\"./th.js\": 172,\n\t\"./tk\": 173,\n\t\"./tk.js\": 173,\n\t\"./tl-ph\": 174,\n\t\"./tl-ph.js\": 174,\n\t\"./tlh\": 175,\n\t\"./tlh.js\": 175,\n\t\"./tr\": 176,\n\t\"./tr.js\": 176,\n\t\"./tzl\": 177,\n\t\"./tzl.js\": 177,\n\t\"./tzm\": 178,\n\t\"./tzm-latn\": 179,\n\t\"./tzm-latn.js\": 179,\n\t\"./tzm.js\": 178,\n\t\"./ug-cn\": 180,\n\t\"./ug-cn.js\": 180,\n\t\"./uk\": 181,\n\t\"./uk.js\": 181,\n\t\"./ur\": 182,\n\t\"./ur.js\": 182,\n\t\"./uz\": 183,\n\t\"./uz-latn\": 184,\n\t\"./uz-latn.js\": 184,\n\t\"./uz.js\": 183,\n\t\"./vi\": 185,\n\t\"./vi.js\": 185,\n\t\"./x-pseudo\": 186,\n\t\"./x-pseudo.js\": 186,\n\t\"./yo\": 187,\n\t\"./yo.js\": 187,\n\t\"./zh-cn\": 188,\n\t\"./zh-cn.js\": 188,\n\t\"./zh-hk\": 189,\n\t\"./zh-hk.js\": 189,\n\t\"./zh-mo\": 190,\n\t\"./zh-mo.js\": 190,\n\t\"./zh-tw\": 191,\n\t\"./zh-tw.js\": 191\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 229;","import * as news from './endpoints/news';\r\nimport * as contact from './endpoints/contact';\r\nimport * as calendar from './endpoints/calendar';\r\nimport * as racehub from './endpoints/racehub';\r\nimport * as riders from './endpoints/riders';\r\nimport * as rankings from './endpoints/rankings';\r\n\r\nexport default {\r\n news,\r\n contact,\r\n calendar,\r\n racehub,\r\n riders,\r\n rankings,\r\n};\r\n","import Axios, { AxiosResponse } from 'axios';\r\nimport { config } from '../../../config';\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport const getNews = async (\r\n pageIndex?: number,\r\n pageSize?: number,\r\n featuredArticleId?: string,\r\n newsCategoryId?: string,\r\n type?: string,\r\n tag?: string,\r\n) => {\r\n const { data }: AxiosResponse = await Axios.get(`${config.apiUrl}/news/listing`, {\r\n params: {\r\n newsCategoryId,\r\n pageIndex,\r\n pageSize,\r\n type,\r\n featuredArticleId,\r\n tag,\r\n },\r\n });\r\n\r\n return data;\r\n};\r\n","import Axios, { AxiosResponse } from 'axios';\r\nimport { config } from '../../../config';\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport const postMail = async (\r\n entryId: string,\r\n name: string,\r\n email: string,\r\n phone: string,\r\n message: string,\r\n) => {\r\n const { data }: AxiosResponse = await Axios.get(`${config.apiUrl}/news/listing`, {\r\n params: {\r\n entryId,\r\n name,\r\n email,\r\n phone,\r\n message,\r\n },\r\n });\r\n\r\n return data;\r\n};\r\n","import Axios, { AxiosResponse } from 'axios';\r\nimport { config } from '../../../config';\r\nimport {\r\n CalendarApiQueryParams,\r\n CalendarResultParams,\r\n CalendarDownloadApiParams,\r\n} from '../../../typings/api';\r\n\r\nexport const getUpcoming = async ({\r\n discipline,\r\n raceCategory,\r\n raceType,\r\n raceClass,\r\n country,\r\n year,\r\n seasonId,\r\n}: CalendarApiQueryParams) => {\r\n const { data }: AxiosResponse = await Axios.get(`${config.apiUrl}/calendar/upcoming`, {\r\n params: {\r\n discipline,\r\n raceCategory,\r\n raceType,\r\n raceClass,\r\n country,\r\n year,\r\n seasonId,\r\n },\r\n });\r\n\r\n return data;\r\n};\r\n\r\nexport const getPast = async ({\r\n discipline,\r\n raceCategory,\r\n raceType,\r\n raceClass,\r\n country,\r\n seasonId,\r\n year,\r\n}: CalendarApiQueryParams) => {\r\n const { data }: AxiosResponse = await Axios.get(`${config.apiUrl}/calendar/past`, {\r\n params: {\r\n discipline,\r\n raceCategory,\r\n raceType,\r\n raceClass,\r\n country,\r\n seasonId,\r\n year,\r\n },\r\n });\r\n\r\n return data;\r\n};\r\n\r\nexport const getResult = async ({\r\n eventCode,\r\n raceType,\r\n disciplineCode,\r\n raceName,\r\n}: CalendarResultParams) => {\r\n const { data }: AxiosResponse = await Axios.get(`${config.apiUrl}/calendar/results/${eventCode}`, {\r\n params: {\r\n discipline: disciplineCode,\r\n raceType,\r\n raceName,\r\n },\r\n });\r\n\r\n return data;\r\n};\r\n\r\nexport const getCwc = async (discipline: string) => {\r\n const { data }: AxiosResponse = await Axios.get(`${config.apiUrl}/calendar/cwc`, {\r\n params: { discipline: discipline || '' },\r\n });\r\n\r\n return data;\r\n};\r\n\r\nexport const downloadCalendar = async (\r\n url: string,\r\n bearerToken: string,\r\n params: CalendarDownloadApiParams,\r\n) => {\r\n const response: AxiosResponse = await Axios.post(url, params, {\r\n responseType: 'blob',\r\n headers: { Authorization: `Bearer ${bearerToken}` },\r\n });\r\n\r\n return response;\r\n};\r\n","import Axios, { AxiosResponse } from 'axios';\r\nimport { config } from '../../../config';\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport const getCommentary = async (\r\n eventId: number,\r\n lastCommentId: number,\r\n) => {\r\n const { data }: AxiosResponse = await Axios.get(`${config.apiUrl}/race-hub/commentary/${eventId}`, {\r\n params: {\r\n lastCommentId,\r\n },\r\n });\r\n\r\n return data;\r\n};\r\n","import Axios, { AxiosResponse } from 'axios';\r\nimport { config } from '../../../config';\r\nimport { RidersApiParams } from '../../../typings/api';\r\n\r\nexport const getCompetitionRiders = async ({\r\n id,\r\n page,\r\n countryCode,\r\n search,\r\n}: RidersApiParams) => {\r\n const { data }: AxiosResponse = await Axios.get(`${config.apiUrl}/competition-hub/riders/${id}`, {\r\n params: {\r\n page,\r\n countryCode,\r\n search,\r\n },\r\n });\r\n\r\n return data;\r\n};\r\n\r\nexport const getRiders = async ({\r\n page,\r\n countryCode,\r\n discipline,\r\n category,\r\n year,\r\n search,\r\n}: RidersApiParams) => {\r\n const { data }: AxiosResponse = await Axios.get(`${config.apiUrl}/riders/${discipline}/${year}`, {\r\n params: {\r\n page,\r\n country: countryCode,\r\n category,\r\n search,\r\n },\r\n });\r\n\r\n return data;\r\n};\r\n\r\nexport const getTeams = async ({\r\n page,\r\n countryCode,\r\n discipline,\r\n category,\r\n year,\r\n search,\r\n}: RidersApiParams) => {\r\n const { data }: AxiosResponse = await Axios.get(`${config.apiUrl}/teams/${discipline}/${year}`, {\r\n params: {\r\n page,\r\n country: countryCode,\r\n category,\r\n search,\r\n },\r\n });\r\n\r\n return data;\r\n};\r\n","import Axios, { AxiosResponse } from 'axios';\r\nimport { config } from '../../../config';\r\nimport { RankingsApiParams } from '../../../typings/api';\r\nimport RANKING_YEAR_TRANSITIONS from '../constants';\r\n\r\nconst getRankingYear = (discipline: string): number => {\r\n const now = new Date();\r\n const transition = RANKING_YEAR_TRANSITIONS[discipline] || RANKING_YEAR_TRANSITIONS.DEFAULT;\r\n\r\n if (transition === RANKING_YEAR_TRANSITIONS.DEFAULT) {\r\n return now.getFullYear();\r\n }\r\n\r\n const { month, day } = transition;\r\n const transitionDate = new Date(now.getFullYear(), month - 1, day);\r\n\r\n return now >= transitionDate ? now.getFullYear() + 1 : now.getFullYear();\r\n};\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport const getRankings = async ({\r\n discipline,\r\n category,\r\n type,\r\n id,\r\n}: RankingsApiParams) => {\r\n const currentYear = getRankingYear(discipline ?? 'DEFAULT');\r\n const { data }: AxiosResponse = await Axios.get(\r\n `${config.apiUrl}/rankings/details?DisciplineCode=${discipline}&SeasonYear=${currentYear}&Category=${category}&rankingType=${type}&rankingId=${id}`,\r\n );\r\n\r\n return data;\r\n};\r\n\r\nexport const getTechnicalRankings = async () => {\r\n const { data }: AxiosResponse = await Axios.get(`${config.apiUrl}/rankings/technical`);\r\n\r\n return data;\r\n};\r\n","const RANKING_YEAR_TRANSITIONS: Record = {\r\n CRO: { month: 8, day: 1 },\r\n ROA: { month: 10, day: 20 },\r\n DEFAULT: { month: 1, day: 1 },\r\n};\r\n\r\nexport default RANKING_YEAR_TRANSITIONS;\r\n","import * as React from 'react';\r\n\r\ninterface SvgImageProps {\r\n title?: string;\r\n reference: string;\r\n ariaHidden?: boolean;\r\n className?: string;\r\n}\r\n\r\nconst SvgImage = ({\r\n title,\r\n reference,\r\n ariaHidden,\r\n className,\r\n}: SvgImageProps) => (\r\n \r\n {title && (\r\n {title}\r\n )}\r\n \r\n \r\n);\r\n\r\nexport default SvgImage;\r\n","import * as React from 'react';\r\nimport SvgImage from '../SvgImage';\r\nimport './styles.scss';\r\n\r\ninterface ButtonProps {\r\n type: 'button' | 'submit' | 'reset';\r\n style?: 'default' | 'secondary' | 'transparent' | 'uci';\r\n text?: string;\r\n icon?: {\r\n reference: string;\r\n title: string;\r\n } | undefined;\r\n role?: 'button';\r\n ariaLabel?: string;\r\n disabled?: boolean;\r\n showLoader?: boolean;\r\n iconOnly?: boolean;\r\n fullWidth?: boolean;\r\n isProcessing?: boolean;\r\n handleClick?: (event: React.MouseEvent) => void | undefined;\r\n}\r\n\r\nconst Button = ({\r\n type = 'button',\r\n style = 'default',\r\n text,\r\n icon,\r\n ariaLabel,\r\n disabled = false,\r\n showLoader = false,\r\n iconOnly = false,\r\n fullWidth = false,\r\n isProcessing = false,\r\n handleClick,\r\n}: ButtonProps) => {\r\n const buttonClass = `\r\n button\r\n button--${style}\r\n ${text && 'button--has-label'}\r\n ${icon && 'button--has-icon'}\r\n ${iconOnly && 'button--icon-only'}\r\n ${fullWidth && 'button--full-width'}\r\n ${showLoader && 'button--updating'}\r\n ${disabled && 'button--disabled'}\r\n ${isProcessing && 'button--processing'}\r\n `;\r\n\r\n return (\r\n \r\n {icon && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n {text && (\r\n
\r\n {text}\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Button;\r\n","import * as React from 'react';\r\n\r\nimport Container from '../../helpers/Container';\r\nimport ImageObject from '../ImageObject';\r\nimport SvgImage from '../SvgImage';\r\nimport { HeroBannerProps } from './type';\r\nimport './styles.scss';\r\n\r\nconst HeroBanner = ({\r\n ariaHidden,\r\n backLink,\r\n children,\r\n colorTheme = 'blue',\r\n image,\r\n imageSize = 'half',\r\n isDarkened,\r\n isLanding,\r\n isForPage,\r\n}: HeroBannerProps) => {\r\n const root = 'hero-banner';\r\n const classes = [\r\n root,\r\n `${root}--theme-${colorTheme}`,\r\n ];\r\n if (isDarkened) {\r\n classes.push(`${root}--darkened`);\r\n }\r\n if (image) {\r\n classes.push(`${root}--${imageSize}`);\r\n }\r\n if (!image) {\r\n classes.push(`${root}--no-image`);\r\n }\r\n if (isLanding) {\r\n classes.push(`${root}--landing`);\r\n }\r\n if (isForPage) {\r\n classes.push(`${root}--for-page`);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n {backLink ? (\r\n \r\n \r\n {backLink?.title}\r\n \r\n ) : }\r\n
\r\n\r\n
\r\n {children}\r\n
\r\n
\r\n
\r\n
\r\n\r\n {!isLanding && (\r\n
\r\n {image && (\r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default HeroBanner;\r\n","import * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\nimport { Image as ImageType } from '../../../typings';\r\nimport Image from '../Image';\r\n\r\ninterface ImageWithFocalPointProps {\r\n image: ImageType;\r\n aspectRatio: '2x1' | '16x9' | '3x2' | '4x3' | '1x1' | '4x5' | '2x3' | '6x1' | '6x7-promo';\r\n widthSizes?: string[];\r\n aspectRatioMobile?: '2x1' | '16x9' | '3x2' | '4x3' | '1x1' | '4x5' | '2x3' | '6x1' | '6x7-promo';\r\n mobileImageTriggerWidth?: number;\r\n isLoaded?: Function;\r\n hasTransparentBackground?: boolean;\r\n isDarkened?: boolean;\r\n}\r\n\r\nconst ImageWithFocalPoint = ({\r\n image,\r\n aspectRatio,\r\n aspectRatioMobile,\r\n mobileImageTriggerWidth,\r\n widthSizes,\r\n isLoaded,\r\n hasTransparentBackground = false,\r\n isDarkened = false, // passed as percentage 80 etc.\r\n}: ImageWithFocalPointProps) => {\r\n const [focalPoint, setFocalPoint] = useState(null);\r\n /*\r\n Set crop quadrant area as:\r\n 'center' | 'top' | 'right' | 'left' | 'bottom' | 'top_right' |\r\n 'top_left' | 'bottom_right' | 'bottom_left';\r\n Docs: https://www.contentful.com/developers/docs/references/images-api/#/reference/resizing-&-cropping/specify-focus-area\r\n We get x / y coords in pixels so we calculate percentage and\r\n then which area it falls into from there.\r\n */\r\n const setFocalArea = () => {\r\n if (!image.focalPoint) return 'center';\r\n if (!image.file || !image.file.details) return 'center';\r\n\r\n const xPercentile = (image.focalPoint.x / image.file.details.image.width) * 100;\r\n const yPercentile = (image.focalPoint.y / image.file.details.image.height) * 100;\r\n // eslint-disable-next-line no-nested-ternary\r\n const xQuadrant = xPercentile < 33 ? 'left' : xPercentile > 66 ? 'right' : 'center';\r\n // eslint-disable-next-line no-nested-ternary\r\n const yQuadrant = yPercentile < 33 ? 'top' : xPercentile > 66 ? 'bottom' : 'center';\r\n\r\n if (xQuadrant === 'center') {\r\n return yQuadrant;\r\n }\r\n if (yQuadrant === 'center') {\r\n return xQuadrant;\r\n }\r\n\r\n return `${yQuadrant}_${xQuadrant}`;\r\n };\r\n\r\n useEffect(() => {\r\n if (image.focalPoint && image.file.details) {\r\n const xPercentile = (image.focalPoint.x / image.file.details.image.width) * 100;\r\n const yPercentile = (image.focalPoint.y / image.file.details.image.height) * 100;\r\n setFocalPoint(`${xPercentile}% ${yPercentile}%`);\r\n }\r\n }, [image]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ImageWithFocalPoint;\r\n","import * as React from 'react';\r\nimport SvgImage from '../SvgImage';\r\nimport { Link as LinkType } from '../../../typings';\r\nimport './styles.scss';\r\n\r\nconst Link = ({\r\n title,\r\n url,\r\n isExternal = false,\r\n isButton = false,\r\n icon,\r\n iconAfter,\r\n className = '',\r\n ariaLabel,\r\n buttonType = 'text-link',\r\n buttonColour = 'white',\r\n}: LinkType) => {\r\n const isDisabled = () => (\r\n url === null || url === ''\r\n );\r\n\r\n const root = 'link';\r\n const classes = [root, className];\r\n\r\n if (icon || iconAfter) {\r\n classes.push(`${root}--has-icon`);\r\n }\r\n\r\n if (isButton) {\r\n classes.push('button');\r\n }\r\n\r\n if (isDisabled()) {\r\n classes.push(`${root}--disabled`);\r\n }\r\n\r\n if (buttonType) {\r\n classes.push(buttonType);\r\n }\r\n\r\n if (buttonColour) {\r\n classes.push(`${root}--${buttonColour}`);\r\n }\r\n\r\n return (\r\n \r\n {icon && (\r\n
\r\n \r\n
\r\n )}\r\n {title}\r\n {iconAfter && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Link;\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport SvgImage from '../SvgImage';\r\nimport { CSS_CLASSES } from '../../../configs';\r\nimport './styles.scss';\r\n\r\nconst bodyElm = document.body;\r\n\r\ninterface OverlayProps {\r\n children: JSX.Element | JSX.Element[];\r\n handleClose: Function;\r\n style?: string;\r\n id?: string;\r\n hasCloseRedirect?: boolean;\r\n containerLess?: boolean;\r\n}\r\n\r\nconst Overlay = ({\r\n children,\r\n handleClose,\r\n style,\r\n id,\r\n hasCloseRedirect,\r\n containerLess,\r\n}: OverlayProps) => {\r\n const closeOverlay = () => {\r\n bodyElm.classList.remove(CSS_CLASSES.overlayIsShowing);\r\n /* timeout to allow animations to complete. */\r\n if (hasCloseRedirect) {\r\n handleClose();\r\n return;\r\n }\r\n setTimeout(() => {\r\n handleClose();\r\n }, 100);\r\n };\r\n\r\n const handleKeyUp = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === 27) {\r\n closeOverlay();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n bodyElm.classList.add(CSS_CLASSES.overlayIsShowing);\r\n /**\r\n * This needs some rework - note quite sure why it's built this way tbh\r\n */\r\n // @ts-ignore\r\n window.addEventListener('keyup', handleKeyUp);\r\n // @ts-ignore\r\n return () => window.removeEventListener('keyup', handleKeyUp);\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n {children}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Overlay;\r\n","import * as React from 'react';\r\nimport { Discipline } from '../../../core/typings';\r\nimport './styles.scss';\r\n\r\ntype Stat = {\r\n label: string;\r\n value: string;\r\n};\r\n\r\ninterface StatsProps {\r\n stats: Stat[];\r\n text?: string;\r\n discipline?: Discipline;\r\n}\r\n\r\nconst Stats = ({\r\n stats,\r\n text,\r\n discipline,\r\n}: StatsProps) => {\r\n const head = stats[0];\r\n const body = stats.slice(1);\r\n\r\n return (\r\n
\r\n
\r\n {text && (\r\n
{text}
\r\n )}\r\n\r\n
{head.label}
\r\n
{head.value}
\r\n\r\n {text && (\r\n
{text}
\r\n )}\r\n
\r\n
    \r\n {body.map((stat: Stat) => (\r\n \r\n
  • \r\n
    {stat.label}
    \r\n
    {stat.value}
    \r\n
  • \r\n
    \r\n ))}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Stats;\r\n","import LocalizationsState from '../typings/localization';\r\n\r\ndeclare const Config: AppConfiguration;\r\n\r\ndeclare const webSettings: {\r\n baseUrl: string;\r\n localizations: LocalizationsState;\r\n};\r\nexport interface AppConfiguration {\r\n env: string;\r\n apiUrl: string;\r\n webUrl: string;\r\n storybookApi?: string;\r\n localizations: LocalizationsState;\r\n}\r\n\r\nexport interface SharePlatformDetail {\r\n key: number;\r\n id: string;\r\n shareUrl: string | null;\r\n mobileOnly: boolean;\r\n}\r\n\r\nexport const config: AppConfiguration = {\r\n env: Config.env,\r\n apiUrl: `${webSettings.baseUrl}${Config.apiUrl}`,\r\n webUrl: webSettings.baseUrl,\r\n storybookApi: Config.storybookApi ? Config.storybookApi : undefined,\r\n localizations: webSettings.localizations,\r\n};\r\n\r\nexport interface CookieConfig {\r\n cookiePolicy: string;\r\n cookiePolicyExpirationDays: number;\r\n xsrfRequestToken: string;\r\n}\r\n\r\nexport const shareConfig: SharePlatformDetail[] = [\r\n {\r\n key: 1,\r\n id: 'facebook',\r\n shareUrl: 'https://www.facebook.com/sharer/sharer.php?u=',\r\n mobileOnly: false,\r\n },\r\n {\r\n key: 2,\r\n id: 'twitter',\r\n shareUrl: 'https://twitter.com/intent/tweet?url=',\r\n mobileOnly: false,\r\n },\r\n {\r\n key: 3,\r\n id: 'whatsapp',\r\n shareUrl: 'whatsapp://send?text=',\r\n mobileOnly: true,\r\n },\r\n {\r\n key: 4,\r\n id: 'copylink',\r\n shareUrl: null,\r\n mobileOnly: false,\r\n },\r\n];\r\n\r\nexport const cookieConfig: CookieConfig = {\r\n cookiePolicy: 'c_policy',\r\n cookiePolicyExpirationDays: 60,\r\n xsrfRequestToken: 'XSRF-REQUEST-TOKEN',\r\n};\r\n","import 'moment/locale/fr';\r\nimport { Notation } from 'notation';\r\nimport { createContext } from 'react';\r\nimport { config } from '../../core/config';\r\nimport LocalizationsState from '../../core/typings/localization';\r\nimport defaultLocalizations from './defaultLocalizations';\r\n\r\ninterface LocalizationsContextType {\r\n locale: string;\r\n translations: LocalizationsState;\r\n setTranslations: (TranslationsState: LocalizationsState) => void;\r\n}\r\n\r\n/**\r\n * Create a notation instance in order to use the notation\r\n * exapand method to mutate the translations to a nested\r\n * object rather than using the dot notation in the keys\r\n * set by the backend. Merge config.localizations with\r\n * defaultLocalizations to avoid missing labels\r\n */\r\nconst translationsNotation = new Notation(\r\n Object.assign(defaultLocalizations, config.localizations),\r\n);\r\n\r\nconst LocalizationContext = createContext(\r\n {\r\n locale: document.documentElement.lang,\r\n translations: translationsNotation.expand().value,\r\n } as LocalizationsContextType,\r\n);\r\n\r\nexport default LocalizationContext;\r\n","export default {\r\n 'cookieBanner.title': 'cookieBanner.title',\r\n 'cookieBanner.acceptText': 'cookieBanner.acceptText',\r\n 'header.forLabel': 'header.forLabel',\r\n 'header.usefulLinksLabel': 'header.usefulLinksLabel',\r\n 'footer.partnersLabel': 'footer.partnersLabel',\r\n 'footer.worldCyclingPartnersLabel': 'footer.worldCyclingPartnersLabel',\r\n 'footer.officialSupplierLabel': 'footer.officialSupplierLabel',\r\n 'relatedContent.title': 'relatedContent.title',\r\n 'competition.racesLabel': 'competition.racesLabel',\r\n 'competition.classLabel': 'competition.classLabel',\r\n 'competition.websiteLabel': 'competition.websiteLabel',\r\n 'competition.emailLabel': 'competition.emailLabel',\r\n 'competition.addressLabel': 'competition.addressLabel',\r\n 'competition.assignmentsLabel': 'competition.assignmentsLabel',\r\n 'competition.appointedByLabel': 'competition.appointedByLabel',\r\n 'calendar.latestLabel': 'calendar.latestLabel',\r\n 'calendar.upcomingLabel': 'calendar.upcomingLabel',\r\n 'calendar.pastLabel': 'calendar.pastLabel',\r\n 'calendar.raceHubLinkLabel': 'calendar.raceHubLinkLabel',\r\n 'calendar.raceCategoryLabel': 'calendar.raceCategoryLabel',\r\n 'calendar.raceTypeLabel': 'calendar.raceTypeLabel',\r\n 'calendar.raceClassLabel': 'calendar.raceClassLabel',\r\n 'calendar.eventTypeLabel': 'calendar.eventTypeLabel',\r\n 'calendar.disciplineLabel': 'calendar.disciplineLabel',\r\n 'calendar.raceYearLabel': 'calendar.raceYearLabel',\r\n 'calendar.searchLabel': 'calendar.searchLabel',\r\n 'calendar.searchText': 'calendar.searchText',\r\n 'calendar.noResults': 'calendar.noResults',\r\n 'calendar.viewMoreLabel': 'calendar.viewMoreLabel',\r\n 'calendar.moreFiltersLabel': 'calendar.moreFiltersLabel',\r\n 'calendar.noSearchResults': 'calendar.noSearchResults',\r\n 'calendar.applyFiltersLabel': 'calendar.applyFiltersLabel',\r\n 'calendar.downloadLabel': 'calendar.downloadLabel',\r\n 'calendar.downloadSelectionLabel': 'calendar.downloadSelectionLabel',\r\n 'calendar.downloadSeasonLabel': 'calendar.downloadSeasonLabel',\r\n 'calendar.downloadHelpText': 'calendar.downloadHelpText',\r\n 'competitionDetails.classLabel': 'competitionDetails.classLabel',\r\n 'competitionDetails.websiteLabel': 'competitionDetails.websiteLabel',\r\n 'competitionDetails.emailLabel': 'competitionDetails.emailLabel',\r\n 'competitionDetails.scheduleTitle': 'competitionDetails.scheduleTitle',\r\n 'competitionDetails.commissiaryTitle': 'competitionDetails.commissiaryTitle',\r\n 'competitionDetails.commissiaryAppointedBy': 'competitionDetails.commissiaryAppointedBy',\r\n 'filters.allFilterText': 'filters.allFilterText',\r\n 'filters.allDisciplinesText': 'filters.allDisciplinesText',\r\n 'filters.allSeasonsText': 'filters.allSeasonsText',\r\n 'filters.allCountriesText': 'filters.allCountriesText',\r\n 'filters.countryLabel': 'filters.countryLabel',\r\n 'filters.seasonLabel': 'filters.seasonLabel',\r\n 'filters.disciplineLabel': 'filters.disciplineLabel',\r\n 'discipline.bmx': 'discipline.bmx',\r\n 'discipline.cpt': 'discipline.cpt',\r\n 'discipline.cro': 'discipline.cro',\r\n 'discipline.ind': 'discipline.ind',\r\n 'discipline.mtb': 'discipline.mtb',\r\n 'discipline.par': 'discipline.par',\r\n 'discipline.pis': 'discipline.pis',\r\n 'discipline.roa': 'discipline.roa',\r\n 'discipline.tri': 'discipline.tri',\r\n 'discipline.gra': 'discipline.gra',\r\n 'discipline.bfr': 'discipline.bfr',\r\n 'discipline.ces': 'discipline.ces',\r\n 'event.dayLabel': 'event.dayLabel',\r\n 'event.liveNowLabel': 'event.liveNowLabel',\r\n 'event.fromLabel': 'event.fromLabel',\r\n 'event.upcomingLabel': 'event.upcomingLabel',\r\n 'event.liveStreamLabel': 'event.liveStreamLabel',\r\n 'event.liveScheduleLabel': 'event.liveScheduleLabel',\r\n 'event.todaysEventsLabel': 'event.todaysEventsLabel',\r\n 'event.watchPlaylistTitle': 'event.watchPlaylistTitle',\r\n 'homepage.liveEventLabel': 'homepage.liveEventLabel',\r\n 'riders.teamCategory': 'riders.teamCategory',\r\n 'riders.searchText': 'riders.searchText',\r\n 'riders.resultsLabel': 'riders.resultsLabel',\r\n 'riders.teamsLabel': 'riders.teamsLabel',\r\n 'riders.ridersLabel': 'riders.ridersLabel',\r\n 'riders.dobLabel': 'riders.dobLabel',\r\n 'riders.nationalityLabel': 'riders.nationalityLabel',\r\n 'riders.sanctionsLabel': 'riders.sanctionsLabel',\r\n 'regulations.overviewLabel': 'regulations.overviewLabel',\r\n 'regulations.rulesInForceLabel': 'regulations.rulesInForceLabel',\r\n 'regulations.upcomingAmendmentsLabel': 'regulations.upcomingAmendmentsLabel',\r\n 'regulations.versionOnLabel': 'regulations.versionOnLabel',\r\n 'regulations.inForceFromLabel': 'regulations.inForceFromLabel',\r\n 'news.latest': 'news.latest',\r\n 'news.noResultsText': 'news.noResultsText',\r\n 'raceHub.commentaryViewMore': 'raceHub.commentaryViewMore',\r\n 'search.searchLabel': 'search.searchLabel',\r\n 'contact.title': 'contact.title',\r\n 'contact.addr': 'contact.addr',\r\n 'contact.tel': 'contact.tel',\r\n 'contact.fax': 'contact.fax',\r\n 'contact.email': 'contact.email',\r\n 'contact.website': 'contact.website',\r\n 'contact.twitter': 'contact.twitter',\r\n 'rankingWidget.title': 'rankingWidget.title',\r\n 'rankingWidget.pointsLabel': 'rankingWidget.pointsLabel',\r\n 'rankingWidget.menLabel': 'rankingWidget.menLabel',\r\n 'rankingWidget.womenLabel': 'rankingWidget.womenLabel',\r\n 'rankingWidget.lastUpdatedLabel': 'rankingWidget.lastUpdatedLabel',\r\n 'rankingWidget.noRankingsLabel': 'rankingWidget.noRankingsLabel',\r\n 'technicalRankings.refineResultsLabel': 'technicalRankings.refineResultsLabel',\r\n 'technicalRankings.searchTeamLabel': 'technicalRankings.searchTeamLabel',\r\n 'technicalRankings.notesLabel': 'technicalRankings.notesLabel',\r\n 'technicalRankings.notesMenDisclaimer': 'technicalRankings.notesMenDisclaimer',\r\n 'technicalRankings.notesWomenDisclaimer': 'technicalRankings.notesWomenDisclaimer',\r\n 'technicalRankings.title': 'technicalRankings.title',\r\n 'technicalRankings.tableTotalLabel': 'technicalRankings.tableTotalLabel',\r\n 'technicalRankings.tableTypeLabel': 'technicalRankings.tableTypeLabel',\r\n};\r\n","import * as React from 'react';\r\nimport './styles.scss';\r\n\r\ninterface TagProps {\r\n text: string;\r\n url: string;\r\n}\r\n\r\nconst Tag = ({ text, url }: TagProps) => (\r\n {text}\r\n);\r\n\r\nexport default Tag;\r\n","/*\r\n Responsive image component.\r\n Details in /README.md\r\n */\r\n\r\nimport * as React from 'react';\r\nimport breakpoints from '../../../breakpoints';\r\nimport 'lazysizes';\r\nimport 'lazysizes/plugins/attrchange/ls.attrchange';\r\nimport './styles.scss';\r\n\r\nconst defaultWidth = '1000';\r\nconst defaultLowQualityWidth = '20';\r\nconst defaultAspectRatio = '16x9';\r\nconst mobileImageTriggerWidthDefault = breakpoints.md;\r\nconst imageQuality = 80;\r\n\r\nconst aspectRatioMap = {\r\n '2x1': 0.5,\r\n '16x9': 0.5625,\r\n '3x2': 0.667,\r\n '4x3': 0.75,\r\n '1x1': 1,\r\n '4x5': 1.2,\r\n '2x3': 1.5,\r\n '6x1': 0.59,\r\n '6x7-promo': 1.16,\r\n};\r\n\r\ninterface ImageProps {\r\n url: string;\r\n alt: string;\r\n aspectRatio?: '2x1' | '16x9' | '3x2' | '4x3' | '1x1' | '4x5' | '2x3' | '6x1' | '6x7-promo';\r\n focalPoint?: string | null;\r\n cropTo?: string | undefined;\r\n lowQualityWidth?: string;\r\n widthSizes?: string[];\r\n aspectRatioMobile?: '2x1' | '16x9' | '3x2' | '4x3' | '1x1' | '4x5' | '2x3' | '6x1' | '6x7-promo';\r\n mobileImageTriggerWidth?: number;\r\n isLoaded?: Function;\r\n hasTransparentBackground?: boolean;\r\n isDarkened?: boolean;\r\n}\r\n\r\nconst Image = ({\r\n url,\r\n alt,\r\n aspectRatio = defaultAspectRatio,\r\n aspectRatioMobile,\r\n mobileImageTriggerWidth = mobileImageTriggerWidthDefault,\r\n cropTo = undefined,\r\n widthSizes = [defaultWidth],\r\n lowQualityWidth = defaultLowQualityWidth,\r\n isLoaded,\r\n hasTransparentBackground = false,\r\n focalPoint,\r\n isDarkened = false, // passed as percentage 80 etc.\r\n}: ImageProps) => {\r\n const setAspectRatio = () => {\r\n if (!aspectRatioMobile) return aspectRatio;\r\n return window.innerWidth < mobileImageTriggerWidth ? aspectRatioMobile : aspectRatio;\r\n };\r\n\r\n return (\r\n \r\n {aspectRatioMobile && (\r\n (\r\n // @ts-ignore\r\n `${url}?fit=thumb&q=${imageQuality}&f=${cropTo || ''}&fl=progressive&w=${widthSize}&h=${Math.ceil(parseInt(widthSize, 10) * aspectRatioMap[aspectRatioMobile])} ${widthSize}w`\r\n ))\r\n }\r\n />\r\n )}\r\n\r\n {\r\n if (isLoaded) {\r\n isLoaded();\r\n }\r\n }}\r\n data-sizes=\"auto\"\r\n style={{ objectPosition: focalPoint || 'initial' }}\r\n // @ts-ignore\r\n data-src={`${url}?fit=thumb&w=${lowQualityWidth}&f=${cropTo || ''}&h=${Math.ceil(parseInt(lowQualityWidth, 10) * aspectRatioMap[setAspectRatio()])}`}\r\n data-srcset={\r\n widthSizes.map((widthSize) => (\r\n // @ts-ignore\r\n `${url}?fit=thumb&q=${imageQuality}&f=${cropTo || ''}&fl=progressive&w=${widthSize}&h=${Math.ceil(parseInt(widthSize, 10) * aspectRatioMap[aspectRatio])} ${widthSize}w`\r\n ))\r\n }\r\n className={`lazyload blur-up ${isDarkened ? 'has-opacity' : ''}`}\r\n alt={alt || 'image with no description'}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default Image;\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport { Image as ImageType } from '../../../typings';\r\nimport 'lazysizes';\r\nimport 'lazysizes/plugins/attrchange/ls.attrchange';\r\nimport './styles.scss';\r\n\r\nconst defaultWidths = ['400', '800', '1200', '2400', '4000'];\r\n\r\nconst aspectRatioMap: Record = {\r\n '2x1': 0.5,\r\n '16x9': 0.5625,\r\n '3x2': 0.667,\r\n '4x3': 0.75,\r\n '1x1': 1,\r\n '4x5': 1.2,\r\n '2x3': 1.5,\r\n};\r\n\r\ninterface ImageObjectProps {\r\n image: ImageType;\r\n widthSizes?: string[];\r\n isDarkened?: boolean;\r\n useFocalPoint?: boolean;\r\n fitType?: 'contain' | 'cover'\r\n isLoaded?: () => void;\r\n noAnimate?: boolean;\r\n aspectRatio?: string;\r\n}\r\n\r\ninterface FocalStyle {\r\n objectPosition: string;\r\n}\r\n\r\nconst ImageObject = ({\r\n image,\r\n widthSizes = defaultWidths,\r\n aspectRatio,\r\n isDarkened = false,\r\n useFocalPoint = true,\r\n fitType = 'cover',\r\n isLoaded,\r\n noAnimate,\r\n}: ImageObjectProps) => {\r\n const [focalPoint, setFocalPoint] = useState();\r\n const [srcset, setSrcset] = useState();\r\n\r\n useEffect(() => {\r\n if (image.focalPoint) {\r\n // @ts-ignore\r\n const xPercentile = (image.focalPoint.x / image.file.details?.image?.width) * 100;\r\n // @ts-ignore\r\n const yPercentile = (image.focalPoint.y / image.file.details?.image?.height) * 100;\r\n setFocalPoint({\r\n objectPosition: `${xPercentile}% ${yPercentile}%`,\r\n });\r\n }\r\n\r\n const src = widthSizes\r\n .map((size: string, index: number) => `${image.file.url}?fit=thumb&fl=progressive&w=${size}&h=${aspectRatio ? Math.ceil(Number(widthSizes[index]) * aspectRatioMap[aspectRatio]) : ''} ${size}w`);\r\n\r\n setSrcset(src.join(','));\r\n }, [image]);\r\n\r\n const classes = [\r\n 'image-object',\r\n `image-object--${fitType}`,\r\n 'lazyload',\r\n ];\r\n if (isDarkened) {\r\n classes.push('has-opacity');\r\n }\r\n if (noAnimate) {\r\n classes.push('image-object--no-animate');\r\n }\r\n\r\n return (\r\n isLoaded?.()}\r\n data-sizes=\"auto\"\r\n data-srcset={srcset}\r\n data-src={`${image.file.url}?fit=thumb&fl=progressive&w=${widthSizes[0]}&h=${aspectRatio ? Math.ceil(Number(widthSizes[0]) * aspectRatioMap[aspectRatio]) : ''}`}\r\n className={classes.join(' ')}\r\n alt={image.title ? image.title : 'image with no description'}\r\n style={useFocalPoint ? focalPoint : undefined}\r\n />\r\n );\r\n};\r\n\r\nexport default ImageObject;\r\n","import * as React from 'react';\r\nimport './styles.scss';\r\n\r\ninterface UnderlineTitleProps {\r\n title: string;\r\n containerTheme: string;\r\n className?: string;\r\n disableUppercase?: boolean;\r\n}\r\n\r\nconst UnderlineTitle = ({\r\n title,\r\n containerTheme,\r\n className,\r\n disableUppercase,\r\n}: UnderlineTitleProps) => (\r\n

\r\n {title}\r\n

\r\n);\r\n\r\nexport default UnderlineTitle;\r\n","const between = (min: number, max: number) => (\r\n Math.floor((Math.random() * (max - min)) + (1 + min))\r\n);\r\n\r\nconst isNumber = (value: any) => (\r\n Number.isInteger(value) && !Number.isNaN(value)\r\n);\r\n\r\nconst toOrdinal = (number: number) => {\r\n const b = number % 10;\r\n\r\n if (((number % 100) / 10) === 1) {\r\n return `${number}th`;\r\n }\r\n if (b === 1) {\r\n return `${number}st`;\r\n }\r\n if (b === 2) {\r\n return `${number}nd`;\r\n }\r\n if (b === 3) {\r\n return `${number}rd`;\r\n }\r\n\r\n return `${number}th`;\r\n};\r\n\r\nexport {\r\n between,\r\n isNumber,\r\n toOrdinal,\r\n};\r\n","import * as React from 'react';\r\nimport { isEmpty } from 'lodash';\r\nimport useHabitat from '../../../hooks/useHabitat';\r\nimport './styles.scss';\r\nimport SvgImage from '../SvgImage';\r\nimport Contact from '../Contact';\r\nimport RichText from '../RichText';\r\nimport UnderlineTitle from '../UnderlineTitle';\r\nimport { Link, Contacts } from '../../../typings';\r\n\r\ninterface ContentProps {\r\n title?: string;\r\n intro?: string;\r\n contact?: Contacts;\r\n content?: string;\r\n link?: Link;\r\n secondaryLink?: Link;\r\n downloads?: Link[];\r\n containerTheme?: string;\r\n isTitleFloating?: boolean;\r\n disableUppercase?: boolean;\r\n}\r\n\r\nconst Content = ({\r\n title,\r\n intro,\r\n contact,\r\n content,\r\n link,\r\n secondaryLink,\r\n downloads,\r\n containerTheme = 'white',\r\n isTitleFloating,\r\n disableUppercase,\r\n}: ContentProps) => {\r\n useHabitat();\r\n\r\n return (\r\n
\r\n {Boolean(title || contact) && (\r\n
\r\n {title && (\r\n \r\n )}\r\n\r\n {(contact && !isEmpty(contact)) && (\r\n \r\n )}\r\n
\r\n )}\r\n\r\n {!title && (\r\n <>\r\n {intro && (!contact || isEmpty(contact)) && (!title\r\n ?

{intro}

\r\n :

{intro}

)}\r\n \r\n )}\r\n
\r\n {title && (\r\n <>\r\n {intro && (contact || !isEmpty(contact)) && (title\r\n ?

{intro}

\r\n :

{intro}

)}\r\n \r\n )}\r\n\r\n {content && (\r\n \r\n )}\r\n\r\n {downloads && (\r\n
    \r\n {downloads.map((download) => (\r\n
  • \r\n \r\n {download.title}\r\n \r\n \r\n
  • \r\n ))}\r\n
\r\n )}\r\n\r\n {link && (\r\n /* eslint-disable-next-line react/jsx-no-target-blank */\r\n \r\n {link.title}\r\n \r\n \r\n )}\r\n {secondaryLink && (\r\n /* eslint-disable-next-line react/jsx-no-target-blank */\r\n \r\n {secondaryLink.title}\r\n \r\n \r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Content;\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport SvgImage from '../SvgImage';\r\nimport { Contacts } from '../../../typings';\r\nimport LocalizationContext from '../../../contexts/Localizations';\r\nimport './styles.scss';\r\n\r\ninterface ContactProps {\r\n contact: Contacts;\r\n containerTheme: string;\r\n}\r\n\r\nconst Contact = ({\r\n contact,\r\n containerTheme,\r\n}: ContactProps) => {\r\n const { translations } = useContext(LocalizationContext);\r\n // Adds space between every characters apart from (0)\r\n // Required for screen readers to read phone numbers properly and include all character\r\n const toReadable = (phoneNumber: string): string => phoneNumber\r\n .split(' ')\r\n .join('')\r\n .split('')\r\n .join(' ')\r\n .replace('( 0 )', '(0)');\r\n\r\n return (\r\n
\r\n

\r\n {translations.contact.title}\r\n

\r\n\r\n
    \r\n {(contact.addr && contact.addr.length) && (\r\n
  • \r\n \r\n {`${translations.contact.addr}:`}\r\n \r\n {contact.addr}\r\n
  • \r\n )}\r\n {(contact.tel && contact.tel.length) && (\r\n
  • \r\n \r\n {`${translations.contact.tel}:`}\r\n \r\n \r\n {contact.tel}\r\n \r\n
  • \r\n )}\r\n {(contact.fax && contact.fax.length) && (\r\n
  • \r\n \r\n {`${translations.contact.fax}:`}\r\n \r\n \r\n {contact.fax}\r\n \r\n
  • \r\n )}\r\n {(contact.email && contact.email.length) && (\r\n
  • \r\n \r\n {`${translations.contact.email}:`}\r\n \r\n \r\n {contact.email}\r\n \r\n
  • \r\n )}\r\n {(contact.website && contact.website.length) && (\r\n
  • \r\n \r\n {`${translations.contact.website}:`}\r\n \r\n \r\n {contact.website}\r\n \r\n
  • \r\n )}\r\n
  • \r\n
      \r\n {(contact.facebook && contact.facebook.length) && (\r\n
    • \r\n \r\n \r\n \r\n
    • \r\n )}\r\n {(contact.instagram && contact.instagram.length) && (\r\n
    • \r\n \r\n \r\n \r\n
    • \r\n )}\r\n {(contact.twitter && contact.twitter.length) && (\r\n
    • \r\n \r\n \r\n \r\n
    • \r\n )}\r\n
    \r\n
  • \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Contact;\r\n","import * as React from 'react';\r\nimport './styles.scss';\r\n\r\ninterface RichTextProps {\r\n content: string;\r\n containerTheme: string;\r\n}\r\n\r\nconst RichText = ({\r\n content,\r\n containerTheme,\r\n}: RichTextProps) => (\r\n
\r\n \r\n
\r\n);\r\n\r\nexport default RichText;\r\n","import React, { useState, useEffect } from 'react';\r\nimport api from '../../core/api/models';\r\nimport { Loader } from '../common';\r\nimport Podium from '../Podium';\r\nimport ResponsiveTable from '../common/ResponsiveTable';\r\nimport { toOrdinal } from '../../utilities/number';\r\nimport ResultsTableProps, { Results } from './type';\r\nimport './styles.scss';\r\n\r\nconst riderRowHeader = ({ values }: Results, index: number) => (\r\n
= 10 ? 'results-table__row-header--small' : ''}\r\n `.trim()}\r\n >\r\n {values.rank && (\r\n \r\n {values.rank}\r\n
\r\n )}\r\n
\r\n
{values.firstname}
\r\n
{values.lastname}
\r\n {values.team && (\r\n
{values.team}
\r\n )}\r\n
\r\n \r\n);\r\n\r\nconst teamRowHeader = ({ values }: Results, index: number) => (\r\n
= 10 ? 'results-table__row-header--small' : ''}`}>\r\n \r\n {values.rank}\r\n
\r\n
{values.team}
\r\n \r\n);\r\n\r\nconst ResultsTable = ({\r\n title,\r\n headers,\r\n results,\r\n podium,\r\n asyncRequest,\r\n nested,\r\n}: ResultsTableProps) => {\r\n const [isLoading, setIsLoading] = useState(!!asyncRequest);\r\n const [apiError, setApiError] = useState();\r\n const [resultData, setResultData] = useState({\r\n title,\r\n headers,\r\n results,\r\n podium,\r\n });\r\n\r\n const getRow = (result: Results) => {\r\n // Remove this hacky mutation once the Russia situation has blown over. See this ticket: https://stadion-uci.atlassian.net/browse/UCIKB-410\r\n let modifiedResult = result;\r\n if (modifiedResult.values.nationality === 'RUS' || modifiedResult.values.nationality === 'BLR') {\r\n modifiedResult = {\r\n ...result,\r\n values: {\r\n ...result.values,\r\n nationality: '***',\r\n },\r\n };\r\n }\r\n return ({\r\n row: modifiedResult.values,\r\n ...((modifiedResult.table\r\n && { Table: }) || {}),\r\n });\r\n };\r\n\r\n const getRowHeader = (result: Results, index: number) => {\r\n if (result.headerType === 'team') {\r\n return teamRowHeader(result, index);\r\n }\r\n if (result.headerType === 'rider') {\r\n return riderRowHeader(result, index);\r\n }\r\n\r\n return
;\r\n };\r\n\r\n const fetchResults = async () => {\r\n try {\r\n const data = await api.calendar.getResult({\r\n eventCode: asyncRequest?.eventCode as string,\r\n raceType: asyncRequest?.raceType as string,\r\n raceName: asyncRequest?.raceName as string || undefined,\r\n disciplineCode: asyncRequest?.disciplineCode as string,\r\n });\r\n\r\n setResultData({\r\n ...resultData,\r\n ...data,\r\n });\r\n setIsLoading(false);\r\n } catch (error) {\r\n setApiError(error as string);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (asyncRequest) {\r\n if (asyncRequest.onBeforeLoad) {\r\n asyncRequest.onBeforeLoad();\r\n }\r\n\r\n fetchResults().then(asyncRequest.onLoad);\r\n }\r\n }, []);\r\n\r\n return (\r\n
\r\n {resultData.title && (\r\n

{resultData.title}

\r\n )}\r\n\r\n {resultData.podium && (\r\n <>\r\n \r\n\r\n
\r\n \r\n )}\r\n\r\n {apiError && (\r\n
\r\n

{apiError}

\r\n
\r\n )}\r\n\r\n {isLoading && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n {!isLoading && (\r\n , Table?: JSX.Element\r\n }[]}\r\n stickyCol={resultData.results.map(getRowHeader)}\r\n className=\"results-table__table\"\r\n moreClassName=\"results-table__table-more\"\r\n nested={nested}\r\n />\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default ResultsTable;\r\n","import * as React from 'react';\r\nimport PodiumProps from './type';\r\nimport { SvgImage } from '../common';\r\nimport './styles.scss';\r\n\r\nconst Podium = ({\r\n podium,\r\n discipline,\r\n}: PodiumProps) => (\r\n
\r\n
    \r\n {podium.map(({\r\n firstname,\r\n lastname,\r\n team,\r\n time,\r\n rank,\r\n }, index: number) => {\r\n // If tied, position should be same for both podium items.\r\n // Fallback to index if rank not present (e.g. for non-country events).\r\n const position = rank ?? index + 1;\r\n\r\n return (\r\n \r\n
    \r\n {position === 1 && (\r\n \r\n )}\r\n {position > 1 && position}\r\n
    \r\n
    \r\n
    \r\n {firstname}\r\n
    \r\n
    \r\n {lastname}\r\n
    \r\n
    \r\n {team}\r\n
    \r\n
    \r\n {time}\r\n
    \r\n
    \r\n \r\n );\r\n })}\r\n
\r\n
\r\n);\r\n\r\nexport default Podium;\r\n","import { useEffect } from 'react';\r\n\r\nconst useHabitat = (): Function => {\r\n useEffect(() => {\r\n if (window.updateHabitat) {\r\n window.updateHabitat();\r\n }\r\n }, []);\r\n\r\n return window.updateHabitat as Function;\r\n};\r\n\r\nexport default useHabitat;\r\n","import { Image } from '../typings/index';\r\n\r\ndeclare global {\r\n interface Document {\r\n documentMode?: any;\r\n }\r\n}\r\n\r\nconst isIE = () => (\r\n !!window.MSInputMethodContext && !!document.documentMode\r\n);\r\n\r\n// Insert url param\r\nconst insertUrlParam = (key: string, value: string, includeHash?: boolean) => {\r\n // @ts-ignore\r\n if (history.pushState) {\r\n const searchParams = new URLSearchParams(window.location.search);\r\n searchParams.set(key, value);\r\n let newurl = `${window.location.protocol}//${window.location.host}${window.location.pathname}?${searchParams.toString()}`;\r\n if (includeHash && window.location.hash) {\r\n newurl = `${newurl}${window.location.hash}`;\r\n }\r\n window.history.pushState({ path: newurl }, '', newurl);\r\n }\r\n};\r\n\r\n// Removes all query string entires\r\nconst removeAllQueryStrings = () => {\r\n const url = window.location.href.replace(/(\\?.*)|(@.*)/g, '');\r\n window.history.pushState({ path: url }, '', url);\r\n};\r\n\r\n// Get All url params\r\nconst getAllUrlParams = (search: string) => {\r\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\r\n const params: { [key: string]: string } = {};\r\n hashes.map((hash) => {\r\n const [key, val] = hash.split('=');\r\n params[key] = decodeURIComponent(val);\r\n return true;\r\n });\r\n return params;\r\n};\r\n\r\n// Get param value\r\nconst getUrlParamValue = (key: any) => {\r\n const search = Object.entries(getAllUrlParams(window.location.href)).filter((param) => (\r\n param[0] === key\r\n ));\r\n return search[0] ? search[0][1] : null;\r\n};\r\n\r\n// Script exists in head of document.\r\n// Taken from: https://github.com/kaimallea/isMobile\r\nconst isMobile = () => (\r\n /Mobi/.test(navigator.userAgent)\r\n);\r\n\r\nconst scrollIntoView = (elemToScrollTo: HTMLElement, behaviour: ScrollBehavior) => {\r\n if (!isIE()) {\r\n elemToScrollTo.scrollIntoView({\r\n behavior: behaviour,\r\n });\r\n }\r\n};\r\n\r\nconst isPortrait = (image: Image) => (\r\n // @ts-ignore\r\n (image.file.details.image.height > image.file.details.image.width)\r\n);\r\n\r\nconst elementInViewport = (el: any) => {\r\n let top = el.offsetTop;\r\n let left = el.offsetLeft;\r\n const width = el.offsetWidth;\r\n const height = el.offsetHeight;\r\n\r\n while (el.offsetParent) {\r\n // eslint-disable-next-line no-param-reassign\r\n el = el.offsetParent;\r\n top += el.offsetTop;\r\n left += el.offsetLeft;\r\n }\r\n\r\n return (\r\n top >= window.pageYOffset\r\n && left >= window.pageXOffset\r\n && (top + height) <= (window.pageYOffset + window.innerHeight)\r\n && (left + width) <= (window.pageXOffset + window.innerWidth)\r\n );\r\n};\r\n\r\nconst toDataURL = (url: string, callback: Function) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.onload = () => {\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n if (callback) {\r\n callback(reader.result);\r\n }\r\n };\r\n reader.readAsDataURL(xhr.response);\r\n };\r\n xhr.open('GET', url);\r\n xhr.responseType = 'blob';\r\n xhr.send();\r\n};\r\n\r\nexport {\r\n insertUrlParam,\r\n getAllUrlParams,\r\n getUrlParamValue,\r\n removeAllQueryStrings,\r\n isMobile,\r\n scrollIntoView,\r\n isPortrait,\r\n elementInViewport,\r\n toDataURL,\r\n};\r\n","import React from 'react';\r\nimport { Accordion } from '../common';\r\nimport ResultsTable from '../ResultsTable';\r\nimport ResultsAccordionProps, { Accordion as AccordionType, Content as ContentType, Event } from './type';\r\nimport './styles.scss';\r\n\r\ninterface ContentProps {\r\n eventCode: string;\r\n disciplineCode: string;\r\n raceType: string;\r\n title: string;\r\n raceName?: string;\r\n onBeforeLoad?: () => {};\r\n onLoad?: () => {};\r\n}\r\n\r\nconst Content = ({\r\n eventCode,\r\n disciplineCode,\r\n raceType,\r\n title,\r\n raceName,\r\n onBeforeLoad,\r\n onLoad,\r\n}: ContentProps) => (\r\n
\r\n {}),\r\n onBeforeLoad,\r\n }}\r\n />\r\n
\r\n);\r\nconst ResultsAccordion = ({\r\n accordion,\r\n discipline,\r\n disciplineCode,\r\n}: ResultsAccordionProps) => {\r\n const toContentPanel = (event: Event) => ({\r\n label: {event.title},\r\n content: (\r\n \r\n ),\r\n isAsync: true,\r\n });\r\n\r\n const toNestedPanel = (nested: AccordionType | ContentType) => {\r\n const { results } = nested as ContentType;\r\n if (results && results.length === 1) {\r\n const event = results[0];\r\n return {\r\n label: {nested.label},\r\n content: (\r\n \r\n ),\r\n isAsync: true,\r\n };\r\n }\r\n return {\r\n label: {nested.label},\r\n content: (nested as AccordionType).accordion\r\n ? \r\n : ,\r\n };\r\n };\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\nexport default ResultsAccordion;\r\n","import * as React from 'react';\r\nimport {\r\n useContext, useState, useEffect, useRef,\r\n} from 'react';\r\nimport moment from 'moment';\r\nimport { fr } from 'date-fns/locale/fr';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport PerfectScrollbar from 'react-perfect-scrollbar';\r\nimport DatePicker, { registerLocale } from 'react-datepicker';\r\nimport useOutsideAlerter from '../../../hooks/UseOutsideAlerter';\r\nimport LocalizationContext from '../../../contexts/Localizations';\r\nimport SvgImage from '../SvgImage';\r\nimport './styles.scss';\r\n\r\nregisterLocale('fr', fr);\r\n\r\ninterface JumpListOption {\r\n displayText: string;\r\n value: string;\r\n selectedValue?: boolean;\r\n visible?: boolean;\r\n name?: string;\r\n}\r\n\r\ninterface JumpListProps {\r\n items: JumpListOption[];\r\n selectedValue?: string;\r\n action: Function;\r\n icon?: string;\r\n theme?: string;\r\n useScroller?: boolean;\r\n useSearch?: boolean;\r\n name?: string;\r\n disableFirst?: boolean;\r\n withDatePicker?: boolean;\r\n defaultDatePickerValue?: Date;\r\n onDateChange?: Function;\r\n includeDates?: Date[];\r\n datePickerLocale?: string;\r\n}\r\n\r\nconst JumpList = ({\r\n items,\r\n action,\r\n selectedValue,\r\n icon = 'icon-arrow-down',\r\n theme = 'default',\r\n useScroller = false,\r\n useSearch = false,\r\n name,\r\n disableFirst = false,\r\n withDatePicker = false,\r\n defaultDatePickerValue,\r\n onDateChange,\r\n includeDates,\r\n datePickerLocale,\r\n}: JumpListProps) => {\r\n const wrapperRef = useRef>(null);\r\n const [value, setValue] = useState();\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [options, setOptions] = useState();\r\n const [isClosing, setIsClosing] = useState(false);\r\n const [searchValue, setSearchValue] = useState(null);\r\n const { translations } = useContext(LocalizationContext);\r\n\r\n /**\r\n * Closes the open view\r\n */\r\n const close = () => {\r\n setIsClosing(true);\r\n setTimeout(() => {\r\n setIsClosing(false);\r\n setIsOpen(false);\r\n if (useSearch) {\r\n setSearchValue(null);\r\n }\r\n }, useSearch ? 0 : 300);\r\n };\r\n\r\n /**\r\n * This will tigger the close method when the user\r\n * interacts outside wrapperRef\r\n */\r\n useOutsideAlerter(wrapperRef, () => {\r\n close();\r\n });\r\n\r\n /**\r\n * Toggle open/close\r\n * @param event\r\n * @returns\r\n */\r\n const toggle = (event?: React.MouseEvent) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n if (disableFirst) {\r\n return null;\r\n }\r\n\r\n if (isOpen) {\r\n return close();\r\n }\r\n\r\n return setIsOpen(!isOpen);\r\n };\r\n\r\n /**\r\n * This remaps the options base of the items and selectedValue\r\n * props.\r\n * @returns\r\n */\r\n const mapSelection = () => items.map((item, index) => ({\r\n ...item,\r\n name,\r\n selectedValue: item.value === selectedValue,\r\n visible: !(withDatePicker && defaultDatePickerValue && index > 4),\r\n }));\r\n\r\n /**\r\n * This handels the change event on the drop down.\r\n * @param event\r\n * @param optionIndex\r\n */\r\n const handleChange = (event: React.MouseEvent, optionIndex: number) => {\r\n event.preventDefault();\r\n setOptions(mapSelection());\r\n setValue(options ? options[optionIndex] : undefined);\r\n close();\r\n\r\n if (action && typeof action === 'function') {\r\n action(options ? options[optionIndex] : undefined);\r\n }\r\n };\r\n\r\n /**\r\n * Component has mounted hook\r\n */\r\n useEffect(() => {\r\n if (items.length) {\r\n const optionsSelection = mapSelection();\r\n setOptions(optionsSelection);\r\n }\r\n }, []);\r\n\r\n /**\r\n * Observe the options state to determine the selected value.\r\n * If a new value is selected with will trigger and setValue in state.\r\n */\r\n useEffect(() => {\r\n if (options) {\r\n const selected: JumpListOption = options.filter(\r\n (item: JumpListOption) => item.value === selectedValue,\r\n )[0];\r\n\r\n setValue(selected || options[0]);\r\n }\r\n }, [options, selectedValue]);\r\n\r\n /**\r\n * Observe the search value term to filter down the visible\r\n * option in the list. This is only applicable if the user\r\n * has turned on useSearch in props.\r\n */\r\n useEffect(() => {\r\n if (options) {\r\n if (searchValue === null || searchValue === '') {\r\n setOptions(mapSelection());\r\n } else {\r\n const filteredOptions: JumpListOption[] = options?.map((option) => ({\r\n ...option,\r\n visible: option.displayText.toLowerCase().includes(searchValue.toLowerCase()),\r\n }));\r\n\r\n setOptions(filteredOptions);\r\n }\r\n }\r\n }, [searchValue, selectedValue, items]);\r\n\r\n /**\r\n * Creates a list option\r\n * @param option\r\n * @param index\r\n * @returns\r\n */\r\n const createOption = (option: JumpListOption, index: number) => (\r\n
  • \r\n handleChange(event, index)}>\r\n {option.displayText}\r\n \r\n
  • \r\n );\r\n\r\n /**\r\n * Creates the search JSX controls. This is only applicable\r\n * if the user has turned on useSearch in props.\r\n * @returns\r\n */\r\n const createSearch = () => (\r\n
    \r\n (\r\n setSearchValue((event.currentTarget as HTMLInputElement).value)\r\n )}\r\n />\r\n {Boolean(!options?.filter((option) => option.visible).length) && (\r\n
    \r\n {`No selection found for ${searchValue}.`}\r\n {/* Needs Laguage label */}\r\n
    \r\n )}\r\n
    \r\n );\r\n\r\n /**\r\n * Creates the option list.\r\n * @returns\r\n */\r\n const createOptions = () => {\r\n if (useScroller) {\r\n return (\r\n
    \r\n {useSearch && createSearch()}\r\n \r\n <>\r\n {options && (\r\n
      \r\n {options?.map((option, key) => option.visible && createOption(option, key))}\r\n
    \r\n )}\r\n\r\n {withDatePicker && defaultDatePickerValue && (\r\n {\r\n if (onDateChange) {\r\n const dateIndex = options?.findIndex((option) => {\r\n const optionMoment = moment(option.value).format('DD-MM-YYYY');\r\n const selectedMoment = moment(date).format('DD-MM-YYYY');\r\n\r\n return optionMoment === selectedMoment;\r\n });\r\n\r\n if (dateIndex !== undefined && dateIndex >= 0) {\r\n onDateChange(date);\r\n\r\n handleChange(event, dateIndex);\r\n }\r\n }\r\n }}\r\n includeDates={includeDates}\r\n inline\r\n locale={datePickerLocale}\r\n />\r\n )}\r\n \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n return (\r\n
    \r\n {useSearch && createSearch()}\r\n {options && (\r\n
      \r\n {options?.map((option, key) => option.visible && createOption(option, key))}\r\n
    \r\n )}\r\n\r\n {withDatePicker && defaultDatePickerValue && (\r\n \r\n )}\r\n
    \r\n );\r\n };\r\n\r\n return (\r\n \r\n
    \r\n {value && (\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n {createOptions()}\r\n
    \r\n );\r\n};\r\n\r\nexport default JumpList;\r\n","export default {\r\n xxs: 375,\r\n xs: 450,\r\n sm: 620,\r\n md: 768,\r\n ml: 870,\r\n lg: 1024,\r\n xl: 1300,\r\n xxl: 1440,\r\n xxxl: 1740,\r\n xxxxl: 1900,\r\n};\r\n","/* eslint-disable react/no-array-index-key */\r\nimport React, { useState, useEffect, Fragment } from 'react';\r\nimport SvgImage from '../SvgImage';\r\nimport './styles.scss';\r\n\r\ninterface ResponsiveTableProps {\r\n headers: {\r\n alwaysVisible: boolean;\r\n key: string;\r\n label: string;\r\n hiddenOnMobile?: boolean;\r\n }[];\r\n rows: {\r\n row: Record;\r\n Table?: JSX.Element;\r\n }[];\r\n stickyCol?: JSX.Element[];\r\n className?: string;\r\n moreClassName?: string;\r\n headerClassName?: string;\r\n rowClassName?: string;\r\n cellClassName?: string;\r\n nested?: boolean;\r\n}\r\n\r\nconst ResponsiveTable = ({\r\n headers,\r\n rows,\r\n stickyCol,\r\n className,\r\n moreClassName,\r\n headerClassName,\r\n rowClassName,\r\n cellClassName,\r\n nested,\r\n}: ResponsiveTableProps) => {\r\n const [isExpanded, setExpanded] = useState(false);\r\n const [rowExpandedStates, setRowExpandedStates] = useState>({});\r\n\r\n const toggleExpandTable = () => {\r\n setExpanded(!isExpanded);\r\n };\r\n\r\n const toggleExpandRow = (rowIndex: number) => {\r\n setRowExpandedStates({\r\n ...rowExpandedStates,\r\n [rowIndex]: !rowExpandedStates[rowIndex],\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (rows.some((row) => row.Table)) {\r\n setRowExpandedStates(Object.fromEntries(Object.entries(rows.map(() => false))));\r\n }\r\n }, []);\r\n\r\n return (\r\n
    \r\n {!nested && (\r\n
    \r\n \r\n Show details\r\n \r\n
    \r\n )}\r\n\r\n
    \r\n \r\n \r\n \r\n {stickyCol && (\r\n \r\n )}\r\n\r\n {headers.map((header) => (\r\n \r\n {header.label}\r\n \r\n ))}\r\n\r\n {rows.some((row) => row.Table) && (\r\n \r\n
    \r\n expand\r\n
    \r\n \r\n )}\r\n \r\n \r\n \r\n {rows.map(({ row, Table }, rowIndex) => (\r\n \r\n \r\n {headers.map((header, colIndex) => (\r\n \r\n {stickyCol && colIndex === 0 && (\r\n {stickyCol[rowIndex]}\r\n )}\r\n \r\n {row[header.key]}\r\n \r\n \r\n ))}\r\n\r\n {Table && (\r\n \r\n toggleExpandRow(rowIndex)}\r\n >\r\n \r\n \r\n \r\n )}\r\n \r\n {Table && (\r\n \r\n \r\n { Table }\r\n \r\n \r\n )}\r\n \r\n ))}\r\n \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default ResponsiveTable;\r\n","import * as React from 'react';\r\nimport moment from 'moment';\r\nimport { Link as LinkType } from '../../../typings';\r\nimport './styles.scss';\r\n\r\ninterface DateAndCategoryProps {\r\n date?: string;\r\n category?: LinkType;\r\n dateFormat?: string;\r\n}\r\n\r\nconst DateAndCategory = ({ date, category, dateFormat }: DateAndCategoryProps) => (\r\n
    \r\n {category && (\r\n \r\n )}\r\n {date && (\r\n \r\n )}\r\n\r\n
    \r\n);\r\n\r\nexport default DateAndCategory;\r\n","import * as React from 'react';\r\nimport { useState, useEffect, useRef } from 'react';\r\nimport useHabitat from '../../../hooks/useHabitat';\r\nimport Content from '../Content';\r\nimport { Discipline } from '../../../core/typings';\r\nimport './styles.scss';\r\n\r\ninterface AccordionPanelProps {\r\n index: number;\r\n activeTab: boolean;\r\n toggleTab: Function;\r\n label: string | JSX.Element;\r\n content: string | JSX.Element | JSX.Element[];\r\n themeColor: string;\r\n discipline?: string;\r\n isAsync?: boolean;\r\n isResults?: boolean;\r\n}\r\n\r\nconst AccordionPanel = ({\r\n index,\r\n activeTab,\r\n toggleTab,\r\n label,\r\n content,\r\n themeColor,\r\n discipline,\r\n isAsync,\r\n isResults,\r\n}: AccordionPanelProps) => {\r\n const [height, setHeight] = useState('0px');\r\n const [asyncContentLoaded, setAsyncContentLoaded] = useState(false);\r\n const wrapper = useRef(null);\r\n\r\n const calculatePanelHeight = () => {\r\n const panelElement = wrapper.current as HTMLDivElement;\r\n\r\n if (activeTab) {\r\n panelElement.ontransitionend = () => {\r\n setHeight('auto');\r\n };\r\n\r\n setHeight(`${panelElement.scrollHeight}px`);\r\n } else {\r\n panelElement.ontransitionend = null;\r\n\r\n setHeight(`${panelElement.scrollHeight}px`);\r\n\r\n requestAnimationFrame(() => {\r\n setHeight('0px');\r\n });\r\n }\r\n };\r\n\r\n const handleLoadedContent = () => {\r\n setAsyncContentLoaded(true);\r\n calculatePanelHeight();\r\n };\r\n\r\n useEffect(() => {\r\n calculatePanelHeight();\r\n }, [activeTab]);\r\n\r\n return (\r\n
    \r\n toggleTab(index)}\r\n >\r\n {label}\r\n \r\n \r\n {typeof content === 'string' && (\r\n
    \r\n \r\n
    \r\n )}\r\n\r\n {!isAsync && React.isValidElement(content) && content}\r\n\r\n {isAsync && (activeTab || asyncContentLoaded) && React.isValidElement(content) && (\r\n \r\n )}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport interface AccordionPanelType {\r\n label: string | JSX.Element;\r\n content: string | JSX.Element | JSX.Element[];\r\n}\r\n\r\ninterface AccordionProps {\r\n panels: AccordionPanelType[];\r\n themeColor: string;\r\n discipline?: Discipline;\r\n isResults?: boolean;\r\n}\r\n\r\ninterface PanelsState {\r\n label: string | JSX.Element;\r\n content: string | JSX.Element | JSX.Element[];\r\n activeTab: boolean;\r\n}\r\n\r\nconst Accordion = ({\r\n panels,\r\n themeColor,\r\n discipline,\r\n isResults,\r\n}: AccordionProps) => {\r\n const [panelsInState, setPanelsInState] = useState([]);\r\n useHabitat();\r\n\r\n const toggleTab = (index: number) => {\r\n const current: PanelsState[] = [...panelsInState];\r\n\r\n current[index].activeTab = !panelsInState[index].activeTab;\r\n setPanelsInState(current);\r\n };\r\n\r\n useEffect(() => {\r\n if (panels) {\r\n const mappedPanels: PanelsState[] = panels.map((panel) => ({\r\n ...panel,\r\n activeTab: false,\r\n }));\r\n\r\n setPanelsInState(mappedPanels);\r\n }\r\n }, []);\r\n\r\n return (\r\n
    \r\n {panelsInState && (\r\n <>\r\n {panelsInState.map((panel, index) => (\r\n \r\n ))}\r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nexport default Accordion;\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport { Image as ImageType } from '../../../typings';\r\nimport 'lazysizes';\r\nimport 'lazysizes/plugins/attrchange/ls.attrchange';\r\n\r\nconst defaultWidths = ['400', '800', '1200', '2400', '4000'];\r\n\r\ninterface ImageBasicProps {\r\n image: ImageType;\r\n widthSizes?: string[];\r\n isDarkened?: boolean;\r\n useIntrinsicHeight?: boolean;\r\n}\r\n\r\nconst ImageBasic = ({\r\n image,\r\n widthSizes = defaultWidths,\r\n isDarkened = false,\r\n useIntrinsicHeight,\r\n}: ImageBasicProps) => {\r\n const [isLoaded, setIsLoaded] = useState(false);\r\n const [srcset, setSrcset] = useState();\r\n\r\n useEffect(() => {\r\n const src = widthSizes\r\n .map((size: string) => `${image.file.url}?fit=thumb&fl=progressive&w=${size} ${size}w`);\r\n\r\n setSrcset(src.join(','));\r\n }, [image]);\r\n\r\n return (\r\n setIsLoaded(true)}\r\n />\r\n );\r\n};\r\n\r\nexport default ImageBasic;\r\n","import * as React from 'react';\r\n\r\nimport './styles.scss';\r\n\r\nconst Loader: React.FC = () => (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n);\r\n\r\nexport default Loader;\r\n","import * as React from 'react';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport SvgImage from '../SvgImage';\r\nimport './styles.scss';\r\n\r\ninterface SocialLinksProps {\r\n list: {\r\n name: string;\r\n url: string;\r\n type: string;\r\n }[];\r\n}\r\n\r\nconst SocialLinks = ({ list }: SocialLinksProps) => (\r\n
    \r\n \r\n
    \r\n);\r\n\r\nexport default SocialLinks;\r\n","import * as React from 'react';\r\nimport Tag from '../Tag';\r\nimport './styles.scss';\r\n\r\ninterface TagProps {\r\n tags: {\r\n text: string;\r\n url: string;\r\n }[];\r\n}\r\n\r\nconst TagList = ({ tags }: TagProps) => (\r\n
      \r\n {tags.map((tag) => (\r\n
    • \r\n \r\n
    • \r\n ))}\r\n
    \r\n);\r\n\r\nexport default TagList;\r\n","import * as React from 'react';\r\nimport { insertUrlParam } from '../../../utilities/browser';\r\nimport { isIdenticalObject } from '../../../utilities/objects';\r\nimport SvgImage from '../SvgImage';\r\nimport './styles.scss';\r\n\r\ninterface PaginationProps {\r\n totalItems: number;\r\n currentPage: number;\r\n itemsPerPage: number;\r\n handleClick?: Function;\r\n pageQueryKey?: string;\r\n retainRoute?: boolean;\r\n style?: string;\r\n}\r\n\r\ninterface PaginationState {\r\n pages: number[];\r\n firstPageIndex: number | undefined;\r\n lastPageIndex: number | undefined;\r\n previousPageIndex: number | undefined;\r\n nextPageIndex: number | undefined;\r\n totalItems?: number | undefined;\r\n currentPage: number | undefined;\r\n totalAmountOfPages: number | undefined;\r\n isFirstPageDisabled: boolean | undefined;\r\n isLastPageDisabled: boolean | undefined;\r\n isPreviousDisabled: boolean | undefined;\r\n isNextDisabled: boolean | undefined;\r\n // The below need to move to props with defaults\r\n maxVisiblePagesMobile: number;\r\n maxVisiblePagesDesktop: number;\r\n maxVisiblePages: number;\r\n}\r\n\r\n// move to prop with default value\r\nconst breakpoint = 620;\r\n\r\nconst defaultProps = {\r\n pageQueryKey: 'page',\r\n};\r\nexport default class Pagination extends React.Component {\r\n // eslint-disable-next-line react/static-property-placement\r\n static defaultProps = defaultProps;\r\n\r\n constructor(props: PaginationProps) {\r\n super(props);\r\n this.state = {\r\n pages: [],\r\n firstPageIndex: undefined,\r\n lastPageIndex: undefined,\r\n previousPageIndex: undefined,\r\n nextPageIndex: undefined,\r\n // totalItems: undefined,\r\n currentPage: undefined,\r\n isFirstPageDisabled: undefined,\r\n isLastPageDisabled: undefined,\r\n totalAmountOfPages: undefined,\r\n isPreviousDisabled: undefined,\r\n isNextDisabled: undefined,\r\n maxVisiblePagesMobile: 3,\r\n maxVisiblePagesDesktop: 5,\r\n maxVisiblePages: 5,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n await this.handdleMaxVisiblePages(window.innerWidth);\r\n window.addEventListener('resize', async (event) => {\r\n event.stopPropagation();\r\n await this.handdleMaxVisiblePages(window.innerWidth);\r\n });\r\n\r\n this.getPager();\r\n }\r\n\r\n componentDidUpdate(prevProps: PaginationProps) {\r\n const hasPropsUpdated = isIdenticalObject(prevProps, this.props);\r\n if (!hasPropsUpdated) {\r\n this.getPager();\r\n }\r\n }\r\n\r\n /**\r\n * This handles setting the state of the pager.\r\n * Flags toggle display views on pager elements\r\n * and fetches and sets the visable page list\r\n * from generateVisablePages.\r\n */\r\n getPager() {\r\n const {\r\n totalItems,\r\n currentPage,\r\n itemsPerPage,\r\n } = this.props;\r\n\r\n const {\r\n maxVisiblePages,\r\n } = this.state;\r\n\r\n const totalAmountOfPages = Math.ceil(totalItems / itemsPerPage);\r\n const isFirstPageDisabled = (\r\n (!(currentPage > (Math.ceil(maxVisiblePages / 2)))) || totalAmountOfPages <= maxVisiblePages\r\n );\r\n const isLastPageDisabled = currentPage > totalAmountOfPages - Math.ceil(maxVisiblePages / 2)\r\n || totalAmountOfPages <= maxVisiblePages;\r\n const lastPageIndex = totalAmountOfPages;\r\n const previousPageIndex = (currentPage - 1);\r\n const isPreviousDisabled = !(currentPage - 1);\r\n const isNextDisabled = (currentPage + 1) > lastPageIndex;\r\n\r\n this.setState({\r\n pages: this.generateVisablePages(\r\n totalAmountOfPages,\r\n currentPage,\r\n ),\r\n firstPageIndex: 1,\r\n lastPageIndex,\r\n previousPageIndex,\r\n nextPageIndex: (currentPage + 1),\r\n // totalItems,\r\n currentPage,\r\n totalAmountOfPages,\r\n isFirstPageDisabled,\r\n isLastPageDisabled,\r\n isPreviousDisabled,\r\n isNextDisabled,\r\n });\r\n }\r\n\r\n /**\r\n * Generates and returns the list of visible\r\n * pages based on the current page and the\r\n * maxVisiblePages.\r\n * @param totalAmountOfPages\r\n * @param currentPage\r\n */\r\n generateVisablePages(totalAmountOfPages: number, currentPage: number) {\r\n const { maxVisiblePages } = this.state;\r\n const maxVisibleOffset = (maxVisiblePages % 2 === 0) ? 1 : 0.5;\r\n let startPage = 1;\r\n let endPage = (maxVisiblePages + 1);\r\n\r\n if (currentPage > 2) {\r\n startPage = (currentPage - (maxVisiblePages / 2 - maxVisibleOffset));\r\n endPage = (currentPage + (maxVisiblePages / 2 + maxVisibleOffset));\r\n }\r\n\r\n if (currentPage > (totalAmountOfPages - 2)) {\r\n startPage = (totalAmountOfPages - (maxVisiblePages - 1));\r\n endPage = totalAmountOfPages + 1;\r\n }\r\n\r\n if (totalAmountOfPages <= maxVisiblePages) {\r\n startPage = 1;\r\n endPage = totalAmountOfPages + 1;\r\n }\r\n\r\n return Array.from({\r\n length: (endPage - startPage),\r\n }, (s, l) => l + startPage);\r\n }\r\n\r\n /**\r\n * Checks the viewport width to determine the\r\n * maxVisiblePages based on mobile/desktop\r\n * @param viewportWidth\r\n */\r\n async handdleMaxVisiblePages(viewportWidth: number) {\r\n const {\r\n maxVisiblePagesMobile,\r\n maxVisiblePagesDesktop,\r\n totalAmountOfPages,\r\n currentPage,\r\n } = this.state;\r\n\r\n if (viewportWidth < breakpoint) {\r\n await this.setState({\r\n maxVisiblePages: maxVisiblePagesMobile,\r\n });\r\n } else {\r\n await this.setState({\r\n maxVisiblePages: maxVisiblePagesDesktop,\r\n });\r\n }\r\n\r\n this.setState({\r\n pages: this.generateVisablePages(\r\n totalAmountOfPages as number,\r\n currentPage as number,\r\n ),\r\n });\r\n }\r\n\r\n /**\r\n * Change page state handler\r\n * @param event\r\n * @param page\r\n */\r\n changePage(event: React.MouseEvent, page: number) {\r\n const {\r\n pageQueryKey,\r\n retainRoute,\r\n handleClick,\r\n } = this.props;\r\n\r\n event.preventDefault();\r\n insertUrlParam((pageQueryKey || ''), String(page), retainRoute);\r\n if (handleClick) {\r\n handleClick(page);\r\n }\r\n }\r\n\r\n /**\r\n * Generates the page buttons\r\n * @param page\r\n * @param text\r\n * @param isDisabled\r\n */\r\n generateButton(page: number, text: string, isDisabled: boolean) {\r\n const { retainRoute } = this.props;\r\n const rootLocation = retainRoute ? '' : `${window.location.pathname}?page=${page}`;\r\n return (\r\n (!isDisabled ? this.changePage(event, page) : null)}\r\n href={rootLocation}\r\n role=\"button\"\r\n >\r\n {text}\r\n \r\n );\r\n }\r\n\r\n render() {\r\n const {\r\n style,\r\n } = this.props;\r\n\r\n const {\r\n pages,\r\n firstPageIndex,\r\n lastPageIndex,\r\n previousPageIndex,\r\n nextPageIndex,\r\n currentPage,\r\n isFirstPageDisabled,\r\n isLastPageDisabled,\r\n isPreviousDisabled,\r\n isNextDisabled,\r\n totalAmountOfPages,\r\n } = this.state;\r\n\r\n return (\r\n
    \r\n
      \r\n\r\n {/* First page */}\r\n
    • \r\n {this.generateButton(firstPageIndex as number, '1', isFirstPageDisabled as boolean)}\r\n
    • \r\n\r\n {/* Page list */}\r\n {pages.map((item) => (\r\n
    • \r\n {this.generateButton(item, String(item), false)}\r\n
    • \r\n ))}\r\n\r\n {/* Last page */}\r\n
    • \r\n {this.generateButton(lastPageIndex as number, `${totalAmountOfPages}`, isLastPageDisabled as boolean)}\r\n
    • \r\n
    \r\n\r\n \r\n\r\n
    \r\n\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\n\r\ninterface ContainerProps {\r\n className?: string;\r\n children: JSX.Element | JSX.Element[];\r\n overflowHidden?: boolean;\r\n}\r\n\r\ninterface ColumnProps {\r\n sm?: number;\r\n md?: number;\r\n lg?: number;\r\n xl?: number;\r\n className?: string;\r\n children: React.ReactNode;\r\n}\r\n\r\ninterface GridProps {\r\n isFlush?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const Container = ({\r\n children,\r\n className,\r\n overflowHidden = false,\r\n}: ContainerProps) => (\r\n
    \r\n {children}\r\n
    \r\n);\r\n\r\nconst Column = ({\r\n sm = 6,\r\n md = 6,\r\n lg = 12,\r\n xl,\r\n className,\r\n children,\r\n}: ColumnProps) => (\r\n
    \r\n {children}\r\n
    \r\n);\r\n\r\nexport class Grid extends React.Component {\r\n static container = Container;\r\n\r\n static Column = Column;\r\n\r\n render() {\r\n const {\r\n children,\r\n isFlush,\r\n className,\r\n } = this.props;\r\n return (\r\n
    \r\n {children}\r\n
    \r\n );\r\n }\r\n}\r\n","import { useEffect } from 'react';\r\n\r\nconst useOutsideAlerter = (ref: any, handler?: Function) => {\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(event.target)) {\r\n if (handler && typeof handler === 'function') {\r\n handler();\r\n }\r\n }\r\n };\r\n\r\n document.addEventListener('mousedown', handleClickOutside);\r\n return () => {\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n };\r\n }, [ref]);\r\n};\r\n\r\nexport default useOutsideAlerter;\r\n","import * as React from 'react';\r\nimport CompetitionDetailsProps from './type';\r\nimport { Container } from '../helpers/Grid';\r\n// import LocalizationContext from '../../contexts/Localizations';\r\nimport './styles.scss';\r\n\r\nconst CompetitionDetails = ({\r\n competitionClass,\r\n venue,\r\n country,\r\n dates,\r\n email,\r\n name,\r\n website,\r\n classLabel,\r\n emailLabel,\r\n websiteLabel,\r\n}: CompetitionDetailsProps) => (\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n

    {name}

    \r\n
    \r\n
    \r\n {venue && `${venue}, `}\r\n {country}\r\n
    \r\n
    \r\n {dates}\r\n
    \r\n
    \r\n
    \r\n {competitionClass && (\r\n
    \r\n {classLabel}\r\n {competitionClass}\r\n
    \r\n )}\r\n {website && (\r\n
    \r\n {websiteLabel}\r\n {/* eslint-disable-next-line react/jsx-no-target-blank */}\r\n \r\n {website.title}\r\n \r\n
    \r\n )}\r\n {email && (\r\n
    \r\n {emailLabel}\r\n {/* eslint-disable-next-line react/jsx-no-target-blank */}\r\n \r\n {email.title}\r\n \r\n
    \r\n )}\r\n
    \r\n
    \r\n
    \r\n
    \r\n);\r\n\r\nexport default CompetitionDetails;\r\n","import * as React from 'react';\r\nimport { Container } from '../helpers/Grid';\r\nimport CompetitionScheduleProps, {\r\n CompetitionDayEvents,\r\n CompositionDayEvent,\r\n} from './type';\r\nimport './styles.scss';\r\n\r\nexport const CompetitionScheduleEvent = ({\r\n category,\r\n raceClass,\r\n raceName,\r\n raceType,\r\n}: CompositionDayEvent) => (\r\n
    \r\n
    \r\n
    \r\n {raceName}\r\n
    \r\n
    \r\n {raceType}\r\n
    \r\n
    \r\n
    \r\n
    \r\n {category}\r\n
    \r\n
    \r\n {raceClass}\r\n
    \r\n
    \r\n
    \r\n);\r\n\r\nexport const CompetitionScheduleDayEvents = ({\r\n date,\r\n races,\r\n}: CompetitionDayEvents) => (\r\n
    \r\n
    \r\n

    {date}

    \r\n
    \r\n
    \r\n {races.map((race) => (\r\n \r\n ))}\r\n
    \r\n
    \r\n);\r\n\r\nconst CompetitionSchedule = ({\r\n title,\r\n items,\r\n}: CompetitionScheduleProps) => (\r\n
    \r\n \r\n
    \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n {items.map((day) => )}\r\n
    \r\n
    \r\n
    \r\n
    \r\n);\r\n\r\nexport default CompetitionSchedule;\r\n","import * as React from 'react';\r\nimport CommissairesProps, { Commissiary as CommissaryProps } from './type';\r\nimport { Container } from '../helpers/Grid';\r\nimport './styles.scss';\r\n\r\nconst Commissary = ({\r\n name,\r\n nationality,\r\n role,\r\n}: CommissaryProps) => (\r\n
    \r\n
    \r\n
    \r\n {name}\r\n
    \r\n
    \r\n {role}\r\n
    \r\n
    \r\n
    \r\n {nationality}\r\n
    \r\n
    \r\n);\r\n\r\nconst Commissaires = ({\r\n title,\r\n subtitle,\r\n items,\r\n}: CommissairesProps) => (\r\n
    \r\n \r\n
    \r\n
    \r\n

    \r\n {title}\r\n

    \r\n
    \r\n {subtitle}\r\n
    \r\n
    \r\n
    \r\n {items.map((item) => (\r\n \r\n ))}\r\n
    \r\n
    \r\n
    \r\n
    \r\n);\r\n\r\nexport default Commissaires;\r\n","import React, { useContext } from 'react';\r\nimport CompetitionDetailsModuleProps from './type';\r\nimport CompetitionDetails from '../../components/CompetitionDetails';\r\nimport CompetitionSchedule from '../../components/CompetitionSchedule';\r\nimport Commissaires from '../../components/Commissaires';\r\nimport LocalizationContext from '../../contexts/Localizations';\r\nimport ResultsAccordion from '../../components/ResultsAccordion';\r\nimport './styles.scss';\r\n\r\nconst CompetitionDetailsModule = ({\r\n competitionDetails,\r\n schedule,\r\n assignments,\r\n results,\r\n}: CompetitionDetailsModuleProps) => {\r\n const { translations } = useContext(LocalizationContext);\r\n\r\n return (\r\n
    \r\n {competitionDetails && (\r\n \r\n )}\r\n\r\n {results && (\r\n \r\n )}\r\n\r\n {Boolean(schedule && schedule.items.length) && (\r\n \r\n )}\r\n\r\n {Boolean(assignments && assignments.length) && (\r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nexport default CompetitionDetailsModule;\r\n"],"sourceRoot":""}