{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///external \"React\"","webpack:///external \"styled\"","webpack:///./src/text.js","webpack:///./src/constants.js","webpack:///./src/app/components/ListingCard/ListingCard.styled.js","webpack:///./src/app/tracking/utils.js","webpack:///./src/app/components/SeoLinks/SeoLinks.styled.js","webpack:///./src/app/components/SearchEngine/SearchEngine.styled.js","webpack:///./src/app/components/Section/Section.js","webpack:///./src/app/components/SeoLinks/SeoLinksComponents/SeoTypeLinks/SeoTypeLinks.js","webpack:///./src/app/components/ServicesBlocks/ServicesBlocks.styled.js","webpack:///./src/utils/helpers/trackingVariables.js","webpack:///./src/app/store/modules/searchengine/searchengine.js","webpack:///./src/app/components/Editorial/EditorialLink/EditorialLink.styled.js","webpack:///./src/app/store/modules/searchengine/selectors.js","webpack:///external \"ReactDOM\"","webpack:///./src/app/store/modules/searches/searches.js","webpack:///./src/app/store/modules/searches/selectors.js","webpack:///./src/app/components/SeoLinks/SeoLinksComponents/SeoBlockLine/SeoBlockLine.js","webpack:///./src/app/components/Section/Section.styled.js","webpack:///./src/app/assets/img/hero-image.webp","webpack:///./src/app/components/CircularButton/CircularButton.styled.js","webpack:///./src/app/containers/EngineSection/EngineSection.styled.js","webpack:///./src/app/components/Editorial/EditorialStory/EditorialStory.styled.js","webpack:///./src/app/components/Editorial/Editorial.styled.js","webpack:///./src/app/store/modules/searchengine/index.js","webpack:///./src/app/store/modules/ldFlags/index.js","webpack:///./src/app/store/modules/searches/index.js","webpack:///./src/bootstrap.js","webpack:///./src/app/store/index.js","webpack:///./src/app/store/modules/index.js","webpack:///./src/app/store/modules/ldFlags/ldFlags.js","webpack:///./src/app/index.js","webpack:///./src/app/layout.js","webpack:///./src/app/components/SeoLinks/SeoLinks.js","webpack:///./src/app/components/SeoLinks/SeoLinksComponents/SeoBlocksTools/SeoBlocksTools.js","webpack:///./src/app/components/SeoLinks/SeoLinksComponents/SeoDynamicBlock/SeoDynamicBlock.js","webpack:///./src/app/containers/EngineSection/EngineSection.js","webpack:///./src/app/components/SearchEngine/SearchEngine.js","webpack:///./src/app/config/agatha-engine/base.js","webpack:///./src/app/config/agatha-engine/actions.js","webpack:///./src/app/config/agatha-engine/utils.js","webpack:///./src/app/components/SearchEngine/PrefilledSearch.js","webpack:///./src/app/tracking/getProduct.js","webpack:///./src/utils/helpers/cookie.js","webpack:///./src/app/components/CircularButton/CircularButton.js","webpack:///./src/app/components/CircularButton/CircularAdConfig.js","webpack:///./src/app/components/ServicesBlocks/ServicesBlocks.js","webpack:///./src/app/components/ServicesBlocks/ServicesCard/ServicesCard.js","webpack:///./src/app/components/ServicesBlocks/ServiceBlocks.data.js","webpack:///./src/app/containers/SearchListingContainer/SearchListingContainer.js","webpack:///./src/app/components/ListingCard/ListingCard.js","webpack:///./src/app/components/ListingCard/CardPhotoCaroussel.js","webpack:///./src/app/assets/img/card-placeholder.webp","webpack:///./src/app/components/BlockLink/BlockLink.js","webpack:///./src/app/components/BlockButton/BlockButton.js","webpack:///./src/app/assets/img/listing-placeholder.svg","webpack:///./src/app/assets/svg/ClocheIcon.svg","webpack:///./src/app/components/Editorial/Editorial.js","webpack:///./src/app/components/Editorial/EditorialStory/EditorialStory.js","webpack:///./src/app/components/Editorial/EditorialLink/EditorialLink.js","webpack:///./src/app/assets/img/illu_Actualite.svg","webpack:///./polyfills.js","webpack:///./src/client.js"],"names":["root","factory","exports","module","require","define","amd","a","i","window","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__2__","__WEBPACK_EXTERNAL_MODULE__100__","text","WELCOME_TEXT","TITLE","H2_NEW_VISIT","H1_NEW_VISIT","H1_ALREADY_VISITED","USERBLOCK","TEXT_PART_1","TEXT_RECOS_SING_PART_1","TEXT_RECOS_PLU_PART_1","TEXT_RECOS_PART_2","TEXT_FAVS_SING_PART_1","TEXT_FAVS_PLU_PART_1","TEXT_FAVS_PART_2","TEXT_SEARCHES_SING_PART_1","TEXT_SEARCHES_PLU_PART_1","TEXT_SEARCHES_SING_PART_2","TEXT_SEARCHES_PLU_PART_2","TEXT_VIEWEDLISTING_PART_1","TEXT_VIEWEDLISTING_PART_2","LINK_CONSULT_PLU","LINK_CONSULT_SING","LINK_FIND_PLU","LINK_FIND_SING","SERVICES","TITLE_FOCUS","EDITORIAL","FIND_MORE","SEOLINKS","SECTION_TITLE","SECTION_TITLE_FOCUS","FIRST_BLOCK","SECOND_BLOCK","TOOLS_BLOCK","SUBTITLE","SECOND_SUBTITLE","THIRD_BLOCK","FOURTH_BLOCK","VIEWED_LISTINGS","EMPTY_VIEWED_TITLE","EMPTY_VIEWED_TEXT","EMPTY_VIEWED_CTA","YOUR_VIEWED_LISTINGS","PAGE_HEAD_PRIMARY_MULTIPLE","nb","PAGE_HEAD_PRIMARY_SINGLE","VIEWED","LITTLE_WHILE_AGO","ONE_HOUR_AGO","YESTERDAY","X_MINUTES_AGO","xMinutes","X_HOURS_AGO","xHours","X_DAYS_AGO","xDays","YOUR_LAST_VIEWED_TEXT","YOUR_LAST_VIEWED_TEXT_HIGHLIGHT","SEE_ALL_LISTINGS","count","SEARCH_LISTING","YOUR_LAST_SEARCH_TEXT","YOUR_LAST_SEARCH_TEXT_HIGHLIGHT","NO_LISTING","GO_TO_MY_SEARCH","SEE_ALL_SEARCHS","SEE_ALL_BUTTON","MY_SEARCHS","LISTING","EXPIRED","REDO_SEARCH","TITLE_PART_1","TITLE_PART_2","TITLE_ON","QUESTION","BUTTON_REDO","BUTTON_NEW","TABS","ACHETER","ESTIMER","LOUER","SEARCH_TYPE","CLASSIC","ADVANCED","TIME","DRAW","STORAGE","LAST_SEARCH","REDIRECTION_LINKS","EDITO_LINK","SEOhousesSales","link","title","OPENINGORIGIN","HOME_SEARCH_LINK","SEOflatsSales","SEOflatsRents","SEOtoolsBlock","seoVariationSets","cityToUrl","paris","toulouse","bordeaux","nantes","nice","montpellier","lille","montrouge","lyon","marseille","clichy","puteaux","nanterre","pessac","strasbourg","vincennes","dijon","metz","alfortville","angers","reims","tours","colombes","antony","clamart","villejuif","nîmes","grenoble","rouen","toulon","amiens","antibes","avignon","bourges","auxerre","béziers","perpignan","courbevoie","annecy","cannes","argenteuil","aubervilliers","melun","cergy","cholet","compiègne","montluçon","rennes","versailles","nancy","villeurbanne","brest","pau","limoges","arras","drancy","ajaccio","gagny","grasse","aubagne","bastia","besançon","créteil","châteauroux","evry","suresnes","poitiers","vannes","meudon","talence","troyes","albi","chartres","quimper","sartrouville","tourcoing","narbonne","beauvais","valenciennes","orléans","rezé","douai","nevers","gap","chambery","sète","caen","pantin","mulhouse","lorient","roubaix","gennevilliers","thionville","bondy","roanne","merignac","venissieux","bayonne","niort","poissy","colmar","meaux","laval","tarbes","carcassonne","arles","bobigny","calais","dunkerque","istres","ales","blois","sevran","martigues","sarcelles","vitrolles","lens","fréjus","montreuil","valence","bagneux","chelles","massy","montauban","belfort","cannet","castres","courneuve","wattrelos","hyères","cayenne","angoulême","getWeekDayAsStrFormat","date","SEARCH_LISTING_HEIGHT","CardContainer","styled","CardDataContainer","CardLink","CardData","CardPrice","sharedStyle","css","CardType","CardLocation","ViewDate","Rooms","Surface","CardSurfaceInfo","StyledExpiredCard","StyledSliderPlaceholder","CameraIcon","StyledPhotoCounter","bottom","left","top","right","StyledSliderContainer","getAvItems","avItems","searchesListings","cur","id","item","matches","priceString","priceNumber","list_name","index","price","estate_type","getEstateType","distribution_type","getDistributionType","getDistributionSubtype","publication_id","name","nb_rooms","indoor_surface","zip_code","subtype","getEstateSubtype","currency","nb_picture","distribution_subtype","country","province","city","PushEvent","savedThor","trackView","pagename","site","language","environment","trackPageView","pathname","currentEnv","uid","cid","getCookie","searchParams","URLSearchParams","av_pagetitle","av_site","av_language","av_category","av_platform","av_url_path","av_environment","av_medium","av_user","status","isConnected","av_items","trackInteraction","interactionVars","trackSelectItem","trackClickProduct","product","getListingProduct","listing","int_type","int_description","int_infos","products","generateTrackingUrl","m","fixUrlListing","urlListing","SeoLinksContainer","SeoLinksWrapper","SeoBlocks","SeoBlockToolsWrapper","SeoLinkTitle","SeoBlockLineWrapper","MainContainer","Quest","QuestContainer","PrefilledSearchContainer","PrefilledData","ActionButtons","WelcomeTitle","SectionHead","highlight","getHighlightedText","parts","RegExp","key","style","part","fontWeight","Section","children","withBackground","SeoTypeLinks","seoType","href","React","ServicesBlocksContainer","ServicesBlocksWrapper","Block","colorPalette","Card","propertyType","transactionType","distributionSubtype","BASE","JUMP_TO_TAB","defaultSearchEngineState","currentTab","jumpToTab","tab","type","payload","reducer","state","action","BlockLinkContainer","StyledPlaceholderImg","StyledAngleRight","TextWrapper","getSearchEngine","getSearchEngineTab","SET_SEARCHES_LISTINGS","defaultSearchesState","setSearchesListings","data","getSearchesListings","SeoBlockLine","isPaddedRight","StyledSection","props","StyledHead","StyledSectionWrapper","ChevronIcon","SubTextWrapper","CloseButton","coreColorPalette","CircularButtonWrapper","EngineSectionContainer","AgathaForm","Loader","StoryContainer","StoryCat","EditoMainWrapper","EditoWrapper","EditoTitle","EditoForeground","NewsList","Bootstrap","store","configureStore","BootstrapedApp","devtoolExtension","global","x","createEnhancer","compose","applyMiddleware","initialState","createStore","combineReducers","defaultLdFlagsState","Global","createGlobalStyle","AppContainer","App","useState","setConnected","useEffect","isUserConnected","mapDispatchToProps","hot","connect","Layout","theme","SeoLinks","SeoBlockTools","className","SeoDynamicBlock","currentDate","weekNumber","weekDayStrFormat","currentSetIdx","getWeekNumber","d","Date","yearStart","Math","formatedCity","getSEOVariationByDay","day","christieApiURL","EngineSection","isNewSearch","initSearch","searchString","locations","searchData","setSearchData","TEXT","LINK","SUBTEXT","TRACKING_TYPE","circularAd","setCircularAd","isPinOpen","setIsPinOpen","getRandomAd","adArray","rand","percentSum","closePin","searchValue","JSON","searchValueJson","headers","axios","res","fetchSearchData","loadComponents","componentToload","close","hide","subtext","trackingType","mapStateToProps","SearchEngine","SLAM","agatha","criterion","criteria","document","deposerLouerLink","deposerAcheterLink","originalHref","cta","moreCriteria","searchTime","searchDraw","e","searchUrl","inputCity","inputPrice","inputEstimate","moteurEngine","params","queryString","url","host","pagePath","newUrl","idtt","quest","estimer","estimerObject","localites","k","tmp","autocomplete","join","biens","idTypeBien","bien","pxMax","budget","div","optionnal","enterprise","nature","searchType","generatedUrl","data-tab","PureComponent","base","model","value","multiple","items","label","view","cssClasses","active","response","request","search","displayErrorMessage","placeholder","start","limit","templates","tags","object","visible","float","formatNumber","unit","actions","fn","allValues","selectedTab","utils","selectedType","values","vLength","ensemble1","ensemble2","syncWelcomeMessage","welcomeMessages","syncEdito","editos","syncSection","sections","selected","syncStory","istorys","trackTab","outil_id","syncContentWithTab","PrefilledSearch","customSearchString","SORTS","locationText","getSearchedLocationText","location1","location2","onClick","runLastSearch","size","kind","variant","newSearch","extractNumber","Number","extractEstatePostalCode","estatePostalCode","extractPhotosNumber","photosNumberFromBack","photosNumberFromAddFavorite","extractSurface","surface","idannonce","publicationTypeCouplingSource","idtypepublicationsourcecouplage","zipCode","codepostal","prix","rooms","nb_pieces","urlPhotos","nb_photos","trackSurface","space","photos_nb","estate_postalcode","parent_site","product_type","getListingsProducts","listings","result","regexp","setCookie","days","expires","propTypes","PropTypes","defaultProps","CircularButton","rel","target","data-ti","icon","ariaLabel","color","adConfig","PERCENTAGE","presentationText","blocks","header","elements","description","icone","ServicesBlocks","block","this","ServicesCard","targetBlank","ServiceblockData","SubTitle","SubSectionWrapper","SearchLstButton","SubSection","subTitle","SEARCH_TRACKING_BD","SearchListingContainer","goToSearchPage","getSubSection","searchId","nbResults","getBody","searchCount","blockLinkTitle","blockLinkHref","listName","showViewDate","height","iconeUrl","getSection","searchs","getViewFormattedDate","viewedDate","diffInMinutes","getTime","diffInHours","diffInDays","PhotoCounter","ExpiredContent","SliderContainer","isExpired","hasPhotos","photoUrls","ListingCard","location","viewDateString","displaySeparator","SingleImage","CardPhotoCarousel","singleImage","photos","photo","loading","src","alt","width","BLOCK_LINK_TYPES","HORIZONTAL","VERTICAL","StyledBlockLink","StyledParagraph","BlockLink","BlockButtonContainer","StyledBlockButton","Styledbutton","BlockButton","apiURL","ArticleTemplate","articles","category","preview","imageMedium","Editorial","setArticles","isLoaded","setLoaded","error","EditorialStory","imgRef","useRef","isImageVisible","useIntersection","onlyOnce","ref","EditorialLink","hydrate","linkTag","styleTag"],"mappings":"CAAA,SAA2CA,EAAMC,GAChD,GAAsB,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,EAAQG,QAAQ,SAAUA,QAAQ,UAAWA,QAAQ,kBAClE,GAAqB,mBAAXC,QAAyBA,OAAOC,IAC9CD,OAAO,CAAC,QAAS,SAAU,YAAaJ,OACpC,CACJ,IAAIM,EAAuB,iBAAZL,QAAuBD,EAAQG,QAAQ,SAAUA,QAAQ,UAAWA,QAAQ,aAAeH,EAAQD,EAAY,MAAGA,EAAa,OAAGA,EAAe,UAChK,IAAI,IAAIQ,KAAKD,GAAuB,iBAAZL,QAAuBA,QAAUF,GAAMQ,GAAKD,EAAEC,IAPxE,CASGC,QAAQ,SAASC,+BAAgCC,+BAAgCC,kCACpF,O,sECVAT,EAAOD,QAAUQ,gC,eCAjBP,EAAOD,QAAUS,gC,0HCAjB,I,IAAME,EAAO,CACXC,aAAc,CACZC,MADY,0BAEZC,aAFY,2CAGZC,aAHY,+BAIZC,mBALS,4BAQXC,UAAW,CACTC,YADS,aAETC,uBAFS,0BAGTC,sBAHS,4BAITC,kBAJS,cAKTC,sBALS,UAMTC,qBANS,WAOTC,iBAPS,aAQTC,0BARS,YASTC,yBATS,aAUTC,0BAVS,cAWTC,yBAXS,eAYTC,0BAZS,YAaTC,0BAbS,YAcTC,iBAdS,gBAeTC,kBAfS,eAgBTC,cAhBS,gBAiBTC,eAzBS,gBA4BXC,SAAU,CACRtB,MADQ,0BAERuB,YA9BS,cAiCXC,UAAW,CACTxB,MADS,iCAETuB,YAFS,kBAGTE,UApCS,oEAuCXC,SAAU,CACRC,cADQ,kCAERC,oBAFQ,YAGRC,YAAa,CACX7B,MAJM,qBAMR8B,aAAc,CACZ9B,MAPM,yBASR+B,YAAa,CACX/B,MADW,eAEXgC,SAFW,4DAGXC,gBAZM,iCAcRC,YAAa,CACXlC,MAfM,4BAiBRmC,aAAc,CACZnC,MAzDO,wBA4DXoC,gBAAiB,CACfC,mBADe,sCAEfC,kBAFe,qDAGfC,iBAHe,wBAIfC,qBAJe,8BAKfC,2BAA4B,SAAAC,GAAE,uEAC9BC,yBANe,8CAOfC,OAPe,MAQfC,iBARe,oBASfC,aATe,iBAUfC,UAVe,OAWfC,cAAe,SAAAC,GAAQ,sCACvBC,YAAa,SAAAC,GAAM,qCACnBC,WAAY,SAAAC,GAAK,oCACjBC,sBAde,8BAefC,gCAfe,gBAgBfC,iBAAkB,SAAAC,GAAK,mDAEzBC,eAAgB,CACdC,sBAAuB,SAAAF,GAAK,OAAKA,oCAAL,+BAC5BG,gCAAiC,SAAAH,GAAK,OAAKA,wBAAL,kBACtCI,WAHc,wCAIdC,gBAJc,yBAKdC,gBAAiB,SAAAN,GAAK,kDACtBO,eANc,mCAOdC,WArFS,+BAuFXC,QAAS,CACPC,QAxFS,wCA0FXC,YAAa,CACXC,aADW,2BAEXC,aAFW,2BAGXC,SAHW,MAIXC,SAJW,IAKXC,YALW,YAMXC,WAhGJ,uB,EAoGe5E,E,EAAf,EAAe,M,iDApGTA,E,oKAAAA,E,qsBCAC,I,IAAM6E,EAAO,CAClBC,QADkB,MAElBC,QAFkB,IAGlBC,MAHK,KAMMC,EAAc,CACzBC,QADyB,UAEzBC,SAFyB,WAGzBC,KAHyB,OAIzBC,KAJK,QAOMC,EAAU,CACrBC,YADK,cAIMC,EAAoB,CAC/BC,WADK,6BAIMC,EAAiB,CAC5B,CACEC,KADF,uEAEEC,MAH0B,uBAK5B,CACED,KADF,sEAEEC,MAP0B,sBAS5B,CACED,KADF,yEAEEC,MAX0B,yBAa5B,CACED,KADF,uEAEEC,MAf0B,uBAiB5B,CACED,KADF,0EAEEC,MAnB0B,0BAqB5B,CACED,KADF,sEAEEC,MAvB0B,sBAyB5B,CACED,KADF,uEAEEC,MA3B0B,uBA6B5B,CACED,KADF,qEAEEC,MA/BG,sBAkCMC,EAAgB,CAC3BC,iBADK,oCAIMC,EAAgB,CAC3B,CACEJ,KADF,2EAEEC,MAHyB,2BAK3B,CACED,KADF,8EAEEC,MAPyB,8BAS3B,CACED,KADF,2EAEEC,MAXyB,2BAa3B,CACED,KADF,+EAEEC,MAfyB,+BAiB3B,CACED,KADF,iFAEEC,MAnByB,iCAqB3B,CACED,KADF,4EAEEC,MAvByB,4BAyB3B,CACED,KADF,2FAEEC,MA3BG,uBA+BMI,EAAgB,CAC3B,CACEL,KADF,+EAEEC,MAHyB,8BAK3B,CACED,KADF,kFAEEC,MAPyB,iCAS3B,CACED,KADF,8EAEEC,MAXyB,6BAa3B,CACED,KADF,mFAEEC,MAfyB,kCAiB3B,CACED,KADF,8EAEEC,MAnByB,6BAqB3B,CACED,KADF,gFAEEC,MAvBG,gCA2BMK,EAAgB,CAC3B,CACEN,KADF,uFAEEC,MAHyB,+BAK3B,CACED,KADF,kGAEEC,MAPyB,qCAS3B,CACED,KADF,oHAEEC,MAXyB,qCAa3B,CACED,KADF,yGAEEC,MAfyB,4BAiB3B,CACED,KADF,6GAEEC,MAnBG,iCAuBMM,EAAmB,CAC9B,CAAC,QAAS,kBAAmB,UAAW,UAAW,WAAY,mBAAoB,cADrD,YAE9B,CAAC,WAAY,qBAAsB,YAAa,wBAAyB,SAAU,OAAQ,QAF7D,eAG9B,CAAC,WAAY,SAAU,aAAc,iBAAkB,SAAU,OAAQ,UAH3C,WAI9B,CAAC,SAAU,QAAS,SAAU,aAAc,UAAW,SAAU,SAJnC,WAK9B,CAAC,OAAQ,QAAS,SAAU,iBAAkB,SAAU,WAAY,YALtC,iBAM9B,CAAC,cAAe,WAAY,aAAc,QAAS,OAAQ,UAAW,SANxC,WAO9B,CAAC,uBAAwB,SAAU,gBAAiB,SAAU,WAAY,UAAW,OAPvD,SAQ9B,CAAC,iBAAkB,UAAW,sBAAuB,mBAAoB,UAAW,gBAAiB,aARvE,aAS9B,CAAC,QAAS,YAAa,kBAAmB,mBAAoB,eAAgB,kBAAmB,qBATnE,WAU9B,CAAC,YAAa,mBAAoB,QAAS,UAAW,YAAa,aAAc,mBAVnD,iBAW9B,CAAC,OAAQ,mBAAoB,iBAAkB,QAAS,WAAY,oBAAqB,QAX3D,oBAY9B,CAAC,YAAa,QAAS,mBAAoB,SAAU,eAAgB,QAAS,kBAZhD,gBAa9B,CAAC,SAAU,WAAY,QAAS,UAAW,eAAgB,SAAU,SAbvC,UAc9B,CAAC,UAAW,kBAAmB,SAAU,gBAAiB,WAAY,WAAY,mBAdpD,WAe9B,CAAC,WAAY,QAAS,YAAa,SAAU,eAAgB,aAAc,YAf7C,gBAgB9B,CAAC,SAAU,SAAU,mBAAoB,WAAY,UAAW,mBAAoB,YAhBtD,gBAiB9B,CAAC,aAAc,SAAU,YAAa,UAAW,iBAAkB,UAAW,YAjBhD,aAkB9B,CAAC,YAAa,UAAW,SAAU,qBAAsB,OAAQ,QAAS,OAlB5C,aAmB9B,CAAC,QAAS,UAAW,aAAc,gBAAiB,QAAS,SAAU,SAnBzC,kBAoB9B,CAAC,sBAAuB,UAAW,QAAS,cAAe,SAAU,SAAU,uBApBjD,UAqB9B,CAAC,kBAAmB,wBAAyB,eAAgB,OAAQ,MAAO,QAAS,YArBvD,WAsB9B,CAAC,OAAQ,UAAW,QAAS,oBAAqB,WAAY,QAAS,cAtBzC,eAuB9B,CAAC,cAAe,gBAAiB,MAAO,WAAY,iBAAkB,SAAU,UAvB3E,cA0BMC,EAAY,CACvBC,MADuB,uEAEvBC,SAFuB,+FAGvBC,SAHuB,qFAIvBC,OAJuB,mGAKvBC,KALuB,yGAMvBC,YANuB,mGAOvB,uBAPuB,4GAQvB,iBARuB,oGASvBC,MATuB,wFAUvBC,UAVuB,iGAWvBC,KAXuB,iFAYvBC,UAZuB,gHAavBC,OAbuB,8FAcvBC,QAduB,+FAevBC,SAfuB,gGAgBvBC,OAhBuB,mFAiBvBC,WAjBuB,qFAkBvBC,UAlBuB,+FAmBvBC,MAnBuB,oFAoBvB,sBApBuB,2GAqBvB,kBArBuB,uGAsBvBC,KAtBuB,gFAuBvBC,YAvBuB,iGAwBvB,kBAxBuB,qGAyBvB,qBAzBuB,0GA0BvBC,OA1BuB,iGA2BvBC,MA3BuB,wFA4BvBC,MA5BuB,sFA6BvBC,SA7BuB,gGA8BvBC,OA9BuB,8FA+BvBC,QA/BuB,+FAgCvBC,UAhCuB,+FAiCvB,mBAjCuB,iGAkCvB,mBAlCuB,6FAmCvBC,QAnCuB,0FAoCvBC,SApCuB,qFAqCvB,kBArCuB,sHAsCvBC,MAtCuB,+FAuCvBC,OAvCuB,gGAwCvBC,OAxCuB,gFAyCvBC,QAzCuB,4GA0CvBC,QA1CuB,sGA2CvBC,QA3CuB,8EA4CvB,wBA5CuB,2GA6CvBC,QA7CuB,kFA8CvB,gBA9CuB,0FA+CvBC,UA/CuB,+FAgDvBC,UAhDuB,6GAiDvBC,WAjDuB,kGAkDvBC,OAlDuB,0FAmDvBC,OAnDuB,2GAoDvBC,WApDuB,8FAqDvBC,cArDuB,wGAsDvB,sBAtDuB,yGAuDvB,kBAvDuB,0GAwDvBC,MAxDuB,6FAyDvB,iBAzDuB,mHA0DvB,mBA1DuB,2GA2DvBC,MA3DuB,yFA4DvBC,OA5DuB,iGA6DvBC,YA7DuB,kFA8DvB,mBA9DuB,oGA+DvBC,YA/DuB,mFAgEvBC,OAhEuB,0FAiEvBC,WAjEuB,4FAkEvBC,MAlEuB,4FAmEvBC,aAnEuB,yFAoEvBC,MApEuB,mFAqEvBC,IArEuB,6FAsEvBC,QAtEuB,wFAuEvB,wBAvEuB,uGAwEvB,iBAxEuB,yGAyEvB,aAzEuB,8FA0EvB,iBA1EuB,oGA2EvBC,MA3EuB,iGA4EvBC,OA5EuB,iGA6EvB,mBA7EuB,iGA8EvB,mBA9EuB,wGA+EvBC,QA/EuB,qFAgFvBC,MAhFuB,gGAiFvBC,OAjFuB,2GAkFvBC,QAlFuB,8GAmFvB,gBAnFuB,sFAoFvBC,OApFuB,mFAqFvBC,WArFuB,uFAsFvBC,UAtFuB,6FAuFvB,qBAvFuB,8FAwFvB,gBAxFuB,0FAyFvBC,cAzFuB,mFA0FvBC,KA1FuB,+EA2FvB,oBA3FuB,yGA4FvBC,SA5FuB,gGA6FvBC,SA7FuB,2FA8FvBC,OA9FuB,mFA+FvBC,OA/FuB,8FAgGvBC,QAhGuB,oFAiGvBC,OAjGuB,wFAkGvBC,KAlGuB,kFAmGvBC,SAnGuB,uFAoGvBC,QApGuB,qFAqGvBC,aArGuB,8FAsGvBC,UAtGuB,4FAuGvBC,SAvGuB,6FAwGvB,eAxGuB,uGAyGvB,eAzGuB,8FA0GvBC,SA1GuB,iFA2GvBC,aA3GuB,+FA4GvBC,UA5GuB,gFA6GvB,iBA7GuB,2GA8GvBC,OA9GuB,iGA+GvBC,MA/GuB,wFAgHvBC,OAhHuB,kFAiHvBC,IAjHuB,qGAkHvBC,SAlHuB,sFAmHvB,iBAnHuB,2FAoHvB,mBApHuB,2GAqHvBC,OArHuB,4FAsHvBC,KAtHuB,wFAuHvBC,OAvHuB,iGAwHvBC,SAxHuB,oFAyHvBC,QAzHuB,oFA0HvBC,QA1HuB,0FA2HvBC,cA3HuB,qGA4HvB,kBA5HuB,iGA6HvBC,WA7HuB,sFA8HvB,oBA9HuB,wHA+HvBC,MA/HuB,gGAgIvBC,OAhIuB,mFAiIvBC,SAjIuB,6FAkIvBC,WAlIuB,uFAmIvB,mBAnIuB,gGAoIvBC,QApIuB,iGAqIvBC,MArIuB,6FAsIvBC,OAtIuB,wFAuIvBC,OAvIuB,kFAwIvBC,MAxIuB,6FAyIvBC,MAzIuB,kFA0IvBC,OA1IuB,+FA2IvBC,YA3IuB,gGA4IvBC,MA5IuB,4GA6IvBC,QA7IuB,kGA8IvBC,OA9IuB,kGA+IvBC,UA/IuB,4FAgJvBC,OAhJuB,6GAiJvBC,KAjJuB,yFAkJvB,aAlJuB,wGAmJvB,qBAnJuB,wGAoJvB,mBApJuB,mGAqJvBC,MArJuB,oFAsJvB,kBAtJuB,yFAuJvBC,OAvJuB,iGAwJvB,mBAxJuB,4GAyJvBC,UAzJuB,gHA0JvBC,UA1JuB,6FA2JvBC,UA3JuB,2GA4JvBC,KA5JuB,gGA6JvBC,SA7JuB,gGA8JvB,uBA9JuB,yGA+JvBC,UA/JuB,oGAgKvB,cAhKuB,yGAiKvB,UAjKuB,0FAkKvB,WAlKuB,kGAmKvB,cAnKuB,gGAoKvBC,QApKuB,4FAqKvBC,QArKuB,gFAsKvB,gBAtKuB,0GAuKvBC,QAvKuB,gFAwKvBC,MAxKuB,yFAyKvBC,UAzKuB,kGA0KvBC,QA1KuB,sGA2KvB,gBA3KuB,0GA4KvB,mBA5KuB,mGA6KvB,eA7KuB,uGA8KvBC,OA9KuB,8GA+KvBC,QA/KuB,gFAgLvB,eAhLuB,0FAiLvB,eAjLuB,0GAkLvBC,UAlLuB,uGAmLvBC,UAnLuB,4FAoLvB,iBApLuB,6GAqLvBC,SArLuB,gGAsLvBC,QAtLuB,kGAuLvB,cAvLuB,uFAwLvBC,YAxLK,+FA2LMC,WAAwBC,GAGnC,MAFiB,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAA1E,YACYA,EAAZ,WAIWC,EAAN,Q,iDAvWM7J,E,uDAMAI,E,8DAOAK,E,0DAIAE,E,oEAIAE,E,iEAkCAG,E,gEAIAE,E,gEA+BAC,E,gEA2BAC,E,gEAuBAC,E,mEA0BAC,E,4DA2LAqI,E,wEAMAE,E,mIAvWA7J,E,uDAMAI,E,8DAOAK,E,0DAIAE,E,oEAIAE,E,iEAkCAG,E,gEAIAE,E,gEA+BAC,E,gEA2BAC,E,gEAuBAC,E,mEA0BAC,E,4DA2LAqI,E,wEAMAE,E,mwBCnWb,I,IAAMC,EAAgBC,IAAH,2FAAGA,CAAH,CAAnB,sBAGMC,EAAoBD,IAAH,+FAAGA,CAAH,8LAOX,+BAKNE,EAAWF,IAAH,oFAAGA,CAAH,CAAd,wCAIMG,EAAWH,IAAH,sFAAGA,CAAH,2HAQV,qFAQEI,EAAYJ,IAAH,uFAAGA,CAAH,CAAf,8DAOMK,EAAcC,cAAH,CAAjB,wHAQMC,EAAWP,IAAH,sFAAGA,CAAH,QAAd,GAGMQ,EAAeR,IAAH,0FAAGA,CAAH,QAAlB,GAGMS,EAAWT,IAAH,sFAAGA,CAAH,+CAAd,GAKMU,EAAQV,IAAH,mFAAGA,CAAH,CAAX,mDAIMW,EAAUX,IAAH,qFAAGA,CAAH,CAAb,mDAIMY,EAAkBZ,IAAH,8FAAGA,CAAH,sBAGf,uCAEAM,cADgB,CADhB,gIAeAO,EAAoBb,IAAH,gGAAGA,CAAH,CAAvB,wHASMc,EAA0Bd,IAAH,sGAAGA,CAAH,yHAA7B,KAOMe,EAAaf,IAAH,0FAAGA,CAAH,CAAhB,2BAGMgB,EAAqBhB,IAAH,iGAAGA,CAAH,2RASpB,gBAAGiB,EAAH,gBACAA,GACAX,cADM,gBADN,MAKA,gBAAGY,EAAH,cACAA,GACAZ,cADI,cADJ,MAKA,gBAAGa,EAAH,aACAA,GACAb,cADG,aADH,MAKA,gBAAGc,EAAH,eACAA,GACAd,cADK,iBADL,KAxBJ,GAwCMe,EAAwBrB,IAAH,oGAAGA,CAAH,CAA3B,+C,iDAlJMD,E,oGAGAE,E,wGAYAC,E,+FAIAC,E,+FAgBAC,E,gGAOAC,E,kGAQAE,E,+FAGAC,E,mGAGAC,E,+FAKAC,E,4FAIAC,E,8FAIAC,E,sGAkBAC,E,wGASAC,E,8GAOAC,E,iGAGAC,E,yGAwCAK,E,uKAlJAtB,E,oGAGAE,E,wGAYAC,E,+FAIAC,E,+FAgBAC,E,gGAOAC,E,kGAQAE,E,+FAGAC,E,mGAGAC,E,+FAKAC,E,4FAIAC,E,8FAIAC,E,sGAkBAC,E,wGASAC,E,8GAOAC,E,iGAGAC,E,yGAwCAK,E,wfClJN,I,IAAMC,WAAa,KACjB,IAAIC,EAAUC,UAAwB,yCAA0BC,EAA1B,aAAtC,IAIA,OAHIC,IACFH,EAAUA,UAAe,SAAAI,GAAI,aAAI,UAAAA,EAAA,wCAAwBD,aAAxB,EAAwBA,EAA5B,gBAExBH,EAAA,KAAY,cAAkB,IAAD,QAG5BK,EAFcD,EAApB,MAEgBE,MADhB,QAEIC,EAAJ,EAMA,OAJIF,GAAWA,SAAf,IACEE,EAAc,IAASF,OAAT,IAAdE,KAGK,CAELC,UAFK,uBAGLL,GAAE,UAAEC,EAAF,uBAAEA,EAHC,WAILK,MAJK,EAKLC,MALK,EAMLC,YAAaC,YAAcR,EANtB,cAOLS,kBAAmBC,YAAoBC,YAAuBX,EAPzD,kBAQLY,eARK,KASLC,KATK,aAYLC,SAAU,IAASd,EAAT,UAZL,WAaLe,eAAgB,IAASf,EAAT,YAbX,WAcLgB,SAAUhB,EAdL,QAeLiB,QAASC,YAAiBlB,EAfrB,cAgBLmB,SAhBK,MAmBLC,YAAY,UAAApB,EAAA,8EAnBP,IAsBLqB,qBAAsBV,YAAuBX,EAtBxC,iBAuBLsB,QAvBK,SAwBLC,SAAQ,UAAEvB,EAAF,4BAAEA,UAxBL,GAyBLwB,KAAMxB,EAzBR,cA8BEyB,WAAY,KAChB,YAAIpS,OAAsB,CACxB,IAAMqS,EAAYrS,YAAcA,OAAdA,KAAlB,KACA,OAAIqS,GACFA,mBAKAC,aAAY,OAChBF,EAAU,OAAQ,CAChBG,SADgB,WAEhBC,KAFgB,KAGhBC,SAHgB,KAIhBC,YAAa1S,OALC,cAQZ2S,WAAgB,KAAoC,IAAD,MAC/CC,EAAa5S,OAArB,kBACQ6S,EAAR,kBACMC,EAAG,UAAG9S,OAAH,mCAAGA,EAAH,qCAAGA,UAAZ,WACM+S,EAAG,UAAGC,YAAH,2BAAGA,YAAZ,GACMC,EAAiC,oBAAXjT,QAA0B,IAAIkT,gBAAgBlT,gBAA1E,QAEAoS,EAAU,YAAa,CACrBe,aADqB,WAErBC,QAFqB,KAGrBC,YAHqB,KAIrBC,YAJqB,WAKrBC,YALqB,MAMrBC,YANqB,EAOrBC,eAPqB,EAQrBC,UAAWT,aAAF,EAAEA,MARU,KASrBU,QAAS,IAAF,CACLC,OAAQC,EAAc,SADjB,YAEDA,EAAc,CAAEf,IAAF,EAAOC,IAAV,GAXI,IAarBe,SAAUxD,EAbZ8B,MAiBI2B,WAAmBC,GAAe,OAAI5B,EAAU,cAAd,IAClC6B,WAAkBD,GAAe,OAAI5B,EAAU,cAAd,IAEjC8B,WAAoB,OACxB,IAAMC,EAAUC,YAAkBC,EAAlC,GACAN,EAAiB,CACfO,SADe,UAEfC,gBAFe,QAGfC,UAHe,WAIfC,SAAU,CAJZV,KAOAE,EAAgB,CACdH,SAAUxD,EAAWE,EAAkB2D,EADzCF,OAKIS,WAAsB,GAAaC,MAAW,uDAAP,GACvCC,EAAJ,EAKA,OAJIC,IAAJ,IAAkBA,iBAChBD,EAAgBC,cAAwBA,UAAxCD,OAEFA,EAAgB,GAAH,uBAAbA,I,iDA5GItE,E,sEA6CA8B,E,qEASAE,E,qEAQAK,E,yEAwBAoB,E,4EACAE,E,2EAEAC,E,6EAcAQ,E,0IAvGApE,E,sEA6CA8B,E,qEASAE,E,qEAQAK,E,yEAwBAoB,E,4EACAE,E,2EAEAC,E,6EAcAQ,E,ubCzGN,I,IAAMI,EAAoB9F,IAAH,wFAAGA,CAAH,CAAvB,kDAMM+F,EAAkB/F,IAAH,sFAAGA,CAAH,CAArB,0DAMMgG,EAAYhG,IAAH,gFAAGA,CAAH,CAAf,mUA8BMiG,EAAuBjG,IAAH,2FAAGA,CAAH,CAA1B,slBA8CMkG,EAAelG,IAAH,kFAAGA,CAAH,CAAlB,qBAIMmG,EAAsBnG,IAAH,0FAAGA,CAAH,CAAzB,sC,iDA5FM8F,E,kGAMAC,E,gGAMAC,E,0FA8BAC,E,qGA8CAC,E,6FAIAC,E,+JA5FAL,E,kGAMAC,E,gGAMAC,E,0FA8BAC,E,qGA8CAC,E,6FAIAC,E,8eCvFN,I,IAAMC,EAAgBpG,IAAH,wFAAGA,CAAH,CAAnB,2NAgBMqG,EAAQrG,IAAH,gFAAGA,CAAH,CAAX,kBAGMsG,EAAiBtG,IAAH,yFAAGA,CAAH,CAApB,0nOA6hBMuG,EAA2BvG,IAAH,mGAAGA,CAAH,CAA9B,mXAwBMwG,EAAgBxG,IAAH,wFAAGA,CAAH,CAAnB,2NAqBMyG,EAAgBzG,IAAH,wFAAGA,CAAH,CAAnB,uOAmBM0G,EAAe1G,IAAH,sFAAGA,CAAH,CAAlB,wP,iDAhnBMoG,E,sGAgBAC,E,8FAGAC,E,uGA6hBAC,E,iHAwBAC,E,sGAqBAC,E,sGAmBAC,E,gKAhnBAN,E,sGAgBAC,E,8FAGAC,E,uGA6hBAC,E,iHAwBAC,E,sGAqBAC,E,sGAmBAC,E,kNCpnBN,SAASC,EAAY,GAAEvV,MAAwB,EAAxBA,KAAwB,IAAlBwV,iBAAkB,MAAN,GAAM,EAc7C,OAAO,2BAbDC,SAAqB,KACzB,IAAMC,EAAQ1V,QAAW,IAAI2V,OAAO,IAAX,cAAzB,OACA,OACE,oCACGD,OAAU,qBACT,0BAAME,IAAN,EAAcC,MAAOC,kBAAuBN,EAAvBM,cAAiD,CAAEC,WAAnDD,OAArB,IADS,OASGL,CAAmBzV,EAAvC,IAGF,SAASgW,EAAQ,GAAEpQ,MAAsD,EAAtDA,MAAO4P,EAA+C,EAA/CA,UAAWS,EAAoC,EAApCA,SAAoC,IAA1BC,sBAA0B,SACvE,OACE,uBAAeA,eAAf,GACGtQ,GAAS,qBAAa5F,KAAb,EAA0BwV,UADtC,IAEE,2BAHJ,K,iFAOaQ,E,EAAf,EAAe,M,iDAzBNT,E,mFAiBAS,E,2NAjBT,E,mFAiBA,E,oaChBA,I,IAAMG,WAAe,oBACnBC,KAAY,SAAA1W,GAAC,OACX,uBAAGkW,IAAKlW,EAAR,MAAiB2W,KAAM3W,EAAvB,MACGA,EAFQ,W,EAMA4W,Y,EAAf,EAAe,M,iDAPTH,E,4SAAAA,E,ypBCDN,I,IAAMI,EAA0B3H,IAAH,wGAAGA,CAAH,CAA7B,iEAOM4H,EAAwB5H,IAAH,sGAAGA,CAAH,CAA3B,sUA4BM6H,EAAQ7H,IAAH,sFAAGA,CAAH,60BAgCE8H,IAhCb,SAiEMC,EAAO/H,IAAH,qFAAGA,CAAH,CAAV,gJ,iDApGM2H,E,oHAOAC,E,kHA4BAC,E,kGAiEAE,E,4JApGAJ,E,oHAOAC,E,kHA4BAC,E,kGAiEAE,E,qXCvGC,I,IAAMlF,WAAmBmF,GAC9B,OAAQA,GACN,IAAK,cACH,MAAO,IACT,IAAK,iBACH,MAAO,IACT,IAAK,UACH,MAAO,IACT,IAAK,UACH,MAAO,IACT,IAAK,WACH,MAAO,IACT,IAAK,mBACH,MAAO,IACT,IAAK,SACH,MAAO,IACT,IAAK,uBACH,MAAO,IACT,IAAK,SACH,MAAO,KACT,IAAK,WACH,MAAO,KACT,IAAK,WACH,MAAO,KACT,IAAK,UACH,MAAO,KACT,IAAK,oBACH,MAAO,KACT,IAAK,YACH,MAAO,KACT,IAAK,mBACH,MAAO,KACT,IAAK,YACH,MAAO,KACT,IAAK,sBACH,MAAO,KACT,QACE,MApCJ,KAwCW7F,WAAgB6F,GAC3B,OAAQA,GAEN,IAAK,cACL,IAAK,uBACH,MAAO,OAET,IAAK,WACH,MAAO,OAET,IAAK,UACL,IAAK,oBACL,IAAK,iBACL,IAAK,mBACH,MAAO,OAET,IAAK,SACH,MAAO,OAET,IAAK,SACL,IAAK,YACL,IAAK,sBACH,MAAO,OAET,IAAK,UACH,MAAO,OAET,IAAK,UACH,MAAO,OAET,IAAK,WACL,IAAK,YACH,MAAO,QAET,IAAK,WACL,IAAK,mBACH,MAAO,QACT,QACE,MArCJ,KAyCW1F,WAAyB2F,GACpC,OAAQA,GACN,IAAK,WACH,MAAO,IACT,IAAK,QACH,MAAO,IACT,IAAK,sBACH,MAAO,IACT,IAAK,oBACH,MAAO,IACT,IAAK,SACH,MAAO,IACT,IAAK,2BACH,MAAO,IACT,IAAK,uBACH,MAAO,IACT,IAAK,oBACH,MAAO,IACT,IAAK,aACH,MAAO,IACT,IAAK,0BACH,MAAO,KACT,IAAK,kBACH,MAAO,KACT,IAAK,oBACH,MAAO,KACT,IAAK,qBACH,MAAO,KACT,IAAK,4BACH,MAAO,KACT,IAAK,iBACH,MAAO,KACT,IAAK,oBACH,MAAO,KACT,IAAK,eACH,MAAO,KACT,IAAK,gBACH,MAAO,KACT,IAAK,aACH,MAAO,KACT,IAAK,qBACH,MAAO,KACT,IAAK,iBACH,MAAO,KACT,QACE,MA5CJ,KAgDW5F,WAAsB6F,GACjC,OAAQA,aAAR,EAAQA,EAAR,YACE,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACH,MAAO,IACT,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACH,MAAO,IACT,QACE,MAzBJ,K,iDArIWrF,E,yFAyCAV,E,sFA0CAG,E,+FAiDAD,E,uJApIAQ,E,yFAyCAV,E,sFA0CAG,E,+FAiDAD,E,gVClIb,I,IACM8F,EAAN,iBACaC,EAAc,GAAH,OAFxB,WAEwB,SAAjB,eAGMC,EAA2B,CACtCC,WAAYrS,IADP,SAIA,SAASsS,EAAUC,GACxB,MAAO,CACLC,KADK,EAELC,QAAS,CACPJ,WAHJ,IAQa,SAASK,IAAQC,MAA+C,uDAAvCP,EAA0BQ,EAAa,uDAAJ,GACzE,OAAQA,EAAR,MACE,KAAKT,EACH,OAAO,IAAP,GACKS,EADL,SAGF,QACE,OANJ,G,iDAnBF,U,iGACMV,E,yFACOC,E,gGAGAC,E,6GAIGE,E,8FASQI,E,uJAlBxB,U,iGACMR,E,yFACOC,E,gGAGAC,E,6GAIN,E,8FASQ,E,wYCjBf,I,IAAMS,EAAqB9I,IAAH,gGAAGA,CAAH,CAAxB,kVAyBM+I,EAAuB/I,IAAH,oGAAGA,CAAH,CAA1B,+CAMMgJ,EAAmBhJ,IAAH,iGAAGA,CAAH,CAAtB,iFASMiJ,EAAcjJ,IAAH,2FAAGA,CAAH,CAAjB,qI,iDAxCM8I,E,uHAyBAC,E,yHAMAC,E,qHASAC,E,2KAxCAH,E,uHAyBAC,E,yHAMAC,E,qHASAC,E,2SC3CC,I,IAAMC,WAAkBN,GAAK,OAAIA,EAAJ,cACvBO,WAAqBP,GAAK,OAAIM,KAAJ,Y,iDAD1BA,E,iGACAC,E,+JADAD,E,iGACAC,E,sICDbzY,EAAOD,QAAUU,kC,6MCAV,I,IAAMiY,EAAN,sCAEDC,EAAuB,CAC3B7H,iBADF,IAIO,SAAS8H,EAAoBC,GAClC,MAAO,CACLd,KADK,EAELC,QAFF,GAMa,SAASC,IAAQC,MAA2C,uDAAnCS,EAAsBR,EAAa,uDAAJ,GACrE,OAAQA,EAAR,MACE,KAAKO,EACH,OAAO,IAAP,MAEE5H,iBAAkBqH,EAFpB,UAIF,QACE,OAPJ,G,iDAdWO,E,kGAEPC,E,iGAIUC,E,gGAOQX,E,+IAbXS,E,kGAEPC,E,iGAIC,E,gGAOQ,E,uQCbR,I,IAAMG,WAAsBZ,GAAK,OAAIA,WAAJ,kB,iDAA3BY,E,4JAAAA,E,+QCMb,I,IAAMC,WAAe,OAAGzS,EAAH,QAAUwQ,EAAV,UAAmBkC,EAAnB,uBACnB,uBAAqBA,cAArB,GACE,2BADF,GAEE,uBAAclC,QAHG,M,EAONE,Y,EAAf,EAAe,M,iDAPT+B,E,4SAAAA,E,mnBCHN,I,IAAME,EAAgB3J,IAAH,uFAAGA,CAAH,iHAEH,SAAA4J,GAAK,OAAKA,wBAAL,WASfC,EAAa7J,IAAH,mFAAGA,CAAH,qRAeQ8H,IAfxB,SAsBMgC,EAAuB9J,IAAH,8FAAGA,CAAH,CAA1B,gR,iDAjCM2J,E,4FAWAE,E,yFAsBAC,E,8JAjCAH,E,4FAWAE,E,yFAsBAC,E,uICpCNpZ,EAAOD,QAAU,IAA0B,8B,sQCK3C,I,IAAMsZ,EAAc/J,IAAH,6FAAGA,CAAH,CAAjB,2QAcMgK,EAAiBhK,IAAH,+FAAGA,CAAH,CAApB,0VAkCMiK,EAAcjK,IAAH,+FAAGA,CAAH,sQAkBJkK,IAlBb,OAsBMC,EAAwBnK,IAAH,sGAAGA,CAAH,ivCACX8H,IADW,QA2BdoC,IA3Bc,OAkDZ,SAAAN,GAAK,OAAKA,kBAAL,UAlDO,IA4EZM,IA5EY,MAwFZA,IAxFf,O,iDAtEMH,E,wGAcAC,E,2GAkCAC,E,wGAsBAE,E,6KAtEAJ,E,wGAcAC,E,2GAkCAC,E,wGAsBAE,E,0YCvEN,I,IAAMC,EAAyBpK,IAAH,kGAAGA,CAAH,8fASJ8H,IATI,gBAA5B,KA4BMuC,EAAarK,IAAH,sFAAGA,CAAH,CAAhB,2IAYMsK,EAAStK,IAAH,kFAAGA,CAAH,CAAZ,uX,iDAxCMoK,E,iHA4BAC,E,qGAYAC,E,4JAxCAF,E,iHA4BAC,E,qGAYAC,E,kVCxCN,I,IAAMC,EAAiBvK,IAAH,+FAAGA,CAAH,CAApB,4cAoCMwK,EAAWxK,IAAH,yFAAGA,CAAH,yIAKQkK,IALR,MAMHpC,IANX,S,iDApCMyC,E,qHAoCAC,E,0KApCAD,E,qHAoCAC,E,uVCrCN,I,IAAMC,EAAmBzK,IAAH,wFAAGA,CAAH,0BACA8H,IADtB,OAGM4C,EAAe1K,IAAH,oFAAGA,CAAH,CAAlB,8JAUM2K,EAAa3K,IAAH,kFAAGA,CAAH,6OACD,SAAA4J,GAAK,OAAKA,iBAAL,UAEA,SAAAA,GAAK,OAAKA,sBAAL,SAOD9B,IAVxB,SAqBM8C,EAAkB5K,IAAH,uFAAGA,CAAH,CAArB,0HAWM6K,EAAW7K,IAAH,gFAAGA,CAAH,CAAd,wC,iDA7CMyK,E,mGAGAC,E,+FAUAC,E,6FAqBAC,E,kGAWAC,E,sJA7CAJ,E,mGAGAC,E,+FAUAC,E,6FAqBAC,E,kGAWAC,E,0QC1CSlC,I,EAAf,EAAe,M,4hBCJAA,I,EAAf,EAAe,M,kgBCAAA,I,EAAf,EAAe,M,yjBCMf,I,IAAMmC,WAAY,GAAGzD,MAAe,EAAfA,SACb0D,EAAQC,YAAeha,OAA7B,aACA,OAAO,uBAAgB+Z,MAAhB,GAAP,IAGIE,aAAiB,OACrB,yBACE,sBAFmB,Q,EAMRA,E,EAAf,EAAe,M,iDAXTH,E,4DAKAG,E,wLALAH,E,4DAKAG,E,oWCJN,I,IAAMC,aAAmB,YAAyB,IAAXC,GAA0BA,EAAjC,6BAAuEA,EAAvE,+BAA+G,SAAAC,GAAC,WAE1IC,aAAiB,OACrBC,WADqB,CAEnBC,YADK,KAELL,M,EAGW,SAAAM,GAGb,OAFcC,YAAYC,YAAD,KAA0CL,M,EADrE,EAAe,M,iDARTH,E,yEAEAG,E,oMAFAH,E,yEAEAG,E,oQCXN,mL,0JCAA,I,IAAMM,EAAN,GAEe,SAAShD,IAAQC,MAA0C,uDAAlC+C,EAAqB9C,EAAa,uDAAJ,GAGhE,OAFIA,EAAR,O,iDAHI8C,E,8FAEkBhD,E,6IAFlBgD,E,8FAES,E;s4MCYf,IAAMC,EAASC,4BAAH,WAAZ,0mBAqCMC,EAAe9L,IAAH,wEAAGA,CAAH,CAAlB,4BAKA,SAAS+L,EAAI,GAAEzC,MAAuB,EAAvBA,oBACb,EAAoC0C,oBAApC,cAAOnH,EAAP,KAAoBoH,EAApB,KAyBA,OAvBAC,qBAAU,WACR,IAAM1C,EAAmB,+BAAG,6GAGExY,4BAHF,gFAGxBwQ,EAHwB,qDAKxBA,KALwB,eAO1B8H,KAP0B,8EAAH,OAAnBE,WAAmB,mCAUrB2C,GAAJ,EAEInb,OAAJ,YACMA,iCAAJ,gBACEmb,KACAF,OAGJ3I,cACAkG,UAA2B,SAAAhI,GAAgB,OAAImC,YAAcwI,EAAlB,QApB7CD,IAwBE,yBACE,oBADF,MAEE,2BACE,sBADF,MAEGrH,GAAe,sBAFlB,MAGE,uBAAWA,YAHb,IAIE,sBAPN,OAaF,I,IAAMuH,EAAqB,CACzB9C,oBADF,K,EAIe+C,iBACbC,YAAO,KAAPA,GADaD,I,EAAf,EAAe,M,iDArFTT,E,yDAqCAE,E,+DAKGC,E,sDAuCHK,E,wUAjFAR,E,yDAqCAE,E,+DAKN,E,sDAuCMM,E,yZC1FN,I,IAAMG,WAAS,OAAGlF,EAAH,WAAgBuC,EAAhB,gBACb,mCAAe4C,MAAf,KACE,+BACE,sBADF,QAGE,sBALS,S,EAUAD,E,EAAf,EAAe,M,iDAVTA,E,iPAAAA,E,6YCKN,I,IAAME,aAAW,OACf,uBAASzV,MAAO5F,aAAhB,cAA6CwV,UAAWxV,aAAxD,qBACE,2BACE,2BACE,2BACE,uBAAc4F,MAAO5F,yBAArB,MAAsDoW,QAAtD,IAA+EkC,eADjF,IAGE,uBAAc1S,MAAO5F,0BAArB,MAAuDoW,QAAvD,IAA+EkC,eAHjF,IAKE,uBAAelC,QALjB,MAOE,uBAAcxQ,MAAO5F,yBAArB,MAAsDoW,QAPxD,MASE,uBAAiBxQ,MAAO5F,0BAbjB,a,EAoBFsW,Y,EAAf,EAAe,M,iDApBT+E,E,gOAAAA,E,4aCFN,I,IAAMC,WAAgB,OAAGlF,EAAH,iBACpB,2BACE,8BACE,uBAAGmF,UADL,mBACgCvb,yBAFlC,OAIGA,yBAJH,SAKE,6BAAMA,yBALR,iBAME,uBAAcoW,QAPI,M,EAWPkF,E,EAAf,EAAe,M,iDAXTA,E,qTAAAA,E,yiBCFN,I,IAAME,WAAkB,GAAG5V,IA8BjB6V,EACAC,EACAC,EACAC,EAjCiBhW,EAAY,EAAZA,MA2CzB,OACE,2BACE,2BADF,GAEE,uBAAcwQ,SAhBVqF,EAAc,IAApB,KACMC,EAbFG,SAAgBpN,GACpB,IAAMqN,EAAI,IAAIC,KAAKA,SAAStN,EAATsN,cAA6BtN,EAA7BsN,WAA8CtN,EAAjE,YAEAqN,aAAaA,kBAAsBA,eAAnCA,IAEA,IAAME,EAAY,IAAID,KAAKA,gBAA3B,IAIA,OAFeE,YAAYH,EAAD,SAAD,GAAzB,GAMmBD,CAAnB,GACMF,EAAmBnN,YAAzB,GACMoN,EAAgBF,EAAaxV,IAAnC,QACmBA,QAAmCA,IAAtD,IACc,KAAe,SAAA6L,GAC3B,IAAMmK,EAAenK,EAArB,cAGA,MAAO,CAAEnM,MAtCPuW,SAAuB,KAC3B,OAAQC,GACN,QACA,IAAK,SACL,IAAK,UACH,MAAO,mBAAP,UACF,IAAK,YACL,IAAK,WACH,MAAO,WAAP,UACF,IAAK,SACL,IAAK,WACH,MAAO,oBAAP,UACF,IAAK,SACH,MAAO,cAAP,OAZJ,IAmCgBD,CAAqBR,EAAnC,GAEgBhW,KADH,GAAH,OAAMQ,IAAN,GAAV,oC,EAaSmQ,Y,EAAf,EAAe,M,iDAnDTkF,E,2TAAAA,E;s4MCaN,I,IAAMa,EAAN,iCAEMC,aACJ,IAOA,EAAkC1B,oBAAlC,cAAO2B,EAAP,KAAoBC,EAApB,KACA,EAAoC5B,mBAAS,CAAE6B,aAAF,GAAoBC,UAAjE,gBAAOC,EAAP,KAAmBC,EAAnB,KACA,EAAoChC,mBATV,CACxBiC,KADwB,GAExBC,KAFwB,GAGxBC,QAHwB,GAIxBC,cAJF,KASA,WAAOC,EAAP,KAAmBC,EAAnB,KACA,EAAkCtC,oBAAlC,cAAOuC,EAAP,KAAkBC,EAAlB,KAEA,SAASC,EAAYC,GAKnB,IAJA,IAAMC,EAAOtB,WAAWA,kBAAxB,GACIuB,EAAJ,EACI7Z,EAAJ,EAEOA,EAAQ2Z,EAAf,QAA+B,CAE7B,GAAIC,GADJC,GAAcF,KAAdE,YAEE,OAAOF,EAAP,GAEF3Z,IAGF,OAAI2Z,SAAJ,EACSA,EAAP,GAEK,GAGT,SAASG,IACPL,MAjCwB,gFAoC1B,4FACMxd,OADN,kDAE4BA,2CAA2C0F,IAFvE,yBAEQoY,EAFR,4BAIU9d,OAAJ,YACMA,iCAAJ,gBACE8d,EAAcC,WAAdD,MAGAA,UAAsBA,gBAThC,2BAUcE,EAAkB,IAVhC,GAWcC,EAAU,CACd,eAZV,8BAccC,wBAAiD,CAAED,QAAnDC,UAAmE,SAAAC,GACvEvB,MACA,IAAME,EAAYgB,cAAuB,SAAAnN,GAAI,OAAIA,EAAJ,SACvCkM,EAAesB,EAArB,KACAnB,EAAc,CAAEH,aAAF,EAAgBC,UAA9BE,OAlBV,6CApC0B,sBA6D1B9B,qBAAU,WAAM,oCACd,qFACEoC,EAAcG,EAAdH,MADF,SAEQc,IAFR,4CADc,uBAAC,WAAD,wBAKdC,KALFnD,IAQA,IAAMoD,EAAkB3B,EAAc,uBAAcpF,UAAd,IAAoCsG,SAAvC,IAAgE,gCAAiCjB,WAApI,KAEQK,EAAuCI,EAA/C,KAAcF,EAAiCE,EAA/C,QAAuBH,EAAwBG,EAA/C,KAA6BD,EAAkBC,EAA/C,cACA,OACE,kBAAC,IAAD,cACE,2BACE,2BADF,GAGE,uBAAgBkB,MAAhB,EAAiCC,MAAjC,EAAmDpe,KAAnD,EAA+Dqe,QAA/D,EAAiF1Y,KAAjF,EAA6F2Y,aALnG,OAWIC,WAAkB/G,GAAK,MAAK,CAChCN,WAAYa,YADe,K,EAIdmD,YAAO,EAEpB,CAAE/D,UAFW+D,S,EAAf,EAAe,M,iDAzFTmB,E,kGAEAC,E,iGAmFAiC,E,oWArFAlC,E,kGAEAC,E,iGAmFAiC,E;w2QC7FAC,a,soBACgB,WAClB,GAAIC,+EAAQA,8EAAZ,OAAyB,CACvB,IAAMC,EAASD,sKAAf,kBACAC,SACAA,4BAAiC,cAE3BC,wBAAoCA,qBAAxC,GACE,YAAeA,cAAf,IAGF,iBAAIA,eACEC,WAASA,aAATA,mBAAJ,EACEC,oHAEAD,WAASA,QAATA,QACAC,uIAKN,IAAMC,EAAmBD,uBAAzB,kBACME,EAAqBF,uBAA3B,oBAEAC,4BAA2C,WAGzCA,sBAAsCE,wHAGxCD,4BAA6C,WAG3CA,sBAAwCC,qHAG1C,IAAMC,EAAMJ,uBAAZ,6CACMK,EAAeL,uBAArB,yBACMM,EAAaN,uBAAnB,gBACMO,EAAaP,uBAAnB,gBAEAI,gKAA8B,8GAC5BI,mBAD4B,SAEJ,cACtBX,uBADsB,MAEtBA,uBAFsB,MAGtBA,8BAHsB,MAItBA,yBAJsB,MAKtBA,wBALsB,MAMtBzZ,2CAR0B,gBAEtBqa,EAFsB,OAU5B1f,4BAA4B0F,2CAA5B1F,gBACAif,yBAX4B,2CAA9BI,uDAcAC,gKAAuC,8GACrCG,mBADqC,SAEb,cACtBX,uBADsB,MAEtBA,uBAFsB,MAGtBA,8BAHsB,MAItBA,yBAJsB,MAKtBA,wBALsB,MAMtBzZ,2CARmC,iBAE/Bqa,EAF+B,OAUrC1f,4BAA4B0F,2CAA5B1F,gBACAif,yBAXqC,2CAAvCK,uDAcAC,gKAAqC,8GACnCE,mBADmC,SAEX,cACtBX,uBADsB,MAEtBA,uBAFsB,MAGtBA,8BAHsB,MAItBA,yBAJsB,MAKtBA,wBALsB,MAMtBzZ,2CARiC,aAE7Bqa,EAF6B,OAUnC1f,4BAA4B0F,2CAA5B1F,gBACAif,yBAXmC,2CAArCM,uDAcAC,gKAAqC,8GACnCC,mBADmC,SAEX,cACtBX,uBADsB,MAEtBA,uBAFsB,MAGtBA,8BAHsB,MAItBA,yBAJsB,MAKtBA,wBALsB,MAMtBzZ,2CARiC,aAE7Bqa,EAF6B,OAUnC1f,4BAA4B0F,2CAA5B1F,gBACAif,yBAXmC,2CAArCO,uDAcA,IAAMG,EAAYV,uBAAlB,8CACMW,EAAaX,uBAAnB,wBACMY,EAAgBZ,uBAAtB,yCACQpB,EAAa,EAArB,eAEI8B,GACFA,+IAAoC,gGAClC9B,IADkC,4CAKlC+B,GACFA,+IAAqC,gGACnC/B,IADmC,4CAKnCgC,GACFA,+IAAwC,gGACtChC,IADsC,gD,mMAOlC,SAAAvG,GACW2H,uBAArB,kBACAa,iCAEAvI,EADsB,EAAtB,iBACAA,M,sVAGyB,gIAEL2G,uEAAgC,CAAE6B,OAAQ,CAAEC,YAFvC,mBAEjBC,EAFiB,yBAGhBA,EAHgB,2H,gYASb,iJACNC,EADM,IAERC,EAFQ,gCAKL9a,2CALK,cAQLA,2CARK,iBASLA,2CATK,6BAMR8a,YANQ,mCAURA,2BAVQ,mEAgBRC,EAhBQ,UAiBRC,EAAOC,EAjBC,qBAqBVF,iGACIG,SAAJ,IACQC,EAAgBD,KADA,OAEd7P,EAAa8P,EAFC,GAEV/I,EAAS+I,EAFC,KAGtBxgB,qDACAA,qDAAsD,qFAAtDA,IACAogB,EAAS,GAAH,2CAANA,IA3BQ,2BAgCJK,EAhCI,GAiCV,8FAAkC,SAAAC,GAChC,IAAMC,EAAMC,EAAZ,GACID,GAAOA,EAAX,OACEF,EAAUE,EAAVF,MAAsBA,EAAUE,EAAVF,OAAtBA,IACA,IAAIA,EAAUE,EAAVF,cAA4BE,EAA5BF,KACFA,EAAUE,EAAVF,WAAyBE,EAAzBF,QAKFV,EA3CM,GA4CV,8FAA+B,SAAAW,GAC7B,IAAMG,EAAOJ,UAAb,KACAV,GAAU,GAAJ,uBAANA,QAGFA,EAASA,cAAoBA,SAA7BA,GAGIe,mBAAJ,QAA+BT,GAAgBS,aACzCC,EAAaD,UAAa,SAAAE,GAAI,MAAIA,YAAJ,SAAuBA,KAAxCF,KArDT,KAsDJG,EAAQC,6BAtDJ,GAuDJC,EAAMpB,mBAvDF,GAwDJqB,EAAYrB,UAxDR,IAyDJsB,GAAaN,yBAAkCA,iBAAlCA,IAAoEA,eAApEA,IAzDT,IA0DJO,EAASjB,kBA1DL,IA4DNS,mBAAJ,QAA+BT,IAC7BA,UAGEL,EAhEM,iJAkENuB,IAAelc,2CAlET,sBAmER2a,cAnEQ,2BAoECuB,IAAelc,2CApEhB,uCAqEY,2BArEZ,WAqER2a,EArEQ,OAsERA,aAtEQ,QAwEVI,EAAS,GAAH,uBAANA,oBAxEU,eA0ENoB,EAAetB,EA1ET,mE,+LA8Ed,WACE,OACE,4DAAC,8CAAD,cACE,sHACE,sHAAe9f,mDADjB,OAEE,sHACE,kHAAgBsQ,GAAhB,gBAAmC+Q,WAL3C,W,yIAzNuB/K,8CAAMgL,e,SAsOlB9C,a,UAAf,S,2BAAe,gC,sIAtOTA,a,oqBAAAA,a,seCTN,I,IAAM+C,EAAO,CACX3C,SAAU,CACR,CACE4C,MAAO,CAELpQ,KAFK,QAGLiG,KAHK,OAILoK,MAAO,CAJF,OAKLC,UALK,EAMLC,MAAO,CAAC,CAAEC,MAAF,QAAkBH,MAAnB,KAAiC,CAAEG,MAAF,UAAoBH,MAArD,OAAqE,CAAEG,MAAF,UAAoBH,MAPpG,OASEI,KAAM,CACJC,WAAY,CAXR,kBAcR,CACEN,MAAO,CACLpQ,KADK,eAELqQ,MAFK,GAGLpK,KAHK,eAIL0K,QAJK,EAKLC,SAAU,SAAAjE,GAAG,OACXA,OAAQ,SAAAre,GACN,IAAMkW,EAAM,IAAYlW,EAAZ,QAAZ,GACM+hB,EAAQ/hB,YAAd,WACA,MAAO,CACLkiB,MAAOliB,EADF,QAEL2X,KAFK,EAGL/G,GAHF,OAMJ2R,QAAS,SAAAC,GAAM,2GAEjBL,KAAM,CACJM,qBADI,EAEJC,YAFI,iCAGJC,MAHI,EAIJC,MAJI,EAKJC,UAAW,CACTC,KAAM,CACJrE,MAvCA,mCA4CR,CACEqD,MAAO,CACLpQ,KADK,UAELqQ,MAFK,GAGLpK,KAHK,eAILqK,UAJK,EAKLK,QALK,EAMLC,SAAU,SAAAjE,GAAG,OACXA,mBAAoB,SAAAre,GAAC,MAAK,CACxB+iB,OADwB,EAExBb,MAAOliB,EAFiB,QAGxB2X,KAAM3X,EAHkB,KAIxB4Q,GAAI5Q,EAJe,QAMvBuiB,QAAS,SAAAC,GAAM,oDAEjBL,KAAM,CACJD,MADI,kCAEJF,UAFI,EAGJgB,SAHI,EAIJP,qBAJI,EAKJC,YALI,kBAMJC,MANI,EAOJC,MAPI,EAQJC,UAAW,CACTC,KAAM,CACJrE,MAtEA,mCA2ER,CACEqD,MAAO,CACLpQ,KADK,SAELiG,KAFK,UAGLsL,OAJJ,GAMEd,KAAM,CACJO,YADI,qBAEJQ,cAFI,EAGJC,KAHI,IAIJH,SArFI,IAwFR,CACElB,MAAO,CACLpQ,KADK,mBAELiG,KAFK,OAGLoK,MAAO,CAHF,uBAILC,UAJK,EAKLC,MAAO,CACL,CAAEC,MAAF,oHAA8HH,MADzH,QAEL,CAAEG,MAAF,sHAAgIH,MARtI,UAWEI,KAAM,CACJC,WAAY,CApGR,gCAuGR,CACEN,MAAO,CACLpQ,KADK,QAELiG,KAFK,OAGLoK,MAAO,CAAC,IAHH,KAILC,UAJK,EAKLC,MAAO,CACL,CAAEC,MAAF,oCAA8CH,MAA9C,IAA0DM,QADrD,GAEL,CAAEH,MAAF,yCAAmDH,MAAnD,IAA+DM,QAF1D,GAGL,CAAEH,MAAF,6BAAuCH,MAAvC,OAAsDM,QAHjD,GAIL,CAAEH,MAAF,qCAA+CH,MAA/C,IAA2DM,QAJtD,GAKL,CAAEH,MAAF,2CAAqDH,MAArD,IAAiEM,QAL5D,GAML,CAAEH,MAAF,kCAA4CH,MAA5C,IAAwDM,QANnD,GAOL,CAAEH,MAAF,+CAAyDH,MAAzD,KAAsEM,QAPjE,GAQL,CAAEH,MAAF,qCAA+CH,MAA/C,KAA4DM,QARvD,GASL,CAAEH,MAAF,sCAAgDH,MAAhD,KAA6DM,QATxD,GAUL,CAAEH,MAAF,sCAAgDH,MAAhD,KAA6DM,QAVxD,GAWL,CAAEH,MAAF,sCAAgDH,MAAhD,IAA4DM,QAXvD,GAYL,CAAEH,MAAF,8CAAwDH,MAAxD,IAAoEM,QAZ/D,GAaL,CAAEH,MAAF,oCAA8CH,MAA9C,IAA0DM,QAbrD,GAcL,CAAEH,MAAF,mCAA6CH,MAA7C,OAA4DM,QApBlE,KAuBEF,KAAM,CACJa,SA/HI,IAkIR,CACElB,MAAO,CACLpQ,KADK,OAELiG,KAFK,OAGLoK,MAAO,CAHF,QAILC,UAJK,EAKLC,MAAO,CAAC,CAAEC,MAAF,kEAA4EH,MANxF,UAQEI,KAAM,CACJC,WAAY,CA3IR,mBA8IR,CACEN,MAAO,CACLpQ,KADK,gBAELiG,KAFK,OAGLoK,MAAO,CAHF,iBAILC,UAJK,EAKLC,MAAO,CACL,CACEC,MADF,4KAGEH,MAHF,kBAIEM,QALG,GAOL,CACEH,MADF,2KAGEH,MAHF,gBAIEM,QAXG,GAaL,CAAEH,MAAF,uEAAiFH,MAnBvF,gBAsBEI,KAAM,CACJC,WAAY,CADR,mBAEJY,SAvKK,KA2KXI,QA3KF,K,EA8KevB,E,EAAf,EAAe,M,iDA9KTA,E,sNAAAA,E,iYCAN,I,IAAMuB,EAAU,CACd,CACE1R,KADF,eAEE2R,GAAI,cACF,GAAIpE,EAAW,CACb,aAAIA,aAAkC,CACpC,IAAMqE,EAAN,GAEA,GAAIpE,2BAAJ,OAEE,IADA,IAAIjf,EAAIif,+BAAR,EACQjf,EAAIif,2BAAZ,OAAsDjf,IACpDqjB,OAAepE,2BAAfoE,IAIAA,SAAJ,IACEpE,uBACAA,4BAGF,IAAMqE,EAActE,cAApB,GAEA,OAAQsE,GACN,IAAK,IACHrE,8BACAA,wBACAA,uBACAA,yBACAA,sBACAA,kCACAA,4BAAmC,CAAnCA,uBACAA,4BAAmC,CAAnCA,qBACA,MAEF,IAAK,IACHA,yBACAA,sBACAA,8BACAA,uBACAA,wBACAA,kCACAA,4BAAmC,CAAnCA,uBACAA,4BAAmC,CAAnCA,qBACA,MAEF,IAAK,MACL,QACEA,8BACAA,wBACAA,uBACAA,yBACAA,sBACAA,kCACAA,4BAAmC,CAAnCA,uBACAA,4BAAmC,CAAnCA,qBAGJsE,0BAGF,aAAIvE,aAAkC,CAEpC,IAAMwE,EAAexE,cAAsBA,qBAA3C,GAiBA,GAfA,SAAIwE,IACFvE,oBAA2B,CAAC,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAxEA,SACAA,oBAA2B,CAA3BA,YACAA,oBAA2B,CAA3BA,YACAA,0BAGF,SAAIuE,IACFvE,oBAA2B,CAAC,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,IAAxEA,SACAA,oBAA2B,CAA3BA,YACAA,oBAA2B,CAA3BA,YACAA,0BAIEuE,eAAwBA,GAAxBA,OAAgDA,GAApD,OAA6EA,EAG3E,IAFA,IAAMC,EAASxE,cAAf,MACMyE,EAAUD,EAAhB,OACSzjB,EAAT,EAAgBA,EAAhB,EAA6BA,IACvByjB,OAAJ,GACExE,iBAAwBwE,EAAxBxE,IAMN,IAAM0E,EAAY,CAAC,IAAK,IAAK,IAAK,KAAlC,MAEA,QAAIA,aAGF,IAFA,IAAMF,EAASxE,cAAf,MACMyE,EAAUD,EAAhB,OACSzjB,EAAT,EAAgBA,EAAhB,EAA6BA,KAC3B,IAAI2jB,UAAkBF,EAAlBE,KACF1E,iBAAwBwE,EAAxBxE,IAKN,IAAM2E,EAAY,CAAC,IAAK,IAAxB,KACA,QAAIA,aAGF,IAFA,IAAMH,EAASxE,cAAf,MACMyE,EAAUD,EAAhB,OACSzjB,EAAT,EAAgBA,EAAhB,EAA6BA,KAC3B,IAAI4jB,UAAkBH,EAAlBG,KACF3E,iBAAwBwE,EAAxBxE,S,EAUDkE,E,EAAf,EAAe,M,iDAtHTA,E,+NAAAA,E,oYCFN,I,IAAMI,EAAQ,CACZM,mBADY,YAGV,IADA,IAAMC,EAAkB5E,0BAAxB,wBACSlf,EAAT,EAAgBA,EAAI8jB,EAApB,OAA4C9jB,IAC1C8jB,6BACI7S,IAAUjR,EAAd,GACE8jB,iCAINC,UAVY,YAYV,IADA,IAAMC,EAAS9E,0BAAf,sBACSlf,EAAT,EAAgBA,EAAIgkB,EAApB,OAAmChkB,IACjCgkB,6BACI/S,IAAUjR,EAAd,GACEgkB,iCAINC,YAnBY,YAqBV,IADA,IAAMC,EAAW,CAAC,eAAgB,eAAlC,gBACSlkB,EAAT,EAAgBA,EAAIkkB,EAApB,OAAqClkB,IACnCkf,uBAAuBgF,EAAvBhF,4BAEF,IAAMiF,EAAW,cAAH,OAAd,GACAjF,sDAEFkF,UA3BY,YA6BV,IADA,IAAMC,EAAU,CAAC,aAAc,aAA/B,cACSrkB,EAAT,EAAgBA,EAAIqkB,EAApB,OAAoCrkB,IAClCkf,uBAAuBmF,EAAvBnF,4BAEF,IAAMiF,EAAW,YAAH,OAAd,GACAjF,sDAEFoF,SAnCY,iBAoCV,IAAIrkB,eACFA,mBAAmB,CACjByX,KADiB,mBAEjBc,KAAM,CACJ+L,SAHJtkB,MAQJukB,mBA7CY,YA8CV,OAAQ/M,GACN,IAAK,IACHyH,4FACA,MAEF,IAAK,IACHA,2FACA,MAEF,IAAK,MACL,QACEA,+F,EAMOqE,E,EAAf,EAAe,M,iDA/DTA,E,yNAAAA,E,6XCON,SAASkB,EAAgB,GAAE5H,MAAuC,EAAvCA,WAAYE,EAA2B,EAA3BA,UAAWD,EAAgB,EAAhBA,aAwB1C4H,EAAqB5H,oDAAyE6H,mBAApG,MAYMC,EAnCAC,WACJ,IAAM7gB,EAAQ+Y,EAAd,OACI+H,EAAJ,GACIC,EAAJ,GAEA,OAAI/gB,EACF,OAAO,0BAAM4X,UAAN,2BAA2CmB,EAAlD,IAGF,OAAI/Y,EAAa,gBACb8gB,EADa,KACFC,EADE,SAEV,CACHD,EADG,YAELC,EAAY,GAAH,OAAM/gB,EAAN,EAAT+gB,iBAEF,OACE,kBAAC,IAAD,cACE,0BAAMnJ,UAAN,2BADF,GAEE,0BAAMA,UAAN,kBAFF,QAGE,0BAAMA,UAAN,2BAJJ,IAoBmBiJ,GACrB,OACE,kBAAC,IAAD,cACE,2BACE,2BAAexkB,iBADjB,oBAEE,2BACE,2BACE,2BACE,uBAAGub,UAAH,kBAA+Bvb,gBADjC,cAEE,uBAAGub,UAAH,mCAAgDvb,gBAFlD,cAGE,uBAAGub,UAAH,kBACGvb,gBADH,aAC8B,0BAAMub,UAAN,oBAD9B,OAC6Fvb,gBALjG,WAQE,2BACE,uBAAQub,UAAR,kBAAoCoJ,QAzB1CC,WACJhlB,4DAwBsEilB,KAA5D,QAAyEC,KAAzE,UAAwFC,QAAxF,UACG/kB,gBAFL,aAIE,uBAAQub,UAAR,cAAgCoJ,QAzBtCK,WACJrR,YAAiB,CACfO,SADe,aAEfC,gBAFFR,UAIA6I,OAoB8DqI,KAApD,QAAiEC,KAAjE,YAAkFC,QAAlF,UACG/kB,gBAlBf,kB,iFA4BaokB,E,EAAf,EAAe,M,iDAjENA,E,6PAAT,E,mfCLA,I,IAAMa,WAAgBlR,GACpB,OAAIA,GAAJ,iBAAsBA,EACbmR,OAAOnR,mBAAd,KAEKA,GAAP,IAGIoR,WAA0BC,GAAgB,OAAKA,EAAmB,MAAH,IAArB,GAE1CC,WAAsB,KAC1B,OAAIC,EACKA,EAAP,OAEEC,EACKN,EAAP,GAEK,GAGHO,WAAiBC,GACrB,OAAIA,GAAJ,iBAAsBA,EACb,IAAWA,QAAlB,WAEKA,GAGIzR,WAAoB,KAC/B,IACE1D,EAaE2D,EAdJ,GAEEyR,EAYEzR,EAdJ,UAGE0R,EAWE1R,EAdJ,8BAIE2R,EAUE3R,EAdJ,gCAKE4R,EASE5R,EAdJ,QAME6R,EAQE7R,EAdJ,WAOEwR,EAOExR,EAdJ,QAQEpD,EAMEoD,EAdJ,MASE8R,EAKE9R,EAdJ,KAUE+R,EAIE/R,EAdJ,MAWEgS,EAGEhS,EAdJ,UAYEiS,EAEEjS,EAdJ,UAaEkS,EACElS,EAdJ,UAeMmS,EAAeX,EAAUD,EAAH,GAA5B,GAEA,MAAO,CACL7U,UADK,EAELE,MAAOoU,EAAcpU,GAFhB,GAGLwV,MAHK,EAIL/V,GAAIA,GAJC,EAKLgW,UAAWjB,EAAoBa,EAL1B,GAMLK,kBAAmBpB,EAAwBU,GANtC,GAOLW,YAAab,GAPR,EAQLtU,SAAU4T,EAAce,GARnB,GASLS,aATF,WAaWC,WAAsB,YAA8BC,OAAYA,SAAwBA,OAAa,SAAA1S,GAAO,OAAID,EAAkBC,EAAtB,MAAtF,I,iDAzD7BgR,E,8EAOAE,E,wFAEAE,E,oFAUAG,E,+EAOOxR,E,kFA+BA0S,E,+IAzDPzB,E,8EAOAE,E,wFAEAE,E,oFAUAG,E,+EAOOxR,E,kFA+BA0S,E,6JC3Db,SAAS9T,EAAUxB,GACjB,IACMwV,EADS,IAAIjR,OAAO,OAAX,6CAAf,KACekR,KAAYhI,SAA3B,QACA,OAAO+H,cAAyBA,EAAhC,GAGF,SAASE,EAAU1V,EAAMqQ,EAAOsF,GAC9B,IAAIC,EAAJ,GACA,GAAID,EAAM,CACR,IAAMtY,EAAO,IAAb,KACAA,UAAaA,YAAiBsY,WAA9BtY,KACAuY,EAAU,aAAH,OAAgBvY,EAAvBuY,eAEFnI,wCAA6B4C,GAA7B5C,yB,2JAbOjM,E,uEAMAkU,E,kIANT,E,uEAMA,E,8RCEA,IAAMG,EAAY,CAChB9I,MAAO+I,SADS,WAEhBlnB,KAAMknB,WAFU,WAGhBvhB,KAAMuhB,WAHU,WAIhB9I,KAAM8I,IAJU,KAKhB5I,aAAc4I,WALhB,YAQMC,EAAe,CACnB/I,MADF,GAIA,SAASgJ,EAAe,GAAEjJ,MAAyC,EAAzCA,MAAOxY,EAAkC,EAAlCA,KAAM3F,EAA4B,EAA5BA,KAAMoe,EAAsB,EAAtBA,KAAME,EAAgB,EAAhBA,aAajD,OACE,uBAAuBF,KAAvB,GACE,uBAAG/H,KAAH,EAAegR,IAAf,sBAAyCC,OAAzC,SAAyDC,UAAzD,oBAAqF5C,QAAS,WAThGhR,YAAiB,CACfO,SADe,EAEfC,gBAFe,QAGfC,UAHFT,eAUK3T,yCADH,EAEE,uBAAawnB,KAAb,IAAqCC,UAHzC,aAKE,uBAAa9C,QAlBjB,WACExG,KAiBiCvY,MAA/B,UACE,uBAAM4hB,KAAN,IAAuB3C,KAAvB,OAAmC6C,MAAnC,UAAmDD,UAPzD,YAaFL,cACAA,iB,UAEeA,E,EAAf,EAAe,M,iDAzCTH,E,+FAQAE,E,kGAIGC,E,8PAZHH,E,+FAQAE,E,kGAIN,E,ibCpBA,I,IAAMQ,EAAW,CACf,CACE9K,KADF,kCAEEE,QAFF,kDAGED,KAHF,iFAIE8K,WAJF,IAKE5K,cANa,sBAQf,CACEH,KADF,2BAEEE,QAFF,6CAGED,KAHF,2FAIE8K,WAZa,GAcf,CACE/K,KADF,oCAEEE,QAFF,6CAGED,KAHF,2FAIE8K,WAlBa,GAoBf,CACE/K,KADF,iCAEEE,QAFF,6CAGED,KAHF,2FAIE8K,WAxBJ,I,EA4BeD,E,EAAf,EAAe,M,iDA5BTA,E,4PAAAA,E,gpJCUN,IAAMV,UAAY,CAChBY,iBAAkBX,0DADF,WAEhBY,OAAQZ,2DACNA,yDAAgB,CACda,OAAQb,0DADM,WAEdc,SAAUd,2DACRA,yDAAgB,CACdthB,MAAOshB,0DADO,WAEde,YAAaf,0DAFC,WAGdgB,MAAOhB,0DAHO,WAIdvhB,KAAMuhB,0DARNA,iBAFV,YAiBMiB,e,0oBACgB,WAElB,OADmB,EAAnB,aACO,KAAW,cAChB,IAAQH,EAAaI,EAArB,SACA,OACE,kEAAKxS,IAAL,EAAiB2F,UAAjB,aACE,uHACE,sEACE,mEAAMA,UAAN,uCAAuD6M,EADzD,QAEGJ,OAAa,qBACZ,qMAAcpS,IAAd,GADY,gB,+HAU1B,WACE,OACE,6GAAShQ,MAAO5F,+CAAhB,MAAqCwV,UAAWxV,+CAAhD,YAA2EkW,gBAA3E,GACE,mHAAyB5F,GAAzB,YACE,uHAAwB+X,KAH9B,yB,2IArByB/R,6CAAMgL,eA+BnC6G,mC,aACeA,e,UAAf,S,2BAAe,gC,sIAjDTlB,U,4GAiBAkB,e,6jBAjBAlB,U,+FAiBAkB,e,kgBCtBN,IAAMlB,EAAY,CAChBthB,KAAMuhB,WADU,WAEhBgB,MAAOhB,WAFS,WAGhBthB,MAAOshB,WAHS,WAIhBe,YAAaf,WAJf,YAOMoB,WAAe,OAAG3iB,EAAH,OAASuiB,EAAT,QAAgBtiB,EAAhB,QAAuBqiB,EAAvB,cAAoCM,EAApC,qBACnB,2BACE,uBAAGhN,UAAS,oBAAZ,GAAoClF,KAApC,EAAgDzQ,MAAhD,EAA8D0hB,OAAQiB,EAAc,cAApF,GACE,gCADF,GAEE,uBAFF,MAFiB,KAUrBD,c,UAEeA,E,EAAf,EAAe,M,iDAnBTrB,E,0GAOAqB,E,kRAPArB,E,0GAOAqB,E,8cCZN,I,IAAME,EAAmB,CACvBX,iBADuB,2CAEvBC,OAAQ,CACN,CACEC,OADF,gBAEEC,SAAU,CACR,CACEpiB,MADF,YAEEqiB,YAFF,eAGEC,MAHF,WAIEviB,KALM,wHAOR,CACEC,MADF,mBAEEqiB,YAFF,4BAGEC,MAHF,WAIEviB,KAXM,qGAaR,CACEC,MADF,aAEEqiB,YAFF,sBAGEC,MAHF,UAIEviB,KAjBM,sGAmBR,CACEC,MADF,sBAEEqiB,YAFF,iCAGEC,MAHF,cAIEviB,KA1BA,wFA8BN,CACEoiB,OADF,4BAEEC,SAAU,CACR,CACEpiB,MADF,OAEEqiB,YAFF,mCAGEC,MAHF,YAIEviB,KALM,mFAOR,CACEC,MADF,uBAEEqiB,YAFF,wCAGEC,MAHF,cAIEviB,KAXM,2GAaR,CACEC,MADF,iBAEEqiB,YAFF,sBAGEC,MAHF,YAIEviB,KAjBM,sGAmBR,CACEC,MADF,yBAEEqiB,YAFF,2CAGEC,MAHF,UAIEviB,KAJF,yHAKE4iB,aAxDA,KA4DN,CACER,OADF,6BAEEC,SAAU,CACR,CACEpiB,MADF,eAEEqiB,YAFF,4BAGEC,MAHF,UAIEviB,KALM,kIAOR,CACEC,MADF,YAEEqiB,YAFF,mBAGEC,MAHF,WAIEviB,KAJF,yDAKE4iB,aAZM,GAcR,CACE3iB,MADF,UAEEqiB,YAFF,6BAGEC,MAHF,WAIEviB,KAJF,qHAKE4iB,aAnBM,GAqBR,CACE3iB,MADF,eAEEqiB,YAFF,qCAGEC,MAHF,YAIEviB,KAJF,iHAKE4iB,aA1FV,O,EAiGeC,E,EAAf,EAAe,M,iDAjGTA,E,wQAAAA,E,omBCeN,IAAMC,EAAW7Z,IAAH,2FAAGA,CAAH,CAAd,uDAKM8Z,EAAoB9Z,IAAH,oGAAGA,CAAH,CAAvB,8VA8BM+Z,EAAkB/Z,IAAH,mGAAGA,CAAH,CAArB,wDAMA,SAASga,EAAW,GAAEC,MAAsB,EAAtBA,SAAU5S,EAAY,EAAZA,SAC9B,OACE,oCACE,yBADF,GAEE,yBAHJ,IAQF,IAAM6S,EAAN,4CAEA,SAASC,EAAuB,GAAE3Y,MAAoB,EAApBA,iBAG1B4Y,WAAiBnJ,GACrBjgB,mBAkCIqpB,WAAgB9Q,GACpB,IAAQ+J,EAAqB/J,EAA7B,OAAgBwO,EAAaxO,EAA7B,SACQ+Q,EAA0ChH,EAAlD,SAAkBtc,EAAgCsc,EAAlD,MAAyB5C,EAAyB4C,EAAlD,UAAoCiH,EAAcjH,EAAlD,UAEA,OAAO,qBAAY2G,SAAZ,GA1BHO,SAAU,OAAgCC,MAAoB,uDAAN,EACtD1lB,EAAQgjB,EAAd,OACA,GAAIhjB,EAAJ,EAAe,CACb,IAAM2lB,EAAiB3lB,MAAc3D,mBAAd2D,gBAAoD3D,mCAA3E,GACMupB,EAAgB5lB,MAAcgjB,KAAdhjB,WAAtB,EACA,OACE,oCACGgjB,OAAa,SAAA1S,GACZ,IAAMQ,EAAeR,EAArB,WAEA,OADAQ,EAAaH,YAAoBG,EAAjCA,GAEE,2BAAamB,IAAK3B,KAAlB,EAAyCuV,SAAzC,2BAAsF/U,WAAtF,EAA8GgV,cAA9G,EAAmIC,OADrI,UAKF,uBAAWjS,OAAQ,kBAAMuR,EAAeO,EA9BhD,iEA8BuFvpB,KAA/E,EAAqG2pB,SAArG,IAAgID,OAVpI,OAcF,OAAO,uBAAajS,OAAQ,kBAAMuR,EAAN,IAAiChpB,KAAMA,mBAA5D,WAA4F2pB,SAA5F,IAAkHD,OAAzH,MAOqCN,CAAQF,EAAUvC,EAAUrH,EAAjE,KAmBF,OAAO,oCAjBDsK,SAAaC,GACjB,IAAMlmB,EAAQkmB,EAAd,OACA,GAAIlmB,EAAJ,EAAe,CACb,IAAMiC,EAAQ5F,yCAAd,GACMwV,EAAYxV,mDAAlB,GACA,OACE,uBAAS4F,MAAT,EAAuB4P,UAAvB,GACGqU,OAAY,SAAA1R,GAAI,OAAI8Q,EAAJ,MACjB,qBAAiBtE,QAAS,kBA5ChChR,YAAiB,CACfO,SADe,eAEfC,gBAFe,QAGfC,UAHFT,uBAKA/T,mDAuC+DilB,KAAzD,SAAuEC,KAAvE,YAAwFC,QAAxF,UACG/kB,mBAJP,iBASF,OAAO,+BAAP,MAGQ4pB,CAAV,IAGF,I,IAAMrL,WAAkB/G,GAAK,MAAK,CAChCpH,iBAAkBgI,YADS,K,EAId8C,kB,EAAf,EAAe,M,iDAxHTuN,E,8GAKAC,E,uHA8BAC,E,qHAMGC,E,gHASHE,E,wHAEGC,E,4HAgEHxK,E,+RApHAkK,E,8GAKAC,E,uHA8BAC,E,qHAMN,E,gHASMG,E,wHAEN,E,4HAgEMvK,E,0iBC1GN,IAAMuL,WAAuBC,GAC3B,IAAMC,EAAgB/N,UAAS,IAAIF,MAAOkO,UAAY,IAAIlO,KAAKgO,GAAzC9N,WAAtB,IAEA,GAAI+N,EAAJ,EACE,OAAOhqB,oBAAP,iBAEF,GAAIgqB,EAAJ,GACE,OAAOhqB,kCAAmCic,WAA1C,IAGF,IAAMiO,EAAcF,EAApB,GAEA,GAAIE,MAAoBA,EAAxB,EACE,OAAOlqB,oBAAP,aAEF,GAAIkqB,MAAoBA,EAAxB,GACE,OAAOlqB,gCAAiCic,WAAxC,IAGF,IAAMkO,EAAaD,EAAnB,GAEA,OAAIC,MAAmBA,EAAvB,EACSnqB,oBAAP,UAEEmqB,GAAJ,GACSnqB,+BAAgCic,WAAvC,KAKJ,SAASmO,EAAa,GAAEzmB,MAAS,EAATA,MACtB,OACE,uBAAoBkM,OAApB,MAAiCC,KAAjC,OACE,8BADF,GAEE,uBAAY0X,KAAZ,IAA+B3C,KAHnC,UAQF,SAASwF,IACP,OACE,2BACE,6BAAMrqB,YAFV,UAOF,SAASsqB,EAAgB,GAAEC,MAAsC,EAAtCA,UAAWrE,EAA2B,EAA3BA,UAAWtP,EAAgB,EAAhBA,aACzC4T,EAAYtE,GAAaA,SAAbA,IAAlB,EACA,OACE,2BACGqE,GAAa,oBADhB,MAEGC,GACC,kBAAC,IAAD,cACE,uBAAmBC,UAAnB,EAAyC7T,aAD3C,IAEE,qBAAcjT,MAAOuiB,EAL3B,WAQIsE,GAAa,sBATnB,OAcF,SAASE,EAAYlS,GACnB,IAAQgR,EAAmKhR,EAA3K,SAAkB0N,EAAyJ1N,EAA3K,UAA6B3H,EAA8I2H,EAA3K,MAAoC5B,EAAuI4B,EAA3K,aAAkDiN,EAAyHjN,EAA3K,QAA2DmS,EAAgHnS,EAA3K,SAAqE+R,EAAsG/R,EAA3K,UAAgFwN,EAA2FxN,EAA3K,MAAuF/D,EAAoF+D,EAA3K,WAAmGuR,EAAwEvR,EAA3K,aAA2KA,EAA3K,aAA+GiR,OAA/G,WAA2KjR,EAA3K,OAAoIkR,OAApI,gBAAsJtZ,EAAqBoI,EAA3K,iBACMoS,EAAiBd,EAAvB,GAEA,OACE,uBAAmBJ,OAAnB,GACE,6BACE,qBAAiBa,UAAjB,EAAuCrE,UAAvC,EAA6DtP,aAD/D,IAEE,uBAAUP,KAAV,EAA4BiR,OAA5B,SAA4CD,IAA5C,sBAAsE1C,QAAS,kBAAM7Q,YAAkB0E,EAAOgR,EAA/B,KAC7E,uBAAUe,UAAV,GACE,2BADF,GAEE,2BAFF,GAGE,uBAAiBM,iBAAkB7E,GAAnC,GACGA,GAAS,2BADZ,GAEGP,GAAW,2BALhB,IAOE,2BAPF,GAQGgE,GACC,2BACGzpB,oBADH,WAdZ,OAyBF,I,IAAMue,WAAkB/G,GAAK,MAAK,CAChCpH,iBAAkBgI,YADS,K,EAId8C,kB,EAAf,EAAe,M,iDAhGT4O,E,oGA8BGM,E,4FASAC,E,8FAQAC,E,+FAgBAI,E,2FA6BHnM,E,mPA5FAuL,E,oGA8BN,E,4FASA,E,8FAQA,E,+FAgBA,E,2FA6BMvL,E,yeC/GN,IAAM0I,EAAY,CAChBwD,UAAWvD,YAAkBA,IAAlBA,QADK,WAEhBtQ,aAAcsQ,WAFhB,YAIM4D,EAAclc,IAAH,sFAAGA,CAAH,CAAjB,+EAMA,SAASmc,EAAT,GAA6BN,MAA0B,EAA1BA,UAAW7T,EAAe,EAAfA,aAgBhCoU,EAAN,IAAoBP,SACdQ,EAdGR,OAAc,SAAAS,GAAK,OACxB,6BAAStV,IAAT,GACE,yBAAKuV,QAAL,OAAoBC,IAApB,EAAgCC,IAFV,QAgB5B,OACGL,EACC,qBAAaI,IAAKX,EAAlB,GAAgCY,IADtB,IAGV,6BAdkB,CACpBhU,KADoB,OAEpBxB,MAAM,CACJyV,MADI,OAEJ5B,OAJJ,SAcI,CAA2B7E,KAA3B,WAJJ,GAWFkG,c,UACeA,E,EAAf,EAAe,M,iDAzCT9D,E,gGAIA6D,E,kGAMGC,E,mQAVH9D,E,gGAIA6D,E,kGAMN,E,8UChBAxrB,EAAOD,QAAU,IAA0B,oC,gLCMpC,IAAMksB,EAAmB,CAC9BC,WAD8B,aAE9BC,SAFK,YAKD7T,EAAmBhJ,IAAH,mFAAGA,CAAH,CAAtB,oFAOM8c,EAAkB9c,IAAH,iFAAGA,CAAH,CAArB,6IAUM+I,EAAuB/I,IAAH,sFAAGA,CAAH,CAA1B,8BAIM+c,EAAkB/c,IAAH,+EAAGA,CAAH,4FAKV8H,IALX,WAQMgB,EAAqB9I,IAAH,oFAAGA,CAAH,iJAOb,4BAAwB2c,EAATlU,iBAAf,UACC,+BACR,4BACSkU,EAATlU,YACAnI,cADAmI,mZADA,MAqCJ,SAASuU,EAAU,GAAE5rB,MAA8E,EAA9EA,KAAM2pB,EAAwE,EAAxEA,SAAUlS,EAA8D,EAA9DA,OAA8D,IAAtDiS,cAAsD,MAA7C,QAA6C,MAApCrS,YAAoC,MAA7BkU,EAAiBE,SAAY,EACjG,OACE,qBAAoB/B,OAApB,EAAoCrS,KAApC,GACE,qBAAiBsN,QAAjB,GACE,qBAAsBwG,QAAtB,OAAqCC,IAArC,EAAoDC,IADtD,IAEE,yBAHJ,IAKE,qBAAkB7D,KAAlB,IAA0C3C,KAA1C,OAAsD6C,MAAtD,UAAsE/C,QAAtE,EAAuF8C,UAN3F,a,UAWamE,E,EAAf,EAAe,M,iDA5FFL,E,4FAKP3T,E,4FAOA8T,E,2FAUA/T,E,gGAIAgU,E,2FAQAjU,E,8FA8CGkU,E,qOAhFIL,E,4FAKP3T,E,4FAOA8T,E,2FAUA/T,E,gGAIAgU,E,2FAQAjU,E,8FA8CN,E,4bCjFA,IAAMmU,EAAuBjd,IAAH,wFAAGA,CAAH,kKAQd,+BAEN+I,EAAuB/I,IAAH,wFAAGA,CAAH,CAA1B,4BAIMkd,EAAoBld,IAAH,qFAAGA,CAAH,CAAvB,6IAUM+c,EAAkB/c,IAAH,iFAAGA,CAAH,4FAKV8H,IALX,WAQMqV,EAAend,IAAH,iFAAGA,CAAH,CAAlB,iBAGA,SAASod,EAAY,GAAEhsB,MAA4C,EAA5CA,KAAM2pB,EAAsC,EAAtCA,SAAUlS,EAA4B,EAA5BA,OAA4B,IAApBiS,cAAoB,MAAX,QAAW,EACjE,OACE,qBAAsBA,OAAtB,GACE,qBAAmB/E,QAAnB,GACE,qBAAsBwG,QAAtB,OAAqCC,IAArC,EAAoDC,IADtD,IAEE,yBAFF,GAGE,qBAAc1G,QAAS,4BAAiBG,KAAxC,UAAuDD,KAAvD,QAAoEE,QAApE,UALN,e,UAaaiH,E,EAAf,EAAe,M,iDAjDTH,E,oGAUAlU,E,oGAIAmU,E,iGAUAH,E,+FAQAI,E,4FAGGC,E,+OAnCHH,E,oGAUAlU,E,oGAIAmU,E,iGAUAH,E,+FAQAI,E,4FAGN,E,kTCxCAzsB,EAAOD,QAAU,IAA0B,sC,gBCA3CC,EAAOD,QAAU,IAA0B,6B,6OCU3C,IAAM4sB,EAAN,kBAEMC,WAAkB,qBACtBC,KAAa,qBAAc,uBAAgBvW,IAAhB,EAA4BhQ,MAAOlG,EAAnC,MAA4CiG,KAAMjG,EAAlD,KAA0D0sB,SAAU1sB,EAApE,SAAgF2sB,QAAS3sB,EAAzF,QAAoG4sB,YAAa5sB,EAA/H,kBAEf,SAAS6sB,EAAU,GAAE9Y,MAAe,EAAfA,YACnB,EAAgCmH,mBAAhC,eAAOuR,EAAP,KAAiBK,EAAjB,KACA,EAA8B5R,oBAA9B,cAAO6R,EAAP,KAAiBC,EAAjB,KAEA5R,qBACE,WACM2R,GACJ3O,iBAEQ,YAAG3F,MAAW,EAAXA,KACPuU,MACAF,QAJJ1O,OAMS,SAAA6O,GACLD,MACA9sB,2BAGN,CAdFkb,IAmBA,OACE,uBAAkBrH,YAAlB,GACE,uBAAS7N,MAAO5F,cAAhB,MAAsCwV,UAAWxV,cAAjD,YAA6EkW,gBAA7E,GACE,2BACE,qBAAiBiW,SADnB,IAEE,uBAAevmB,MAAO5F,cAAtB,UAAgD2F,KAAMH,IAAtD,WAAoFmkB,SAApF,IAAyGlS,OAAQ,kBAPjGjS,IAAN,qB,UAcL+mB,E,EAAf,EAAe,M,iDAxCTN,E,kFAEAC,E,2FAGGK,E,qOALHN,E,kFAEAC,E,2FAGN,E,ucCPA,IAAMjF,EAAY,CAChBrhB,MAAOshB,WADS,WAEhBvhB,KAAMuhB,WAFU,WAGhBkF,SAAUlF,WAHM,WAIhBmF,QAASnF,WAJO,WAKhBoF,YAAapF,WALf,YAQM0F,WAAiB,GAAGhnB,MAAkD,EAAlDA,MAAOD,EAA2C,EAA3CA,KAAMymB,EAAqC,EAArCA,SAAUC,EAA2B,EAA3BA,QAASC,EAAkB,EAAlBA,YAClDO,EAASC,iBAAf,MACMC,EAAiBC,IAAgBH,EAAQ,CAAEI,UAAjD,IAEA,OACE,uBAAgB1F,UAAhB,iBACE,uBAAGlR,KAAH,GACE,yBAAK6W,IAAL,EAAkB9B,IAAK2B,GAAvB,EAAsD1B,IAAtD,EAAoE9D,UAApE,cAA0F+D,MAA1F,MAAsG5B,OADxG,QAEE,uBAAUnC,UAAV,oBAFF,GAGE,uBAAGA,UAAH,iBALN,MAWFqF,c,UAEeA,E,EAAf,EAAe,M,iDAzBT3F,E,yGAQA2F,E,kRARA3F,E,yGAQA2F,E,8fCXN,IAAM3F,EAAY,CAChBrhB,MAAOshB,WADS,WAEhBvhB,KAAMuhB,WAFR,YAKMiG,WAAgB,OAAGvnB,EAAH,QAAUD,EAAV,OAAgB8R,EAAhB,SAAwBkS,EAAxB,kBACpB,uBAAoBtT,KAApB,GACE,uBAAsB8U,QAAtB,OAAqCC,IAArC,EAAoDC,IAAG,YADzD,YAEE,2BACE,2BADF,GAEE,uBAAkB7D,KAAlB,IAA0C3C,KAA1C,OAAsDF,QAAtD,EAAuE8C,UALvD,eAUtB0F,c,UAEeA,E,EAAf,EAAe,M,iDAjBTlG,E,uGAKAkG,E,6QALAlG,E,uGAKAkG,E,8VCVN7tB,EAAOD,QAAU,IAA0B,iC,0DCA3CE,EAAQ,KAERA,EAAQ,M,mMCGR6tB,kBAAQ,sBAAD,MAAqBvO,wBAA5BuO,SAMA,IAAMC,EAAUxO,uBAAhB,QACAwO,mBACAA,oBAEA,I,IAAMC,EAAWzO,4BAAjB,SACIyO,EACFzO,kEAEAA,+D,iDARIwO,E,uDAIAC,E,mHAJAD,E,uDAIAC,E","file":"home.3c119c9f.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"React\"), require(\"styled\"), require(\"ReactDOM\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"React\", \"styled\", \"ReactDOM\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"React\"), require(\"styled\"), require(\"ReactDOM\")) : factory(root[\"React\"], root[\"styled\"], root[\"ReactDOM\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__2__, __WEBPACK_EXTERNAL_MODULE__100__) {\nreturn ","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","module.exports = __WEBPACK_EXTERNAL_MODULE__2__;","const text = {\n WELCOME_TEXT: {\n TITLE: 'Quel est votre projet ?',\n H2_NEW_VISIT: \"Plus d'1 million d'annonces immobilières\",\n H1_NEW_VISIT: 'Et vous, que cherchez-vous ?',\n H1_ALREADY_VISITED: 'Heureux de vous revoir !',\n },\n\n USERBLOCK: {\n TEXT_PART_1: 'Vous avez ',\n TEXT_RECOS_SING_PART_1: 'nouvelle recommandation',\n TEXT_RECOS_PLU_PART_1: 'nouvelles recommandations',\n TEXT_RECOS_PART_2: \"aujourd'hui\",\n TEXT_FAVS_SING_PART_1: 'annonce',\n TEXT_FAVS_PLU_PART_1: 'annonces',\n TEXT_FAVS_PART_2: 'en favoris',\n TEXT_SEARCHES_SING_PART_1: 'recherche',\n TEXT_SEARCHES_PLU_PART_1: 'recherches',\n TEXT_SEARCHES_SING_PART_2: 'enregistrée',\n TEXT_SEARCHES_PLU_PART_2: 'enregistrées',\n TEXT_VIEWEDLISTING_PART_1: 'consulté ',\n TEXT_VIEWEDLISTING_PART_2: 'récemment',\n LINK_CONSULT_PLU: 'Consultez-les',\n LINK_CONSULT_SING: 'Consultez-la',\n LINK_FIND_PLU: 'Retrouvez-les',\n LINK_FIND_SING: 'Retrouvez-la',\n },\n\n SERVICES: {\n TITLE: 'Votre projet immobilier',\n TITLE_FOCUS: 'immobilier',\n },\n\n EDITORIAL: {\n TITLE: 'Les actualités de l’immobilier',\n TITLE_FOCUS: 'de l’immobilier',\n FIND_MORE: \"Retrouvez l'ensemble de nos articles sur l'actualité immobilière\",\n },\n\n SEOLINKS: {\n SECTION_TITLE: 'Annonces immobilières en France',\n SECTION_TITLE_FOCUS: 'en France',\n FIRST_BLOCK: {\n TITLE: 'Ventes de maisons',\n },\n SECOND_BLOCK: {\n TITLE: \"Ventes d'appartements\",\n },\n TOOLS_BLOCK: {\n TITLE: 'Bon à savoir',\n SUBTITLE: 'Vous cherchez à acheter le bien immobilier de vos rêves ?',\n SECOND_SUBTITLE: 'Retrouvez nos outils dédiés :',\n },\n THIRD_BLOCK: {\n TITLE: \"Locations d'appartements\",\n },\n FOURTH_BLOCK: {\n TITLE: 'Prix de vente au m2',\n },\n },\n VIEWED_LISTINGS: {\n EMPTY_VIEWED_TITLE: \"Vous n'avez pas encore vu d'annonce\",\n EMPTY_VIEWED_TEXT: 'Débutez votre recherche et trouvez votre bonheur !',\n EMPTY_VIEWED_CTA: 'Débuter une recherche',\n YOUR_VIEWED_LISTINGS: 'Vos dernières annonces vues',\n PAGE_HEAD_PRIMARY_MULTIPLE: nb => `Voici les ${nb} dernières annonces que vous avez vues`,\n PAGE_HEAD_PRIMARY_SINGLE: `Voici la dernière annonce que vous avez vue`,\n VIEWED: 'Vue',\n LITTLE_WHILE_AGO: 'il y a un instant',\n ONE_HOUR_AGO: 'il y a 1 heure',\n YESTERDAY: 'hier',\n X_MINUTES_AGO: xMinutes => `il y a ${xMinutes} minutes`,\n X_HOURS_AGO: xHours => `il y a ${xHours} heures`,\n X_DAYS_AGO: xDays => `il y a ${xDays} jours`,\n YOUR_LAST_VIEWED_TEXT: `Vos dernières annonces vues`,\n YOUR_LAST_VIEWED_TEXT_HIGHLIGHT: `annonces vues`,\n SEE_ALL_LISTINGS: count => `Voir toutes les annonces (${count})`,\n },\n SEARCH_LISTING: {\n YOUR_LAST_SEARCH_TEXT: count => (count === 1 ? 'Votre recherche enregistrée' : 'Vos recherches enregistrées'),\n YOUR_LAST_SEARCH_TEXT_HIGHLIGHT: count => (count === 1 ? 'Votre recherche' : 'Vos recherches'),\n NO_LISTING: 'Pas d’annonce disponible actuellement',\n GO_TO_MY_SEARCH: `Accéder à ma recherche`,\n SEE_ALL_SEARCHS: count => `Voir toutes les annonces (${count})`,\n SEE_ALL_BUTTON: 'Voir mes recherches enregistrées',\n MY_SEARCHS: 'Mes recherches enregistrées',\n },\n LISTING: {\n EXPIRED: \"Mince, ce bien n'est plus disponible\",\n },\n REDO_SEARCH: {\n TITLE_PART_1: 'Souhaitez-vous reprendre',\n TITLE_PART_2: 'votre dernière recherche',\n TITLE_ON: 'sur',\n QUESTION: '?',\n BUTTON_REDO: 'Reprendre',\n BUTTON_NEW: 'Nouvelle recherche',\n },\n}\n\nexport default text\n","export const TABS = {\n ACHETER: '2.5',\n ESTIMER: '3',\n LOUER: '1',\n}\n\nexport const SEARCH_TYPE = {\n CLASSIC: 'classic',\n ADVANCED: 'advanced',\n TIME: 'time',\n DRAW: 'draw',\n}\n\nexport const STORAGE = {\n LAST_SEARCH: 'lastsearch',\n}\n\nexport const REDIRECTION_LINKS = {\n EDITO_LINK: 'https://edito.seloger.com',\n}\n\nexport const SEOhousesSales = [\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-angers-49/bien-maison/',\n title: 'Vente maison Angers',\n },\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-paris-75/bien-maison/',\n title: 'Vente maison Paris',\n },\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-le-havre-76/bien-maison/',\n title: 'Vente maison Le Havre',\n },\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-rennes-35/bien-maison/',\n title: 'Vente maison Rennes',\n },\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-marseille-13/bien-maison/',\n title: 'Vente maison Marseille',\n },\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-nancy-54/bien-maison/',\n title: 'Vente maison Nancy',\n },\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-nantes-44/bien-maison/',\n title: 'Vente maison Nantes',\n },\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-nice-06/bien-maison/',\n title: 'Vente maison Nice',\n },\n]\nexport const OPENINGORIGIN = {\n HOME_SEARCH_LINK: 'recherches_enregistrees_unlogged',\n}\n\nexport const SEOflatsSales = [\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-paris-75/bien-appartement/',\n title: 'Vente appartement Paris',\n },\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-bordeaux-33/bien-appartement/',\n title: 'Vente appartement Bordeaux',\n },\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-lille-59/bien-appartement/',\n title: 'Vente appartement Lille',\n },\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-marseille-13/bien-appartement/',\n title: 'Vente appartement Marseille',\n },\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-montpellier-34/bien-appartement/',\n title: 'Vente appartement Montpellier',\n },\n {\n link: 'https://www.seloger.com/immobilier/achat/immo-nantes-44/bien-appartement/',\n title: 'Vente appartement Nantes',\n },\n {\n link: 'https://www.seloger.com/immobilier/locations/immo-paris-75/bien-appartement/type-studio/',\n title: 'Vente Studio Paris',\n },\n]\n\nexport const SEOflatsRents = [\n {\n link: 'https://www.seloger.com/immobilier/locations/immo-paris-75/bien-appartement/',\n title: 'Location appartement Paris',\n },\n {\n link: 'https://www.seloger.com/immobilier/locations/immo-grenoble-38/bien-appartement/',\n title: 'Location appartement Grenoble',\n },\n {\n link: 'https://www.seloger.com/immobilier/locations/immo-lyon-69/bien-appartement/',\n title: 'Location appartement Lyon',\n },\n {\n link: 'https://www.seloger.com/immobilier/locations/immo-marseille-13/bien-appartement/',\n title: 'Location appartement Marseille',\n },\n {\n link: 'https://www.seloger.com/immobilier/locations/immo-metz-57/bien-appartement/',\n title: 'Location appartement Metz',\n },\n {\n link: 'https://www.seloger.com/immobilier/locations/immo-angers-49/bien-appartement/',\n title: 'Location appartement Angers',\n },\n]\n\nexport const SEOtoolsBlock = [\n {\n link: 'https://www.seloger.com/estimation-immobiliere.html#?m=homepage-bon_a_savoir-estimer',\n title: \"Estimez la valeur d'un bien\",\n },\n {\n link: 'https://www.seloger.com/prix-de-l-immo/vente/pays/france.htm#?m=homepage-bon_a_savoir-prix_immo',\n title: \"La carte des prix de l'immobilier\",\n },\n {\n link: 'https://www.seloger.com/credit-immobilier/simulateur-capacite-demprunt/#?m=homepage-bon_a_savoir-capacite_emprunt',\n title: \"Calculez votre capacité d'emprunt\",\n },\n {\n link: 'https://www.seloger.com/credit-immobilier/simulateur-mensualites/#?m=homepage-bon_a_savoir-mensualites',\n title: 'Calculez vos mensualités',\n },\n {\n link: 'https://www.seloger.com/credit-immobilier/simulateur-frais-notaire/#?m=homepage-bon_a_savoir-frais_notaire',\n title: 'Estimez vos frais de notaire',\n },\n]\n\nexport const seoVariationSets = [\n ['Paris', 'Vitry-sur-Seine', 'Béziers', 'Limoges', 'Poitiers', 'Epinay-sur-Seine', 'Carcassonne', 'Le Havre'],\n ['Toulouse', 'Asnières-sur-Seine', 'Perpignan', 'Saint-Germain-en-Laye', 'Vannes', 'Sète', 'Arles', 'Saint-Denis'],\n ['Bordeaux', 'Angers', 'Courbevoie', 'Noisy-le-Grand', 'Meudon', 'Caen', 'Bobigny', 'Valence'],\n ['Nantes', 'Reims', 'Annecy', 'Saint-Malo', 'Talence', 'Pantin', 'Calais', 'Bagneux'],\n ['Nice', 'Tours', 'Cannes', 'Ivry-sur-Seine', 'Troyes', 'Mulhouse', 'Dunkerque', 'Saint-Nazaire'],\n ['Montpellier', 'Colombes', 'Argenteuil', 'Arras', 'Albi', 'Lorient', 'Istres', 'Chelles'],\n ['Boulogne-Billancourt', 'Antony', 'Aubervilliers', 'Drancy', 'Chartres', 'Roubaix', 'Ales', 'Massy'],\n ['Maisons-Alfort', 'Clamart', 'Champigny-sur-Marne', 'Savigny-sur-Orge', 'Quimper', 'Gennevilliers', 'Saint-Ouen', 'Montauban'],\n ['Lille', 'Villejuif', 'Rosny-sous-Bois', 'Levallois-Perret', 'Sartrouville', 'Mantes-la-Jolie', 'Fontenay-sous-Bois', 'Belfort'],\n ['Montrouge', 'Corbeil-Essonnes', 'Melun', 'Ajaccio', 'Tourcoing', 'Thionville', 'Marcq-en-Baroeul', 'Seyne-sur-Mer'],\n ['Lyon', 'Caluire-et-Cuire', 'Cagnes-sur-Mer', 'Gagny', 'Narbonne', 'Salon-de-Provence', 'Blois', 'La Roche-sur-Yon'],\n ['Marseille', 'Nîmes', 'Aulnay-sous-Bois', 'Grasse', 'Noisy-le-Sec', 'Bondy', 'Bourg-en-Bresse', 'Livry-Gargan'],\n ['Clichy', 'Grenoble', 'Cergy', 'Aubagne', 'Saint-Brieuc', 'Roanne', 'Sevran', 'Cannet'],\n ['Puteaux', 'Aix-en-Provence', 'Cholet', 'Saint-Quentin', 'Beauvais', 'Merignac', 'Boulogne-sur-Mer', 'Castres'],\n ['Nanterre', 'Rouen', 'Compiègne', 'Bastia', 'Valenciennes', 'Venissieux', 'Martigues', 'Saint-Priest'],\n ['Pessac', 'Toulon', 'Chalon-sur-Saône', 'Besançon', 'Orléans', 'Clermont-Ferrand', 'Sarcelles', 'Blanc-Mesnil'],\n ['Strasbourg', 'Amiens', 'Montluçon', 'Créteil', 'Saint-Herblain', 'Bayonne', 'Vitrolles', 'Courneuve'],\n ['Vincennes', 'Antibes', 'Rennes', 'Brive-la-Gaillarde', 'Rezé', 'Niort', 'Lens', 'Wattrelos'],\n ['Dijon', 'Avignon', 'Versailles', 'Saint-Chamond', 'Douai', 'Poissy', 'Fréjus', 'Fort-de-France'],\n ['Issy-les-Moulineaux', 'Bourges', 'Nancy', 'Châteauroux', 'Nevers', 'Colmar', 'Charleville-Mézières', 'Hyères'],\n ['Rueil-Malmaison', 'Saint-Maur-des-Fossés', 'Villeurbanne', 'Evry', 'Gap', 'Meaux', 'Montreuil', 'Cayenne'],\n ['Metz', 'Auxerre', 'Brest', 'Neuilly-sur-Seine', 'Chambery', 'Laval', 'La Rochelle', 'Saint-Louis'],\n ['Alfortville', 'Saint-Etienne', 'Pau', 'Suresnes', 'Vaulx-En-Velin', 'Tarbes', 'Le Mans', 'Angoulême'],\n]\n\nexport const cityToUrl = {\n paris: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/paris.htm',\n toulouse: 'https://www.seloger.com/prix-de-l-immo/vente/midi-pyrenees/haute-garonne/toulouse/310555.htm',\n bordeaux: 'https://www.seloger.com/prix-de-l-immo/vente/aquitaine/gironde/bordeaux/330063.htm',\n nantes: 'https://www.seloger.com/prix-de-l-immo/vente/pays-de-la-loire/loire-atlantique/nantes/440109.htm',\n nice: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/alpes-maritimes/nice/60088.htm',\n montpellier: 'https://www.seloger.com/prix-de-l-immo/vente/languedoc-roussillon/herault/montpellier/340172.htm',\n 'boulogne-billancourt': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/boulogne-billancourt/920012.htm',\n 'maisons-alfort': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-de-marne/maisons-alfort/940046.htm',\n lille: 'https://www.seloger.com/prix-de-l-immo/vente/nord-pas-de-calais/nord/lille/590350.htm',\n montrouge: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/montrouge/920049.htm',\n lyon: 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/rhone/lyon/690123.htm',\n marseille: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/bouches-du-rhone/marseille/130055.htm',\n clichy: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/clichy/920024.htm',\n puteaux: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/puteaux/920062.htm',\n nanterre: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/nanterre/920050.htm',\n pessac: 'https://www.seloger.com/prix-de-l-immo/vente/aquitaine/gironde/pessac/330318.htm',\n strasbourg: 'https://www.seloger.com/prix-de-l-immo/vente/alsace/bas-rhin/strasbourg/670482.htm',\n vincennes: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-de-marne/vincennes/940080.htm',\n dijon: 'https://www.seloger.com/prix-de-l-immo/vente/bourgogne/cote-d-or/dijon/210231.htm',\n 'issy-les-moulineaux': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/issy-les-moulineaux/920040.htm',\n 'rueil-malmaison': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/rueil-malmaison/920063.htm',\n metz: 'https://www.seloger.com/prix-de-l-immo/vente/lorraine/moselle/metz/570463.htm',\n alfortville: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-de-marne/alfortville/940002.htm',\n 'vitry-sur-seine': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-de-marne/vitry-sur-seine/940081.htm',\n 'asnières-sur-seine': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/asnieres-sur-seine/920004.htm',\n angers: 'https://www.seloger.com/prix-de-l-immo/vente/pays-de-la-loire/maine-et-loire/angers/490007.htm',\n reims: 'https://www.seloger.com/prix-de-l-immo/vente/champagne-ardenne/marne/reims/510454.htm',\n tours: 'https://www.seloger.com/prix-de-l-immo/vente/centre/indre-et-loire/tours/370261.htm',\n colombes: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/colombes/920025.htm',\n antony: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/antony/920002.htm',\n clamart: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/clamart/920023.htm',\n villejuif: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-de-marne/villejuif/940076.htm',\n 'corbeil-essonnes': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/essonne/corbeil-essonnes/910174.htm',\n 'caluire-et-cuire': 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/rhone/caluire-et-cuire/690034.htm',\n nîmes: 'https://www.seloger.com/prix-de-l-immo/vente/languedoc-roussillon/gard/nimes/300189.htm',\n grenoble: 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/isere/grenoble/380185.htm',\n 'aix-en-provence': 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/bouches-du-rhone/aix-en-provence/130001.htm',\n rouen: 'https://www.seloger.com/prix-de-l-immo/vente/haute-normandie/seine-maritime/rouen/760540.htm',\n toulon: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/var/toulon/830137.htm',\n amiens: 'https://www.seloger.com/prix-de-l-immo/vente/picardie/somme/amiens/800021.htm',\n antibes: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/alpes-maritimes/antibes/60004.htm',\n avignon: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/vaucluse/avignon/840007.htm',\n bourges: 'https://www.seloger.com/prix-de-l-immo/vente/centre/cher/bourges/180033.htm',\n 'saint-maur-des-fossés': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-de-marne/saint-maur-des-fosses/940068.htm',\n auxerre: 'https://www.seloger.com/prix-de-l-immo/vente/bourgogne/yonne/auxerre/890024.htm',\n 'saint-etienne': 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/loire/saint-etienne/420218.htm',\n béziers: 'https://www.seloger.com/prix-de-l-immo/vente/languedoc-roussillon/herault/beziers/340032.htm',\n perpignan: 'https://www.seloger.com/prix-de-l-immo/vente/languedoc-roussillon/pyrenees-orientales/perpignan/660136.htm',\n courbevoie: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/courbevoie/920026.htm',\n annecy: 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/haute-savoie/annecy/740010.htm',\n cannes: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/alpes-maritimes/cannes/60029.htm',\n argenteuil: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-d-oise/argenteuil/950018.htm',\n aubervilliers: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/aubervilliers/930001.htm',\n 'champigny-sur-marne': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-de-marne/champigny-sur-marne/940017.htm',\n 'rosny-sous-bois': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/rosny-sous-bois/930064.htm',\n melun: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-et-marne/melun/770288.htm',\n 'cagnes-sur-mer': 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/alpes-maritimes/cagnes-sur-mer/60027.htm',\n 'aulnay-sous-bois': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/aulnay-sous-bois/930005.htm',\n cergy: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-d-oise/cergy/950127.htm',\n cholet: 'https://www.seloger.com/prix-de-l-immo/vente/pays-de-la-loire/maine-et-loire/cholet/490099.htm',\n compiègne: 'https://www.seloger.com/prix-de-l-immo/vente/picardie/oise/compiegne/600159.htm',\n 'chalon-sur-saône': 'https://www.seloger.com/prix-de-l-immo/vente/bourgogne/saone-et-loire/chalon-sur-saone/710076.htm',\n montluçon: 'https://www.seloger.com/prix-de-l-immo/vente/auvergne/allier/montlucon/30185.htm',\n rennes: 'https://www.seloger.com/prix-de-l-immo/vente/bretagne/ille-et-vilaine/rennes/350238.htm',\n versailles: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/yvelines/versailles/780646.htm',\n nancy: 'https://www.seloger.com/prix-de-l-immo/vente/lorraine/meurthe-et-moselle/nancy/540395.htm',\n villeurbanne: 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/rhone/villeurbanne/690266.htm',\n brest: 'https://www.seloger.com/prix-de-l-immo/vente/bretagne/finistere/brest/290019.htm',\n pau: 'https://www.seloger.com/prix-de-l-immo/vente/aquitaine/pyrenees-atlantiques/pau/640445.htm',\n limoges: 'https://www.seloger.com/prix-de-l-immo/vente/limousin/haute-vienne/limoges/870085.htm',\n 'saint-germain-en-laye': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/yvelines/saint-germain-en-laye/780551.htm',\n 'noisy-le-grand': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/noisy-le-grand/930051.htm',\n 'saint-malo': 'https://www.seloger.com/prix-de-l-immo/vente/bretagne/ille-et-vilaine/saint-malo/350288.htm',\n 'ivry-sur-seine': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-de-marne/ivry-sur-seine/940041.htm',\n arras: 'https://www.seloger.com/prix-de-l-immo/vente/nord-pas-de-calais/pas-de-calais/arras/620041.htm',\n drancy: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/drancy/930029.htm',\n 'savigny-sur-orge': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/essonne/savigny-sur-orge/910589.htm',\n 'levallois-perret': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/levallois-perret/920044.htm',\n ajaccio: 'https://www.seloger.com/prix-de-l-immo/vente/corse/corse-du-sud/ajaccio/201004.htm',\n gagny: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/gagny/930032.htm',\n grasse: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/alpes-maritimes/grasse/60069.htm',\n aubagne: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/bouches-du-rhone/aubagne/130005.htm',\n 'saint-quentin': 'https://www.seloger.com/prix-de-l-immo/vente/picardie/aisne/saint-quentin/20691.htm',\n bastia: 'https://www.seloger.com/prix-de-l-immo/vente/corse/haute-corse/bastia/202033.htm',\n besançon: 'https://www.seloger.com/prix-de-l-immo/vente/franche-comte/doubs/besancon/250056.htm',\n créteil: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-de-marne/creteil/940028.htm',\n 'brive-la-gaillarde': 'https://www.seloger.com/prix-de-l-immo/vente/limousin/correze/brive-la-gaillarde/190031.htm',\n 'saint-chamond': 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/loire/saint-chamond/420207.htm',\n châteauroux: 'https://www.seloger.com/prix-de-l-immo/vente/centre/indre/chateauroux/360044.htm',\n evry: 'https://www.seloger.com/prix-de-l-immo/vente/bourgogne/yonne/evry/890162.htm',\n 'neuilly-sur-seine': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/neuilly-sur-seine/920051.htm',\n suresnes: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/suresnes/920073.htm',\n poitiers: 'https://www.seloger.com/prix-de-l-immo/vente/poitou-charentes/vienne/poitiers/860194.htm',\n vannes: 'https://www.seloger.com/prix-de-l-immo/vente/bretagne/morbihan/vannes/560260.htm',\n meudon: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/meudon/920048.htm',\n talence: 'https://www.seloger.com/prix-de-l-immo/vente/aquitaine/gironde/talence/330522.htm',\n troyes: 'https://www.seloger.com/prix-de-l-immo/vente/champagne-ardenne/aube/troyes/100387.htm',\n albi: 'https://www.seloger.com/prix-de-l-immo/vente/midi-pyrenees/tarn/albi/810004.htm',\n chartres: 'https://www.seloger.com/prix-de-l-immo/vente/centre/eure-et-loir/chartres/280085.htm',\n quimper: 'https://www.seloger.com/prix-de-l-immo/vente/bretagne/finistere/quimper/290232.htm',\n sartrouville: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/yvelines/sartrouville/780586.htm',\n tourcoing: 'https://www.seloger.com/prix-de-l-immo/vente/nord-pas-de-calais/nord/tourcoing/590599.htm',\n narbonne: 'https://www.seloger.com/prix-de-l-immo/vente/languedoc-roussillon/aude/narbonne/110262.htm',\n 'noisy-le-sec': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/noisy-le-sec/930053.htm',\n 'saint-brieuc': 'https://www.seloger.com/prix-de-l-immo/vente/bretagne/cotes-d-armor/saint-brieuc/220278.htm',\n beauvais: 'https://www.seloger.com/prix-de-l-immo/vente/picardie/oise/beauvais/600057.htm',\n valenciennes: 'https://www.seloger.com/prix-de-l-immo/vente/nord-pas-de-calais/nord/valenciennes/590606.htm',\n orléans: 'https://www.seloger.com/prix-de-l-immo/vente/centre/loiret/orleans/450234.htm',\n 'saint-herblain': 'https://www.seloger.com/prix-de-l-immo/vente/pays-de-la-loire/loire-atlantique/saint-herblain/440162.htm',\n rezé: 'https://www.seloger.com/prix-de-l-immo/vente/pays-de-la-loire/loire-atlantique/reze/440143.htm',\n douai: 'https://www.seloger.com/prix-de-l-immo/vente/nord-pas-de-calais/nord/douai/590178.htm',\n nevers: 'https://www.seloger.com/prix-de-l-immo/vente/bourgogne/nievre/nevers/580194.htm',\n gap: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/hautes-alpes/gap/50061.htm',\n chambery: 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/savoie/chambery/730065.htm',\n 'vaulx-en-velin': 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/rhone/vaulx-en-velin/690256.htm',\n 'epinay-sur-seine': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/epinay-sur-seine/930031.htm',\n sète: 'https://www.seloger.com/prix-de-l-immo/vente/languedoc-roussillon/herault/sete/340301.htm',\n caen: 'https://www.seloger.com/prix-de-l-immo/vente/basse-normandie/calvados/caen/140118.htm',\n pantin: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/pantin/930055.htm',\n mulhouse: 'https://www.seloger.com/prix-de-l-immo/vente/alsace/haut-rhin/mulhouse/680224.htm',\n lorient: 'https://www.seloger.com/prix-de-l-immo/vente/bretagne/morbihan/lorient/560121.htm',\n roubaix: 'https://www.seloger.com/prix-de-l-immo/vente/nord-pas-de-calais/nord/roubaix/590512.htm',\n gennevilliers: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/hauts-de-seine/gennevilliers/920036.htm',\n 'mantes-la-jolie': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/yvelines/mantes-la-jolie/780361.htm',\n thionville: 'https://www.seloger.com/prix-de-l-immo/vente/lorraine/moselle/thionville/570672.htm',\n 'salon-de-provence': 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/bouches-du-rhone/salon-de-provence/130103.htm',\n bondy: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/bondy/930010.htm',\n roanne: 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/loire/roanne/420187.htm',\n merignac: 'https://www.seloger.com/prix-de-l-immo/vente/poitou-charentes/charente/merignac/160216.htm',\n venissieux: 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/rhone/venissieux/690259.htm',\n 'clermont-ferrand': 'https://www.seloger.com/prix-de-l-immo/vente/auvergne/puy-de-dome/clermont-ferrand/630113.htm',\n bayonne: 'https://www.seloger.com/prix-de-l-immo/vente/aquitaine/pyrenees-atlantiques/bayonne/640102.htm',\n niort: 'https://www.seloger.com/prix-de-l-immo/vente/poitou-charentes/deux-sevres/niort/790191.htm',\n poissy: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/yvelines/poissy/780498.htm',\n colmar: 'https://www.seloger.com/prix-de-l-immo/vente/alsace/haut-rhin/colmar/680066.htm',\n meaux: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-et-marne/meaux/770284.htm',\n laval: 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/isere/laval/380206.htm',\n tarbes: 'https://www.seloger.com/prix-de-l-immo/vente/midi-pyrenees/hautes-pyrenees/tarbes/650440.htm',\n carcassonne: 'https://www.seloger.com/prix-de-l-immo/vente/languedoc-roussillon/aude/carcassonne/110069.htm',\n arles: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/bouches-du-rhone/arles/130004.htm',\n bobigny: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/bobigny/930008.htm',\n calais: 'https://www.seloger.com/prix-de-l-immo/vente/nord-pas-de-calais/pas-de-calais/calais/620193.htm',\n dunkerque: 'https://www.seloger.com/prix-de-l-immo/vente/nord-pas-de-calais/nord/dunkerque/590183.htm',\n istres: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/bouches-du-rhone/istres/130047.htm',\n ales: 'https://www.seloger.com/prix-de-l-immo/vente/languedoc-roussillon/gard/ales/300007.htm',\n 'saint-ouen': 'https://www.seloger.com/prix-de-l-immo/vente/poitou-charentes/charente-maritime/saint-ouen/170377.htm',\n 'fontenay-sous-bois': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-de-marne/fontenay-sous-bois/940033.htm',\n 'marcq-en-baroeul': 'https://www.seloger.com/prix-de-l-immo/vente/nord-pas-de-calais/nord/marcq-en-baroeul/590378.htm',\n blois: 'https://www.seloger.com/prix-de-l-immo/vente/centre/loir-et-cher/blois/410018.htm',\n 'bourg-en-bresse': 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/ain/bourg-en-bresse/10053.htm',\n sevran: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/sevran/930071.htm',\n 'boulogne-sur-mer': 'https://www.seloger.com/prix-de-l-immo/vente/nord-pas-de-calais/pas-de-calais/boulogne-sur-mer/620160.htm',\n martigues: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/bouches-du-rhone/martigues/130056.htm',\n sarcelles: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/val-d-oise/sarcelles/950585.htm',\n vitrolles: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/hautes-alpes/vitrolles/50184.htm',\n lens: 'https://www.seloger.com/prix-de-l-immo/vente/nord-pas-de-calais/pas-de-calais/lens/620498.htm',\n fréjus: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/var/frejus/830061.htm',\n 'charleville-mézières': 'https://www.seloger.com/prix-de-l-immo/vente/champagne-ardenne/ardennes/charleville-mezieres/80105.htm',\n montreuil: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/montreuil/930048.htm',\n 'la rochelle': 'https://www.seloger.com/prix-de-l-immo/vente/poitou-charentes/charente-maritime/la-rochelle/170300.htm',\n 'le mans': 'https://www.seloger.com/prix-de-l-immo/vente/pays-de-la-loire/sarthe/le-mans/720181.htm',\n 'le havre': 'https://www.seloger.com/prix-de-l-immo/vente/haute-normandie/seine-maritime/le-havre/760351.htm',\n 'saint-denis': 'https://www.seloger.com/prix-de-l-immo/vente/languedoc-roussillon/aude/saint-denis/110339.htm',\n valence: 'https://www.seloger.com/prix-de-l-immo/vente/poitou-charentes/charente/valence/160392.htm',\n bagneux: 'https://www.seloger.com/prix-de-l-immo/vente/picardie/aisne/bagneux/20043.htm',\n 'saint-nazaire': 'https://www.seloger.com/prix-de-l-immo/vente/pays-de-la-loire/loire-atlantique/saint-nazaire/440184.htm',\n chelles: 'https://www.seloger.com/prix-de-l-immo/vente/picardie/oise/chelles/600145.htm',\n massy: 'https://www.seloger.com/prix-de-l-immo/vente/bourgogne/saone-et-loire/massy/710288.htm',\n montauban: 'https://www.seloger.com/prix-de-l-immo/vente/midi-pyrenees/tarn-et-garonne/montauban/820121.htm',\n belfort: 'https://www.seloger.com/prix-de-l-immo/vente/franche-comte/territoire-de-belfort/belfort/900010.htm',\n 'seyne-sur-mer': 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/var/la-seyne-sur-mer/830126.htm',\n 'la roche-sur-yon': 'https://www.seloger.com/prix-de-l-immo/vente/pays-de-la-loire/vendee/la-roche-sur-yon/850191.htm',\n 'livry-gargan': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/livry-gargan/930046.htm',\n cannet: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/alpes-maritimes/le-cannet/60030.htm',\n castres: 'https://www.seloger.com/prix-de-l-immo/vente/picardie/aisne/castres/20142.htm',\n 'saint-priest': 'https://www.seloger.com/prix-de-l-immo/vente/rhone-alpes/ardeche/saint-priest/70288.htm',\n 'blanc-mesnil': 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/le-blanc-mesnil/930007.htm',\n courneuve: 'https://www.seloger.com/prix-de-l-immo/vente/ile-de-france/seine-saint-denis/la-courneuve/930027.htm',\n wattrelos: 'https://www.seloger.com/prix-de-l-immo/vente/nord-pas-de-calais/nord/wattrelos/590650.htm',\n 'fort-de-france': 'https://www.seloger.com/prix-de-l-immo/vente/departements-d-outre-mer/martinique/fort-de-france/972209.htm',\n hyères: 'https://www.seloger.com/prix-de-l-immo/vente/provence-alpes-cote-d-azur/var/hyeres/830069.htm',\n cayenne: 'https://www.seloger.com/prix-de-l-immo/vente/departements-d-outre-mer/guyane/cayenne/973302.htm',\n 'saint-louis': 'https://www.seloger.com/prix-de-l-immo/vente/lorraine/moselle/saint-louis/570618.htm',\n angoulême: 'https://www.seloger.com/prix-de-l-immo/vente/poitou-charentes/charente/angouleme/160015.htm',\n}\n\nexport const getWeekDayAsStrFormat = date => {\n const weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n const day = date.getDay()\n return weekdays[day]\n}\n\nexport const SEARCH_LISTING_HEIGHT = '285px'\n","import styled, { css } from 'styled-components'\nimport Icon from '@ui-library/core/Icon'\nimport cardPlaceholder from '../../assets/img/card-placeholder.webp'\n\nconst CardContainer = styled.div`\n padding: 24px 0 0;\n`\nconst CardDataContainer = styled.div`\n background-color: #fff;\n border-radius: 4px;\n box-shadow: 0 0 12px 0 rgba(38, 38, 38, 0.2);\n overflow: hidden;\n position: relative;\n width: 296px;\n height: ${({ height }) => height};\n @media (max-width: 1024px) {\n margin-bottom: 24px;\n }\n`\nconst CardLink = styled.a`\n color: inherit;\n text-decoration: none;\n`\nconst CardData = styled.div`\n line-height: 1em;\n min-width: 165px;\n overflow: hidden;\n padding: 18px 16px 0;\n text-align: left;\n white-space: nowrap;\n width: 100%;\n ${({ isExpired }) =>\n isExpired &&\n `\n opacity: .2;\n position: relative;\n `}\n`\n\nconst CardPrice = styled.div`\n color: #262626;\n float: right;\n font-size: 22px;\n font-weight: 800;\n`\n\nconst sharedStyle = css`\n font-size: 16px;\n line-height: 20px;\n margin-bottom: 6px;\n overflow: hidden;\n text-overflow: ellipsis;\n text-transform: capitalize;\n`\nconst CardType = styled.div`\n ${sharedStyle}\n`\nconst CardLocation = styled.div`\n ${sharedStyle}\n`\nconst ViewDate = styled.div`\n ${sharedStyle}\n font-style: italic;\n text-transform: none;\n`\nconst Rooms = styled.div`\n display: inline-block;\n text-transform: lowercase;\n`\nconst Surface = styled.div`\n display: inline-block;\n text-transform: lowercase;\n`\nconst CardSurfaceInfo = styled.div`\n ${sharedStyle}\n ${Surface} {\n ${({ displaySeparator }) =>\n displaySeparator &&\n css`\n &:before {\n background-color: #000;\n border-radius: 4px;\n content: '';\n display: inline-block;\n height: 4px;\n margin: 0 6px 2px;\n width: 4px;\n }\n `}\n }\n`\nconst StyledExpiredCard = styled.div`\n width: 100%;\n font-weight: 800;\n display: flex;\n flex-direction: column;\n align-items: center;\n top: 50%;\n transform: translateY(50%);\n`\nconst StyledSliderPlaceholder = styled.div`\n background-image: url('${cardPlaceholder}');\n background-position: center;\n background-repeat: no-repeat;\n background-size: 120%;\n height: 100%;\n`\nconst CameraIcon = styled(Icon)`\n vertical-align: middle;\n`\nconst StyledPhotoCounter = styled.div`\n background: rgba(0, 0, 0, 0.36);\n border-radius: 12px;\n color: #fff;\n height: 24px;\n position: absolute;\n text-align: center;\n width: 54px;\n z-index: 10;\n ${({ bottom }) =>\n bottom &&\n css`\n bottom: ${bottom};\n `}\n ${({ left }) =>\n left &&\n css`\n left: ${left};\n `}\n ${({ top }) =>\n top &&\n css`\n top: ${top};\n `}\n ${({ right }) =>\n right &&\n css`\n right: ${right}px;\n `}\n vertical-align:'middle';\n span {\n display: inline-block;\n padding-right: 6px;\n vertical-align: middle;\n font-size: 14px;\n }\n ${CameraIcon} {\n vertical-align: middle;\n }\n`\nconst StyledSliderContainer = styled.div`\n height: 176px;\n position: relative;\n width: 100%;\n`\nexport {\n CardContainer,\n CardDataContainer,\n CardLink,\n CardData,\n CardPrice,\n CardType,\n CardLocation,\n ViewDate,\n Rooms,\n Surface,\n CardSurfaceInfo,\n StyledExpiredCard,\n StyledSliderPlaceholder,\n StyledPhotoCounter,\n CameraIcon,\n StyledSliderContainer,\n}\n","import { getDistributionSubtype, getDistributionType, getEstateSubtype, getEstateType } from '../../utils/helpers/trackingVariables'\nimport { getListingProduct } from './getProduct'\nimport { getCookie } from '../../utils/helpers/cookie'\n\nconst getAvItems = (searchesListings, id) => {\n let avItems = searchesListings.reduce((acc, cur) => [...acc, ...cur.listings], [])\n if (id) {\n avItems = avItems.filter(item => item.id?.toString() === id?.toString())\n }\n return avItems.map((item, index) => {\n const priceString = item.price\n const numberPattern = /\\d+/g\n const matches = priceString.match(numberPattern)\n let priceNumber = 0\n\n if (matches && matches.length > 0) {\n priceNumber = parseInt(matches.join(''), 10)\n }\n\n return {\n // P0\n list_name: 'homepage_last_search',\n id: item.id?.toString(),\n index,\n price: priceNumber,\n estate_type: getEstateType(item.propertyType),\n distribution_type: getDistributionType(getDistributionSubtype(item.transactionType)),\n publication_id: 'SL',\n name: 'classified',\n\n // P1\n nb_rooms: parseInt(item.rooms, 10).toString(),\n indoor_surface: parseInt(item.surface, 10).toString(),\n zip_code: item.zipCode,\n subtype: getEstateSubtype(item.propertyType),\n currency: 'EUR',\n\n // P2\n nb_picture: item.urlPhotos?.length?.toString() || '0',\n\n // P3\n distribution_subtype: getDistributionSubtype(item.transactionType),\n country: 'france',\n province: item.zipCode?.slice(0, 2),\n city: item.location,\n }\n })\n}\n\nconst PushEvent = (eventName, vars) => {\n if (window !== undefined) {\n const savedThor = window.thor ? window.thor : null\n if (savedThor !== null) {\n savedThor.pushEvent(eventName, vars)\n }\n }\n}\n\nconst trackView = () =>\n PushEvent('view', {\n pagename: 'homepage',\n site: 'SL',\n language: 'fr',\n environment: window.currentEnv,\n })\n\nconst trackPageView = (isConnected, searchesListings) => {\n const { pathname } = window.location\n const { currentEnv } = window\n const uid = window.authModule?.localStorageSafe?.getItem('user_id')\n const cid = getCookie('_ga')?.substring(6)\n const searchParams = typeof window !== 'undefined' && new URLSearchParams(window.location.search)\n\n PushEvent('page_view', {\n av_pagetitle: 'homepage',\n av_site: 'SL',\n av_language: 'fr',\n av_category: 'homepage',\n av_platform: 'web',\n av_url_path: pathname,\n av_environment: currentEnv,\n av_medium: searchParams?.get('m'),\n av_user: {\n status: isConnected ? 'logged' : 'unlogged',\n ...(isConnected ? { uid, cid } : {}),\n },\n av_items: getAvItems(searchesListings),\n })\n}\n\nconst trackInteraction = interactionVars => PushEvent('interaction', interactionVars)\nconst trackSelectItem = interactionVars => PushEvent('select_item', interactionVars)\n\nconst trackClickProduct = (listing, listname, searchesListings) => {\n const product = getListingProduct(listing, listname)\n trackInteraction({\n int_type: 'product',\n int_description: 'click',\n int_infos: 'homepage',\n products: [product],\n })\n\n trackSelectItem({\n av_items: getAvItems(searchesListings, product.id),\n })\n}\n\nconst generateTrackingUrl = (urlListing, m = '') => {\n let fixUrlListing = urlListing\n if (urlListing && urlListing.indexOf('?') !== -1) {\n fixUrlListing = urlListing.substring(0, urlListing.indexOf('?'))\n }\n fixUrlListing = `${fixUrlListing}?m=${m}`\n return fixUrlListing\n}\n\nexport { trackView, trackPageView, trackInteraction, trackClickProduct, generateTrackingUrl }\n","import styled from 'styled-components'\n\nconst SeoLinksContainer = styled.div`\n background-color: #fff;\n width: 100%;\n height: 100%;\n`\n\nconst SeoLinksWrapper = styled.div`\n margin: 0 auto;\n flex-direction: row;\n padding-bottom: 36px;\n`\n\nconst SeoBlocks = styled.div`\n display: flex;\n line-height: 170%;\n white-space: nowrap;\n flex-direction: row;\n justify-content: space-between;\n font-size: 14px;\n\n & a {\n display: block;\n color: #000000;\n }\n\n @media screen and (max-width: 886px) {\n flex-direction: column;\n margin-left: 24px;\n\n div {\n margin-top: 18px;\n }\n\n & a {\n padding: 5px 0;\n }\n }\n\n @media screen and (max-width: 768px) {\n white-space: nowrap;\n }\n`\nconst SeoBlockToolsWrapper = styled.div`\n background: #f5f7fa;\n box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.2);\n font-size: 14px;\n font-weight: 400;\n padding: 8px 12px;\n line-height: 1.71;\n border-radius: 2px;\n position: relative;\n white-space: normal;\n width: 25%;\n margin-right: 10px;\n\n @media screen and (max-width: 886px) {\n display: none;\n }\n\n div {\n font-weight: 800;\n margin-top: 6px;\n }\n\n span {\n margin-bottom: 4px;\n line-height: 16px;\n display: block;\n text-transform: uppercase;\n font-weight: 800;\n color: #e30513;\n }\n\n ::before {\n z-index: 0;\n position: absolute;\n display: block;\n background-color: inherit;\n left: -7px;\n top: 45%;\n width: 16px !important;\n height: 16px !important;\n margin-top: -5px;\n transform: rotate(45deg);\n content: '';\n }\n`\n\nconst SeoLinkTitle = styled.h3`\n margin: 0 0 12px;\n`\n\nconst SeoBlockLineWrapper = styled.div`\n font-size: 14px;\n padding-right: 5px;\n`\n\nexport { SeoLinksContainer, SeoLinksWrapper, SeoBlocks, SeoBlockToolsWrapper, SeoLinkTitle, SeoBlockLineWrapper }\n","import styled from 'styled-components'\n/**\n * legacy code from old home page.\n * the original style has been converted to styled components but it's useless in this case\n * because we don't have access to the dom generated by agatha. Styled components should be implemented directly on Agatha lib.\n */\n\nconst MainContainer = styled.div`\n height: auto;\n margin: 0 auto 12px;\n padding: 0 12px;\n position: relative;\n width: 100%;\n color: #fff;\n text-align: center;\n box-sizing: border-box;\n z-index: 1;\n display: inline-block;\n\n @media screen and (max-width: 555px) {\n padding-bottom: 30px;\n }\n`\nconst Quest = styled.div`\n display: flex;\n`\nconst QuestContainer = styled.div`\n -webkit-border-bottom-right-radius: 4px;\n -webkit-border-bottom-left-radius: 4px;\n -moz-border-radius-bottomright: 4px;\n -moz-border-radius-bottomleft: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n position: relative;\n visibility: visible;\n left: 0;\n min-height: 261px;\n max-width: 510px;\n width: 100%;\n background: #fff;\n padding: 0 24px;\n text-align: left;\n opacity: 1;\n margin: auto;\n margin-top: 40px;\n box-shadow: 0 10px 14px rgba(0, 0, 0, 0.1);\n z-index: 1;\n\n &.tab-3 {\n min-height: 228px;\n }\n\n .active,\n .visible {\n display: block;\n }\n\n .inactive,\n .invisible {\n display: none;\n }\n\n .c-quest-tabs {\n margin: 0 -24px;\n position: relative;\n top: -40px;\n text-align: center;\n\n input {\n display: none;\n }\n\n ul {\n margin: 0;\n padding: 0;\n\n li {\n display: inline-block;\n margin: 0 0 0 -4px;\n padding: 0;\n list-style-type: none;\n font-weight: 800;\n vertical-align: bottom;\n\n a {\n display: block;\n width: 140px;\n line-height: 42px;\n padding: 0 10px;\n background: #494949;\n text-decoration: none;\n color: #fff;\n border-left: 1px solid rgba(0, 0, 0, 0.15);\n }\n }\n }\n\n .containerList {\n display: flex;\n }\n\n .itemList {\n display: inline-block;\n padding: 0;\n list-style-type: none;\n font-size: 18px;\n vertical-align: bottom;\n width: 33.33%;\n\n label {\n cursor: pointer;\n display: block;\n line-height: 40px;\n background-color: rgba(38, 38, 38, 0.7);\n text-decoration: none;\n color: #fff;\n border-radius: 4px 4px 0 0;\n height: 40px;\n }\n\n input:checked + label {\n background: #fff;\n color: #262626;\n border-radius: 4px 4px 0 0;\n border-left: none;\n z-index: 1;\n position: relative;\n border-bottom: 1px solid #fff;\n }\n :first-child {\n padding: 0 1px 0 0;\n }\n :last-child {\n padding: 0 0 0 1px;\n }\n }\n\n label {\n cursor: pointer;\n display: block;\n line-height: 40px;\n background-color: rgba(38, 38, 38, 0.7);\n text-decoration: none;\n color: #fff;\n border-radius: 4px 4px 0 0;\n height: 40px;\n }\n }\n\n #agatha_estimer.visible,\n #agatha_budget.visible,\n #agatha_autocomplete.visible {\n position: relative;\n }\n\n #agatha_estimer_autocompleteUI,\n #agatha_autocomplete_autocompleteUI {\n padding: 6px 6px;\n border: 1px solid #ccd1d9;\n border-radius: 4px;\n color: #262626;\n }\n\n .CriterionAutocompleteView {\n margin-right: 6px;\n }\n\n .CriterionAutocompleteView.visible {\n display: inline-block;\n\n input {\n height: 32px;\n line-height: 32px;\n width: 100%;\n background: 0 0;\n border: 0;\n display: inline-block;\n font-size: 16px;\n color: #262626;\n }\n }\n\n #agatha_budget.visible {\n width: 191px;\n display: inline-block;\n vertical-align: top;\n text-align: left;\n line-height: 24px;\n padding: 6px 6px;\n border: 1px solid #ccd1d9;\n border-radius: 4px;\n min-height: 46px;\n color: #262626;\n\n input {\n display: inline-block;\n height: 32px;\n line-height: 32px;\n width: 100%;\n background: 0 0;\n border: 0;\n font-size: 16px;\n padding-right: 20px;\n }\n\n .unit {\n position: absolute;\n right: 13px;\n top: 9px;\n color: #262626;\n font-size: 22px;\n }\n }\n\n .slam-aui.autocompleteUI.has-tags > .slam-aui-input-fake > #agatha_autocomplete_autocompleteUI__input,\n .slam-aui.autocompleteUI.has-tags > .slam-aui-input-fake > #agatha_autocomplete_autocompleteUI__input {\n width: 100px !important;\n }\n\n #agatha_estimer.visible input:-ms-input-placeholder,\n #agatha_autocomplete.visible input:-ms-input-placeholder,\n #agatha_budget.visible input:-ms-input-placeholder {\n color: #9198a2 !important;\n }\n\n .slam-aui.autocompleteUI.has-tags {\n .slam-aui-tags {\n display: inline-block;\n }\n }\n\n #agatha_autocomplete_autocompleteUI {\n width: 265px;\n }\n #agatha_estimer_autocompleteUI {\n max-height: 46px;\n overflow: hidden;\n margin: 0 auto;\n width: 280px;\n }\n\n #agatha_biens,\n #fakeMetarefiner .c-quest-field-autoc {\n height: auto;\n transition: all 0.5s;\n border: 0;\n }\n\n #agatha_biens.visible {\n display: block;\n margin-top: 16px;\n\n i.fi-plus:before,\n i.fi-chevron-up:before,\n #agatha_biens .itemList input:checked + label i:before {\n visibility: visible;\n }\n input {\n display: none;\n }\n\n .description {\n position: absolute;\n bottom: 30px;\n color: red;\n }\n .containerList {\n font-size: 0;\n .itemList:last-child input + label,\n .itemList:nth-child(3) input + label {\n width: 32px;\n height: 32px;\n cursor: pointer;\n border: 1px dashed #ccd1d9;\n background-color: #fff;\n padding: 0;\n }\n }\n\n .itemList {\n color: #262626;\n display: inline-block;\n margin-right: 6px;\n margin-bottom: 6px;\n font-size: 12px;\n position: relative;\n\n input:checked + label {\n border: 1px solid #1a6fda;\n .fi-check {\n border: 1px solid #1a6fda;\n background-color: #1a6fda;\n color: #fff;\n font-size: 8px;\n }\n i:before {\n visibility: visible;\n }\n }\n .fi-check:before {\n position: relative;\n left: 3px;\n top: 1px;\n }\n\n label {\n display: inline-block;\n padding-right: 14px;\n padding-left: 11px;\n text-align: left;\n vertical-align: top;\n cursor: pointer;\n white-space: nowrap;\n line-height: 25px;\n height: 32px;\n word-wrap: break-word;\n text-overflow: ellipsis;\n overflow: hidden;\n border: 1px dashed #ccd1d9;\n border-radius: 4px;\n padding-top: 2px;\n\n i.fi-plus,\n i.fi-chevron-up {\n border: 0;\n font-size: 18px;\n margin: 3px 0 0 0;\n left: 7px;\n top: 3px;\n color: #262626;\n }\n\n i {\n display: inline-block;\n width: 16px;\n height: 16px;\n content: ' ';\n line-height: 10px;\n font-size: 13px;\n border-radius: 4px;\n border: 1px solid #aab2bd;\n cursor: pointer;\n vertical-align: top;\n position: relative;\n top: 5px;\n margin-right: 5px;\n }\n i:before {\n visibility: hidden;\n }\n\n i.fi-plus:before,\n i.fi-chevron-up:before {\n visibility: visible;\n }\n }\n }\n .itemList.inactive {\n display: none;\n }\n }\n\n .c-quest-links,\n .c-quest-links-types-search {\n input {\n display: none;\n }\n a {\n color: #1a6fda;\n font-size: 12px;\n }\n .fi {\n font-size: 14px;\n }\n }\n\n .c-quest-links {\n a {\n margin-top: -30px;\n float: right;\n }\n }\n\n .c-quest-links-types-search {\n margin-top: 5px;\n\n a {\n text-decoration: none;\n }\n .link-text {\n text-decoration: underline;\n margin-left: 4px;\n }\n .itemList {\n display: inline-block;\n }\n .search-draw {\n margin-left: 18px;\n }\n }\n\n .c-quest-actions {\n .containerList {\n text-align: center;\n }\n\n input {\n display: none;\n }\n\n .c-quest-actions-search {\n margin: 24px 0;\n background-color: #e30513;\n border-color: #e30513;\n position: relative;\n display: inline-flex;\n -webkit-box-align: center;\n align-items: center;\n -webkit-box-pack: center;\n justify-content: center;\n box-sizing: border-box;\n outline: none;\n border: 1px solid rgb(224, 0, 52);\n transition-duration: 0.2s;\n cursor: pointer;\n text-decoration: none;\n background-color: rgb(224, 0, 52);\n color: rgb(255, 255, 255);\n height: 50px;\n border-radius: 32px;\n font-size: 16px;\n min-width: 125px;\n padding: 0px 24px;\n }\n .c-quest-actions-search:hover {\n border-color: rgb(177, 0, 41);\n color: rgb(255, 255, 255);\n background-color: rgb(255, 60, 84);\n }\n\n .itemList:not(:last-child) {\n text-align: center;\n margin-top: 24px;\n @media screen and (max-width: 1280px) {\n margin-top: 6px;\n }\n a {\n color: #e30513;\n font-size: 14px;\n }\n }\n }\n\n #agatha_estimer.visible {\n margin: auto;\n display: block;\n width: 280px;\n .title {\n display: block;\n font-size: 18px;\n margin-bottom: 24px;\n text-align: center;\n font-weight: 800;\n color: #262626;\n }\n }\n\n .slam-aui-results {\n background: #fff;\n border: 1px solid #e6e9ed;\n position: absolute;\n z-index: 100;\n color: #262626;\n left: 0;\n width: 100%;\n text-align: left;\n }\n\n .slam-aui-results-line {\n display: block;\n padding: 10px;\n cursor: pointer;\n font-size: 14px;\n border-bottom: 1px solid #e6e9ed;\n color: #262626;\n }\n\n .slam-aui-results-line.focus,\n .slam-aui-results-line:hover {\n background: #f5f7fa;\n color: #262626;\n text-shadow: 1px 0 0 #262626;\n }\n\n .slam-aui-tags-line {\n margin: 0 4px 4px 0;\n padding: 4px 1px 4px 5px;\n font-size: 14px;\n background-color: #1a6fda;\n color: #ffffff;\n display: inline-block;\n border-radius: 7px;\n text-decoration: none;\n text-align: left;\n vertical-align: middle;\n cursor: pointer;\n transition: all 0.3s ease-in-out;\n }\n\n .slam-aui-tags-close .fi-close:before {\n margin-right: 4px;\n position: relative;\n top: -1px;\n }\n\n @media screen and (max-width: 555px) {\n min-height: 354px;\n &.tab-3 {\n min-height: 230px;\n }\n #agatha_autocomplete_autocompleteUI {\n width: 100%;\n margin-right: 0;\n }\n\n .c-quest-actions .itemList:first-child a {\n font-size: 12px;\n }\n\n #agatha_autocomplete.visible {\n width: 100%;\n margin-bottom: 12px;\n margin-right: 0;\n }\n\n #agatha_budget.visible {\n margin-bottom: 7px;\n margin-top: 26px;\n width: 100%;\n }\n\n #moteur-engine input {\n font-size: 14px;\n }\n\n .c-quest-links a {\n float: none;\n }\n\n #agatha_biens.visible {\n margin-top: 0;\n }\n\n #agatha_estimer.visible,\n #agatha_estimer_autocompleteUI,\n .location-field,\n .budget {\n width: 100%;\n }\n\n .c-quest-links-types-search {\n position: relative;\n top: -95px;\n }\n }\n`\n\nconst PrefilledSearchContainer = styled.div`\n border-radius: 4px;\n position: relative;\n visibility: visible;\n left: 0;\n min-height: 260px;\n background: #fff;\n padding: 0 24px;\n text-align: left;\n opacity: 1;\n margin: auto;\n margin-bottom: 24px;\n box-shadow: 0 10px 14px rgba(0, 0, 0, 0.1);\n transition: all 0.5s ease;\n text-align: center;\n width: 512px;\n z-index: 1;\n\n @media screen and (max-width: 768px) {\n min-height: 290px;\n margin: 0 15px 0 15px;\n padding-bottom: 30px;\n }\n`\nconst PrefilledData = styled.div`\n padding-top: 45px;\n\n .prefilled-text {\n font-size: 24px;\n color: #000000;\n padding: 0;\n line-height: normal;\n }\n\n .prefilled-strong {\n font-weight: 800;\n }\n .prefilled-soft {\n font-weight: 400;\n }\n\n @media screen and (max-width: 768px) {\n padding-top: 30px;\n }\n`\nconst ActionButtons = styled.div`\n display: flex;\n justify-content: center;\n margin-top: 32px;\n gap: 20px;\n\n button {\n align-self: center;\n width: 194px;\n height: 48px;\n border-radius: 24px;\n }\n @media screen and (max-width: 768px) {\n flex-direction: column;\n button {\n margin: 10px 0 0 0 !important;\n }\n }\n`\nconst WelcomeTitle = styled.h1`\n padding: 32px 0px;\n max-width: 510px;\n text-align: left;\n margin: 0 auto;\n font-size: 32px;\n font-weight: 800;\n color: #2b2b2b;\n\n @media screen and (max-width: 769px) {\n padding: 16px 0px;\n font-size: 28px;\n text-align: center;\n }\n\n @media screen and (max-width: 555px) {\n color: #fff;\n }\n`\n\nexport { MainContainer, Quest, QuestContainer, PrefilledSearchContainer, ActionButtons, PrefilledData, WelcomeTitle }\n","import React from 'react'\nimport { StyledHead, StyledSection, StyledSectionWrapper } from './Section.styled'\n\nfunction SectionHead({ text, highlight = '' }) {\n const getHighlightedText = (text, highlight) => {\n const parts = text.split(new RegExp(`(${highlight})`, 'gi'))\n return (\n <>\n {parts.map((part, i) => (\n \n {part}\n \n ))}\n \n )\n }\n\n return {getHighlightedText(text, highlight)}\n}\n\nfunction Section({ title, highlight, children, withBackground = false }) {\n return (\n \n {title && }\n {children}\n \n )\n}\nexport default Section\n","import React from 'react'\n\n// DETTE TECHNIQUE: ajouter propstypes\n\nconst SeoTypeLinks = ({ seoType }) =>\n seoType.map(a => (\n \n {a.title}\n \n ))\n\nexport default React.memo(SeoTypeLinks)\n","import styled from 'styled-components'\nimport { colorPalette } from '@ui-library/sl'\n\nconst ServicesBlocksContainer = styled.div`\n width: 100%;\n position: relative;\n max-width: 1024px;\n margin: 0 auto;\n`\n\nconst ServicesBlocksWrapper = styled.div`\n width: 100%;\n display: inline-block;\n display: flex;\n\n .block-ctr {\n width: 33%;\n height: 502px;\n }\n @media screen and (min-width: 1025px) {\n .block-ctr:nth-child(2) {\n margin: 0 50px;\n }\n }\n\n @media screen and (max-width: 1024px) {\n flex-direction: column;\n .block-ctr {\n width: 100%;\n min-height: 0;\n height: auto;\n padding: 0 15px;\n box-sizing: border-box;\n margin-bottom: 24px;\n }\n }\n`\n\nconst Block = styled.div`\n background-color: #ffffff;\n color: #000;\n display: block;\n border-radius: 3px;\n padding: 20px 0;\n height: 100%;\n transition: all 0.2s ease-in-out;\n width: 100%;\n box-shadow: 0 0 6px 0 #d8d8d8;\n\n .c-title-600 {\n font-size: 22px;\n padding: 0 0 30px 0;\n font-weight: 400;\n }\n .c-title-chevron {\n position: relative;\n padding-bottom: 15px;\n margin-bottom: 15px;\n }\n .c-title-chevron:before {\n content: '';\n display: block;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n border-bottom: 1px solid #c8c8c8;\n }\n .c-title {\n text-align: center;\n color: ${colorPalette.primary};\n margin: 0 10px 15px 10px;\n display: block;\n font-size: 20px !important;\n }\n\n a {\n position: relative;\n display: block;\n font-size: 18px;\n font-weight: 400;\n padding: 15px 25px 15px 80px;\n text-decoration: none;\n color: #494949;\n text-align: left;\n }\n\n a:hover {\n background: #494949;\n color: #ffffff;\n }\n\n a::before {\n position: absolute;\n top: 50%;\n left: 25px;\n font-size: 40px;\n height: 40px;\n width: 40px;\n line-height: 40px;\n margin: -20px 0 0 0;\n }\n`\nconst Card = styled.div`\n width: 100%;\n\n @media screen and (max-width: 1024px) {\n display: inline-block;\n width: 50%;\n }\n\n @media screen and (max-width: 640px) {\n width: 100% !important;\n }\n`\nexport { ServicesBlocksContainer, ServicesBlocksWrapper, Block, Card }\n","export const getEstateSubtype = propertyType => {\n switch (propertyType) {\n case 'Appartement':\n return '1'\n case 'Maison / Villa':\n return '2'\n case 'Parking':\n return '3'\n case 'Terrain':\n return '4'\n case 'Boutique':\n return '6'\n case 'Local commercial':\n return '7'\n case 'Bureau':\n return '8'\n case 'Loft/Atelier/Surface':\n return '9'\n case 'Divers':\n return '10'\n case 'Immeuble':\n return '11'\n case 'Bâtiment':\n return '12'\n case 'Château':\n return '13'\n case 'Hôtel particulier':\n return '14'\n case 'Programme':\n return '15'\n case 'Modèle de maison':\n return '16'\n case 'Coworking':\n return '17'\n case 'Espace de coworking':\n return '18'\n default:\n return ''\n }\n}\n\nexport const getEstateType = propertyType => {\n switch (propertyType) {\n // APARTMENT\n case 'Appartement':\n case 'Loft/Atelier/Surface':\n return 'av_2'\n // BUILDING\n case 'Immeuble':\n return 'av_3'\n // HOUSE\n case 'Château':\n case 'Hôtel particulier':\n case 'Maison / Villa':\n case 'Modèle de maison':\n return 'av_5'\n // MISCELLANEOUS\n case 'Divers':\n return 'av_6'\n // OFFICE\n case 'Bureau':\n case 'Coworking':\n case 'Espace de coworking':\n return 'av_7'\n // PARKING\n case 'Parking':\n return 'av_8'\n // PLOT\n case 'Terrain':\n return 'av_9'\n // PROJECT\n case 'Bâtiment':\n case 'Programme':\n return 'av_10'\n // TRADING\n case 'Boutique':\n case 'Local commercial':\n return 'av_13'\n default:\n return ''\n }\n}\n\nexport const getDistributionSubtype = transactionType => {\n switch (transactionType) {\n case 'location':\n return '1'\n case 'vente':\n return '2'\n case 'location temporaire':\n return '3'\n case 'location vacances':\n return '4'\n case 'viager':\n return '5'\n case \"produit d'investissement\":\n return '6'\n case 'location de prestige':\n return '7'\n case 'vente de prestige':\n return '8'\n case 'vente neuf':\n return '9'\n case 'vente fonds de commerce':\n return '10'\n case 'cession de bail':\n return '11'\n case 'produit catalogue':\n return '12'\n case 'location coworking':\n return '13'\n case 'location coworking espace':\n return '14'\n case 'acheter client':\n return '15'\n case 'construire client':\n return '16'\n case 'louer client':\n return '17'\n case 'vendre client':\n return '18'\n case 'bien vendu':\n return '19'\n case 'location etudiante':\n return '20'\n case 'location vente':\n return '21'\n default:\n return ''\n }\n}\n\nexport const getDistributionType = distributionSubtype => {\n switch (distributionSubtype?.toString()) {\n case '1':\n case '3':\n case '4':\n case '7':\n case '11':\n case '13':\n case '14':\n case '17':\n case '20':\n case '21':\n return '1'\n case '2':\n case '5':\n case '6':\n case '8':\n case '9':\n case '10':\n case '12':\n case '15':\n case '16':\n case '18':\n case '19':\n return '2'\n default:\n return ''\n }\n}\n","import { TABS } from '../../../../constants'\n\nconst PROJECT_NAME = 'sa_home'\nconst BASE = '/searchengine/'\nexport const JUMP_TO_TAB = `${PROJECT_NAME}${BASE}JUMP_TO_TAB`\n// const defined based on config/agatha-engine/base.js\n\nexport const defaultSearchEngineState = {\n currentTab: TABS.ACHETER,\n}\n\nexport function jumpToTab(tab) {\n return {\n type: JUMP_TO_TAB,\n payload: {\n currentTab: tab,\n },\n }\n}\n\nexport default function reducer(state = defaultSearchEngineState, action = {}) {\n switch (action.type) {\n case JUMP_TO_TAB:\n return {\n ...action.payload,\n }\n default:\n return state\n }\n}\n","import styled from 'styled-components'\nimport Icon from '@ui-library/core/Icon'\n\nconst BlockLinkContainer = styled.a`\n display: flex;\n width: 230px;\n height: auto;\n flex-direction: column;\n border-radius: 4px;\n text-decoration: none;\n box-shadow: 0 0 12px 0 rgba(38, 38, 38, 0.2);\n background: #ffffff;\n padding: 11px 0 0 24px;\n\n p {\n font-weight: 800;\n padding: 0px 16px 16px 0px;\n color: #2b2b2b;\n font-size: 16px;\n margin: 0;\n }\n\n @media screen and (max-width: 1024px) {\n height: 235px;\n margin-bottom: 48px;\n }\n`\n\nconst StyledPlaceholderImg = styled.img`\n width: 142px;\n height: 142px;\n margin-left: 10px;\n`\n\nconst StyledAngleRight = styled(Icon)`\n color: #2b2b2b;\n position: absolute;\n cursor: pointer;\n top: 54%;\n right: 48%;\n width: 14px;\n`\n\nconst TextWrapper = styled.div`\n display: flex;\n position: relative;\n margin-bottom: 0;\n margin-top: auto;\n justify-content: space-between;\n align-items: center;\n padding-top: 3px;\n`\n\nexport { BlockLinkContainer, StyledAngleRight, StyledPlaceholderImg, TextWrapper }\n","export const getSearchEngine = state => state.searchEngine\nexport const getSearchEngineTab = state => getSearchEngine(state).currentTab\n","module.exports = __WEBPACK_EXTERNAL_MODULE__100__;","export const SET_SEARCHES_LISTINGS = 'home/searches/SET_SEARCHES_LISTINGS'\n\nconst defaultSearchesState = {\n searchesListings: [],\n}\n\nexport function setSearchesListings(data) {\n return {\n type: SET_SEARCHES_LISTINGS,\n payload: data,\n }\n}\n\nexport default function reducer(state = defaultSearchesState, action = {}) {\n switch (action.type) {\n case SET_SEARCHES_LISTINGS:\n return {\n ...state,\n searchesListings: action.payload,\n }\n default:\n return state\n }\n}\n","export const getSearchesListings = state => state.searches.searchesListings\n","import React from 'react'\nimport { SeoLinkTitle, SeoBlockLineWrapper } from '../../SeoLinks.styled'\nimport SeoTypeLinks from '../SeoTypeLinks/SeoTypeLinks'\n\n// DETTE TECHNIQUE: ajouter propstypes\n\nconst SeoBlockLine = ({ title, seoType, isPaddedRight }) => (\n \n {title}\n \n \n)\n\nexport default React.memo(SeoBlockLine)\n","import styled from 'styled-components'\nimport { colorPalette } from '@ui-library/sl'\n\nconst StyledSection = styled.div`\n height: auto;\n background: ${props => (props.withBackground ? 'none' : 'white')};\n max-width: 1024px;\n margin: 0 auto;\n padding: 48px 0px;\n\n #button {\n justify-content: center;\n }\n`\nconst StyledHead = styled.h2`\n padding-bottom: 12px;\n text-align: left;\n font-weight: 400;\n position: relative;\n margin: 0px 0px 24px 0px;\n\n ::after {\n content: '';\n border-radius: 4px;\n position: absolute;\n left: 0;\n bottom: 0;\n width: 24px;\n height: 4px;\n background-color: ${colorPalette.primary};\n }\n\n @media screen and (max-width: 1025px) {\n margin: 0px 0px 24px 24px;\n }\n`\nconst StyledSectionWrapper = styled.div`\n max-width: 1024px;\n text-align: left;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n -webkit-box-pack: justify;\n justify-content: space-between;\n -webkit-box-align: center;\n align-items: center;\n margin: 0px auto;\n @media (max-width: 1024px) {\n justify-content: center;\n flex-direction: column;\n }\n`\n\nexport { StyledSection, StyledHead, StyledSectionWrapper }\n","module.exports = __webpack_public_path__ + \"assets/img/hero-image.webp\";","import styled from 'styled-components'\nimport Icon from '@ui-library/core/Icon'\nimport coreColorPalette from '@ui-library/core/palettes/color'\nimport { colorPalette } from '@ui-library/sl'\n\nconst ChevronIcon = styled(Icon)`\n animation: 2s linear k-hwobble-inf 3s;\n animation-iteration-count: infinite;\n -webkit-animation: 2s linear k-hwobble-inf 3s;\n -webkit-animation-iteration-count: infinite;\n position: relative;\n bottom: 0;\n display: block;\n width: 100%;\n @media screen and (max-width: 849px) {\n display: none;\n }\n`\n\nconst SubTextWrapper = styled.div`\n @media screen and (min-width: 1023px) {\n display: none;\n }\n font-size: 16px;\n font-weight: 400;\n height: 0;\n margin-bottom: 5px;\n opacity: 0;\n position: relative;\n top: 10px;\n -webkit-animation: fadeInOut 4s;\n animation: fadeInOut 4s;\n animation-delay: 2s;\n @keyframes fadeInOut {\n 0% {\n height: 0;\n opacity: 0;\n }\n 16% {\n height: 9px;\n opacity: 1;\n }\n 84% {\n height: 9px;\n opacity: 1;\n }\n 100% {\n height: 0;\n opacity: 0;\n }\n }\n`\n\nconst CloseButton = styled.button`\n border: none;\n background: none;\n position: absolute;\n right: 0;\n top: 0;\n padding: 0;\n width: 30px;\n color: white;\n height: 30px;\n font-size: 14px;\n line-height: 9px;\n z-index: 50;\n height: 30px;\n width: 40px;\n cursor: pointer;\n @media screen and (max-width: 468px) {\n background-color: #d6ebef;\n color: ${coreColorPalette.black};\n }\n`\n\nconst CircularButtonWrapper = styled.div`\n background: ${colorPalette.primary};\n position: absolute;\n left: 50%;\n margin-left: -440px;\n width: 140px;\n height: 140px;\n border-radius: 50%;\n text-align: center;\n color: #fff;\n font-size: 16px;\n z-index: 2;\n\n @media screen and (min-width: 850px) {\n top: 160px;\n\n button {\n display: none;\n }\n }\n\n span.tagText {\n display: block;\n font-weight: 800;\n }\n\n a {\n color: ${coreColorPalette.black};\n font-weight: bold;\n font-size: 16px;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: block;\n padding: 30px 15px 0 15px;\n color: #fff;\n font-size: 16px;\n z-index: 1;\n text-decoration: none;\n }\n\n @media screen and (max-width: 1023px) {\n margin-right: -400px;\n }\n @media screen and (max-width: 849px) {\n animation: none;\n background-color: #d6ebef;\n border-radius: 14px 14px 0px 0px;\n display: ${props => (props.hide === true ? 'none' : 'block')};\n position: fixed;\n top: auto;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n margin: 0;\n text-align: left;\n height: auto;\n line-height: 9px;\n\n ${ChevronIcon} {\n display: none;\n }\n\n ${CloseButton} {\n display: inline-block;\n }\n span.tagText {\n margin-top: -13px;\n top: 20px;\n right: 2px;\n }\n\n a {\n color: ${coreColorPalette.black};\n font-weight: bold;\n padding: 28px 15px;\n @media screen and (max-width: 555px) {\n position: relative;\n height: auto;\n }\n }\n }\n @media screen and (max-width: 555px) {\n background-color: #d6ebef;\n span.tagText {\n color: ${coreColorPalette.black};\n }\n }\n\n @keyframes k-hwobble-inf {\n 10% {\n transform: translateY(6px);\n }\n 20% {\n transform: translateY(-5px);\n }\n 30% {\n transform: translateY(4px);\n }\n 40% {\n transform: translateY(-2px);\n }\n 50% {\n transform: translateY(0px);\n }\n 100% {\n transform: translateY(0px);\n }\n }\n`\n\nexport { CloseButton, CircularButtonWrapper, ChevronIcon, SubTextWrapper }\n","import styled from 'styled-components'\nimport { colorPalette } from '@ui-library/sl'\nimport cover from '../../assets/img/hero-image.webp'\n\nconst EngineSectionContainer = styled.div`\n color: hsla(0, 0%, 100%, 0.6);\n position: relative;\n background-position: right bottom;\n background-size: cover;\n background-repeat: no-repeat;\n min-height: 480px;\n\n @media screen and (max-width: 555px) {\n background-color: ${colorPalette.primary};\n }\n\n @media screen and (min-width: 556px) and (max-width: 1280px) {\n background-image: url('${cover}');\n }\n\n @media screen and (min-width: 1281px) and (max-width: 1400px) {\n background-image: url('${cover}');\n }\n\n @media screen and (min-width: 1401px) {\n background-image: url('${cover}');\n }\n\n @media screen and (min-width: 2600px) {\n background-size: cover;\n }\n`\nconst AgathaForm = styled.div`\n position: relative;\n height: 100%;\n color: #fff;\n text-align: center;\n box-sizing: border-box;\n\n @media screen and (max-width: 555px) {\n padding-top: 0px;\n }\n`\n\nconst Loader = styled.div`\n display: inline-block;\n width: 64px;\n min-height: 360px;\n &:after {\n content: ' ';\n display: block;\n width: 46px;\n height: 46px;\n margin: 1px;\n border-radius: 50%;\n border: 5px solid #e30513;\n border-color: #e30513 transparent #e30513 transparent;\n animation: lds-dual-ring 1.2s linear infinite;\n position: relative;\n top: 30px;\n }\n @keyframes lds-dual-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`\n\nexport { EngineSectionContainer, AgathaForm, Loader }\n","import styled from 'styled-components'\nimport coreColorPalette from '@ui-library/core/palettes/color'\nimport { colorPalette } from '@ui-library/sl'\n\nconst StoryContainer = styled.div`\n text-align: center;\n position: relative;\n background-color: white;\n text-align: left;\n border-radius: 4px;\n margin-right: 24px;\n width: 230px;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.08), 0 2px 4px 0 rgba(0, 0, 0, 0.06), 0 1px 2px 0 rgba(0, 0, 0, 0.04);\n\n :last-child {\n margin-right: 0px;\n }\n\n a {\n text-decoration: none;\n color: #000;\n }\n\n img {\n width: 100%;\n height: auto;\n border-radius: 4px 4px 0 0;\n padding-bottom: 12px;\n }\n\n p {\n padding: 0 15px 15px;\n }\n\n @media screen and (max-width: 1024px) {\n margin: 0 0 24px 0;\n max-width: 296px;\n }\n`\n\nconst StoryCat = styled.div`\n border-radius: 4px;\n position: absolute;\n top: 0%;\n left: 0%;\n background-color: ${coreColorPalette.white};\n color: ${colorPalette.primary};\n font-size: 12px;\n padding: 3px 6px 3px 6px;\n margin: 6px;\n`\nexport { StoryCat, StoryContainer }\n","import styled from 'styled-components'\nimport { colorPalette } from '@ui-library/sl'\n\nconst EditoMainWrapper = styled.div`\n background-color: ${colorPalette.cloud};\n`\nconst EditoWrapper = styled.div`\n display: flex;\n justify-content: space-evenly;\n flex-direction: row;\n padding: 0 0 24px;\n @media screen and (max-width: 1024px) {\n flex-direction: column;\n padding: 0 24px;\n }\n`\nconst EditoTitle = styled.div`\n font-size: ${props => (props.isTitle ? '44px' : '32px')};\n font-weight: 400;\n text-transform: ${props => (props.isTitle ? 'uppercase' : 'none')};\n line-height: 38px;\n min-width: 70%;\n width: 300px;\n padding-top: 12px;\n\n & span {\n background-color: ${colorPalette.primary};\n display: inline-block;\n text-transform: uppercase;\n font-weight: 800;\n color: #fff;\n }\n\n & p {\n font-size: 16px;\n }\n`\nconst EditoForeground = styled.div`\n height: 600px;\n width: 635px;\n background-size: 635px;\n position: absolute;\n bottom: 0;\n\n @media (max-width: 1024px) {\n background: none;\n }\n`\nconst NewsList = styled.div`\n text-align: center;\n min-height: 750px;\n`\n\nexport { EditoMainWrapper, EditoWrapper, EditoTitle, EditoForeground, NewsList }\n","import reducer from './searchengine'\n\nimport * as selectors from './selectors'\n\nexport { selectors }\n\nexport default reducer\n","import reducer from './ldFlags'\n\nexport default reducer\n","import reducer from './searches'\n\nexport default reducer\n","// @flow\n\nimport React from 'react'\nimport { Provider } from 'react-redux'\nimport configureStore from './app/store'\n\nimport App from './app'\n\nconst Bootstrap = ({ children }) => {\n const store = configureStore(window.initialData)\n return {children}\n}\n\nconst BootstrapedApp = () => (\n \n \n \n)\n\nexport default BootstrapedApp\n","import { compose, createStore, applyMiddleware, combineReducers } from 'redux'\n// import { createLogger } from 'redux-logger'\nimport thunkMiddleWare from 'redux-thunk'\n\nimport * as reducers from './modules'\n\n// const loggerMiddleware = createLogger()\n\n// eslint-disable-next-line no-underscore-dangle\nconst devtoolExtension = () => (typeof global !== 'undefined' && global.__REDUX_DEVTOOLS_EXTENSION__ ? global.__REDUX_DEVTOOLS_EXTENSION__() : x => x)\n\nconst createEnhancer = () =>\n compose(\n applyMiddleware(thunkMiddleWare),\n devtoolExtension(),\n )\n\nexport default initialState => {\n const store = createStore(combineReducers(reducers), initialState, createEnhancer())\n\n return store\n}\n","export { default as searchEngine } from './searchengine'\nexport { default as ldFlags } from './ldFlags'\nexport { default as searches } from './searches'\n","const defaultLdFlagsState = {}\n\nexport default function reducer(state = defaultLdFlagsState, action = {}) {\n switch (action.type) {\n default:\n return state\n }\n}\n","import { hot } from 'react-hot-loader'\nimport React, { useState, useEffect } from 'react'\nimport '@SeLoger/agatha/dist/commonjs/slam-agatha'\nimport styled, { createGlobalStyle } from 'styled-components'\nimport { connect } from 'react-redux'\nimport Layout from './layout'\nimport EngineSectionContainer from './containers/EngineSection/EngineSection'\nimport ServicesBlocks from './components/ServicesBlocks/ServicesBlocks'\nimport ServicesData from './components/ServicesBlocks/ServiceBlocks.data'\nimport SearchListingContainer from './containers/SearchListingContainer/SearchListingContainer'\nimport Editorial from './components/Editorial/Editorial'\nimport { trackPageView, trackView } from './tracking/utils'\nimport { setSearchesListings } from './store/modules/searches/searches'\n\nconst Global = createGlobalStyle`\n body {\n background-color: white;\n }\n\n .c-deposit-button {\n background: linear-gradient(45deg, #e30513 0%, #fe004b 100%)!important;\n border: 0;\n color: #fff;\n\n &::before {\n content: '';\n position: absolute;\n inset: 0;\n background: #e30513;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s ease 0s;\n z-index: 0;\n border-radius: 22px;\n }\n\n &:hover {\n &:not(:disabled) {\n &::before {\n opacity: 1;\n }\n }\n }\n }\n\n .c-deposit-button svg {\n fill: white;\n }\n\n`\n\nconst AppContainer = styled.div`\n width: 100%;\n height: 100%;\n`\n\nfunction App({ setSearchesListings }) {\n const [isConnected, setConnected] = useState(false)\n\n useEffect(() => {\n const getSearchesListings = async () => {\n let searchesListings\n try {\n searchesListings = (await window.kitFunction.searches.getSearchesListings()) || []\n } catch {\n searchesListings = []\n }\n setSearchesListings(searchesListings)\n return searchesListings\n }\n let isUserConnected = false\n\n if (window.authModule) {\n if (window.authModule.authentication.isConnected()) {\n isUserConnected = true\n setConnected(true)\n }\n }\n trackView()\n getSearchesListings().then(searchesListings => trackPageView(isUserConnected, searchesListings))\n }, [])\n\n return (\n \n \n \n \n {isConnected && }\n \n \n \n \n )\n}\n\nconst mapDispatchToProps = {\n setSearchesListings,\n}\n\nexport default hot(module)(\n connect(\n null,\n mapDispatchToProps,\n )(App),\n)\n","import React, { Fragment } from 'react'\nimport { ThemeProvider } from 'styled-components'\nimport { GlobalStyles, theme } from '@ui-library/sl'\nimport SeoLinks from './components/SeoLinks/SeoLinks'\n\nconst Layout = ({ children, ...props }) => (\n \n \n \n {children}\n \n \n \n)\n\nexport default Layout\n","import React from 'react'\n\nimport { SeoLinksContainer, SeoLinksWrapper, SeoBlocks } from './SeoLinks.styled'\nimport text from '../../../text'\nimport { SEOhousesSales, SEOflatsSales, SEOflatsRents, SEOtoolsBlock } from '../../../constants'\nimport SeoBlockTools from './SeoLinksComponents/SeoBlocksTools/SeoBlocksTools'\nimport SeoBlockLine from './SeoLinksComponents/SeoBlockLine/SeoBlockLine'\nimport SeoDynamicBlock from './SeoLinksComponents/SeoDynamicBlock/SeoDynamicBlock'\nimport Section from '../Section/Section'\n\nconst SeoLinks = () => (\n
\n \n \n \n \n\n \n\n \n\n \n\n \n \n \n \n
\n)\n\nexport default React.memo(SeoLinks)\n","import React from 'react'\nimport text from '../../../../../text'\nimport SeoTypeLinks from '../SeoTypeLinks/SeoTypeLinks'\nimport { SeoBlockToolsWrapper } from '../../SeoLinks.styled'\n\n// DETTE TECHNIQUE: enlever l'icone du font-icon et mettre ui-library + retirer la div juste pour sauter une ligne\n// DETTE TECHNIQUE: ajouter propstypes\n\nconst SeoBlockTools = ({ seoType }) => (\n \n \n {text.SEOLINKS.TOOLS_BLOCK.TITLE}\n \n {text.SEOLINKS.TOOLS_BLOCK.SUBTITLE}\n
{text.SEOLINKS.TOOLS_BLOCK.SECOND_SUBTITLE}
\n \n
\n)\n\nexport default SeoBlockTools\n","import React from 'react'\n\nimport SeoTypeLinks from '../SeoTypeLinks/SeoTypeLinks'\nimport { SeoLinkTitle, SeoBlockLineWrapper } from '../../SeoLinks.styled'\nimport { getWeekDayAsStrFormat, cityToUrl, seoVariationSets } from '../../../../../constants'\n\nconst SeoDynamicBlock = ({ title }) => {\n const getSEOVariationByDay = (day, city) => {\n switch (day) {\n default:\n case 'Monday':\n case 'Tuesday':\n return `Prix immobilier ${city}`\n case 'Wednesday':\n case 'Thursday':\n return `Prix m2 ${city}`\n case 'Friday':\n case 'Saturday':\n return `Prix mètre carré ${city}`\n case 'Sunday':\n return `Prix moyen ${city}`\n }\n }\n\n const getWeekNumber = date => {\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()))\n // Make Sunday number 7 instead of 0\n d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7))\n // Get reference date for this feature 01/01/2019\n const yearStart = new Date(Date.UTC(2019, 0, 1))\n // Calculate full weeks\n const weekNo = Math.ceil(((d - yearStart) / 86400000 + 1) / 7)\n // Return array of week number\n return weekNo\n }\n const getSellerLinks = () => {\n const currentDate = new Date()\n const weekNumber = getWeekNumber(currentDate)\n const weekDayStrFormat = getWeekDayAsStrFormat(currentDate)\n const currentSetIdx = weekNumber % seoVariationSets.length\n const currentSet = seoVariationSets[currentSetIdx] || seoVariationSets[0]\n const links = currentSet.map(city => {\n const formatedCity = city.toLowerCase()\n const title = getSEOVariationByDay(weekDayStrFormat, city)\n const link = `${cityToUrl[formatedCity]}#?m=homepage-footer-SEO`\n return { title, link }\n })\n return links\n }\n return (\n \n {title}\n \n \n )\n}\n\nexport default React.memo(SeoDynamicBlock)\n","import React, { useState, useEffect } from 'react'\nimport { connect } from 'react-redux'\nimport axios from 'axios'\nimport SearchEngine from '../../components/SearchEngine/SearchEngine'\nimport { EngineSectionContainer, AgathaForm } from './EngineSection.styled'\nimport { jumpToTab } from '../../store/modules/searchengine/searchengine'\nimport { getSearchEngineTab } from '../../store/modules/searchengine/selectors'\nimport PrefilledSearch from '../../components/SearchEngine/PrefilledSearch'\nimport { STORAGE } from '../../../constants'\nimport CircularButton from '../../components/CircularButton/CircularButton'\nimport adConfig from '../../components/CircularButton/CircularAdConfig'\n// import SearchLinkContainer from '../SearchLinkContainer/SearchLinkContainer'\n\n/* eslint-disable */\n// Attention obligé de garder ces routes pour pouvoir afficher le background dans l'url\n// ces urls sont appelés grâce au pre render back\n// elles sont contenues dans la variable backgroundImage qui est set coté back\n/* eslint-enable */\n\nconst christieApiURL = '/search-bff/christie/serialize'\n\nconst EngineSection = () => {\n const defaultCircularAd = {\n TEXT: '',\n LINK: '',\n SUBTEXT: '',\n TRACKING_TYPE: '',\n }\n\n const [isNewSearch, initSearch] = useState(true)\n const [searchData, setSearchData] = useState({ searchString: '', locations: [] })\n const [circularAd, setCircularAd] = useState(defaultCircularAd)\n const [isPinOpen, setIsPinOpen] = useState(true)\n\n function getRandomAd(adArray) {\n const rand = Math.floor(Math.random() * 100 + 1)\n let percentSum = 0\n let count = 0\n\n while (count < adArray.length) {\n percentSum += adArray[count].PERCENTAGE\n if (rand < percentSum) {\n return adArray[count]\n }\n count++\n }\n\n if (adArray.length > 0) {\n return adArray[0]\n }\n return {}\n }\n\n function closePin() {\n setIsPinOpen(false)\n }\n\n async function fetchSearchData() {\n if (window.notoriousbigdata) {\n let searchValue = await window.notoriousbigdata.nbdStorage.getItem(STORAGE.LAST_SEARCH)\n if (searchValue) {\n if (window.authModule) {\n if (window.authModule.authentication.isConnected()) {\n searchValue = JSON.parse(searchValue)\n }\n }\n if (searchValue.places && searchValue.places.length > 0) {\n const searchValueJson = JSON.stringify(searchValue)\n const headers = {\n 'Content-Type': 'application/json',\n }\n await axios.post(`${christieApiURL}`, searchValueJson, { headers }).then(res => {\n initSearch(false)\n const locations = searchValue.places.map(item => item.label)\n const searchString = res.data\n setSearchData({ searchString, locations })\n })\n }\n }\n }\n }\n\n useEffect(() => {\n async function loadComponents() {\n setCircularAd(getRandomAd(adConfig))\n await fetchSearchData()\n }\n loadComponents()\n }, [])\n\n const componentToload = isNewSearch ? : \n\n const { TEXT, SUBTEXT, LINK, TRACKING_TYPE } = circularAd\n return (\n \n \n {componentToload}\n {/* {!isConnected && } */}\n \n \n \n )\n}\n\nconst mapStateToProps = state => ({\n currentTab: getSearchEngineTab(state),\n})\n\nexport default connect(\n mapStateToProps,\n { jumpToTab },\n)(EngineSection)\n","import React from 'react'\nimport axios from 'axios'\nimport { SLAM } from '@SeLoger/slam-core/dist/commonjs/slam-core'\nimport { MainContainer, Quest, QuestContainer, WelcomeTitle } from './SearchEngine.styled'\nimport config from '../../config/agatha-engine/base'\nimport { STORAGE, SEARCH_TYPE } from '../../../constants'\nimport text from '../../../text'\n\n// DETTE TECHNIQUE: passage en hook\n// DETTE TECHNIQUE: ajouter propstypes\n\nclass SearchEngine extends React.PureComponent {\n componentDidMount = () => {\n if (SLAM && SLAM.module) {\n const agatha = SLAM.module('SLAM.Agatha').create(config, '#moteur-engine')\n agatha.init()\n agatha.$on('changeValueSuccess', (criterion, criteria) => {\n // sync tab with state\n if (criterion.model.name === 'quest' && criterion.model.value.length > 0) {\n this.changeTab(criterion.model.value[0])\n }\n // from old hompage\n if (criterion.model.name === 'autocomplete') {\n if (criteria.criteria.autocomplete.model.value.length > 0) {\n document.querySelector('#agatha_autocomplete_autocompleteUI__input').setAttribute('placeholder', 'Un autre lieu ?')\n } else {\n criteria.criteria.estimer.reset()\n document.querySelector('#agatha_autocomplete_autocompleteUI__input').setAttribute('placeholder', 'Dans quelle ville ? Quartier ?')\n }\n }\n })\n\n const deposerLouerLink = document.querySelector('#deposer-louer')\n const deposerAcheterLink = document.querySelector('#deposer-acheter')\n\n deposerLouerLink.addEventListener('click', () => {\n const originalHref = 'https://www.seloger.com/depot-annonce/location'\n const medium = '?m=homepage_cta_owner_place_your_ad_classified_deposit_landing_rent'\n deposerLouerLink.setAttribute('href', originalHref + medium)\n })\n\n deposerAcheterLink.addEventListener('click', () => {\n const originalHref = 'https://www.seloger.com/depot-annonce/vente'\n const medium = '?m=homepage_cta_owner_place_your_ad_classified_deposit_landing_sell'\n deposerAcheterLink.setAttribute('href', originalHref + medium)\n })\n\n const cta = document.querySelector('.c-quest-actions a.c-quest-actions-search')\n const moreCriteria = document.querySelector('.search-more-criteria')\n const searchTime = document.querySelector('.search-time')\n const searchDraw = document.querySelector('.search-draw')\n\n cta.addEventListener('click', async e => {\n e.preventDefault()\n const searchUrl = await this.generateUrl(\n agatha.criteria.quest.model.value,\n agatha.criteria.biens.model.value,\n agatha.criteria.autocomplete.model.value,\n agatha.criteria.estimer.model.value,\n agatha.criteria.budget.model.value,\n SEARCH_TYPE.CLASSIC,\n )\n window.localStorage.setItem(STORAGE.LAST_SEARCH, true)\n document.location.href = searchUrl\n })\n\n moreCriteria.addEventListener('click', async e => {\n e.preventDefault()\n const searchUrl = await this.generateUrl(\n agatha.criteria.quest.model.value,\n agatha.criteria.biens.model.value,\n agatha.criteria.autocomplete.model.value,\n agatha.criteria.estimer.model.value,\n agatha.criteria.budget.model.value,\n SEARCH_TYPE.ADVANCED,\n )\n window.localStorage.setItem(STORAGE.LAST_SEARCH, true)\n document.location.href = searchUrl\n })\n\n searchTime.addEventListener('click', async e => {\n e.preventDefault()\n const searchUrl = await this.generateUrl(\n agatha.criteria.quest.model.value,\n agatha.criteria.biens.model.value,\n agatha.criteria.autocomplete.model.value,\n agatha.criteria.estimer.model.value,\n agatha.criteria.budget.model.value,\n SEARCH_TYPE.TIME,\n )\n window.localStorage.setItem(STORAGE.LAST_SEARCH, true)\n document.location.href = searchUrl\n })\n\n searchDraw.addEventListener('click', async e => {\n e.preventDefault()\n const searchUrl = await this.generateUrl(\n agatha.criteria.quest.model.value,\n agatha.criteria.biens.model.value,\n agatha.criteria.autocomplete.model.value,\n agatha.criteria.estimer.model.value,\n agatha.criteria.budget.model.value,\n SEARCH_TYPE.DRAW,\n )\n window.localStorage.setItem(STORAGE.LAST_SEARCH, true)\n document.location.href = searchUrl\n })\n\n const inputCity = document.querySelector('#agatha_autocomplete_autocompleteUI__input')\n const inputPrice = document.querySelector('#agatha_budget input')\n const inputEstimate = document.querySelector('#agatha_estimer_autocompleteUI__input')\n const { closePin } = this.props\n\n if (inputCity) {\n inputCity.addEventListener('focus', async () => {\n closePin()\n })\n }\n\n if (inputPrice) {\n inputPrice.addEventListener('focus', async () => {\n closePin()\n })\n }\n\n if (inputEstimate) {\n inputEstimate.addEventListener('focus', async () => {\n closePin()\n })\n }\n }\n }\n\n changeTab = currentTab => {\n const moteurEngine = document.querySelector('#moteur-engine')\n moteurEngine.classList.add(`tab-${currentTab}`)\n const { jumpToTab } = this.props\n jumpToTab(currentTab)\n }\n\n getSerializedQueryString = async qs => {\n try {\n const url = await axios.get(`christie/serialize`, { params: { queryString: qs } })\n return url.data\n } catch (error) {\n return qs\n }\n }\n\n generateUrl = async (quest, biens, autocomplete, estimer, budget, searchType) => {\n const host = '/'\n let pagePath = 'list.htm'\n\n switch (searchType) {\n case SEARCH_TYPE.DRAW:\n pagePath = 'map.htm'\n break\n case SEARCH_TYPE.ADVANCED:\n case SEARCH_TYPE.TIME:\n pagePath = 'recherche-avancee.html'\n break\n default:\n break\n }\n\n let newUrl = ''\n let idtt = quest[0]\n\n if (idtt === '3') {\n // Onglet Estimer\n newUrl = 'estimation-immobiliere/simulateur-prix/address?m=homepage_estimate_a_property_estimate_step1'\n if (estimer.length > 0) {\n const estimerObject = estimer[0].object\n const { id, type } = estimerObject\n window.localStorage.setItem('estimationform-type', 3)\n window.localStorage.setItem('estimationform-address', JSON.stringify(estimerObject))\n newUrl = `${newUrl}&id=${id}&type=${type}`\n }\n } else {\n // Onglets Louer / Acheter\n // Génération des paramètres relatifs aux localités (autocomplete via agatha)\n const localites = {}\n Object.keys(autocomplete).forEach(k => {\n const tmp = autocomplete[k]\n if (tmp && tmp.type) {\n localites[tmp.type] = localites[tmp.type] || []\n if (localites[tmp.type].indexOf(tmp.id) === -1) {\n localites[tmp.type].push(tmp.id)\n }\n }\n })\n\n let params = ''\n Object.keys(localites).forEach(k => {\n const join = localites[k].join(',')\n params += `${k}=${join}&`\n })\n\n params = params.substring(0, params.length - 1)\n\n // Gestion des autres valeurs\n if (biens.indexOf('8') > -1 && idtt !== '2,5') biens.push('18')\n const idTypeBien = biens.filter(bien => bien !== 'more' && bien !== 'less').join(',')\n const pxMax = budget !== null ? `&pxMax=${budget}` : ''\n const div = params === '' ? '&div=2238' : ''\n const optionnal = params === '' ? '' : '&'\n const enterprise = idTypeBien.indexOf('6') !== -1 || idTypeBien.indexOf('7') !== -1 || idTypeBien.indexOf('8') !== -1 ? '1' : '0'\n const nature = idtt === '2,5' ? '1,2,4' : '1'\n\n if (biens.indexOf('8') > -1 && idtt !== '2,5') {\n idtt = '1,14'\n }\n\n let queryString = `tri=initial&enterprise=${enterprise}&idtypebien=${idTypeBien}${pxMax}${div}&idtt=${idtt}&naturebien=${nature}${optionnal}${params}`\n\n if (searchType === SEARCH_TYPE.TIME) {\n queryString += '#openIso'\n } else if (searchType === SEARCH_TYPE.DRAW) {\n queryString = await this.getSerializedQueryString(queryString)\n queryString += '&draw=1'\n }\n newUrl = `${pagePath}?${queryString}&m=search_hp_new`\n }\n const generatedUrl = host + newUrl\n return generatedUrl\n }\n\n render() {\n return (\n \n \n {text.WELCOME_TEXT.TITLE}\n \n \n \n \n \n )\n }\n}\n\nexport default SearchEngine\n","import actions from './actions'\n\nconst base = {\n criteria: [\n {\n model: {\n // Onglet louer / acheter / estimer\n name: 'quest',\n type: 'List',\n value: ['2,5'],\n multiple: false,\n items: [{ label: 'Louer', value: '1' }, { label: 'Acheter', value: '2,5' }, { label: 'Estimer', value: '3' }],\n },\n view: {\n cssClasses: ['c-quest-tabs'],\n },\n },\n {\n model: {\n name: 'autocomplete',\n value: [],\n type: 'Autocomplete',\n active: true,\n response: res =>\n res.map(a => {\n const key = Object.keys(a.Params)[0]\n const value = a.Params[key].toString()\n return {\n label: a.Display,\n type: key,\n id: value,\n }\n }),\n request: search => `//autocomplete.svc.groupe-seloger.com/api/v2.0/auto/complete/fra/63/10/8/SeLoger?text=${search}`,\n },\n view: {\n displayErrorMessage: false,\n placeholder: 'Dans quelle ville ? Quartier ?',\n start: 2,\n limit: 7,\n templates: {\n tags: {\n close: 'X',\n },\n },\n },\n },\n {\n model: {\n name: 'estimer',\n value: [],\n type: 'Autocomplete',\n multiple: false,\n active: true,\n response: res =>\n res.suggestions.map(a => ({\n object: a,\n label: a.display,\n type: a.type,\n id: a.id,\n })),\n request: search => `api/estimate/autocomplete?text=${search}`,\n },\n view: {\n label: 'Estimez gratuitement votre bien',\n multiple: false,\n visible: false,\n displayErrorMessage: true,\n placeholder: 'Votre adresse ?',\n start: 2,\n limit: 7,\n templates: {\n tags: {\n close: 'X',\n },\n },\n },\n },\n {\n model: {\n name: 'budget',\n type: 'Numeric',\n float: false,\n },\n view: {\n placeholder: 'Votre budget max ?',\n formatNumber: true,\n unit: '€',\n visible: true,\n },\n },\n {\n model: {\n name: 'link_type_search',\n type: 'List',\n value: ['lien_type_recherche'],\n multiple: true,\n items: [\n { label: \"Par temps de trajet\", value: 'time' },\n { label: \"Dessin sur la carte \", value: 'draw' },\n ],\n },\n view: {\n cssClasses: ['c-quest-links-types-search'],\n },\n },\n {\n model: {\n name: 'biens',\n type: 'List',\n value: ['2', '1'],\n multiple: true,\n items: [\n { label: \"Maison\", value: '2', active: true },\n { label: \"Appartement\", value: '1', active: true },\n { label: \"\", value: 'more', active: true },\n { label: \"Terrain\", value: '4', active: false },\n { label: \"Parking / Box\", value: '3', active: false },\n { label: \"Loft\", value: '9', active: false },\n { label: \"Hôtel particulier\", value: '14', active: false },\n { label: \"Chateau\", value: '13', active: false },\n { label: \"Batiment\", value: '12', active: false },\n { label: \"Immeuble\", value: '11', active: false },\n { label: \"Boutique\", value: '6', active: false },\n { label: \"Local commercial\", value: '7', active: false },\n { label: \"Bureau\", value: '8', active: false },\n { label: \"\", value: 'less', active: false },\n ],\n },\n view: {\n visible: true,\n },\n },\n {\n model: {\n name: 'link',\n type: 'List',\n value: ['lien'],\n multiple: false,\n items: [{ label: \"Recherche avancée \", value: 'lien' }],\n },\n view: {\n cssClasses: ['c-quest-links'],\n },\n },\n {\n model: {\n name: 'actionbuttons',\n type: 'List',\n value: ['actionbuttons'],\n multiple: false,\n items: [\n {\n label:\n \"Propriétaire ? Déposez votre annonce \",\n value: 'deposer-acheter',\n active: true,\n },\n {\n label:\n \"Propriétaire ? Déposez votre annonce \",\n value: 'deposer-louer',\n active: false,\n },\n { label: \"Rechercher\", value: 'rechercher' },\n ],\n },\n view: {\n cssClasses: ['c-quest-actions'],\n visible: true,\n },\n },\n ],\n actions,\n}\n\nexport default base\n","import utils from './utils'\n\nconst actions = [\n {\n name: 'interactions',\n fn: (criteria, criterion) => {\n if (criterion) {\n if (criterion.model.name === 'quest') {\n const allValues = []\n\n if (criteria.autocomplete.model.value.length) {\n let i = criteria.estimer.model.value.length ? 1 : 0\n for (i; i < criteria.autocomplete.model.value.length; i++) {\n allValues.push(criteria.autocomplete.model.value[i])\n }\n }\n\n if (allValues.length > 0) {\n criteria.autocomplete.reset()\n criteria.autocomplete.setValue(allValues)\n }\n\n const selectedTab = criterion.model.value[0]\n\n switch (selectedTab) {\n case '1': // Louer\n criteria.autocomplete.setVisible(true)\n criteria.budget.setVisible(true)\n criteria.biens.setVisible(true)\n criteria.estimer.setVisible(false)\n criteria.link.setVisible(true)\n criteria.link_type_search.setVisible(true)\n criteria.actionbuttons.activeItems(['deposer-acheter'], false)\n criteria.actionbuttons.activeItems(['deposer-louer'], true)\n break\n\n case '3': // Estimer\n criteria.estimer.setVisible(true)\n criteria.link.setVisible(false)\n criteria.autocomplete.setVisible(false)\n criteria.biens.setVisible(false)\n criteria.budget.setVisible(false)\n criteria.link_type_search.setVisible(false)\n criteria.actionbuttons.activeItems(['deposer-acheter'], false)\n criteria.actionbuttons.activeItems(['deposer-louer'], false)\n break\n\n case '2,5': // Acheter\n default:\n criteria.autocomplete.setVisible(true)\n criteria.budget.setVisible(true)\n criteria.biens.setVisible(true)\n criteria.estimer.setVisible(false)\n criteria.link.setVisible(true)\n criteria.link_type_search.setVisible(true)\n criteria.actionbuttons.activeItems(['deposer-acheter'], true)\n criteria.actionbuttons.activeItems(['deposer-louer'], false)\n break\n }\n utils.syncContentWithTab(selectedTab) // Switch the content of the homepage\n }\n // Type de biens\n if (criterion.model.name === 'biens') {\n // Last item added\n const selectedType = criterion.model.value[criterion.model.value.length - 1]\n\n if (selectedType === 'more') {\n criteria.biens.activeItems(['4', '3', '9', '14', '13', '12', '11', '6', '7', '8'], true)\n criteria.biens.activeItems(['more'], false)\n criteria.biens.activeItems(['less'], true)\n criteria.biens.delValue('less')\n }\n\n if (selectedType === 'less') {\n criteria.biens.activeItems(['4', '3', '9', '14', '13', '12', '11', '6', '7', '8'], false)\n criteria.biens.activeItems(['more'], true)\n criteria.biens.activeItems(['less'], false)\n criteria.biens.delValue('more')\n }\n\n // Inputs that can't be checked with other\n if (selectedType === '4' || selectedType === '3' || selectedType === '12' || selectedType === '11') {\n const values = criteria.biens.model.value\n const vLength = values.length\n for (let i = 0; i < vLength; i++) {\n if (values[i] !== selectedType) {\n criteria.biens.delValue(values[i])\n }\n }\n }\n\n // Inputs that can be checked together\n const ensemble1 = ['1', '2', '9', '14', '13']\n\n if (ensemble1.indexOf(selectedType) !== -1) {\n const values = criteria.biens.model.value\n const vLength = values.length\n for (let i = 0; i < vLength; i++) {\n if (ensemble1.indexOf(values[i]) === -1) {\n criteria.biens.delValue(values[i])\n }\n }\n }\n\n const ensemble2 = ['6', '7', '8']\n if (ensemble2.indexOf(selectedType) !== -1) {\n const values = criteria.biens.model.value\n const vLength = values.length\n for (let i = 0; i < vLength; i++) {\n if (ensemble2.indexOf(values[i]) === -1) {\n criteria.biens.delValue(values[i])\n }\n }\n }\n }\n }\n },\n },\n]\n\nexport default actions\n","const utils = {\n syncWelcomeMessage(index) {\n const welcomeMessages = document.querySelectorAll('#i-welcome-foot span')\n for (let i = 0; i < welcomeMessages.length; i++) {\n welcomeMessages[i].classList.add('u-hide')\n if (index === i + 1) {\n welcomeMessages[i].classList.remove('u-hide')\n }\n }\n },\n syncEdito(index) {\n const editos = document.querySelectorAll('.edito-header span')\n for (let i = 0; i < editos.length; i++) {\n editos[i].classList.add('u-hide')\n if (index === i + 1) {\n editos[i].classList.remove('u-hide')\n }\n }\n },\n syncSection(index) {\n const sections = ['#i-section-1', '#i-section-2', '#i-section-3']\n for (let i = 0; i < sections.length; i++) {\n document.querySelector(sections[i]).classList.add('u-hide')\n }\n const selected = `#i-section-${index}`\n document.querySelector(selected).classList.remove('u-hide')\n },\n syncStory(index) {\n const istorys = ['#i-story-1', '#i-story-2', '#i-story-3']\n for (let i = 0; i < istorys.length; i++) {\n document.querySelector(istorys[i]).classList.add('u-hide')\n }\n const selected = `#i-story-${index}`\n document.querySelector(selected).classList.remove('u-hide')\n },\n trackTab(tabTrackingCode) {\n if (window.avatag !== undefined) {\n window.avatag.push({\n type: 'utilisationOutil',\n data: {\n outil_id: tabTrackingCode,\n },\n })\n }\n },\n syncContentWithTab(tab) {\n switch (tab) {\n case '1':\n document.querySelector('.c-quest-actions .c-quest-actions-search').textContent = 'Rechercher'\n break\n\n case '3':\n document.querySelector('.c-quest-actions .c-quest-actions-search').textContent = 'Continuer'\n break\n\n case '2,5':\n default:\n document.querySelector('.c-quest-actions .c-quest-actions-search').textContent = 'Rechercher'\n break\n }\n },\n}\n\nexport default utils\n","import React from 'react'\nimport Button from '@ui-library/core/Button'\nimport { SORTS } from '@agatha/api/lib/rules/constants'\nimport { trackInteraction } from '../../tracking/utils'\nimport { PrefilledSearchContainer, ActionButtons, PrefilledData, MainContainer, Quest, WelcomeTitle } from './SearchEngine.styled'\nimport text from '../../../text'\n\nfunction PrefilledSearch({ initSearch, locations, searchString }) {\n const getSearchedLocationText = () => {\n const count = locations.length\n let location1 = ''\n let location2 = ''\n\n if (count === 1) {\n return {locations[0]}\n }\n\n if (count === 2) {\n ;[location1, location2] = locations\n } else {\n ;[location1] = locations\n location2 = `${count - 1} autres lieux`\n }\n return (\n \n {location1}\n  et \n {location2}\n \n )\n }\n const customSearchString = searchString.includes('&sort=') ? searchString : `${searchString}&sort=${SORTS.DESCENDING.DATE}`\n\n const runLastSearch = () => {\n window.location = `/list.htm?${customSearchString}&m=search_hp_last`\n }\n const newSearch = () => {\n trackInteraction({\n int_type: 'new-search',\n int_description: 'click',\n })\n initSearch(true)\n }\n const locationText = getSearchedLocationText()\n return (\n \n \n {text.WELCOME_TEXT.H1_ALREADY_VISITED}\n \n \n \n

