@nyris/nyris-webapp 0.3.2 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/build/asset-manifest.json +8 -8
  2. package/build/index.html +1 -1
  3. package/build/js/test.js +14 -20
  4. package/build/{precache-manifest.8f85a4fff2063a7498a608ec69549bb1.js → precache-manifest.bbb31f2ce7710d7eb3175b1b48241d24.js} +9 -9
  5. package/build/service-worker.js +1 -1
  6. package/build/static/js/2.4a55bc61.chunk.js +3 -0
  7. package/build/static/js/{2.efc0ab83.chunk.js.LICENSE.txt → 2.4a55bc61.chunk.js.LICENSE.txt} +0 -9
  8. package/build/static/js/2.4a55bc61.chunk.js.map +1 -0
  9. package/build/static/js/main.2660f94a.chunk.js +2 -0
  10. package/build/static/js/main.2660f94a.chunk.js.map +1 -0
  11. package/package.json +3 -3
  12. package/public/js/test.js +14 -20
  13. package/src/App.tsx +3 -7
  14. package/src/Store/Nyris.ts +7 -7
  15. package/src/Store/Search.ts +48 -74
  16. package/src/Store/Store.ts +12 -5
  17. package/src/components/CustomHits/index.tsx +57 -0
  18. package/src/components/DragDropFile.tsx +27 -23
  19. package/src/components/ExampleImages.tsx +2 -2
  20. package/src/components/Feedback.tsx +2 -2
  21. package/src/components/Footer.tsx +1 -1
  22. package/src/components/HeaderMd.tsx +4 -5
  23. package/src/index.tsx +2 -1
  24. package/src/modules/LandingPage/{indexApp.tsx → App.tsx} +52 -208
  25. package/src/modules/LandingPage/{indexAppMD.tsx → AppMD.tsx} +52 -147
  26. package/src/modules/LandingPage/index.tsx +169 -0
  27. package/src/modules/LandingPage/indexNewVersion.tsx +14 -21
  28. package/src/modules/LandingPage/propsType.ts +43 -0
  29. package/src/page/result/index.tsx +51 -106
  30. package/src/services/Feedback.ts +46 -47
  31. package/src/services/image.ts +28 -98
  32. package/src/services/session.ts +13 -16
  33. package/src/services/types.ts +2 -48
  34. package/src/types.ts +12 -8
  35. package/build/static/js/2.efc0ab83.chunk.js +0 -3
  36. package/build/static/js/2.efc0ab83.chunk.js.map +0 -1
  37. package/build/static/js/main.3bfed050.chunk.js +0 -2
  38. package/build/static/js/main.3bfed050.chunk.js.map +0 -1
  39. package/src/App.test.tsx +0 -49
  40. package/src/Store/common.d.ts +0 -10
  41. package/src/Store/epics/feedback.ts +0 -59
  42. package/src/Store/epics/types.ts +0 -12
  43. package/src/components/preview/preview.tsx +0 -433
  44. package/src/services/findByImage.ts +0 -24
  45. package/src/services/findRegionsCustom.ts +0 -212
  46. package/src/services/nyris.ts +0 -123
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../nyris-react-components/webpack/bootstrap","../webpack:/nyris-react-components/external \"react\"","../webpack:/nyris-react-components/external \"@nyris/nyris-api\"","../nyris-react-components/src/index.tsx","../nyris-react-components/src/components/Preview/Preview.tsx","../webpack:/nyris-react-components/external \"react-konva\"","../webpack:/nyris-react-components/external \"konva\"","../webpack:/nyris-react-components/external \"react-move\"","../nyris-react-components/src/components/Capture/Capture.tsx","../nyris-react-components/src/components/Capture/Capture.css?1149","../nyris-react-components/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","../nyris-react-components/src/components/Capture/Capture.css","../nyris-react-components/node_modules/css-loader/dist/runtime/api.js","../nyris-react-components/src/components/Capture/images/capture.svg","../nyris-react-components/src/components/Capture/images/arrow_back.svg","../nyris-react-components/src/utils.ts","common/assets/icons/support.svg","common/assets/icons/icon_like.svg","common/assets/icons/icon_dislike.svg","common/assets/icons/Fill.svg","common/assets/icons/book_mark.svg","common/assets/icons/icon_modal_image.svg","common/assets/icons/view_off.png","../../utils.ts","common/assets/icons/reload_icon.svg","common/assets/icons/save_search.svg","common/assets/icons/admin.svg","common/assets/icons/nyris_logo.svg","common/assets/icons/translate_icon.svg","common/assets/icons/icon_search_image.svg","common/assets/icons/Icon_whatsapp.png","common/assets/icons/icon_email.png","common/assets/icons/Icon_wechat.png","common/assets/images/image_test.png","common/assets/images/Rectangle.png","../../index.ts","serviceWorker.ts","defaults.ts","page/Auth/login.tsx","components/Header.tsx","Store/Auth.ts","utils.ts","Store/Search.ts","Store/Nyris.ts","Store/Store.ts","services/Feedback.ts","components/Feedback.tsx","components/Footer.tsx","components/HeaderMd.tsx","components/FooterMD.tsx","components/HeaderNewVersion.tsx","components/FooterNewVersion.tsx","components/Layout.tsx","services/image.ts","modules/LandingPage/AppMD.tsx","components/Result.tsx","components/ExampleImages.tsx","components/CategoryFilter.tsx","components/PredictedCategories.tsx","components/Codes.tsx","modules/LandingPage/App.tsx","modules/LandingPage/index.tsx","components/DragDropFile.tsx","components/input/inputSearch.tsx","services/session.ts","modules/LandingPage/indexNewVersion.tsx","App.tsx","components/results/ItemResult.tsx","components/FooterResult.tsx","components/modal/DefaultModal.tsx","components/carousel/DefaultCarousel.tsx","components/DetailItem.tsx","components/LoadingScreen/index.tsx","page/result/index.tsx","components/search/ListSearch.tsx","page/History/index.tsx","components/Saved/AllItem.tsx","components/Saved/Category.tsx","page/Saved/MockData.ts","page/Saved/index.tsx","page/Profile/index.tsx","page/Support/index.tsx","Router.tsx","index.tsx"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","default","getCursor","state","dotHover","tlHover","trHover","blHover","brHover","rectHover","selection","image","maxWidth","maxHeight","onSelectionChange","regions","dotColor","w","h","width","height","x1","x2","y1","y2","minX","minY","selectionRef","useRef","replaceState","setState","assign","handleDragMove","elem","evt","target","Stage","x","y","newRect","newX","newY","elemWidth","elemHeight","newState","notifySelection","useEffect","current","a","Animation","frame","angleDiff","time","dashOffset","getLayer","start","stop","handleDragMoveRect","handleDragMoveTl","handleDragMoveTr","handleDragMoveBl","handleDragMoveBr","dots","map","region","style","cursor","margin","Layer","Image","Rect","stroke","strokeWidth","draggable","onDragMove","dragBoundFunc","Math","max","min","onMouseOver","onMouseOut","opacity","dash","ref","fill","offsetX","offsetY","NodeGroup","data","keyAccessor","enter","timing","delay","duration","ds","Circle","onClick","normalizedRect","onTap","radius","position","onCaptureComplete","onCaptureCanceled","useAppText","video","u","stream","setStream","navigator","mediaDevices","getUserMedia","facingMode","then","vid","srcObject","catch","reason","alert","getVideoTracks","getAudioTracks","className","autoPlay","playsInline","type","id","accept","capture","onChange","e","fileInput","files","urlOrBlobToCanvas","file","htmlFor","src","alt","elementToCanvas","api","content","locals","memo","getTarget","styleTarget","document","querySelector","window","HTMLIFrameElement","contentDocument","head","stylesInDom","getIndexByIdentifier","identifier","result","length","modulesToDom","list","options","idCountMap","identifiers","item","base","count","concat","index","obj","css","media","sourceMap","references","updater","push","addStyle","insertStyleElement","createElement","attributes","nonce","keys","forEach","setAttribute","insert","Error","appendChild","textStore","replaceText","replacement","filter","Boolean","join","applyToSingletonTag","remove","styleSheet","cssText","cssNode","createTextNode","childNodes","removeChild","insertBefore","applyToTag","removeAttribute","btoa","unescape","encodeURIComponent","JSON","stringify","firstChild","singleton","singletonCounter","update","styleIndex","parentNode","newObj","all","atob","lastIdentifiers","newList","toString","newLastIdentifiers","_i","_index","splice","___CSS_LOADER_API_IMPORT___","useSourceMap","this","base64","cssMapping","sourceMapping","sourceURLs","sources","source","sourceRoot","mediaQuery","dedupe","alreadyImportedModules","_extends","arguments","apply","_ref","_ref2","xlinkHref","transform","_ref3","fillOpacity","SvgCapture","props","SvgArrowBack","makeFileHandler","fh","changeEvent","dragEvent","dataTransfer","apiKey","settings","imageMatchingUrl","cadMatchingUrl","imageMatchingUrlBySku","imageMatchingSubmitManualUrl","feedbackUrl","regionProposalUrl","xOptions","entries","categoryPredictionResponse","responseData","location","hostname","match","defaultMdSettings","appBarLogoUrl","appBarCustomBackgroundColor","appBarCustomTextColor","appBarTitle","primaryColor","secondaryColor","resultFirstRowProperty","resultSecondRowProperty","resultLinkText","customFontFamily","Login","HeaderComponent","padding","role","href","rel","authSlice","createSlice","initialState","accessToken","reducers","login","logout","jscookie","actions","getUrlParam","results","RegExp","exec","console","log","decodeURIComponent","undefined","selectedRegion","requestImage","fetchingResults","fetchingRegions","filterOptions","categoryPredictions","codes","errorMessage","valueTextSearch","resultSearchText","filters","configureFilter","loadingSearchAlgolia","searchSlice","setSearchResults","payload","requestId","sessionId","setRegions","setSelectedRegion","setRequestImage","canvas","random","selectionChanged","loadFileSelectRegion","loadingActionResults","loadingActionRegions","searchFileImageNonRegion","changeValueTextSearch","updateResults","reset","setUpdateSession","updateResultChangePosition","setError","nyrisSlice","showPart","feedbackState","showStart","showCamera","showResults","showFeedback","hideFeedback","feedbackSubmitPositive","feedbackNegative","normalizedSettings","exampleImages","preview","jpegQuality","baseUrl","instantRedirectPatterns","themePage","active","mdSettings","materialDesign","combineReducers","auth","Auth","search","Search","nyris","Nyris","store","configureStore","reducer","devTools","process","useAppDispatch","useDispatch","useAppSelector","useSelector","feedbackSuccessEpic","success","sendFeedbackByApi","event","feedbackClickEpic","positions","feedbackTextSearchEpic","query","page","productIds","textSearchEvent","product_ids","feedbackRegionEpic","rect","NyrisAPI","sendFeedback","res","dataByApi","Feedback","onClose","inner","dispatch","onPositiveFeedback","show","leave","FooterComponent","HeaderMdComponent","AppBar","backgroundColor","Container","flexDirection","display","minHeight","Toolbar","component","Typography","color","useStyles","makeStyles","theme","footer","palette","background","paper","spacing","Copyright","variant","align","Link","FooterMD","searchState","classes","textAlign","fontSize","paddingTop","HeaderNewVersion","handleCheckMatchLink","url","pathname","Box","to","lineHeight","LogoNyris","Grid","container","activeClassName","isActive","IconReLoad","IconSave","IconSupport","IconAdmin","FooterNewVersion","Layout","HeaderApp","FooterApp","children","classNameBoxVersion","defaultRect","createImage","fileOrUrl","HTMLCanvasElement","findRegions","nyrisApi","selectFirstCenteredRegion","isEqual","findByImage","cropRect","findByCadFile","findByCad","icon","marginRight","heroContent","transition","overflow","heroContentClosed","heroButtons","marginTop","cardGrid","paddingBottom","cardGridCollapsed","card","cardMedia","backgroundSize","cardContent","flexGrow","withElipsis","textOverflow","whiteSpace","loading","fabContainer","bottom","fab","marginLeft","action","LandingPageAppMD","handlers","acceptTypes","previewImage","previewSelection","onLinkClick","onFileDropped","onSelectFile","onCameraClick","onShowStart","useDropzone","onDrop","fs","getRootProps","getInputProps","isDragActive","Fragment","_","isEmpty","resultLinkIcon","CssBaseline","classNames","Hidden","mdUp","PhotoCamera","Button","smDown","borderStyle","borderWidth","borderColor","borderRadius","stopPropagation","Card","marginBottom","raised","CircularProgress","sku","translateX","rs","xs","sm","md","CardMedia","img","noImageUrl","title","CardContent","gutterBottom","CardActions","size","onAuxClick","Icon","Fab","aria-label","ArrowBack","Result","template","onImageClick","preventDefault","resultInner","backgroundImage","paddingLeft","renderSnr","text","renderSnrMultilink","vi","toFixed","renderPrice","renderDefault","ExampleImages","images","onExampleImageClicked","CategoryFilter","cats","PredictedCategories","cs","split","slice","score","Codes","Alert","elevation","LandingPageApp","onExampleImageClick","useState","toastOpen","setToastOpen","halfOfTheScreenHeight","floor","innerHeight","maxPreviewHeight","hidden","fileIsHover","clear","resultsActive","body","clientWidth","resultTemplate","Snackbar","open","autoHideDuration","severity","defaultSelection","setSelection","cadSearch","cadExtensions","startSearch","File","isCadFile","foundRegions","suggestedRegion","searchRegion","debouncedSetRectCoords","useCallback","debounce","warn","onCloseFeedback","f","_position","onNegativeFeedback","scrollTo","top","left","behavior","AppMD","DragDropFile","history","useHistory","onChangeLoading","isLoading","isLoadingLoadFile","setLoadingLoadFile","getUrlToCanvasFile","placeholder","IconSearch","zIndex","alignItems","CustomSearchBox","connectSearchBox","currentRefinement","refine","isSearchStalled","focusInp","setShowBtnClear","valueInput","setValueInput","focus","debounceSearch","nextValue","noValidate","border","currentTarget","httpClient","axios","createSessionByApi","headers","request","method","response","session","AppNewVersion","searchStateInput","setSearchStateInput","setLoading","algolia","appId","indexName","searchClient","algoliasearch","initIndex","createSession","CustomInfiniteHits","connectInfiniteHits","hits","nonEmptyFilter","filterSkus","reverse","filtersString","InstantSearch","onSearchStateChange","TranslateIcon","Configure","App","SelectedApp","searchSuite","ItemResult","dataItem","handlerToggleModal","handlerToggleModalShare","isHover","onSearchImage","handlerFeedback","main_image_link","IconModalImage","justifyContent","IconBookmark","IconLike","IconDisLike","IconShare","FooterResult","borderRight","minWidth","DefaultModal","openModal","handleClose","Modal","DefaultCarousel","imgItem","showThumbs","infiniteLoop","showStatus","renderArrowNext","onClickHandler","hasPrev","label","renderArrowPrev","DetailItem","handlerCloseModal","onHandlerModalShare","dataImageCarousel","setDataImageCarouSel","checkDataItemResult","valueKey","newObject","includes","IconPicture","LoadingScreenCustom","connectStateResults","searchResults","searchingForFacetValues","searching","ResultComponent","stateGlobal","showColLeft","setToggleShowColLeft","showImageCanvas","setShowImageCanvas","isOpenModalImage","setOpenModalImage","numberResult","setNumberResult","isOpenModalShare","setOpenModalShare","dataResult","setDataResult","dataImageModal","setDataImageModal","handlerRectCoords","findItemsInSelection","searchTextByApiAndFilter","hit","sendFeedBackAction","setTimeout","Hits","hitComponent","indexItem","__position","Pagination","onPrevItem","onNextItem","Paper","InputBase","IconButton","mt","IconEmail","IconWhatsApp","IconWeChat","handleCellClick","param","colIndex","handleRowClick","columns","field","headerName","renderHeader","params","renderCell","cellValues","row","order","device","sortable","rows","ViewOff","more","ImageTest","ListSearch","checkboxSelection","onCellClick","onRowClick","disableSelectionOnClick","hideFooter","disableColumnMenu","autoHeight","components","ColumnSortedAscendingIcon","ColumnSortedDescendingIcon","SearchHistory","AllItem","CategoryItemSaved","av","mid","mer","desc","var","ifid","cc","ve","collections","Saved","getCategory","useLocation","React","useMemo","URLSearchParams","useQuery","useRouteMatch","nameCategory","setNameCategory","collectionParams","mr","Category","Profile","FormControlLabel","labelPlacement","control","BgColor","SupportPage","imageUpload","setImageUpload","mb","multiple","newValue","values","val","urlImage","URL","createObjectURL","flexWrap","TextareaAutosize","minRows","PrivateRoute","Component","authed","rest","render","Router","exact","strict","path","host","createTheme","typography","fontFamily","primary","main","secondary","ReactDOM","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"2IACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,KACAH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,KAGAF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,cAAkBC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,YAQhDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,cAAkBK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,G,gBClFrDhC,EAAOD,QAAUkC,EAAQ,I,cCAzBjC,EAAOD,QAAUkC,EAAQ,K,8ECAzB,WAAQ,YAAAC,QACR,WAAQ,YAAAA,Q,6DAER,Q,+iBCHA,cACA,OACA,OACA,EAAAjC,EAAA,MACA,OAsCMkC,EAAY,SAACC,GACf,OAAIA,EAAMC,SACC,UAEPD,EAAME,QACC,YAEPF,EAAMG,QACC,YAEPH,EAAMI,QACC,YAEPJ,EAAMK,QACC,YAEPL,EAAMM,UACC,OAEJ,WAsOX,UAnLgB,SAAC,G,IACIC,cAAWC,UAAOC,aAAUC,cAC5BC,sBAAmBC,YAASC,aAEzC,kDAAC,IAAAC,EAAU,IAAAC,EACT,EAhBV,SAA8BC,EAAeC,EAAgB,GACzD,MAAO,CACHC,GAFsD,EAAAA,GAE/CF,EACPG,GAH0D,EAAAA,GAGnDH,EACPI,GAJ8D,EAAAA,GAIvDH,EACPI,GALkE,EAAAA,GAK3DJ,GALf,CAgBU,OAACC,OAAIE,OAAID,OAAIE,OACf,YAACC,OAAMC,OAyCLC,EAAe,EAAAC,OAAmB,MAClC,c,uEAACzB,OAAO0B,OASRC,EAAW,SAAC/B,GACd,IAAItB,EAAI,GACRC,OAAOqD,OAAOtD,EAAG0B,EAAOJ,GACxB8B,EAAapD,IAKXuD,EAAiB,SAACC,EAAmBC,GACvC,KAAIA,EAAIC,kBAAkB,UAAMC,OAAhC,CAII,qCAAC,IAAAC,EAAS,IAAAC,EACV,qBAAC,IAAAnB,MAAkB,IAAAC,OACjBmB,EAxHM,SAAC,EAA8BN,EAAmBO,EAAcC,EAAcC,EAAmBC,G,IAA/FtB,OAAIC,OAAIC,OAAIC,OAC9B,OAAQS,GACJ,IAAK,OACD,MAAO,CACHZ,GAAImB,EACJjB,GAAIkB,EACJnB,GAAIkB,EAAKE,EACTlB,GAAIiB,EAAKE,GAEjB,IAAK,KACD,MAAO,CACHtB,GAAImB,EACJjB,GAAIkB,EACJnB,GAAE,EAAEE,GAAE,GAEd,IAAK,KACD,MAAO,CACHF,GAAIkB,EACJjB,GAAIkB,EACJpB,GAAE,EAAEG,GAAE,GAEd,IAAK,KACD,MAAO,CACHH,GAAImB,EACJhB,GAAIiB,EACJnB,GAAE,EAAEC,GAAE,GAEd,IAAK,KACD,MAAO,CACHD,GAAIkB,EACJhB,GAAIiB,EACJpB,GAAE,EAAEE,GAAE,IA/BF,CAwHgB,CAACF,GAAE,EAAEC,GAAE,EAAEC,GAAE,EAAEC,GAAE,GAAGS,EAAMO,EAAMC,EAAMC,EAAWC,GACvEC,EAAW,CACXvB,GAAIkB,EAAQlB,GAAGF,EACfG,GAAIiB,EAAQjB,GAAGH,EACfI,GAAIgB,EAAQhB,GAAGH,EACfI,GAAIe,EAAQf,GAAGJ,GAEnByB,EAAgBD,KAIpB,EAAAE,WAAU,WAEN,GAAKnB,EAAaoB,QAAlB,CACA,IAAIC,EAAI,IAAI,UAAMC,WAAU,SAACC,GACzB,GAAKA,GAGAvB,EAAaoB,QAAlB,CACA,IAAII,EAPI,GAOSD,EAAME,KAAgB,IACvCzB,EAAaoB,QAAQM,YAAYF,MAClCxB,EAAaoB,QAAQO,YAGxB,OAFAN,EAAEO,QAEK,WACHP,GAAKA,EAAEQ,WAEZ,CAAC7B,IAGJ,IAAM8B,EAAqBzB,EAAexC,KAAK,KAAM,QAC/CkE,EAAmB1B,EAAexC,KAAK,KAAM,MAC7CmE,EAAmB3B,EAAexC,KAAK,KAAM,MAC7CoE,EAAmB5B,EAAexC,KAAK,KAAM,MAC7CqE,EAAmB7B,EAAexC,KAAK,KAAM,MAE7CqD,EAAkB,SAAC/D,GACjBgC,GACAA,EAAkBhC,IAK1B,IAAK6B,EACD,OAAO,KAGX,IAAMmD,EAAO/C,EAAQgD,KAAI,SAACC,EAAQhG,GAC1B,uBAACqD,OAAIC,OAAIC,OAAIC,OACba,EAAIlB,IAASG,EAAGD,GAAI,EAAIA,GACxBiB,EAAIlB,IAAUI,EAAGD,GAAI,EAAGA,GAC5B,MAAO,CACHyC,OAAM,EACNzE,IAAQ8C,EAAC,IAAIC,EACbD,EAAC,EACDC,EAAC,MAUT,OACI,wBAAC,EAAAF,MAAK,CAACjB,MAAOA,EAAOC,OAAQA,EAAQ6C,MAAO,CAACC,OAAQhE,EAAUC,GAAQgB,MAAOA,EAAOC,OAAQA,EAAQ+C,OAAQ,SACzG,wBAAC,EAAAC,MAAK,CAAC7E,IAAI,OACP,wBAAC,EAAA8E,MAAK,CAAC1D,MAAOA,EAAOQ,MAAOA,EAAOC,OAAQA,KAE/C,wBAAC,EAAAgD,MAAK,CAAC7E,IAAI,aAEP,wBAAC,EAAA+E,KAAI,CAACC,OAAO,QAAQC,YAAa,EAAGnC,EAAGhB,EAAIiB,EAAGf,EAAIJ,MAAOG,EAAGD,EAAID,OAAQI,EAAGD,IAC5E,wBAAC,EAAA+C,KAAI,CAACC,OAAO,QAAQE,aAAiBC,WAAYjB,EAAoBkB,cA3GtD,SAAC,G,IAACtC,MAAGC,MACzBI,EAAYpB,EAAGD,EACfsB,EAAanB,EAAGD,EACpB,MAAO,CACHc,EAAGuC,KAAKC,IAAID,KAAKE,IAAIzC,EAAGlB,EAAMuB,GAAY,GAC1CJ,EAAGsC,KAAKC,IAAID,KAAKE,IAAIxC,EAAGlB,EAAOuB,GAAa,KAuGlCoC,YAAa,WAAM,SAAS,CAACtE,gBAC7BuE,WAAY,WAAM,SAAS,CAACvE,gBAC5BwE,QAAS,GAAKT,YAAa,EAAGnC,EAAGhB,EAAIiB,EAAGf,EAAIJ,MAAOG,EAAGD,EAAID,OAAQI,EAAGD,EAAI2D,KAAM,CAAC,GAAI,IAAKC,IAAKxD,IAEpG,wBAAC,EAAA2C,KAAI,CAACc,KAAK,QAAQX,aAAiBC,WAAYhB,EAAkBiB,cA9IpD,SAAC,G,IAACtC,MAAGC,MAC3B,MAAO,CACHD,EAAGuC,KAAKC,IAAID,KAAKE,IAAIzC,EAAGf,EAAGG,GAAO,GAClCa,EAAGsC,KAAKC,IAAID,KAAKE,IAAIxC,EAAGd,EAAGE,GAAO,KA4IxBqD,YAAa,WAAM,SAAS,CAAC1E,cAAiB2E,WAAY,WAAM,SAAS,CAAC3E,cAAkB4E,QAAS9E,EAAME,QAlBvG,GADJ,GAmBqJc,MApBxJ,GAoByKC,OApBzK,GAoB2LiB,EAAGhB,EAAIiB,EAAGf,IACxM,wBAAC,EAAA+C,KAAI,CAACc,KAAK,QAAQX,aAAiBC,WAAYf,EAAkBgB,cAxIpD,SAAC,G,IAACtC,MAAGC,MAC3B,MAAO,CACHD,EAAGuC,KAAKE,IAAIF,KAAKC,IAAIxC,EAAGhB,EAAGI,GAAON,GAClCmB,EAAGsC,KAAKC,IAAID,KAAKE,IAAIxC,EAAGd,EAAGE,GAAO,KAsIxBqD,YAAa,WAAM,SAAS,CAACzE,cAAiB0E,WAAY,WAAM,SAAS,CAAC1E,cAAkB2E,QAAS9E,EAAMG,QApBvG,GADJ,GAqBqJa,MAtBxJ,GAsByKC,OAtBzK,GAsB2LiB,EAAGf,EAAIgB,EAAGf,EAAI8D,QAtBzM,KAuBH,wBAAC,EAAAf,KAAI,CAACc,KAAK,QAAQX,aAAiBC,WAAYd,EAAkBe,cAlIpD,SAAC,G,IAACtC,MAAGC,MAC3B,MAAO,CACHD,EAAGuC,KAAKC,IAAID,KAAKE,IAAIzC,EAAGf,EAAGG,GAAO,GAClCa,EAAGsC,KAAKE,IAAIF,KAAKC,IAAIvC,EAAGf,EAAGG,GAAON,KAgIxB2D,YAAa,WAAM,SAAS,CAACxE,cAAiByE,WAAY,WAAM,SAAS,CAACzE,cAAkB0E,QAAS9E,EAAMI,QAtBvG,GADJ,GAuBqJY,MAxBxJ,GAwByKC,OAxBzK,GAwB2LiB,EAAGhB,EAAIiB,EAAGd,EAAI8D,QAxBzM,KAyBH,wBAAC,EAAAhB,KAAI,CAACc,KAAK,QAAQX,aAAiBC,WAAYb,EAAkBc,cA7HpD,SAAC,G,IAACtC,MAAGC,MAC3B,MAAO,CACHD,EAAGuC,KAAKE,IAAIF,KAAKC,IAAIxC,EAAGhB,EAAGI,GAAON,GAClCmB,EAAGsC,KAAKE,IAAIF,KAAKC,IAAIvC,EAAGf,EAAGG,GAAON,KA2HxB2D,YAAa,WAAM,SAAS,CAACvE,cAAiBwE,WAAY,WAAM,SAAS,CAACxE,cAAkByE,QAAS9E,EAAMK,QAxBvG,GADJ,GAyBqJW,MA1BxJ,GA0ByKC,OA1BzK,GA0B2LiB,EAAGf,EAAIgB,EAAGd,EAAI8D,QA1BzM,GA0B4ND,QA1B5N,KA4BH,wBAAC,EAAAf,KAAI,CAACc,KAAK,QAAQH,QAzBb,GAyBmC5C,EAAG,EAAGC,EAAG,EAAGnB,MAAOA,EAAOC,OAAQG,IAC3E,wBAAC,EAAA+C,KAAI,CAACc,KAAK,QAAQH,QA1Bb,GA0BmC5C,EAAG,EAAGC,EAAGd,EAAIL,MAAOA,EAAOC,OAAQA,EAAOI,IACnF,wBAAC,EAAA8C,KAAI,CAACc,KAAK,QAAQH,QA3Bb,GA2BmC5C,EAAG,EAAGC,EAAGf,EAAIJ,MAAOE,EAAID,OAAQI,EAAGD,IAC5E,wBAAC,EAAA+C,KAAI,CAACc,KAAK,QAAQH,QA5Bb,GA4BmC5C,EAAGf,EAAIgB,EAAGf,EAAIJ,MAAOA,EAAQG,EAAIF,OAAQI,EAAGD,KAEzF,wBAAC,EAAAgE,UAAS,CAACC,KAAM1B,EACN2B,YAAa,YAAK,SAAElG,KACpBgE,MAAO,SAACjF,EAAGN,GAAM,OAAEiH,QAAS,EAAG5C,GAAI,IAAKC,EAAGhE,EAAEgE,IAC7CoD,MAAO,SAACpH,EAAGN,GAAM,OAAEiH,QAAS,CAAC,GAAI5C,EAAG,CAAC/D,EAAE+D,GAAIC,EAAGhE,EAAEgE,EAAGqD,OAAQ,CAACC,MAAS,IAAF5H,EAAO6H,SAAU,SAC1F,YAAM,+BAAC,EAAAzB,MAAK,CAAC7E,IAAI,QAAQuG,EAAG/B,KAAI,SAAC,G,IAACxE,QAAKiG,SAAM,IAAArF,MAC1C,+BAAC,EAAA4F,OAAM,GAACC,QAAS,WAAM,SAAgBR,EAAKxB,OAAOiC,iBAC3CC,MAAO,WAAM,SAAgBV,EAAKxB,OAAOiC,iBACzClB,YAAa,WAAM,SAAS,CAAC3E,eAC7B4E,WAAY,WAAM,SAAS,CAAC5E,eAC5Bb,IAAKA,EAAK4G,OAAQ,GAAOC,EAAQ,CAAE7B,OAAQvD,EAAUoE,KAAK,QAAQZ,YAAa,e,cC7R3GzG,EAAOD,QAAUkC,EAAQ,M,cCAzBjC,EAAOD,QAAUkC,EAAQ,M,cCAzBjC,EAAOD,QAAUkC,EAAQ,M,ssDCAzB,MAAAhC,EAAA,MACA,KACA,WACA,WACA,WAqFA,UA5EgB,SAAC,G,IAACqI,sBAAmBC,sBAAmBC,eAC9CC,EAAQC,EAAA7E,OAAyB,MACjC,eAAC8E,OAAQC,OAyDf,OAxCAF,EAAA3D,WAAU,WACN8D,UAAUC,aAAaC,aAAa,CAChCN,MAAO,CACHO,WAAY,cACZ5F,MAAO,OAGZ6F,MAAK,YACJ,IAAIC,EAAMT,EAAMzD,QACZkE,IACAA,EAAIC,UAAYR,EAChBC,EAAUD,OAEfS,OAAM,YACL,OAAQC,EAAO7I,MACX,IAAK,gBACD8I,MAAM,8CACN,MACJ,IAAK,kBACDA,MAAM,8JACN,MACJ,QACIA,MAAM,gEAAgED,EAAM,WAIzF,CAACZ,IAEJC,EAAA3D,WAAU,WAAM,kBACP4D,IAGDA,EAAOY,gBAAkBZ,EAAOa,gBAClCb,EAAOY,iBAAiBvD,KAAI,YAAS,SAAMP,UAC3CkD,EAAOa,iBAAiBxD,KAAI,YAAS,SAAMP,WAEzCkD,EAAwClD,WAE7C,CAACkD,IAGA,+BAAKc,UAAU,2BACX,iCAAOC,YAASC,eAAYvC,IAAKqB,EAAOgB,UAAU,wBAClD,iCAAOG,KAAK,OAAOpJ,KAAK,OAAOqJ,GAAG,eAAeJ,UAAU,0BAA0BK,OAAO,UACrFC,QAAQ,cAAcC,SApDd,SAAOC,GAAc,0C,iEACpCC,EAAYD,EAAE7F,SACD8F,EAAUC,MACZ,GAAM,EAAAC,kBAAkBF,EAAUC,MAAM,KADnD,M,OACIE,EAAOpF,EAAA,OACXqD,EAAkB+B,G,qCAiDlB,iCAAOZ,UAAU,2BAA2Ba,QAAQ,gBAAgB9B,GACpE,kCAAQiB,UAAU,wBAAwBxB,QAASM,GAAmB,+BAAKgC,IAAK,UACnBC,IAAI,OACJpH,MAAM,QACnE,kCAAQqG,UAAU,0BAA0BxB,QAhElC,WACd,GAAIQ,EAAMzD,QAAS,CACf,IAAIG,EAAQ,EAAAsF,gBAAgBhC,EAAMzD,SAClCsD,EAAkBnD,MA6D8C,+BAAKoF,IAAK,UACXC,IAAI,gB,gBClF/E,IAAIE,EAAM,EAAQ,GACFC,EAAU,EAAQ,IAIC,iBAFvBA,EAAUA,EAAQtJ,WAAasJ,EAAQzI,QAAUyI,KAG/CA,EAAU,CAAC,CAAC3K,EAAOC,EAAI0K,EAAS,MAQjCD,EAAIC,EALH,CAEd,OAAiB,OACjB,eAMA3K,EAAOD,QAAU4K,EAAQC,QAAU,I,6BChBnC,IACMC,EAeFC,EAAY,WACd,IAAID,EAAO,GACX,OAAO,SAAkBzG,GACvB,YAAWyG,EAAKzG,GAAyB,CACvC,IAAI2G,EAAcC,SAASC,cAAc7G,GAEzC,GAAI8G,OAAOC,mBAAqBJ,aAAuBG,OAAOC,kBAC5D,IAGEJ,EAAcA,EAAYK,gBAAgBC,KAC1C,MAAOpB,GAEPc,EAAc,KAIlBF,EAAKzG,GAAU2G,EAGjB,OAAOF,EAAKzG,IApBA,GAwBZkH,EAAc,GAElB,SAASC,EAAqBC,GAG5B,IAFA,IAAIC,GAAU,EAELxL,EAAI,EAAGA,EAAIqL,EAAYI,OAAQzL,IACtC,GAAIqL,EAAYrL,GAAGuL,aAAeA,EAAY,CAC5CC,EAASxL,EACT,MAIJ,OAAOwL,EAGT,SAASE,EAAaC,EAAMC,GAI1B,IAHA,IAAIC,EAAa,GACbC,EAAc,GAET9L,EAAI,EAAGA,EAAI2L,EAAKF,OAAQzL,IAAK,CACpC,IAAI+L,EAAOJ,EAAK3L,GACZ4J,EAAKgC,EAAQI,KAAOD,EAAK,GAAKH,EAAQI,KAAOD,EAAK,GAClDE,EAAQJ,EAAWjC,IAAO,EAC1B2B,EAAa,GAAGW,OAAOtC,EAAI,KAAKsC,OAAOD,GAC3CJ,EAAWjC,GAAMqC,EAAQ,EACzB,IAAIE,EAAQb,EAAqBC,GAC7Ba,EAAM,CACRC,IAAKN,EAAK,GACVO,MAAOP,EAAK,GACZQ,UAAWR,EAAK,KAGH,IAAXI,GACFd,EAAYc,GAAOK,aACnBnB,EAAYc,GAAOM,QAAQL,IAE3Bf,EAAYqB,KAAK,CACfnB,WAAYA,EACZkB,QAASE,EAASP,EAAKR,GACvBY,WAAY,IAIhBV,EAAYY,KAAKnB,GAGnB,OAAOO,EAGT,SAASc,EAAmBhB,GAC1B,IAAI3F,EAAQ8E,SAAS8B,cAAc,SAC/BC,EAAalB,EAAQkB,YAAc,GAEvC,YAAWA,EAAWC,MAAuB,CAC3C,IAAIA,EAAmD,KAEnDA,IACFD,EAAWC,MAAQA,GAQvB,GAJArM,OAAOsM,KAAKF,GAAYG,SAAQ,SAAU1L,GACxC0E,EAAMiH,aAAa3L,EAAKuL,EAAWvL,OAGP,mBAAnBqK,EAAQuB,OACjBvB,EAAQuB,OAAOlH,OACV,CACL,IAAI9B,EAAS0G,EAAUe,EAAQuB,QAAU,QAEzC,IAAKhJ,EACH,MAAM,IAAIiJ,MAAM,2GAGlBjJ,EAAOkJ,YAAYpH,GAGrB,OAAOA,EAcT,IACMqH,EADFC,GACED,EAAY,GACT,SAAiBnB,EAAOqB,GAE7B,OADAF,EAAUnB,GAASqB,EACZF,EAAUG,OAAOC,SAASC,KAAK,QAI1C,SAASC,EAAoB3H,EAAOkG,EAAO0B,EAAQzB,GACjD,IAAIC,EAAMwB,EAAS,GAAKzB,EAAIE,MAAQ,UAAUJ,OAAOE,EAAIE,MAAO,MAAMJ,OAAOE,EAAIC,IAAK,KAAOD,EAAIC,IAIjG,GAAIpG,EAAM6H,WACR7H,EAAM6H,WAAWC,QAAUR,EAAYpB,EAAOE,OACzC,CACL,IAAI2B,EAAUjD,SAASkD,eAAe5B,GAClC6B,EAAajI,EAAMiI,WAEnBA,EAAW/B,IACblG,EAAMkI,YAAYD,EAAW/B,IAG3B+B,EAAWzC,OACbxF,EAAMmI,aAAaJ,EAASE,EAAW/B,IAEvClG,EAAMoH,YAAYW,IAKxB,SAASK,EAAWpI,EAAO2F,EAASQ,GAClC,IAAIC,EAAMD,EAAIC,IACVC,EAAQF,EAAIE,MACZC,EAAYH,EAAIG,UAepB,GAbID,EACFrG,EAAMiH,aAAa,QAASZ,GAE5BrG,EAAMqI,gBAAgB,SAGpB/B,GAAagC,OACflC,GAAO,uDAAuDH,OAAOqC,KAAKC,SAASC,mBAAmBC,KAAKC,UAAUpC,MAAe,QAMlItG,EAAM6H,WACR7H,EAAM6H,WAAWC,QAAU1B,MACtB,CACL,KAAOpG,EAAM2I,YACX3I,EAAMkI,YAAYlI,EAAM2I,YAG1B3I,EAAMoH,YAAYtC,SAASkD,eAAe5B,KAI9C,IAAIwC,EAAY,KACZC,EAAmB,EAEvB,SAASnC,EAASP,EAAKR,GACrB,IAAI3F,EACA8I,EACAlB,EAEJ,GAAIjC,EAAQiD,UAAW,CACrB,IAAIG,EAAaF,IACjB7I,EAAQ4I,IAAcA,EAAYjC,EAAmBhB,IACrDmD,EAASnB,EAAoBpM,KAAK,KAAMyE,EAAO+I,MAC/CnB,EAASD,EAAoBpM,KAAK,KAAMyE,EAAO+I,WAE/C/I,EAAQ2G,EAAmBhB,GAC3BmD,EAASV,EAAW7M,KAAK,KAAMyE,EAAO2F,GAEtCiC,EAAS,YAxFb,SAA4B5H,GAE1B,GAAyB,OAArBA,EAAMgJ,WACR,OAAO,EAGThJ,EAAMgJ,WAAWd,YAAYlI,GAN/B,CAyFyBA,IAKvB,OADA8I,EAAO3C,GACA,SAAqB8C,GAC1B,GAAIA,EAAQ,CACV,GAAIA,EAAO7C,MAAQD,EAAIC,KAAO6C,EAAO5C,QAAUF,EAAIE,OAAS4C,EAAO3C,YAAcH,EAAIG,UACnF,OAGFwC,EAAO3C,EAAM8C,QAEbrB,KAKN9N,EAAOD,QAAU,SAAU6L,EAAMC,IAC/BA,EAAUA,GAAW,IAGRiD,WAA0C,kBAAtBjD,EAAQiD,YACvCjD,EAAQiD,gBA5NR,IATWjE,IAMTA,EAAO8C,QAAQzC,QAAUF,UAAYA,SAASoE,MAAQlE,OAAOmE,OAGxDxE,IAgOT,IAAIyE,EAAkB3D,EADtBC,EAAOA,GAAQ,GAC0BC,GACzC,OAAO,SAAgB0D,GAGrB,GAFAA,EAAUA,GAAW,GAE2B,mBAA5C5O,OAAOkB,UAAU2N,SAASpP,KAAKmP,GAAnC,CAIA,IAAK,IAAItP,EAAI,EAAGA,EAAIqP,EAAgB5D,OAAQzL,IAAK,CAC/C,IACImM,EAAQb,EADK+D,EAAgBrP,IAEjCqL,EAAYc,GAAOK,aAKrB,IAFA,IAAIgD,EAAqB9D,EAAa4D,EAAS1D,GAEtC6D,EAAK,EAAGA,EAAKJ,EAAgB5D,OAAQgE,IAAM,CAClD,IAEIC,EAASpE,EAFK+D,EAAgBI,IAIK,IAAnCpE,EAAYqE,GAAQlD,aACtBnB,EAAYqE,GAAQjD,UAEpBpB,EAAYsE,OAAOD,EAAQ,IAI/BL,EAAkBG,M,iBCxQtB1P,EADkC,EAAQ,GAAR,EACxB8P,IAEFlD,KAAK,CAAC3M,EAAOC,EAAI,4mDAA6mD,KAEtoDD,EAAOD,QAAUA,G,6BCEjBC,EAAOD,QAAU,SAAU+P,GACzB,IAAIlE,EAAO,GAuDX,OArDAA,EAAK4D,SAAW,WACd,OAAOO,KAAK/J,KAAI,SAAUgG,GACxB,IAAIrB,EAsDV,SAAgCqB,EAAM8D,GACpC,IAoBiBtD,EAEbwD,EACAvI,EAvBAkD,EAAUqB,EAAK,IAAM,GAErBiE,EAAajE,EAAK,GAEtB,IAAKiE,EACH,OAAOtF,EAGT,GAAImF,GAAgC,mBAATtB,KAAqB,CAC9C,IAAI0B,GAWW1D,EAXeyD,EAa5BD,EAASxB,KAAKC,SAASC,mBAAmBC,KAAKC,UAAUpC,MACzD/E,EAAO,+DAA+D0E,OAAO6D,GAC1E,OAAO7D,OAAO1E,EAAM,QAdrB0I,EAAaF,EAAWG,QAAQpK,KAAI,SAAUqK,GAChD,MAAO,iBAAiBlE,OAAO8D,EAAWK,YAAc,IAAInE,OAAOkE,EAAQ,UAE7E,MAAO,CAAC1F,GAASwB,OAAOgE,GAAYhE,OAAO,CAAC+D,IAAgBtC,KAAK,MAGnE,MAAO,CAACjD,GAASiD,KAAK,MAjBxB,CAtD2C5B,EAAM8D,GAE3C,OAAI9D,EAAK,GACA,UAAUG,OAAOH,EAAK,GAAI,MAAMG,OAAOxB,EAAS,KAGlDA,KACNiD,KAAK,KAKVhC,EAAK3L,EAAI,SAAUE,EAASoQ,EAAYC,GACf,iBAAZrQ,IAETA,EAAU,CAAC,CAAC,KAAMA,EAAS,MAG7B,IAAIsQ,EAAyB,GAE7B,GAAID,EACF,IAAK,IAAIvQ,EAAI,EAAGA,EAAI8P,KAAKrE,OAAQzL,IAAK,CAEpC,IAAI4J,EAAKkG,KAAK9P,GAAG,GAEP,MAAN4J,IACF4G,EAAuB5G,OAK7B,IAAK,IAAI6F,EAAK,EAAGA,EAAKvP,EAAQuL,OAAQgE,IAAM,CAC1C,IAAI1D,EAAO,GAAGG,OAAOhM,EAAQuP,IAEzBc,GAAUC,EAAuBzE,EAAK,MAKtCuE,IACGvE,EAAK,GAGRA,EAAK,GAAK,GAAGG,OAAOoE,EAAY,SAASpE,OAAOH,EAAK,IAFrDA,EAAK,GAAKuE,GAMd3E,EAAKe,KAAKX,MAIPJ,I,6BChET,0EAAS8E,IAA2Q,OAA9PA,EAAW/P,OAAOqD,QAAU,SAAUI,GAAU,IAAK,IAAInE,EAAI,EAAGA,EAAI0Q,UAAUjF,OAAQzL,IAAK,CAAE,IAAIoQ,EAASM,UAAU1Q,GAAI,IAAK,IAAIuB,KAAO6O,EAAc1P,OAAOkB,UAAUC,eAAe1B,KAAKiQ,EAAQ7O,KAAQ4C,EAAO5C,GAAO6O,EAAO7O,IAAY,OAAO4C,IAA2BwM,MAAMb,KAAMY,WAIhT,IAAIE,EAAoB,gBAAoB,OAAQ,KAAmB,gBAAoB,OAAQ,CACjGhH,GAAI,iBACJtJ,EAAG,6CACY,gBAAoB,OAAQ,CAC3CsJ,GAAI,iBACJtJ,EAAG,wGAGDuQ,EAAqB,gBAAoB,MAAO,CAClDzJ,KAAM,OACN0J,UAAW,kBACXC,UAAW,yBAGTC,EAAqB,gBAAoB,MAAO,CAClD5J,KAAM,OACN6J,YAAa,GACbH,UAAW,kBACX7J,QAAS,GACT8J,UAAW,yBAGb,SAASG,EAAWC,GAClB,OAAoB,gBAAoB,MAAOV,EAAS,CACtDtN,MAAO,GACPC,OAAQ,IACP+N,GAAQP,EAAMC,EAAOG,GAGX,gvB,6BCjCf,0EAASP,IAA2Q,OAA9PA,EAAW/P,OAAOqD,QAAU,SAAUI,GAAU,IAAK,IAAInE,EAAI,EAAGA,EAAI0Q,UAAUjF,OAAQzL,IAAK,CAAE,IAAIoQ,EAASM,UAAU1Q,GAAI,IAAK,IAAIuB,KAAO6O,EAAc1P,OAAOkB,UAAUC,eAAe1B,KAAKiQ,EAAQ7O,KAAQ4C,EAAO5C,GAAO6O,EAAO7O,IAAY,OAAO4C,IAA2BwM,MAAMb,KAAMY,WAIhT,IAAIE,EAAoB,gBAAoB,OAAQ,CAClDtQ,EAAG,gBACH8G,KAAM,SAGJyJ,EAAqB,gBAAoB,OAAQ,CACnDvQ,EAAG,+DACH8G,KAAM,SAGR,SAASgK,EAAaD,GACpB,OAAoB,gBAAoB,MAAOV,EAAS,CACtDtN,MAAO,GACPC,OAAQ,IACP+N,GAAQP,EAAMC,GAGJ,oV,8ECjBF,EAAAQ,gBAAkB,SAACC,GAAoB,gBAACtH,GACjD,IAAII,EAAO,KAELmH,EAAcvH,EACpB,GAAIuH,GAAeA,EAAYpN,OAAQ,CACnC,IAAM8F,EAAYsH,EAAYpN,OAS9B,GARI8F,EAAUC,OAASD,EAAUC,MAAM,KACnCE,EAAOH,EAAUC,MAAM,IAIvBD,EAAUhJ,QACVgJ,EAAUhJ,MAAQ,IAElBmJ,EACA,OAAOkH,EAAGlH,GAIlB,IAAMoH,EAAYxH,EAKlB,GAJIwH,IACApH,EAAQoH,EAAUC,cAAgBD,EAAUC,aAAavH,MAAM,IAG/DE,EACA,OAAOkH,EAAGlH,S,oBC7BlBrK,EAAOD,QAAU,IAA0B,qC,oBCA3CC,EAAOD,QAAU,IAA0B,uC,oBCA3CC,EAAOD,QAAU,IAA0B,0C,oBCA3CC,EAAOD,QAAU,IAA0B,kC,oBCA3CC,EAAOD,QAAU,IAA0B,uC,oBCA3CC,EAAOD,QAAU,IAA0B,8C,kBCA3CC,EAAOD,QAAU,8vB,wjDCAjB,gBAqGA,SAAgB,EAAU,EAAe,GACrC,MAAO,CACH,GAAIgB,EAAE,GAAK,EAAK,EAChB,GAAI,EAAE,GAAK,EAAK,EAChB,GAAI,EAAE,GAAK,EAAK,EAChB,GAAI,EAAE,GAAK,EAAK,GAQxB,SAAgB,EAAY,GACxB,MAAQ,CACJ,EAAG,EAAE,GAAG,EAAE,GACV,EAAG,EAAE,GAAG,EAAE,IAelB,SAAgB,EAAe,GACzB,IAAI,EAAM,EACN,EAAQ,EACd,MAAO,CACH,EAAG,EAAI,cAAgB,EAAM,YAAc,EAAK,MAChD,EAAG,EAAI,eAAiB,EAAM,aAAe,EAAK,QAxG1D,qCAA0C,EAAmB,EAAqB,GAC5E,IAAE,EAAiB,EAAQ,QAAO,SAAAA,GAEhC,OAdO,SAAC,EAA4B,G,IAA3B,OAAI,OAAwB,OAAI,OAC3C,OAAF,KAAK,KAAK,SAAC,EAAK,EAAO,GAAI,SAAC,EAAK,EAAO,IAYzB,CAAO,CAAC,GAAK,IA3BhC,SAAoB,G,IAAC,OAAI,OAAI,OACzB,MAAO,EACA,EAAG,GAAI,EAAI,GAFW,KAGnB,GAAI,EAAG,GAwBiB,CAAW,EAAE,iBAC7B,KAElB,OAA8B,IAA1B,EAAe,OACR,EAEJ,EAAe,GAAG,gBAQ7B,uBAA4B,GACtB,IAAE,EAAU,IAAI,OAAO,OAAO,EAAI,sBAAuB,KACtD,KAAK,OAAO,SAAS,MAC1B,OAAI,GAAW,EAAQ,IACnB,QAAQ,IAAI,YAAa,EAAM,EAAQ,IAChC,mBAAmB,EAAQ,OAE9B,QACD,GAWX,4BAAiC,EAAqB,EAAsB,GACxE,IAAM,EAAa,EAAc,EAE3B,EAAQ,KAAK,KAAK,EAAa,GACrC,MAAO,CACH,EAAG,EACH,EAAG,EAAQ,IAYnB,mCAAwC,EAAkB,EAAmB,EAAuB,GAGhG,OADS,EAAW,EADX,EAAgB,EAGd,CACH,EAAG,EAAgB,EAAY,EAC/B,EAAG,GAGJ,CACH,EAAG,EACH,EAAG,EAAiB,EAAW,IAIvC,cAaAhB,EAAQ,YAAR,EAYA,8BAAmC,EAAkB,GAC/C,IACI,IADa,EAAU,EAAM,IAEjC,OADK,IAAG,KAId,mBASA,2BAAgC,EAA+D,EAAc,GACnG,WAAC,MAAO,MACR,M,qBAAE,OAAI,OAAI,OAUV,EAAK,EAAK,EACV,EAAK,GALD,EAAG,GAMP,EAAK,EAAK,EACV,EAAK,GAbS,KAOP,GAQP,EAAM,GAAW,EAAQ,GAAM,EAC/B,EAAM,GAAW,EAAQ,GAAM,EAE/B,EAAS,SAAS,cAAc,UACtC,EAAO,MAAQ,EACf,EAAO,OAAS,EAChB,IAAM,EAAU,EAAO,WAAW,MAClC,IAAK,EACD,MAAM,MAAM,8DAahB,OAVA,EAAQ,UAAU,oBAClB,EAAQ,SAAS,EAAE,EAAG,EAAI,GAExB,EAAM,UACJ,EACA,EAAI,EACJ,EAAI,EACJ,EAAG,EACH,EAAI,GAED,GAGX,6BAAkC,GAC5B,OAAK,IAAI,SAAQ,SAAC,EAAS,GAEzB,UAAU,GAAO,YACH,EAEN,EAFM,GAIN,MAEJ,CACA,QAAQ,EACR,aAAa,EACb,YAAa,kBAKzB,2BAAgC,EAA2B,GACvD,OAAO,IAAI,SAAQ,SAAC,EAAS,GACzB,EAAO,QAAO,SAAC,GACP,EACA,EAAQ,GAER,MAEL,aAAc,OAIZ,gBAAgB,CAAC,OAAQ,QAAS,OAAQ,OAAQ,OAAQ,SAEvE,qBAA0B,GACpB,OAAK,gBAAc,MAAK,YAAM,SAAK,KAAK,SAAV,OAGpC,uBAA4B,GACtB,OAAK,EAAK,KAAK,WAAW,WAOhC,uBAAqC,G,oGAErB,OADR,EAAK,KAAK,MACF,GAAM,G,OAElB,OAFM,EAAM,SACR,EAAK,KAAK,MACd,GAAO,CAAC,IAAG,EAAE,iBAAkB,EAAG,GAAI,e,oBCtO1CC,EAAOD,QAAU,IAA0B,yC,oBCA3CC,EAAOD,QAAU,IAA0B,yC,oBCA3CC,EAAOD,QAAU,IAA0B,mC,oBCA3CC,EAAOD,QAAU,IAA0B,wC,oBCA3CC,EAAOD,QAAU,IAA0B,4C,oBCA3CC,EAAOD,QAAU,IAA0B,+C,kBCA3CC,EAAOD,QAAU,kzB,kBCAjBC,EAAOD,QAAU,0tB,kBCAjBC,EAAOD,QAAU,01B,kBCAjBC,EAAOD,QAAU,sxG,oBCAjBC,EAAOD,QAAU,IAA0B,uC,+yDCU3C,EAAQ,KAER,IAAI,EAAJ,OACA,a,4DAGA,SAyBA,iBAkBI,WAAY,GAGR,GAFA,KAAK,WAAa,UAAM,UAEnB,EAAS,OACV,MAAM,IAAI,MAAM,2BAGpBgQ,KAAK4B,OAASC,EAASD,OACvB,IAAM,EAAU,EAAS,SAAW,uBACpC5B,KAAK8B,iBAAsB,EAAO,WAClC9B,KAAK+B,eAAoB,EAAO,iBAChC/B,KAAKgC,sBAA2B,EAAO,iBACvChC,KAAKiC,6BAAkC,EAAO,mBAC9CjC,KAAKkC,YAAiB,EAAO,gBAC7BlC,KAAKmC,kBAAuB,EAAO,oBAEnCnC,KAAK,eAAiB,EAAS,gBAAkB,gCACjDA,KAAK,UAAY,EAAS,WAAa,IACvCA,KAAK,SAAW,EAAS,UAAY,IACrCA,KAAK,YAAc,EAAS,aAAe,IAC3CA,KAAK,oBAAsB,EAAS,oBACpCA,KAAK,aAAe,EAAS,aAC7B,KAAK,SAAW,EAAS,SAwN/B,OArNgB,yBAAd,SAA2B,EAAiE,G,wGAWjF,OAVH,EAAO,GAAY,CACnB,GAAI,EACJ,GAAI,EACJ,GAAI,EACU,GAAV,GAEU,EAAG,iBAAe,GAClB,EAAE,qBAAmB,EAAM,GAC7B,EAAC,mBAAiB,KAAK,SAAU,KAAK,UAAW,GACjD,EAAW,kBAAgB,EAAQ,EAAY,GACxD,GAAM,kBAAgB,EAAsB,KAAK,c,OAA5C,MAAZ,GAAO,kBAGD,EAAF,kCAAR,SAAgC,GAExB,MAAgB,CAChB,YAAa,KAAK,OAClB,kBAAmB,aACnB,OAAU,KAAK,eACf,eAAgB,GAAe,4BAI7B,EAAW,GAMjB,OALI,KAAK,UACL,EAAS,KAAK,KAAK,UACnB,EAAS,OAAS,IAClB,EAAQ,aAAe,EAAS,KAAK,MAElC,GAGH,oCAAR,SAAgC,GAE5B,IAAI,EAAgB,CAChB,YAAa,KAAK,OAClB,eAAgB,GAAe,4BAI7B,EAAW,GAMjB,OALI,KAAK,UACL,EAAS,KAAK,KAAK,UACnBoC,EAAS,OAAS,IAClB,EAAQ,aAAe,EAAS,KAAK,MAElC,GAGH,sBAAR,SAAkB,GAOd,OANa,EAAQ,YAAc,CAC/B,IAAK,EAAQ,YAAY,IAAI,WAC7B,IAAK,EAAQ,YAAY,IAAI,WAC7B,KAAM,EAAQ,YAAY,KAAK,YAC/B,IAKA,qCAAR,SAAiC,GAC7B,OAAOxR,OAAOyR,QAAQC,GAA8B,IAAIrM,KAAI,SAAC,GAAkB,MAAC,CAC5E,KAD0D,KAE1D,MAFgE,SAGhE,MAAK,SAAC,EAAG,GAAM,SAAE,MAAQ,EAAV,UAIf,8BAAR,SAA0B,EAA8D,GACpF,IAAM,EAAsB,KAAK,yBAAyB,EAAI,KAAK,oBAC/D,EAAQ,EAAI,KAAK,UAAY,GAE7BsM,EAA0D,KAAK,aAAc,KAAK,aAAa,EAAI,MAAQ,EAAI,KAoBnH,MAAO,CAAE,QAjBL,eAAgB,EACZ,EAAa,WAAW,KAAI,SAAC,EAAqB,GAAc,cACzD,GAAC,CACJ,SAF4D,OAI9D,EAAa,QAAQ,KAAI,SAAC,EAAwB,GAChD,MAAC,CACG,SAAU,EACV,IAAK,EAAE,IACP,MAAO,EAAE,MACT,IAAK,EAAE,QAAU,EAAE,OAAO,GAAK,CAAE,IAAK,EAAE,OAAO,SAAO,EACtD,EAAG,EAAE,MAAQ,EAAE,MAAM,UAAO,EAC5B,EAAG,EAAE,MAAQ,CAAE,GAA0B,IAAtB,WAAW,EAAE,OAAc,EAAG,EAAE,MAAM,MAAM,KAAK,SAAM,MAKxE,UAFA,EAAI,QAAQ,sBAED,SADZ,oBAAqB,EAAI,KAAO,EAAI,KAAK,gBAAkB,EACrC,oBAAmB,EAAE,MAAK,IAS7D,EAAF,oBAAN,SAAgB,EAAY,G,0GAIO,OAHf,EAAD,EAAK,KACJ,EAAF,KAAK,wBAAwB,GAC3B,EAAH,KAAK,UAAU,GACG,GAAM,cAAY,KAAK,WAAW,QAAkD,CACjG,OAAN,OACM,IAAT,KAAK,eACI,KAAR,EACQ,OAAR,EACQ,QAAP,EACO,wB,OAEN,OARI,EAAe,SAAzB,EAAG,MAAE,EAAe,kBAQ1B,GAAO,KAAK,kBAAkB,EAAK,YAQjC,wBAAN,SAAkB,EAAiE,G,0GAC5D,SAAM,KAAK,aAAa,EAAQ,EAAQ,W,OAE3D,OAFM,EAAa,SAEf,KAAK,oBACL,GAAO,KAAK,oBAAoB,EAAY,KAAK,cAEjD,EAAU,KAAK,wBAAwB,cACvC,EAAS,KAAK,UAAU,GAEG,GAAM,cAAY,KAAK,WAAW,QAAkD,CAC/G,OAAQ,OACR,IAAK,KAAK,iBACI,KAAR,EACN,OAAM,EACN,QAAO,EACP,aAAc,Y,OAGN,OATR,EAA2B,SAAzB,EAAG,MAAE,EAAe,kBAS1B,GAAO,KAAK,kBAAkB,EAAK,YAQ/B,EAAF,oBAAN,SAAgB,EAAa,G,oGAGb,OAFN,EAAU,KAAK,0BACf,EAAM,GAAG,KAAK,sBAAwB,mBAAmB,GAAI,IAAI,mBAAmB,GAC9E,GAAM,KAAK,WAAW,IAAI,EAAK,CAAC,QAAO,EAAE,aAAc,U,OAInE,OAJI,EAAQ,SACR,KAAK,eACL,EAAI,KAAK,cAEb,GAAO,WAQH,EAAF,sBAAN,SAAkB,G,8GAIH,OAHK,EAAW,iBAAe,GAAlC,EAAK,IAAK,EAAK,IACP,EAAC,mBAAiB,KAAK,SAAU,KAAK,UAAW,EAAM,GACnE,EAAuB,kBAAgB,EAAQ,GACxC,GAAM,kBAAgB,EAAsB,KAAK,c,OAG7C,OAHC,EAAL,SAEK,EAAF,KAAK,wBAAwB,cAC5B,GACX,KAAK,WAAW,QAA6B,CACzC,OAAQ,OACR,IAAK,KAAK,kBACV,KAAM,EACN,QAAO,K,OAGf,OARgB,EAAD,SAQf,GADmC,EAAS,KAC7B,KAAI,YAAK,MAAC,CACjB,UAAW,EAAE,UACb,WAAY,EAAE,WACd,eAAgB,CACZ,GAAI,EAAE,OAAO,KAAO,EAAW,EAC/B,GAAK,EAAE,OAAO,MAAQ,EAAW,EACjC,GAAI,EAAE,OAAO,IAAM,EAAW,EAC9B,GAAK,EAAE,OAAO,OAAS,EAAW,gBAW1C,EAAF,uBAAN,SAAmB,EAAmB,EAAmB,G,kGAWzC,OAVM,EAAF,CACE,YAAD,KAAK,OACJ,eAAE,oBAEd,EAAI,GACN,WAAY,EACZ,UAAW,IAAI,KACD,WAAF,GACT,GAEP,GAAM,KAAK,WAAW,QAAQ,CACZ,OAAN,OACM,IAAT,KAAK,YACI,QAAP,EACO,KAAV,K,cAJI,EAAZ,O,YAOR,EAhQA,G,oLC7BoB3E,QACW,cAA7BzC,OAAOqH,SAASC,UAEe,UAA7BtH,OAAOqH,SAASC,UAEhBtH,OAAOqH,SAASC,SAASC,MACvB,2D,sBCOOC,G,OAAoB,CAC7BC,cAAe,wBACfC,4BAA6B,UAC7BC,sBAAuB,OACvBC,YAAa,GACbC,aAAc,UACdC,eAAgB,UAChBC,uBAAwB,QACxBC,wBAAyB,MACzBC,eAAgB,OAChBC,iBAAkB,c,yBC7BPC,MAJf,WACE,OAAO,4C,OC+BMC,MAhCf,WACE,OACE,yBAAK7J,UAAU,WACb,yBAAKA,UAAU,UAAUvD,MAAO,CAAEqN,QAAS,IACzC,6BAAS1J,GAAG,aACZ,yBAAKA,GAAG,OAAOJ,UAAU,WAAW+J,KAAK,cACvC,4BACE,4BACE,uBACEC,KAAK,oCACLrP,OAAO,SACPsP,IAAI,uBAHN,mBAQF,4BACE,uBACED,KAAK,oBACLrP,OAAO,SACPsP,IAAI,uBAHN,2B,mCCEDC,EAAYC,YAAY,CACnCpT,KAAM,OACNqT,aARsC,CACtCC,YAAa,KACbtT,KAAM,KACNgT,KAAM,MAMNO,SAAU,CACRC,MAAO,SAAC5R,EAAOqF,KAQfwM,OAAQ,SAAC7R,GACPA,EAAM0R,YAAc,KACpB1R,EAAM5B,KAAO,KACb4B,EAAMoR,KAAO,KACbU,IAASpG,OAAO,aAKf,EAA0B6F,EAAUQ,QAC5BR,GADR,EAAQK,MAAR,EAAeC,OACPN,EAAf,SCpCO,SAASS,EAAY5T,GACxB,IAAI6T,EAAU,IAAIC,OAAJ,cAAkB9T,EAAlB,uBAA6C,KACtD+T,KAAKrJ,OAAOqH,SAASkB,MAC1B,OAAIY,GAAWA,EAAQ,IACnBG,QAAQC,IAAI,YAAajU,EAAM6T,EAAQ,IAChCK,mBAAmBL,EAAQ,OAE9BA,QACDM,ECiBX,IAAMd,EAA4B,CAChCQ,QAAS,GACTrR,QAAS,GACT4R,oBAAgBD,EAChBE,kBAAcF,EACdG,iBAAiB,EACjBC,iBAAiB,EACjBC,cAAe,GACfC,oBAAqB,GACrBC,MAAO,GACPC,aAAc,GACdC,gBAAiB,GACjBC,iBAAkB,GAClBC,QAAS,GACTC,gBAAiB,GACjBC,sBAAsB,GAITC,EAAc7B,YAAY,CACrCpT,KAAM,SACNqT,eACAE,SAAU,CACR2B,iBAAkB,SAACtT,EAAOqF,GAC1B,IAAQkO,EAAYlO,EAAZkO,QAENtB,EAMEsB,EANFtB,QACAuB,EAKED,EALFC,UACAX,EAIEU,EAJFV,oBACAC,EAGES,EAHFT,MACApN,EAEE6N,EAFF7N,SACAwN,EACEK,EADFL,QAEF,OAAO,2BACFlT,GADL,IAEEkT,UACAjB,UACAuB,YACAX,sBACAC,QACApN,WACA+N,UAAWzT,EAAMyT,WAAaD,EAC9Bd,iBAAiB,KAIrBgB,WAAY,SAAC1T,EAAOqF,GAAR,mBAAC,eACRrF,GADO,IAEVY,QAASyE,EAAKkO,WAGhBI,kBAAmB,SAAC3T,EAAOqF,GAAR,mBAAC,eACfrF,GADc,IAEjBwS,eAAgBnN,EAAKkO,WAGvBK,gBAAiB,SAAC5T,EAAOqF,GAAR,mBAAC,eACXrF,GADU,IAEbyS,aAAc,CACZoB,OAAQxO,EAAKkO,QACb9L,GAAIhD,KAAKqP,SAAS1G,eAIxB2G,iBAAkB,SAAC/T,EAAOqF,GACxB,IAAQkO,EAAYlO,EAAZkO,QACR,OAAO,2BACFvT,GADL,IAEEwS,eAAgBe,KAGpBS,qBAAsB,SAAChU,EAAOqF,GAC5B,IAAQkO,EAAYlO,EAAZkO,QAEAtB,EACNsB,EADMtB,QAASuB,EACfD,EADeC,UAAWX,EAC1BU,EAD0BV,oBAAqBC,EAC/CS,EAD+CT,MAAOpN,EACtD6N,EADsD7N,SAExD,OAAO,2BACF1F,GADL,IAEEiS,UACAuB,YACAX,sBACAC,QACApN,WACA+N,UAAWzT,EAAMyT,WAAaD,EAC9Bb,iBAAiB,KAGrBsB,qBAAsB,SAACjU,GACrB,OAAO,2BACFA,GADL,IAEE0S,iBAAiB,KAGrBwB,qBAAsB,SAAClU,GACrB,OAAO,2BACFA,GADL,IAEE2S,iBAAiB,KAGrBwB,yBAA0B,SAACnU,EAAOqF,GAChC,IAAQkO,EAAYlO,EAAZkO,QAENtB,EAKEsB,EALFtB,QACAuB,EAIED,EAJFC,UACA9N,EAGE6N,EAHF7N,SACAmN,EAEEU,EAFFV,oBACAC,EACES,EADFT,MAEF,OAAO,2BACF9S,GADL,IAEEiS,UACAuB,YACA9N,WACAmN,sBACAC,QACAJ,iBAAiB,KAGrB0B,sBAAuB,SAACpU,EAAOqF,GAC7B,IAAQkO,EAAYlO,EAAZkO,QACR,OAAO,2BACFvT,GADL,IAEEgT,gBAAiBO,KAGrBN,iBAAkB,SAACjT,EAAOqF,GACxB,IAAQkO,EAAYlO,EAAZkO,QACR,OAAO,2BACFvT,GADL,IAEEiT,iBAAkBM,KAGtBc,cAAe,SAACrU,EAAOqF,GACrB,IAAQkO,EAAYlO,EAAZkO,QACR,OAAO,2BACFvT,GADL,IAEEiS,QAASsB,KAGbe,MAAO,SAACtU,EAAOqF,GACb,MAAO,CACL4M,QAAS,GACTrR,QAAS,GACT4R,eAAgB,CAAEtR,GAAI,GAAKC,GAAI,GAAKC,GAAI,GAAKC,GAAI,IACjDoR,kBAAcF,EACdG,iBAAiB,EACjBC,iBAAiB,EACjBC,cAAe,GACfC,oBAAqB,GACrBC,MAAO,GACPC,aAAc,GACdC,gBAAiB,GACjBC,iBAAkB,GAClBC,QAAS,GACTE,sBAAsB,IAG1BD,gBAAiB,SAACnT,EAAOqF,GACvB,IAAQkO,EAAYlO,EAAZkO,QACR,OAAO,2BACFvT,GADL,IAEEmT,gBAAiBI,KAGrBgB,iBAAkB,SAACvU,EAAOqF,GACxB,IAAQkO,EAAYlO,EAAZkO,QACR,OAAO,2BACFvT,GADL,IAEEyT,UAAWF,KAGfiB,2BAA4B,SAACxU,EAAOqF,GAClC,IACQ4M,EADY5M,EAAZkO,QACAtB,QACR,OAAO,2BACFjS,GADL,IAEEiS,aAIJwC,SAAU,SAACzU,EAAOqF,GACd,OAAO,2BACFrF,GADL,IAEE2S,iBAAiB,EACjBD,iBAAiB,EACjBK,aAAc1N,EAAKkO,cAMtB,EAkBHF,EAAYtB,QAjBduB,EADK,EACLA,iBACAS,EAFK,EAELA,iBACAH,EAHK,EAGLA,gBAEAF,GALK,EAILM,qBAJK,EAKLN,YACAC,EANK,EAMLA,kBACAM,EAPK,EAOLA,qBAEAE,GATK,EAQLD,qBARK,EASLC,0BACAC,EAVK,EAULA,sBAGAE,GAbK,EAWLrB,iBAXK,EAYLoB,cAZK,EAaLC,OAEAC,GAfK,EAcLpB,gBAdK,EAeLoB,kBACAC,EAhBK,EAgBLA,2BACAC,EAjBK,EAiBLA,SAEapB,IAAf,QChOaqB,EAAalD,YAAY,CACpCpT,KAAM,QACNqT,aAPuD,CACvDkD,SAAU,QACVC,cAAe,UAMfjD,SAAU,CACRkD,UAAW,SAAC7U,GACV,OAAO,2BACFA,GADL,IAEE2U,SAAU,WAGdG,WAAY,SAAC9U,GACX,OAAO,2BACFA,GADL,IAEE2U,SAAU,YAGdI,YAAa,SAAC/U,GACZ,OAAO,2BACFA,GADL,IAEE2U,SAAU,aAGdK,aAAc,SAAChV,GACb,OAAO,2BACFA,GADL,IAEE4U,cAAe,cAGnBK,aAAc,SAACjV,GACb,OAAO,2BACFA,GADL,IAEE4U,cAAe,YAGnBM,uBAAwB,SAAClV,GACvB,OAAO,2BACFA,GADL,IAEE4U,cAAe,cAGnBO,iBAAkB,SAACnV,GACjB,OAAO,2BACFA,GADL,IAEE4U,cAAe,iBAMhB,EAQHF,EAAW3C,QAPb8C,EADK,EACLA,UACAC,EAFK,EAELA,WACAC,EAHK,EAGLA,YACAC,EAJK,EAILA,aACAC,EALK,EAKLA,aACAC,EANK,EAMLA,uBACAC,EAPK,EAOLA,iBAEaT,IAAf,QC9DIU,EAA+B,2BPZU,CAEzCrF,UAAU,EACVR,OAAQ,QACR8F,cAAe,GACfC,SAAS,EACT1U,SAAS,EACTH,SAAU,IACVC,UAAW,IACX6U,YAAa,IACbC,QAAS,uBACTC,wBAAyB,CACrB,gCACA,6BACA,8BACA,oCACA,4BAEJC,UAAW,CACP5V,QAAS,CAAE6V,QAAQ,MOLtBnG,UAIDoG,EAAuB,2BACtBtF,GACAd,SAASkG,UAAUG,gBAExBT,EAAmBM,UAAUG,eAAiBD,EAE9CR,EAAkB,2BACbA,GADa,IAEhB7F,OAASyC,EAAY,WAAwBoD,EAAmB7F,OAChEQ,SAAWiC,EAAY,aAA0BoD,EAAmBrF,SACpEnP,QACGoR,EAAY,gBAA8BoD,EAAmBxU,QAChE0U,QACGtD,EAAY,gBAA8BoD,EAAmBE,UAGlE,IAAM3D,EAAWmE,YAAgB,CAC/BC,KAAMC,EACNxG,SAAU,kBAAM4F,GAChBa,OAAQC,EACRC,MAAOC,IAGIC,EAAQC,YAAe,CAClCC,QAAS5E,EACT6E,UAAUC,IAMCC,GAAiB,kBAAMC,eACvBC,GAAkDC,I,2DCjDlDC,GAAmB,yCAAG,WAAO9W,EAAkB+W,GAAzB,kBAAAlU,EAAA,6DACzBoT,EAAqBjW,EAArBiW,OAAQzG,EAAaxP,EAAbwP,SADiB,SAEpBwH,GAAkBxH,EAAUyG,EAAOxC,UAAWwC,EAAOzC,UAAW,CAC3EyD,MAAO,WACP5R,KAAM,CAAE0R,aAJuB,mFAAH,wDAQnBG,GAAiB,yCAAG,WAAOlX,EAAkBiG,GAAzB,kBAAApD,EAAA,6DACvBoT,EAAqBjW,EAArBiW,OAAQzG,EAAaxP,EAAbwP,SADe,SAElBwH,GAAkBxH,EAAUyG,EAAOxC,UAAWwC,EAAOzC,UAAW,CAC3EyD,MAAO,QACP5R,KAAM,CAAE8R,UAAW,CAAClR,MAJS,mFAAH,wDAQjBmR,GAAsB,yCAAG,WAAOpX,EAAkBqX,EAAeC,EAAcC,GAAtD,oBAAA1U,EAAA,sEAE1BoT,EAAqBjW,EAArBiW,OAAQzG,EAAaxP,EAAbwP,SAMVgI,EAAkB,CAAEP,MAAO,cAAe5R,KAL9B,CAChBgS,QACAC,OACAG,YAAaF,IANmB,SAUrBP,GAAkBxH,EAAUyG,EAAOxC,UAAWwC,EAAOzC,UAAWgE,GAV3C,wEAYlCpF,QAAQC,IAAI,+BAAZ,MAZkC,yDAAH,4DAgBtBqF,GAAkB,yCAAG,WAAO1X,EAAkB6D,GAAzB,gCAAAhB,EAAA,6DACzB2M,EAAoBxP,EAApBwP,SAAUyG,EAAUjW,EAAViW,OACVxC,EAAyBwC,EAAzBxC,UAAWD,EAAcyC,EAAdzC,UACVtS,EAAmB2C,EAAnB3C,GAAIC,EAAe0C,EAAf1C,GAAIC,EAAWyC,EAAXzC,GAAIC,EAAOwC,EAAPxC,GACdkS,EAAiC,CACjC0D,MAAO,SACP5R,KAAM,CAAEsS,KAAM,CAAEzV,EAAGhB,EAAIiB,EAAGf,EAAIN,EAAGK,EAAKD,EAAIH,EAAGM,EAAKD,KANxB,SAQnB4V,GAAkBxH,EAAUiE,EAAWD,EAAWD,GAR/B,mFAAH,wDAWlByD,GAAiB,yCAAG,WAC/BxH,EACAiE,EACAD,EACAD,GAJ+B,kBAAA1Q,EAAA,yDAMzByF,EAAM,IAAIsP,KAASpI,IACrBiE,IAAaD,EAPc,0CASHlL,EACrBuP,aAAapE,EAAWD,EAAWD,GACnC1M,MAAK,SAACiR,OAXkB,OASrBC,EATqB,OAY3B3F,QAAQC,IAAI,YAAa0F,GAZE,gDAc3B3F,QAAQC,IAAI,6BAAZ,MAd2B,yDAAH,4DC+Cf2F,GA/E2B,SAAC,GAAgC,IAA9BpD,EAA6B,EAA7BA,cAAeqD,EAAc,EAAdA,QACtDC,EAAa,KACXlY,EAAQ4W,IAAe,SAAC5W,GAAD,OAAWA,KAClCmY,EAAWzB,KACX0B,EAAqB,SAAC/S,GAC1ByR,GAAoB9W,EAAOqF,GAEzB8S,EADE9S,EACO6P,IAEAC,MAIb,OAAQP,GACN,IAAK,WACHsD,EACE,yBAAK7Q,UAAU,gBACb,sEACA,yBACEA,UAAU,+BACVxB,QAAS,kBAAMuS,GAAmB,KAFpC,OAMA,yBACE/Q,UAAU,iCACVxB,QAAS,kBAAMuS,GAAmB,KAFpC,OAQJ,MACF,IAAK,WACHF,EACE,yBAAK7Q,UAAU,4BAAf,uCAIF,MACF,IAAK,WACH6Q,EACE,yBAAK7Q,UAAU,4BAAf,qKAIE,6BACA,yBAAKA,UAAU,cAAcxB,QAASoS,GAAtC,YAKJ,MACF,QACEC,EAAQ,KAGZ,OACE,kBAAC,KAAD,CACEG,KAAwB,WAAlBzD,EACNxR,MAAO,CAAEjB,EAAG,IAAK2C,QAAS,GAC1BS,MAAO,CAAEpD,EAAG,CAAC,GAAI2C,QAAS,CAAC,IAC3BwT,MAAO,CAAEnW,EAAG,CAAC,KAAM2C,QAAS,CAAC,MAE5B,gBAAG3C,EAAH,EAAGA,EAAG2C,EAAN,EAAMA,QAAN,OACC,6BACEuC,UAAU,WACVvD,MAAO,CAAE8K,UAAU,cAAD,OAAgBzM,EAAhB,MAAuB2C,YAEzC,yBAAKuC,UAAU,WAAW6Q,GAC1B,yBAAK7Q,UAAU,0BACb,yBAAKA,UAAU,gBAAgBxB,QAASoS,UCzDrCM,OAvBf,WACE,IAAMJ,EAAWzB,KAGT9B,EAFYgC,IAAe,SAAC5W,GAAD,OAAWA,KACtCmW,MACAvB,cACR,OACE,oCACE,6BAASvN,UAAU,YACjB,yBAAKA,UAAU,WAAf,oBACgB,uBAAGgK,KAAK,oBAAR,cADhB,4BAEa,uBAAGA,KAAK,6BAAR,aAGf,kBAAC,GAAD,CACEuD,cAAeA,EACfqD,QAAS,WACP,OAAOE,EAASlD,U,wCCgBXuD,OA7Bf,WACE,IAEM5C,EAFegB,IAAe,SAAC5W,GAAD,OAAWA,KAAvCwP,SACAkG,UACqBG,eAE7B,OACE,kBAAC4C,GAAA,EAAD,CACExS,SAAU,WACVnC,MAAO,CAAE4U,gBAAiB9C,EAAWpF,8BAErC,kBAACmI,GAAA,EAAD,CACElY,SAAS,KACTqD,MAAO,CAAE8U,cAAe,MAAOC,QAAS,SAExC,yBACE1Q,IAAKyN,EAAWrF,cAChBzM,MAAO,CAAE7C,OAAQ,MAAO6X,UAAW,OAAQD,QAAS,QACpDzQ,IAAI,SAEN,kBAAC2Q,GAAA,EAAD,CAASC,UAAU,QACjB,kBAACC,GAAA,EAAD,CAAYnV,MAAO,CAAEoV,MAAOtD,EAAWnF,wBACpCmF,EAAWlF,iB,oBCzBlByI,GAAYC,cAAW,SAACC,GAAD,MAAY,CACvCC,OAAQ,CACNZ,gBAAiBW,EAAME,QAAQC,WAAWC,MAC1CtI,QAASkI,EAAMK,QAAQ,QAI3B,SAASC,KACP,OACE,kBAACV,GAAA,EAAD,CAAYW,QAAQ,QAAQV,MAAM,gBAAgBW,MAAM,UACrD,cACD,kBAACC,GAAA,EAAD,CACEZ,MAAM,UACN7H,KAAK,oBACL2H,UAAU,IACVhX,OAAO,UAJT,aAsCS+X,OA1Bf,WACE,IAAMC,EAAcpD,IAAe,SAAC5W,GAAD,OAAWA,KACtCiW,EAAkB+D,EAAlB/D,OACAtB,EADkBqF,EAAV7D,MACRxB,SACAnB,EAAcyC,EAAdzC,UACFyG,EAAUd,KAChB,OACE,4BAAQ9R,UAAW4S,EAAQX,QACzB,kBAACL,GAAA,EAAD,CAAYW,QAAQ,YAAYC,MAAM,SAASX,MAAM,iBAClD1F,GAA0B,YAAbmB,GACZ,yBACE7Q,MAAO,CACLoW,UAAW,SACXC,SAAU,QACVC,WAAY,UAJhB,sBAOsB5G,IAI1B,kBAACmG,GAAD,Q,6HC2CSU,OAlFf,WACE,IAAMC,EAAuB,SAACjK,EAAYF,GACxC,IAAIwF,GAAS,EAKb,OAJS,OAALtF,QAAK,IAALA,OAAA,EAAAA,EAAOkK,OAAQpK,EAASqK,WAC1B7E,GAAS,GAGJA,GAGT,OACE,kBAAC8E,GAAA,EAAD,CAAKpT,UAAU,cAAcwR,QAAS,QACpC,kBAAC,IAAD,CAAS6B,GAAG,IAAI5W,MAAO,CAAE6W,WAAY,IAEnC,yBAAK3Z,MAAO,GAAIC,OAAQ,GAAIkH,IAAG,UAAKyS,MAAaxS,IAAI,gBAEvD,kBAACyS,GAAA,EAAD,CAAMC,WAAS,EAACzT,UAAU,YACxB,kBAACwT,GAAA,EAAD,CAAMjR,MAAI,EAACvC,UAAU,YACnB,kBAAC,IAAD,CACE0T,gBAAgB,SAChBC,SAAU,SAAC3K,EAAOF,GAAR,OACRmK,EAAqBjK,EAAOF,IAE9BuK,GAAI,kBACJrT,UAAU,wCAEV,0BAAMA,UAAU,oDAAhB,iBAEE,yBAAKrG,MAAO,GAAIC,OAAQ,GAAIkH,IAAG,UAAK8S,MAAc7S,IAAI,QAI5D,kBAACyS,GAAA,EAAD,CAAMjR,MAAI,EAACvC,UAAU,YACnB,kBAAC,IAAD,CACE0T,gBAAgB,SAChBC,SAAU,SAAC3K,EAAOF,GAAR,OACRmK,EAAqBjK,EAAOF,IAE9BuK,GAAI,SACJrT,UAAU,wCAEV,0BAAMA,UAAU,oDAAhB,QAEE,yBAAKrG,MAAO,GAAIC,OAAQ,GAAIkH,IAAG,UAAK+S,MAAY9S,IAAI,QAI1D,kBAACyS,GAAA,EAAD,CAAMjR,MAAI,EAACvC,UAAU,YACnB,kBAAC,IAAD,CACE0T,gBAAgB,SAChBC,SAAU,SAAC3K,EAAOF,GAAR,OACRmK,EAAqBjK,EAAOF,IAE9BuK,GAAI,WACJrT,UAAU,wCAEV,0BAAMA,UAAU,oDAAhB,UAEE,yBAAKrG,MAAO,GAAIC,OAAQ,GAAIkH,IAAG,UAAKgT,MAAe/S,IAAI,QAI7D,kBAACyS,GAAA,EAAD,CAAMjR,MAAI,EAACvC,UAAU,YACnB,kBAAC,IAAD,CACE0T,gBAAgB,SAChBC,SAAU,SAAC3K,EAAOF,GAAR,OACRmK,EAAqBjK,EAAOF,IAE9BuK,GAAI,WACJrT,UAAU,wCAEV,0BAAMA,UAAU,oDAAhB,aAEE,yBAAKrG,MAAO,GAAIC,OAAQ,GAAIkH,IAAG,UAAKiT,MAAahT,IAAI,WCvEpDiT,OANf,SAA0BrM,GACxB,OACE,kBAACyL,GAAA,EAAD,OCsCWa,OAlCf,YAAuD,IAAD,IAIhDC,EACAC,EALYC,EAAoC,EAApCA,SAER/F,EADakB,IAAyB,SAAC5W,GAAD,OAAeA,KAArDwP,SACAkG,UAIJgG,EAA8B,aAalC,OAZA,UAAIhG,EAAU5V,eAAd,aAAI,EAAmB6V,SACrB+F,EAAsB,UACtBH,EAAYrK,EACZsK,EAAYjD,KACP,UAAI7C,EAAUG,sBAAd,aAAI,EAA0BF,SACnC+F,EAAsB,iBACtBH,EAAY/C,GACZgD,EAAYzB,KAEZwB,EAAYlB,GACZmB,EAAYH,IAGZ,yBAAKhU,UAAS,sBAAiBqU,IAC7B,yBAAKrU,UAAS,qBAAgBqU,EAAhB,UACZ,kBAACH,EAAD,OAEF,yBAAKlU,UAAS,mBAAcqU,EAAd,eACXD,GAEH,yBAAKpU,UAAU,oBACb,kBAACmU,EAAD,S,qCC9BKG,GAAc,CAACza,GAAI,EAAGC,GAAI,EAAGC,GAAI,EAAGC,GAAI,GAExCua,GAAW,yCAAG,WAAOC,GAAP,gBAAAhZ,EAAA,2DACXgZ,aAAqBC,mBADV,qBAC8BD,EAD9B,sCACgD7T,6BAAkB6T,GADlE,iCACnBrb,EADmB,uBAElBA,GAFkB,2CAAH,sDAKXub,GAAW,yCAAG,WAAOvb,EAA0BgP,GAAjC,oBAAA3M,EAAA,6DACnBmZ,EAAW,IAAIpE,KAASpI,GADL,SAELwM,EAASD,YAAYvb,GAFhB,cAErBI,EAFqB,OAInB4R,EAAiByJ,qCAA0Brb,EAAS,GAAK+a,IAJtC,kBAKlB,CACLnJ,eAAgB0J,mBAAQ1J,EAAgBmJ,SAAepJ,EAAYC,EACnE5R,YAPuB,2CAAH,wDAWXub,GAAc,SAAC3b,EAA0BgP,EAA4B3L,GAChF,IACI4F,EAAU,GAId,OAHI5F,IACF4F,EAAU,CAAE2S,SAAUvY,IAHP,IAAI+T,KAASpI,GAKd2M,YAAY3b,EAAOiJ,IAGxB4S,GAAgB,SAACpU,EAAYuH,GAExC,OADiB,IAAIoI,KAASpI,GACd8M,UAAUrU,EAAM,K,0KCb5BkR,GAAYC,cAAW,SAACC,GAAD,MAAY,CACvCkD,KAAM,CACJC,YAAanD,EAAMK,QAAQ,IAE7B+C,YAAa,CACX/D,gBAAiBW,EAAME,QAAQC,WAAWC,MAC1CtI,QAASkI,EAAMK,QAAQ,EAAG,EAAG,GAC7BgD,WAAY,YACZC,SAAU,SACV1b,OAAQ,KAEV2b,kBAAmB,CACjB3b,OAAQ,EACRkQ,QAAS,GAEX0L,YAAa,CACXC,UAAWzD,EAAMK,QAAQ,IAE3BqD,SAAU,CACR3C,WAAYf,EAAMK,QAAQ,GAC1BsD,cAAe3D,EAAMK,QAAQ,GAC7BZ,UAAW,IACX6D,SAAU,SACVD,WAAY,aAEdO,kBAAmB,CACjBhc,OAAQ,EACR6D,QAAS,EACTgU,UAAW,EACXsB,WAAY,EACZ4C,cAAe,GAEjBE,KAAM,CACJjc,OAAQ,OACR4X,QAAS,OACTD,cAAe,UAEjBuE,UAAW,CACT/C,WAAY,SACZgD,eAAgB,WAElBC,YAAa,CACXC,SAAU,EACVN,cAAe,GAEjB1D,OAAQ,CACNZ,gBAAiBW,EAAME,QAAQC,WAAWC,MAC1CtI,QAASkI,EAAMK,QAAQ,IAEzB6D,YAAa,CACXC,aAAc,WACdb,SAAU,SACVc,WAAY,UAEdC,QAAS,CACP1Z,OAAQqV,EAAMK,QAAQ,IAExBiE,aAAc,CACZ1X,SAAU,QACV2X,OAAQvE,EAAMK,QAAQ,IAExBmE,IAAK,CACHC,WAAYzE,EAAMK,QAAQ,QAIxBxK,GAAkB,SAAC6O,GAAD,OAAiB,SAAClW,GACxC,IAAII,EAAQJ,EAAEyH,cAAgBzH,EAAEyH,aAAavH,MAAM,IAAOF,EAAE7F,OAAO+F,MAAM,GACrEF,EAAE7F,QAAU6F,EAAE7F,OAAOlD,QACvB+I,EAAE7F,OAAOlD,MAAQ,IAGfmJ,GACF8V,EAAO9V,KA4SI+V,GAxSU,SAAChP,GACxB,IAAMiL,EAAUd,KAEd8E,EAOEjP,EAPFiP,SACAtJ,EAME3F,EANF2F,SACAuJ,EAKElP,EALFkP,YACA1O,EAIER,EAJFQ,SACAyG,EAGEjH,EAHFiH,OACAyH,EAEE1O,EAFF0O,QACAS,EACEnP,EADFmP,aAGIvI,EAAapG,EAASkG,UAAUG,eAGpC5D,EAGEgE,EAHFhE,QACArR,EAEEqV,EAFFrV,QACAwd,EACEnI,EADFmI,iBAIAC,EAQEJ,EARFI,YACAC,EAOEL,EAPFK,cACApY,EAME+X,EANF/X,kBACAC,EAKE8X,EALF9X,kBACAoY,EAIEN,EAJFM,aACAC,EAGEP,EAHFO,cACAC,EAEER,EAFFQ,YACA9d,EACEsd,EADFtd,kBAGF,EAAsD+d,aAAY,CAChEC,OAAQ,SAACC,GACPN,EAAcM,EAAG,OAFbC,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAAeC,EAArC,EAAqCA,aAOrC,OACE,kBAAC,IAAMC,SAAP,MACIC,KAAEC,QAAF,OAAUtJ,QAAV,IAAUA,OAAV,EAAUA,EAAYuJ,iBACtB,0BACE7N,IAAI,aACJD,KAAK,4DAGT,kBAAC+N,GAAA,EAAD,MACc,WAAbzK,GACC,kBAAC,WAAD,CACEzO,kBAAmBA,EACnBC,kBAAmBA,EACnBC,WAAW,2BAGf,8BACE,yBACEiB,UAAWgY,KACTpF,EAAQwC,YACK,YAAb9H,EAAyBsF,EAAQ2C,kBAAoB,OAGvD,kBAACjE,GAAA,EAAD,CAAWlY,SAAS,MAClB,6BACE,kBAAC6e,GAAA,EAAD,CAAQC,MAAI,GACV,yBAAKzb,MAAO,CAAEoW,UAAW,WACvB,kBAACsF,GAAA,EAAD,CAAa1b,MAAO,CAAEqW,SAAU,OAAQjB,MAAO,cAEjD,yBAAKpV,MAAO,CAAEoW,UAAW,WACvB,kBAACuF,GAAA,EAAD,CACE7F,QAAS,YACTV,MAAO,UACPrT,QAAS2Y,GAHX,mBAQF,yBAAK1a,MAAO,CAAEoW,UAAW,WACvB,kBAACjB,GAAA,EAAD,YAEF,yBAAKnV,MAAO,CAAEoW,UAAW,WACvB,2BACExS,OAAQwW,EACRzW,GAAG,qBACHD,KAAK,OACLI,SAAUsH,GAAgBqP,GAC1Bza,MAAO,CACL9C,MAAO,OACPC,OAAQ,OACR0b,SAAU,SACV7X,QAAS,KAGb,2BAAOoD,QAAQ,sBACb,kBAACuX,GAAA,EAAD,CACE7F,QAAS,YACTV,MAAO,UACPF,UAAU,QAHZ,oBAUN,kBAACsG,GAAA,EAAD,CAAQI,QAAM,GACZ,uCACE5b,MAAO,CACL6b,YAAa,SACbC,YAAa,EACbC,YAAad,EAAe,OAAS,OACrCe,aAAc,GACd3O,QAAS,GACT6L,cAAe,KAEb6B,EAAa,CACfhZ,QAAS,SAACgC,GACRA,EAAEkY,sBAIN,yBAAKjc,MAAO,CAAEoW,UAAW,WACvB,kBAAChW,GAAA,EAAD,CAAOJ,MAAO,CAAEqW,SAAU,OAAQjB,MAAO,cAE3C,yBAAKpV,MAAO,CAAEoW,UAAW,WACvB,kBAACjB,GAAA,EAAD,CAAYW,QAAQ,SAApB,kBAEF,yBAAK9V,MAAO,CAAEoW,UAAW,WACvB,kBAACjB,GAAA,EAAD,CAAYW,QAAQ,aAApB,OAEF,yBAAK9V,MAAO,CAAEoW,UAAW,WACvB,yCACExS,OAAQwW,EACRzW,GAAG,qBACHD,KAAK,QACDsX,IAJN,CAKElX,SAAUsH,GAAgBqP,GAC1Bza,MAAO,CACL9C,MAAO,OACPC,OAAQ,OACR0b,SAAU,SACV7X,QAAS,MAGb,2BAAOoD,QAAQ,sBACb,kBAACuX,GAAA,EAAD,CACE7F,QAAS,YACTV,MAAO,UACPF,UAAU,QAHZ,0BAcd,kBAACL,GAAA,EAAD,CACEtR,UAAWgY,KACTpF,EAAQ8C,SACK,YAAbpI,GAA0BsF,EAAQgD,mBAEpCxc,SAAS,MAER0d,GACC,kBAAC6B,GAAA,EAAD,CAAMlc,MAAO,CAAEmc,aAAc,OAASC,QAAQ,GAC5C,kBAAC,WAAD,CACE9gB,IAAG,OAAE+e,QAAF,IAAEA,OAAF,EAAEA,EAAc1W,GACnB9G,kBAAmBA,EACnBH,MAAK,OAAE2d,QAAF,IAAEA,OAAF,EAAEA,EAActK,OACrBtT,UAAW6d,EACXxd,QAASA,EACTH,SAAU,IACVC,UAAW,IACXG,SAAS,aAKd6c,GACC,yBAAK5Z,MAAO,CAAEoW,UAAW,WACvB,kBAACiG,GAAA,EAAD,CAAkB9Y,UAAW4S,EAAQyD,WAIzC,kBAAC7C,GAAA,EAAD,CAAMC,WAAS,EAACpB,QAAS,GACvB,kBAAC,KAAD,CACErU,KAAM4M,EACN3M,YAAa,SAAC3G,GAAD,OAAOA,EAAEsH,SAAWtH,EAAEyhB,KACnChd,MAAO,SAACzE,EAAGd,GAAJ,MAAW,CAAEiH,QAAS,EAAGub,YAAa,MAC7C9a,MAAO,SAAC5G,EAAGd,GAAJ,MAAW,CAChBiH,QAAS,CAAC,GACVub,WAAY,CAAC,GACb7a,OAAQ,CAAEC,MAAW,IAAJ5H,EAAS6H,SAAU,SAGrC,SAAC4a,GAAD,OACC,oCACGA,EAAG1c,KAAI,gBAAGxE,EAAH,EAAGA,IAAWiK,EAAd,EAAQhE,KAAcrF,EAAtB,EAAsBA,MAAtB,OACN,kBAAC6a,GAAA,EAAD,CAAMjR,MAAI,EAACxK,IAAKA,EAAKmhB,GAAI,GAAIC,GAAI,EAAGC,GAAI,GACtC,kBAACT,GAAA,EAAD,CACE3Y,UAAW4S,EAAQiD,KACnBpZ,MAAO,CACLgB,QAAS9E,EAAM8E,QACfmB,SAAU,WACV2I,UAAU,cAAD,OAAgB5O,EAAMqgB,WAAtB,QAGX,kBAACK,GAAA,EAAD,CACErZ,UAAW4S,EAAQkD,UACnB3c,MACG6I,EAAOsX,KAAOtX,EAAOsX,IAAIpG,KAC1B/K,EAASoR,WAEXC,MAAOxX,EAAOwX,QAEhB,kBAACC,GAAA,EAAD,CAAazZ,UAAW4S,EAAQoD,aAC9B,kBAACpE,GAAA,EAAD,CACE8H,cAAY,EACZnH,QAAQ,YACRZ,UAAU,KACV3R,UAAW4S,EAAQsD,aAElBlU,EAAM,OAACuM,QAAD,IAACA,OAAD,EAACA,EAAY/E,yBAEtB,kBAACoI,GAAA,EAAD,CACEW,QAAQ,QACRvS,UAAW4S,EAAQsD,aAElBlU,EAAM,OAACuM,QAAD,IAACA,OAAD,EAACA,EAAY9E,2BAGvBzH,EAAOvL,GACN,kBAACkjB,GAAA,EAAD,KACE,kBAACvB,GAAA,EAAD,CACE7F,QAAQ,WACR9V,MAAO,CAAEga,WAAY,QACrBmD,KAAK,QACL/H,MAAM,UACNrT,QACE,WACEwY,EACEhV,EAAOpD,SACPoD,EAAOvL,IAIbojB,WAAY,WACV7C,EACEhV,EAAOpD,SACPoD,EAAOvL,MAIA,OAAV8X,QAAU,IAAVA,OAAA,EAAAA,EAAYuJ,iBACX,kBAAC,IAAMH,SAAP,KACE,kBAACmC,GAAA,EAAD,KAAOvL,EAAWuJ,gBAAuB,KAtB/C,OAyBGvJ,QAzBH,IAyBGA,OAzBH,EAyBGA,EAAY7E,2BAYb,IAAnBkB,EAAQ3I,QAA6B,YAAbqL,IAA2B+I,GAClD,kBAACzE,GAAA,EAAD,CAAYW,QAAQ,KAAKC,MAAM,UAA/B,6BAKU,UAAblF,GACC,kBAACgE,GAAA,EAAD,CAAWlY,SAAS,MAClB,yBAAK4G,UAAW4S,EAAQ0D,cACtB,kBAACyD,GAAA,EAAD,CACEC,aAAW,OACXha,UAAW4S,EAAQ4D,IACnB3E,MAAM,UACNrT,QAAS4Y,GAET,kBAAC6C,GAAA,EAAD,YCnLDC,I,OA5CuB,SAAC,GAOhC,IANLlY,EAMI,EANJA,OACAvF,EAKI,EALJA,MACA0d,EAII,EAJJA,SACAC,EAGI,EAHJA,aACApD,EAEI,EAFJA,YAGI5U,EAAmB,CACrBgY,aAAc,SAAC5Z,GACbA,EAAE6Z,iBACFD,EAAapY,EAAOpD,SAAUoD,EAAOsX,IAAIpG,MAE3C8D,YAAa,SAACxW,GACZA,EAAE6Z,iBACFrD,EAAYhV,EAAOpD,SAAUoD,EAAOvL,IAEtC8iB,WAVE,EADJA,YAW4B,kCAC1BvX,UAGEsY,EAAc,KAClB,OAAQH,GACN,IAAK,MACHG,EAhIY,SAAC,GAAD,IAChBtY,EADgB,EAChBA,OACAuX,EAFgB,EAEhBA,WACAa,EAHgB,EAGhBA,aACApD,EAJgB,EAIhBA,YAJgB,OAMhB,oCACE,uBACEhN,KAAMhI,EAAOvL,EACbuJ,UAAU,YACVxB,QAAS4b,EACTP,WAAY7C,GAEZ,yBAAKhX,UAAU,YACb,yBAAKA,UAAU,WACb,yBACEc,IAAMkB,EAAOsX,KAAOtX,EAAOsX,IAAIpG,IAAM,cAAiBqG,EACtDxY,IAAKiB,EAAOwX,WAKpB,yBAAKxZ,UAAU,oBACb,6BACE,yBAAKA,UAAU,cAAcgC,EAAO+W,KACpC,yBACE/Y,UAAU,YACVvD,MAAO,CAAE7C,OAAQ,MAAOwc,WAAY,WAEnCpU,EAAOwX,OAEV,uBACE/c,MAAO,CAAE8d,gBAAiB,OAAQC,YAAa,QAC/Cxa,UAAU,gBACVgK,KAAMhI,EAAOvL,EACbkE,OAAO,SACPsP,IAAI,sBACJzL,QAASwY,EACT6C,WAAY7C,GAPd,WAiGYyD,CAAUrY,GACxB,MACF,IAAK,gBACHkY,EApFqB,SAAC,EAE1BtD,GAFyB,IACvBhV,EADuB,EACvBA,OAAQuX,EADe,EACfA,WAAYa,EADG,EACHA,aADG,OAIzB,oCACE,uBACEpQ,KAAMhI,EAAOvL,EACbuJ,UAAU,YACVxB,QAAS4b,EACTP,WAAYO,GAEZ,yBAAKpa,UAAU,YACb,yBAAKA,UAAU,WACb,yBACEc,IAAMkB,EAAOsX,KAAOtX,EAAOsX,IAAIpG,IAAM,cAAiBqG,EACtDxY,IAAKiB,EAAOwX,WAKpB,yBAAKxZ,UAAU,oBACb,6BACE,yBAAKA,UAAU,cAAcgC,EAAO+W,KACpC,yBACE/Y,UAAU,YACVvD,MAAO,CAAE7C,OAAQ,MAAOwc,WAAY,WAEnCpU,EAAOwX,OAETxX,EAAOvL,EAAE8F,KAAI,SAAC9F,GAAD,OACZ,uBACEgG,MAAO,CAAE8d,gBAAiB,OAAQC,YAAa,QAC/Cxa,UAAU,gBACVgK,KAAMvT,EAAEuT,KACRxL,QAAS,kBAAMwY,EAAYvgB,EAAEuT,OAC7B6P,WAAY,kBAAM7C,EAAYvgB,EAAEuT,OAChCrP,OAAO,SACP5C,IAAKtB,EAAEuT,KACPC,IAAI,uBAEHxT,EAAEikB,YA4CKC,CAAmBvY,GAAS,SAAC8Q,GAAD,OACxC8D,EAAYhV,EAAOpD,SAAUsU,MAE/B,MACF,IAAK,UACL,QACEoH,EAvLgB,SAAC,GAKP,IAJdtY,EAIa,EAJbA,OACAuX,EAGa,EAHbA,WACAa,EAEa,EAFbA,aACApD,EACa,EADbA,YAEA,OACE,oCACE,uBACEhN,KAAMhI,EAAOvL,EACbuJ,UAAU,YACVwZ,MAAM,0CACNhb,QAAS4b,EACTP,WAAY7C,GAEZ,yBAAKhX,UAAU,YACb,yBAAKA,UAAU,WACb,yBACEc,IAAMkB,EAAOsX,KAAOtX,EAAOsX,IAAIpG,IAAM,cAAiBqG,EACtDxY,IAAKiB,EAAOwX,WAKpB,yBAAKxZ,UAAU,oBACb,6BACE,yBAAKA,UAAU,cAAcgC,EAAOwX,OACpC,yBAAKxZ,UAAU,aACb,0BAAMA,UAAU,cA/BR,SAACgC,GAAD,OAClBA,EAAO1J,GAAU0J,EAAO1J,EAAEsiB,GAAK,KAAKC,QAAQ,GAAK,IAAM7Y,EAAO1J,EAAEzB,EAAI,GA8B5BikB,CAAY9Y,KAE5C,uBACExD,QAASwY,EACT6C,WAAY7C,EACZhX,UAAU,gBACVgK,KAAMhI,EAAOvL,EACbkE,OAAO,SACPsP,IAAI,uBANN,cAyJU8Q,CAAc3Y,GAIhC,OACE,yBAAKpC,UAAU,YAAYvD,MAAK,eAAOA,IACpC6d,KCtKQU,GA9BqC,SAAC,GAG9C,IAFLC,EAEI,EAFJA,OACAC,EACI,EADJA,sBAEA,OAAsB,IAAlBD,EAAOhZ,OACF,KAGP,6BAASjC,UAAU,iBACjB,kBAAC4R,GAAA,EAAD,CAAY5R,UAAU,yBAAtB,2CAGA,yBAAKA,UAAU,uCACb,yBAAKA,UAAU,gBACZib,EAAO1e,KAAI,SAAC/F,GACX,OACE,yBACEuB,IAAKvB,EACLsK,IAAKtK,EACLuK,IAAI,GACJvC,QAAS,kBAAM0c,EAAsB1kB,aCZtC2kB,GAbQ,SAAC,GAA8B,IAA7BC,EAA4B,EAA5BA,KACrB,OAAoB,IAAhBA,EAAKnZ,OACE,KAGP,yBAAK7B,GAAG,UAAU3D,MAAO,CAAC,UAAa,WAE/B2e,EAAK7e,KAAI,SAAChE,GAAD,OAAO,uBAAGR,IAAKQ,EAAGyR,KAAK,QAAQzR,QCGzC8iB,GAXa,SAAC,GAAD,IAAEC,EAAF,EAAEA,GAAF,OACxB,oCACKA,EAAG/e,KAAI,SAAC1F,GAAD,OACJ,2BAAOkB,IAAKlB,EAAEE,MACE,KAAXF,EAAEE,KAAc,cAAgBF,EAAEE,KAAKwkB,MAAM,OAAOC,OAAO,GAAG,GADnE,KAEgB,IAAV3kB,EAAE4kB,OAAaZ,QAAQ,GAF7B,UCcGa,GAbD,SAAC,GAAD,IAAEjQ,EAAF,EAAEA,MAAF,OACV,oCACI,yBAAKzL,UAAU,QAAQvD,MAAO,CAACoW,UAAW,WACrCpH,EAAMxJ,OAAS,GAAK,0BAAMxF,MAAO,CAACqW,SAAU,UAAxB,QAAuC,6BAAvC,KACpBrH,EAAMlP,KAAI,SAAC1F,EAAGL,GAAJ,OACP,2BAAOuB,IAAKvB,EAAGgjB,MAAO3iB,EAAEsJ,MACnBtJ,EAAEY,a,oBCOvB,SAASkkB,GAAMhU,GACb,OAAO,kBAAC,KAAD,eAAUiU,UAAW,EAAGrJ,QAAQ,UAAa5K,IAGtD,IAsSekU,GAtSQ,SAAClU,GACtB,IACEiP,EAOEjP,EAPFiP,SACAtJ,EAME3F,EANF2F,SACAuJ,EAKElP,EALFkP,YACA1O,EAIER,EAJFQ,SACAyG,EAGEjH,EAHFiH,OACAyH,EAEE1O,EAFF0O,QACAS,EACEnP,EADFmP,aAIAlM,EASEgE,EATFhE,QACAuB,EAQEyC,EARFzC,UACA9N,EAOEuQ,EAPFvQ,SACAmN,EAMEoD,EANFpD,oBACAC,EAKEmD,EALFnD,MACAF,EAIEqD,EAJFrD,cACAG,EAGEkD,EAHFlD,aACAnS,EAEEqV,EAFFrV,QACAwd,EACEnI,EADFmI,iBAIA+E,EAUElF,EAVFkF,oBACA1B,EASExD,EATFwD,aACApD,EAQEJ,EARFI,YACAC,EAOEL,EAPFK,cACApY,EAME+X,EANF/X,kBACAC,EAKE8X,EALF9X,kBACAoY,EAIEN,EAJFM,aACAC,EAGEP,EAHFO,cACAC,EAEER,EAFFQ,YACA9d,EACEsd,EADFtd,kBAGF,EAAsD+d,aAAY,CAChEC,OAAQ,SAACC,GACPN,EAAcM,EAAG,OAFbC,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAAeC,EAArC,EAAqCA,aAOrC,EAAkCqE,oBAAS,GAA3C,oBAAOC,EAAP,KAAkBC,EAAlB,KACA3gB,qBAAU,WACa,KAAjBoQ,GACFuQ,GAAa,KAEd,CAACvQ,IAEJ,IACMwQ,EAAwB9e,KAAK+e,MAA2B,IAArB1a,OAAO2a,aAC1CC,EAAmBjf,KAAKC,IAFL,IAE2B6e,GAEpD,OACI,6BACgB,WAAb5O,GACD,kBAAC,WAAD,CACEzO,kBAAoBA,EACpBC,kBAAoBA,EACpBC,WAAW,2BAGf,yBACEiB,UAAWgY,KAAW,cAAe,CACnCsE,OAAqB,YAAbhP,IAEVlN,GAAG,eAEH,yCACMoX,EAAa,CACfhZ,QAAS,SAACgC,GACRA,EAAEkY,qBAHR,CAME1Y,UAAWgY,KAAW,UAAW,wBAAyB,CACxDuE,YAAa7E,MAGf,yBAAK1X,UAAU,eACb,6BAASA,UAAU,eACjB,2BACEG,KAAK,SACLpJ,KAAK,OACLqJ,GAAG,UACHJ,UAAU,YACVK,OAAO,UACPC,QAAQ,cACR9B,QAAS,kBAAM2Y,OAEjB,2BACEhX,KAAK,OACLpJ,KAAK,OACLqJ,GAAG,eACHJ,UAAU,YACVK,OAAQwW,EACRvW,QAAQ,gBAEV,2CACMmX,IADN,CAEEtX,KAAK,OACLpJ,KAAK,OACLqJ,GAAG,cACHJ,UAAU,YACVK,OAAQwW,EACRtW,SAAUsH,2BAAgBqP,MAE5B,yBAAKlX,UAAU,aAAf,gBAEE,yBAAKA,UAAU,aAAf,OAEF,yBAAKA,UAAU,oBACb,yBAAKc,IAAI,4BAA4BC,IAAI,YAE3C,2BACEF,QAAQ,UACRb,UAAU,uBACVvD,MAAO,CAAEmc,aAAc,MAAOjf,MAAO,SAErC,0BAAMqG,UAAU,YAAhB,mBAEF,6BACA,2BACEa,QAAQ,cACRb,UAAU,cACVvD,MAAO,CAAE9C,MAAO,SAEhB,gDAEF,2BACEkH,QAAQ,UACRb,UAAU,kCAGd,kBAAC,GAAD,CACEib,OAAQ9S,EAAS6F,cACjBkN,sBAAuBY,MAI7B,yBACE9b,UAAWgY,KAAW,eAAgB,CACpCsE,OAAqB,YAAbhP,IAEV9O,QAAS,kBAAM4Y,MAEf,yBAAKpX,UAAU,WACf,yBAAKA,UAAU,YAAf,0BACA,wBAAIvD,MAAO,CAAE+f,MAAO,WAEtB,yBAAKxc,UAAU,uBACf,yBAAKA,UAAU,yBAGjB,6BACEA,UAAWgY,KACT,UACA,CAAEyE,cAA4B,YAAbnP,GACE,IAAnB1C,EAAQ3I,OAAe,gBAAkB,qBAG1CyJ,GACC,yBAAK1L,UAAU,YACZ0L,EACD,yBACEjP,MAAO,CACLoW,UAAW,SACXC,SAAU,QACVC,WAAY,UAGd,8FACgE,IAC7D5G,KAKT,kBAAC,KAAD,CACE6E,KAAMqF,EACNta,MAAO,CAAE0B,QAAS,GAClBS,MAAO,CAAET,QAAS,CAAC,GAAMU,OAAQ,CAAEE,SAAU,MAC7C4S,MAAO,CAAExT,QAAS,CAAC,GAAMU,OAAQ,CAAEE,SAAU,QAE5C,SAAC9F,GAAD,OACC,yBAAKyH,UAAU,iBAAiBvD,MAAK,eAAOlE,IAC1C,yBAAKyH,UAAU,gBAIpBmI,EAAS8F,SAAW6I,GACnB,yBAAK9W,UAAU,WACb,kBAAC,WAAD,CACEjI,IAAG,OAAE+e,QAAF,IAAEA,OAAF,EAAEA,EAAc1W,GACnB9G,kBAAoBA,EACpBH,MAAK,OAAE2d,QAAF,IAAEA,OAAF,EAAEA,EAActK,OACrBtT,UAAW6d,EACXxd,QAASA,EACTH,SAAUmI,SAASmb,KAAKC,YACxBtjB,UAAWgjB,EACX7iB,SAAS,aAIf,yBAAKwG,UAAU,wBACb,kBAAC,GAAD,CAAqBsb,GAAI9P,KAE3B,yBAAKxL,UAAU,wBACb,kBAAC,GAAD,CAAOyL,MAAOA,KAEhB,kBAAC,GAAD,CAAgB2P,KAAM7P,IACtB,yBAAKvL,UAAU,WACb,kBAAC,KAAD,CACEhC,KAAM4M,EACN3M,YAAa,SAAC3G,GAAD,OAAOA,EAAEyhB,KACtBhd,MAAO,SAACzE,EAAGd,GAAJ,MAAW,CAAEiH,QAAS,EAAGub,YAAa,MAC7C9a,MAAO,SAAC5G,EAAGd,GAAJ,MAAW,CAChBiH,QAAS,CAAC,GACVub,WAAY,CAAC,GACb7a,OAAQ,CAAEC,MAAW,IAAJ5H,EAAS6H,SAAU,SAGrC,SAAC4a,GAAD,OACC,oCACGA,EAAG1c,KAAI,gBAAGxE,EAAH,EAAGA,IAAKiG,EAAR,EAAQA,KAAMrF,EAAd,EAAcA,MAAd,OACN,kBAAC,GAAD,CACEZ,IAAKA,EACLwhB,WAAYpR,EAASoR,WACrBY,SAAUhS,EAASyU,eACnBxC,aAAcA,EACdpD,YAAaA,EACbhV,OAAQhE,EACRvB,MAAO,CACLgB,QAAS9E,EAAM8E,QACf8J,UAAU,cAAD,OAAgB5O,EAAMqgB,WAAtB,gBAQA,IAAnBpO,EAAQ3I,QACK,YAAbqL,IACC+I,GACC,yBAAKrW,UAAU,aAAf,2BAC2B,IACzB,0BAAM+J,KAAK,MAAMiQ,aAAW,YAA5B,iBAMN,wBAAIvd,MAAO,CAAE+f,MAAO,UAEnBne,GAAyB,YAAbiP,GACX,yBACE7Q,MAAO,CACLoW,UAAW,SACXC,SAAU,QACVC,WAAY,UAJhB,eAOe1U,EAASwc,QAAQ,GAPhC,YAWD1O,GAA0B,YAAbmB,GACZ,yBACE7Q,MAAO,CACLoW,UAAW,SACXC,SAAU,QACVC,WAAY,UAJhB,sBAOsB5G,KAM5B,kBAAC0Q,GAAA,EAAD,CACEC,KAAMd,EACNe,iBAAkB,IAClBnM,QAAS,kBAAMqL,GAAa,KAE5B,kBAAC,GAAD,CAAOrL,QAAS,kBAAMqL,GAAa,IAAQe,SAAS,SACjDtR,MCzRLuR,GAAmB,CAACpjB,GAAI,GAAKC,GAAI,GAAKC,GAAI,GAAKC,GAAI,IA2I1C6hB,GAzIQ,WAAO,IAAD,EACnB/K,EAAWzB,KACXsD,EAAcpD,IAAe,SAAC5W,GAAD,OAAWA,KAC9C,EAAkCojB,mBAAqBkB,IAAvD,oBAAO/jB,EAAP,KAAkBgkB,EAAlB,KAEQ/U,EAA4BwK,EAA5BxK,SAAUyG,EAAkB+D,EAAlB/D,OAAQE,EAAU6D,EAAV7D,MAEtBxD,EAIAsD,EAJAtD,gBACAD,EAGAuD,EAHAvD,gBACAD,EAEAwD,EAFAxD,aACAD,EACAyD,EADAzD,eAEImC,EAAawB,EAAbxB,SAGRhS,qBAAU,WAEF4hB,EADA/R,GAGa8R,MAElB,CAAC9R,IAEJ,IAAM0L,EAAc,CAAC,WAChBnU,OAAOyF,EAASgV,UAAYC,iBAAgB,IAC5CjZ,KAAK,KAQV,IAOMkZ,EAAW,yCAAG,WAAOzc,GAAP,0BAAApF,EAAA,kEAEZsV,EAASlE,KACTkE,EAASpD,OACL9M,aAAgB0c,MAAQC,qBAAU3c,IAJ1B,iCAKQoU,GAAcpU,EAAMuH,GAL5B,OAKJsI,EALI,OAMRK,EAAS7E,EAAiBwE,IANlB,yCAQU8D,GAAY3T,GARtB,WAQJzH,EARI,OASR2X,EAASvE,EAAgBpT,KAErBgP,EAAS5O,QAXL,kCAeMmb,GAAYvb,EAAOgP,GAfzB,iBAaSqV,EAbT,EAaAjkB,QACgBkkB,EAdhB,EAcAtS,eAEJuS,EAAeD,EACf3M,EAASzE,EAAWmR,IACpB1M,EAASxE,EAAkBoR,IAlBvB,iCAoBD5I,GAAY3b,EAAOwZ,EAAYxK,SAAUuV,GAAcle,MAAK,SAACiR,GAChEK,EAAS7E,EAAiBwE,IAC1BK,EAASnD,SAtBL,0DA2BZmD,EAAS1D,EAAS,6EA3BN,0DAAH,sDAgCXuQ,EAAyBC,sBAC3BC,qBAAS,SAAApmB,GACLqZ,EAASpE,EAAiBjV,IAC1B4Y,GAAmBsC,EAAalb,GAChCqd,GAAY1J,EAAeoB,OAAQrE,EAAU1Q,GAAO+H,MAAK,SAACiR,GACtDK,EAAShE,EAAyB2D,IAClCK,EAASnD,QACVhO,OAAM,SAAAa,GAAC,OAAIuK,QAAQ+S,KAAK,QAAStd,QACrC,MACH,CAAC4K,EAAcuH,IAGbiE,EAAyB,CAC3BkF,oBAAqB,SAAA5I,GACjBmK,EAAYnK,IAEhBiE,cAAe,kBAAMrG,EAASrD,IAC9B3O,kBAAmB,kBAAMgS,EAAStD,IAClC3O,kBAAmB,SAACrI,GAAD,OAAO6mB,EAAY7mB,IACtCunB,gBAAiB,kBAAMjN,EAASlD,IAChCqJ,cAAe,SAAC+G,GAAD,OAAOX,EAAYW,IAClC5D,aAAc,SAACxb,EAAUsU,GACrBmK,EAAYnK,GACZrD,GAAkB8C,EAAa/T,IAEnCoY,YAhEgB,SAACiH,EAAmB/K,GACpCrD,GAAkB8C,EAAasL,GAAWte,MAAMoL,QAAQ+S,MACpD5K,GACAzR,OAAOqb,KAAK5J,IA8DhBnC,mBAAoB,WAChBD,EAASjD,KACT4B,GAAoBkD,GAAa,IAErCuL,mBAAoB,WAChBpN,EAAShD,KACT2B,GAAoBkD,GAAa,IAErCuE,aAAc,SAAC8G,GAAD,OAAOX,EAAYW,IACjC1kB,kBAAmB,SAAAhC,GACf4lB,EAAa5lB,GACbqmB,EAAuBrmB,IAE3B8f,YAAa,WACTtG,EAAStD,KAlFb/L,OAAO0c,SAAS,CAAEC,IAAK,EAAGC,KAAM,EAAGC,SAAU,aAuF7C3W,EAAmB,CACnBiH,OAAO,2BACAA,GADD,IAEFmI,iBAAkB7d,IAEtBiP,WACA2O,aAAclI,EAAOxD,aACrByL,cACAvJ,WACAsJ,WACAP,QAAS/K,GAAmBD,EAC5BkD,WAAYpG,EAASkG,UAAUG,gBAAkBvF,EACjDsE,cAAeuB,EAAMvB,eAIzB,OAAO,UAAApF,EAASkG,UAAUG,sBAAnB,eAAmCF,QAAQ,kBAACiQ,GAAU5W,GAAW,kBAAC,GAAQA,I,4DC2BtE6W,OAtKf,SAAsB7W,GACpB,IAAM8W,EAAUC,cACV5N,EAAWzB,KACTwH,EAA4ClP,EAA5CkP,YAAa8H,EAA+BhX,EAA/BgX,gBAAiBC,EAAcjX,EAAdiX,UAChCjM,EAAcpD,IAAe,SAAC5W,GAAD,OAAWA,KACtCwP,EAAawK,EAAbxK,SACR,EAAgD4T,oBAAc,GAA9D,oBAAO8C,EAAP,KAA0BC,EAA1B,KAEA,EAAsDzH,aAAY,CAChEC,OAAO,WAAD,8BAAE,WAAOC,GAAP,oBAAA/b,EAAA,6DACNmjB,GAAgB,GAChB5T,QAAQC,IAAI,OAERa,EAAiB,GACrBiT,GAAmB,GACnB/T,QAAQC,IAAI,KAAMuM,GANZ,SAQYhD,GAAYgD,EAAG,IAR3B,cAQFpe,EARE,OASN2X,EAASvE,EAAgBpT,IATnB,kBAWC2b,GAAY3b,EAAOwZ,EAAYxK,UAAU3I,MAAK,SAACiR,GAoBpD,OAnBA1F,QAAQC,IAAI,eAAgByF,GAEzB,OAAHA,QAAG,IAAHA,KAAK7F,QAAQrO,KAAI,SAACgG,GAChBsJ,EAAQ3I,KAAK,CACX6V,IAAKxW,EAAKwW,IACV0C,MAAOlZ,EAAKkZ,WAGhBvP,EAAO,2BACFuE,GADE,IAGL5E,YAEFd,QAAQC,IAAI,UAAWkB,GAEvB4E,EAAS7E,EAAiBC,IAC1B4S,GAAmB,GACnBH,GAAgB,GAChBF,EAAQvb,KAAK,WACN4N,EAASnD,SA/BZ,4CAAF,mDAAC,KADD6J,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAAeC,EAArC,EAAqCA,aAqC/BqH,EAAkB,yCAAG,WAAO7L,EAAatU,GAApB,oBAAApD,EAAA,6DACzBmjB,GAAgB,GAChB7N,EAASpD,KACToD,EAASlE,KACLhO,GACFiR,GAAkB8C,EAAa/T,GALR,SAQP2V,GAAYrB,GARL,UAQrB/Z,EARqB,OASzB2X,EAASvE,EAAgBpT,IACrBukB,OAAsCxS,GACtC/C,EAAS5O,QAXY,kCAYPmb,GAAYvb,EAAOgP,GAZZ,QAYnBsI,EAZmB,OAavBK,EAASzE,EAAWoE,EAAIlX,UACxBmkB,EAAejN,EAAItF,eACnB2F,EAASxE,EAAkBoR,IAfJ,iCAiBlB5I,GAAY3b,EAAOwZ,EAAYxK,SAAUuV,GAAcle,MAAK,SAACiR,GAIlE,OAHAK,EAAS7E,EAAiBwE,IAC1BkO,GAAgB,GAChBF,EAAQvb,KAAK,WACN4N,EAASnD,SArBO,4CAAH,wDAyBxB,OACE,kBAACyF,GAAA,EAAD,CACEpT,UACG0X,GAAiBmH,EAAlB,4CAKDD,GACC,kBAACxL,GAAA,EAAD,CAAKpT,UAAU,iBACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,sBAInB,uCACEA,UAAS,aACTvD,MAAO,CAAEmC,SAAU,aACf4Y,EAAa,CACfhZ,QAAS,SAACgC,GACRA,EAAEkY,sBAILhB,EACC,kBAACtE,GAAA,EAAD,KACE,kBAACxB,GAAA,EAAD,CAAY5R,UAAU,kBAAtB,QACO,0BAAMA,UAAU,WAAhB,KADP,SAGA,2CACMyX,EAAc,CAChBjZ,QAAS,SAACgC,GACRA,EAAEkY,qBAHR,CAMEvY,KAAK,OACLpJ,KAAK,OACLqJ,GAAG,cAEH4e,YAAY,eACZ3e,OAAQwW,EACRtW,SAAUsH,4BAAgB,SAACrH,WAI/B,oCACE,kBAAC4S,GAAA,EAAD,eACEpT,UAAU,oBACNwX,EAAa,CACfhZ,QAAS,SAACgC,GACRA,EAAEkY,sBAIN,kBAACtF,GAAA,EAAD,CAAKpT,UAAU,aACb,yBACErG,MAAO,GACPC,OAAQ,GACRkH,IAAKme,KACLle,IAAI,iBAGR,2BAAOF,QAAQ,cAAcb,UAAU,sBACrC,0BAAMA,UAAU,YAAhB,gBADF,2BAIA,2CACMyX,IADN,CAEEtX,KAAK,OACLpJ,KAAK,OACLqJ,GAAG,cACHJ,UAAU,YACVgf,YAAY,eACZviB,MAAO,CAAE+U,QAAS,aAOtB,kBAAC4B,GAAA,EAAD,CAAK3W,MAAO,CAAEgZ,UAAW,GAAIyJ,OAAQ,KAAOlf,UAAU,aACpD,kBAACoT,GAAA,EAAD,CAAK5B,QAAS,OAAQ2N,WAAY,YAChC,kBAAC,GAAD,CACElE,OAAQ9S,EAAS6F,cACjBkN,sBAAuB,SAAChI,GACtB,OAAO6L,EAAmB7L,Y,kFCvG/BkM,GADSC,cAjEN,SAAC,GAAyD,IAAvDC,EAAsD,EAAtDA,kBAAoCC,GAAkB,EAAnCC,gBAAmC,EAAlBD,QACjDE,EAAgBrlB,mBAChBqkB,EAAUC,cAChB,EAA4B3C,oBAAkB,GAArC2D,EAAT,qBACA,EAAoC3D,mBAAiB,IAArD,oBAAO4D,EAAP,KAAmBC,EAAnB,KACM9O,EAAWzB,KAEjB/T,qBAAU,YACR,OAAImkB,QAAJ,IAAIA,OAAJ,EAAIA,EAAUlkB,WACJ,OAARkkB,QAAQ,IAARA,KAAUlkB,QAAQskB,WAEnB,CAACJ,IAEJnkB,qBAAU,WAERskB,EAAcN,KAEb,CAACA,IAEJhkB,qBAAU,WACJqkB,EAAW1d,OAAS,GACtByd,GAAgB,GAElBA,GAAgB,KACf,CAACC,IAEJ,IAAMG,EAAiBlC,sBACrBC,qBAAS,SAACkC,GAAD,OAAoBR,EAAOQ,KAAY,GAChD,IAGF,OACE,kBAAC3M,GAAA,EAAD,CAAKpT,UAAU,qBACb,kBAACoT,GAAA,EAAD,CAAK9a,EAAG,EAAGkZ,QAAS,OAAQxR,UAAU,oBACpC,0BAAMggB,YAAU,EAACtJ,OAAO,GAAG3M,KAAK,UAC9B,2BACEtN,MAAO,CAAEwjB,OAAQ,MAAOtmB,MAAO,QAC/BqG,UAAU,eACVvI,MAAOkoB,EACPpf,SAAU,SAACqP,GACTgQ,EAAchQ,EAAMsQ,cAAczoB,OAClCqoB,EAAelQ,EAAMsQ,cAAczoB,QAErCkG,IAAK8hB,IAEwB,YAA9BhB,EAAQ3V,SAASqK,UAChB,kBAACiF,GAAA,EAAD,CACEpY,UAAU,iBACVxB,QAAS,WACPohB,EAAc,IACdL,EAAO,IACPzO,EAAS7D,EAAM,KACfwR,EAAQvb,KAAK,OAIf,kBAAC,KAAD,CAAmBzG,MAAO,CAAEqW,SAAU,GAAIjB,MAAO,oB,UC/DzDsO,G,QAAaC,EAAMtoB,SAEZuoB,GAAkB,yCAAG,WAAOlY,GAAP,sBAAA3M,EAAA,6DACxB0M,EAAmBC,EAAnBD,OAAQiG,EAAWhG,EAAXgG,QACZmS,EAAU,CACZ,YAAapY,GAHiB,SAKXiY,GAAWI,QAAQ,CACtCC,OAAQ,OACRtN,IAAI,GAAD,OAAK/E,EAAL,oBACHmS,YAR8B,cAK5BG,EAL4B,yBAUzBA,EAASziB,KAAK0iB,SAVW,2CAAH,sDCwGhBC,OAxFf,SAAuBhZ,GACrB,IAAMmJ,EAAWzB,KACXoP,EAAUC,cAChB,EAA6BnP,IAAe,SAAC5W,GAAD,OAAWA,KAA/CwP,EAAR,EAAQA,SAAUyG,EAAlB,EAAkBA,OAClB,EAAgDmN,mBAAc,IAA9D,oBAAO6E,EAAP,KAAyBC,EAAzB,KACA,EAAgC9E,oBAAkB,GAAlD,oBAAO6C,EAAP,KAAkBkC,EAAlB,KACA,EAAqC3Y,EAAS4Y,QAAtC7Y,EAAR,EAAQA,OAAQ8Y,EAAhB,EAAgBA,MAAOC,EAAvB,EAAuBA,UACjBC,EAAeC,KAAcH,EAAO9Y,GAC1CgZ,EAAaE,UAAUH,GAEvB3lB,qBAAU,YACW,yCAAG,6BAAAE,EAAA,sEACA6kB,GAAmBlY,GADnB,OAChB+D,EADgB,OAEpB4E,EAAS5D,EAAiBhB,IAFN,2CAAH,qDAKnBmV,GAAgB1hB,MAAMoL,QAAQC,OAE7B,IAEH,IAAM6L,EAAc,CAAC,WAClBnU,OAAOyF,EAASgV,UAAYC,iBAAgB,IAC5CjZ,KAAK,KAUFmd,EAAqBC,cARN,SAAC,GAAkB,EAAhBC,KACtB,OAAO,iCASHC,GAAwB,OAAC7S,QAAD,IAACA,OAAD,EAACA,EAAQxD,cAEnC,CAAC,+BADD,GAGEsW,GAAwB,OAAN9S,QAAM,IAANA,OAAA,EAAAA,EAAQhE,SAAR,OACpBgE,QADoB,IACpBA,OADoB,EACpBA,EAAQhE,QAAQ4Q,QAAQmG,UAAUplB,KAChC,SAACyhB,EAAQxnB,GAAT,qBAA+BwnB,EAAEjF,IAAjC,mBAA+CviB,EAA/C,QAEF,GACEorB,EAAgB,UAAIH,EAAJ,aAAuBC,IAAYvd,KAAK,QAE9D,OACE,kBAACiP,GAAA,EAAD,CAAKpT,UAAS,2BAAsB4e,EAAY,UAAY,KAC1D,kBAACiD,GAAA,EAAD,CACEZ,UAAWA,EACXC,aAAcA,EACdvO,YAAaiO,EACbkB,oBAAqB,SAACnpB,GACpBkoB,EAAoBloB,GACpBmY,EAAS/D,EAAsBpU,IAC/B8lB,EAAQvb,KAAK,aAGf,kBAACkQ,GAAA,EAAD,CAAKpT,UAAU,mBACb,yBAAKA,UAAU,YACb,yBAAKc,IAAKihB,KAAepoB,MAAO,GAAIC,OAAQ,GAAImH,IAAI,eAEtD,yBAAKf,UAAU,aACb,yBAAKA,UAAU,qBACb,kBAACgiB,GAAA,EAAD,CAAWnW,QAAS+V,IACpB,yBAAKnlB,MAAO,CAAE+U,QAAS,SACrB,kBAAC8P,EAAD,OAEF,kBAAC,GAAD,QAGJ,yBAAKthB,UAAU,cACb,kBAAC4R,GAAA,EAAD,CAAY5R,UAAU,eAAtB,mDAKJ,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,sBACb,kBAAC,GAAD,CACE6W,YAAaA,EACb+H,UAAWA,EACXD,gBApDc,SAAClnB,GACvBqpB,EAAWrpB,UCjCAwqB,OARf,WAA6B,IAAD,EAGtBC,GAAc,UAFG3S,IAAe,SAAC5W,GAAD,OAAWA,KAAvCwP,SACAkG,UACoB8T,mBAAV,eAAuB7T,QAASqS,GAAgB9E,GAElE,OAAO,kBAACqG,EAAD,O,sMC4IME,OAtIf,SAAoBza,GAClB,IACE0a,EAME1a,EANF0a,SACAC,EAKE3a,EALF2a,mBACAC,EAIE5a,EAJF4a,wBAHF,EAOI5a,EAHF6a,eAJF,SAKEC,EAEE9a,EAFF8a,cACAC,EACE/a,EADF+a,gBAEMpJ,EAAqC+I,EAArC/I,IAAKP,EAAgCsJ,EAAhCtJ,IAAKS,EAA2B6I,EAA3B7I,MAAOmJ,EAAoBN,EAApBM,gBAEzB,OACE,kBAACvP,GAAA,EAAD,CAAKpT,UAAU,yBACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,YACXwiB,GACA,kBAACpP,GAAA,EAAD,CAAKpT,UAAU,kBACb,kBAACoY,GAAA,EAAD,CACE5Z,QAAS,SAACgC,GACRA,EAAE6Z,iBACFoI,EAAcE,KAIhB,yBACE7hB,IAAK8hB,KACL7hB,IAAI,aACJpH,MAAO,GACPC,OAAQ,OAMhB,kBAACwZ,GAAA,EAAD,CAAKpT,UAAU,aACb,kBAACoY,GAAA,EAAD,CACE3b,MAAO,CAAE9C,MAAO,OAAQC,OAAQ,OAAQkQ,QAAS,EAAGoV,OAAQ,GAC5D1gB,QAAS8jB,GAET,yBACExhB,KAAQ,OAAHwY,QAAG,IAAHA,OAAA,EAAAA,EAAKpG,KAAL,OAAWoG,QAAX,IAAWA,OAAX,EAAWA,EAAKpG,IAAMyP,EAC3B5hB,IAAI,aACJf,UAAU,eAGbwiB,GACC,kBAACpP,GAAA,EAAD,CAAKpT,UAAU,aACb,kBAACoY,GAAA,EAAD,qBAKR,kBAAChF,GAAA,EAAD,CACEpT,UAAU,cACVwR,QAAS,OACT/U,MAAO,CAAE8U,cAAe,WAExB,kBAAC6B,GAAA,EAAD,CAAKpT,UAAU,WACb,kBAACwT,GAAA,EAAD,CAAMC,WAAS,EAACoP,eAAe,iBAC7B,kBAACrP,GAAA,EAAD,CAAMjR,MAAI,EAAC2W,GAAI,IACb,kBAACtH,GAAA,EAAD,CAAY5R,UAAU,sBAAtB,QAAiD+Y,GACjD,kBAACnH,GAAA,EAAD,CAAY5R,UAAU,gCACnBwZ,IAGL,kBAAChG,GAAA,EAAD,CAAMjR,MAAI,GACR,kBAAC6V,GAAA,EAAD,CAAQpY,UAAU,YAChB,yBACEc,IAAKgiB,KACL/hB,IAAI,aACJf,UAAU,oBAOpB,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,cACb,kBAACwT,GAAA,EAAD,CAAMC,WAAS,EAACoP,eAAe,gBAAgB1D,WAAW,UACxD,kBAAC3L,GAAA,EAAD,CAAMjR,MAAI,GACR,kBAAC6Q,GAAA,EAAD,CAAK5B,QAAS,OAAQ2N,WAAY,UAChC,kBAAC/G,GAAA,EAAD,CACEpY,UAAU,WACVxB,QAAS,kBAAMkkB,EAAgB,UAE/B,yBACE5hB,IAAKiiB,KACLhiB,IAAI,aACJf,UAAU,iBAGd,kBAACoY,GAAA,EAAD,CACEpY,UAAU,WACVxB,QAAS,kBAAMkkB,EAAgB,aAE/B,yBACE5hB,IAAKkiB,KACLjiB,IAAI,aACJf,UAAU,mBAKlB,kBAACwT,GAAA,EAAD,CAAMjR,MAAI,GACR,kBAAC6Q,GAAA,EAAD,CAAK5B,QAAS,OAAQ2N,WAAY,UAChC,kBAAC/G,GAAA,EAAD,CAAQpY,UAAU,WAAWxB,QAAS+jB,GACpC,yBACEzhB,IAAKmiB,KACLliB,IAAI,aACJf,UAAU,iBAGd,kBAACoY,GAAA,EAAD,CAAQpY,UAAU,YAChB,kBAACoT,GAAA,EAAD,CACEpT,UAAU,mCACVwR,QAAS,OACTqR,eAAgB,SAChB1D,WAAY,UAEZ,yBACEre,IAAKgT,KACL/S,IAAI,aACJf,UAAU,0B,+DC/FjBkjB,OArCf,SAAsBvb,GACpB,IAAOiH,EAAUjH,EAAViH,OAEP,OACE,kBAAC4E,GAAA,EAAD,CACEC,WAAS,EACToP,eAAe,gBACf1D,WAAW,SACX1iB,MAAO,CAAE7C,OAAQ,SAEjB,kBAAC4Z,GAAA,EAAD,CACEjR,MAAI,EACJvC,UAAU,cACVvD,MAAO,CAAE0mB,YAAa,oBAAqBC,SAAU,KAErD,kBAACxR,GAAA,EAAD,CAAY5R,UAAU,uBACnB4O,EAAOhE,QAAQ3I,OADlB,aAIF,kBAACuR,GAAA,EAAD,CAAMjR,MAAI,EAACvC,UAAU,eACnB,kBAAC4R,GAAA,EAAD,CAAY5R,UAAU,uBAAtB,yEACoE,IAClE,kBAAC,IAAD,CAAMqT,GAAI,KAAV,mBAFF,MAKF,kBAACG,GAAA,EAAD,CAAMjR,MAAI,EAACvC,UAAU,cAAcvD,MAAO,CAAE2mB,SAAU,KACpD,kBAACxR,GAAA,EAAD,CAAY5R,UAAU,WACpB,kBAACoT,GAAA,EAAD,KACE,kBAAC,KAAD,CAAmB3W,MAAO,CAAEoV,MAAO,UAAWiB,SAAU,KACxD,kBAAC,KAAD,CAAmBrW,MAAO,CAAEoV,MAAO,UAAWiB,SAAU,W,UCXrDuQ,OAlBf,SAAsB1b,GACpB,IAAQyM,EAA6CzM,EAA7CyM,SAAR,EAAqDzM,EAAnC2b,iBAAlB,SAAqCC,EAAgB5b,EAAhB4b,YAErC,OACE,kBAACC,GAAA,EAAD,CACE1G,KAAMwG,EACN1S,QAAS2S,EACT9mB,MAAO,CACL+U,QAAS,OACTqR,eAAgB,SAChB1D,WAAY,WAGb/K,I,yECyBQqP,OAtCf,SAAyB9b,GACvB,IAAQ+b,EAAY/b,EAAZ+b,QAGR,OAFA3Y,QAAQC,IAAI,UAAW0Y,GAGrB,kBAAC,YAAD,CACEC,YAAY,EACZC,cAAc,EACdC,YAAY,EACZ7jB,UAAW0jB,EAAQzhB,OAAS,EAAI,GAAK,iBACrC6hB,gBAAiB,SAACC,EAAgBC,EAASC,GAA1B,OACf,kBAAC7L,GAAA,EAAD,CAAQ5Z,QAASulB,EAAgB/jB,UAAU,sBACzC,kBAAC,KAAD,CACEA,UAAU,UACVvD,MAAO,CAAEoV,MAAO,eAItBqS,gBAAiB,SAACH,EAAgBC,EAASC,GAA1B,OACf,kBAAC7L,GAAA,EAAD,CAAQ5Z,QAASulB,EAAgB/jB,UAAU,qBACzC,kBAAC,KAAD,CACEA,UAAU,UACVvD,MAAO,CAAEoV,MAAO,gBAjBxB,OAsBG6R,QAtBH,IAsBGA,OAtBH,EAsBGA,EAASnnB,KAAI,SAACgG,EAAWI,GACxB,OACE,kBAACyQ,GAAA,EAAD,CAAKrb,IAAK4K,EAAOlG,MAAO,CAAC7C,OAAQ,SAC/B,yBAAK6C,MAAO,CAAC7C,OAAQ,QAASkH,IAAK4iB,EAAO,OAAGnhB,QAAH,IAAGA,OAAH,EAAGA,EAAM2Q,IAAM,GAAInS,IAAI,wBCuI9DojB,OAnJf,SAAoBxc,GAClB,IACEyc,EAIEzc,EAJFyc,kBACA/B,EAGE1a,EAHF0a,SACAgC,EAEE1c,EAFF0c,oBACA5B,EACE9a,EADF8a,cAGWjJ,GAAgC6I,EAArC/I,IAAqC+I,EAAhC7I,OAAOT,EAAyBsJ,EAAzBtJ,IAAK4J,EAAoBN,EAApBM,gBACzB,EAAkD5G,mBAAgB,IAAlE,oBAAOuI,EAAP,KAA0BC,EAA1B,KAEAjpB,qBAAU,WACRkpB,EAAoBnC,KACnB,CAACA,IAEJ,IAAMmC,EAAsB,SAACnC,GAC3B,IAAKA,EACH,OAAOkC,EAAqB,IAE9B,IAAIE,EAAkB,GAChBC,EAAYrC,EAClB,IAAK,IAAItqB,KAAO2sB,GACd,OAAI3sB,QAAJ,IAAIA,OAAJ,EAAIA,EAAK4sB,SAAS,2BACX9M,mBAAQ6M,EAAU3sB,KACrB0sB,EAASvhB,KAAK,CACZgQ,IAAKwR,EAAU3sB,KAIP,oBAARA,GACF0sB,EAASvhB,KAAK,CACZgQ,IAAKwR,EAAU3sB,KAKvBwsB,EAAqBE,IAGvB,OACE,kBAACrR,GAAA,EAAD,CAAKpT,UAAU,qBACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,UAAUvD,MAAO,CAAE9C,MAAO,cAAewb,YAAa,IACnE,kBAACiD,GAAA,EAAD,CAAQ3b,MAAO,CAAEqN,QAAS,GAAKtL,QAAS4lB,GACtC,kBAAC,KAAD,CAAmB3nB,MAAO,CAAEqW,SAAU,GAAIjB,MAAO,eAIrD,kBAACuB,GAAA,EAAD,CAAKpT,UAAU,eACb,kBAAC,GAAD,CAAiB0jB,QAASY,IAC1B,kBAAClM,GAAA,EAAD,CACEpY,UAAU,aACVxB,QAAS,WACFmkB,GAKLF,EAAcE,GACdyB,KALErZ,QAAQC,IAAI,SAQhB,yBAAKlK,IAAK8jB,KAAa7jB,IAAI,mBAI/B,kBAACqS,GAAA,EAAD,CACEpT,UAAU,cACVwR,QAAS,OACT/U,MAAO,CAAE8U,cAAe,WAExB,kBAAC6B,GAAA,EAAD,CAAKpT,UAAU,WACb,kBAACwT,GAAA,EAAD,CAAMC,WAAS,EAACoP,eAAe,iBAC7B,kBAACrP,GAAA,EAAD,CAAMjR,MAAI,EAAC2W,GAAI,IACb,kBAACtH,GAAA,EAAD,CAAY5R,UAAU,6BAAtB,QACQ+Y,GAER,kBAACnH,GAAA,EAAD,CAAY5R,UAAU,6BACnBwZ,GAEH,kBAAC,IAAD,CAAMxZ,UAAU,oBAAoBqT,GAAI,IAAKrJ,KAAK,KAAlD,0BAIF,kBAACwJ,GAAA,EAAD,CAAMjR,MAAI,GACR,kBAAC6V,GAAA,EAAD,CAAQpY,UAAU,YAChB,yBACEc,IAAKgiB,KACL/hB,IAAI,aACJf,UAAU,oBAOpB,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,cACb,kBAACwT,GAAA,EAAD,CAAMC,WAAS,EAACoP,eAAe,gBAAgB1D,WAAW,UACxD,kBAAC3L,GAAA,EAAD,CAAMjR,MAAI,GACR,kBAAC6Q,GAAA,EAAD,CAAK5B,QAAS,OAAQ2N,WAAY,UAChC,kBAAC/G,GAAA,EAAD,CAAQpY,UAAU,YAChB,yBACEc,IAAKiiB,KACLhiB,IAAI,aACJf,UAAU,iBAGd,kBAACoY,GAAA,EAAD,CAAQpY,UAAU,YAChB,yBACEc,IAAKkiB,KACLjiB,IAAI,aACJf,UAAU,mBAKlB,kBAACwT,GAAA,EAAD,CAAMjR,MAAI,GACR,kBAAC6Q,GAAA,EAAD,CAAK5B,QAAS,OAAQ2N,WAAY,UAChC,kBAAC/G,GAAA,EAAD,CAAQpY,UAAU,WAAWxB,QAAS6lB,GACpC,yBACEvjB,IAAKmiB,KACLliB,IAAI,aACJf,UAAU,iBAGd,kBAACoY,GAAA,EAAD,CAAQpY,UAAU,YAChB,kBAACoT,GAAA,EAAD,CACEpT,UAAU,mCACVwR,QAAS,OACTqR,eAAgB,SAChB1D,WAAY,UAEZ,yBACEre,IAAKgT,KACL/S,IAAI,aACJf,UAAU,0B,mDCtIhC,IACe6kB,GADaC,cAvB5B,YAOQ,EANNnS,YAMM,EALNoS,cAKO,IAJP3Q,EAIM,EAJNA,SAKA,GADM,EAHNoL,gBAGM,EAFNwF,wBAEM,EADNC,UAEoBlJ,oBAAkB,IAA/B6C,EAAP,qBAEA,OACE,oCACGA,GACC,kBAACxL,GAAA,EAAD,CAAKpT,UAAU,oBACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,iBACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,uBAIpBoU,MCyBD6I,GAAmB,CAACpjB,GAAI,GAAKC,GAAI,GAAKC,GAAI,GAAKC,GAAI,IAiX1CkrB,OAhXf,SAAyBvd,GACvB,IAAMmJ,EAAWzB,KACX8V,EAAc5V,IAAe,SAAC5W,GAAD,OAAWA,KAC9C,EAA4CojB,oBAAkB,GAA9D,oBAAOqJ,EAAP,KAAoBC,EAApB,KACA,EAA8CtJ,oBAAkB,GAAhE,oBAAOuJ,EAAP,KAAwBC,EAAxB,KACA,EAA8CxJ,oBAAkB,GAAhE,oBAAOyJ,EAAP,KAAyBC,EAAzB,KACA,EAAwC1J,mBAAiB,GAAzD,oBAAO2J,EAAP,KAAqBC,EAArB,KACA,EAA8C5J,oBAAkB,GAAhE,oBAAO6J,EAAP,KAAyBC,EAAzB,KACQjX,EAAqBuW,EAArBvW,OAAQzG,EAAagd,EAAbhd,SACRyC,EAAmDgE,EAAnDhE,QAASQ,EAA0CwD,EAA1CxD,aAAc7R,EAA4BqV,EAA5BrV,QAAS4R,EAAmByD,EAAnBzD,eAChCQ,EAAoBiD,EAApBjD,gBACR,EAAoCoQ,mBAAgB,IAApD,oBAAO+J,EAAP,KAAmBC,EAAnB,KACA,EAA4ChK,qBAA5C,oBAAOiK,EAAP,KAAuBC,EAAvB,KACA,EAAgDlK,mBAAc,IAA9D,oBAAO6E,EAAP,KAAyBC,EAAzB,KACA,EAAgC9E,oBAAc,GAA9C,qBAAO6C,GAAP,MAAkBkC,GAAlB,MACA,GAAqC3Y,EAAS4Y,QAAtC7Y,GAAR,GAAQA,OAAQ8Y,GAAhB,GAAgBA,MAAOC,GAAvB,GAAuBA,UACjBC,GAAeC,KAAcH,GAAO9Y,IACpCvF,GAAQue,GAAaE,UAAUH,IAErC3lB,qBAAU,WACHqQ,GAGLkV,EAAoBlV,KACnB,CAACA,IAEJrQ,qBAAU,WACgB,KAAb,OAAPsP,QAAO,IAAPA,OAAA,EAAAA,EAAS3I,QAIb8jB,EAAcnb,GAHZmb,EAAc,MAIf,CAACnb,IAEJtP,qBAAU,WACR,OAGOiqB,GAHFH,KAIJ,CAACA,IAGJ,IAuBMc,GAAoBrI,qBAAS,SAACpmB,GAGlC,OAFAqZ,EAASpE,EAAiBjV,IAC1BqpB,IAAW,GACJqF,GAAqB1uB,KAC3B,KAGG0uB,GAAuB,SAAC7uB,GAC5B,GAAK8T,EAAL,CAGA,IAAQoB,EAAgBpB,EAAhBoB,OACRsI,GAAYtI,EAAQ2Y,EAAYhd,SAAU7Q,GAAGkI,MAAK,SAACiR,GACjD,IAAMvE,EAAO,eACRuE,GAIL,OAFAK,EAAS3D,EAA2BjB,IACpC4U,IAAW,GACJhQ,EAASnD,UAKdyY,GAAwB,yCAAG,WAAOzT,GAAP,kBAAAnX,EAAA,kEAEF,MAAZ,OAAXmX,QAAW,IAAXA,OAAA,EAAAA,EAAa3C,OAFY,gCAGRrN,GAAMiM,OAAsB+D,EAAY3C,MAAO,IAHvC,cAGrBhS,EAHqB,OAIrBkS,EAAalS,EAAKwjB,KAAKjlB,KAAI,SAAC8pB,GAAD,OAASA,EAAItN,OAJnB,SAKrBhJ,GAAuBoV,EAAannB,EAAKgS,MAAOhS,EAAKiS,KAAMC,GALtC,gEAQ7BnF,QAAQC,IAAI,kBAAZ,MAR6B,6EAAH,sDAaxBsb,GAAkB,yCAAG,WAAOnmB,GAAP,UAAA3E,EAAA,+EACzBiU,GAAoB0V,EAAsB,SAAThlB,IADR,2CAAH,sDAIlB4e,GAAkB,yCAAG,WAAO7L,EAAatU,GAApB,oBAAApD,EAAA,6DACzBsV,EAASpD,KACToD,EAASlE,KAFgB,SAGP2H,GAAYrB,GAHL,UAGrB/Z,EAHqB,QAIrByF,EAJqB,uBAKvBiR,GAAkBsV,EAAavmB,GALR,6BAQrB8e,OAAwCxS,GACxC/C,EAAS5O,QATY,kCAUPmb,GAAYvb,EAAOgP,GAVZ,QAUnBsI,EAVmB,OAWvBiN,EAAejN,EAAItF,eACnB2F,EAASzE,EAAWoE,EAAIlX,UACxBuX,EAASxE,EAAkBoR,IAbJ,QAgBzB5I,GAAY3b,EAAOgP,EAAUuV,GAAcle,MAAK,SAACiR,GAG/C,OAFAK,EAAS7E,EAAiBwE,IAC1BqQ,IAAW,GACJhQ,EAASnD,QAnBO,4CAAH,wDA8ClB8T,GAAyBrW,EAE3B,CAAC,+BADD,GAEEsW,IAAwB,OAAN9S,QAAM,IAANA,OAAA,EAAAA,EAAQhE,SAAR,OAClBgE,QADkB,IAClBA,OADkB,EAClBA,EAAQhE,QAAQ4Q,QAAQmG,UAAUplB,KAChC,SAACyhB,EAAQxnB,GAAT,qBAA+BwnB,EAAEjF,IAAjC,mBAA+CviB,EAA/C,QAEJ,GACEorB,GAAgB,UAAIH,GAAJ,aAAuBC,KAAYvd,KAAK,QAC9D,OACE,kBAACiP,GAAA,EAAD,CAAKpT,UAAS,4BACZ,oCACG4e,IACC,kBAACxL,GAAA,EAAD,CAAKpT,UAAU,oBACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,iBACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,uBAIrB,kBAAC6hB,GAAA,EAAD,CACEZ,UAAWA,GACXC,aAAcA,GACdvO,YAAaiO,EACbkB,oBAAqB,SAACnpB,GACpBkoB,EAAoBloB,GACpBytB,GAAyBztB,KAG3B,kBAACqpB,GAAA,EAAD,CAAWnW,QAAS+V,KACpB,kBAACxO,GAAA,EAAD,CAAKpT,UAAU,6BACb,yBAAKA,UAAU,cACb,kBAACoT,GAAA,EAAD,KACE,kBAAC,GAAD,QAMJ,kBAACA,GAAA,EAAD,CAAKpT,UAAU,cACb,oCACGmI,EAAS8F,SAAW7C,GACnB,kBAACgI,GAAA,EAAD,CAAKpT,UAAS,mBAAcolB,GAAe,WACzC,kBAAChS,GAAA,EAAD,CAAKpT,UAAU,eACb,kBAACoY,GAAA,EAAD,CACEpY,UAAU,gBACVxB,QAAS,WACP+nB,YAAW,WACTlB,GAAsBD,KACrB,OAGJA,EACC,kBAAC,KAAD,MAEA,kBAAC,KAAD,OAGHha,GAAgBka,GACf,kBAAClS,GAAA,EAAD,CAAKpT,UAAU,gBACb,kBAAC,WAAD,CACEjI,IAAG,OAAEqT,QAAF,IAAEA,OAAF,EAAEA,EAAchL,GACnB9G,kBAAmB,SAAChC,GArJH4uB,GAsJI5uB,IAGrB6B,MAAK,OAAEiS,QAAF,IAAEA,OAAF,EAAEA,EAAcoB,OACrBtT,UAAWiS,GAAiB8R,GAC5B1jB,QAASA,EACTH,SAAU,IACVC,UAAW,IACXG,SAAS,cAKjB,kBAAC4Z,GAAA,EAAD,CAAKpT,UAAU,sBACb,kBAAC4R,GAAA,EAAD,CAAYnV,MAAO,CAAEqW,SAAU,GAAIjB,MAAO,SAA1C,oDAON,kBAACuB,GAAA,EAAD,CACEpT,UAAS,oBACPmI,EAAS8F,SAAW,oBAGtB,kBAACmF,GAAA,EAAD,CACEpT,UAAS,0BACPoL,GAAgBka,EACZ,UACA,oBAGN,kBAAC,GAAD,KACE,kBAACkB,GAAA,EAAD,CAAMC,aAtHd,SAACJ,GACX,OACE,kBAAC,GAAD,CACEhE,SAAQ,OAAEgE,QAAF,IAAEA,OAAF,EAAEA,EAAKA,IACf/D,mBAAoB,WA3FC,IAAC/f,IA4FF,OAAC8jB,QAAD,IAACA,OAAD,EAACA,EAAKA,IA3F9BJ,EAAkB1jB,GACXkjB,GAAkB,IA4FrBlD,wBAAyB,kBAAMsD,GAAkB,IACjDa,UAAWL,EAAIM,WACfnE,SAAS,EACTC,cAAe,SAACvP,GACd2N,EAAoB,IACpB9B,GAAmB7L,GACnB4N,IAAW,IAEb4B,gBAAiB,SAACjrB,GAChB6uB,GAAmB7uB,cA4GjB,kBAAC2b,GAAA,EAAD,KACE,kBAACA,GAAA,EAAD,CAAKpT,UAAU,kBACb,kBAAC4mB,GAAA,EAAD,OAEF,kBAACxT,GAAA,EAAD,CAAKpT,UAAU,cACb,kBAAC,GAAD,CAAc4O,OAAQA,MAK1B,kBAAC,GAAD,CACE0U,UAAWkC,EACXjC,YAAa,SAAC/iB,GACZilB,GAAkB,KAGpB,kBAAC,GAAD,CACErB,kBAAmB,WACjBqB,GAAkB,IAEpBoB,WA3NK,WACI,IAAjBnB,GAGJC,EAAgBD,EAAe,IAwNnBoB,WAnOK,WACbpB,IAAiB9a,EAAQ3I,QAG7B0jB,EAAgBD,EAAe,IAgOnBrD,SAAU2D,EACVpb,QAASkb,EACTzB,oBAAqB,kBAAMwB,GAAkB,IAC7CpD,cAAe,SAACvP,GACd4N,IAAW,GACX/B,GAAmB7L,OAMzB,kBAAC,GAAD,CACEoQ,UAAWsC,EACXrC,YAAa,kBAAMsC,GAAkB,KAErC,kBAACzS,GAAA,EAAD,CAAKpT,UAAU,qCACb,kBAACoT,GAAA,EAAD,CACEpT,UAAU,UACVvD,MAAO,CAAE9C,MAAO,cAAewb,YAAa,IAE5C,kBAACiD,GAAA,EAAD,CACE3b,MAAO,CAAEqN,QAAS,GAClBtL,QAAS,kBAAMqnB,GAAkB,KAEjC,kBAAC,KAAD,CACEppB,MAAO,CAAEqW,SAAU,GAAIjB,MAAO,eAIpC,kBAACuB,GAAA,EAAD,CAAKpT,UAAU,yBACb,kBAAC4R,GAAA,EAAD,CAAY5R,UAAU,gCAAtB,SAGA,kBAAC+mB,GAAA,EAAD,CAAOpV,UAAU,OAAO3R,UAAU,aAChC,kBAACgnB,GAAA,EAAD,CACEhnB,UAAU,oBACVvD,MAAO,CAAE9C,MAAO,QAChBlC,MAAO,sBAET,kBAACwvB,GAAA,EAAD,CACEpV,MAAM,YACNmI,aAAW,aACXvd,MAAO,CAAEqN,QAAS,IAElB,kBAAC,KAAD,CAAsBrN,MAAO,CAAEqW,SAAU,OAI7C,kBAACM,GAAA,EAAD,CAAK8T,GAAI,EAAGlnB,UAAU,mBACpB,kBAACoY,GAAA,EAAD,CAAQ3b,MAAO,CAAEqN,QAAS,IACxB,kBAACsJ,GAAA,EAAD,CAAK5B,QAAS,OAAQ2N,WAAY,UAChC,yBAAKre,IAAKqmB,KAAWpmB,IAAI,eACzB,kBAAC6Q,GAAA,EAAD,CACE5R,UAAU,iBACVvD,MAAO,CAAEoV,MAAO,UAAW4E,WAAY,IAFzC,uBAQJ,kBAAC2B,GAAA,EAAD,CAAQ3b,MAAO,CAAEqN,QAAS,IACxB,kBAACsJ,GAAA,EAAD,CAAK5B,QAAS,OAAQ2N,WAAY,UAChC,yBAAKre,IAAKsmB,KAAcrmB,IAAI,eAC5B,kBAAC6Q,GAAA,EAAD,CACE5R,UAAU,iBACVvD,MAAO,CAAEoV,MAAO,UAAW4E,WAAY,IAFzC,yBAQJ,kBAAC2B,GAAA,EAAD,CAAQ3b,MAAO,CAAEqN,QAAS,IACxB,kBAACsJ,GAAA,EAAD,CAAK5B,QAAS,OAAQ2N,WAAY,UAChC,yBAAKre,IAAKumB,KAAYtmB,IAAI,eAC1B,kBAAC6Q,GAAA,EAAD,CACE5R,UAAU,iBACVvD,MAAO,CAAEoV,MAAO,UAAW4E,WAAY,IAFzC,gC,mHCnYlB6Q,GAAkB,SAACC,EAAY3X,GAGZ,IAAnB2X,EAAMC,UACR5X,EAAM8I,mBAIJ+O,GAAiB,SAACF,EAAY3X,KAM9B8X,GAAe,CACnB,CACEC,MAAO,OACPC,WAAY,OACZjuB,MAAO,GACPkuB,aAAc,SAACC,GACb,OACE,gBAAClW,GAAA,EAAD,CAAY5R,UAAU,6BAAtB,SAGJ+nB,WAAY,SAACC,GAEX,OADAjd,QAAQC,IAAI,aAAcgd,GAExB,gBAACpW,GAAA,EAAD,CAAY5R,UAAU,6BACnBgoB,EAAWvwB,SAKpB,CACEkwB,MAAO,SACPC,WAAY,SACZjuB,MAAO,IACPkuB,aAAc,SAACC,GACb,OACE,gBAAClW,GAAA,EAAD,CAAY5R,UAAU,6BAAtB,WAGJ+nB,WAAY,SAACC,GAEX,OADAjd,QAAQC,IAAI,aAAcgd,GAExB,gBAAC5U,GAAA,EAAD,CAAK5B,QAAS,OAAQ2N,WAAY,UAChC,gBAAC/L,GAAA,EAAD,CAAKpT,UAAU,oBACb,uBAAKc,IAAG,OAAEknB,QAAF,IAAEA,OAAF,EAAEA,EAAYC,IAAIrZ,OAAOzV,MAAO4H,IAAI,gBAE9C,gBAAC6Q,GAAA,EAAD,CAAY5R,UAAU,6BAAtB,OACGgoB,QADH,IACGA,OADH,EACGA,EAAYC,IAAIrZ,OAAO8L,SAMlC,CACEiN,MAAO,QACPC,WAAY,QACZjuB,MAAO,IACPkuB,aAAc,SAACC,GACb,OACE,gBAAClW,GAAA,EAAD,CAAY5R,UAAU,6BAAtB,UAGJ+nB,WAAY,SAACC,GAEX,OADAjd,QAAQC,IAAI,aAAcgd,GAExB,gBAACpW,GAAA,EAAD,CAAY5R,UAAU,8BACT,OAAVgoB,QAAU,IAAVA,OAAA,EAAAA,EAAYC,IAAIC,OAAhB,OAAwBF,QAAxB,IAAwBA,OAAxB,EAAwBA,EAAYC,IAAIC,MAAQ,OAKzD,CACEP,MAAO,SACPC,WAAY,SACZjuB,MAAO,IAEPkuB,aAAc,SAACC,GACb,OACE,gBAAClW,GAAA,EAAD,CAAY5R,UAAU,6BAAtB,WAGJ+nB,WAAY,SAACC,GAEX,OADAjd,QAAQC,IAAI,aAAcgd,GAExB,gBAACpW,GAAA,EAAD,CAAY5R,UAAU,8BACT,OAAVgoB,QAAU,IAAVA,OAAA,EAAAA,EAAYC,IAAIE,QAAhB,OAAyBH,QAAzB,IAAyBA,OAAzB,EAAyBA,EAAYC,IAAIE,OAAS,OAK3D,CACER,MAAO,OACPC,WAAY,OACZQ,UAAU,EACVzuB,MAAO,GAMPkuB,aAAc,SAACC,GACb,OACE,gBAAClW,GAAA,EAAD,CAAY5R,UAAU,6BAAtB,SAGJ+nB,WAAY,SAACC,GAEX,OADAjd,QAAQC,IAAI,aAAcgd,GAExB,gBAAC5U,GAAA,EAAD,KACE,gBAACgF,GAAA,EAAD,KACE,gBAAC,KAAD,CAAsB3b,MAAO,CAAEqW,SAAU,WAQ/CuV,GAAO,CACX,CACEjoB,GAAI,EACJxE,KAAM,QACNgT,OAAQ,CACNzV,MAAOmvB,KACP5N,KAAM,oBAERwN,MAAO,GACPC,OAAQ,cACRI,KAAM,IAER,CACEnoB,GAAI,EACJxE,KAAM,QACNgT,OAAQ,CACNzV,MAAOqvB,KACP9N,KAAM,IAERwN,MAAO,mBACPC,OAAQ,cACRI,KAAM,IAER,CACEnoB,GAAI,EACJxE,KAAM,QACNgT,OAAQ,CACNzV,MAAOmvB,KACP5N,KAAM,oBAERwN,MAAO,GACPC,OAAQ,cACRI,KAAM,KAIK,SAASE,KACtB,OACE,gCACE,gBAACrV,GAAA,EAAD,KACE,gBAACxB,GAAA,EAAD,CACE5R,UAAU,uCACVvD,MAAO,CAAEqN,QAAS,aAFpB,6BAOF,gBAAC,KAAD,CAGEue,KAAMA,GACNX,QAASA,GAETgB,mBAAiB,EACjBC,YAAarB,GACbsB,WAAYnB,GACZoB,yBAAuB,EACvBC,YAAU,EACVC,mBAAiB,EACjBC,YAAU,EACVC,WAAY,CACVC,0BAA2B,kBACzB,gBAAC,KAAD,CACEzsB,MAAO,CAAEqW,SAAU,GAAIjB,MAAO,WAGlCsX,2BAA4B,kBAC1B,gBAAC,KAAD,CACE1sB,MAAO,CAAEqW,SAAU,GAAIjB,MAAO,eC7H7BuX,OAlEf,WACE,OACE,kBAAChW,GAAA,EAAD,CAAKpT,UAAU,4BACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,gBACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,eAsCjB,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,mBACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,YACb,wBAAIA,UAAU,YACZ,4BACE,kBAACoY,GAAA,EAAD,KACE,kBAACxG,GAAA,EAAD,CAAY5R,UAAU,kBAAtB,UAGJ,4BACE,kBAACoY,GAAA,EAAD,KACE,kBAACxG,GAAA,EAAD,CAAY5R,UAAU,WAAtB,YAKR,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,aACb,kBAACyoB,GAAD,MACA,kBAACA,GAAD,UCrCKY,OAtBf,SAAiB1hB,GACf,IAAQ0a,EAAa1a,EAAb0a,SAER,OACE,kBAAC7O,GAAA,EAAD,CAAMC,WAAS,EAACpB,QAAS,GACtBgQ,GACCA,EAAS9lB,KAAI,SAACgG,EAAWI,GACvB,OACE,kBAAC6Q,GAAA,EAAD,CAAMjR,MAAI,EAAC4W,GAAI,EAAGphB,IAAK4K,GACrB,kBAAC,GAAD,CACE0f,SAAU9f,EACVigB,SAAS,UCLV8G,OARf,SAA2B3hB,GACzB,OACE,kBAAC6L,GAAA,EAAD,CAAMC,WAAS,GACb,kBAACD,GAAA,EAAD,CAAMjR,MAAI,EAAC2W,GAAI,M,qBCVRmJ,GAAW,CACtB,CACEkH,GAAI,CACF7xB,EAAG,WAEL0I,GAAI,mCACJopB,IAAK,mCACLC,IAAK,gBACLjQ,MAAO,OACPkQ,KAAM,UACNC,IAAK,GACLrQ,IAAK,CACHlZ,GAAI,mEACJwpB,KAAM,GACN1W,IAAK,gGACLxZ,GAAG,GAELmwB,GAAI,CAAC,aAAc,8CAAyC,YAC5D9Q,IAAK,WACLna,SAAU,GAEZ,CACE2qB,GAAI,CACF7xB,EAAG,WAEL0I,GAAI,mCACJopB,IAAK,mCACLC,IAAK,gBACLjQ,MAAO,QACPkQ,KAAM,eACNC,IAAK,GACLrQ,IAAK,CACHlZ,GAAI,mEACJwpB,KAAM,GACN1W,IAAK,gGACLxZ,GAAG,GAELmwB,GAAI,CACF,aACA,8CACA,2BAEF9Q,IAAK,WACLna,SAAU,GAEZ,CACE2qB,GAAI,CACF7xB,EAAG,WAEL0I,GAAI,mCACJopB,IAAK,mCACLC,IAAK,gBACLjQ,MAAO,cACPkQ,KAAM,OACNC,IAAK,GACLrQ,IAAK,CACHlZ,GAAI,mEACJwpB,KAAM,GACN1W,IAAK,gGACLxZ,GAAG,GAELmwB,GAAI,CAAC,aAAc,kBAAmB,SACtC9Q,IAAK,WACLna,SAAU,GAEZ,CACE2qB,GAAI,CACF7xB,EAAG,WAEL0I,GAAI,mCACJopB,IAAK,mCACLC,IAAK,gBACLjQ,MAAO,cACPkQ,KAAM,SACNC,IAAK,GACLrQ,IAAK,CACHlZ,GAAI,mEACJwpB,KAAM,GACN1W,IAAK,gGACLxZ,GAAG,GAELmwB,GAAI,CAAC,QAAS,cAAe,UAC7B9Q,IAAK,WACLna,SAAU,GAEZ,CACE2qB,GAAI,CACF7xB,EAAG,WAEL0I,GAAI,mCACJopB,IAAK,mCACLC,IAAK,gBACLjQ,MAAO,SACPkQ,KAAM,cACNC,IAAK,GACLrQ,IAAK,CACHlZ,GAAI,mEACJwpB,KAAM,GACN1W,IAAK,gGACLxZ,GAAG,GAELmwB,GAAI,CAAC,aAAc,8CAAyC,YAC5D9Q,IAAK,WACLna,SAAU,GAEZ,CACEtG,EAAG,CACDzB,EAAG,MACH+jB,GAAI,KACJkP,GAAI,KACJpyB,EAAG,GAEL6xB,GAAI,CACF7xB,EAAG,WAELjB,EAAG,sKACH2J,GAAI,mCACJopB,IAAK,mCACLC,IAAK,gBACLjQ,MAAO,wCACPkQ,KAAM,GACNC,IAAK,GACLrQ,IAAK,CACHlZ,GAAI,mEACJwpB,KAAM,GACN1W,IAAK,gGACLxZ,GAAG,GAELmwB,GAAI,CAAC,cAAe,yBACpB9Q,IAAK,SACLna,SAAU,GAEZ,CACE2qB,GAAI,CACF7xB,EAAG,WAEL0I,GAAI,mCACJopB,IAAK,mCACLC,IAAK,gBACLjQ,MAAO,SACPkQ,KAAM,aACNC,IAAK,GACLrQ,IAAK,CACHlZ,GAAI,mEACJwpB,KAAM,GACN1W,IAAK,gGACLxZ,GAAG,GAELmwB,GAAI,CACF,aACA,8CACA,2BAEF9Q,IAAK,WACLna,SAAU,GAEZ,CACE2qB,GAAI,CACF7xB,EAAG,WAEL0I,GAAI,mCACJopB,IAAK,mCACLC,IAAK,gBACLjQ,MAAO,UACPkQ,KAAM,OACNC,IAAK,GACLrQ,IAAK,CACHlZ,GAAI,mEACJwpB,KAAM,GACN1W,IAAK,gGACLxZ,GAAG,GAELmwB,GAAI,CAAC,aAAc,kBAAmB,SACtC9Q,IAAK,WACLna,SAAU,GAEZ,CACE2qB,GAAI,CACF7xB,EAAG,WAEL0I,GAAI,mCACJopB,IAAK,mCACLC,IAAK,gBACLjQ,MAAO,UACPkQ,KAAM,OACNC,IAAK,GACLrQ,IAAK,CACHlZ,GAAI,mEACJwpB,KAAM,GACN1W,IAAK,gGACLxZ,GAAG,GAELmwB,GAAI,CAAC,aAAc,kBAAmB,SACtC9Q,IAAK,WACLna,SAAU,GAEZ,CACEtG,EAAG,CACDzB,EAAG,MACH+jB,GAAI,IACJkP,GAAI,IACJpyB,EAAG,GAEL6xB,GAAI,CACF7xB,EAAG,WAELjB,EAAG,+GACH2J,GAAI,mCACJopB,IAAK,mCACLC,IAAK,gBACLjQ,MAAO,wDACPkQ,KAAM,GACNC,IAAK,GACLrQ,IAAK,CACHlZ,GAAI,mEACJwpB,KAAM,GACN1W,IAAK,gGACLxZ,GAAG,GAELqf,IAAK,gBACLna,SAAU,ICxMRmrB,GAAc,CAClB,CACEtyB,MAAO,MACP+hB,MAAO,OAET,CACE/hB,MAAO,cACP+hB,MAAO,gBA0IIwQ,OAjIf,SAAeriB,GACb,IACMsiB,EAPS,WACf,IAAQrb,EAAWsb,cAAXtb,OACR,OAAOub,IAAMC,SAAQ,kBAAM,IAAIC,gBAAgBzb,KAAS,CAACA,IAI7C0b,GACcjzB,IAAI,YACxB6b,EAAQqX,cAARrX,IACN,EAAwC6I,mBAAiB,OAAzD,oBAAOyO,EAAP,KAAqBC,EAArB,KACA,EACE1O,mBAAmBgO,IADdW,EAAP,qBA0BA,OAxBApvB,qBAAU,WACJ2uB,GACFQ,EAAgBR,KAEjB,CAACA,IAkBJlf,QAAQC,IAAI,mBAAoB0f,GAG9B,kBAACtX,GAAA,EAAD,CAAKpT,UAAU,mBACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,gBACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,WACb,kBAACoT,GAAA,EAAD,CACEpT,UAAU,mBACVwR,QAAS,OACTqR,eAAgB,YAqCD,OAAhB6H,QAAgB,IAAhBA,OAAA,EAAAA,EAAkBzoB,QAAS,GAC1B,kBAACmR,GAAA,EAAD,CAAKpT,UAAU,cACZ0qB,EAAiBnuB,KAAI,SAACgG,EAAWI,GAGhC,OAFAoI,QAAQC,IAAI,aAAczI,GAGxB,kBAAC6Q,GAAA,EAAD,CAAKuX,GAAI,GACP,kBAAC,IAAD,CACE5yB,IAAK4K,EASL0Q,GAAE,UAAKH,EAAL,qBAAqB3Q,EAAK9K,OAC5BuI,UAAU,wCAEV,0BACEA,UAAS,2DACU,QAAjBwqB,EAAyB,UAAY,YAGtCjoB,EAAKiX,YAMhB,kBAACpB,GAAA,EAAD,CAAQ3b,MAAO,CAAE4U,gBAAiB,YAChC,kBAAC,KAAD,CAAiB5U,MAAO,CAAEoV,MAAO,UAAWiB,SAAU,UAOhE,kBAACM,GAAA,EAAD,CAAKpT,UAAU,mBACZ0qB,EAAiBzoB,OAAS,GACzB,kBAACmR,GAAA,EAAD,KACoB,QAAjBoX,EACC,kBAAC,GAAD,CAASnI,SAAUA,GAAUG,SAAS,IAEtC,kBAACoI,GAAD,CAAmBJ,aAAcA,Q,+BCtEhCK,OAhFf,SAAiBljB,GACf,OACE,kBAACyL,GAAA,EAAD,CAAKpT,UAAU,qBACb,kBAACwT,GAAA,EAAD,CAAMC,WAAS,GACb,kBAACD,GAAA,EAAD,CAAMjR,MAAI,EAAC2W,GAAI,EAAGlZ,UAAU,gBAC1B,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,WACb,kBAAC4R,GAAA,EAAD,CAAY5R,UAAU,6BAAtB,mBAGA,kBAAC4R,GAAA,EAAD,CAAY5R,UAAU,8BAAtB,eAIF,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,cACb,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,eACb,kBAAC4R,GAAA,EAAD,CAAY5R,UAAU,6BAAtB,WACA,kBAACoT,GAAA,EAAD,CAAK8T,GAAI,GACP,kBAAC4D,GAAA,EAAD,CACEC,eAAe,MACfC,QAAS,gCACT/G,MAAM,OACNjkB,UAAU,QACVvD,MAAO,CAAE0iB,WAAY,aAAcxiB,OAAQ,MAG/C,kBAACyW,GAAA,EAAD,CAAK8T,GAAI,GACP,kBAAC4D,GAAA,EAAD,CACEC,eAAe,MACfC,QAAS,gCACT/G,MAAM,SACNxnB,MAAO,CAAE0iB,WAAY,aAAcxiB,OAAQ,GAC3CqD,UAAU,WAGd,kBAACoT,GAAA,EAAD,CAAK8T,GAAI,GACP,kBAAC4D,GAAA,EAAD,CACEC,eAAe,MACfC,QAAS,gCACT/G,MAAM,WACNxnB,MAAO,CAAE0iB,WAAY,aAAcxiB,OAAQ,GAC3CqD,UAAU,WAGd,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,QAAQknB,GAAI,GACzB,kBAACtV,GAAA,EAAD,CAAY5R,UAAU,6BAAtB,YAEF,kBAACoT,GAAA,EAAD,CAAK8T,GAAI,GACP,kBAAC4D,GAAA,EAAD,CACEC,eAAe,MACfC,QAAS,gCACT/G,MAAM,UACNxnB,MAAO,CAAE0iB,WAAY,aAAcxiB,OAAQ,GAC3CqD,UAAU,WAGd,kBAACoT,GAAA,EAAD,CAAK8T,GAAI,GACP,kBAAC4D,GAAA,EAAD,CACEC,eAAe,MACfC,QAAS,gCACT/G,MAAM,OACNxnB,MAAO,CAAE0iB,WAAY,aAAcxiB,OAAQ,GAC3CqD,UAAU,WAGd,kBAACoT,GAAA,EAAD,CAAK8T,GAAI,GACT,kBAAC9O,GAAA,EAAD,CAAQpY,UAAU,eAAlB,eAKN,kBAACwT,GAAA,EAAD,CAAMjR,MAAI,EAAC2W,GAAI,EAAGlZ,UAAU,iBAC1B,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,gBACb,yBAAKc,IAAKmqB,KAASlqB,IAAI,U,+BCiFpBmqB,OAlJf,SAAqBvjB,GACnB,MAAsCoU,mBAAgB,IAAtD,oBAAOoP,EAAP,KAAoBC,EAApB,KACA,EAAgCrP,oBAAkB,GAAlD,oBAAO6C,EAAP,KAAkBkC,EAAlB,KAsBA,OAFA/V,QAAQC,IAAI,cAAemgB,GAGzB,kBAAC/X,GAAA,EAAD,CAAKpT,UAAU,yBAAyBwR,QAAS,QAC/C,kBAAC4B,GAAA,EAAD,CAAKpT,UAAU,YACb,kBAACoT,GAAA,EAAD,CACEpT,UAAU,gBACVwR,QAAS,OACT2N,WAAY,SACZ0D,eAAgB,UAEhB,kBAACzP,GAAA,EAAD,CACE3W,MAAO,CAAE9C,MAAO,KAChB8c,WAAY,OACZjF,QAAS,OACTqR,eAAgB,UAEhB,kBAACjR,GAAA,EAAD,CACE5R,UAAU,6BACVvD,MAAO,CAAE9C,MAAO,MAFlB,iDAQJ,kBAACyZ,GAAA,EAAD,CAAKpT,UAAU,oBACb,kBAACoT,GAAA,EAAD,CAAK3W,MAAO,CAAE9C,MAAO,KAAO8c,WAAY,QACtC,kBAACrD,GAAA,EAAD,CAAKpT,UAAU,YACb,8BACE,kBAACoT,GAAA,EAAD,CAAKiY,GAAI,GACP,kBAACzZ,GAAA,EAAD,CAAY5R,UAAU,uBAAtB,+CAIF,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,iBAAiBqrB,GAAI,GAClC,2BACEhrB,OAAO,UACPD,GAAG,wBACHkrB,UAAQ,EACRnrB,KAAK,OACL1D,MAAO,CAAE+U,QAAS,QAClBjR,SA5DI,SAACC,GACrB,IAAI+qB,EAAkB,GACtBr0B,OAAOs0B,OAAOhrB,EAAE7F,OAAO+F,OAAO+C,SAAQ,SAACgoB,EAAU9oB,GAC/C4oB,EAASroB,KAAK,CACZzL,MAAOkL,EACP+oB,SAAUC,IAAIC,gBAAgBH,QAGlCL,EAAeG,MAsDD,2BAAO1qB,QAAQ,yBACb,kBAAComB,GAAA,EAAD,CACEpV,MAAM,UACNmI,aAAW,iBACXrI,UAAU,OACV3R,UAAU,cAJZ,YAOE,kBAAC,KAAD,CAAyBvD,MAAO,CAAEqW,SAAU,SAIhD8L,EA8BA,kBAAC9F,GAAA,EAAD,MA7BA,kBAAC1F,GAAA,EAAD,CACEpT,UAAU,oBACVwR,QAAS,OACTqa,SAAU,QAETV,GACCA,EAAY5uB,KAAI,SAACgG,EAAWI,GAC1B,OACE,kBAACyQ,GAAA,EAAD,CAAKpT,UAAU,kBAAkBjI,IAAK4K,GACpC,kBAACyV,GAAA,EAAD,CACEpY,UAAU,kBACVxB,QAAS,WA1EnCsiB,GAAW,GAEXsK,EADeD,GAEf5E,YAAW,WACTzF,GAAW,KACV,OA0EuB,kBAAC,KAAD,CAAmBrkB,MAAO,CAAEqW,SAAU,OAExC,yBACErW,MAAO,CAAE7C,OAAQ,QACjBkH,IAAKyB,EAAKmpB,SACV3zB,IAAK4K,EACL5B,IAAG,UAAK4B,UAUtB,kBAACyQ,GAAA,EAAD,CAAKiY,GAAI,GACP,kBAACzZ,GAAA,EAAD,CAAY5R,UAAU,uBAAtB,wBAIF,kBAACoT,GAAA,EAAD,CAAKiY,GAAI,GACP,kBAACjY,GAAA,EAAD,CAAKiY,GAAI,GACP,kBAACzZ,GAAA,EAAD,CAAY5R,UAAU,sBAAtB,YAIF,kBAAC8rB,GAAA,EAAD,CACE9M,YAAY,UACZ+M,QAAS,EAET/rB,UAAU,+BAGd,kBAACoT,GAAA,EAAD,CAAK5B,QAAS,QACZ,kBAAC4G,GAAA,EAAD,CAAQpY,UAAU,sDAAlB,UAGA,kBAACoY,GAAA,EAAD,CAAQpY,UAAU,uDAAlB,cASZ,kBAACoT,GAAA,EAAD,CAAKpT,UAAU,gB,0BCtIfgsB,GAAe,SAAC,GAII,IAHbC,EAGY,EAHvBta,UACAua,EAEuB,EAFvBA,OACGC,EACoB,kBACvB,OACE,kBAAC,IAAD,iBACMA,EADN,CAEEC,OAAQ,kBAAOF,EAAS,kBAACD,EAAD,MAAgB,kBAAC,IAAD,CAAU5Y,GAAG,gBAoE5CgZ,OA/Df,WAGE,OACE,kBAAC,IAAD,KACE,kBAAC,IAAD,CAAOC,OAAK,EAACC,QAAM,EAACC,KAAK,SAAS7a,UAAW/H,IAC7C,kBAAC,GAAD,KACE,kBAAC,IAAD,KACE,kBAAC,GAAD,CACEsiB,QAAQ,EACRI,OAAK,EACLC,QAAM,EACNC,KAAK,IACL7a,UAAWsQ,KAEb,kBAAC,GAAD,CACEiK,QAAQ,EACRI,OAAK,EACLC,QAAM,EACNC,KAAK,UACL7a,UAAWuT,KAEb,kBAAC,GAAD,CACEgH,QAAQ,EACRI,OAAK,EACLC,QAAM,EACNC,KAAK,kBACL7a,UAAWyX,KAEb,kBAAC,GAAD,CACE8C,QAAQ,EACRI,OAAK,EACLC,QAAM,EACNC,KAAK,SACL7a,UAAWqY,KAEb,kBAAC,GAAD,CACEkC,QAAQ,EACRI,OAAK,EACLC,QAAM,EACNC,KAAK,WACL7a,UAAWkZ,KAEb,kBAAC,GAAD,CACEqB,QAAQ,EACRI,OAAK,EACLC,QAAM,EACNC,KAAK,WACL7a,UAAWuZ,S,mBC/DvB3pB,SAASiY,MAAQ/X,OAAOqH,SAAS2jB,KAEjC,IAAIrT,GAAc,2BACbnQ,GACAd,SAASkG,UAAUG,gBAIpBwD,GAAQ0a,aAAY,CACtBC,WAAY,CACVC,WAAYxT,GAAGzP,kBAEjBuI,QAAS,CACP2a,QAAS,CACPC,KAAM1T,GAAG9P,cAEXyjB,UAAW,CACTD,KAAM1T,GAAG7P,mBAKfyjB,IAASZ,OACP,kBAAC,IAAD,CAAUpd,MAAOA,GACf,kBAAC,IAAD,CAAkBgD,MAAOA,IACvB,kBAAC,IAAD,KACE,kBAAC,GAAD,SAINzQ,SAAS0rB,eAAe,S/CyFpB,kBAAmB7tB,WACrBA,UAAU8tB,cAAcC,MAAM3tB,MAAK,SAAA4tB,GACjCA,EAAaC,kB","file":"static/js/main.2660f94a.chunk.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","module.exports = require(\"react\");","module.exports = require(\"@nyris/nyris-api\");","export {default as Preview} from \"./components/Preview/Preview\";\nexport {default as Capture} from \"./components/Capture/Capture\";\n\nexport * from './utils';\n\n","import React, {useEffect, useRef, useState} from 'react';\nimport {Layer, Stage, Image, Circle, Rect} from \"react-konva\";\nimport {RectCoords, Region, getThumbSizeLongestEdge} from \"@nyris/nyris-api\";\nimport Konva from 'konva';\nimport {NodeGroup} from \"react-move\";\n\n\ntype PreviewElem =\n | 'tl'\n | 'tr'\n | 'bl'\n | 'br'\n | 'rect';\n\n/** Properties of the Preview Component. */\ninterface PreviewProps {\n /** A canvas to render as the image. */\n image: HTMLCanvasElement,\n /** Initial selection on the image, setting this, won't send a selection change event. */\n selection: RectCoords,\n /** List of regions to display on the image */\n regions: Region[],\n /** Handler for changed selection. */\n onSelectionChange?: (r: RectCoords) => void,\n /** Maximal width of the image to display in pixels. */\n maxWidth: number,\n /** Maximal height of the image to display in pixels. */\n maxHeight: number,\n /** Color of the dot, which is rendered center of not selected regions. */\n dotColor: string\n}\n\n/** @internal State of the Preview component */\ninterface PreviewState {\n tlHover: boolean,\n trHover: boolean,\n blHover: boolean,\n brHover: boolean,\n dotHover: boolean,\n rectHover: boolean\n}\n\nconst getCursor = (state: PreviewState) => {\n if (state.dotHover) {\n return 'pointer';\n }\n if (state.tlHover) {\n return 'nw-resize';\n }\n if (state.trHover) {\n return 'ne-resize';\n }\n if (state.blHover) {\n return 'sw-resize';\n }\n if (state.brHover) {\n return 'se-resize';\n }\n if (state.rectHover) {\n return 'move';\n }\n return 'default';\n};\n\nconst calcNewRect = ({x1, x2, y1, y2}: RectCoords, elem: PreviewElem, newX: number, newY: number, elemWidth: number, elemHeight: number) => {\n switch (elem) {\n case 'rect':\n return {\n x1: newX,\n y1: newY,\n x2: newX+elemWidth,\n y2: newY+elemHeight\n };\n case 'tl':\n return {\n x1: newX,\n y1: newY,\n x2, y2\n };\n case 'tr':\n return {\n x2: newX,\n y1: newY,\n x1, y2\n };\n case 'bl':\n return {\n x1: newX,\n y2: newY,\n x2, y1\n };\n case 'br':\n return {\n x2: newX,\n y2: newY,\n x1, y1\n };\n }\n};\n\n\nfunction scaleToPreviewPixels(width: number, height: number, {x1, x2, y1, y2} : RectCoords) {\n return {\n x1: x1*width,\n x2: x2*width,\n y1: y1*height,\n y2: y2*height\n };\n}\n\n\n/** The Preview component. */\nconst Preview = ({\n selection, image, maxWidth, maxHeight,\n onSelectionChange, regions, dotColor}: PreviewProps) => {\n\n let {w: width, h: height} = getThumbSizeLongestEdge(maxWidth, maxHeight, image.width, image.height);\n const {x1, y1, x2, y2} = scaleToPreviewPixels(width, height, selection);\n let [minX, minY ] = [ 100, 100];\n\n const handleDragBoundTl = ({x, y}: {x: number,y: number}) => {\n return {\n x: Math.max(Math.min(x, x2-minX), 0),\n y: Math.max(Math.min(y, y2-minY), 0)\n\n };\n };\n\n const handleDragBoundTr = ({x, y}: {x: number,y: number}) => {\n return {\n x: Math.min(Math.max(x, x1+minX), width),\n y: Math.max(Math.min(y, y2-minY), 0)\n\n };\n };\n\n const handleDragBoundBl = ({x, y}: {x: number,y: number}) => {\n return {\n x: Math.max(Math.min(x, x2-minX), 0),\n y: Math.min(Math.max(y, y1+minY), height)\n };\n };\n\n const handleDragBoundBr = ({x, y}: {x: number,y: number}) => {\n return {\n x: Math.min(Math.max(x, x1+minX), width),\n y: Math.min(Math.max(y, y1+minY), height)\n };\n };\n\n const handleDragBoundRect = ({x, y}: {x: number,y: number}) => {\n let elemWidth = x2-x1;\n let elemHeight = y2-y1;\n return {\n x: Math.max(Math.min(x, width-elemWidth), 0),\n y: Math.max(Math.min(y, height-elemHeight), 0)\n };\n };\n\n const selectionRef = useRef<Konva.Rect>(null);\n const [state, replaceState] = useState<PreviewState>({\n tlHover: false,\n trHover: false,\n blHover: false,\n brHover: false,\n dotHover: false,\n rectHover: false\n });\n\n const setState = (s: any) => {\n let o = {};\n Object.assign(o, state, s);\n replaceState(o as PreviewState);\n };\n\n\n\n const handleDragMove = (elem: PreviewElem, evt: Konva.KonvaEventObject<DragEvent>) => {\n if (evt.target instanceof Konva.Stage) {\n return;\n }\n\n let {x: newX, y: newY} = evt.target.getAbsolutePosition();\n let {width: elemWidth, height: elemHeight} = evt.target.getSize();\n const newRect = calcNewRect({x1, x2, y1, y2}, elem, newX, newY, elemWidth, elemHeight);\n let newState = {\n x1: newRect.x1/width,\n x2: newRect.x2/width,\n y1: newRect.y1/height,\n y2: newRect.y2/height\n };\n notifySelection(newState);\n }\n\n // animate selection\n useEffect(() => {\n let speed = 40;\n if (!selectionRef.current) {return;}\n let a = new Konva.Animation((frame) => {\n if (!frame) {\n return;\n }\n if (!selectionRef.current) {return;}\n let angleDiff = (frame.time * speed) / 1000;\n selectionRef.current.dashOffset(-angleDiff);\n }, selectionRef.current.getLayer());\n a.start();\n\n return () => {\n a && a.stop();\n };\n }, [selectionRef]);\n\n\n const handleDragMoveRect = handleDragMove.bind(null, 'rect');\n const handleDragMoveTl = handleDragMove.bind(null, 'tl');\n const handleDragMoveTr = handleDragMove.bind(null, 'tr');\n const handleDragMoveBl = handleDragMove.bind(null, 'bl');\n const handleDragMoveBr = handleDragMove.bind(null, 'br');\n\n const notifySelection = (r: RectCoords) => {\n if (onSelectionChange) {\n onSelectionChange(r);\n }\n };\n\n\n if (!image) {\n return null;\n }\n\n const dots = regions.map((region, i) => {\n let {x1, x2, y1, y2} = region.normalizedRect;\n let x = width* ((x2-x1)/2 + x1);\n let y = height* ((y2-y1)/2+ y1);\n return { // get middle of box and map to pixels\n region,\n key: `${x}-${y}`,\n x,\n y,\n };\n });\n\n let gripSize = 40;\n let gripOpacity = 0.3;\n let gripOpacityOver = 0.6;\n let darkOpacity = 0.3;\n\n\n return (\n <Stage width={width} height={height} style={{cursor: getCursor(state), width: width, height: height, margin: 'auto'}}>\n <Layer key='img'>\n <Image image={image} width={width} height={height}/>\n </Layer>\n <Layer key='selection'>\n {/* Selection box */}\n <Rect stroke='white' strokeWidth={2} x={x1} y={y1} width={x2-x1} height={y2-y1} />\n <Rect stroke='black' draggable={true} onDragMove={handleDragMoveRect} dragBoundFunc={handleDragBoundRect}\n onMouseOver={() => setState({rectHover: true})}\n onMouseOut={() => setState({rectHover: false})}\n opacity={0.8} strokeWidth={2} x={x1} y={y1} width={x2-x1} height={y2-y1} dash={[15, 15]} ref={selectionRef} />\n {/* grips */}\n <Rect fill='black' draggable={true} onDragMove={handleDragMoveTl} dragBoundFunc={handleDragBoundTl}\n onMouseOver={() => setState({tlHover: true})} onMouseOut={() => setState({tlHover: false})} opacity={state.tlHover ? gripOpacityOver : gripOpacity} width={gripSize} height={gripSize} x={x1} y={y1} />\n <Rect fill='black' draggable={true} onDragMove={handleDragMoveTr} dragBoundFunc={handleDragBoundTr}\n onMouseOver={() => setState({trHover: true})} onMouseOut={() => setState({trHover: false})} opacity={state.trHover ? gripOpacityOver : gripOpacity} width={gripSize} height={gripSize} x={x2} y={y1} offsetX={gripSize} />\n <Rect fill='black' draggable={true} onDragMove={handleDragMoveBl} dragBoundFunc={handleDragBoundBl}\n onMouseOver={() => setState({blHover: true})} onMouseOut={() => setState({blHover: false})} opacity={state.blHover ? gripOpacityOver : gripOpacity} width={gripSize} height={gripSize} x={x1} y={y2} offsetY={gripSize} />\n <Rect fill='black' draggable={true} onDragMove={handleDragMoveBr} dragBoundFunc={handleDragBoundBr}\n onMouseOver={() => setState({brHover: true})} onMouseOut={() => setState({brHover: false})} opacity={state.brHover ? gripOpacityOver : gripOpacity} width={gripSize} height={gripSize} x={x2} y={y2} offsetY={gripSize} offsetX={gripSize} />\n {/* Dark areas */}\n <Rect fill='black' opacity={darkOpacity} x={0} y={0} width={width} height={y1} />\n <Rect fill='black' opacity={darkOpacity} x={0} y={y2} width={width} height={height-y2} />\n <Rect fill='black' opacity={darkOpacity} x={0} y={y1} width={x1} height={y2-y1} />\n <Rect fill='black' opacity={darkOpacity} x={x2} y={y1} width={width - x2} height={y2-y1} />\n </Layer>\n <NodeGroup data={dots}\n keyAccessor={r => r.key}\n start={(d, i) => ({opacity: 0, x: -100, y: d.y})}\n enter={(d, i) => ({opacity: [1], x: [d.x], y: d.y, timing: {delay: i*100, duration: 300}})}>\n {ds => <Layer key='dots'>{ds.map(({key, data, state: position}) =>\n <Circle onClick={() => notifySelection(data.region.normalizedRect)}\n onTap={() => notifySelection(data.region.normalizedRect)}\n onMouseOver={() => setState({dotHover: true})}\n onMouseOut={() => setState({dotHover: false})}\n key={key} radius={7} {...position} stroke={dotColor} fill=\"white\" strokeWidth={4}/>)}</Layer>}\n </NodeGroup>\n </Stage>\n );\n};\n\nexport default Preview;\n","module.exports = require(\"react-konva\");","module.exports = require(\"konva\");","module.exports = require(\"react-move\");","import React, {ChangeEvent, useEffect, useRef, useState} from 'react';\nimport './Capture.css';\nimport {urlOrBlobToCanvas, elementToCanvas} from \"@nyris/nyris-api\";\nimport captureSvg from './images/capture.svg';\nimport arrowBackSvg from './images/arrow_back.svg';\n\nexport interface CaptureProps {\n onCaptureComplete: (image: HTMLCanvasElement) => void\n onCaptureCanceled: () => void\n useAppText: string\n}\n\n\nconst Capture = ({onCaptureComplete, onCaptureCanceled, useAppText} : CaptureProps) => {\n const video = useRef<HTMLVideoElement>(null);\n const [stream, setStream] = useState<MediaStream>();\n\n const grabFrame = () => {\n if (video.current) {\n let frame = elementToCanvas(video.current);\n onCaptureComplete(frame);\n }\n };\n\n const onFileSelected = async (e: ChangeEvent) => {\n let fileInput = e.target as HTMLInputElement;\n if (fileInput && fileInput.files) {\n let file = await urlOrBlobToCanvas(fileInput.files[0]);\n onCaptureComplete(file);\n }\n };\n\n useEffect(() => {\n navigator.mediaDevices.getUserMedia({\n video: {\n facingMode: 'environment', // prefers wrong entry on old android: facingMode: ['environment', 'user'],\n width: 640//this.settings.maxWidth,// unsupported on ios {ideal: settings.maxWidth},\n //height: this.settings.maxHeight\n }\n }).then(stream => {\n let vid = video.current;\n if (vid) {\n vid.srcObject = stream;\n setStream(stream);\n }\n }).catch(reason => {\n switch (reason.name) {\n case 'NotFoundError':\n alert('Camera not found. Try with a file instead.');\n break;\n case 'NotAllowedError':\n alert('You have to allow using the camera in order to take pictures. If you are not asked again for permissions, go to site settings and reset permissions there.');\n break;\n default:\n alert(`Sorry, something has gone wrong while enabeling the camera. (${reason})`);\n break;\n }\n });\n }, [video]);\n\n useEffect(() => () => {\n if (!stream) {\n return;\n }\n if (stream.getVideoTracks && stream.getAudioTracks) {\n stream.getVideoTracks().map(track => track.stop());\n stream.getAudioTracks().map(track => track.stop());\n } else {\n ((stream as unknown) as MediaStreamTrack).stop();\n }\n }, [stream]);\n\n return (\n <div className=\"nyris-capture-captureUi\">\n <video autoPlay playsInline ref={video} className=\"nyris-capture-video\"/>\n <input type=\"file\" name=\"file\" id=\"capture_file\" className='nyris-capture-inputFile' accept=\"image/*\"\n capture=\"environment\" onChange={onFileSelected}/>\n <label className=\"nyris-capture-app-button\" htmlFor=\"capture_file\">{useAppText}</label>\n <button className=\"nyris-capture-backBtn\" onClick={onCaptureCanceled}><img src={arrowBackSvg}\n alt=\"back\"\n width=\"72\"/></button>\n <button className=\"nyris-capture-searchBtn\" onClick={grabFrame}><img src={captureSvg}\n alt=\"capture\"/>\n </button>\n </div>\n );\n};\n\n\nexport default Capture;\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js??ref--6-1!../../../node_modules/postcss-loader/src/index.js!./Capture.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && btoa) {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".nyris-capture-app-button {\\n position: fixed;\\n top: 0;\\n right: 0;\\n color: white;\\n margin: 10px;\\n padding: 10px;\\n background-color: rgba(255,255,255,0.3);\\n border-radius: 2px;\\n text-shadow: 1px 1px 3px #000;\\n line-height: 1em;\\n box-shadow: 1px 1px 3px rgba(0, 0, 0,0.5);\\n}\\n\\n.nyris-capture-inputFile {\\n visibility: hidden;\\n}\\n\\n.nyris-capture-captureUi {\\n position: fixed;\\n top: 0;\\n left: 0;\\n bottom: 0;\\n height: 100%;\\n width: 100%;\\n background-color: black;\\n z-index: 10000;\\n}\\n\\n.nyris-capture-video {\\n position: fixed;\\n min-height: 100%;\\n min-width: 100%;\\n top: 50%;\\n left: 50%;\\n transform: translateX(-50%) translateY(-50%);\\n width: auto;\\n height: auto;\\n}\\n\\n.nyris-capture-searchBtn {\\n position: fixed;\\n bottom: 0;\\n right: 0;\\n z-index: 10001;\\n left: 50%;\\n transform: translateX(-50%);\\n\\n color: black;\\n background-color: transparent;\\n text-transform: uppercase;\\n border: 0;\\n margin: auto;\\n display: block;\\n -webkit-filter: drop-shadow( 1px 1px 5px #000 );\\n filter: drop-shadow( 1px 1px 5px #000 );\\n\\n}\\n\\n.nyris-capture-backBtn {\\n position: fixed;\\n bottom: 0;\\n left: 0;\\n z-index: 10001;\\n color: white;\\n background-color: transparent;\\n border: 0;\\n\\n text-transform: uppercase;\\n border-radius: 50%;\\n display: block;\\n padding: 0;\\n font-size: 16px;\\n margin-bottom: 5px;\\n margin-left: 5px;\\n -webkit-filter: drop-shadow( 1px 1px 5px #000 );\\n filter: drop-shadow( 1px 1px 5px #000 );\\n}\\n\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"capture_svg__a\",\n d: \"M150 540a30 30 0 1160 0 30 30 0 01-60 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"capture_svg__b\",\n d: \"M144 540a36 36 0 1172 0 36 36 0 01-72 0zm36 33.95a33.94 33.94 0 100-67.89 33.94 33.94 0 000 67.89z\"\n}));\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"use\", {\n fill: \"#c00\",\n xlinkHref: \"#capture_svg__a\",\n transform: \"translate(-144 -504)\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"use\", {\n fill: \"#c00\",\n fillOpacity: 0.9,\n xlinkHref: \"#capture_svg__b\",\n opacity: 0.7,\n transform: \"translate(-144 -504)\"\n});\n\nfunction SvgCapture(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 72,\n height: 72\n }, props), _ref, _ref2, _ref3);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNzIiIGhlaWdodD0iNzIiIHZpZXdCb3g9IjAgMCA3MiA3MiI+PGRlZnM+PHBhdGggaWQ9IjFoN3JhIiBkPSJNMTUwIDU0MGEzMCAzMCAwIDEgMSA2MCAwIDMwIDMwIDAgMCAxLTYwIDB6Ii8+PHBhdGggaWQ9IjFoN3JiIiBkPSJNMTQ0IDU0MGEzNiAzNiAwIDEgMSA3MiAwIDM2IDM2IDAgMCAxLTcyIDB6bTM2IDMzLjk1YTMzLjk0IDMzLjk0IDAgMSAwIDAtNjcuODkgMzMuOTQgMzMuOTQgMCAwIDAgMCA2Ny44OXoiLz48L2RlZnM+PGc+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE0NCAtNTA0KSI+PHVzZSBmaWxsPSIjYzAwIiB4bGluazpocmVmPSIjMWg3cmEiLz48L2c+PGcgb3BhY2l0eT0iLjciIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xNDQgLTUwNCkiPjx1c2UgZmlsbD0iI2MwMCIgZmlsbC1vcGFjaXR5PSIuOSIgeGxpbms6aHJlZj0iIzFoN3JiIi8+PC9nPjwvZz48L3N2Zz4=\";\nexport { SvgCapture as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\",\n fill: \"#fff\"\n});\n\nfunction SvgArrowBack(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24\n }, props), _ref, _ref2);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4KICAgIDxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==\";\nexport { SvgArrowBack as ReactComponent };","import {ChangeEvent} from \"react\";\n\nexport type FileHandler = (f: File) => void;\n\nexport const makeFileHandler = (fh: FileHandler) => (e: ChangeEvent | DragEvent) => {\n let file = null;\n\n const changeEvent = e as ChangeEvent;\n if (changeEvent && changeEvent.target) {\n const fileInput = changeEvent.target as HTMLInputElement;\n if (fileInput.files && fileInput.files[0]) {\n file = fileInput.files[0];\n }\n\n // reset input\n if (fileInput.value) {\n fileInput.value = \"\";\n }\n if (file) {\n return fh(file);\n }\n }\n\n const dragEvent = e as DragEvent;\n if (dragEvent) {\n file = (dragEvent.dataTransfer && dragEvent.dataTransfer.files[0]);\n }\n\n if (file) {\n return fh(file);\n }\n};\n","module.exports = __webpack_public_path__ + \"static/media/support.289c3a3c.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon_like.a4fb1b18.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon_dislike.94607ca6.svg\";","module.exports = __webpack_public_path__ + \"static/media/Fill.37094b44.svg\";","module.exports = __webpack_public_path__ + \"static/media/book_mark.8e294c0b.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon_modal_image.3068d0ea.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAARCAYAAADUryzEAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAG+SURBVHgBrVJRTttAEJ2ZdalQi5ob4N4gPUGdTxJFBckOylfxCVBOADlB4QR2v6zElRqJBj6TGxRO0PQGrahUtfHMsBtwBIgEEDzJnrFn983bNwvwRKB7ZdmJv2hBu70xgWUEvfxbahD1rqIAVlDxNIo2uosIiIDWw7ART6fUdY8q+i6en//vtML6loLUYAmoTDxPE+PJD5e7uLa28gkeAK9Moqhey/PjkaJOrOxxGNbjJPlasS6tZ9lwZ0H/sXf9U5EGoHxQAM9kv3q9MmKBLpgF24EHc4JZd2FfEDtGTdLLjweW8ne71Uhd3U3KHY2tJ+2oOb7a85GsZN8WAxE+bLUab0l1zIwxqp7ZNW/KBsZIYI8zMUqbN1TwlGrk8Y5Nq3l+smd17RJJoAr+Tb24pywdW/8w86Y00V0UqyA1LzQRLT5vh824LPbzYeBi78vRJqhWiMyuCsDq6kvbEA4ufbiU90tUDrej5j7cBYaqisRuUowco+G5AoQlKMeqDD/LfyKUglf4V168X0rgkOVHAcxtgAoI7iPhd1E8+/vnX3ovwW30+8Oq1T2y49xy46THEthRn3JB76DwJvAcuAASz8hn4GTzhQAAAABJRU5ErkJggg==\"","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar blueimp_load_image_1 = __importDefault(require(\"blueimp-load-image\"));\n/**\n * Calculates the center of a [[RectCoords]].\n * @param rect The [[RectCoords]] to calculate the center coordinate from.\n */\nfunction rectCenter(_a) {\n var x1 = _a.x1, x2 = _a.x2, y1 = _a.y1, y2 = _a.y2;\n return [\n ((x2 - x1) / 2 + x1),\n ((y2 - y1) / 2 + y1)\n ];\n}\n/**\n * Calculate distance between two points\n * @param x1 The x coordinate of the first point.\n * @param y1 The y coordinate of the first point.\n * @param x2 The x coordinate of the second point.\n * @param y2 The y coordinate of the second point.\n */\nvar dist2d = function (_a, _b) {\n var x1 = _a[0], y1 = _a[1];\n var x2 = _b[0], y2 = _b[1];\n return Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2));\n};\n/**\n * Return first `Rect` from list `regions` with center-point which has a maximal distance of `maxDistance` from\n * the center. Otherwise return `defaultRect`\n * @param regions\n * @param maxDistance\n * @param defaultRect\n */\nfunction selectFirstCenteredRegion(regions, maxDistance, defaultRect) {\n var centeredRegion = regions.filter(function (r) {\n var dist = dist2d([0.5, 0.5], rectCenter(r.normalizedRect));\n return dist < maxDistance;\n });\n if (centeredRegion.length === 0) {\n return defaultRect;\n }\n return centeredRegion[0].normalizedRect;\n}\nexports.selectFirstCenteredRegion = selectFirstCenteredRegion;\n/**\n * Gets url parameter values by name.\n * @param name The parameter name.\n * @returns string value if it has value assigned with `=`, true if it is specified but without value or `undefined` if not present\n */\nfunction getUrlParam(name) {\n var results = new RegExp(\"[?&]\" + name + \"(=([^&#]*))?(&|$|#)\", 'i')\n .exec(window.location.href);\n if (results && results[2]) { // has value\n console.log('has value', name, results[2]);\n return decodeURIComponent(results[2]);\n }\n return (results && true) // present but without value\n || undefined; // not present\n}\nexports.getUrlParam = getUrlParam;\n/**\n * Calculate the size of a thumbnail image while keeping proportions, based on pixel area.\n * This leads to better results in cases, where the aspect ratio is extreme.\n * @param targetWidth The desired width of the image.\n * @param targetHeight The desired height of the image.\n * @param aspectRatio Aspect ratio of the image.\n */\nfunction getThumbSizeArea(targetWidth, targetHeight, aspectRatio) {\n var targetArea = targetWidth * targetHeight;\n var width = Math.sqrt(targetArea * aspectRatio);\n return {\n w: width,\n h: width / aspectRatio\n };\n}\nexports.getThumbSizeArea = getThumbSizeArea;\n/**\n * Calculate the size of a thumbnail image to fit in `maxWith` and `maxHeight` while preserving the aspect ratio.\n * @param maxWidth\n * @param maxHeight\n * @param originalWidth\n * @param originalHeight\n */\nfunction getThumbSizeLongestEdge(maxWidth, maxHeight, originalWidth, originalHeight) {\n var iR = originalWidth / originalHeight;\n var dR = maxWidth / maxHeight;\n if (dR > iR) {\n return {\n w: originalWidth * maxHeight / originalHeight,\n h: maxHeight\n };\n }\n return {\n w: maxWidth,\n h: originalHeight * maxWidth / originalWidth\n };\n}\nexports.getThumbSizeLongestEdge = getThumbSizeLongestEdge;\nfunction scaleRect(r, size) {\n return {\n x1: r.x1 * size.w,\n x2: r.x2 * size.w,\n y1: r.y1 * size.h,\n y2: r.y2 * size.h\n };\n}\nexports.scaleRect = scaleRect;\n/**\n * Calculates the size of a rect.\n * @param r The [[RectCoords]].\n */\nfunction getRectSize(r) {\n return {\n w: r.x2 - r.x1,\n h: r.y2 - r.y1\n };\n}\nexports.getRectSize = getRectSize;\n/**\n * Get aspect ratio of a rect\n * @param rect The normalized rect.\n * @param size The original image size.\n */\nfunction getRectAspectRatio(rect, size) {\n var scaledRect = scaleRect(rect, size);\n var _a = getRectSize(scaledRect), w = _a.w, h = _a.h;\n return w / h;\n}\nexports.getRectAspectRatio = getRectAspectRatio;\nfunction getElementSize(elem) {\n var img = elem;\n var video = elem;\n return {\n w: img.naturalWidth || video.videoWidth || elem.width,\n h: img.naturalHeight || video.videoHeight || elem.height\n };\n}\nexports.getElementSize = getElementSize;\nfunction elementToCanvas(elem, newSize, normalizedRect) {\n var _a = getElementSize(elem), ow = _a.w, oh = _a.h;\n var _b = normalizedRect ? normalizedRect : {\n x1: 0,\n x2: 1,\n y1: 0,\n y2: 1\n }, x1 = _b.x1, x2 = _b.x2, y1 = _b.y1, y2 = _b.y2;\n var w = x2 - x1;\n var h = y2 - y1;\n // scale to absolute pixels\n var sx = ow * x1;\n var sw = ow * w;\n var sy = oh * y1;\n var sh = oh * h;\n var dw = (newSize && newSize.w) || ow;\n var dh = (newSize && newSize.h) || oh;\n var canvas = document.createElement('canvas');\n canvas.width = dw;\n canvas.height = dh;\n var context = canvas.getContext('2d');\n if (!context) {\n throw Error(\"Error converting element to canvas: Can not get 2d context\");\n }\n // fill with white first to\n context.fillStyle = \"rgb(255, 255,255)\";\n context.fillRect(0, 0, dw, dh);\n context.drawImage(elem, sx, sy, sw, sh, 0, 0, // dx dy\n dw, dh);\n return canvas;\n}\nexports.elementToCanvas = elementToCanvas;\nfunction urlOrBlobToCanvas(file) {\n return new Promise(function (resolve, reject) {\n // File can also be an image element\n blueimp_load_image_1.default(file, (function (data) {\n var c = data;\n if (c) {\n resolve(c);\n }\n else {\n reject();\n }\n }), {\n canvas: true,\n orientation: true,\n crossOrigin: 'anonymous'\n });\n });\n}\nexports.urlOrBlobToCanvas = urlOrBlobToCanvas;\nfunction canvasToJpgBlob(canvas, quality) {\n return new Promise(function (resolve, reject) {\n canvas.toBlob(function (blob) {\n if (blob) {\n resolve(blob);\n }\n else {\n reject();\n }\n }, 'image/jpeg', quality);\n });\n}\nexports.canvasToJpgBlob = canvasToJpgBlob;\nexports.cadExtensions = ['.stp', '.step', '.stl', '.obj', '.glb', '.gltf'];\nfunction isCadFile(file) {\n return exports.cadExtensions.some(function (ex) { return file.name.endsWith(ex); });\n}\nexports.isCadFile = isCadFile;\nfunction isImageFile(file) {\n return file.type.startsWith('image/');\n}\nexports.isImageFile = isImageFile;\n/**\n * Measures time remaining for a promise to resolve.\n * @param promise The promise\n */\nfunction timePromise(promise) {\n return __awaiter(this, void 0, void 0, function () {\n var t1, res, t2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n t1 = Date.now();\n return [4 /*yield*/, promise];\n case 1:\n res = _a.sent();\n t2 = Date.now();\n return [2 /*return*/, { res: res, durationSeconds: (t2 - t1) / 1000 }];\n }\n });\n });\n}\nexports.timePromise = timePromise;\n//# sourceMappingURL=utils.js.map","module.exports = __webpack_public_path__ + \"static/media/reload_icon.4b579a74.svg\";","module.exports = __webpack_public_path__ + \"static/media/save_search.bebaeebf.svg\";","module.exports = __webpack_public_path__ + \"static/media/admin.9529c7f6.svg\";","module.exports = __webpack_public_path__ + \"static/media/nyris_logo.22d8f250.svg\";","module.exports = __webpack_public_path__ + \"static/media/translate_icon.f0492297.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon_search_image.c2c728c0.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHmSURBVHgBhVTtedpADNbJDOBuQCeIS/KvdQsT1JABgAlCJ4gzQZoJwgTBnQCn5De9DeoNSn8HdHl1xMTA8UTPY86ypFcfrw5DJySbJ20cyau6wmOLnl2FfM1R8O/OyBg3hKl75GzMVJ43NwCrgiDIHJuWmYWCA5nzh3R5U+u8M7S43AE4VxlDUzgX0KpDEAeQ7LEzaYASDRadazVogCMZF6ktm0HZYzIxzNd4jffAWD4Vn61lHSAARv7jWnoKANBZ3eJgcZEX3+xP5+THUVsS3W7bibiLs+2c+1UPTEju9FQ2hNYlwEZI26YjcV1NxGjQ08hs/tWmup3LxfkVE19RpA5SopoxAssDpDaTcfF2lpTtzQFUb8h9AAt92lDhgTdUztI/PbR/t3OMOOFGXDx4uritFTb0vUiXuS+3xfd+BlgB1WkteWMwlVGqDFMdXKEizz8onszSZUInpL/oaPsxyPjIJFI0+0PwvT54P7t8SoYhAJ2VAiCTXoXKbFHP5zrpUIBup6xFmbO+FQRjMf9u54id+mqnHkR3BYa5VkLviN4frEMX1ZYPX5Zj/eYHqyVh+/oUWPFDAcAIv5U8vy3f3i321z8yObINT2CslF5lba+6kKcHY8o44jPVxdF/cmL9vgT+U14ACB7ZdRuN18kAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGkSURBVHgBpVNLUttAEH2vx2KTjY8gVT5bvHGSTVLOCQgnAE6QcIJYJ0hugDgB3CAK2aTMRmtY2EdQdmA80/RYGLDKGChelUo1093v9fSHWIHBx3HqZ7Ov4mQznjXof0WonEvK8l82afuzHazeHygxwGpMLKQ4Gb3OV5IM+uOe0h8pkOIREKw4lS9lldXxLLcZPJEgQqE93fAHd6SGz/2zApQds9Yk6sdJGjHVsPf39F0hMYs5QbwUzf+M3mTUkJvaYfuj6F60m3bVPKOJ46cP59+p/LlgNtOOc5qHoLu4cYoZRgFCVH2gOG6pNsUXcZlQtXc/VSHSEPgbcGMxUgs8FqfbErhlKr8o6C697Wra66x5+dA0J/Yv1PPIqtd9yLNjhaiXp2UJaSRbYwcSqUVsEvESXHSqDq6SY2z4WNguyc3YgXXCU691AjZdIYo4cM2cvD8f2tUPPBOxM3GX5hN7Mno7NNYSz4Lmi2WUxRUv3TYQDp8UTt2PwrexbYdB/2xX6b7F/WjbqCgJt1+eZkvNeLCG83XALIVX+ycVXmFSltnKvboGDKy+I5kDyb8AAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAQCAYAAADwMZRfAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIFSURBVHgBjVNLThtBEK2qGRyJZOEj+AYYyY4cpCjjE8TegFgFn8DcwL6B5RPgrBBkgXMChg1BMRLmBJkbZLLAC3u6K6/Hnk8ckKhNd7WqXr16Vc20ZcFZUF2+W/SVNGDVOhFXiTQmkhDn99vD2WQ7h8vOh8tmn0mH68QXLaoYrx0e30X/gRx8awxIeUivs3hF1J4dzuY5yMeL9x3DelUiGFlje+JxbI0HVgnhXlPiAZjWckZPq/2wN4/FeQnrKM9XflyRdtnnAbwH8cw1AK5R7RMAugCKNpG15W7l1F2kdd4IEJChk7X21Ce6Aph7i3NsohNlGikYFoS1n4LAgpJAE1TtONA3RtqkOi4LwUqI9R1gtHmqNi+bddGiR7CQR1Tbc/cnzzw7IREbAOUm83eI6rIdxJb/uNMHdWv9SaoBdCppAcbFCqjaWJiLvsmzn/EYZtTFsyPXVmWxG6hrb802VNa9LCVhicQanZZ7VvWnBS/tLD3za/l2cSZe8oCHMaZVKwbBkdsVuTu+D0tU5yyrugtWpa+UT0edDmPsDAqU1yGNgdTujrExdgHXG7U7MXsGAvJvk0g3jUhQU8yJ25liyTmqWJmsNdrYwUVjSJwu2Gssxv/Zz/5PPp3bo/shjl55Cs8aJlUG+IdJZq3zVg20A+zLFwjt9HHjjOHPyfL4x9HP6XbOXwMK5ET221dOAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAlSSURBVHgBjVdLj1xnET333e/XTLvH0x7bsTJ2sC0sHGRgAVhCSAixyA6BWEdiwQLEgqURPwCEWCAE5A+gKOIlZRE5CRJCdpCwQ2KPXzEzmXfP9PT79u374FTd7vHYViA9utPd373fV1WnTp2qNu589NFpRHgtjuOrSZLAMAzIyzTN9F2/J7yM6f/0Jct8HLJnOOxjde0xP0fodDoIxj4GwyHW1zewt7cH27ZRrx/DqZNncOXKl5DL5nh+8oZteD+0uefnPOuqGJ5d6StRA7H8m37H9J48kzz5ijAMMQkC5PJZNBoN3otlN5aXz2IcjDHoDxDw/sbGBg1zk5Ggtdd65fXX/1Cx+fQryfRQNXOIgqEGjGmohpkalX/JoVPpy7Isvb+/vw/HceC6rhqUvfl8HvljeQQTOpjLw3Ft3ZPJZrB0snnVnh1y9NCjqThcT3AY/dEFfZbpKhQKKBYLuhxFEbLZLNGLNfooTmA7NnymJlEk6bRt4UUiZOMTXked+F8vyzKZ8wDdThdextW18XisBjzPQ7lSpUMxyDGEk5C2TUVS1trtDuxPbXCKhKbrMB3MP6NzGF2hXGJqE8Q04HpZJHGE4WiEwWDEc01Nk+9PEYCQ3EalUv5kBJ6z/8yXWQUkQkj63R8OkJCMgq+w3CYXKoxeIo+Zkkk40bTMgo3poHDm/zow48BRdGZrEtFvfvULHF9s4tKVl2HaruZdUtDr99W4lKAQUwzK87JmEg2bV7VahS0LaVk9ifE5Aj7zWe5LVO/dvIlz1QJW//MAwflluPkCTFZAjrnPEwkho5yf7rWIQqi6It8jrne73RSB2eHPltdTzhhpGszpIyJUIjpJZw9+r4Od7S2U6wsICLVtWoza1XKU58IoVId9ckIcEj5YXC8WizCPGnlaiPBEeOQvSbVQHFEYYx/Ngo27j1Zx58595AsVlmIZtXIN5VIJGS+TcoUkdZmaLHnhEhmJXNIUKQfazyOgTqQ8S0k2XTNTtYJhE/72JlZv3USytY7tfogTp05hMh4wUp+ROakRwh0K+YJJKtv8NyY6qoSsFdGFklTBzNhTuZ4qYRSHZHefueqg2+vyvYfjGeZu5UO88977uPfxDm7cfoSTzTl85gstFGo1WFnCy/0W4XfF8UKKYkQrB0xZxPPNxOJ7hBHJas8MHtWBdvcAG8xpa3+Xn9sUmY46kWEZ/ZvNxeXn4qkl/OPNv8Pnvvtrm7i38ggrq2t44ewyzpw+pSgqcoapwUiyJR0J0eEiv5rwbA9m3x9iwGsY+BhSKu8/fohbH7yPxxuPsdNuEYEhApJo4E+wtbGN9eEYjxKPXa6Hb3/rKs+ykBD2YSyQA3/8y1tYuf8I1fk5lKs1eOwFHnuAYTksT5IRIlYBrxCd3gHs3772OzaMHErlMkas03MvnUOLhlfXVtlmh+x0kTI4SwKJsX7P5/0u4mCEb1y+iGPzVRwMJ7j7cA0769vw2A9u/PM2Nrdb2NrcZjcMtITGPDsMA9xdeYAzZ05rdfz5T3+F8cvf/zqJlCwRdnfbWF0nsXa2aTBLpqfzwKDfY8n1+D6i8QMllkXo88USdlotCpCDWrWIxdNNZNgPXMtjMEMsn30R1996F+3Wgbb1SiWPr339K6wITxuUnGl859VXE3nYp6eipEMa2aMj+3ttdGhMGHuiuYiQ6ZEBI45TNbekNNlwBBXDc/ktRn1hHtW5OaJSZx/opcNKbwChwUKjjqWlJhuWneoCgwsnFMFvfvd7ydgP0aXhzZ1d7O/ucgOZbPHByQQRBwqLjC0VciiWKthl7Q5IynDoM69mOiJRWMzE1I8mpXd+oa5Dh8P1fM7Dl7/6Ra5TDzgLqGHtjmnt2Xf/dQeGm4WRyWjdLp9cxCIjPmDJDei9PxpicY6aTWV7sL7J2i2hx0pgrWlnE0fFyZhImHRcpqOdrU2ynYczNY3Fee2QoxFJzkAnE2lMMfrsFYK8Yebq0ppQp9HGySaJtA6fZWgYNqeamBuHKHLUchje8vnz2NrewdrjVRrksSTXwvE5hIMx9ogKEdWpZ+n0EjborBA4m8+gsbTIahqpmoZUwNk8qQprZebVgdgCPvv5yywQAz5bq8N+HY4n2KPBci6H7c111YEBIxEp1Q5HKH/6s5/gxvW/4c3r72L+xBJJmCOZd9Elf3J8vk7jeSqeqKNjs/qZNpd7ZTTLUq7t+RMLlE8LLsWhwfa4f3CAzkEXfc5wrc0trYJuW6ZTekyHVEhUZEw6EuJjRlqoVRXWTT4fBmE69fL+yB9zL/kiIkfDlmnr5CypET70nQGsWrVxLaQkBuxUH9y6TYL19GaOAlKdq9ExC6PeUOe+KEn7e4nNRpgsnBGdK5Yr+HDlHp2SLugR+olyQXTfYoVYOpyUGbWj0bsez2AnLPIcw7QrSaI9MR1zSlSvLlHQXwGMQuRz9oNAcifR5bk5S/FaJ188OhSoQcqgkQ4fbt7T90QmQMdChimUveKAGLZZvseOzSkxbdFlh1HajNrngpSIwzy6djo8jgaDtEGpPxxAGVkswsR+kOPBo8GQyEBTYzsmZ4IaJKA4TMnmcvyWEbzHqpJGNAnS0T3i/YI4I12rWCpiTONuIY+EERlkd6TdkIrneiRbqAYkj8Jiyng699NxWZORXKTZiA0emmdPGevUK6jJHCg8chi1Dqe2XHYKp4znFy9fuSa9WkapiKEoIZk3mGmjTlOQaD+QqVfGcDlcBEdeDqOLub/ZPI4f/+gHOH/xAnb29rUTemS55FymH90jKeWeCcdzIaiIkdUPjWuONBp5kJfmnTD7gz4CGSyZ3ySKpiNCOo5rbqlyDqOz5WKnk1E9pDZkc1k2txIePHyohJXfBjKCxVo9VEeuyXcRMRlUjfz8UiIKJs0ipvROiILovjEtNTGUoZiEYazGTUJp81BPDPNzIM7xbMdJeZSnA0LUPgOQczMZT5HKEikJQn60ChryI0WnZr8/epvWrqYzg6GHxqLxLHyPh9UXGvzRUeZvu4lOuTrp8jnXdRQRj3ohkELz6+g9mX7zJKi8C4FtOpdjT8jRCZNyGFArIqZ8NBy9YXmF0jteqfhC40TzpfnjCxrZhUsXcOnlz6FQrVBEIk6vJdRqFUZoUXobOtMLvIqSoCIiwytHh8ulnH42pn0hnSsjhZ4/yZUTNCwl+TbL5fv/BQhDE04/3zDyAAAAAElFTkSuQmCC\"","module.exports = __webpack_public_path__ + \"static/media/Rectangle.4dd8b747.png\";","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"blueimp-canvas-to-blob\");\nvar utils_1 = require(\"./utils\");\nvar axios_1 = __importDefault(require(\"axios\"));\n// re-export utils\n__export(require(\"./utils\"));\nvar NyrisAPI = /** @class */ (function () {\n function NyrisAPI(settings) {\n this.httpClient = axios_1.default.create();\n if (!settings.apiKey) {\n throw new Error(\"The api-key is not set.\");\n }\n this.apiKey = settings.apiKey;\n var baseUrl = settings.baseUrl || 'https://api.nyris.io';\n this.imageMatchingUrl = baseUrl + \"/find/v1\";\n this.cadMatchingUrl = baseUrl + \"/cad/find/v0.1\";\n this.imageMatchingUrlBySku = baseUrl + \"/recommend/v1/\";\n this.imageMatchingSubmitManualUrl = baseUrl + \"/find/v1/manual/\";\n this.feedbackUrl = baseUrl + \"/feedback/v1/\";\n this.regionProposalUrl = baseUrl + \"/find/v1/regions/\";\n this.responseFormat = settings.responseFormat || 'application/offers.nyris+json';\n this.maxHeight = settings.maxHeight || 500;\n this.maxWidth = settings.maxWidth || 500;\n this.jpegQuality = settings.jpegQuality || 0.92;\n this.customSearchRequest = settings.customSearchRequest;\n this.responseHook = settings.responseHook;\n this.xOptions = settings.xOptions;\n }\n NyrisAPI.prototype.prepareImage = function (canvas, cropRect) {\n return __awaiter(this, void 0, void 0, function () {\n var crop, originalSize, aspectRatio, scaledSize, resizedCroppedCanvas;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n crop = cropRect || {\n x1: 0,\n x2: 1,\n y1: 0,\n y2: 1\n };\n originalSize = utils_1.getElementSize(canvas);\n aspectRatio = utils_1.getRectAspectRatio(crop, originalSize);\n scaledSize = utils_1.getThumbSizeArea(this.maxWidth, this.maxHeight, aspectRatio);\n resizedCroppedCanvas = utils_1.elementToCanvas(canvas, scaledSize, crop);\n return [4 /*yield*/, utils_1.canvasToJpgBlob(resizedCroppedCanvas, this.jpegQuality)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n NyrisAPI.prototype.getSearchRequestHeaders = function (contentType) {\n // Create headers\n var headers = {\n 'X-Api-Key': this.apiKey,\n 'Accept-Language': 'de,*;q=0.5',\n 'Accept': this.responseFormat,\n 'Content-Type': contentType || 'application/octet-stream'\n };\n // Add options\n var xOptions = [];\n if (this.xOptions)\n xOptions.push(this.xOptions);\n if (xOptions.length > 0)\n headers['X-Options'] = xOptions.join(' ');\n return headers;\n };\n ;\n NyrisAPI.prototype.getRegionRequestHeaders = function (contentType) {\n // Create headers\n var headers = {\n 'X-Api-Key': this.apiKey,\n 'Content-Type': contentType || 'application/octet-stream'\n };\n // Add options\n var xOptions = [];\n if (this.xOptions)\n xOptions.push(this.xOptions);\n if (xOptions.length > 0)\n headers['X-Options'] = xOptions.join(' ');\n return headers;\n };\n ;\n NyrisAPI.prototype.getParams = function (options) {\n var params = options.geoLocation ? {\n lat: options.geoLocation.lat.toString(),\n lon: options.geoLocation.lon.toString(),\n dist: options.geoLocation.dist.toString()\n } : {};\n return params;\n };\n NyrisAPI.prototype.parseCategoryPredictions = function (categoryPredictionResponse) {\n return Object.entries(categoryPredictionResponse || {}).map(function (_a) {\n var name = _a[0], score = _a[1];\n return ({\n name: name,\n score: score\n });\n }).sort(function (a, b) { return b.score - a.score; });\n };\n NyrisAPI.prototype.parseSearchResult = function (res, durationSeconds) {\n var categoryPredictions = this.parseCategoryPredictions(res.data.predicted_category);\n var codes = res.data.barcodes || [];\n var responseData = this.responseHook ? this.responseHook(res.data) : res.data;\n var results = 'offerInfos' in responseData ?\n responseData.offerInfos.map(function (r, i) { return (__assign(__assign({}, r), { position: i })); })\n : responseData.results.map(function (r, i) {\n return ({\n position: i,\n sku: r.sku,\n title: r.title,\n img: r.images && r.images[0] ? { url: r.images[0] } : undefined,\n l: r.links ? r.links.main : undefined,\n p: r.price ? { vi: parseFloat(r.price) * 100, c: r.price.split(\" \")[1] } : undefined\n });\n });\n var requestId = res.headers[\"x-matching-request\"];\n var duration = 'durationSeconds' in res.data ? res.data.durationSeconds : durationSeconds;\n return { results: results, requestId: requestId, duration: duration, categoryPredictions: categoryPredictions, codes: codes };\n };\n /**\n * Search using the experimental CAD API\n * @param file - A CAD file\n * @param options - Image search options\n * @deprecated This is a prototype API and might be removed/changed at any time.\n */\n NyrisAPI.prototype.findByCad = function (file, options) {\n return __awaiter(this, void 0, void 0, function () {\n var fileType, headers, params, _a, res, durationSeconds;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n fileType = file.type;\n headers = this.getSearchRequestHeaders(fileType);\n params = this.getParams(options);\n return [4 /*yield*/, utils_1.timePromise(this.httpClient.request({\n method: 'POST',\n url: this.cadMatchingUrl,\n data: file,\n params: params,\n headers: headers,\n responseType: 'json'\n }))];\n case 1:\n _a = _b.sent(), res = _a.res, durationSeconds = _a.durationSeconds;\n return [2 /*return*/, this.parseSearchResult(res, durationSeconds)];\n }\n });\n });\n };\n /**\n * Search for an image.\n * @param canvas Image, Video (frame) or Canvas to use use for image search.\n * @param options See [[ImageSearchOptions]].\n */\n NyrisAPI.prototype.findByImage = function (canvas, options) {\n return __awaiter(this, void 0, void 0, function () {\n var imageBytes, headers, params, _a, res, durationSeconds;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.prepareImage(canvas, options.cropRect)];\n case 1:\n imageBytes = _b.sent();\n if (this.customSearchRequest)\n return [2 /*return*/, this.customSearchRequest(imageBytes, this.httpClient)];\n headers = this.getSearchRequestHeaders('image/jpeg');\n params = this.getParams(options);\n return [4 /*yield*/, utils_1.timePromise(this.httpClient.request({\n method: 'POST',\n url: this.imageMatchingUrl,\n data: imageBytes,\n params: params,\n headers: headers,\n responseType: 'json'\n }))];\n case 2:\n _a = _b.sent(), res = _a.res, durationSeconds = _a.durationSeconds;\n return [2 /*return*/, this.parseSearchResult(res, durationSeconds)];\n }\n });\n });\n };\n /**\n * Search by SKU (itemID)\n * @param sku The SKU or ID of the item.\n * @param mid The index ID.\n */\n NyrisAPI.prototype.findBySku = function (sku, mid) {\n return __awaiter(this, void 0, void 0, function () {\n var headers, url, r;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n headers = this.getSearchRequestHeaders();\n url = \"\" + this.imageMatchingUrlBySku + encodeURIComponent(sku) + \"/\" + encodeURIComponent(mid);\n return [4 /*yield*/, this.httpClient.get(url, { headers: headers, responseType: 'json' })];\n case 1:\n r = _a.sent();\n if (this.responseHook) {\n r = this.responseHook;\n }\n return [2 /*return*/, r];\n }\n });\n });\n };\n /**\n * Find significant sections in the image.\n * @param canvas Canvas, video or image to search with.\n * @returns A list of regions, see [[Region]].\n */\n NyrisAPI.prototype.findRegions = function (canvas) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, origW, origH, scaledSize, resizedCroppedCanvas, blob, headers, response, regions;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = utils_1.getElementSize(canvas), origW = _a.w, origH = _a.h;\n scaledSize = utils_1.getThumbSizeArea(this.maxWidth, this.maxHeight, origW / origH);\n resizedCroppedCanvas = utils_1.elementToCanvas(canvas, scaledSize);\n return [4 /*yield*/, utils_1.canvasToJpgBlob(resizedCroppedCanvas, this.jpegQuality)];\n case 1:\n blob = _b.sent();\n headers = this.getRegionRequestHeaders('image/jpeg');\n return [4 /*yield*/, this.httpClient.request({\n method: 'POST',\n url: this.regionProposalUrl,\n data: blob,\n headers: headers\n })];\n case 2:\n response = _b.sent();\n regions = response.data;\n return [2 /*return*/, regions.map(function (r) { return ({\n className: r.className,\n confidence: r.confidence,\n normalizedRect: {\n x1: r.region.left / scaledSize.w,\n x2: (r.region.right / scaledSize.w),\n y1: r.region.top / scaledSize.h,\n y2: (r.region.bottom / scaledSize.h),\n }\n }); })];\n }\n });\n });\n };\n /**\n * Send feedback event.\n * @param sessionId ID of the session. Usually the first request ID returned.\n * @param requestId The request ID to submit the feedback event to.\n * @param payload See [[FeedbackEventPayload]].\n */\n NyrisAPI.prototype.sendFeedback = function (sessionId, requestId, payload) {\n return __awaiter(this, void 0, void 0, function () {\n var headers, data;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n headers = {\n 'X-Api-Key': this.apiKey,\n 'Content-Type': 'application/json'\n };\n data = __assign({ request_id: requestId, timestamp: new Date(), session_id: sessionId }, payload);\n return [4 /*yield*/, this.httpClient.request({\n method: 'POST',\n url: this.feedbackUrl,\n headers: headers,\n data: data\n })];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return NyrisAPI;\n}());\nexports.default = NyrisAPI;\n//# sourceMappingURL=index.js.map","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import {AppSettings} from \"./types\";\n\nexport const defaultSettings : AppSettings = {\n\n xOptions: false,\n apiKey: 'UNSET',\n exampleImages: [],\n preview: true,\n regions: false,\n maxWidth: 500,\n maxHeight: 500,\n jpegQuality: 0.92,\n baseUrl: 'https://api.nyris.io',\n instantRedirectPatterns: [\n '^https?://(www.)?youtube.com/',\n '^https?://(www.)?youtu.be/',\n '^https?://(www.)?vimeo.com/',\n '^https?://(www.)?dailymotion.com/',\n '^https?://(www.)?dai.ly/'\n ],\n themePage: {\n default: { active: true }\n }\n};\n\nexport const defaultMdSettings = {\n appBarLogoUrl: 'images/nyris-logo.svg',\n appBarCustomBackgroundColor: '#f4f4f4',\n appBarCustomTextColor: '#ccc',\n appBarTitle: '',\n primaryColor: '#e2001a',\n secondaryColor: '#777777',\n resultFirstRowProperty: 'title',\n resultSecondRowProperty: 'sku',\n resultLinkText: 'Info',\n customFontFamily: 'Helvetica',\n};\n","import React from \"react\";\n\nfunction Login(): JSX.Element {\n return <div>page login</div>;\n}\n\nexport default Login;\n","import React from \"react\";\n\nfunction HeaderComponent(): JSX.Element {\n return (\n <div className=\"navWrap\">\n <div className=\"wrapper\" style={{ padding: 0 }}>\n <section id=\"branding\" />\n <div id=\"menu\" className=\"menuWrap\" role=\"navigation\">\n <ul>\n <li>\n <a\n href=\"https://nyris.io/imprint/#privacy\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Privacy Policy\n </a>\n </li>\n <li>\n <a\n href=\"https://nyris.io/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Visit our Website\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n );\n}\n\nexport default HeaderComponent;\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport jscookie from \"js-cookie\";\n\ninterface InitialStateTypes {\n accessToken?: string | Record<string, unknown> | null;\n name?: string | null;\n role?: string | null;\n}\n\ninterface LoginResponse {\n access_token?: string | Record<string, unknown> | null;\n name?: string | null;\n role?: string | null;\n}\n\nconst initialState: InitialStateTypes = {\n accessToken: null,\n name: null,\n role: null,\n};\n\nexport const authSlice = createSlice({\n name: \"auth\",\n initialState,\n reducers: {\n login: (state, data: PayloadAction<LoginResponse>) => {\n // state.accessToken = payload.access_token;\n // state.name = payload.name;\n // state.role = payload.role;\n // if (payload.access_token) {\n // jscookie.set(\"token\", payload?.access_token);\n // }\n },\n logout: (state) => {\n state.accessToken = null;\n state.name = null;\n state.role = null;\n jscookie.remove(\"token\");\n },\n },\n});\n\nexport const { login, logout } = authSlice.actions;\nexport default authSlice.reducer;\n","import {WH} from \"@nyris/nyris-api\";\n\n/**\n * Gets url parameter values by name.\n * @param name The parameter name.\n * @returns string value if it has value assigned with `=`, true if it is specified but without value or `undefined` if not present\n */\nexport function getUrlParam(name: string): string | boolean | undefined {\n let results = new RegExp(`[?&]${name}(=([^&#]*))?(&|$|#)`, 'i')\n .exec(window.location.href);\n if (results && results[2]) { // has value\n console.log('has value', name, results[2]);\n return decodeURIComponent(results[2]);\n }\n return (results && true) // present but without value\n || undefined; // not present\n}\n\nexport function getThumbSizeLongestEdge(maxW: number, maxH: number, iW: number, iH: number): WH {\n let iR = iW / iH;\n let dR = maxW / maxH;\n if (dR > iR) {\n return {\n w: iW * maxH / iH,\n h: maxH\n }\n }\n return {\n w: maxW,\n h: iH * maxW / iW\n }\n}\n\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { CanvasWithId } from \"types\";\nimport { Code, RectCoords, Region } from \"@nyris/nyris-api\";\n\n\ninterface CategoryPrediction {\n name: string;\n score: number;\n}\n\nexport interface SearchState {\n results: any[];\n duration?: number;\n requestId?: string;\n sessionId?: string;\n regions: Region[];\n selectedRegion?: RectCoords;\n fetchingRegions: boolean;\n fetchingResults: boolean;\n filterOptions: string[];\n requestImage?: CanvasWithId;\n categoryPredictions: CategoryPrediction[];\n codes: Code[];\n errorMessage: string;\n valueTextSearch: any;\n resultSearchText: any[];\n filters: any[];\n configureFilter?: any;\n loadingSearchAlgolia: boolean;\n}\n\n// TODO: init state\nconst initialState: SearchState = {\n results: [],\n regions: [],\n selectedRegion: undefined,\n requestImage: undefined,\n fetchingResults: false,\n fetchingRegions: false,\n filterOptions: [],\n categoryPredictions: [],\n codes: [],\n errorMessage: \"\",\n valueTextSearch: {},\n resultSearchText: [],\n filters: [],\n configureFilter: {},\n loadingSearchAlgolia: false,\n};\n\n\n export const searchSlice = createSlice({\n name: \"search\",\n initialState,\n reducers: {\n setSearchResults: (state, data) => {\n const { payload } = data;\n const {\n results,\n requestId,\n categoryPredictions,\n codes,\n duration,\n filters,\n } = payload;\n return {\n ...state,\n filters,\n results,\n requestId,\n categoryPredictions,\n codes,\n duration,\n sessionId: state.sessionId || requestId,\n fetchingResults: false,\n };\n },\n\n setRegions: (state, data: PayloadAction<Region[]>) => ({\n ...state,\n regions: data.payload\n }),\n\n setSelectedRegion: (state, data: PayloadAction<RectCoords|undefined>) => ({\n ...state,\n selectedRegion: data.payload\n }),\n\n setRequestImage: (state, data: PayloadAction<HTMLCanvasElement>) => ({\n ...state,\n requestImage: {\n canvas: data.payload,\n id: Math.random().toString()\n }\n }),\n\n selectionChanged: (state, data: PayloadAction<RectCoords>) => {\n const { payload } = data;\n return {\n ...state,\n selectedRegion: payload,\n };\n },\n loadFileSelectRegion: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n\n const { results, requestId, categoryPredictions, codes, duration } =\n payload;\n return {\n ...state,\n results,\n requestId,\n categoryPredictions,\n codes,\n duration,\n sessionId: state.sessionId || requestId,\n fetchingRegions: false,\n };\n },\n loadingActionResults: (state) => {\n return {\n ...state,\n fetchingResults: true,\n };\n },\n loadingActionRegions: (state) => {\n return {\n ...state,\n fetchingRegions: true,\n };\n },\n searchFileImageNonRegion: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n const {\n results,\n requestId,\n duration,\n categoryPredictions,\n codes,\n } = payload;\n return {\n ...state,\n results,\n requestId,\n duration,\n categoryPredictions,\n codes,\n fetchingResults: false,\n };\n },\n changeValueTextSearch: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n valueTextSearch: payload,\n };\n },\n resultSearchText: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n resultSearchText: payload,\n };\n },\n updateResults: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n results: payload,\n };\n },\n reset: (state, data: PayloadAction<any>) => {\n return {\n results: [],\n regions: [],\n selectedRegion: { x1: 0.1, x2: 0.9, y1: 0.1, y2: 0.9 },\n requestImage: undefined,\n fetchingResults: false,\n fetchingRegions: false,\n filterOptions: [],\n categoryPredictions: [],\n codes: [],\n errorMessage: \"\",\n valueTextSearch: {},\n resultSearchText: [],\n filters: [],\n loadingSearchAlgolia: false,\n };\n },\n configureFilter: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n configureFilter: payload,\n };\n },\n setUpdateSession: (state, data: PayloadAction<string>) => {\n const { payload } = data;\n return {\n ...state,\n sessionId: payload,\n };\n },\n updateResultChangePosition: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n const { results } = payload;\n return {\n ...state,\n results,\n };\n },\n\n setError: (state, data: PayloadAction<string>) => {\n return {\n ...state,\n fetchingRegions: false,\n fetchingResults: false,\n errorMessage: data.payload\n }\n }\n },\n});\n\nexport const {\n setSearchResults,\n selectionChanged,\n setRequestImage,\n loadFileSelectRegion,\n setRegions,\n setSelectedRegion,\n loadingActionResults,\n loadingActionRegions,\n searchFileImageNonRegion,\n changeValueTextSearch,\n resultSearchText,\n updateResults,\n reset,\n configureFilter,\n setUpdateSession,\n updateResultChangePosition,\n setError,\n} = searchSlice.actions;\nexport default searchSlice.reducer;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nexport type NyrisAppPart = \"start\" | \"camera\" | \"results\";\nexport type NyrisFeedbackState =\n | \"hidden\"\n | \"question\"\n | \"positive\"\n | \"negative\";\nexport interface NyrisAppState {\n showPart: NyrisAppPart;\n feedbackState: NyrisFeedbackState;\n}\n\nconst initialState: NyrisAppState | NyrisFeedbackState = {\n showPart: \"start\",\n feedbackState: \"hidden\",\n};\n\nexport const nyrisSlice = createSlice({\n name: \"nyris\",\n initialState,\n reducers: {\n showStart: (state) => {\n return {\n ...state,\n showPart: \"start\",\n };\n },\n showCamera: (state) => {\n return {\n ...state,\n showPart: \"camera\",\n };\n },\n showResults: (state) => {\n return {\n ...state,\n showPart: \"results\",\n };\n },\n showFeedback: (state) => {\n return {\n ...state,\n feedbackState: \"question\",\n };\n },\n hideFeedback: (state) => {\n return {\n ...state,\n feedbackState: \"hidden\",\n };\n },\n feedbackSubmitPositive: (state) => {\n return {\n ...state,\n feedbackState: \"positive\",\n };\n },\n feedbackNegative: (state) => {\n return {\n ...state,\n feedbackState: \"negative\",\n };\n },\n },\n});\n\nexport const {\n showStart,\n showCamera,\n showResults,\n showFeedback,\n hideFeedback,\n feedbackSubmitPositive,\n feedbackNegative,\n} = nyrisSlice.actions;\nexport default nyrisSlice.reducer;\n","import { configureStore } from \"@reduxjs/toolkit\";\nimport { TypedUseSelectorHook, useDispatch, useSelector } from \"react-redux\";\nimport { combineReducers } from \"redux\";\nimport Auth from \"Store/Auth\";\nimport {AppSettings, MDSettings} from \"types\";\nimport { getUrlParam } from \"utils\";\nimport Search from \"Store/Search\";\nimport Nyris from \"Store/Nyris\";\nimport {defaultMdSettings, defaultSettings} from \"../defaults\";\n\ndeclare var settings: AppSettings;\n\n\n\nlet normalizedSettings: AppSettings = {\n ...defaultSettings,\n ...settings,\n};\n\n// spread default settings for material design\nlet mdSettings : MDSettings = {\n ...defaultMdSettings,\n ...settings.themePage.materialDesign\n}\nnormalizedSettings.themePage.materialDesign = mdSettings;\n\nnormalizedSettings = {\n ...normalizedSettings,\n apiKey: (getUrlParam(\"apiKey\") as string) || normalizedSettings.apiKey,\n xOptions: (getUrlParam(\"xOptions\") as string) || normalizedSettings.xOptions,\n regions:\n (getUrlParam(\"use.regions\") as boolean) || normalizedSettings.regions,\n preview:\n (getUrlParam(\"use.preview\") as boolean) || normalizedSettings.preview,\n};\n\nconst reducers = combineReducers({\n auth: Auth,\n settings: () => normalizedSettings,\n search: Search,\n nyris: Nyris,\n});\n\nexport const store = configureStore({\n reducer: reducers,\n devTools: process.env.NODE_ENV !== \"production\",\n});\n\nexport type RootState = ReturnType<typeof store.getState>;\nexport type AppDispatch = typeof store.dispatch;\n\nexport const useAppDispatch = () => useDispatch<AppDispatch>();\nexport const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;\n","import NyrisAPI, {FeedbackEventPayload, NyrisAPISettings, RectCoords} from \"@nyris/nyris-api\";\nimport {RootState} from \"../Store/Store\";\n\nexport const feedbackSuccessEpic = async (state: RootState, success: boolean) => {\n const { search, settings } = state;\n return await sendFeedbackByApi(settings, search.sessionId, search.requestId, {\n event: 'feedback',\n data: { success }\n });\n};\n\nexport const feedbackClickEpic = async (state: RootState, position: number) => {\n const { search, settings } = state;\n return await sendFeedbackByApi(settings, search.sessionId, search.requestId, {\n event: \"click\",\n data: { positions: [position] },\n });\n};\n\nexport const feedbackTextSearchEpic = async (state: RootState, query: string, page: number, productIds: string[]) => {\n try {\n const { search, settings } = state;\n const eventData = {\n query,\n page,\n product_ids: productIds,\n };\n const textSearchEvent = { event: \"text-search\", data: eventData };\n // @ts-ignore\n return await sendFeedbackByApi(settings, search.sessionId, search.requestId, textSearchEvent);\n } catch (error) {\n console.log(\"error feedbackTextSearchEpic\", error);\n }\n};\n\nexport const feedbackRegionEpic = async (state: RootState, region: RectCoords) => {\n const {settings, search} = state;\n const {sessionId, requestId } = search;\n const { x1, x2, y1, y2 } = region;\n const payload : FeedbackEventPayload = {\n event: \"region\",\n data: { rect: { x: x1, y: y1, w: x2 - x1, h: y2 - y1 } }\n };\n return await sendFeedbackByApi(settings, sessionId, requestId, payload);\n};\n\nexport const sendFeedbackByApi = async (\n settings: NyrisAPISettings,\n sessionId: string | undefined,\n requestId: string | undefined,\n payload: FeedbackEventPayload\n) => {\n const api = new NyrisAPI(settings);\n if (sessionId && requestId) {\n try {\n const dataByApi = await api\n .sendFeedback(sessionId, requestId, payload)\n .then((res) => {});\n console.log(\"dataByApi\", dataByApi);\n } catch (error) {\n console.log(\"error sendFeedbackByApi321\", error);\n }\n }\n};\n","import { useAppDispatch, useAppSelector } from \"Store/Store\";\nimport {\n feedbackNegative,\n feedbackSubmitPositive,\n NyrisFeedbackState,\n} from \"Store/Nyris\";\nimport React from \"react\";\nimport { Animate } from \"react-move\";\nimport { feedbackSuccessEpic } from \"services/Feedback\";\ninterface FeedbackProps {\n feedbackState: NyrisFeedbackState;\n onClose?: () => void;\n}\n\nconst Feedback: React.FC<FeedbackProps> = ({ feedbackState, onClose }) => {\n let inner: any = null;\n const state = useAppSelector((state) => state);\n const dispatch = useAppDispatch();\n const onPositiveFeedback = (data: boolean) => {\n feedbackSuccessEpic(state, data);\n if (data) {\n dispatch(feedbackSubmitPositive());\n } else {\n dispatch(feedbackNegative());\n }\n };\n\n switch (feedbackState) {\n case \"question\":\n inner = (\n <div className=\"feedbackForm\">\n <p>Did you find what you were looking for?</p>\n <div\n className=\"btn primary positiveFeedback\"\n onClick={() => onPositiveFeedback(true)}\n >\n Yes\n </div>\n <div\n className=\"btn secondary negativeFeedback\"\n onClick={() => onPositiveFeedback(false)}\n >\n No\n </div>\n </div>\n );\n break;\n case \"positive\":\n inner = (\n <div className=\"feedbackMessage positive\">\n Great, thank you for your feedback!\n </div>\n );\n break;\n case \"negative\":\n inner = (\n <div className=\"feedbackMessage negative\">\n We saved your request so we can track down the issue and improve the\n search experience. Your Feedback helps us to make our service better\n for everyone, thank you!\n <br />\n <div className=\"btn dismiss\" onClick={onClose}>\n Dismiss\n </div>\n </div>\n );\n break;\n default:\n inner = null;\n break;\n }\n return (\n <Animate\n show={feedbackState !== \"hidden\"}\n start={{ y: 100, opacity: 0 }}\n enter={{ y: [0], opacity: [1] }}\n leave={{ y: [100], opacity: [0] }}\n >\n {({ y, opacity }) => (\n <section\n className=\"feedback\"\n style={{ transform: `translateY(${y}%)`, opacity }}\n >\n <div className=\"wrapper\">{inner}</div>\n <div className=\"closeFeedbackContainer\">\n <div className=\"closeFeedback\" onClick={onClose} />\n </div>\n </section>\n )}\n </Animate>\n );\n};\n\nexport default Feedback;\n","import React from \"react\";\nimport { useAppDispatch, useAppSelector } from \"Store/Store\";\nimport Feedback from \"components/Feedback\";\nimport { hideFeedback } from \"Store/Nyris\";\n\nfunction FooterComponent(): JSX.Element {\n const dispatch = useAppDispatch();\n const searchState = useAppSelector((state) => state);\n const { nyris } = searchState;\n const { feedbackState } = nyris;\n return (\n <>\n <section className=\"footnote\">\n <div className=\"wrapper\">\n © 2017 - 2019 <a href=\"https://nyris.io\">nyris GmbH</a> - All rights\n reserved - <a href=\"https://nyris.io/imprint/\">Imprint</a>\n </div>\n </section>\n <Feedback\n feedbackState={feedbackState}\n onClose={() => {\n return dispatch(hideFeedback());\n }}\n />\n </>\n );\n}\n\nexport default FooterComponent;\n","import React from \"react\";\nimport { Container, Toolbar, Typography, AppBar } from \"@material-ui/core\";\nimport { useAppSelector } from \"Store/Store\";\nimport {MDSettings} from \"../types\";\ninterface Props {\n settings: any;\n}\n\nfunction HeaderMdComponent(): JSX.Element {\n const { settings } = useAppSelector((state) => state);\n const { themePage } = settings;\n const mdSettings = themePage.materialDesign as MDSettings;\n\n return (\n <AppBar\n position={\"relative\"}\n style={{ backgroundColor: mdSettings.appBarCustomBackgroundColor }}\n >\n <Container\n maxWidth=\"md\"\n style={{ flexDirection: \"row\", display: \"flex\" }}\n >\n <img\n src={mdSettings.appBarLogoUrl}\n style={{ height: \"2em\", minHeight: \"64px\", display: \"flex\" }}\n alt=\"Logo\"\n />\n <Toolbar component=\"span\">\n <Typography style={{ color: mdSettings.appBarCustomTextColor }}>\n {mdSettings.appBarTitle}\n </Typography>\n </Toolbar>\n </Container>\n </AppBar>\n );\n}\n\nexport default HeaderMdComponent;\n","import React from \"react\";\nimport { makeStyles, Typography, Link } from \"@material-ui/core\";\nimport { useAppSelector } from \"Store/Store\";\n\nconst useStyles = makeStyles((theme) => ({\n footer: {\n backgroundColor: theme.palette.background.paper,\n padding: theme.spacing(6),\n },\n}));\n\nfunction Copyright() {\n return (\n <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n {\"Powered by \"}\n <Link\n color=\"inherit\"\n href=\"https://nyris.io/\"\n component=\"a\"\n target=\"_blank\"\n >\n nyris.io\n </Link>\n </Typography>\n );\n}\n\nfunction FooterMD(): JSX.Element {\n const searchState = useAppSelector((state) => state);\n const { search, nyris } = searchState;\n const { showPart } = nyris;\n const { requestId } = search;\n const classes = useStyles();\n return (\n <footer className={classes.footer}>\n <Typography variant=\"subtitle1\" align=\"center\" color=\"textSecondary\">\n {requestId && showPart === \"results\" && (\n <div\n style={{\n textAlign: \"center\",\n fontSize: \"0.7em\",\n paddingTop: \"0.8em\",\n }}\n >\n Request identifier {requestId}\n </div>\n )}\n </Typography>\n <Copyright />\n </footer>\n );\n}\n\nexport default FooterMD;\n","import { Box, Grid } from \"@material-ui/core\";\nimport React from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport \"./common.scss\";\nimport IconReLoad from \"common/assets/icons/reload_icon.svg\";\nimport IconSave from \"common/assets/icons/save_search.svg\";\nimport IconSupport from \"common/assets/icons/support.svg\";\nimport IconAdmin from \"common/assets/icons/admin.svg\";\nimport LogoNyris from \"common/assets/icons/nyris_logo.svg\";\nfunction HeaderNewVersion(): JSX.Element {\n const handleCheckMatchLink = (match: any, location: any) => {\n let active = false;\n if (match?.url === location.pathname) {\n active = true;\n }\n\n return active;\n };\n\n return (\n <Box className=\"box-content\" display={\"flex\"}>\n <NavLink to=\"/\" style={{ lineHeight: 0 }}>\n {/* <section id=\"branding\" style={{ height: 32 }} /> */}\n <img width={74} height={19} src={`${LogoNyris}`} alt=\"nyris logo\" />\n </NavLink>\n <Grid container className=\"nav-menu\">\n <Grid item className=\"item-nav\">\n <NavLink\n activeClassName=\"active\"\n isActive={(match, location) =>\n handleCheckMatchLink(match, location)\n }\n to={\"/search-history\"}\n className=\"nav-link p-0 menu-children rounded-0\"\n >\n <span className=\"d-none d-sm-block ms-4 px-2 py-1 border-bottom-1\">\n Search history\n <img width={10} height={10} src={`${IconReLoad}`} alt=\"\"/>\n </span>\n </NavLink>\n </Grid>\n <Grid item className=\"item-nav\">\n <NavLink\n activeClassName=\"active\"\n isActive={(match, location) =>\n handleCheckMatchLink(match, location)\n }\n to={\"/saved\"}\n className=\"nav-link p-0 menu-children rounded-0\"\n >\n <span className=\"d-none d-sm-block ms-4 px-2 py-1 border-bottom-1\">\n Saved\n <img width={10} height={10} src={`${IconSave}`} alt=\"\"/>\n </span>\n </NavLink>\n </Grid>\n <Grid item className=\"item-nav\">\n <NavLink\n activeClassName=\"active\"\n isActive={(match, location) =>\n handleCheckMatchLink(match, location)\n }\n to={\"/support\"}\n className=\"nav-link p-0 menu-children rounded-0\"\n >\n <span className=\"d-none d-sm-block ms-4 px-2 py-1 border-bottom-1\">\n Support\n <img width={10} height={10} src={`${IconSupport}`} alt=\"\" />\n </span>\n </NavLink>\n </Grid>\n <Grid item className=\"item-nav\">\n <NavLink\n activeClassName=\"active\"\n isActive={(match, location) =>\n handleCheckMatchLink(match, location)\n }\n to={\"/account\"}\n className=\"nav-link p-0 menu-children rounded-0\"\n >\n <span className=\"d-none d-sm-block ms-4 px-2 py-1 border-bottom-1\">\n My Account\n <img width={10} height={10} src={`${IconAdmin}`} alt=\"\"/>\n </span>\n </NavLink>\n </Grid>\n </Grid>\n </Box>\n );\n}\n\nexport default HeaderNewVersion;\n","import { Box } from '@material-ui/core'\nimport React from 'react'\n\ninterface Props {}\n\nfunction FooterNewVersion(props: Props): JSX.Element {\n return (\n <Box></Box>\n )\n}\n\nexport default FooterNewVersion\n","import React from \"react\";\nimport { ReactNode } from \"components/common\";\nimport \"./common.scss\";\nimport HeaderComponent from \"./Header\";\nimport FooterComponent from \"./Footer\";\nimport { useAppSelector } from \"Store/Store\";\nimport HeaderMdComponent from \"./HeaderMd\";\nimport FooterMD from \"./FooterMD\";\nimport HeaderNewVersion from \"./HeaderNewVersion\";\nimport FooterNewVersion from \"./FooterNewVersion\";\nimport {AppState} from \"../types\";\nfunction Layout({ children }: ReactNode): JSX.Element {\n const { settings } = useAppSelector<AppState>((state:any) => state);\n const { themePage } = settings;\n \n let HeaderApp: any;\n let FooterApp: any;\n let classNameBoxVersion: string = \"newVersion\";\n if (themePage.default?.active) {\n classNameBoxVersion = \"default\";\n HeaderApp = HeaderComponent;\n FooterApp = FooterComponent;\n } else if (themePage.materialDesign?.active) {\n classNameBoxVersion = \"materialDesign\";\n HeaderApp = HeaderMdComponent;\n FooterApp = FooterMD;\n } else {\n HeaderApp = HeaderNewVersion;\n FooterApp = FooterNewVersion;\n }\n return (\n <div className={`layout-main-${classNameBoxVersion}`}>\n <div className={`box-header-${classNameBoxVersion}-main`}>\n <HeaderApp />\n </div>\n <div className={`box-body-${classNameBoxVersion}-wrap-main`}>\n {children}\n </div>\n <div className=\"footer-wrap-main\">\n <FooterApp />\n </div>\n </div>\n );\n}\n\nexport default Layout;\n","import {\n NyrisAPISettings,\n RectCoords,\n selectFirstCenteredRegion,\n urlOrBlobToCanvas\n} from \"@nyris/nyris-api\";\nimport NyrisAPI from \"@nyris/nyris-api\";\nimport {isEqual} from \"lodash\";\n\nexport const defaultRect = {x1: 0, x2: 1, y1: 0, y2: 1};\n\nexport const createImage = async (fileOrUrl: File|string|HTMLCanvasElement) => {\n const image = fileOrUrl instanceof HTMLCanvasElement ? fileOrUrl : await urlOrBlobToCanvas(fileOrUrl);\n return image;\n}\n\nexport const findRegions = async (image: HTMLCanvasElement, settings: NyrisAPISettings) => {\n const nyrisApi = new NyrisAPI(settings);\n let regions = await nyrisApi.findRegions(image);\n\n const selectedRegion = selectFirstCenteredRegion(regions, 0.3, defaultRect);\n return {\n selectedRegion: isEqual(selectedRegion, defaultRect) ? undefined : selectedRegion,\n regions\n }\n};\n\nexport const findByImage = (image: HTMLCanvasElement, settings: NyrisAPISettings, region?: RectCoords) => {\n const nyrisApi = new NyrisAPI(settings);\n let options = {};\n if (region) {\n options = { cropRect: region };\n }\n return nyrisApi.findByImage(image, options);\n};\n\nexport const findByCadFile = (file: File, settings: NyrisAPISettings) => {\n const nyrisApi = new NyrisAPI(settings);\n return nyrisApi.findByCad(file, {});\n};\n","import { useDropzone } from \"react-dropzone\";\nimport {\n makeStyles,\n Button,\n Card,\n CardActions,\n CardContent,\n CardMedia,\n CircularProgress,\n Container,\n CssBaseline,\n Fab,\n Grid,\n Hidden,\n Typography,\n} from \"@material-ui/core\";\nimport { PhotoCamera, ArrowBack, Image } from \"@material-ui/icons\";\nimport Icon from \"@material-ui/core/Icon\";\nimport { NodeGroup } from \"react-move\";\nimport classNames from \"classnames\";\nimport {Capture, Preview} from \"@nyris/nyris-react-components\";\nimport _ from \"lodash\";\nimport {AppProps} from \"./propsType\";\nimport React from \"react\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n marginRight: theme.spacing(2),\n },\n heroContent: {\n backgroundColor: theme.palette.background.paper,\n padding: theme.spacing(8, 0, 6),\n transition: \"all 300ms\",\n overflow: \"hidden\",\n height: 500,\n },\n heroContentClosed: {\n height: 0,\n padding: 0,\n },\n heroButtons: {\n marginTop: theme.spacing(4),\n },\n cardGrid: {\n paddingTop: theme.spacing(8),\n paddingBottom: theme.spacing(8),\n minHeight: 600,\n overflow: \"hidden\",\n transition: \"all 300ms\",\n },\n cardGridCollapsed: {\n height: 0,\n opacity: 0,\n minHeight: 0,\n paddingTop: 0,\n paddingBottom: 0,\n },\n card: {\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n cardMedia: {\n paddingTop: \"56.25%\", // 16:9\n backgroundSize: \"contain\",\n },\n cardContent: {\n flexGrow: 1,\n paddingBottom: 0,\n },\n footer: {\n backgroundColor: theme.palette.background.paper,\n padding: theme.spacing(6),\n },\n withElipsis: {\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n },\n loading: {\n margin: theme.spacing(2),\n },\n fabContainer: {\n position: \"fixed\",\n bottom: theme.spacing(2),\n },\n fab: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst makeFileHandler = (action: any) => (e: any) => {\n let file = (e.dataTransfer && e.dataTransfer.files[0]) || e.target.files[0];\n if (e.target && e.target.value) {\n e.target.value = \"\";\n }\n\n if (file) {\n action(file);\n }\n};\n\nconst LandingPageAppMD = (props: AppProps) => {\n const classes = useStyles();\n const {\n handlers,\n showPart,\n acceptTypes,\n settings,\n search,\n loading,\n previewImage\n } = props;\n\n const mdSettings = settings.themePage.materialDesign;\n\n const {\n results,\n regions,\n previewSelection,\n } = search;\n\n const {\n onLinkClick,\n onFileDropped,\n onCaptureComplete,\n onCaptureCanceled,\n onSelectFile,\n onCameraClick,\n onShowStart,\n onSelectionChange,\n } = handlers;\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop: (fs: File[]) => {\n onFileDropped(fs[0]);\n },\n });\n\n\n return (\n <React.Fragment>\n {!_.isEmpty(mdSettings?.resultLinkIcon) && (\n <link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n />\n )}\n <CssBaseline />\n {showPart === \"camera\" && (\n <Capture\n onCaptureComplete={onCaptureComplete}\n onCaptureCanceled={onCaptureCanceled}\n useAppText=\"Use default camera app\"\n />\n )}\n <main>\n <div\n className={classNames(\n classes.heroContent,\n showPart === \"results\" ? classes.heroContentClosed : null\n )}\n >\n <Container maxWidth=\"md\">\n <div>\n <Hidden mdUp>\n <div style={{ textAlign: \"center\" }}>\n <PhotoCamera style={{ fontSize: \"20em\", color: \"#cccccc\" }} />\n </div>\n <div style={{ textAlign: \"center\" }}>\n <Button\n variant={\"contained\"}\n color={\"primary\"}\n onClick={onCameraClick}\n >\n Take a picture\n </Button>\n </div>\n <div style={{ textAlign: \"center\" }}>\n <Typography>or</Typography>\n </div>\n <div style={{ textAlign: \"center\" }}>\n <input\n accept={acceptTypes}\n id=\"raised-button-file\"\n type=\"file\"\n onChange={makeFileHandler(onSelectFile)}\n style={{\n width: \".1px\",\n height: \".1px\",\n overflow: \"hidden\",\n opacity: 0,\n }}\n />\n <label htmlFor=\"raised-button-file\">\n <Button\n variant={\"contained\"}\n color={\"primary\"}\n component=\"span\"\n >\n Select a file\n </Button>\n </label>\n </div>\n </Hidden>\n <Hidden smDown>\n <div\n style={{\n borderStyle: \"dashed\",\n borderWidth: 5,\n borderColor: isDragActive ? \"#ccc\" : \"#eee\",\n borderRadius: 10,\n padding: 10,\n paddingBottom: 30,\n }}\n {...getRootProps({\n onClick: (e) => {\n e.stopPropagation();\n },\n })}\n >\n <div style={{ textAlign: \"center\" }}>\n <Image style={{ fontSize: \"20em\", color: \"#cccccc\" }} />\n </div>\n <div style={{ textAlign: \"center\" }}>\n <Typography variant=\"body2\">DROP AN IMAGE</Typography>\n </div>\n <div style={{ textAlign: \"center\" }}>\n <Typography variant=\"subtitle2\">or</Typography>\n </div>\n <div style={{ textAlign: \"center\" }}>\n <input\n accept={acceptTypes}\n id=\"raised-button-file\"\n type=\"file\"\n {...getInputProps()}\n onChange={makeFileHandler(onSelectFile)}\n style={{\n width: \".1px\",\n height: \".1px\",\n overflow: \"hidden\",\n opacity: 0,\n }}\n />\n <label htmlFor=\"raised-button-file\">\n <Button\n variant={\"contained\"}\n color={\"primary\"}\n component=\"span\"\n >\n Select an image\n </Button>\n </label>\n </div>\n </div>\n </Hidden>\n </div>\n </Container>\n </div>\n <Container\n className={classNames(\n classes.cardGrid,\n showPart !== \"results\" && classes.cardGridCollapsed\n )}\n maxWidth=\"md\"\n >\n {previewImage && (\n <Card style={{ marginBottom: \"4em\" }} raised={true}>\n <Preview\n key={previewImage?.id}\n onSelectionChange={onSelectionChange}\n image={previewImage?.canvas}\n selection={previewSelection}\n regions={regions}\n maxWidth={400}\n maxHeight={500}\n dotColor=\"#FBD914\"\n />\n </Card>\n )}\n\n {loading && (\n <div style={{ textAlign: \"center\" }}>\n <CircularProgress className={classes.loading} />\n </div>\n )}\n\n <Grid container spacing={4}>\n <NodeGroup\n data={results}\n keyAccessor={(r) => r.position + r.sku}\n start={(r, i) => ({ opacity: 0, translateX: -100 })}\n enter={(r, i) => ({\n opacity: [1],\n translateX: [0],\n timing: { delay: i * 100, duration: 300 },\n })}\n >\n {(rs) => (\n <>\n {rs.map(({ key, data: result, state }) => (\n <Grid item key={key} xs={12} sm={4} md={3}>\n <Card\n className={classes.card}\n style={{\n opacity: state.opacity,\n position: \"relative\",\n transform: `translateX(${state.translateX}%)`,\n }}\n >\n <CardMedia\n className={classes.cardMedia}\n image={\n (result.img && result.img.url) ||\n settings.noImageUrl\n }\n title={result.title}\n />\n <CardContent className={classes.cardContent}>\n <Typography\n gutterBottom\n variant=\"subtitle2\"\n component=\"h5\"\n className={classes.withElipsis}\n >\n {result[mdSettings?.resultFirstRowProperty!!]}\n </Typography>\n <Typography\n variant=\"body2\"\n className={classes.withElipsis}\n >\n {result[mdSettings?.resultSecondRowProperty!!]}\n </Typography>\n </CardContent>\n {result.l && (\n <CardActions>\n <Button\n variant=\"outlined\"\n style={{ marginLeft: \"auto\" }}\n size=\"small\"\n color=\"primary\"\n onClick={\n () => {\n onLinkClick(\n result.position,\n result.l\n );\n }\n }\n onAuxClick={() => {\n onLinkClick(\n result.position,\n result.l\n );\n }}\n >\n {mdSettings?.resultLinkIcon && (\n <React.Fragment>\n <Icon>{mdSettings.resultLinkIcon}</Icon>{\" \"}\n </React.Fragment>\n )}\n {mdSettings?.resultLinkText}\n </Button>\n </CardActions>\n )}\n </Card>\n </Grid>\n ))}\n </>\n )}\n </NodeGroup>\n </Grid>\n\n {results.length === 0 && showPart === \"results\" && !loading && (\n <Typography variant=\"h3\" align=\"center\">\n We did not find anything\n </Typography>\n )}\n </Container>\n {showPart !== \"start\" && (\n <Container maxWidth=\"lg\">\n <div className={classes.fabContainer}>\n <Fab\n aria-label=\"back\"\n className={classes.fab}\n color=\"primary\"\n onClick={onShowStart}\n >\n <ArrowBack />\n </Fab>\n </div>\n </Container>\n )}\n </main>\n </React.Fragment>\n );\n};\n\nexport default LandingPageAppMD;\n","import React from \"react\";\nimport { OfferNyrisResult as ResultData } from \"@nyris/nyris-api\";\n\n// TODO this needs refactoring: Make it one block with parameters for first line, second line, image url ..\n\ninterface Options {\n result: any;\n noImageUrl: string;\n onImageClick: (e: React.MouseEvent) => void;\n onLinkClick: (e: React.MouseEvent) => void;\n}\n\nconst renderPrice = (result: ResultData) =>\n result.p ? \"\" + (result.p.vi / 100).toFixed(2) + \" \" + result.p.c : \"\";\n\nconst renderDefault = ({\n result,\n noImageUrl,\n onImageClick,\n onLinkClick,\n}: Options) => {\n return (\n <>\n <a\n href={result.l}\n className=\"imageLink\"\n title=\"Click the image so see similar products\"\n onClick={onImageClick}\n onAuxClick={onLinkClick}\n >\n <div className=\"prdctImg\">\n <div className=\"imgWrap\">\n <img\n src={(result.img && result.img.url + \"?r=512x512\") || noImageUrl}\n alt={result.title}\n />\n </div>\n </div>\n </a>\n <div className=\"prdctDetailsWrap\">\n <div>\n <div className=\"prdctTitle\">{result.title}</div>\n <div className=\"prdctMeta\">\n <span className=\"prdctPrice\">{renderPrice(result)}</span>\n </div>\n <a\n onClick={onLinkClick}\n onAuxClick={onLinkClick}\n className=\"prdctShopLink\"\n href={result.l}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Buy Now\n </a>\n </div>\n </div>\n </>\n );\n};\n\nconst renderSnr = ({\n result,\n noImageUrl,\n onImageClick,\n onLinkClick,\n}: Options) => (\n <>\n <a\n href={result.l}\n className=\"imageLink\"\n onClick={onImageClick}\n onAuxClick={onLinkClick}\n >\n <div className=\"prdctImg\">\n <div className=\"imgWrap\">\n <img\n src={(result.img && result.img.url + \"?r=512x512\") || noImageUrl}\n alt={result.title}\n />\n </div>\n </div>\n </a>\n <div className=\"prdctDetailsWrap\">\n <div>\n <div className=\"prdctTitle\">{result.sku}</div>\n <div\n className=\"prdctMeta\"\n style={{ height: \"5em\", whiteSpace: \"normal\" }}\n >\n {result.title}\n </div>\n <a\n style={{ backgroundImage: \"none\", paddingLeft: \"10px\" }}\n className=\"prdctShopLink\"\n href={result.l}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onLinkClick}\n onAuxClick={onLinkClick}\n >\n Info\n </a>\n </div>\n </div>\n </>\n);\n\nconst renderSnrMultilink = (\n { result, noImageUrl, onImageClick }: Options,\n onLinkClick: (url: string) => void\n) => (\n <>\n <a\n href={result.l}\n className=\"imageLink\"\n onClick={onImageClick}\n onAuxClick={onImageClick}\n >\n <div className=\"prdctImg\">\n <div className=\"imgWrap\">\n <img\n src={(result.img && result.img.url + \"?r=512x512\") || noImageUrl}\n alt={result.title}\n />\n </div>\n </div>\n </a>\n <div className=\"prdctDetailsWrap\">\n <div>\n <div className=\"prdctTitle\">{result.sku}</div>\n <div\n className=\"prdctMeta\"\n style={{ height: \"5em\", whiteSpace: \"normal\" }}\n >\n {result.title}\n </div>\n {result.l.map((l: { text: string; href: string }) => (\n <a\n style={{ backgroundImage: \"none\", paddingLeft: \"10px\" }}\n className=\"prdctShopLink\"\n href={l.href}\n onClick={() => onLinkClick(l.href)}\n onAuxClick={() => onLinkClick(l.href)}\n target=\"_blank\"\n key={l.href}\n rel=\"noopener noreferrer\"\n >\n {l.text}\n </a>\n ))}\n </div>\n </div>\n </>\n);\n\nexport interface ResultProps {\n result: any;\n style: any;\n template?: string;\n onImageClick: (pos: number, url: string) => void;\n onLinkClick: (pos: number, url: string) => void;\n noImageUrl?: string;\n}\n\nconst Result: React.FC<ResultProps> = ({\n result,\n style,\n template,\n onImageClick,\n onLinkClick,\n noImageUrl,\n}) => {\n let options: Options = {\n onImageClick: (e: React.MouseEvent) => {\n e.preventDefault();\n onImageClick(result.position, result.img.url);\n },\n onLinkClick: (e: React.MouseEvent) => {\n e.preventDefault();\n onLinkClick(result.position, result.l);\n },\n noImageUrl: noImageUrl || \"images/ic_cam_large_noimage.png\",\n result,\n };\n\n let resultInner = null;\n switch (template) {\n case \"snr\":\n resultInner = renderSnr(options);\n break;\n case \"snr-multilink\":\n resultInner = renderSnrMultilink(options, (url) =>\n onLinkClick(result.position, url)\n );\n break;\n case \"default\":\n default:\n resultInner = renderDefault(options);\n break;\n }\n\n return (\n <div className=\"prdctItem\" style={{ ...style }}>\n {resultInner}\n </div>\n );\n};\n\nexport default Result;\n","import { Typography } from \"@material-ui/core\";\nimport React from \"react\";\n\ninterface ExampleImagesProps {\n images: string[];\n onExampleImageClicked: (url: string) => void;\n}\n\nconst ExampleImages: React.FC<ExampleImagesProps> = ({\n images,\n onExampleImageClicked,\n}) => {\n if (images.length === 0) {\n return null;\n }\n return (\n <section className=\"useExampleImg\">\n <Typography className=\"title-box text-center\">\n You can also try one of these pictures:\n </Typography>\n <div className=\"exampleImages d-flex justify-center\">\n <div className=\"exImagesWrap\">\n {images.map((i) => {\n return (\n <img\n key={i}\n src={i}\n alt=\"\"\n onClick={() => onExampleImageClicked(i)}\n />\n );\n })}\n </div>\n </div>\n </section>\n );\n};\n\nexport default ExampleImages;\n","import React from 'react';\n\n\nconst CategoryFilter = ({cats}: {cats: string[]}) => {\n if (cats.length === 0) {\n return null;\n }\n return (\n <div id=\"catlist\" style={{'textAlign': 'center'}}>\n {\n cats.map((s) => <a key={s} href=\"#top\">{s}</a>) // TODO fix link\n }\n </div>\n );\n};\n\nexport default CategoryFilter;\n","import React from 'react';\n\nconst PredictedCategories = ({cs}: {cs: {name: string, score: number}[]}) =>\n <>\n {cs.map((c) =>\n <small key={c.name}>\n {c.name === \"\" ? \"No category\" : c.name.split(\" > \").slice(-1)[0]}:\n {(c.score * 100).toFixed(0)}%\n </small>)}\n </>\n;\n\n\nexport default PredictedCategories;\n","import React from 'react';\nimport {Code} from '@nyris/nyris-api';\n\ninterface Props {\n codes: Code[]\n}\nconst Codes = ({codes}: Props) =>\n <>\n <div className=\"codes\" style={{textAlign: 'center'}}>\n {codes.length > 0 && <span style={{fontSize: '0.8em'}}>Codes<br/> </span> }\n {codes.map((c, i) =>\n <small key={i} title={c.type}>\n {c.value}\n </small>)}\n </div>\n </>\n;\n\n\nexport default Codes;\n","import \"App.css\";\nimport React, { useEffect, useState } from \"react\";\nimport Result from \"components/Result\";\nimport ExampleImages from \"components/ExampleImages\";\nimport CategoryFilter from \"components/CategoryFilter\";\nimport PredictedCategories from \"components/PredictedCategories\";\nimport Codes from \"components/Codes\";\nimport { useDropzone } from \"react-dropzone\";\nimport classNames from \"classnames\";\nimport { Animate, NodeGroup } from \"react-move\";\nimport {\n makeFileHandler,\n Capture, Preview,\n} from \"@nyris/nyris-react-components\";\nimport { Snackbar } from \"@material-ui/core\";\nimport MuiAlert, { AlertProps } from \"@material-ui/lab/Alert\";\n\nimport {AppProps} from \"./propsType\";\n\nfunction Alert(props: AlertProps) {\n return <MuiAlert elevation={6} variant=\"filled\" {...props} />;\n}\n\nconst LandingPageApp = (props: AppProps) => {\n const {\n handlers,\n showPart,\n acceptTypes,\n settings,\n search,\n loading,\n previewImage\n } = props;\n\n const {\n results,\n requestId,\n duration,\n categoryPredictions,\n codes,\n filterOptions,\n errorMessage,\n regions,\n previewSelection\n } = search;\n\n const {\n onExampleImageClick,\n onImageClick,\n onLinkClick,\n onFileDropped,\n onCaptureComplete,\n onCaptureCanceled,\n onSelectFile,\n onCameraClick,\n onShowStart,\n onSelectionChange,\n } = handlers;\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop: (fs: File[]) => {\n onFileDropped(fs[0]);\n },\n });\n\n\n const [toastOpen, setToastOpen] = useState(false);\n useEffect(() => {\n if (errorMessage !== \"\") {\n setToastOpen(true);\n }\n }, [errorMessage]);\n\n const minPreviewHeight = 400;\n const halfOfTheScreenHeight = Math.floor(window.innerHeight * 0.45);\n const maxPreviewHeight = Math.max(minPreviewHeight, halfOfTheScreenHeight);\n\n return (\n <div>\n {showPart === \"camera\" && (\n <Capture\n onCaptureComplete={ onCaptureComplete }\n onCaptureCanceled={ onCaptureCanceled }\n useAppText=\"Use default camera app\"\n />\n )}\n <div\n className={classNames(\"headSection\", {\n hidden: showPart === \"results\",\n })}\n id=\"headSection\"\n >\n <div\n {...getRootProps({\n onClick: (e) => {\n e.stopPropagation();\n },\n })}\n className={classNames(\"wrapper\", \"dragAndDropActionArea\", {\n fileIsHover: isDragActive,\n })}\n >\n <div className=\"contentWrap\">\n <section className=\"uploadImage\">\n <input\n type=\"button\"\n name=\"file\"\n id=\"capture\"\n className=\"inputfile\"\n accept=\"image/*\"\n capture=\"environment\"\n onClick={() => onCameraClick()}\n />\n <input\n type=\"file\"\n name=\"file\"\n id=\"capture_file\"\n className=\"inputfile\"\n accept={acceptTypes}\n capture=\"environment\"\n />\n <input\n {...getInputProps()}\n type=\"file\"\n name=\"file\"\n id=\"select_file\"\n className=\"inputfile\"\n accept={acceptTypes}\n onChange={makeFileHandler(onSelectFile)}\n />\n <div className=\"onDesktop\">\n Drop an image\n <div className=\"smallText\">or</div>\n </div>\n <div className=\"onMobile camIcon\">\n <img src=\"./images/ic_cam_large.svg\" alt=\"Camera\" />\n </div>\n <label\n htmlFor=\"capture\"\n className=\"btn primary onMobile\"\n style={{ marginBottom: \"2em\", width: \"22em\" }}\n >\n <span className=\"onMobile\">Take a picture</span>\n </label>\n <br />\n <label\n htmlFor=\"select_file\"\n className=\"btn primary\"\n style={{ width: \"22em\" }}\n >\n <span>Select a file</span>\n </label>\n <label\n htmlFor=\"capture\"\n className=\"mobileUploadHandler onMobile\"\n />\n </section>\n <ExampleImages\n images={settings.exampleImages}\n onExampleImageClicked={onExampleImageClick}\n />\n </div>\n </div>\n <div\n className={classNames(\"tryDifferent\", {\n hidden: showPart !== \"results\",\n })}\n onClick={() => onShowStart()}\n >\n <div className=\"icIcon\"></div>\n <div className=\"textDesc\"> Try a different image</div>\n <br style={{ clear: \"both\" }} />\n </div>\n <div className=\"headerSeparatorTop\" />\n <div className=\"headerSeparatorBack\" />\n </div>\n\n <section\n className={classNames(\n \"results\",\n { resultsActive: showPart === \"results\" },\n results.length === 1 ? \"singleProduct\" : \"multipleProducts\"\n )}\n >\n {errorMessage && (\n <div className=\"errorMsg\">\n {errorMessage}\n <div\n style={{\n textAlign: \"center\",\n fontSize: \"0.7em\",\n paddingTop: \"0.8em\",\n }}\n >\n <span>\n Make sure to include the request ID when reporting a problem:{\" \"}\n {requestId}\n </span>\n </div>\n </div>\n )}\n <Animate\n show={loading}\n start={{ opacity: 0.0 }}\n enter={{ opacity: [1.0], timing: { duration: 300 } }}\n leave={{ opacity: [0.0], timing: { duration: 300 } }}\n >\n {(s) => (\n <div className=\"loadingOverlay\" style={{ ...s }}>\n <div className=\"loading\" />\n </div>\n )}\n </Animate>\n {settings.preview && previewImage && (\n <div className=\"preview\">\n <Preview\n key={previewImage?.id}\n onSelectionChange={ onSelectionChange }\n image={previewImage?.canvas}\n selection={previewSelection}\n regions={regions}\n maxWidth={document.body.clientWidth}\n maxHeight={maxPreviewHeight}\n dotColor=\"#4C8F9F\"\n />\n </div>\n )}\n <div className=\"predicted-categories\">\n <PredictedCategories cs={categoryPredictions} />\n </div>\n <div className=\"predicted-categories\">\n <Codes codes={codes} />\n </div>\n <CategoryFilter cats={filterOptions} />\n <div className=\"wrapper\">\n <NodeGroup\n data={results}\n keyAccessor={(r) => r.sku}\n start={(r, i) => ({ opacity: 0, translateX: -100 })}\n enter={(r, i) => ({\n opacity: [1],\n translateX: [0],\n timing: { delay: i * 100, duration: 300 },\n })}\n >\n {(rs) => (\n <>\n {rs.map(({ key, data, state }) => (\n <Result\n key={key}\n noImageUrl={settings.noImageUrl}\n template={settings.resultTemplate}\n onImageClick={onImageClick}\n onLinkClick={onLinkClick}\n result={data}\n style={{\n opacity: state.opacity,\n transform: `translateX(${state.translateX}%)`,\n }}\n />\n ))}\n </>\n )}\n </NodeGroup>\n\n {(results.length === 0 &&\n showPart === \"results\" &&\n !loading && (\n <div className=\"noResults\">\n We did not find anything{\" \"}\n <span role=\"img\" aria-label=\"sad face\">\n 😕\n </span>\n </div>\n ))}\n\n <br style={{ clear: \"both\" }} />\n\n {duration && showPart === \"results\" && (\n <div\n style={{\n textAlign: \"center\",\n fontSize: \"0.7em\",\n paddingTop: \"0.8em\",\n }}\n >\n Search took {duration.toFixed(2)} seconds\n </div>\n )}\n\n {requestId && showPart === \"results\" && (\n <div\n style={{\n textAlign: \"center\",\n fontSize: \"0.7em\",\n paddingTop: \"0.8em\",\n }}\n >\n Request identifier {requestId}\n </div>\n )}\n </div>\n </section>\n\n <Snackbar\n open={toastOpen}\n autoHideDuration={3000}\n onClose={() => setToastOpen(false)}\n >\n <Alert onClose={() => setToastOpen(false)} severity=\"error\">\n {errorMessage}\n </Alert>\n </Snackbar>\n </div>\n );\n};\n\nexport default LandingPageApp;\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport {\n RectCoords,\n cadExtensions,\n isCadFile,\n} from \"@nyris/nyris-api\";\n\nimport { useAppDispatch, useAppSelector } from \"Store/Store\";\nimport {\n setSearchResults,\n loadingActionResults,\n searchFileImageNonRegion, selectionChanged, setRequestImage, setRegions, setSelectedRegion, setError,\n} from \"Store/Search\";\nimport {\n feedbackNegative,\n feedbackSubmitPositive,\n hideFeedback,\n showCamera,\n showFeedback, showResults,\n showStart,\n} from \"Store/Nyris\";\nimport {createImage, findByCadFile, findByImage, findRegions} from \"services/image\";\nimport { debounce } from \"lodash\";\nimport {feedbackClickEpic, feedbackRegionEpic, feedbackSuccessEpic} from \"services/Feedback\";\nimport AppMD from \"./AppMD\";\nimport App from \"./App\";\nimport {AppHandlers, AppProps} from \"./propsType\";\nimport {defaultMdSettings} from \"../../defaults\";\n\nconst defaultSelection = {x1: 0.1, x2: 0.9, y1: 0.1, y2: 0.9};\n\nconst LandingPageApp = () => {\n const dispatch = useAppDispatch();\n const searchState = useAppSelector((state) => state);\n const [selection, setSelection] = useState<RectCoords>(defaultSelection);\n\n const { settings, search, nyris } = searchState;\n const {\n fetchingRegions,\n fetchingResults,\n requestImage,\n selectedRegion,\n } = search;\n const { showPart } = nyris;\n\n // update selection, if it is not the default one\n useEffect(() => {\n if (selectedRegion) {\n setSelection(selectedRegion);\n } else {\n setSelection(defaultSelection);\n }\n }, [selectedRegion]);\n\n const acceptTypes = [\"image/*\"]\n .concat(settings.cadSearch ? cadExtensions : [])\n .join(\",\");\n\n\n function scrollTop() {\n // TODO might require polyfill for ios and edge\n window.scrollTo({ top: 0, left: 0, behavior: \"smooth\" });\n }\n\n const onLinkClick = (_position: number, url: string) => {\n feedbackClickEpic(searchState, _position).catch(console.warn);\n if (url) {\n window.open(url);\n }\n };\n\n const startSearch = async (file: File | HTMLCanvasElement | string) => {\n try {\n dispatch(loadingActionResults());\n dispatch(showResults());\n if (file instanceof File && isCadFile(file)) {\n let res = await findByCadFile(file, settings);\n dispatch(setSearchResults(res));\n } else {\n let image = await createImage(file);\n dispatch(setRequestImage(image));\n let searchRegion : RectCoords | undefined;\n if (settings.regions) {\n let {\n regions: foundRegions,\n selectedRegion: suggestedRegion\n } = await findRegions(image, settings);\n searchRegion = suggestedRegion;\n dispatch(setRegions(foundRegions));\n dispatch(setSelectedRegion(searchRegion))\n }\n return findByImage(image, searchState.settings, searchRegion).then((res) => {\n dispatch(setSearchResults(res));\n dispatch(showFeedback());\n });\n }\n } catch (e) {\n // TODO show error messages\n dispatch(setError(\"There was an error while performing the request. Please try again later.\"));\n }\n\n };\n\n const debouncedSetRectCoords = useCallback(\n debounce(value => {\n dispatch(selectionChanged(value));\n feedbackRegionEpic(searchState, value);\n findByImage(requestImage!!.canvas, settings, value).then((res) => {\n dispatch(searchFileImageNonRegion(res));\n dispatch(showFeedback());\n }).catch(e => console.warn('catch', e));\n }, 1200),\n [requestImage, searchState]\n );\n\n const handlers : AppHandlers = {\n onExampleImageClick: url => {\n startSearch(url);\n },\n onCameraClick: () => dispatch(showCamera),\n onCaptureCanceled: () => dispatch(showStart),\n onCaptureComplete: (i) => startSearch(i),\n onCloseFeedback: () => dispatch(hideFeedback),\n onFileDropped: (f) => startSearch(f),\n onImageClick: (position, url) => {\n startSearch(url);\n feedbackClickEpic(searchState, position);\n },\n onLinkClick: onLinkClick,\n onPositiveFeedback: () => {\n dispatch(feedbackSubmitPositive());\n feedbackSuccessEpic(searchState, true);\n },\n onNegativeFeedback: () => {\n dispatch(feedbackNegative());\n feedbackSuccessEpic(searchState, false);\n },\n onSelectFile: (f) => startSearch(f),\n onSelectionChange: r => {\n setSelection(r);\n debouncedSetRectCoords(r);\n },\n onShowStart: () => {\n dispatch(showStart());\n scrollTop();\n }\n };\n\n let props : AppProps = {\n search: {\n ...search,\n previewSelection: selection\n },\n settings,\n previewImage: search.requestImage,\n acceptTypes,\n showPart,\n handlers,\n loading: fetchingRegions || fetchingResults,\n mdSettings: settings.themePage.materialDesign || defaultMdSettings,\n feedbackState: nyris.feedbackState,\n\n };\n\n return settings.themePage.materialDesign?.active? <AppMD {...props}/> : <App {...props}/>;\n\n};\n\nexport default LandingPageApp;\n","import { Box, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useDropzone } from \"react-dropzone\";\nimport IconSearch from \"common/assets/icons/icon_search_image.svg\";\nimport { makeFileHandler } from \"@nyris/nyris-react-components\";\nimport { useAppDispatch, useAppSelector } from \"Store/Store\";\nimport {createImage, findByImage, findRegions} from \"services/image\";\nimport {\n setSearchResults,\n loadingActionResults,\n setRequestImage, setRegions, setSelectedRegion,\n} from \"Store/Search\";\nimport { showFeedback, showResults } from \"Store/Nyris\";\nimport { useHistory } from \"react-router-dom\";\nimport ExampleImages from \"./ExampleImages\";\nimport { feedbackClickEpic } from \"services/Feedback\";\nimport { useState } from \"react\";\nimport {RectCoords} from \"@nyris/nyris-api\";\n\ninterface Props {\n acceptTypes: any;\n onChangeLoading: any;\n isLoading: boolean;\n}\n\nfunction DragDropFile(props: Props) {\n const history = useHistory();\n const dispatch = useAppDispatch();\n const { acceptTypes, onChangeLoading, isLoading } = props;\n const searchState = useAppSelector((state) => state);\n const { settings } = searchState;\n const [isLoadingLoadFile, setLoadingLoadFile] = useState<any>(false);\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop: async (fs: File[]) => {\n onChangeLoading(true);\n console.log(\"321\");\n let payload: any;\n let filters: any[] = [];\n setLoadingLoadFile(true);\n console.log(\"fs\", fs);\n\n let image = await createImage(fs[0]);\n dispatch(setRequestImage(image));\n // TODO support regions\n return findByImage(image, searchState.settings).then((res: any) => {\n console.log(\"res?.results\", res);\n\n res?.results.map((item: any) => {\n filters.push({\n sku: item.sku,\n score: item.score,\n });\n });\n payload = {\n ...res,\n // results: newResult,\n filters,\n };\n console.log(\"payload\", payload);\n\n dispatch(setSearchResults(payload));\n setLoadingLoadFile(false);\n onChangeLoading(false);\n history.push(\"/result\");\n return dispatch(showFeedback());\n });\n },\n });\n\n const getUrlToCanvasFile = async (url: string, position?: number) => {\n onChangeLoading(true);\n dispatch(showResults());\n dispatch(loadingActionResults());\n if (position) {\n feedbackClickEpic(searchState, position);\n }\n\n let image = await createImage(url);\n dispatch(setRequestImage(image));\n let searchRegion: RectCoords| undefined = undefined;\n if (settings.regions) {\n let res = await findRegions(image, settings);\n dispatch(setRegions(res.regions));\n searchRegion = res.selectedRegion;\n dispatch(setSelectedRegion(searchRegion));\n }\n return findByImage(image, searchState.settings, searchRegion).then((res) => {\n dispatch(setSearchResults(res));\n onChangeLoading(false);\n history.push(\"/result\");\n return dispatch(showFeedback());\n });\n };\n\n return (\n <Box\n className={\n !isDragActive && !isLoadingLoadFile\n ? `box-content-main`\n : `box-content-main-drop`\n }\n >\n {isLoading && (\n <Box className=\"loadingSpinCT\">\n <Box className=\"box-content-spin\"></Box>\n </Box>\n )}\n\n <div\n className={`box-border`}\n style={{ position: \"relative\" }}\n {...getRootProps({\n onClick: (e) => {\n e.stopPropagation();\n },\n })}\n >\n {isDragActive ? (\n <Box>\n <Typography className=\"text-drop-file\">\n DRAG <span className=\"tractor\">&</span> DROP\n </Typography>\n <input\n {...getInputProps({\n onClick: (e) => {\n e.stopPropagation();\n },\n })}\n type=\"file\"\n name=\"file\"\n id=\"select_file\"\n // className=\"inputFile\"\n placeholder=\"Choose photo\"\n accept={acceptTypes}\n onChange={makeFileHandler((e) => {})}\n />\n </Box>\n ) : (\n <>\n <Box\n className=\"box-content-drop\"\n {...getRootProps({\n onClick: (e) => {\n e.stopPropagation();\n },\n })}\n >\n <Box className=\"box-image\">\n <img\n width={27}\n height={27}\n src={IconSearch}\n alt=\"icon_search\"\n />\n </Box>\n <label htmlFor=\"select_file\" className=\"text-f20 text-bold\">\n <span className=\"box-blue\">Choose photo</span> or drag & drop it\n here\n </label>\n <input\n {...getInputProps()}\n type=\"file\"\n name=\"file\"\n id=\"select_file\"\n className=\"inputFile\"\n placeholder=\"Choose photo\"\n style={{ display: \"block\" }}\n // accept={acceptTypes}\n // onChange={makeFileHandler((e) => {\n // return isCheckImageFile(e);\n // })}\n />\n </Box>\n <Box style={{ marginTop: 19, zIndex: 109 }} className=\"box-thumb\">\n <Box display={\"flex\"} alignItems={\"flex-end\"}>\n <ExampleImages\n images={settings.exampleImages}\n onExampleImageClicked={(url: string) => {\n return getUrlToCanvasFile(url);\n }}\n />\n </Box>\n </Box>\n </>\n )}\n </div>\n </Box>\n );\n}\n\nexport default DragDropFile;\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Button, Box } from \"@material-ui/core\";\nimport ClearOutlinedIcon from \"@material-ui/icons/ClearOutlined\";\nimport { connectSearchBox } from \"react-instantsearch-dom\";\nimport { useHistory } from \"react-router-dom\";\nimport { useAppDispatch } from \"Store/Store\";\nimport { reset } from \"Store/Search\";\nimport { debounce } from \"lodash\";\nimport { useCallback } from \"react\";\n\nconst SearchBox = ({ currentRefinement, isSearchStalled, refine }: any) => {\n const focusInp: any = useRef();\n const history = useHistory();\n const [, setShowBtnClear] = useState<boolean>(true);\n const [valueInput, setValueInput] = useState<string>(\"\");\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n if (focusInp?.current) {\n focusInp?.current.focus();\n }\n }, [focusInp]);\n\n useEffect(() => {\n // if (currentRefinement) {\n setValueInput(currentRefinement);\n // }\n }, [currentRefinement]);\n\n useEffect(() => {\n if (valueInput.length > 0) {\n setShowBtnClear(true);\n }\n setShowBtnClear(false);\n }, [valueInput]);\n\n const debounceSearch = useCallback(\n debounce((nextValue: any) => refine(nextValue), 0),\n []\n );\n\n return (\n <Box className=\"wrap-input-search\">\n <Box p={2} display={\"flex\"} className=\"box-input-search\">\n <form noValidate action=\"\" role=\"search\">\n <input\n style={{ border: \"0px\", width: \"100%\" }}\n className=\"input-search\"\n value={valueInput}\n onChange={(event) => {\n setValueInput(event.currentTarget.value);\n debounceSearch(event.currentTarget.value);\n }}\n ref={focusInp}\n />\n {history.location.pathname === \"/result\" && (\n <Button\n className=\"btn-clear-text\"\n onClick={() => {\n setValueInput(\"\");\n refine(\"\");\n dispatch(reset(\"\"));\n history.push(\"/\");\n return;\n }}\n >\n <ClearOutlinedIcon style={{ fontSize: 12, color: \"#2B2C46\" }} />\n </Button>\n )}\n </form>\n </Box>\n </Box>\n );\n};\n\nconst CustomSearchBox = connectSearchBox(SearchBox);\nexport default CustomSearchBox;\n","import axios from \"axios\";\nimport {NyrisAPISettings} from \"@nyris/nyris-api\";\n\nconst httpClient = axios.create();\n\nexport const createSessionByApi = async (settings: NyrisAPISettings) => {\n const { apiKey, baseUrl} = settings;\n let headers = {\n \"X-Api-Key\": apiKey,\n };\n let response = await httpClient.request({\n method: \"POST\",\n url: `${baseUrl}/find/v1/session`,\n headers,\n });\n return response.data.session;\n};\n","import { Box, Typography } from \"@material-ui/core\";\nimport React, { useState, useEffect } from \"react\";\nimport \"./common.scss\";\nimport TranslateIcon from \"common/assets/icons/translate_icon.svg\";\nimport DragDropFile from \"components/DragDropFile\";\nimport { cadExtensions } from \"@nyris/nyris-api\";\nimport { useAppDispatch, useAppSelector } from \"Store/Store\";\nimport { changeValueTextSearch, setUpdateSession } from \"Store/Search\";\nimport { useHistory } from \"react-router-dom\";\nimport {\n Configure,\n InstantSearch,\n connectInfiniteHits,\n} from \"react-instantsearch-dom\";\nimport algoliasearch from \"algoliasearch/lite\";\nimport CustomSearchBox from \"components/input/inputSearch\";\nimport {createSessionByApi} from \"../../services/session\";\nimport {AlgoliaSettings} from \"../../types\";\n\ninterface Props {}\n\nfunction AppNewVersion(props: Props) {\n const dispatch = useAppDispatch();\n const history = useHistory();\n const { settings, search } = useAppSelector((state) => state);\n const [searchStateInput, setSearchStateInput] = useState<any>({});\n const [isLoading, setLoading] = useState<boolean>(false);\n const { apiKey, appId, indexName } = settings.algolia as AlgoliaSettings;\n const searchClient = algoliasearch(appId, apiKey);\n searchClient.initIndex(indexName);\n\n useEffect(() => {\n const createSession = async () => {\n let payload = await createSessionByApi(settings);\n dispatch(setUpdateSession(payload));\n };\n\n createSession().catch(console.log);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const acceptTypes = [\"image/*\"]\n .concat(settings.cadSearch ? cadExtensions : [])\n .join(\",\");\n\n const InfiniteHits = ({ hits }: any) => {\n return <div></div>;\n };\n\n const onChangeLoading = (value: boolean) => {\n setLoading(value);\n };\n\n const CustomInfiniteHits = connectInfiniteHits(InfiniteHits);\n\n const nonEmptyFilter: any[] = !search?.requestImage\n ? []\n : [\"sku:DOES_NOT_EXIST<score=1>\"];\n // Build filter using reverse position for stable item order\n const filterSkus: any = search?.results\n ? search?.results.slice().reverse().map(\n (f: any, i: number) => `sku:'${f.sku}'<score=${i}>`\n )\n : \"\";\n const filtersString = [...nonEmptyFilter, ...filterSkus].join(\" OR \");\n\n return (\n <Box className={`box-content-main ${isLoading ? \"loading\" : \"\"}`}>\n <InstantSearch\n indexName={indexName}\n searchClient={searchClient}\n searchState={searchStateInput}\n onSearchStateChange={(state) => {\n setSearchStateInput(state);\n dispatch(changeValueTextSearch(state));\n history.push(\"/result\");\n }}\n >\n <Box className=\"box-content_top\">\n <div className=\"box-logo\">\n <img src={TranslateIcon} width={32} height={27} alt=\"logo_icon\" />\n </div>\n <div className=\"box-input\">\n <div className=\"wrap-input-search\">\n <Configure filters={filtersString}></Configure>\n <div style={{ display: \"none\" }}>\n <CustomInfiniteHits />\n </div>\n <CustomSearchBox />\n </div>\n </div>\n <div className=\"box-bottom\">\n <Typography className=\"text-bottom\">\n Search by any name, category, SKU or keyword.\n </Typography>\n </div>\n </Box>\n <Box className=\"box-content_bottom\">\n <DragDropFile\n acceptTypes={acceptTypes}\n isLoading={isLoading}\n onChangeLoading={onChangeLoading}\n />\n </Box>\n </InstantSearch>\n </Box>\n );\n}\n\nexport default AppNewVersion;\n","import \"react-app-polyfill/ie11\";\nimport \"react-app-polyfill/stable\";\nimport React from \"react\";\nimport \"typeface-roboto\";\nimport \"index.css\";\nimport { useAppSelector } from \"Store/Store\";\nimport LandingPageApp from \"modules/LandingPage/index\";\nimport AppNewVersion from \"modules/LandingPage/indexNewVersion\";\n\nfunction App(): JSX.Element {\n const { settings } = useAppSelector((state) => state);\n const { themePage } = settings;\n let SelectedApp = themePage.searchSuite?.active ? AppNewVersion : LandingPageApp;\n\n return <SelectedApp />;\n}\n\nexport default App;\n","import { Box, Button, Grid, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport IconSupport from \"common/assets/icons/support.svg\";\nimport IconLike from \"common/assets/icons/icon_like.svg\";\nimport IconDisLike from \"common/assets/icons/icon_dislike.svg\";\nimport IconShare from \"common/assets/icons/Fill.svg\";\nimport IconBookmark from \"common/assets/icons/book_mark.svg\";\nimport IconModalImage from \"common/assets/icons/icon_modal_image.svg\";\n\ninterface Props {\n dataItem: any;\n handlerToggleModal?: any;\n handleClose?: () => void;\n handlerToggleModalShare?: () => void;\n isHover?: boolean;\n indexItem?: number;\n onSearchImage?: any;\n handlerFeedback?: any;\n}\n\nfunction ItemResult(props: Props) {\n const {\n dataItem,\n handlerToggleModal,\n handlerToggleModalShare,\n isHover = false,\n onSearchImage,\n handlerFeedback,\n } = props;\n const { img, sku, title, main_image_link } = dataItem;\n\n return (\n <Box className=\"wrap-main-item-result\">\n <Box className=\"box-top\">\n {!isHover && (\n <Box className=\"box-icon-modal\">\n <Button\n onClick={(e: any) => {\n e.preventDefault();\n onSearchImage(main_image_link);\n // handlerToggleModal();\n }}\n >\n <img\n src={IconModalImage}\n alt=\"icon_modal\"\n width={21}\n height={21}\n />\n </Button>\n </Box>\n )}\n\n <Box className=\"box-image\">\n <Button\n style={{ width: \"100%\", height: \"100%\", padding: 0, zIndex: 9 }}\n onClick={handlerToggleModal}\n >\n <img\n src={img?.url ? img?.url : main_image_link}\n alt=\"image_item\"\n className=\"img-style\"\n />\n </Button>\n {isHover && (\n <Box className=\"box-hover\">\n <Button>View item</Button>\n </Box>\n )}\n </Box>\n </Box>\n <Box\n className=\"box-content\"\n display={\"flex\"}\n style={{ flexDirection: \"column\" }}\n >\n <Box className=\"box-top\">\n <Grid container justifyContent=\"space-between\">\n <Grid item xs={10}>\n <Typography className=\"text-f8 max-line-1\">SKU: {sku}</Typography>\n <Typography className=\"text-f9 text-bold max-line-3\">\n {title}\n </Typography>\n </Grid>\n <Grid item>\n <Button className=\"btn-item\">\n <img\n src={IconBookmark}\n alt=\"image_item\"\n className=\"icon_action\"\n />\n </Button>\n </Grid>\n </Grid>\n </Box>\n\n <Box className=\"box-bottom\">\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Grid item>\n <Box display={\"flex\"} alignItems={\"center\"}>\n <Button\n className=\"btn-item\"\n onClick={() => handlerFeedback(\"like\")}\n >\n <img\n src={IconLike}\n alt=\"image_item\"\n className=\"icon_action\"\n />\n </Button>\n <Button\n className=\"btn-item\"\n onClick={() => handlerFeedback(\"dislike\")}\n >\n <img\n src={IconDisLike}\n alt=\"image_item\"\n className=\"icon_action\"\n />\n </Button>\n </Box>\n </Grid>\n <Grid item>\n <Box display={\"flex\"} alignItems={\"center\"}>\n <Button className=\"btn-item\" onClick={handlerToggleModalShare}>\n <img\n src={IconShare}\n alt=\"image_item\"\n className=\"icon_action\"\n />\n </Button>\n <Button className=\"btn-item\">\n <Box\n className=\"box-gray text-center box-support\"\n display={\"flex\"}\n justifyContent={\"center\"}\n alignItems={\"center\"}\n >\n <img\n src={IconSupport}\n alt=\"image_item\"\n className=\"icon_support\"\n />\n </Box>\n </Button>\n </Box>\n </Grid>\n </Grid>\n </Box>\n </Box>\n </Box>\n );\n}\n\nexport default ItemResult;\n","import { Box, Grid, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport TitleOutlinedIcon from \"@material-ui/icons/TitleOutlined\";\n\ninterface Props {\n search: any;\n}\n\nfunction FooterResult(props: Props) {\n const {search} = props;\n\n return (\n <Grid\n container\n justifyContent=\"space-between\"\n alignItems=\"center\"\n style={{ height: \"100%\" }}\n >\n <Grid\n item\n className=\"item-notify\"\n style={{ borderRight: \"1px solid #E9E9EC\", minWidth: 69 }}\n >\n <Typography className=\"text-f8 text-center\">\n {search.results.length} results\n </Typography>\n </Grid>\n <Grid item className=\"item-notify\">\n <Typography className=\"text-f8 text-center\">\n Didn’t find what you were looking for? Share your search with our{\" \"}\n <Link to={\"#\"}>product experts</Link>.\n </Typography>\n </Grid>\n <Grid item className=\"item-notify\" style={{ minWidth: 32 }}>\n <Typography className=\"text-f8\">\n <Box>\n <TitleOutlinedIcon style={{ color: \"#55566B\", fontSize: 8 }} />\n <TitleOutlinedIcon style={{ color: \"#55566B\", fontSize: 10 }} />\n </Box>\n </Typography>\n </Grid>\n </Grid>\n );\n}\n\nexport default FooterResult;\n","import React from \"react\";\nimport Modal from \"@material-ui/core/Modal\";\n\ninterface Props {\n children: JSX.Element;\n openModal: boolean;\n handleClose: (e: any) => void;\n}\n\nfunction DefaultModal(props: Props) {\n const { children, openModal = false, handleClose } = props;\n\n return (\n <Modal\n open={openModal}\n onClose={handleClose}\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n {children}\n </Modal>\n );\n}\n\nexport default DefaultModal;\n","import { Box, Button } from \"@material-ui/core\";\nimport React from \"react\";\nimport { Carousel } from \"react-responsive-carousel\";\nimport ChevronRightOutlinedIcon from \"@material-ui/icons/ChevronRightOutlined\";\nimport ChevronLeftOutlinedIcon from \"@material-ui/icons/ChevronLeftOutlined\";\ninterface Props {\n imgItem: any[];\n}\n\nfunction DefaultCarousel(props: Props) {\n const { imgItem } = props;\n console.log(\"imgItem\", imgItem);\n\n return (\n <Carousel\n showThumbs={false}\n infiniteLoop={false}\n showStatus={false}\n className={imgItem.length > 1 ? \"\" : \"hide-btn-arrow\"}\n renderArrowNext={(onClickHandler, hasPrev, label) => (\n <Button onClick={onClickHandler} className=\"btn-carousel-right\">\n <ChevronRightOutlinedIcon\n className=\"icon-ct\"\n style={{ color: \"#55566B\" }}\n />\n </Button>\n )}\n renderArrowPrev={(onClickHandler, hasPrev, label) => (\n <Button onClick={onClickHandler} className=\"btn-carousel-left\">\n <ChevronLeftOutlinedIcon\n className=\"icon-ct\"\n style={{ color: \"#55566B\" }}\n />\n </Button>\n )}\n >\n {imgItem?.map((item: any, index: any) => {\n return (\n <Box key={index} style={{height: '100%'}}>\n <img style={{height: '100%'}} src={imgItem ? item?.url : \"\"} alt=\"image_product\" />\n </Box>\n );\n })}\n </Carousel>\n );\n}\n\nexport default DefaultCarousel;\n","import { Box, Button, Grid, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport CloseOutlinedIcon from \"@material-ui/icons/CloseOutlined\";\nimport DefaultCarousel from \"./carousel/DefaultCarousel\";\nimport { Link } from \"react-router-dom\";\nimport IconSupport from \"common/assets/icons/support.svg\";\nimport IconLike from \"common/assets/icons/icon_like.svg\";\nimport IconDisLike from \"common/assets/icons/icon_dislike.svg\";\nimport IconShare from \"common/assets/icons/Fill.svg\";\nimport IconBookmark from \"common/assets/icons/book_mark.svg\";\n// import IconPicture from \"common/assets/icons/icon_picture.png\";\nimport IconPicture from \"common/assets/icons/icon_modal_image.svg\";\nimport { useState } from \"react\";\nimport { isEmpty } from \"lodash\";\nimport { useEffect } from \"react\";\n\ninterface Props {\n numberResult?: number;\n results?: any;\n handlerCloseModal: () => void;\n onNextItem?: () => void;\n onPrevItem?: () => void;\n dataItem?: any;\n onHandlerModalShare?: () => void;\n onSearchImage?: any;\n}\n\nfunction DetailItem(props: Props) {\n const {\n handlerCloseModal,\n dataItem,\n onHandlerModalShare,\n onSearchImage,\n } = props;\n\n const { img, title, sku, main_image_link } = dataItem;\n const [dataImageCarousel, setDataImageCarouSel] = useState<any[]>([]);\n\n useEffect(() => {\n checkDataItemResult(dataItem);\n }, [dataItem]);\n\n const checkDataItemResult = (dataItem: any) => {\n if (!dataItem) {\n return setDataImageCarouSel([]);\n }\n let valueKey: any[] = [];\n const newObject = dataItem;\n for (let key in newObject) {\n if (key?.includes(\"recognition_image_link\")) {\n if (!isEmpty(newObject[key])) {\n valueKey.push({\n url: newObject[key],\n });\n }\n } else {\n if (key === \"main_image_link\") {\n valueKey.push({\n url: newObject[key],\n });\n }\n }\n }\n setDataImageCarouSel(valueKey);\n };\n\n return (\n <Box className=\"box-modal-default\">\n <Box className=\"ml-auto\" style={{ width: \"fit-content\", marginRight: 5 }}>\n <Button style={{ padding: 0 }} onClick={handlerCloseModal}>\n <CloseOutlinedIcon style={{ fontSize: 12, color: \"#55566B\" }} />\n </Button>\n </Box>\n\n <Box className=\"box-carosel\">\n <DefaultCarousel imgItem={dataImageCarousel} />\n <Button\n className=\"icon-style\"\n onClick={() => {\n if (!main_image_link) {\n console.log(\"321\");\n\n return;\n }\n onSearchImage(main_image_link);\n handlerCloseModal();\n }}\n >\n <img src={IconPicture} alt=\"icon_picture\" />\n </Button>\n </Box>\n\n <Box\n className=\"box-content\"\n display={\"flex\"}\n style={{ flexDirection: \"column\" }}\n >\n <Box className=\"box-top\">\n <Grid container justifyContent=\"space-between\">\n <Grid item xs={10}>\n <Typography className=\"text-f9 fw-500 max-line-1\">\n SKU: {sku}\n </Typography>\n <Typography className=\"text-f16 fw-600 text-dark\">\n {title}\n </Typography>\n <Link className=\"text-f9 text-blue\" to={\"/\"} href=\"#\">\n View full description\n </Link>\n </Grid>\n <Grid item>\n <Button className=\"btn-item\">\n <img\n src={IconBookmark}\n alt=\"image_item\"\n className=\"icon_action\"\n />\n </Button>\n </Grid>\n </Grid>\n </Box>\n\n <Box className=\"box-bottom\">\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Grid item>\n <Box display={\"flex\"} alignItems={\"center\"}>\n <Button className=\"btn-item\">\n <img\n src={IconLike}\n alt=\"image_item\"\n className=\"icon_action\"\n />\n </Button>\n <Button className=\"btn-item\">\n <img\n src={IconDisLike}\n alt=\"image_item\"\n className=\"icon_action\"\n />\n </Button>\n </Box>\n </Grid>\n <Grid item>\n <Box display={\"flex\"} alignItems={\"center\"}>\n <Button className=\"btn-item\" onClick={onHandlerModalShare}>\n <img\n src={IconShare}\n alt=\"image_item\"\n className=\"icon_action\"\n />\n </Button>\n <Button className=\"btn-item\">\n <Box\n className=\"box-gray text-center box-support\"\n display={\"flex\"}\n justifyContent={\"center\"}\n alignItems={\"center\"}\n >\n <img\n src={IconSupport}\n alt=\"image_item\"\n className=\"icon_support\"\n />\n </Box>\n </Button>\n </Box>\n </Grid>\n </Grid>\n </Box>\n </Box>\n </Box>\n );\n}\n\nexport default DetailItem;\n","import React, { useState } from \"react\";\nimport { Box } from \"@material-ui/core\";\nimport { connectStateResults } from \"react-instantsearch-dom\";\n\nfunction LoadingScreen({\n searchState,\n searchResults,\n children,\n isSearchStalled,\n searchingForFacetValues,\n searching,\n}: any) {\n const [isLoading] = useState<boolean>(false);\n\n return (\n <>\n {isLoading && (\n <Box className=\"box-wrap-loading\">\n <Box className=\"loadingSpinCT\">\n <Box className=\"box-content-spin\"></Box>\n </Box>\n </Box>\n )}\n {children}\n </>\n );\n}\nconst LoadingScreenCustom = connectStateResults(LoadingScreen);\nexport default LoadingScreenCustom;\n","import {\n Box,\n Button,\n IconButton,\n InputBase,\n Paper,\n Typography,\n} from \"@material-ui/core\";\nimport React, { useEffect, useState } from \"react\";\nimport IconWhatsApp from \"common/assets/icons/Icon_whatsapp.png\";\nimport IconEmail from \"common/assets/icons/icon_email.png\";\nimport IconWeChat from \"common/assets/icons/Icon_wechat.png\";\nimport ItemResult from \"components/results/ItemResult\";\nimport { useAppDispatch, useAppSelector } from \"Store/Store\";\nimport { debounce } from \"lodash\";\nimport KeyboardArrowRightOutlinedIcon from \"@material-ui/icons/KeyboardArrowRightOutlined\";\nimport KeyboardArrowLeftOutlinedIcon from \"@material-ui/icons/KeyboardArrowLeftOutlined\";\nimport FooterResult from \"components/FooterResult\";\nimport DefaultModal from \"components/modal/DefaultModal\";\nimport CloseOutlinedIcon from \"@material-ui/icons/CloseOutlined\";\nimport DetailItem from \"components/DetailItem\";\nimport FileCopyOutlinedIcon from \"@material-ui/icons/FileCopyOutlined\";\nimport { RectCoords } from \"@nyris/nyris-api\";\nimport {\n setSearchResults,\n loadingActionResults,\n selectionChanged,\n updateResultChangePosition, setRegions, setSelectedRegion,\n} from \"Store/Search\";\nimport { showFeedback, showResults } from \"Store/Nyris\";\nimport algoliasearch from \"algoliasearch/lite\";\nimport {\n InstantSearch,\n Hits,\n Pagination,\n Configure,\n} from \"react-instantsearch-dom\";\nimport CustomSearchBox from \"components/input/inputSearch\";\nimport {feedbackClickEpic, feedbackSuccessEpic, feedbackTextSearchEpic} from \"services/Feedback\";\nimport {\n createImage, findByImage, findRegions,\n} from \"services/image\";\nimport LoadingScreenCustom from \"components/LoadingScreen\";\nimport { Preview } from \"@nyris/nyris-react-components\";\nimport {AlgoliaResult, AlgoliaSettings} from \"../../types\";\n\ninterface Props {}\n\nconst defaultSelection = {x1: 0.1, x2: 0.9, y1: 0.1, y2: 0.9};\nfunction ResultComponent(props: Props) {\n const dispatch = useAppDispatch();\n const stateGlobal = useAppSelector((state) => state);\n const [showColLeft, setToggleShowColLeft] = useState<boolean>(false);\n const [showImageCanvas, setShowImageCanvas] = useState<boolean>(true);\n const [isOpenModalImage, setOpenModalImage] = useState<boolean>(false);\n const [numberResult, setNumberResult] = useState<number>(0);\n const [isOpenModalShare, setOpenModalShare] = useState<boolean>(false);\n const { search, settings } = stateGlobal;\n const { results, requestImage, regions, selectedRegion } = search;\n const { valueTextSearch } = search;\n const [dataResult, setDataResult] = useState<any[]>([]);\n const [dataImageModal, setDataImageModal] = useState<any>();\n const [searchStateInput, setSearchStateInput] = useState<any>({});\n const [isLoading, setLoading] = useState<any>(false);\n const { apiKey, appId, indexName } = settings.algolia as AlgoliaSettings;\n const searchClient = algoliasearch(appId, apiKey);\n const index = searchClient.initIndex(indexName);\n\n useEffect(() => {\n if (!valueTextSearch) {\n return;\n }\n setSearchStateInput(valueTextSearch);\n }, [valueTextSearch]);\n\n useEffect(() => {\n if (results?.length === 0) {\n setDataResult([]);\n return;\n }\n setDataResult(results);\n }, [results]);\n\n useEffect(() => {\n if (!showColLeft) {\n return setShowImageCanvas(true);\n }\n return setShowImageCanvas(false);\n }, [showColLeft]);\n\n // TODO: hanlder modal:\n const handlerToggleModal = (item: any) => {\n setDataImageModal(item);\n return setOpenModalImage(true);\n };\n\n const onNextItem = () => {\n if (numberResult === results.length) {\n return;\n }\n setNumberResult(numberResult + 1);\n };\n\n const onPrevItem = () => {\n if (numberResult === 0) {\n return;\n }\n setNumberResult(numberResult - 1);\n };\n\n // TODO: rectCoords\n\n const debounceRectCoords = (value: any) => handlerRectCoords(value);\n\n const handlerRectCoords = debounce((value: any) => {\n dispatch(selectionChanged(value));\n setLoading(true);\n return findItemsInSelection(value);\n }, 500);\n\n // TODO: Search offers for image:\n const findItemsInSelection = (r: RectCoords) => {\n if (!requestImage) {\n return;\n }\n const { canvas }: any = requestImage;\n findByImage(canvas, stateGlobal.settings, r).then((res) => {\n const payload = {\n ...res,\n };\n dispatch(updateResultChangePosition(payload));\n setLoading(false);\n return dispatch(showFeedback());\n });\n };\n\n // TODO: Search text\n const searchTextByApiAndFilter = async (searchState: any) => {\n try {\n if (searchState?.query !== \"\") {\n const data = await index.search<AlgoliaResult>(searchState.query, {});\n const productIds = data.hits.map((hit) => hit.sku);\n await feedbackTextSearchEpic(stateGlobal, data.query, data.page, productIds);\n }\n } catch (error) {\n console.log(\"searchTextByApi\", error);\n return;\n }\n };\n\n const sendFeedBackAction = async (type: string) =>\n feedbackSuccessEpic(stateGlobal, type === \"like\");\n\n // Search image with url or file\n const getUrlToCanvasFile = async (url: string, position?: number) => {\n dispatch(showResults());\n dispatch(loadingActionResults());\n let image = await createImage(url);\n if (position) {\n feedbackClickEpic(stateGlobal, position);\n return;\n }\n let searchRegion : RectCoords | undefined = undefined;\n if (settings.regions) {\n let res = await findRegions(image, settings);\n searchRegion = res.selectedRegion;\n dispatch(setRegions(res.regions));\n dispatch(setSelectedRegion(searchRegion));\n }\n\n findByImage(image, settings, searchRegion).then((res ) => {\n dispatch(setSearchResults(res));\n setLoading(false);\n return dispatch(showFeedback());\n });\n };\n\n // Todo: item result.\n const Hit = (hit: any) => {\n return (\n <ItemResult\n dataItem={hit?.hit}\n handlerToggleModal={() => {\n handlerToggleModal(hit?.hit);\n }}\n handlerToggleModalShare={() => setOpenModalShare(true)}\n indexItem={hit.__position}\n isHover={false}\n onSearchImage={(url: any) => {\n setSearchStateInput({});\n getUrlToCanvasFile(url);\n setLoading(true);\n }}\n handlerFeedback={(value: string) => {\n sendFeedBackAction(value);\n }}\n />\n );\n };\n\n const nonEmptyFilter: any[] = !requestImage\n ? []\n : [\"sku:DOES_NOT_EXIST<score=1>\"];\n const filterSkus: any = search?.results\n ? search?.results.slice().reverse().map(\n (f: any, i: number) => `sku:'${f.sku}'<score=${i}>`\n )\n : \"\";\n const filtersString = [...nonEmptyFilter, ...filterSkus].join(\" OR \");\n return (\n <Box className={`wrap-main-result loading`}>\n <>\n {isLoading && (\n <Box className=\"box-wrap-loading\">\n <Box className=\"loadingSpinCT\">\n <Box className=\"box-content-spin\"></Box>\n </Box>\n </Box>\n )}\n <InstantSearch\n indexName={indexName}\n searchClient={searchClient}\n searchState={searchStateInput}\n onSearchStateChange={(state) => {\n setSearchStateInput(state);\n searchTextByApiAndFilter(state);\n }}\n >\n <Configure filters={filtersString}></Configure>\n <Box className=\"box-wrap-result-component\">\n <div className=\"box-search\">\n <Box>\n <CustomSearchBox />\n </Box>\n {/* <Box className=\"box-filter\">\n <FilterComponent />\n </Box> */}\n </div>\n <Box className=\"box-result\">\n <>\n {settings.preview && requestImage && (\n <Box className={`col-left ${showColLeft && \"toggle\"}`}>\n <Box className=\"box-preview\">\n <Button\n className=\"button-toggle\"\n onClick={() => {\n setTimeout(() => {\n setToggleShowColLeft(!showColLeft);\n }, 500);\n }}\n >\n {showColLeft ? (\n <KeyboardArrowRightOutlinedIcon />\n ) : (\n <KeyboardArrowLeftOutlinedIcon />\n )}\n </Button>\n {requestImage && showImageCanvas && (\n <Box className=\"preview-item\">\n <Preview\n key={requestImage?.id}\n onSelectionChange={(r: RectCoords) => {\n debounceRectCoords(r);\n return;\n }}\n image={requestImage?.canvas}\n selection={selectedRegion|| defaultSelection}\n regions={regions}\n maxWidth={400}\n maxHeight={500}\n dotColor=\"#FBD914\"\n />\n </Box>\n )}\n </Box>\n <Box className=\"box-title_col-left\">\n <Typography style={{ fontSize: 11, color: \"#fff\" }}>\n Adjust the selection frame for better results.\n </Typography>\n </Box>\n </Box>\n )}\n\n <Box\n className={`col-right ${\n settings.preview && \"ml-auto mr-auto\"\n }`}\n >\n <Box\n className={`box-item-result ${\n requestImage && showImageCanvas\n ? \"mr-auto\"\n : \"ml-auto mr-auto\"\n }`}\n >\n <LoadingScreenCustom>\n <Hits hitComponent={Hit} />\n </LoadingScreenCustom>\n </Box>\n </Box>\n </>\n </Box>\n <Box>\n <Box className=\"box-panigation\">\n <Pagination />\n </Box>\n <Box className=\"box-notify\">\n <FooterResult search={search} />\n </Box>\n </Box>\n\n {/* TODO: Component modal image */}\n <DefaultModal\n openModal={isOpenModalImage}\n handleClose={(e: any) => {\n setOpenModalImage(false);\n }}\n >\n <DetailItem\n handlerCloseModal={() => {\n setOpenModalImage(false);\n }}\n onPrevItem={onPrevItem}\n onNextItem={onNextItem}\n dataItem={dataImageModal}\n results={dataResult}\n onHandlerModalShare={() => setOpenModalShare(true)}\n onSearchImage={(url: string) => {\n setLoading(true);\n getUrlToCanvasFile(url);\n }}\n />\n </DefaultModal>\n\n {/* TODO: Component modal share */}\n <DefaultModal\n openModal={isOpenModalShare}\n handleClose={() => setOpenModalShare(false)}\n >\n <Box className=\"box-modal-default box-modal-share\">\n <Box\n className=\"ml-auto\"\n style={{ width: \"fit-content\", marginRight: 5 }}\n >\n <Button\n style={{ padding: 0 }}\n onClick={() => setOpenModalShare(false)}\n >\n <CloseOutlinedIcon\n style={{ fontSize: 12, color: \"#55566B\" }}\n />\n </Button>\n </Box>\n <Box className=\"box-content-box-share\">\n <Typography className=\"text-f12 text-gray text-bold\">\n Share\n </Typography>\n <Paper component=\"form\" className=\"box-input\">\n <InputBase\n className=\"text-f9 text-gray\"\n style={{ width: \"100%\" }}\n value={\"https://www.go...\"}\n />\n <IconButton\n color=\"secondary\"\n aria-label=\"directions\"\n style={{ padding: 0 }}\n >\n <FileCopyOutlinedIcon style={{ fontSize: 8 }} />\n </IconButton>\n </Paper>\n\n <Box mt={1} className=\"box-media-share\">\n <Button style={{ padding: 0 }}>\n <Box display={\"flex\"} alignItems={\"center\"}>\n <img src={IconEmail} alt=\"icon_email\" />\n <Typography\n className=\"text-f8 fw-500\"\n style={{ color: \"#2B2C46\", marginLeft: 5 }}\n >\n Share with e-Mail\n </Typography>\n </Box>\n </Button>\n <Button style={{ padding: 0 }}>\n <Box display={\"flex\"} alignItems={\"center\"}>\n <img src={IconWhatsApp} alt=\"icon_email\" />\n <Typography\n className=\"text-f8 fw-500\"\n style={{ color: \"#2B2C46\", marginLeft: 5 }}\n >\n Share with WhatsApp\n </Typography>\n </Box>\n </Button>\n <Button style={{ padding: 0 }}>\n <Box display={\"flex\"} alignItems={\"center\"}>\n <img src={IconWeChat} alt=\"icon_email\" />\n <Typography\n className=\"text-f8 fw-500\"\n style={{ color: \"#2B2C46\", marginLeft: 5 }}\n >\n Share with WeChat\n </Typography>\n </Box>\n </Button>\n </Box>\n </Box>\n </Box>\n </DefaultModal>\n </Box>\n </InstantSearch>\n </>\n </Box>\n );\n}\n\nexport default ResultComponent;\n","import * as React from \"react\";\nimport {\n DataGrid,\n} from \"@material-ui/data-grid\";\nimport { Box, Button, Typography } from \"@material-ui/core\";\nimport ViewOff from \"common/assets/icons/view_off.png\";\nimport ImageTest from \"common/assets/images/image_test.png\";\nimport MoreVertOutlinedIcon from \"@material-ui/icons/MoreVertOutlined\";\nimport KeyboardArrowUpOutlinedIcon from \"@material-ui/icons/KeyboardArrowUpOutlined\";\nimport KeyboardArrowDownOutlinedIcon from \"@material-ui/icons/KeyboardArrowDownOutlined\";\n// image_test.png\nconst handleCellClick = (param: any, event: any) => {\n // console.log(param);\n // console.log(event);\n if (param.colIndex === 2) {\n event.stopPropagation();\n }\n};\n\nconst handleRowClick = (param: any, event: any) => {\n // console.log(\"Row:\");\n // console.log(param);\n // console.log(event);\n};\n\nconst columns: any = [\n {\n field: \"time\",\n headerName: \"Time\",\n width: 42,\n renderHeader: (params: any) => {\n return (\n <Typography className=\"text-f9 text-white fw-700\">Time</Typography>\n );\n },\n renderCell: (cellValues: any) => {\n console.log(\"cellValues\", cellValues);\n return (\n <Typography className=\"text-f9 fw-500 text-gray2\">\n {cellValues.value}\n </Typography>\n );\n },\n },\n {\n field: \"search\",\n headerName: \"Search\",\n width: 139,\n renderHeader: (params: any) => {\n return (\n <Typography className=\"text-f9 text-white fw-700\">Search</Typography>\n );\n },\n renderCell: (cellValues: any) => {\n console.log(\"cellValues\", cellValues);\n return (\n <Box display={\"flex\"} alignItems={\"center\"}>\n <Box className=\"box-image-search\">\n <img src={cellValues?.row.search.image} alt=\"img_search\" />\n </Box>\n <Typography className=\"text-f9 text-gray2 fw-500\">\n {cellValues?.row.search.text}\n </Typography>\n </Box>\n );\n },\n },\n {\n field: \"order\",\n headerName: \"Order\",\n width: 112,\n renderHeader: (params: any) => {\n return (\n <Typography className=\"text-f9 text-white fw-700\">Order</Typography>\n );\n },\n renderCell: (cellValues: any) => {\n console.log(\"cellValues\", cellValues);\n return (\n <Typography className=\"text-f9 text-gray2 fw-500\">\n {cellValues?.row.order ? cellValues?.row.order : \"_\"}\n </Typography>\n );\n },\n },\n {\n field: \"device\",\n headerName: \"Device\",\n width: 161,\n // align: \"left\",\n renderHeader: (params: any) => {\n return (\n <Typography className=\"text-f9 text-white fw-700\">Device</Typography>\n );\n },\n renderCell: (cellValues: any) => {\n console.log(\"cellValues\", cellValues);\n return (\n <Typography className=\"text-f9 text-gray2 fw-500\">\n {cellValues?.row.device ? cellValues?.row.device : \"_\"}\n </Typography>\n );\n },\n },\n {\n field: \"more\",\n headerName: \"More\",\n sortable: false,\n width: 48,\n // valueGetter: (params: any) => {\n // return `${params.getValue(params.id, \"firstName\") || \"\"} ${\n // params.getValue(params.id, \"lastName\") || \"\"\n // }`;\n // },\n renderHeader: (params: any) => {\n return (\n <Typography className=\"text-f9 text-white fw-700\">More</Typography>\n );\n },\n renderCell: (cellValues: any) => {\n console.log(\"cellValues\", cellValues);\n return (\n <Box>\n <Button>\n <MoreVertOutlinedIcon style={{ fontSize: 12 }} />\n </Button>\n </Box>\n );\n },\n },\n];\n\nconst rows = [\n {\n id: 1,\n time: \"14:32\",\n search: {\n image: ViewOff,\n text: \"engine bühler\",\n },\n order: \"\",\n device: \"Desktop app\",\n more: \"\",\n },\n {\n id: 2,\n time: \"14:32\",\n search: {\n image: ImageTest,\n text: \"\",\n },\n order: \"Secondary search\",\n device: \"Desktop app\",\n more: \"\",\n },\n {\n id: 3,\n time: \"14:32\",\n search: {\n image: ViewOff,\n text: \"engine bühler\",\n },\n order: \"\",\n device: \"Desktop app\",\n more: \"\",\n },\n];\n\nexport default function ListSearch() {\n return (\n <>\n <Box>\n <Typography\n className=\"text-f12 text-gray2 box-gray2 fw-700\"\n style={{ padding: \"2px 10px\" }}\n >\n Monday January 1st, 2021\n </Typography>\n </Box>\n <DataGrid\n // rowHeight={32}\n // className={classes.root}\n rows={rows}\n columns={columns}\n // pageSize={100}\n checkboxSelection\n onCellClick={handleCellClick}\n onRowClick={handleRowClick}\n disableSelectionOnClick\n hideFooter\n disableColumnMenu\n autoHeight\n components={{\n ColumnSortedAscendingIcon: () => (\n <KeyboardArrowUpOutlinedIcon\n style={{ fontSize: 12, color: \"#fff\" }}\n />\n ),\n ColumnSortedDescendingIcon: () => (\n <KeyboardArrowDownOutlinedIcon\n style={{ fontSize: 12, color: \"#fff\" }}\n />\n ),\n // Checkbox: (props) => <div>{...props}</div>\n }}\n />\n </>\n );\n}\n","import { Box, Button, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport ListSearch from \"components/search/ListSearch\";\n\ninterface Option {\n readonly label: string;\n readonly value: string;\n}\n\nfunction SearchHistory(): JSX.Element {\n return (\n <Box className=\"wrap-main-search-history\">\n <Box className=\"box-main-top\">\n <Box className=\"box-input\">\n {/* <InputSearch\n inputValueInputSearch={inputValueInputSearch}\n handleChange={handleChangeInputSearch}\n handleKeyDown={handleKeyDown}\n handleInputChange={handleInputChange}\n valueInputSearch={valueInputSearch}\n styleControl={{\n width: 640,\n background: \"#FFFFFF\",\n boxShadow: \"0px 0px 6.66667px rgba(0, 0, 0, 0.2)\",\n borderRadius: 21,\n minHeight: 42,\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: \"16px\",\n }}\n placeholder={\"Search\"}\n customComponent={{\n DropdownIndicator: () => {\n return (\n <Box mr={1}>\n <button\n className=\"btn-input-search\"\n onClick={() => {\n console.log(\"321\");\n }}\n >\n <img src={IconSetting} alt=\"icon_search\" />\n </button>\n </Box>\n );\n },\n }}\n /> */}\n </Box>\n </Box>\n\n <Box className=\"box-main-bottom\">\n <Box className=\"col-left\">\n <ul className=\"box-time\">\n <li>\n <Button>\n <Typography className=\"text-f9 active\">2021</Typography>\n </Button>\n </li>\n <li>\n <Button>\n <Typography className=\"text-f9\">2020</Typography>\n </Button>\n </li>\n </ul>\n </Box>\n <Box className=\"col-right\">\n <ListSearch />\n <ListSearch />\n </Box>\n </Box>\n </Box>\n );\n}\n\nexport default SearchHistory;\n","import { Grid } from \"@material-ui/core\";\nimport ItemResult from \"components/results/ItemResult\";\nimport React from \"react\";\n\ninterface Props {\n dataItem: any[];\n isHover?: boolean\n}\n\nfunction AllItem(props: Props) {\n const { dataItem } = props;\n\n return (\n <Grid container spacing={2}>\n {dataItem &&\n dataItem.map((item: any, index: any) => {\n return (\n <Grid item sm={3} key={index}>\n <ItemResult\n dataItem={item}\n isHover={true}\n // handlerToggleModal={handlerToggleModal}\n // handlerToggleModalShare={() => setOpenModalShare(true)}\n />\n </Grid>\n );\n })}\n </Grid>\n );\n}\n\nexport default AllItem;\n","import { Grid } from \"@material-ui/core\";\nimport React from \"react\";\n\ninterface Props {\n nameCategory?: string;\n}\n\nfunction CategoryItemSaved(props: Props) {\n return (\n <Grid container>\n <Grid item xs={4}></Grid>\n </Grid>\n );\n}\n\nexport default CategoryItemSaved;\n","export const dataItem = [\n {\n av: {\n t: \"INVALID\",\n },\n id: \"9c5c2eeb72895300bdd3b4ff8e6b67c4\",\n mid: \"3ab221c77f2058efb4dc4f9a4255f270\",\n mer: \"demo.nyris.io\",\n title: \"HOYA\",\n desc: \"Pflanze\",\n var: [],\n img: {\n id: \"46ffb718a24bf47125c09db0bb0643074a119f2eb14939863665414afd306c3e\",\n ifid: \"\",\n url: \"https://img.nyris.io/46f/46ffb718a24bf47125c09db0bb0643074a119f2eb14939863665414afd306c3e.jpg\",\n h: false,\n },\n cc: [\"Dekoration\", \"Blumentöpfe, Pflanzen & Blumenständer\", \"Pflanzen\"],\n sku: \"60392745\",\n position: 0,\n },\n {\n av: {\n t: \"INVALID\",\n },\n id: \"65f857e9779856e18cd67a809fd9e23c\",\n mid: \"3ab221c77f2058efb4dc4f9a4255f270\",\n mer: \"demo.nyris.io\",\n title: \"FEJKA\",\n desc: \"Kunstpflanze\",\n var: [],\n img: {\n id: \"25f72fedd3cc0ef399bf88086157df643638e5b6e755a08b20c61221b1186c49\",\n ifid: \"\",\n url: \"https://img.nyris.io/25f/25f72fedd3cc0ef399bf88086157df643638e5b6e755a08b20c61221b1186c49.jpg\",\n h: false,\n },\n cc: [\n \"Dekoration\",\n \"Blumentöpfe, Pflanzen & Blumenständer\",\n \"Kunstpflanzen & -blumen\",\n ],\n sku: \"20349532\",\n position: 1,\n },\n {\n av: {\n t: \"INVALID\",\n },\n id: \"c66fd178c8125ae198089caff89245a9\",\n mid: \"3ab221c77f2058efb4dc4f9a4255f270\",\n mer: \"demo.nyris.io\",\n title: \"BEGÄRLIG\",\n desc: \"Vase\",\n var: [],\n img: {\n id: \"3b99e5300504273d8b363a501344c7d06b7fb5a29b5e0a50caf1d3d036a015b7\",\n ifid: \"\",\n url: \"https://img.nyris.io/3b9/3b99e5300504273d8b363a501344c7d06b7fb5a29b5e0a50caf1d3d036a015b7.jpg\",\n h: false,\n },\n cc: [\"Dekoration\", \"Vasen & Schalen\", \"Vasen\"],\n sku: \"30309781\",\n position: 2,\n },\n {\n av: {\n t: \"INVALID\",\n },\n id: \"9ffd0e329cc15d5489a6f2e2fc3f7497\",\n mid: \"3ab221c77f2058efb4dc4f9a4255f270\",\n mer: \"demo.nyris.io\",\n title: \"INDUSTRIELL\",\n desc: \"Teller\",\n var: [],\n img: {\n id: \"60bd1dfa0229b9a9065ee6d74b969718c75a55383e830a627fb0f9decf407925\",\n ifid: \"\",\n url: \"https://img.nyris.io/60b/60bd1dfa0229b9a9065ee6d74b969718c75a55383e830a627fb0f9decf407925.jpg\",\n h: false,\n },\n cc: [\"Essen\", \"Essgeschirr\", \"Teller\"],\n sku: \"90387078\",\n position: 3,\n },\n {\n av: {\n t: \"INVALID\",\n },\n id: \"939e4f8f643156cf81c14804174a9efd\",\n mid: \"3ab221c77f2058efb4dc4f9a4255f270\",\n mer: \"demo.nyris.io\",\n title: \"CITRUS\",\n desc: \"Topfpflanze\",\n var: [],\n img: {\n id: \"a3bcf8cb031effb87e3d412a51cc218860a064543a39e4cd6b368ccda4e44b5f\",\n ifid: \"\",\n url: \"https://img.nyris.io/a3b/a3bcf8cb031effb87e3d412a51cc218860a064543a39e4cd6b368ccda4e44b5f.jpg\",\n h: false,\n },\n cc: [\"Dekoration\", \"Blumentöpfe, Pflanzen & Blumenständer\", \"Pflanzen\"],\n sku: \"60392665\",\n position: 4,\n },\n {\n p: {\n c: \"EUR\",\n vi: 3199,\n ve: 3198,\n t: 0,\n },\n av: {\n t: \"INVALID\",\n },\n l: \"https://www.impressionen.de/de/Weihnachten/Weihnachtsbeleuchtung/LED-Kranz-mit-Tannenzapfen-und-Blumen/produkt/246278?fromSearch=Suche&ctp=cG9zPTIxODEmc2ltaT05Ni4w\",\n id: \"116e947ef4685a8e941f0b7b6d06753c\",\n mid: \"3ab221c77f2058efb4dc4f9a4255f270\",\n mer: \"demo.nyris.io\",\n title: \"LED-Kranz mit Tannenzapfen und Blumen\",\n desc: \"\",\n var: [],\n img: {\n id: \"a6b41a30d15214450fb33cc39f29519a0dec354b266901c199d4467bb605d1c0\",\n ifid: \"\",\n url: \"https://img.nyris.io/a6b/a6b41a30d15214450fb33cc39f29519a0dec354b266901c199d4467bb605d1c0.jpg\",\n h: false,\n },\n cc: [\"Weihnachten\", \"Weihnachtsbeleuchtung\"],\n sku: \"246278\",\n position: 5,\n },\n {\n av: {\n t: \"INVALID\",\n },\n id: \"19543b4d71e5591892cb36f0cc45918f\",\n mid: \"3ab221c77f2058efb4dc4f9a4255f270\",\n mer: \"demo.nyris.io\",\n title: \"SMYCKA\",\n desc: \"Kunstblatt\",\n var: [],\n img: {\n id: \"af4a0c55b0d9a7a8ac96ca85f8302ee7f97f01a133f51dc5126ede9a5969b86e\",\n ifid: \"\",\n url: \"https://img.nyris.io/af4/af4a0c55b0d9a7a8ac96ca85f8302ee7f97f01a133f51dc5126ede9a5969b86e.jpg\",\n h: false,\n },\n cc: [\n \"Dekoration\",\n \"Blumentöpfe, Pflanzen & Blumenständer\",\n \"Kunstpflanzen & -blumen\",\n ],\n sku: \"80335773\",\n position: 6,\n },\n {\n av: {\n t: \"INVALID\",\n },\n id: \"8342509d872959efa36170e1ed933243\",\n mid: \"3ab221c77f2058efb4dc4f9a4255f270\",\n mer: \"demo.nyris.io\",\n title: \"STILREN\",\n desc: \"Vase\",\n var: [],\n img: {\n id: \"f1df581ba7e1ac05058a450ff1d222c8c1443e8582b515e447546e48e8ea5f6f\",\n ifid: \"\",\n url: \"https://img.nyris.io/f1d/f1df581ba7e1ac05058a450ff1d222c8c1443e8582b515e447546e48e8ea5f6f.jpg\",\n h: false,\n },\n cc: [\"Dekoration\", \"Vasen & Schalen\", \"Vasen\"],\n sku: \"10442045\",\n position: 7,\n },\n {\n av: {\n t: \"INVALID\",\n },\n id: \"cbf502eb20d454e086e21ffe0d6dd474\",\n mid: \"3ab221c77f2058efb4dc4f9a4255f270\",\n mer: \"demo.nyris.io\",\n title: \"STILREN\",\n desc: \"Vase\",\n var: [],\n img: {\n id: \"40b1a22c8610bfcd52e3acb59b39ee7a8c9a547db288344b0a9978d7f7353798\",\n ifid: \"\",\n url: \"https://img.nyris.io/40b/40b1a22c8610bfcd52e3acb59b39ee7a8c9a547db288344b0a9978d7f7353798.jpg\",\n h: false,\n },\n cc: [\"Dekoration\", \"Vasen & Schalen\", \"Vasen\"],\n sku: \"60442043\",\n position: 8,\n },\n {\n p: {\n c: \"EUR\",\n vi: 795,\n ve: 794,\n t: 0,\n },\n av: {\n t: \"INVALID\",\n },\n l: \"https://www.dm.de/183-days-by-trend-it-up-lidschatten-cream-square-eyeshadow-palette-020-p4058172080852.html\",\n id: \"cb6039515188564eac24d7b4c1c19e79\",\n mid: \"3ab221c77f2058efb4dc4f9a4255f270\",\n mer: \"demo.nyris.io\",\n title: \"Lidschatten Cream Square Eyeshadow Palette 020, 8,1 g\",\n desc: \"\",\n var: [],\n img: {\n id: \"80abb67003ea310765db1dcadb3f7a65769ba0e5f2555397964b054e6a6d6a82\",\n ifid: \"\",\n url: \"https://img.nyris.io/80a/80abb67003ea310765db1dcadb3f7a65769ba0e5f2555397964b054e6a6d6a82.jpg\",\n h: false,\n },\n sku: \"4058172080852\",\n position: 9,\n },\n];\n","import { Box, Button } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useState } from \"react\";\nimport {\n NavLink,\n useLocation,\n useRouteMatch,\n} from \"react-router-dom\";\nimport AllItem from \"components/Saved/AllItem\";\nimport CategoryItemSaved from \"components/Saved/Category\";\nimport { useEffect } from \"react\";\nimport AddOutlinedIcon from \"@material-ui/icons/AddOutlined\";\nimport { dataItem } from \"./MockData\";\ninterface Props {}\n\ninterface Option {\n readonly label: string;\n readonly value: string;\n}\n\nconst collections = [\n {\n value: \"all\",\n title: \"All\",\n },\n {\n value: \"collections\",\n title: \"Collections\",\n },\n];\n\nconst useQuery = () => {\n const { search } = useLocation();\n return React.useMemo(() => new URLSearchParams(search), [search]);\n};\n\nfunction Saved(props: Props) {\n let query = useQuery();\n const getCategory = query.get(\"category\");\n let { url } = useRouteMatch();\n const [nameCategory, setNameCategory] = useState<string>(\"all\");\n const [collectionParams] =\n useState<any[any]>(collections);\n useEffect(() => {\n if (getCategory) {\n setNameCategory(getCategory);\n }\n }, [getCategory]);\n\n // console.log(\"history\", history?.location);\n\n // const handleCheckMatchLink = (match: any, location: any) => {\n // let active = false;\n // if (history?.location.search === location?.search) {\n // active = true;\n // }\n // // if (match?.url === location.pathname) {\n // // active = true;\n // // }\n\n // return active;\n // };\n\n // console.log(\"query\", query.get(\"category\"));\n\n console.log(\"collectionParams\", collectionParams);\n\n return (\n <Box className=\"wrap-main-saved\">\n <Box className=\"box-main-top\">\n <Box className=\"box-top\">\n <Box\n className=\"box-input-search\"\n display={\"flex\"}\n justifyContent={\"center\"}\n >\n {/* <InputSearch\n inputValueInputSearch={inputValueInputSearch}\n handleChange={handleChange}\n handleKeyDown={handleKeyDown}\n handleInputChange={handleInputChange}\n valueInputSearch={valueInputSearch}\n styleControl={{\n width: 640,\n background: \"#FFFFFF\",\n boxShadow: \"0px 0px 6.66667px rgba(0, 0, 0, 0.2)\",\n borderRadius: 21,\n minHeight: 42,\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: \"16px\",\n }}\n placeholder={\"Search\"}\n customComponent={{\n DropdownIndicator: () => {\n return (\n <Box mr={1}>\n <button\n className=\"btn-input-search\"\n onClick={() => {\n console.log(\"321\");\n }}\n >\n <img src={IconSetting} alt=\"icon_search\" />\n </button>\n </Box>\n );\n },\n }}\n /> */}\n </Box>\n {collectionParams?.length > 0 && (\n <Box className=\"box-bottom\">\n {collectionParams.map((item: any, index: any) => {\n console.log(\"itemmmmmmm\", item);\n\n return (\n <Box mr={1}>\n <NavLink\n key={index}\n // activeClassName=\"active\"\n // isActive={(match, location) => {\n // console.log(\"match\", match);\n\n // return location?.search === history?.location.search\n // ? true\n // : false;\n // }}\n to={`${url}?category=${item.value}`}\n className=\"nav-link p-0 menu-children rounded-0\"\n >\n <span\n className={`d-none d-sm-block ms-4 px-2 py-1 border-bottom-1 ${\n nameCategory === \"all\" ? \"active1\" : \"active2\"\n }`}\n >\n {item.title}\n </span>\n </NavLink>\n </Box>\n );\n })}\n <Button style={{ backgroundColor: \"#D8D7F8\" }}>\n <AddOutlinedIcon style={{ color: \"#3E36DC\", fontSize: 12 }} />\n </Button>\n </Box>\n )}\n </Box>\n </Box>\n\n <Box className=\"box-main-bottom\">\n {collectionParams.length > 0 && (\n <Box>\n {nameCategory === \"all\" ? (\n <AllItem dataItem={dataItem} isHover={true} />\n ) : (\n <CategoryItemSaved nameCategory={nameCategory} />\n )}\n </Box>\n )}\n </Box>\n </Box>\n );\n}\n\nexport default Saved;\n","import React from \"react\";\nimport { Box, Button, FormControlLabel, Grid, Typography } from \"@material-ui/core\";\nimport BgColor from \"common/assets/images/Rectangle.png\";\n\ninterface Props {}\n\nfunction Profile(props: Props) {\n return (\n <Box className=\"wrap-main-profile\">\n <Grid container>\n <Grid item xs={6} className=\"box-col-left\">\n <Box className=\"box-top\">\n <Typography className=\"text-f40 fw-600 text-dark\">\n Jose Luis Reyes\n </Typography>\n <Typography className=\"text-f13 text-dark2 fw-600\">\n Nyris GmbH\n </Typography>\n </Box>\n <Box className=\"box-bottom\">\n <Box className=\"box-content\">\n <Typography className=\"text-f12 text-dark fw-700\">Profile</Typography>\n <Box mt={1}>\n <FormControlLabel\n labelPlacement=\"top\"\n control={<input />}\n label=\"Name\"\n className=\"w-100\"\n style={{ alignItems: \"flex-start\", margin: 0 }}\n />\n </Box>\n <Box mt={1}>\n <FormControlLabel\n labelPlacement=\"top\"\n control={<input />}\n label=\"E-mail\"\n style={{ alignItems: \"flex-start\", margin: 0 }}\n className=\"w-100\"\n />\n </Box>\n <Box mt={1}>\n <FormControlLabel\n labelPlacement=\"top\"\n control={<input />}\n label=\"Password\"\n style={{ alignItems: \"flex-start\", margin: 0 }}\n className=\"w-100\"\n />\n </Box>\n <Box className=\"w-100\" mt={2}>\n <Typography className=\"text-f12 text-dark fw-700\">Account</Typography>\n </Box>\n <Box mt={1}>\n <FormControlLabel\n labelPlacement=\"top\"\n control={<input />}\n label=\"Company\"\n style={{ alignItems: \"flex-start\", margin: 0 }}\n className=\"w-100\"\n />\n </Box>\n <Box mt={1}>\n <FormControlLabel\n labelPlacement=\"top\"\n control={<input />}\n label=\"Role\"\n style={{ alignItems: \"flex-start\", margin: 0 }}\n className=\"w-100\"\n />\n </Box>\n <Box mt={2}>\n <Button className=\"btn-log-out\">Log out</Button>\n </Box>\n </Box>\n </Box>\n </Grid>\n <Grid item xs={6} className=\"box-col-right\">\n <Box className=\"box-bg-image\">\n <img src={BgColor} alt=\"\" />\n </Box>\n </Grid>\n </Grid>\n </Box>\n );\n}\n\nexport default Profile;\n","import {\n Box,\n Button,\n CircularProgress,\n IconButton,\n TextareaAutosize,\n Typography,\n} from \"@material-ui/core\";\nimport React, { useState } from \"react\";\nimport PhotoCameraOutlinedIcon from \"@material-ui/icons/PhotoCameraOutlined\";\nimport CloseOutlinedIcon from \"@material-ui/icons/CloseOutlined\";\ninterface Props {}\n\nfunction SupportPage(props: Props) {\n const [imageUpload, setImageUpload] = useState<any[]>([]);\n const [isLoading, setLoading] = useState<boolean>(false);\n const onUploadImage = (e: any) => {\n let newValue: any[] = [];\n Object.values(e.target.files).forEach((val: any, index: any) => {\n newValue.push({\n value: index,\n urlImage: URL.createObjectURL(val),\n });\n });\n setImageUpload(newValue);\n };\n\n const onRemoveImage = (value: any) => {\n setLoading(true);\n const newArr = imageUpload;\n setImageUpload(newArr);\n setTimeout(() => {\n setLoading(false);\n }, 1000);\n };\n console.log(\"imageUpload\", imageUpload);\n\n return (\n <Box className=\"wrap-main-support-page\" display={\"flex\"}>\n <Box className=\"col-left\">\n <Box\n className=\"col-left__top\"\n display={\"flex\"}\n alignItems={\"center\"}\n justifyContent={\"center\"}\n >\n <Box\n style={{ width: 640 }}\n marginLeft={\"auto\"}\n display={\"flex\"}\n justifyContent={\"center\"}\n >\n <Typography\n className=\"text-f40 text-white fw-700\"\n style={{ width: 442 }}\n >\n Didn’t find what you were looking for?\n </Typography>\n </Box>\n </Box>\n <Box className=\"col-left__bottom\">\n <Box style={{ width: 640 }} marginLeft={\"auto\"}>\n <Box className=\"box-form\">\n <form>\n <Box mb={1}>\n <Typography className=\"text-white text-f12\">\n Share your search with our product expert:\n </Typography>\n </Box>\n <Box className=\"box-btn-upload\" mb={1}>\n <input\n accept=\"image/*\"\n id=\"contained-button-file\"\n multiple\n type=\"file\"\n style={{ display: \"none\" }}\n onChange={onUploadImage}\n />\n <label htmlFor=\"contained-button-file\">\n <IconButton\n color=\"primary\"\n aria-label=\"upload picture\"\n component=\"span\"\n className=\"btn-upload\"\n >\n Open file\n <PhotoCameraOutlinedIcon style={{ fontSize: 12 }} />\n </IconButton>\n </label>\n </Box>\n {!isLoading ? (\n <Box\n className=\"box-preview-image\"\n display={\"flex\"}\n flexWrap={\"wrap\"}\n >\n {imageUpload &&\n imageUpload.map((item: any, index: any) => {\n return (\n <Box className=\"box-image w-100\" key={index}>\n <Button\n className=\"btn-close w-100\"\n onClick={() => {\n const newValue = index;\n onRemoveImage(newValue);\n }}\n >\n <CloseOutlinedIcon style={{ fontSize: 12 }} />\n </Button>\n <img\n style={{ height: \"100%\" }}\n src={item.urlImage}\n key={index}\n alt={`${index}`}\n />\n </Box>\n );\n })}\n </Box>\n ) : (\n <CircularProgress />\n )}\n\n <Box mb={2}>\n <Typography className=\"text-white text-f12\">\n Or leave a message:\n </Typography>\n </Box>\n <Box mb={2}>\n <Box mb={1}>\n <Typography className=\"text-white text-f8\">\n Message\n </Typography>\n </Box>\n <TextareaAutosize\n placeholder=\"Message\"\n minRows={1}\n // style={{height: 'fit-content'}}\n className=\"text-f9 textarea-ct w-100\"\n />\n </Box>\n <Box display={\"flex\"}>\n <Button className=\"text-white text-f9 fw-700 bg-dark w-50 border-rd-0\">\n Cancel\n </Button>\n <Button className=\"text-white text-f9 fw-700 bg-pink2 w-50 border-rd-0\">\n Send\n </Button>\n </Box>\n </form>\n </Box>\n </Box>\n </Box>\n </Box>\n <Box className=\"col-right\"></Box>\n </Box>\n );\n}\n\nexport default SupportPage;\n","import React from \"react\";\nimport { Route, Switch, Redirect } from \"react-router-dom\";\n// import Page404 from \"Page/Exception/404\";\nimport Login from \"page/Auth/login\";\nimport Layout from \"components/Layout\";\nimport { ReactNode } from \"components/common\";\nimport App from \"App\";\nimport ResultComponent from \"page/result\";\nimport SearchHistory from \"page/History\";\nimport Saved from \"page/Saved\";\nimport Profile from \"page/Profile\";\nimport SupportPage from \"page/Support\";\n// import TestComponent from \"page/Test\";\n\ninterface PrivateRouteProps {\n component: ReactNode;\n authed: boolean;\n [key: string]: any;\n}\n\nconst PrivateRoute = ({\n component: Component,\n authed,\n ...rest\n}: PrivateRouteProps) => {\n return (\n <Route\n {...rest}\n render={() => (authed ? <Component /> : <Redirect to=\"/login\" />)}\n />\n );\n};\n\nfunction Router(): JSX.Element {\n const accessToken = true;\n\n return (\n <Switch>\n <Route exact strict path=\"/login\" component={Login} />\n <Layout>\n <Switch>\n <PrivateRoute\n authed={!!accessToken}\n exact\n strict\n path=\"/\"\n component={App}\n />\n <PrivateRoute\n authed={!!accessToken}\n exact\n strict\n path=\"/result\"\n component={ResultComponent}\n />\n <PrivateRoute\n authed={!!accessToken}\n exact\n strict\n path=\"/search-history\"\n component={SearchHistory}\n />\n <PrivateRoute\n authed={!!accessToken}\n exact\n strict\n path=\"/saved\"\n component={Saved}\n />\n <PrivateRoute\n authed={!!accessToken}\n exact\n strict\n path=\"/account\"\n component={Profile}\n />\n <PrivateRoute\n authed={!!accessToken}\n exact\n strict\n path=\"/support\"\n component={SupportPage}\n />\n {/* <PrivateRoute\n authed={!!accessToken}\n exact\n strict\n path=\"/test\"\n component={TestComponent}\n /> */}\n </Switch>\n </Layout>\n </Switch>\n );\n}\n\nexport default Router;\n","// Some people are still using internet explorer\nimport \"react-app-polyfill/ie11\";\nimport \"react-app-polyfill/stable\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport * as serviceWorker from \"./serviceWorker\";\nimport { Provider } from \"react-redux\";\nimport { AppSettings, MDSettings } from \"./types\";\nimport { MuiThemeProvider } from \"@material-ui/core\";\nimport \"typeface-roboto\";\nimport { defaultMdSettings } from \"./defaults\";\nimport { HashRouter } from \"react-router-dom\";\nimport Router from \"Router\";\nimport { store } from \"Store/Store\";\nimport \"react-responsive-carousel/lib/styles/carousel.min.css\";\nimport { createTheme } from \"@material-ui/core/styles\";\ndeclare var settings: AppSettings;\n\ndocument.title = window.location.host;\n\nlet md: MDSettings = {\n ...defaultMdSettings,\n ...settings.themePage.materialDesign,\n};\n\n\nlet theme = createTheme({\n typography: {\n fontFamily: md.customFontFamily,\n },\n palette: {\n primary: {\n main: md.primaryColor,\n },\n secondary: {\n main: md.secondaryColor,\n },\n },\n});\n\nReactDOM.render(\n <Provider store={store}>\n <MuiThemeProvider theme={theme}>\n <HashRouter>\n <Router />\n </HashRouter>\n </MuiThemeProvider>\n </Provider>,\n document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}