{text.REDO_SEARCH.TITLE_PART_1}

\n

{text.REDO_SEARCH.TITLE_PART_2}

\n

\n {text.REDO_SEARCH.TITLE_ON} {locationText} {text.REDO_SEARCH.QUESTION}\n

\n
\n \n \n \n \n
\n
\n
\n
\n )\n}\n\nexport default PrefilledSearch\n","/* eslint camelcase: 0 */\n\nconst extractNumber = product => {\n if (product && typeof product === 'string') {\n return Number(product.replace(/[^\\d]/g, ''))\n }\n return product || ''\n}\n\nconst extractEstatePostalCode = estatePostalCode => (estatePostalCode ? parseInt(estatePostalCode, 10) : 0)\n\nconst extractPhotosNumber = (photosNumberFromBack, photosNumberFromAddFavorite) => {\n if (photosNumberFromBack) {\n return photosNumberFromBack.length\n }\n if (photosNumberFromAddFavorite) {\n return extractNumber(photosNumberFromAddFavorite)\n }\n return 0\n}\n\nconst extractSurface = surface => {\n if (surface && typeof surface === 'string') {\n return parseFloat(surface.match(/[\\d.]+/))\n }\n return surface\n}\n\nexport const getListingProduct = (listing, affichagetype) => {\n const {\n id,\n idannonce,\n publicationTypeCouplingSource,\n idtypepublicationsourcecouplage,\n zipCode,\n codepostal,\n surface,\n price,\n prix,\n rooms,\n nb_pieces,\n urlPhotos,\n nb_photos,\n } = listing\n const trackSurface = surface ? extractSurface(surface) : ''\n\n return {\n list_name: affichagetype,\n price: extractNumber(price || prix),\n space: trackSurface,\n id: id || idannonce,\n photos_nb: extractPhotosNumber(urlPhotos, nb_photos),\n estate_postalcode: extractEstatePostalCode(zipCode || codepostal),\n parent_site: publicationTypeCouplingSource || idtypepublicationsourcecouplage,\n nb_rooms: extractNumber(rooms || nb_pieces),\n product_type: 'estate',\n }\n}\n\nexport const getListingsProducts = (listings, affichagetype) => (listings && listings.length !== 0 ? listings.map(listing => getListingProduct(listing, affichagetype)) : [])\n","function getCookie(name) {\n const regexp = new RegExp(`(?:^${name}|;s* ${name})=(.*?)(?:;|$)`, 'g')\n const result = regexp.exec(document.cookie)\n return result === null ? null : result[1]\n}\n\nfunction setCookie(name, value, days) {\n let expires = ''\n if (days) {\n const date = new Date()\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n expires = `; expires=${date.toUTCString()}`\n }\n document.cookie = `${name}=${value || ''}${expires}; path=/`\n}\n\nexport { getCookie, setCookie }\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Icon from '@ui-library/core/Icon'\nimport ChevronRightBold from '@ui-library/icons/ChevronUpBold'\nimport CloseBold from '@ui-library/icons/CloseBold'\nimport { trackInteraction } from '../../tracking/utils'\nimport { CloseButton, CircularButtonWrapper, ChevronIcon } from './CircularButton.styled'\n\nconst propTypes = {\n close: PropTypes.func.isRequired,\n text: PropTypes.string.isRequired,\n link: PropTypes.string.isRequired,\n hide: PropTypes.bool,\n trackingType: PropTypes.string.isRequired,\n}\n\nconst defaultProps = {\n hide: false,\n}\n\nfunction CircularButton({ close, link, text, hide, trackingType }) {\n function onClose() {\n close()\n }\n\n function handleClick() {\n trackInteraction({\n int_type: trackingType,\n int_description: 'click',\n int_infos: 'homepage',\n })\n }\n\n return (\n \n handleClick()}>\n {text === '' ? 'Estimez gratuitement votre bien' : text}\n \n \n \n \n \n \n )\n}\n\nCircularButton.propTypes = propTypes\nCircularButton.defaultProps = defaultProps\n\nexport default CircularButton\n","const adConfig = [\n {\n TEXT: 'Estimez gratuitement votre bien',\n SUBTEXT: 'Vendre vite et au bon prix grâce à notre réseau',\n LINK: 'https://www.seloger.com/estimation-immobiliere.html#?m=homepage-circle-estimez',\n PERCENTAGE: 100,\n TRACKING_TYPE: 'estimation-sticker',\n },\n {\n TEXT: \"J'ai un logement à louer\",\n SUBTEXT: '30 jours de diffusion gratuite sur SeLoger',\n LINK: 'https://www.seloger.com/mettre-en-location.htm?utm_source=HP-seloger&utm_medium=version1',\n PERCENTAGE: 0,\n },\n {\n TEXT: 'Déposez votre annonce de location',\n SUBTEXT: '30 jours de diffusion gratuite sur SeLoger',\n LINK: 'https://www.seloger.com/mettre-en-location.htm?utm_source=HP-seloger&utm_medium=version2',\n PERCENTAGE: 0,\n },\n {\n TEXT: 'Propriétaire, louez votre bien',\n SUBTEXT: '30 jours de diffusion gratuite sur SeLoger',\n LINK: 'https://www.seloger.com/mettre-en-location.htm?utm_source=HP-seloger&utm_medium=version3',\n PERCENTAGE: 0,\n },\n]\n\nexport default adConfig\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { ServicesBlocksContainer, ServicesBlocksWrapper, Block } from './ServicesBlocks.styled'\nimport ServicesCard from './ServicesCard/ServicesCard'\nimport Section from '../Section/Section'\nimport text from '../../../text'\n\n// DETTE TECHNIQUE: passage en hook\n// DETTE TECHNIQUE: passage en styled components\n\nconst propTypes = {\n presentationText: PropTypes.string.isRequired,\n blocks: PropTypes.arrayOf(\n PropTypes.shape({\n header: PropTypes.string.isRequired,\n elements: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n icone: PropTypes.string.isRequired,\n link: PropTypes.string.isRequired,\n }),\n ),\n }),\n ).isRequired,\n}\n\nclass ServicesBlocks extends React.PureComponent {\n getServicesBlocks = () => {\n const { blocks } = this.props\n return blocks.map((block, index) => {\n const { elements } = block\n return (\n
\n \n
\n {block.header}\n {elements.map((element, index) => (\n \n ))}\n
\n
\n
\n )\n })\n }\n\n render() {\n return (\n
\n \n {this.getServicesBlocks()}\n \n
\n )\n }\n}\n\nServicesBlocks.propTypes = propTypes\nexport default ServicesBlocks\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { Card } from '../ServicesBlocks.styled'\n\nconst propTypes = {\n link: PropTypes.string.isRequired,\n icone: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n}\n\nconst ServicesCard = ({ link, icone, title, description, targetBlank }) => (\n \n \n {title}\n
\n {description}\n
\n
\n)\n\nServicesCard.propTypes = propTypes\n\nexport default ServicesCard\n","const ServiceblockData = {\n presentationText: 'Préparation, financement et déménagement',\n blocks: [\n {\n header: 'Je me prépare',\n elements: [\n {\n title: 'Mon Guide',\n description: 'Bien acheter',\n icone: 'fi-guide',\n link: 'https://edito.seloger.com/conseils-d-experts/acheter/guide-achat-immobilier-sommaire.html#?m=homepage-bloc-mon_guide',\n },\n {\n title: 'Mesures fiscales',\n description: 'Apprendre à les maîtriser',\n icone: 'fi-scale',\n link: 'https://edito.seloger.com/rubrique/financement/mesures-fiscales#?m=homepage-bloc-mesures_fiscales',\n },\n {\n title: 'Mon budget',\n description: 'Combien emprunter ?',\n icone: 'fi-calc',\n link: 'https://www.seloger.com/credit-immobilier/simulateur-capacite-demprunt#?m=homepage-bloc-mon_budget',\n },\n {\n title: 'Prix du mètre carré',\n description: \"Les vrais prix de l'immobilier\",\n icone: 'fi-stats-up',\n link: 'https://www.seloger.com/prix-de-l-immo/vente/pays/france.htm#?BD=Head_AC_PrixImm_8',\n },\n ],\n },\n {\n header: 'Je boucle mon financement',\n elements: [\n {\n title: 'Prêt',\n description: 'Trouver le bon crédit immobilier',\n icone: 'fi-change',\n link: 'https://www.seloger.com/credit-immobilier/mon-financement#?m=homepage-bloc-pret',\n },\n {\n title: 'Assurance Emprunteur',\n description: 'Les clés pour comprendre, avec Cardif',\n icone: 'fi-thumb-up',\n link: 'https://www.seloger.com/credit-immobilier/mon-assurance-emprunteur?m=homepage-bloc-assurance_emprunteur',\n },\n {\n title: 'Investissement',\n description: 'Simuler mon épargne',\n icone: 'fi-change',\n link: 'https://www.seloger.com/credit-immobilier/simulation-investissement?m=homepage-bloc-investissement',\n },\n {\n title: 'Rénovation énergétique',\n description: 'Simuler vos travaux et estimer les aides',\n icone: 'fi-home',\n link: 'https://seloger-simulateur.hellio.com/?utm_campaign=RI-Particuliers-SeLoger&utm_source=seloger.com&utm_medium=homepage',\n targetBlank: true,\n },\n ],\n },\n {\n header: \"C'est parti, je déménage !\",\n elements: [\n {\n title: 'Ma checklist',\n description: 'Préparer mon déménagement',\n icone: 'fi-form',\n link: 'https://edito.seloger.com/conseils-d-experts/demenager/demenagement-comment-bien-se-preparer-pour-le-jour-j-article-17005.html',\n },\n {\n title: 'Planifier',\n description: 'Déménager serein',\n icone: 'fi-lorry',\n link: '/demenagement_formulaire?utm_medium=rubrique-planifier',\n targetBlank: true,\n },\n {\n title: 'Énergie',\n description: 'Découvrez les offres ENGIE',\n icone: 'fi-flame',\n link: 'https://particuliers.engie.fr/electricite-gaz.html?utm_medium=referral&utm_source=seloger&utm_campaign=partenariat',\n targetBlank: true,\n },\n {\n title: 'Prêt travaux',\n description: 'Simuler votre projet de rénovation',\n icone: 'fi-roller',\n link: 'https://www.sofinco.fr/credit-pret/credit-travaux.htm?utm_source=seloger&utm_medium=link&utm_campaign=homepage',\n targetBlank: true,\n },\n ],\n },\n ],\n}\n\nexport default ServiceblockData\n","import React from 'react'\nimport styled from 'styled-components'\nimport Button from '@ui-library/core/Button'\nimport { connect } from 'react-redux'\nimport Section from '../../components/Section/Section'\nimport ListingCard from '../../components/ListingCard/ListingCard'\nimport BlockLink from '../../components/BlockLink/BlockLink'\nimport BlockButton from '../../components/BlockButton/BlockButton'\nimport { trackInteraction, generateTrackingUrl } from '../../tracking/utils'\nimport PlaceholderIcon from '../../assets/img/listing-placeholder.svg'\nimport ClocheIcon from '../../assets/svg/ClocheIcon.svg'\nimport text from '../../../text'\nimport { SEARCH_LISTING_HEIGHT } from '../../../constants'\nimport { getSearchesListings } from '../../store/modules/searches/selectors'\n\nconst SubTitle = styled.div`\n font-size: 18px;\n margin-bottom: 24px;\n font-weight: 800;\n`\nconst SubSectionWrapper = styled.div`\n width: 100%;\n display: flex;\n flex-direction: row;\n -webkit-box-pack: justify;\n -webkit-box-align: center;\n align-items: center;\n > div {\n margin: 0 32px;\n }\n > div:first-child {\n margin-left: 0;\n }\n > div:last-child {\n margin-right: 0;\n }\n\n margin-bottom: 25px;\n\n @media (max-width: 1024px) {\n justify-content: center;\n flex-direction: column;\n > div {\n margin-right: 0;\n margin-left: 0;\n margin-bottom: 25px;\n }\n }\n`\n\nconst SearchLstButton = styled(Button)`\n margin-left: auto;\n margin-right: auto;\n font-weight: 800;\n`\n\nfunction SubSection({ subTitle, children }) {\n return (\n <>\n {subTitle}\n {children}\n \n )\n}\n\nconst SEARCH_TRACKING_BD = 'homepage-recherches_enregistrees-annonces'\n\nfunction SearchListingContainer({ searchesListings }) {\n const urlSearchListTracker = '&m=homepage-recherches_enregistrees-voir_toutes_les_annonces'\n\n const goToSearchPage = url => {\n window.location = url\n }\n\n const goToSearchListingPage = () => {\n trackInteraction({\n int_type: 'saved-search',\n int_description: 'click',\n int_infos: 'view_searches',\n })\n window.location.assign('/mon-compte/mes-alertes')\n }\n\n const getBody = (searchId, listings, searchUrl, searchCount = 0) => {\n const count = listings.length\n if (count > 0) {\n const blockLinkTitle = count === 1 ? text.SEARCH_LISTING.GO_TO_MY_SEARCH : text.SEARCH_LISTING.SEE_ALL_SEARCHS(searchCount)\n const blockLinkHref = count === 1 ? listings[0].urlListing : searchUrl\n return (\n <>\n {listings.map(listing => {\n let { urlListing } = listing\n urlListing = generateTrackingUrl(urlListing, SEARCH_TRACKING_BD)\n return (\n \n )\n })}\n\n goToSearchPage(blockLinkHref + urlSearchListTracker)} text={blockLinkTitle} iconeUrl={PlaceholderIcon} height={SEARCH_LISTING_HEIGHT} />\n \n )\n }\n return goToSearchPage(searchUrl)} text={text.SEARCH_LISTING.NO_LISTING} iconeUrl={ClocheIcon} height={SEARCH_LISTING_HEIGHT} />\n }\n\n const getSubSection = data => {\n const { search, listings } = data\n const { searchId, title, searchUrl, nbResults } = search\n\n return {getBody(searchId, listings, searchUrl, nbResults)}\n }\n const getSection = searchs => {\n const count = searchs.length\n if (count > 0) {\n const title = text.SEARCH_LISTING.YOUR_LAST_SEARCH_TEXT(count)\n const highlight = text.SEARCH_LISTING.YOUR_LAST_SEARCH_TEXT_HIGHLIGHT(count)\n return (\n
\n {searchs.map(data => getSubSection(data))}\n goToSearchListingPage()} size=\"medium\" kind=\"secondary\" variant=\"normal\">\n {text.SEARCH_LISTING.SEE_ALL_BUTTON}\n \n
\n )\n }\n return <>\n }\n\n return <>{getSection(searchesListings)}\n}\n\nconst mapStateToProps = state => ({\n searchesListings: getSearchesListings(state),\n})\n\nexport default connect(mapStateToProps)(SearchListingContainer)\n","import React from 'react'\nimport CameraLined from '@ui-library/icons/CameraLined'\nimport { connect } from 'react-redux'\nimport text from '../../../text'\nimport { trackClickProduct } from '../../tracking/utils'\nimport CardPhotoCarousel from './CardPhotoCaroussel'\nimport {\n CardDataContainer,\n CardLink,\n CardData,\n CardPrice,\n CardType,\n CardLocation,\n ViewDate,\n Rooms,\n Surface,\n CardSurfaceInfo,\n StyledExpiredCard,\n StyledSliderPlaceholder,\n StyledPhotoCounter,\n CameraIcon,\n StyledSliderContainer,\n} from './ListingCard.styled'\nimport { getSearchesListings } from '../../store/modules/searches/selectors'\n\nconst getViewFormattedDate = viewedDate => {\n const diffInMinutes = Math.abs(new Date().getTime() - new Date(viewedDate).getTime()) / 60000\n\n if (diffInMinutes < 2) {\n return text.VIEWED_LISTINGS.LITTLE_WHILE_AGO\n }\n if (diffInMinutes < 60) {\n return text.VIEWED_LISTINGS.X_MINUTES_AGO(Math.floor(diffInMinutes))\n }\n\n const diffInHours = diffInMinutes / 60\n\n if (diffInHours >= 1 && diffInHours < 2) {\n return text.VIEWED_LISTINGS.ONE_HOUR_AGO\n }\n if (diffInHours >= 2 && diffInHours < 24) {\n return text.VIEWED_LISTINGS.X_HOURS_AGO(Math.floor(diffInHours))\n }\n\n const diffInDays = diffInHours / 24\n\n if (diffInDays >= 1 && diffInDays < 2) {\n return text.VIEWED_LISTINGS.YESTERDAY\n }\n if (diffInDays >= 2) {\n return text.VIEWED_LISTINGS.X_DAYS_AGO(Math.floor(diffInDays))\n }\n return false\n}\n\nfunction PhotoCounter({ count }) {\n return (\n \n {count}\n \n \n )\n}\n\nfunction ExpiredContent() {\n return (\n \n
{text.LISTING.EXPIRED}
\n
\n )\n}\n\nfunction SliderContainer({ isExpired, urlPhotos, propertyType }) {\n const hasPhotos = urlPhotos && urlPhotos.length > 0 && !isExpired\n return (\n \n {isExpired && }\n {hasPhotos && (\n \n \n \n \n )}\n {!hasPhotos && }\n \n )\n}\n\nfunction ListingCard(props) {\n const { listName, urlPhotos, price, propertyType, surface, location, isExpired, rooms, urlListing, viewedDate, showViewDate = true, height = '310px', searchesListings } = props\n const viewDateString = getViewFormattedDate(viewedDate)\n\n return (\n \n
\n \n trackClickProduct(props, listName, searchesListings)}>\n \n {price}\n {propertyType}\n \n {rooms && {rooms}}\n {surface && {surface}}\n \n {location}\n {showViewDate && (\n \n {text.VIEWED_LISTINGS.VIEWED} {viewDateString}\n \n )}\n \n \n
\n
\n )\n}\n\nconst mapStateToProps = state => ({\n searchesListings: getSearchesListings(state),\n})\n\nexport default connect(mapStateToProps)(ListingCard)\n","/* eslint-disable */\nimport React from 'react'\nimport Slider from '@ui-library/core/Slider'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nconst propTypes = {\n photoUrls: PropTypes.arrayOf(PropTypes.string).isRequired,\n propertyType: PropTypes.string.isRequired,\n}\nconst SingleImage = styled.img`\n display: inline-block;\n height: 100%;\n width: 100%;\n border-radius: 4px 4px 0px 0px;\n`\nfunction CardPhotoCarousel ({photoUrls, propertyType}) {\n\n const getPhotos = () => {\n return photoUrls.map(photo => (\n
\n {propertyType}\n
\n ))\n }\n const initialValues = {\n type: 'site',\n style:{\n width: '100%',\n height: '100%'\n }\n }\n const singleImage = photoUrls.length === 1\n const photos = getPhotos()\n\n return(\n singleImage ? (\n \n ) : (\n \n {photos}\n \n )\n )\n}\n\nCardPhotoCarousel.propTypes = propTypes\nexport default CardPhotoCarousel\n","module.exports = __webpack_public_path__ + \"assets/img/card-placeholder.webp\";","import React from 'react'\nimport Icon from '@ui-library/core/Icon'\nimport ChevronRightBold from '@ui-library/icons/ChevronRightBold'\nimport { colorPalette } from '@ui-library/sl'\nimport styled, { css } from 'styled-components'\n\nexport const BLOCK_LINK_TYPES = {\n HORIZONTAL: 'HORIZONTAL',\n VERTICAL: 'VERTICAL',\n}\n\nconst StyledAngleRight = styled(Icon)`\n position: absolute;\n right: 22px;\n top: 50%;\n transform: translateY(-50%);\n cursor: pointer;\n`\nconst StyledBlockLink = styled.div`\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n cursor: pointer;\n text-decoration: none;\n`\nconst StyledPlaceholderImg = styled.img`\n width: 122px;\n height: 122px;\n`\nconst StyledParagraph = styled.p`\n width: 200px;\n font-size: 18px;\n font-weight: 800;\n margin-top: 15px;\n color: ${colorPalette.mineShaft};\n text-align: center;\n`\nconst BlockLinkContainer = styled.div`\n position: relative;\n background-color: #fff;\n border-radius: 4px;\n box-shadow: 0 0 12px 0 rgba(38, 38, 38, 0.2);\n overflow: hidden;\n /*TODO: Make width dynamic */\n width: ${({ type }) => (type === BLOCK_LINK_TYPES.VERTICAL ? '296px' : '100%')};\n height: ${({ height }) => height};\n ${({ type }) =>\n type === BLOCK_LINK_TYPES.HORIZONTAL &&\n css`\n max-width: 510px;\n margin: 0 auto;\n ${StyledBlockLink} {\n flex-direction: row;\n justify-content: flex-start;\n }\n ${StyledPlaceholderImg} {\n width: 34px;\n height: 34px;\n margin-left: 18px;\n @media screen and (max-width: 849px) {\n margin-left: 16px;\n }\n }\n ${StyledParagraph} {\n width: auto;\n padding: 0;\n margin: 0 0 0 20px;\n @media screen and (max-width: 849px) {\n padding: 0;\n margin: 0 0 0 10px;\n font-size: 16px;\n }\n }\n ${StyledAngleRight} {\n font-weight: 800;\n color: rgb(38, 38, 38);\n @media screen and (max-width: 849px) {\n right: 6px;\n }\n }\n `}\n`\n\nfunction BlockLink({ text, iconeUrl, action, height = '310px', type = BLOCK_LINK_TYPES.VERTICAL }) {\n return (\n \n \n \n {text}\n \n \n \n )\n}\n\nexport default BlockLink\n","import React from 'react'\nimport Button from '@ui-library/core/Button'\nimport { colorPalette } from '@ui-library/sl'\nimport styled from 'styled-components'\n\nconst BlockButtonContainer = styled.div`\n position: relative;\n background-color: #fff;\n border-radius: 4px;\n box-shadow: 0 0 12px 0 rgba(38, 38, 38, 0.2);\n overflow: hidden;\n position: relative;\n width: 296px;\n height: ${({ height }) => height};\n`\nconst StyledPlaceholderImg = styled.img`\n width: 34px;\n height: 36px;\n`\nconst StyledBlockButton = styled.div`\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n cursor: pointer;\n text-decoration: none;\n`\nconst StyledParagraph = styled.p`\n width: 200px;\n font-size: 18px;\n font-weight: 800;\n margin-top: 15px;\n color: ${colorPalette.mineShaft};\n text-align: center;\n`\nconst Styledbutton = styled(Button)`\n width: 248px;\n`\nfunction BlockButton({ text, iconeUrl, action, height = '310px' }) {\n return (\n \n \n \n {text}\n 'clicked'} kind=\"primary\" size=\"large\" variant=\"normal\">\n Consulter\n \n \n \n )\n}\n\nexport default BlockButton\n","module.exports = __webpack_public_path__ + \"assets/img/listing-placeholder.svg\";","module.exports = __webpack_public_path__ + \"assets/img/ClocheIcon.svg\";","import React, { useState, useEffect } from 'react'\nimport axios from 'axios'\nimport EditorialStory from './EditorialStory/EditorialStory'\nimport EditorialLink from './EditorialLink/EditorialLink'\nimport { EditoWrapper, EditoMainWrapper } from './Editorial.styled'\nimport { REDIRECTION_LINKS } from '../../../constants'\nimport Section from '../Section/Section'\nimport text from '../../../text'\nimport EditoIcon from '../../assets/img/illu_Actualite.svg'\n\nconst apiURL = '/edito/articles'\n\nconst ArticleTemplate = ({ articles }) =>\n articles.map((a, index) => )\n\nfunction Editorial({ isConnected }) {\n const [articles, setArticles] = useState([])\n const [isLoaded, setLoaded] = useState(false)\n\n useEffect(\n () => {\n if (isLoaded) return\n axios\n .get(apiURL)\n .then(({ data }) => {\n setLoaded(true)\n setArticles(data)\n })\n .catch(error => {\n setLoaded(true)\n window.console.log(error)\n })\n },\n [articles],\n )\n\n const goToEdito = () => REDIRECTION_LINKS.CORONA_SPECIAL\n\n return (\n \n
\n \n \n goToEdito()} />\n \n
\n
\n )\n}\n\nexport default Editorial\n","import React, { useRef } from 'react'\nimport useIntersection from '@sl/react-intersection-hook'\nimport PropTypes from 'prop-types'\nimport { StoryContainer, StoryCat } from './EditorialStory.styled'\n\n// DETTE TECHNIQUE: passage en hook\n// DETTE TECHNIQUE: passage en styled components\n\nconst propTypes = {\n title: PropTypes.string.isRequired,\n link: PropTypes.string.isRequired,\n category: PropTypes.string.isRequired,\n preview: PropTypes.string.isRequired,\n imageMedium: PropTypes.string.isRequired,\n}\n\nconst EditorialStory = ({ title, link, category, preview, imageMedium }) => {\n const imgRef = useRef(null)\n const isImageVisible = useIntersection(imgRef, { onlyOnce: true })\n\n return (\n \n \n {preview}\n {category}\n

{title}

\n
\n
\n )\n}\n\nEditorialStory.propTypes = propTypes\n\nexport default EditorialStory\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ChevronRightBold from '@ui-library/icons/ChevronRightBold'\nimport { BlockLinkContainer, StyledAngleRight, StyledPlaceholderImg, TextWrapper } from './EditorialLink.styled'\n\nconst propTypes = {\n title: PropTypes.string.isRequired,\n link: PropTypes.string.isRequired,\n}\n\nconst EditorialLink = ({ title, link, action, iconeUrl }) => (\n \n \n \n

{title}

\n \n
\n
\n)\n\nEditorialLink.propTypes = propTypes\n\nexport default EditorialLink\n","module.exports = __webpack_public_path__ + \"assets/img/illu_Actualite.svg\";","require('whatwg-fetch')\n\nrequire('core-js/es6/promise')\n","import React from 'react'\nimport { hydrate } from 'react-dom'\n\nimport BootstrapedApp from './bootstrap'\n\nhydrate(, document.getElementById('root'))\n\nif (module.hot) {\n module.hot.accept()\n}\n\nconst linkTag = document.createElement('link')\nlinkTag.rel = 'stylesheet'\nlinkTag.href = module.hot ? '/hps/css/framework.min.css' : 'https://static-seloger.com/commoncomp/cssframework/v3.0.0-alpha.8-framework.min.css'\n\nconst styleTag = document.head.querySelector('style')\nif (styleTag) {\n document.head.querySelector('style').parentNode.insertBefore(linkTag, styleTag)\n} else {\n document.head.querySelector('style').parentNode.appendChild(linkTag)\n}\n"],"sourceRoot":""}