{"version":3,"sources":["img/Symmetric.png","img/ic_omnidex_footer.svg","img/meridian.png","img/Swapsicle.png","img/Voltage.png","img/logo_GMX_small.svg","img/Uniswap.svg","img/aerodrome.svg","img/coinbaseWallet.png","img/glpLogo1.svg","img/ic_checked.svg","img/ic_copy_16.svg","img/ic_cost.svg","img/ic_github.svg","img/ic_gmx_custom.svg","img/ic_language24.svg","img/ic_liquidity.svg","img/ic_medium.svg","img/ic_new_link_16.svg","img/ic_settings_16.svg","img/ic_sign_out_16.svg","img/ic_simpleswaps.svg","img/ic_stats.svg","img/ic_telegram.svg","img/ic_totaluser.svg","img/ic_trading.svg","img/ic_twitter.svg","img/ic_wallet_24.svg","img/metamask.png","img/walletconnect-circle-blue.svg","img/ic_arbitrum_96.svg","img/ic_avalanche_96.svg","img/shape.png","img sync /^/.//.*$","img/Anyswap.png","img/Anyswap.svg","img/Artwork.svg","img/Artwork_gmx.svg","img/Banxa.png","img/DROP_DOWN.svg","img/Dex3.png","img/Hop.png","img/Hop.svg","img/Hop_dark.png","img/Logo_Meridian.png","img/MeridianLogo.svg","img/Synapse.png","img/Synapse.svg","img/binance.png","img/bitkeep.svg","img/bscscan.png","img/btn_big_arbitrum.png","img/btn_big_avalanche.png","img/btn_big_bsc.png","img/btn_big_purchasegmx.png","img/btn_big_purchasegmx.svg","img/buy_gmx.svg","img/buy_gmx_bond.svg","img/buy_transfer_eth.svg","img/coingecko.png","img/cross.svg","img/flag_en.svg","img/flag_es.svg","img/flag_fr.svg","img/flag_ja.svg","img/flag_ko.svg","img/flag_ru.svg","img/flag_zh.svg","img/gateio.svg","img/gmx-logo-final-white-small.png","img/gmx-logo-final-white.png","img/gmx-logo-final.png","img/gmx-logo-glow.png","img/gmx-logo-with-name.svg","img/gmx_logo.svg","img/graphite-01.png","img/ic-communityproject.svg","img/ic_1inch.svg","img/ic_across.svg","img/ic_arbitrum_16.svg","img/ic_arbitrum_24.svg","img/ic_arbitrum_hover_16.svg","img/ic_arrowleft16.svg","img/ic_arrowright16.svg","img/ic_avalanche_16.svg","img/ic_avalanche_24.svg","img/ic_avalanche_testnet_16.svg","img/ic_avalanche_testnet_24.svg","img/ic_avalanche_testnet_96.svg","img/ic_avax_24.svg","img/ic_avax_30.svg","img/ic_avax_40.svg","img/ic_banxa.svg","img/ic_base_24.svg","img/ic_binance.svg","img/ic_binance_logo.svg","img/ic_bsc.svg","img/ic_bsc_96.svg","img/ic_btc.b_24.svg","img/ic_btc.b_40.svg","img/ic_btc_24.svg","img/ic_btc_40.svg","img/ic_bungee.png","img/ic_busd_24.svg","img/ic_buy_glp.svg","img/ic_bybit.svg","img/ic_cash.png","img/ic_cash.svg","img/ic_coingecko_16.svg","img/ic_coingecko_hover_16.svg","img/ic_convert_down.svg","img/ic_dai_24.svg","img/ic_dai_40.svg","img/ic_discord.svg","img/ic_dodo.svg","img/ic_eth_24.svg","img/ic_eth_40.svg","img/ic_firebird.png","img/ic_frax_24.svg","img/ic_frax_40.svg","img/ic_fuse_16.svg","img/ic_fuse_24.svg","img/ic_fuse_96.svg","img/ic_glp_24.svg","img/ic_glp_40.svg","img/ic_glp_custom.svg","img/ic_gmx.svg","img/ic_gmx_24.svg","img/ic_gmx_30.svg","img/ic_gmx_40.svg","img/ic_gmx_64.svg","img/ic_gmx_arbitrum.svg","img/ic_gmx_avax.svg","img/ic_gmx_big.svg","img/ic_gmx_footer.svg","img/ic_gmx_small.svg","img/ic_hop.svg","img/ic_huobi.svg","img/ic_info.svg","img/ic_kucoin.svg","img/ic_link_24.svg","img/ic_link_40.svg","img/ic_matcha.png","img/ic_menu_dots.svg","img/ic_meridian_icon.bmp","img/ic_meridian_icon.svg","img/ic_meridian_name.data","img/ic_meridian_name.jpg","img/ic_meridian_name.png","img/ic_meridian_name.svg","img/ic_metamask_16.svg","img/ic_metamask_hover_16.svg","img/ic_meter_24.svg","img/ic_meter_96.svg","img/ic_mim_24.svg","img/ic_mim_40.svg","img/ic_multiswap.svg","img/ic_o3.png","img/ic_odos.png","img/ic_olympus.svg","img/ic_olympus_arbitrum.svg","img/ic_omnidex_footer.png","img/ic_omnidex_footer2.png","img/ic_omnidex_logo.jpeg","img/ic_openocean.svg","img/ic_paraswap.svg","img/ic_selector_dropdowns.svg","img/ic_settings_24.svg","img/ic_sign in_16.svg","img/ic_slingshot.svg","img/ic_stats_big.svg","img/ic_synapse.svg","img/ic_taiko_16.svg","img/ic_taiko_24.svg","img/ic_taiko_96.svg","img/ic_tether_24.svg","img/ic_tlos_16.svg","img/ic_tlos_24.svg","img/ic_tlos_40.svg","img/ic_tlos_96.svg","img/ic_tokens.svg","img/ic_traderjoe.png","img/ic_transfer_avax.svg","img/ic_uni_24.svg","img/ic_uni_40.svg","img/ic_uni_arbitrum.svg","img/ic_usdc.e_24.svg","img/ic_usdc.e_40.svg","img/ic_usdc_24.svg","img/ic_usdc_40.svg","img/ic_usdm_24.svg","img/ic_usdm_40.svg","img/ic_usdt_24.svg","img/ic_usdt_40.svg","img/ic_wavax_24.svg","img/ic_wavax_40.svg","img/ic_wbtc_24.svg","img/ic_wbtc_40.svg","img/ic_weth_24.svg","img/ic_weth_40.svg","img/ic_wtlos_16.svg","img/ic_wtlos_24.svg","img/ic_wtlos_40.svg","img/ic_wtlos_96.svg","img/ic_yield_yak.png","img/lg_arbitrum.svg","img/logo_GMX.svg","img/logo_OmniDex.png","img/long.svg","img/metamask-text.svg","img/nansen_portfolio.svg","img/page-not-found.svg","img/position-share-bg.png","img/s1.png","img/s2.png","img/s3.png","img/s4.png","img/s5.png","img/s6.png","img/short.svg","img/swap.svg","img/trading.jpg","img/wallet-connect-text.svg","img/wave-01.png","img/wave-02.png","../ /^/.//.*//messages/.po$/ groupOptions: {} namespace object","config/localStorage.ts","config/env.ts","config/chains.ts","config/contracts.ts","config/backend.ts","config/tokens.ts","domain/tokens/utils.ts","lib/rpc/index.ts","lib/numbers.ts","lib/chains/index.ts","lib/legacy.ts","lib/dates.ts","components/Footer/constants.ts","components/ExternalLink/ExternalLink.tsx","components/Footer/Footer.tsx","lib/subgraph/utils.ts","config/subgraph.ts","lib/subgraph/clients.ts","lib/helperToast.ts","components/ToastifyDebug/ToastifyDebug.tsx","lib/contracts/transactionErrors.ts","lib/contracts/utils.ts","lib/wallets/index.tsx","lib/contracts/callContract.tsx","lib/contracts/contractFetcher.ts","domain/prices.ts","domain/legacy.ts","components/APRLabel/APRLabel.js","components/Header/HeaderLink.tsx","components/TokenCard/TokenCard.js","pages/Home/Home.js","lib/useLockBodyScroll.ts","components/Modal/Modal.js","components/Tooltip/Icon.js","components/Tooltip/Tooltip.js","components/PageSwitcher/PageSwitcher.tsx","components/TitleSection/TitleSection.js","pages/StakeMST/Helpers.ts","pages/StakeMST/FetchPrice.ts","components/SwitchNetworkModal/SwitchNetworkModal.tsx","components/StatsTooltip/StatsTooltipRow.tsx","config/tokenPriceEndpoints.ts","config/AprBaselineUsdm.ts","pages/StakeMST/USDMStakingRateGetter.js","components/Helpers/getBaseApr.js","pages/StakeMST/InterestRateGetter.ts","pages/StakeMST/StakeMST.js","domain/tokens/approveTokens.tsx","pages/StakeMST/StakeMstApp.js","lib/yields/mint.js","utils/Loader.js","lib/yields/yields.js","components/Yields/Mint.jsx","pages/Yields/Yields.js","components/TokenSwaps/ToggleContext.js","components/TokenSwaps/BaseTrade.js","components/TokenSwaps/TelosEVM.js","components/TokenSwaps/FuseTrade.js","pages/TokenSwaps/ThemeContext.js","pages/TokenSwaps/TradePage.js","components/Ecosystem/LogoCard/LogoCard.jsx","components/Ecosystem/Footer/EcoFooter.jsx","pages/Ecosystem/Ecosystem.js","components/Checkbox/Checkbox.js","config/events.ts","components/EventToast/AnnouncementIcon.js","components/EventToast/EventToast.js","components/EventToast/useEventToast.js","components/EventToast/EventToastContainer.js","components/Common/SEO.js","pages/PageNotFound/PageNotFound.js","pages/TermsAndConditions/TermsAndConditions.js","components/ModalViews/RedirectModal.js","lib/i18n.ts","components/AddressDropdown/AddressDropdown.tsx","components/Common/ConnectWalletButton.tsx","components/Common/Portal.js","components/Modal/ModalWithPortal.js","components/NetworkDropdown/LanguageModalContent.js","components/NetworkDropdown/NetworkDropdown.tsx","components/WalletDisplay/WalletDisplay.tsx","components/NetworkDropdown/LanguagePopupHome.tsx","components/Header/AppHeaderUser.tsx","components/Header/Header.tsx","components/Sidebar/SidebarConfig.tsx","components/Sidebar/Sidebar.tsx","lib/localStorage/index.ts","App/App.js","lib/useRouteQuery.ts","lib/useScrollToTop.ts","reportWebVitals.js","index.tsx"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","webpackAsyncContext","Promise","then","ids","t","SELECTED_NETWORK_LOCAL_STORAGE_KEY","WALLET_CONNECT_LOCALSTORAGE_KEY","SHOULD_EAGER_CONNECT_LOCALSTORAGE_KEY","CURRENT_PROVIDER_LOCALSTORAGE_KEY","LANGUAGE_LOCALSTORAGE_KEY","IS_TOUCH","window","isDevelopment","isProductionPreview","Boolean","localStorage","getItem","location","host","includes","isLocal","parseEther","ethers","utils","TELOS_TESTNET","TELOS_MAINNET","BASE_MAINNET","FUSE_MAINNET","METER_MAINNET","TAIKO_MAINNET","ARTELA_MAINNET","SUPPORTED_CHAIN_IDS","push","CHAIN_NAMES_MAP","GAS_PRICE_ADJUSTMENT_MAP","MAX_GAS_PRICE_MAP","constants","nativeTokenSymbol","wrappedTokenSymbol","defaultCollateralSymbol","defaultFlagOrdersEnabled","positionReaderPropsLength","v2","SWAP_ORDER_EXECUTION_GAS_FEE","INCREASE_ORDER_EXECUTION_GAS_FEE","DECREASE_ORDER_EXECUTION_GAS_FEE","ALCHEMY_WHITELISTED_DOMAINS","RPC_PROVIDERS","FALLBACK_PROVIDERS","NETWORK_METADATA","chainId","toString","chainName","launchTime","nativeCurrency","name","symbol","decimals","rpcUrls","blockExplorerUrls","CHAIN_ICONS","getConstant","key","getChainName","getChainIcon","size","getRpcUrl","sample","getExplorerUrl","AddressZero","CONTRACTS","DIA_ORACLE","MeridianMultiPoolStaking","MeridianUSDMStaking","MST","USDM","RewardReader","StakedGmxTracker","BonusGmxTracker","FeeGmxTracker","StakedGlpTracker","FeeGlpTracker","NATIVE_TOKEN","USDMStaking","MSTMAIN","UniswapGmxEthPool","Multicall","PRICE_FEED","METER_ORACLE","METER_TEST_ORACLE","getContract","BACKEND_URLS","default","getServerBaseUrl","document","hostname","fromLocalStorage","getServerUrl","path","TOKENS","address","isNative","isShortable","imageUrl","isWrapped","baseSymbol","isStable","ADDITIONAL_TOKENS","TOKENS_MAP","TLOS","coingecko","ETH","USDC","USDT","BTC","TOKENS_BY_SYMBOL_MAP","WRAPPED_TOKENS_MAP","NATIVE_TOKENS_MAP","CHAIN_IDS","j","length","tokens","concat","i","token","getProvider","library","provider","getSigner","providers","StaticJsonRpcProvider","getFallbackProvider","getFallbackRpcUrl","bigNumberify","n","BigNumber","from","console","error","expandDecimals","mul","pow","limitDecimals","amount","maxDecimals","amountStr","undefined","split","dotIndex","indexOf","substr","formatAmount","tokenDecimals","displayDecimals","useCommas","defaultValue","formatUnits","minDecimals","padEnd","padDecimals","x","parts","replace","join","numberWithCommas","formatKeyAmount","formatAmountFree","parseFloat","parseInt","trimZeroDecimals","parseValue","value","pValue","isNaN","parseUnits","useChainId","useWeb3React","chainIdFromLocalStorage","removeItem","PLACEHOLDER_ACCOUNT","Wallet","createRandom","BASIS_POINTS_DIVISOR","USD_DECIMALS","MST_DECIMALS","isHomeSite","process","REACT_APP_IS_HOME_SITE","shortenAddress","left","Math","floor","substring","getStakingData","stakingInfo","data","claimable","tokensPerInterval","averageStakedAmounts","cumulativeRewards","totalSupply","getProcessedData","balanceData","userTotalMstStaked","mstPrice","mstSupply","stakingData","EthPrice","constructor","mstBalance","mstBalanceUsd","div","userTotalMstStakedUsd","mstSupplyUsd","feeMstSupply","feeGmxTracker","feeMstSupplyUsd","feeMstTrackerAnnualRewardsUsd","mstSuperStakingApr","gt","getPageTitle","getHomeUrl","getAppBaseUrl","importImage","tokenImage","require","shouldShowRedirectModal","timestamp","expiryTime","Date","getTime","isValidTimestamp","now","FOOTER_LINKS","home","app","SOCIAL_LINKS","link","icon","twitterIcon","mediumIcon","githubIcon","telegramIcon","ExternalLink","href","children","className","classNames","cx","target","rel","Footer","showRedirectModal","redirectPopupTimestamp","isHome","src","logoImg","alt","platform","external","text","isAppLink","onClick","baseUrl","to","activeClassName","createClient","uri","ApolloClient","cache","InMemoryCache","SUBGRAPH_URLS","stats","referrals","chainLink","telosMainnetGraphClient","common","helperToast","content","opts","toast","dismiss","success","ToastifyDebug","props","useState","open","setOpen","old","NOT_ENOUGH_FUNDS","USER_DENIED","SLIPPAGE","RPC_ERROR","NETWORK_CHANGED","TX_ERROR_PATTERNS","msg","extractError","ex","message","entries","type","patterns","pattern","matchCode","matchMessage","setGasPrice","txnOpts","maxGasPrice","premium","getGasPrice","gasPrice","getFeeData","feeData","maxPriorityFeePerGas","maxFeePerGas","add","getGasLimit","contract","method","params","estimateGas","gasLimit","lt","injectedConnector","InjectedConnector","supportedChainIds","activateInjectedProvider","providerName","ethereum","isCoinbaseWallet","isMetaMask","find","setSelectedProvider","getInjectedConnector","getWalletConnectConnector","Number","WalletConnectConnector","rpc","qrcode","clearWalletConnectData","clearWalletLinkData","filter","startsWith","addNetwork","metadata","request","catch","switchNetwork","active","setItem","String","reload","chainIdHex","showUnsupportedNetworkToast","callContract","Array","isArray","res","txUrl","hash","sentMsg","setPendingTxns","hideSuccessMsg","successMsg","pendingTxn","pendingTxns","autoCloseToast","errorData","failMsg","originalError","autoClose","contractFetcher","contractInfo","additionalArgs","args","arg0","arg1","isAddress","contractCall","getContractCall","shouldCallFallback","handleFallback","reject","fallbackProvider","info","result","contractName","setTimeout","Contract","abi","callArgs","getTimezoneOffset","useUserStat","query","gql","setRes","useEffect","getGmxGraphClient","warn","userStat","useMstPrice","useSWR","fetcher","url","fetch","json","log","price","usd","whole","repeat","slice","updateMst","mutate","memoizedResult","useMemo","total","intervalId","setInterval","clearInterval","APRLabel","aum","label","rewardReaderAddress","readerAddress","vaultAddress","nativeTokenAddress","gmxAddress","bnGmxAddress","MeridianMultiPoolStakingAddress","bonusGmxTrackerAddress","feeGmxTrackerAddress","stakedGlpTrackerAddress","feeGlpTrackerAddress","glpManagerAddress","vesterAddresses","walletTokens","depositTokens","rewardTrackersForDepositBalances","rewardTrackersForStakingInfo","walletBalances","ReaderV2","depositBalances","aums","Token","GlpManager","vestingInfo","Vault","gmxSupplyUrl","balances","supplyData","getBalanceAndSupplyData","depositBalanceData","getDepositBalanceData","vestingData","pairAmount","vestedAmount","escrowedBalance","claimedAmounts","maxVestableAmount","averageStakedAmount","getVestingData","processedData","HeaderLink","isHomeLink","exact","isOnHomePage","pathname","TokenCard","changeNetwork","useCallback","network","BuyLink","gmxBigIcon","glpBigIcon","Home","arbitrumPositionStatsUrl","arbitrumTotalVolumeUrl","arbitrumTotalVolume","telosTotalUsersUrl","telosTotalUsers","telosVolume","total_volume","telosUsers","total_users","openInterest","arbitrumUserStats","uniqueCount","LaunchExchangeButton","tradingIcon","statsIcon","totaluserIcon","liquidityIcon","costIcon","simpleSwapIcon","TOUCH_MOVE_CONTAINER_CLASS_NAME","allowTouchMoveFn","el","body","parentElement","Modal","isVisible","setIsVisible","zIndex","onAfterOpen","disableBodyScrollLock","allowContentTouchMove","modalRef","useRef","ref","disableLock","current","disableBodyScroll","allowTouchMove","enableBodyScroll","clearAllBodyScrollLocks","useLockBodyScroll","close","keyCode","addEventListener","removeEventListener","motion","style","initial","animate","exit","variants","hidden","opacity","visible","transition","duration","overflow","position","fontSize","faBridge","faCircleNotch","faCheck","faCheckCircle","faCoins","faEllipsisH","faExclamationTriangle","faInfoCircle","faTimes","faTrash","faChartLine","faRedo","faHandshake","faHandHoldingDollar","faHistory","faChevronLeft","faChevronRight","faClipboard","faClipboardCheck","faUserCircle","faWallet","faExternalLinkAlt","faCog","faPlug","faExclamationCircle","faAngleUp","faAngleDoubleUp","faAngleDown","faAngleDoubleDown","faPen","faHandPaper","faHeartbeat","faSeedling","faBars","faQuestionCircle","getIcon","Icon","rest","Tooltip","setVisible","intervalCloseRef","intervalOpenRef","trigger","onMouseEnter","onMouseClick","onMouseLeave","disableHandleStyle","handleClassName","handle","renderContent","PageSwitcher","useLocation","activePage","setActivePage","handlePageChange","TitleSection","title","subTitle","shortSubTitle","getConnection","ContractAddress","RPC","RPCAsString","fetchPrice","endpoint","source","DIAPriceFeed","getValue","priceFeedContract","FusePriceFeed","MeterOracle","getAssetPrice","SwitchNetworkModal","currentChainId","targetChainId","targetPath","onClickPrimary","StatsTooltipRow","showDollar","v","TOKEN_PRICE_ENDPOINTS","Name","Symbol","PriceEndPoint","isStableCoin","NETWORK_TOKEN_ENDPOINTS","BASELINES","BASELINE_TIMESTAMP","BASELINE_NATIVE_SNAPSHOT","BASELINE_USDM_SNAPSHOT","getBaseline","getDeltas","Network","currentNativeSnapshot","currentUsdmSnapshot","changeInNativeSnapshot","sub","changeInUsdmSnapshot","changeInTimeStamp","calculateWeeklyChange","values","currentPtr","ptr","toNumber","oneWeekAgoPtr","currentValue","oneWeekAgoValue","calculateDailyChange","oneDayAgoPtr","oneDayAgoValue","getWeeklyBaseApr","rewardTokens","snapshots","currentRateIndex","tokenPrices","weeklyUsdPerMST","weeklyChange","tokenPrice","powerScale","estimatedBaseApr","getDailyBaseApr","dailyUsdPerMST","dailyChange","getRewardTokens","MSTStaking","fetchDailyRateSnapshots","getDailyRateSnapshots","InterestRate","dailyCalcMethod","currentTimestamp","priceEndPoints","getPriceKey","getSnapshotsKey","rewardToken","snapshotKeys","snapshotPromises","all","prices","snapshotResults","APR","getRateFromMultiplier","multiplier","calculateDaysFromNow","differenceInSeconds","ceil","daysFromNowString","daysFromNow","GetMaxAvailableToRedeem","userInvestments","maxAvailableToRedeem","forEach","pool","entry","vestingTimestamp","StakeModal","maxAmount","setValue","account","stakingTokenSymbol","stakingTokenAddress","farmAddress","stakingContractAddress","stakeMethodName","presetDurations","presetMultipliers","rewardsAvailable","isStaking","setIsStaking","isApproving","setIsApproving","selectedRowIndex","setSelectedRowIndex","tokenAllowance","needApproval","getError","eq","AprTableInModal","daysArray","index","checked","onChange","handleCheckboxChange","placeholder","tokenAddress","spender","onApproveSubmitted","getTokenInfo","infoTokens","includeMessage","approve","MaxUint256","finally","approveTokens","disabled","getPrimaryText","UnstakeModal","unstakingTokenSymbol","unstakeMethodName","isUnstaking","setIsUnstaking","ClaimModal","isClaiming","setIsClaiming","StakeV2","connectWallet","isStakeModalVisible","setIsStakeModalVisible","stakeModalTitle","setStakeModalTitle","stakeModalMaxAmount","setStakeModalMaxAmount","stakeValue","setStakeValue","setStakingTokenSymbol","setStakingTokenAddress","stakingFarmAddress","setStakingFarmAddress","setStakeMethodName","isUnstakeModalVisible","setIsUnstakeModalVisible","unstakeModalTitle","setUnstakeModalTitle","unstakeModalMaxAmount","setUnstakeModalMaxAmount","unstakeValue","setUnstakeValue","setUnstakingTokenSymbol","setUnstakeMethodName","setEstimatedBaseApr","isClaimModalVisible","setIsClaimModalVisible","isSwitchNetworkVisible","setIsSwitchNetworkVisible","setTargetChainId","setTargetPath","tokenSymbols","setRewardTokenSymbols","totalUserInvestment","setTotalUserInvestment","availableToRedeem","setAvailableToRedeem","totalTokensToUsd","setTotalTokensToUsd","averageWeightedApr","setAverageWeightedApr","tokensInUsd","setTokensInUsd","setTokenPrices","usdmStakingAprTlos","setUsdmStakingAprTlos","setUsdmStakingAprBase","networkTokenPrices","setNetworkTokenPrices","setStakingData","aprTimer","setAprTimer","otherChainAprData","setOtherChainAprData","mstAddress","mstPriceRef","hasOwnProperty","handleNetworkCheck","walletMSTBalance","userPendingRewards","refreshInterval","numberOfPools","networkTokenEndPoints","endpoints","fallbackData","nativeTokenPrices","networkTokenError","formattedData","reduce","acc","diaError","resultArray","numTokens","thisTokenUSDValue","getTokensToUsd","sum","tokenToUsd","getTotalTokensToUsd","symbols","fetchTlosAPR","apr","fetchBaseAPR","fetchFuseAPR","fetchMeterAPR","fetchTaikoAPR","getCurrentBaseApr","tlosAPR","baseAPR","fuseAPR","meterAPR","taikoAPR","fetchDataAndCalculateAPR","latestAPR","networks","filteredNetworks","otherChainData","currentBaseStakingApr","prevTimer","fetcherDependencies","poolIDs","_","tokenIndex","numOfTokens","divisor","fetchMultipliers","poolID","getPresetMultipliers","fetchDurations","pmerror","getPresetDurations","currentTlosStakingSnapshot","pderror","currentUsdmStakingOnTlos","telosDelta","usdmDeltaTelos","timeDeltaTelos","nativeTokenPrice","nativeRewards","rewardsUSD","annualRewardsPerStakeUSD","currentBaseStakingSnapshot","currentUsdmStakingOnBase","ethDelta","usdmDeltaBase","timeDeltaBase","AprTable","baseMstOnUsdm","isTelosNetwork","display","alignItems","marginLeft","backgroundColor","padding","borderRadius","fontWeight","color","marginRight","fetchUserInvestments","getUserInvestments","UIerror","newTotalInvestment","flat","tuple","totalWeightedValue","totalTuple0","poolData","tuple0","rateMultiplier","weightedValue","isZero","getAverageWeightedApr","PositionSummary","showStakeMstModal","showUnstakeMstModal","PositionsTable","poolIndex","tupleIndex","UserPendingRewardsTable","OtherNetworkAprRows","targetChainData","gmxSupplyUrlArbitrum","gmxSupply","updateGmxSupply","useTotalMstSupply","totalMstSupply","MeridianUSDMStakingAddressBase","MeridianSupertakingAddressBase","MeridianMultiPoolStakingAddressBase","MeridianMultiPoolStakingAddressFuse","MeridianMultiPoolStakingAddressMeter","MeridianMultiPoolStakingAddressTaiko","MeridianMultiPoolStakingAddressTelos","MeridianUSDMStakingAddressTelos","totalStakedMst","stakedMstOnUSDMBase","updatestakedMstOnUSDMBase","stakedSuperStakingBase","updatestakedSuperStakingBase","stakedMstBase","updatestakedMstBase","stakedMstFuse","updatestakedMstFuse","stakedMstMeter","updatestakedMstMeter","stakedMstTaiko","updatestakedMstTaiko","stakedMstTelos","updateStakedMstTelos","stakedMstOnUSDMTelos","updateStakedMstOnUSDMTelos","baseSuperStaking","base","fuse","meter","taiko","telos","telosMstOnUsdm","useTotalMstStaked","fuseMstStaked","taikoMstStaked","telosMultiStakingTotal","telosMstOnUSDMTotal","totalMstStaked","mstSupplyUrl","maxUnstakeableGmx","Stake","getMintData","setMintData","setIsLoading","mintData","updatedMintData","percentage","appPath","nonZeroMintData","item","sort","a","b","Loader","height","width","getUSDMData","setUSDMData","setETHMData","setUSDTData","setUSDCData","updatedUSDMData","formatPercentage","toFixed","total_deposit_yield","updatedETHMData","WETH","updatedUSDTData","updatedUSDCData","USDCe","SingleYield","avg","calculateScaledWidth","trim","findMaxPercentage","maxPercentage","round","YieldsCard","isLoading","USDMData","ETHData","USDTData","USDCData","Yields","ToggleContext","React","createContext","ToggleProvider","toggle","setToggle","Provider","BaseTrade","mstPriceUniswap","setMSTPriceUniswap","mstLiquidityUniswap","setMSTLiquidityUniswap","usdmPriceUniswap","setUSDMPriceUniswap","usdmLiquidityUniswap","setUSDMLiquidityUniswap","formatNumberWithCommas","number","toLocaleString","getMSTUniswapData","response","priceMST","pairs","priceUsd","liquidityMST","liquidity","formattedMSTLiquidity","getUSDMUniswapData","priceUSDM","liquidityUSDM","formattedUSDMLiquidity","BaseUSDMData","img","uniswapIMG","priceType","para","button","BaseMSTData","aerodromeIMG","useContext","htmlFor","role","switch","usdmPriceSwapsicle1","setUSDMPriceSwapsicle1","usdmPriceSwapsicle2","setUSDMPriceSwapsicle2","usdmLiquiditySwapsicle1","setUSDMLiquiditySwapsicle1","usdmLiquiditySwapsicle2","setUSDMLiquiditySwapsicle2","usdmPriceSymmetric","setUSDMPriceSymmetric","usdmLiquiditySymmetric","setUSDMLiquiditySymmetric","usdmPriceNewDex1","setUSDMPriceNewDex1","usdmPriceNewDex2","setUSDMPriceNewDex2","usdmLiquidityNewDex1","setUSDMLiquidityNewDex1","usdmLiquidityNewDex2","setUSDMLiquidityNewDex2","setMSTPriceSwapsicle","setMSTPriceSwapsicle2","setMSTLiquiditySwapsicle","setMSTLiquiditySwapsicle2","mstPriceSymmetric","setMSTPriceSymmetric","mstLiquiditySymmetric","setMSTLiquiditySymmetric","mstPriceNewDex1","setMSTPriceNewDex1","setMSTPriceNewDex2","mstLiquidityNewDex1","setMSTLiquidityNewDex1","setMSTLiquidityNewDex2","swapsiclePairs","pair","dexId","toLowerCase","newDexPairs","usdmWtlosPairSwapsicle","quoteToken","usdmUsdcPairSwapsicle","usdmWtlosPairNewDex","usdmUsdcPairNewDex","getUSDMSymmetricData","headers","JSON","stringify","responseData","latestUSDPrice","roundedPriceUSDM","totalLiquidity","getMSTData","mstWtlosPairSwapsicle","mstUsdcPairSwapsicle","mstWtlosPairNewDex","mstUsdcPairNewDex","getMSTSymmetricData","roundedPriceMST","image1","image2","image3","mstPriceVoltage","setMSTPriceVoltage","usdmPriceVoltage","setUSDMPriceVoltage","mstLiquidityVoltage","setMSTLiquidityVoltage","usdmLiquidityVoltage","setUSDMLiquidityVoltage","getUSDMVoltageData","ok","poolHourData","tvlUSD","USDMRatio","token0Price","priceFUSE","responseFUSE","dataFUSE","USDMPrice","getMSTVoltageData","MSTRatio","ThemeContext","ThemeProvider","isDarkMode","setIsDarkMode","storedTheme","toggleTheme","newMode","TradePage","islink","setIsLink","marginTop","TelosEVM","FuseTrade","handleClick","LogoCard","logoData","tags","tag","logo","tagline","description","desc","tutorialPath","AppPath","EcoFooter","Ecosystem","Checkbox","isChecked","setIsChecked","selected","homeEventsData","appEventsData","isActive","validTill","bodyText","buttons","newTab","xmlns","fill","stroke","viewBox","strokeLinecap","strokeLinejoin","strokeWidth","d","EventToast","event","useEventToast","useLocalStorage","visited","setVisited","isFuture","parse","custom","EventToastContainer","scrollY","useWindowScroll","y","breakpoint","createBreakpoint","XL","L","S","useBreakpoint","reverseOrder","gutter","containerClassName","containerStyle","top","right","toastOptions","Infinity","SEO","customMeta","meta","image","Helmet","property","PageNotFound","homeUrl","tradePageUrl","TermsAndConditions","RedirectPopupModal","redirectModalVisible","setRedirectModalVisible","appRedirectUrl","setRedirectPopupTimestamp","setShouldHideRedirectModal","shouldHideRedirectModal","locales","en","es","zh","ko","ja","pseudo","defaultLocale","isTestLanguage","locale","dynamicActivate","messages","i18n","load","activate","loadLocaleData","plurals","ru","fr","de","AddressDropdown","accountUrl","disconnectAccountAndCloseSettings","M","useCopyToClipboard","copyToClipboard","ensName","setENSName","JsonRpcProvider","lookupAddress","resolveENS","useENS","setProvider","rpcUrl","ready","initializeProvider","useJsonRpcProvider","Button","as","Items","Item","copy","externalLink","disconnect","ConnectWalletButton","imgSrc","Portal","root","createElement","appendChild","removeChild","createPortal","ModalWithPortal","LanguageModalContent","currentLanguage","checkedIcon","LANGUAGE_MODAL_KEY","NETWORK_MODAL_KEY","NetworkDropdown","activeModal","setActiveModal","small","NavIcons","selectorLabel","DesktopDropdown","modalName","getModalProps","NetworkModalContent","networkOptions","onNetworkSelect","openSettings","getModalContent","NavItems","NetworkMenuItems","option","handleNetworkSelect","networkIcon","language24Icon","settingsIcon","DisplayWalletBalances","nativeBalance","setNativeBalance","fetchNativeBalance","getBalance","balance","walletUSDMBalance","tokenBalances","header","WalletItem","DisplayWalletItems","LanguagePopupHome","isLanguageModalOpen","setIsLanguageModalOpen","NETWORK_OPTIONS","AppHeaderUser","setWalletModalVisible","showConnectionOptions","connectWalletImg","getAccountUrl","AnimatePresence","fadeVariants","Header","isDrawerVisible","setIsDrawerVisible","isNativeSelectorModalVisible","setIsNativeSelectorModalVisible","logoSmallImg","NetworksTypes","menuConfig","FaCoins","subMenu","networkId","imagePath","subSubMenu","FaHandshake","FaChartLine","FaExchangeAlt","FaSeedling","FaArchway","FaArrowAltCircleUp","FaDollarSign","FaRegChartBar","FaEllipsisH","Sidebar","isExpanded","setIsExpanded","activeSubMenu","setActiveSubMenu","activeSubSubMenu","setActiveSubSubMenu","sidebarVisible","setSidebarVisible","innerWidth","isLargeScreen","setIsLargeScreen","history","useHistory","overlay","handleResize","handleOutsideClick","contains","sidebarVisibility","toggleExpandOpen","isSmallScreen","handleItemClick","isInAppCall","newPath","hashPath","basePath","handleMenuItemClick","matchMedia","matches","handleArrowClick","subItem","subIndex","handleSubArrowClick","subSubItem","subSubIndex","useLocalStorageSerializeKey","getLibrary","Web3Provider","autoRefreshOnNetworkChange","Zoom","cssTransition","enter","appendPosition","collapse","collapseDuration","tlosTestnetWsProvider","WebSocketProvider","pollingInterval","tlosMainnetWsProvider","FullApp","connector","deactivate","activatingConnector","setActivatingConnector","triedEager","tried","setTried","shouldTryWalletConnect","rawData","connected","SyntaxError","currentProviderName","isAuthorized","useEagerConnect","suppress","injected","on","handleConnect","handleChainChanged","handleAccountsChanged","accounts","handleNetworkChanged","removeListener","useInactiveListener","UnsupportedChainIdError","useHandleUnsupportedNetwork","search","URLSearchParams","useRouteQuery","navigator","disconnectAccount","connectInjectedWallet","fn","errString","getInjectedHandler","userOnMobileDevice","test","userAgent","attemptActivateWallet","walletModalVisible","selectedToPage","setSelectedToPage","isSettingsVisible","setIsSettingsVisible","savedSlippageAmount","setSavedSlippageAmount","slippageAmount","setSlippageAmount","isPnlInLeverage","setIsPnlInLeverage","shouldDisableValidationForTesting","setShouldDisableValidationForTesting","showPnlAfterFees","setShowPnlAfterFees","savedIsPnlInLeverage","setSavedIsPnlInLeverage","savedShowPnlAfterFees","setSavedShowPnlAfterFees","savedShouldDisableValidationForTesting","setSavedShouldDisableValidationForTesting","checkPendingTxns","updatedPendingTxns","getTransactionReceipt","receipt","status","interval","slippage","limit","hideProgressBar","newestOnTop","closeOnClick","draggable","pauseOnHover","metamaskImg","hasCoinBaseWalletExtension","coinbaseImg","walletConnect","UserRejectedRequestErrorWalletConnect","getWalletConnectHandler","walletConnectImg","min","basisPoints","App","unlisten","listen","scrollTo","useScrollToTop","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","getElementById"],"mappings":"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B,0C,+BCAzC,OAAe,cAA0B,gD,+BCAzC,OAAe,cAA0B,0C,+BCAzC,OAAe,cAA0B,2C,+BCAzC,OAAe,cAA0B,2C,+BCAzC,OAAe,cAA0B,2C,+BCAzC,OAAe,cAA0B,mD,+BCAzC,OAAe,cAA0B,mD,+BCAzC,OAAe,cAA0B,mD,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,oC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,2C,+BCAzC,OAAe,cAA0B,kC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,uC,+BCAzC,OAAe,cAA0B,uC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,sW,+BCAf,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,oC,+BCAzC,OAAe,00D,+BCAf,OAAe,cAA0B,mC,+BCAzC,OAAe,cAA0B,2C,+BCAzC,OAAe,cAA0B,iD,+BCAzC,OAAe,cAA0B,2C,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,mC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,86C,+BCAf,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,yC,+BCAzC,OAAe,cAA0B,kC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,2C,+BCAzC,OAAe,cAA0B,uC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,yC,+BCAzC,OAAe,cAA0B,wC,+BCAzC,OAAe,cAA0B,kC,+BCAzC,OAAe,cAA0B,oC,+BCAzC,OAAe,cAA0B,mC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,knF,+BCAf,OAAe,cAA0B,wC,+BCAzC,OAAe,09W,+BCAf,OAAe,cAA0B,4C,+BCAzC,OAAe,cAA0B,6C,+BCAzC,OAAe,2oI,+BCAf,OAAe,koE,+BCAf,OAAe,cAA0B,4C,+BCAzC,OAAe,cAA0B,0C,+BCAzC,OAAe,cAA0B,gD,+BCAzC,OAAe,cAA0B,uC,+BCAzC,OAAe,cAA0B,uC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,wC,+BCAzC,OAAe,80C,+BCAf,OAAe,8wB,+BCAf,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,+C,+BCAzC,OAAe,cAA0B,6C,+BCAzC,OAAe,cAA0B,8C,+BCAzC,OAAe,cAA0B,4C,+BCAzC,OAAe,cAA0B,wC,+BCAzC,OAAe,cAA0B,uC,+BCAzC,OAAe,cAA0B,iD,+BCAzC,OAAe,cAA0B,0C,+BCAzC,OAAe,cAA0B,yC,+BCAzC,OAAe,cAA0B,wC,+BCAzC,OAAe,cAA0B,wC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,uC,+BCAzC,OAAe,cAA0B,uC,+BCAzC,OAAe,cAA0B,uC,+BCAzC,OAAe,cAA0B,wC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,88I,+BCAf,OAAe,cAA0B,4C,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,qC,+BCAzC,OAAe,cAA0B,2C,+BCAzC,OAAe,cAA0B,wC,+BCAzC,OAAe,cAA0B,wC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,uC,+BCAzC,OAAe,cAA0B,uC,+BCAzC,OAAe,cAA0B,sC,+BCAzC,OAAe,cAA0B,sC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","file":"static/js/main.536253bf.chunk.js","sourcesContent":["export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/ic_omnidex_footer.fd90a2dd.svg\";","export default __webpack_public_path__ + \"static/media/meridian.7b34e520.png\";","export default __webpack_public_path__ + \"static/media/Swapsicle.224bd9c9.png\";","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/logo_GMX_small.a4d9be56.svg\";","export default __webpack_public_path__ + \"static/media/Uniswap.1760b467.svg\";","export default __webpack_public_path__ + \"static/media/aerodrome.ad34f7be.svg\";","export default __webpack_public_path__ + \"static/media/coinbaseWallet.ae86a337.png\";","export default __webpack_public_path__ + \"static/media/glpLogo1.a26fd84e.svg\";","export default __webpack_public_path__ + \"static/media/ic_checked.ef61d0e2.svg\";","export default __webpack_public_path__ + \"static/media/ic_copy_16.fafdf331.svg\";","export default __webpack_public_path__ + \"static/media/ic_cost.b4a729d3.svg\";","export default __webpack_public_path__ + \"static/media/ic_github.dbd4de8a.svg\";","export default __webpack_public_path__ + \"static/media/ic_gmx_custom.55d4999d.svg\";","export default __webpack_public_path__ + \"static/media/ic_language24.ce951c62.svg\";","export default __webpack_public_path__ + \"static/media/ic_liquidity.505b3f30.svg\";","export default __webpack_public_path__ + \"static/media/ic_medium.f6051b2e.svg\";","export default __webpack_public_path__ + \"static/media/ic_new_link_16.5b7cb7bf.svg\";","export default __webpack_public_path__ + \"static/media/ic_settings_16.9d97766b.svg\";","export default __webpack_public_path__ + \"static/media/ic_sign_out_16.7516903b.svg\";","export default __webpack_public_path__ + \"static/media/ic_simpleswaps.2005009f.svg\";","export default __webpack_public_path__ + \"static/media/ic_stats.f0a18011.svg\";","export default __webpack_public_path__ + \"static/media/ic_telegram.af1a4a66.svg\";","export default __webpack_public_path__ + \"static/media/ic_totaluser.ae09b310.svg\";","export default __webpack_public_path__ + \"static/media/ic_trading.2c53815a.svg\";","export default __webpack_public_path__ + \"static/media/ic_twitter.9f35b403.svg\";","export default __webpack_public_path__ + \"static/media/ic_wallet_24.a19a6758.svg\";","export default __webpack_public_path__ + \"static/media/metamask.4b5d438a.png\";","export default __webpack_public_path__ + \"static/media/walletconnect-circle-blue.31c29967.svg\";","export default __webpack_public_path__ + \"static/media/ic_arbitrum_96.4c6d42bf.svg\";","export default __webpack_public_path__ + \"static/media/ic_avalanche_96.b6255c50.svg\";","export default \"data:image/png;base64,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\"","var map = {\n\t\"./Anyswap.png\": 287,\n\t\"./Anyswap.svg\": 288,\n\t\"./Artwork.svg\": 289,\n\t\"./Artwork_gmx.svg\": 290,\n\t\"./Banxa.png\": 291,\n\t\"./DROP_DOWN.svg\": 292,\n\t\"./Dex3.png\": 293,\n\t\"./Hop.png\": 294,\n\t\"./Hop.svg\": 295,\n\t\"./Hop_dark.png\": 296,\n\t\"./Logo_Meridian.png\": 297,\n\t\"./MeridianLogo.svg\": 298,\n\t\"./Swapsicle.png\": 148,\n\t\"./Symmetric.png\": 99,\n\t\"./Synapse.png\": 299,\n\t\"./Synapse.svg\": 300,\n\t\"./Uniswap.svg\": 169,\n\t\"./Voltage.png\": 149,\n\t\"./aerodrome.svg\": 170,\n\t\"./binance.png\": 301,\n\t\"./bitkeep.svg\": 302,\n\t\"./bscscan.png\": 303,\n\t\"./btn_big_arbitrum.png\": 304,\n\t\"./btn_big_avalanche.png\": 305,\n\t\"./btn_big_bsc.png\": 306,\n\t\"./btn_big_purchasegmx.png\": 307,\n\t\"./btn_big_purchasegmx.svg\": 308,\n\t\"./buy_gmx.svg\": 309,\n\t\"./buy_gmx_bond.svg\": 310,\n\t\"./buy_transfer_eth.svg\": 311,\n\t\"./coinbaseWallet.png\": 171,\n\t\"./coingecko.png\": 312,\n\t\"./cross.svg\": 313,\n\t\"./flag_en.svg\": 314,\n\t\"./flag_es.svg\": 315,\n\t\"./flag_fr.svg\": 316,\n\t\"./flag_ja.svg\": 317,\n\t\"./flag_ko.svg\": 318,\n\t\"./flag_ru.svg\": 319,\n\t\"./flag_zh.svg\": 320,\n\t\"./gateio.svg\": 321,\n\t\"./glpLogo1.svg\": 172,\n\t\"./gmx-logo-final-white-small.png\": 322,\n\t\"./gmx-logo-final-white.png\": 323,\n\t\"./gmx-logo-final.png\": 324,\n\t\"./gmx-logo-glow.png\": 325,\n\t\"./gmx-logo-with-name.svg\": 326,\n\t\"./gmx_logo.svg\": 327,\n\t\"./graphite-01.png\": 328,\n\t\"./ic-communityproject.svg\": 329,\n\t\"./ic_1inch.svg\": 330,\n\t\"./ic_across.svg\": 331,\n\t\"./ic_arbitrum_16.svg\": 332,\n\t\"./ic_arbitrum_24.svg\": 333,\n\t\"./ic_arbitrum_96.svg\": 222,\n\t\"./ic_arbitrum_hover_16.svg\": 334,\n\t\"./ic_arrowleft16.svg\": 335,\n\t\"./ic_arrowright16.svg\": 336,\n\t\"./ic_avalanche_16.svg\": 337,\n\t\"./ic_avalanche_24.svg\": 338,\n\t\"./ic_avalanche_96.svg\": 223,\n\t\"./ic_avalanche_testnet_16.svg\": 339,\n\t\"./ic_avalanche_testnet_24.svg\": 340,\n\t\"./ic_avalanche_testnet_96.svg\": 341,\n\t\"./ic_avax_24.svg\": 342,\n\t\"./ic_avax_30.svg\": 343,\n\t\"./ic_avax_40.svg\": 344,\n\t\"./ic_banxa.svg\": 345,\n\t\"./ic_base_24.svg\": 346,\n\t\"./ic_binance.svg\": 347,\n\t\"./ic_binance_logo.svg\": 348,\n\t\"./ic_bsc.svg\": 349,\n\t\"./ic_bsc_96.svg\": 350,\n\t\"./ic_btc.b_24.svg\": 351,\n\t\"./ic_btc.b_40.svg\": 352,\n\t\"./ic_btc_24.svg\": 353,\n\t\"./ic_btc_40.svg\": 354,\n\t\"./ic_bungee.png\": 355,\n\t\"./ic_busd_24.svg\": 356,\n\t\"./ic_buy_glp.svg\": 357,\n\t\"./ic_bybit.svg\": 358,\n\t\"./ic_cash.png\": 359,\n\t\"./ic_cash.svg\": 360,\n\t\"./ic_checked.svg\": 173,\n\t\"./ic_coingecko_16.svg\": 361,\n\t\"./ic_coingecko_hover_16.svg\": 362,\n\t\"./ic_convert_down.svg\": 363,\n\t\"./ic_copy_16.svg\": 174,\n\t\"./ic_cost.svg\": 175,\n\t\"./ic_dai_24.svg\": 364,\n\t\"./ic_dai_40.svg\": 365,\n\t\"./ic_discord.svg\": 366,\n\t\"./ic_dodo.svg\": 367,\n\t\"./ic_eth_24.svg\": 368,\n\t\"./ic_eth_40.svg\": 369,\n\t\"./ic_firebird.png\": 370,\n\t\"./ic_frax_24.svg\": 371,\n\t\"./ic_frax_40.svg\": 372,\n\t\"./ic_fuse_16.svg\": 373,\n\t\"./ic_fuse_24.svg\": 374,\n\t\"./ic_fuse_96.svg\": 375,\n\t\"./ic_github.svg\": 176,\n\t\"./ic_glp_24.svg\": 376,\n\t\"./ic_glp_40.svg\": 377,\n\t\"./ic_glp_custom.svg\": 378,\n\t\"./ic_gmx.svg\": 379,\n\t\"./ic_gmx_24.svg\": 380,\n\t\"./ic_gmx_30.svg\": 381,\n\t\"./ic_gmx_40.svg\": 382,\n\t\"./ic_gmx_64.svg\": 383,\n\t\"./ic_gmx_arbitrum.svg\": 384,\n\t\"./ic_gmx_avax.svg\": 385,\n\t\"./ic_gmx_big.svg\": 386,\n\t\"./ic_gmx_custom.svg\": 177,\n\t\"./ic_gmx_footer.svg\": 387,\n\t\"./ic_gmx_small.svg\": 388,\n\t\"./ic_hop.svg\": 389,\n\t\"./ic_huobi.svg\": 390,\n\t\"./ic_info.svg\": 391,\n\t\"./ic_kucoin.svg\": 392,\n\t\"./ic_language24.svg\": 178,\n\t\"./ic_link_24.svg\": 393,\n\t\"./ic_link_40.svg\": 394,\n\t\"./ic_liquidity.svg\": 179,\n\t\"./ic_matcha.png\": 395,\n\t\"./ic_medium.svg\": 180,\n\t\"./ic_menu_dots.svg\": 396,\n\t\"./ic_meridian_icon.bmp\": 397,\n\t\"./ic_meridian_icon.svg\": 398,\n\t\"./ic_meridian_name.data\": 399,\n\t\"./ic_meridian_name.jpg\": 400,\n\t\"./ic_meridian_name.png\": 401,\n\t\"./ic_meridian_name.svg\": 402,\n\t\"./ic_metamask_16.svg\": 403,\n\t\"./ic_metamask_hover_16.svg\": 404,\n\t\"./ic_meter_24.svg\": 405,\n\t\"./ic_meter_96.svg\": 406,\n\t\"./ic_mim_24.svg\": 407,\n\t\"./ic_mim_40.svg\": 408,\n\t\"./ic_multiswap.svg\": 409,\n\t\"./ic_new_link_16.svg\": 181,\n\t\"./ic_o3.png\": 410,\n\t\"./ic_odos.png\": 411,\n\t\"./ic_olympus.svg\": 412,\n\t\"./ic_olympus_arbitrum.svg\": 413,\n\t\"./ic_omnidex_footer.png\": 414,\n\t\"./ic_omnidex_footer.svg\": 116,\n\t\"./ic_omnidex_footer2.png\": 415,\n\t\"./ic_omnidex_logo.jpeg\": 416,\n\t\"./ic_openocean.svg\": 417,\n\t\"./ic_paraswap.svg\": 418,\n\t\"./ic_selector_dropdowns.svg\": 419,\n\t\"./ic_settings_16.svg\": 182,\n\t\"./ic_settings_24.svg\": 420,\n\t\"./ic_sign in_16.svg\": 421,\n\t\"./ic_sign_out_16.svg\": 183,\n\t\"./ic_simpleswaps.svg\": 184,\n\t\"./ic_slingshot.svg\": 422,\n\t\"./ic_stats.svg\": 185,\n\t\"./ic_stats_big.svg\": 423,\n\t\"./ic_synapse.svg\": 424,\n\t\"./ic_taiko_16.svg\": 425,\n\t\"./ic_taiko_24.svg\": 426,\n\t\"./ic_taiko_96.svg\": 427,\n\t\"./ic_telegram.svg\": 186,\n\t\"./ic_tether_24.svg\": 428,\n\t\"./ic_tlos_16.svg\": 429,\n\t\"./ic_tlos_24.svg\": 430,\n\t\"./ic_tlos_40.svg\": 431,\n\t\"./ic_tlos_96.svg\": 432,\n\t\"./ic_tokens.svg\": 433,\n\t\"./ic_totaluser.svg\": 187,\n\t\"./ic_traderjoe.png\": 434,\n\t\"./ic_trading.svg\": 188,\n\t\"./ic_transfer_avax.svg\": 435,\n\t\"./ic_twitter.svg\": 189,\n\t\"./ic_uni_24.svg\": 436,\n\t\"./ic_uni_40.svg\": 437,\n\t\"./ic_uni_arbitrum.svg\": 438,\n\t\"./ic_usdc.e_24.svg\": 439,\n\t\"./ic_usdc.e_40.svg\": 440,\n\t\"./ic_usdc_24.svg\": 441,\n\t\"./ic_usdc_40.svg\": 442,\n\t\"./ic_usdm_24.svg\": 443,\n\t\"./ic_usdm_40.svg\": 444,\n\t\"./ic_usdt_24.svg\": 445,\n\t\"./ic_usdt_40.svg\": 446,\n\t\"./ic_wallet_24.svg\": 190,\n\t\"./ic_wavax_24.svg\": 447,\n\t\"./ic_wavax_40.svg\": 448,\n\t\"./ic_wbtc_24.svg\": 449,\n\t\"./ic_wbtc_40.svg\": 450,\n\t\"./ic_weth_24.svg\": 451,\n\t\"./ic_weth_40.svg\": 452,\n\t\"./ic_wtlos_16.svg\": 453,\n\t\"./ic_wtlos_24.svg\": 454,\n\t\"./ic_wtlos_40.svg\": 455,\n\t\"./ic_wtlos_96.svg\": 456,\n\t\"./ic_yield_yak.png\": 457,\n\t\"./lg_arbitrum.svg\": 458,\n\t\"./logo_GMX.svg\": 459,\n\t\"./logo_GMX_small.svg\": 150,\n\t\"./logo_OmniDex.png\": 460,\n\t\"./long.svg\": 461,\n\t\"./meridian.png\": 129,\n\t\"./metamask-text.svg\": 462,\n\t\"./metamask.png\": 191,\n\t\"./nansen_portfolio.svg\": 463,\n\t\"./page-not-found.svg\": 464,\n\t\"./position-share-bg.png\": 465,\n\t\"./s1.png\": 466,\n\t\"./s2.png\": 467,\n\t\"./s3.png\": 468,\n\t\"./s4.png\": 469,\n\t\"./s5.png\": 470,\n\t\"./s6.png\": 471,\n\t\"./shape.png\": 224,\n\t\"./short.svg\": 472,\n\t\"./swap.svg\": 473,\n\t\"./trading.jpg\": 474,\n\t\"./wallet-connect-text.svg\": 475,\n\t\"./walletconnect-circle-blue.svg\": 192,\n\t\"./wave-01.png\": 476,\n\t\"./wave-02.png\": 477\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 286;","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQgAAAAsCAMAAACuYtZZAAAAZlBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+Vn2moAAAAInRSTlMABhQdEgsKKUeEstIZdbP/wlfRwTjgpJRm8fDhhaNlk3ZW+c569wAAAsRJREFUeAHs0AEBwEAMAjFaCv4lbz7+IiHSrJ+3I40vfVzOo72it3JaxHLxI4IIIogggggiiCDia9cMdx5FwSj8aw84Ug4qCoL96t7/Te68YL7GjrPpn0nsxCepLXrA8IQ3NoY/IULp5keLJ0YbHKM1/gfd3PQni7Ak6b6bXU9y8DigIz1+hx9JsvefKwITyfBsVCIOgrPkjlGp7WDiPJqPFWF6kvHpISgox6R+DXKyI35DpK6LJn6oCPEwW/rNw6bEZC4Hc+0iu/Irmttw7wDdKKB8bSKwaDRPF6bpANUM96/aTT2GR3dOEeLBY9p7ABY6vDJkGJakG1N24krVdp+h5qRRaceyNPptgfg0O8dBuiVKt/spRbTiAa8esP4qQjFIxABwnMq85GO2K3Hm+PBVogcCqWp8zAaIMrKTHAL1CUVE8sgDJk7YU+fXlYgrOiJVneBaxjBrS44d4LkC41SOFtClergALkPI7oQiJoYjD5HUeGFMzU/qGi9T0ZKZ+1IZFRMzY5mpZ2ctvLTMfWQaiogAwY4nFOG4HHuY8ILnhtqJCFSlMryvKnIv57DOWGlWKph+Dstii4h6r8BTiggvHnQ88iCBTv8kct2JUAylMtyIgsvirOstFKNrJdV9l4atkTOWRmRSOw9YORx5QHIo5HEnAjaVylhrf5WsZKy0WivSYkmtRQQ9RFM4oQiTmW76q3/WReChh/h8sPqdiI51Yi1/3L4eafZ1DFOOClBz/69+sIiQe93SbE4oAj5TmOOzWHj0pLc0KChOOxHI9EXpMpN0ul5pZWi2pZFl+LkHnJOMUyf9Z7m0bIP6blNY8D59xoZROETV88Wf/5T3Eb6dVm3wPp4r3sS5v/bFjL83KRtcIlRL6/EuYfkbRFzvLC8Rl4hLxCXiEnGJuET8A+HaTFa3F17bC68Np9uG02sL8rYF+T+idSlyqmiqtwAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/Anyswap.491d1f32.svg\";","export default __webpack_public_path__ + \"static/media/Artwork.a2d41b8c.svg\";","export default __webpack_public_path__ + \"static/media/Artwork_gmx.cc61d732.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAAoCAMAAABO8gGqAAABcVBMVEUAAAAoKDwnKTsnKTsnKTuGh5HJyc6urrWFhpA1Nkehoqrx8vO7vMF4eoVCRFRrbHhQUWARbooBqMcRcojKys////+vr7ZdX2zW19ry8vMUZIIBo8cBqMYBrMUUbYCTlJ0iN00BnsgAoscArMUDqbwiO0zl5ee8vcLX2NsNd50Bp8YBrcYAscQPgpHk5OYeRF8AmcgAo8cUaYEBssUAtsMdTl0Gh7gBmckPdpMPe5IBtsQIn6mgoalcXmtqa3gWVnoBlcoAmckDmMAlMUQiOUwDqr0Bu8MYYm4lL0QDicIBlMoAu8MDtrolM0MSYI0Bj8oFi7clMkQFpbMAv8EUd34iNU0Bi8sBkMsbTGgZXm8AwMIAxMEiPUwKb6gBi8wLeqcKl6EAv8IBxcEMl5YbRWkBhs0gPVYgRFUBwMIAycAdUlwGeLwBhswRY4wPh48Fuq8UVoQBgs0Azr8YaWwKbKkBzsAKqZ4ZS3IDfcQCxLcbXmRL8BeXAAAABHRSTlMAM7D2JaXEwgAAAp1JREFUeAHszjEBADAQArF7wL/myigDURA4OaWsg3OK+VCqCaeaSbkFF/xswQUfa2XRJa8OxNFNYF6gvUkz7u7u7u7u7m6f/1UqZArW/9wNhZ26kd+JZWvy/uMsjOPGQg8c247rOmHblrwm4a8UQ+K2HUswIp3JGhL0BOEmGRGHBzm6FYA29IXwUBCe5eMgUlAVQKUpLCouKTUvKFyaBO4KwCdBSSoqyMrgWV7wcUGK/VFeUZmpqq4xJej4SLIWSlpSIbGjgm6KBJE6eGgxVo/TSzRUFDU2NbeYEvRpUT39OCE7h9sKpJVHBblU8x0hh0a0tVd0dFZ1dfcYFrRCgp6sy6QRCeb0liNBligQwoXndSxEb19FPxtoHhwyJDg8goy6lAofNxyH7mUk6Ftqy5Eg1pJ6zoix8YnJKTY90z07ZzokQvepVa5xyg0mRs6hQ4KIpdJDzC8s9hXCtXRwaXnFtGDeX9MCHryNkaD6Oh4VrBcYFGJ1bXxdXjc2Z7e2jQjWlyk8lAC4q1v6+IgEVSjCgjmBJJlmZ3dvcR+rg6XDo2MzIaG6LGhaS/3zSTAIBaaJFrhePkuxgJPTtbOgPL+4vDIqWKYap1CGUhoPCbIUPBBaEM+SWu4Livv1ze7eLVPc3R89PBoQ1MvDW9UMetifpF1OgtKJBFPBCWIJPdHs6fn0hWleLx/eDAi6tgK6iYQ2COOQIBBHQT0iNb85HbD3j2fYg30VcBY3D8IefPj8MprieNAsikeC2sbTAXboRJG5+v54Pl0bn5BncVf37MXlw8/vPwrWkUdBXQrXrVZEKZDa8DDFyLAO92r0RCmA6/8rr0iFhKCWNjAEgWmwsmq0RY0XjDpw1IGjDhx14KAfwBz0Q8CDfhB90E9DAACtALoxSNWoNwAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/DROP_DOWN.ef525fad.svg\";","export default __webpack_public_path__ + \"static/media/Dex3.01ad6eb5.png\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQgAAAAsCAYAAACZvCZrAAAFLElEQVR4Ae3aBWwcRxTG8QjKQqsUEtOJpTJzw+U2zMmGmZlJVIYwYznMya0ZjslU58Jo2Nu43L7Os2ej7eiMMt+30s8ws+a7f2Zn044PIrpbeFDonPAA4EHhbnsceDBJeEC4P2EBwAOyBZ0rIiFrkWSdAAAgm/BgO1kKdeUAAFhJdJaBUCYBABAIAKhzIAAAEAgAQCAAAIEAAAQCABAIAEAg8tcEHIExrqhPc/ui26Pt78wBAAIRmRXs4h3pIe9wH3lGBLa30V80AAJx6aszT0dXHFt+bslxZ+H841Q49xTlzzpDeTOcFJmWHM2dlr4/PD1zBq8a7qwgluU7vMP95B4cINfAMLlGFfbm8QbmELoIVa1Q2qvzANCAgbjyyekuRYuPUNHCY1Q4/wQVzLHioFNkajKFJ6dRaEI6BcdlkX9MDvlHe5zBCcGR/LHuoSE9R8Qhu18eZfYuKIuuvdnQT9QVVHl0qWK+izoP0IAQiPOrTmpFC49TwTyOw2nKm3mW8qaLOExJqYhDcEKGiEO2CEMO+TQ3eYd7yTMsQK7BQZ9reO7MrL4ch0JKf7+I0j88vx+BgDYGlxiFi07PLFygr8ifp888tyKzS8ESV5eCha4ukRkuLTzR9YV/tMvvG+khD8dhqIjDoBDl9I9QVp98yvyI43CO0t45Tym9LlJG72saAgEJBpuUvOfg00IrcgaGjOz+uZRZEYdfKO09jsMFSu51iZJ7XKWzXa6VucbecrSAQIwU9gtOYXu8c+TYcuV8thz7GoBA1ENgftSR1a/gQMaHHIcopb4t4tDzEundOQ7X6czrt4SSA80YiPaCT46fF3T5mo/98T6/7Xxd4iMqPI0HGyR8IMx9W3sbO74pMw/+UOt/+dP7np+Z+vZFEYfLIg7X6OyblXE49UoJnXzJoAYOhE9wxuGLEwinHFPvqsyU4yvifH6/YP/ZOQyG/Fx4wAECEdvxDZk719bpCZH24TVN78ZxuEGnXyumUy+X0skXY3TipdsNvYLwC3ocfiUQDiUCqgNCWQ0rFHUOqwjAJYa5Y+15EQiK7V6/oi4fl/xOsXb6NV41lJKza7l2ppvZO7yC2jfTJUbvGs6fqczLz48N0LgAgeDLitjezSPN3eu/4FUEu/3Tzjo9KU6/VrrjxAsmnXih/EAz3+acWcP5vesRCA0POEjcQFgrB46DZefasl/376n10ppXDMeeLT9/9KnfKX3gH45mDEQXZf9B9YWcdyifv31NMQFIvEDk6O1tYVCVmfs2abVeRfT4q8vhx/887xxIzRkIdl6Iqk96+X6ZoKufv4o9C6dg4HYnJPQKIrZjrd+KgrqS4PfN3es+55DU5XM2cyB6225TjpRzM2QcDOFp9fPbboF+JDnl2Ew82CChA8GXEhyD6vAt0NiejTN4v6IVBMIa99P/D12Jg/r5z9vONay9BwDc5ty7cYUSBUNZSdjfdpp7NnzOG5vGd9u6sPLvxNt7NizncQ5JC/pFta8yLvE3KR3S/QAIhE1sp7zUkMx9WzTewJTv14m1wdmiKYEAQCBquNSwrxSMnet28DhvVJoyHvb5qt43dnxt8KVIGwoEAALBYns3zLQ/4dX/L1Exv3PdAXVlwe/zOM+3ojgwzbqrAYBA1IK5a50uVwa2SwUAQCDkSqFyRbDWj180AAIBAAgEACAQANDwEAgAQCAAAIEAAATiAdsgAMADViAeFJKsCQAA2YQHORB3cynkAFYSAFg5JMkm3N2ODxmJB3kQABLeg1Yc/gOptOvB5Z4VkgAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/Hop.4b77c9e3.svg\";","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/Logo_Meridian.d285fbb5.png\";","export default __webpack_public_path__ + \"static/media/MeridianLogo.f496c829.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQgAAAAsCAMAAACuYtZZAAABmFBMVEUAAAD///////////////////////+PcOZ/UON5R+KNT+iFQeWSYOi4hfWIP+aRP+iIP+WUP+ibPeqSPOiiauz///////////////95VON4U+O3N/C1LO9+WOL///////9yS+F4SeO/JvK+IvF4SOP///////////////9+WOWHVeXRQPbKHvTRO/b///////////+pOOyxKu6+KfG7JvCxKu+wRPH///////////////////////////////////+qL+21J+/CIvLTS/PCIPK2J++sMuz///////////+eT+2iOOu3QfG8MPDNQPbUH/beGff1Zv/gGPjVIfXNNvS+MvOiNuv///////96SOKHQeaZQ+noMvrvDfv3A/3vC/vmRPmHP+V6R+J7SOKIQuaXQefvDfz3Bf2ZQeehNuuzPu27MPDUHfbeG/fTIfWiNuurMuy2J/DBIPGtQO2wKu68KPGwKe7NKvXKHvR3SOJ4SOJ3UuK/SfG0Ku+7QfF7V+OUPuidPeqIQOaRPueQP+eQT+iFQOV6R+MNOs0rAAAAhnRSTlMABhQdEgsKKXb/V/84Gf+z/7OF4SkpZYRWdnVmwVeT////wv//lIU4s1dXOMI44MLSdv+U0v9H4dFHV6PBGbJ10v/gKf//o/DxZkekR3Y4lIUZk4VHZrN2pPHwdjiz/8Ip8fDS4Xaz4XazV3WUhYWkpP//V/+z/2bB//+FOMJHZrKF/8KzVzMrutwAAANDSURBVHgB7NDFAQRBCERRfHxa8091PYK9Ur8Fzo+IRdMnTMRqHslzUyaxQGFC6oHClfQ90f8QgAAEIACxAOLTuq2AeLcfOyDO67dcZ2qI8y6/rdQzM8TV+m/rYz65LYvt9nkgju7mDWSXp2Q5JdsfxkqscmunzMzMzPjqf4+isrv3iQq6yZzfQlf4W5gZZhkrYRHlFRoqqyo1VVckZGuQmlm6ImrrNNQ31GtqrP0ZtZDbYGeQl6yIpmYNLa1tmpqbfkYdV3WeU9JnxF9//6Pp3//+T45mfdUJDsJkRDkTmMlEPjClqhj59g4iYcqOIK8QmBnkDSiW24MalnoRnV3dPQp6evv6k6MW5mWRBFrUOdmY8ui6GMYF6ccUhQyAox+5HvoSwMYsEaiy50ZYSLeIgcGh4ZHRMYDxicmp6aGZgaSodBHbDUmYdYAGOQsCURBxGn4OgEUZIk+SrTmAjEcrhypBJADkHLIUi5hfWFT90vLK6pqixfWNpLCYi1AtiwINzUL2tjZcF8C2iTIOiWCEcxgXHEk5pqyRzGguxSI2t7aLInZ2d5YU7W1tQnKz52jJS5p4x6NpL7yJANNH9H0E4BFQy6GI/8J8hw1quwTUQjfdW2P/4HDq6Bhg/Phk6vDgNGlrSCFVP0urYQ6ZmmOB4k2EhXOcW1kSoU9VqjHuIgaStourWiblh+XZ+YU+LC/Oz5LXAs7q8c2qDxayLyL0JiERqI0x0EtjDgooFNss5SIur641Xd9cJkcjX1LH1ZA8h3bGFxE8BhYqEVxfKhBliHwXZBQULfIUi6hu1nB7d6upufpnNIehWWa2ozruCoizX0W4oSGMMFIisEYYvjpQYxI1WKBAYIiO0JNpfmLf/3hiP9QmZIWLiBGXxDJC9lWEpKrFkdFFmkXM5qjCI4ooj/F3OCfT/I54fNTw9Pyi6fXxl0vjnRwvwRT9K54R7H3EjL2T/WdDoRve0AhlNTbwEmGOJZ42opr8UB6YaWqGslqaCA7MqFuLuxuw4QmIkTJUJ2ruoYEns3vqD/XB29a2VjA9OpzfPjqcPzrBgxWMBsRoQIwGxGhAjAYEK4geXUwGXV44urwQuuB0dMEpdAny6BJkAMRHfxzYlb9eAAAAAElFTkSuQmCC\"","export default __webpack_public_path__ + \"static/media/Synapse.4974674c.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQgAAAAsCAMAAACuYtZZAAAAn1BMVEUAAAD////////////////////////1vjzzuzPzui/yvDTyujD////////////////2xE3/////////////////1nrzuzH////////////////zvTb1wELzvDL0wEbyvDb////////////////////////0uzDzuzHzuy/////////////////////////////0vDLyujD////////1wD3k7xDPAAAANXRSTlMABhQdEgsKZqT/o/EpRzgZOIX/wcIZ0nbx4JSEScJFiVeEk6NlsvbR8vDS4dFmpLPB8FZ1ZcrSjpcAAAKDSURBVHgB7NABAcBQFAFAD/SPvPX4LsIBRz2PB5ycPi7Wge7UhNJpBHV+i1jEIr527aipUR8IAPjTP4KSpGxigaoK0P49AFDv7vt/ttvNmpnrVfrgE7TZmcBOlIf8Jlkk5hsQNwHCRRTfBgjnEKNEgCAHkrhyCHJgieuGYAeWuGYIdri7uTsjkUgKRamW6kIh2GEjNmckUnBh0ECCvUyI+y07CJbY3n8NkUkps7wQQtndRUKQBDuQxIwDQki67UBdao14eESJpw1ebpFg84SX55dZiJJulWtJbWopKGRtqoTqSJXIxlSaOxtTl8LF/mDqZOkQD/H/jzwtXuNXngzPP+KXOYhDroWAFNuh7WwONNQGOttTJqEBa6HVrrPHzgYzPbifj0uGIIeYJdAhZgl0iE8lUhiMMUWOHAxBF91bGv6EfbaljLQUpK6kYOdIwzf0jJ5ArgRiy3VyHqKz1vZQe4iee+nFqt2YE4RwVdSiTmEFxbRjF4z8bS1LY8sO55fG6BCoTR5ClAeAwoBEiPETQvPoKTIYDEVbrKFYvlOxjKhYvp8vlqKzBMGNIUqwaZp2DkIyhJ8GfipxLByC68PH5+vzg+vEPIQ9gbAdZdkRhOBFIpRCp9KnS4egOkkS5MAVcx5CwXQCMVA2HENMrXuftpPQueEH01X8iU0S7BBHMzOiqaqqafPkGIJaJX8aOIZI8vaX3Bf02yOYvdy3vV48hJf47R3mvzXyt0T8CyF2AGAzGP+GEMpSr1sOZY/ppFf2GR6Jb4T6cpRS+NBqdRszUdiq8w5h89Y7hO18cggQ4R88sxEgAkSACBABIkD855JwmCwcL+Tjhf7AaThwGo4g8xHkP7gaLtKObnJaAAAAAElFTkSuQmCC\"","export default __webpack_public_path__ + \"static/media/bitkeep.8f402cf3.svg\";","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/btn_big_arbitrum.ff6ad480.png\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAf8AAAB/CAMAAADW6DvgAAABF1BMVEUbIDIeITUbHDAXGCwhGi2HLjhhJjNhJzNOIzJPIzI8HzBYJjNrKDRqKDRYJTM7Hy+QMDhGITGsNTwqHC51KjWaMTqPMDkzHi8eIDYbHDBFITB0KjYeITaiMzt+LDceITajMzt9LDdCIDCZMTo4HzA+IDBLKDmBMT15LzuuOD+TND05JjhRIzJyKjVwKjU2Hi+RMDgyHi8oIzdSIzJUKTp7LDYjGy5PJDKeMjuELThAIDBjJjSbMjqKLzg5HzBUJDJ5LDYlGy5hJzSSMDkfGSxqKDUpHC5EITEnGy5VJDMcGS02HS9DIDFAIDFFITFDIDAsHC4eITYcHzMaGy8TFiMeITUAAAASFiIcHzJlLDowJDduLjpCJjgHX8VeAAAAWXRSTlM4+O////////////////////////////+18P//+f/////////////////////////////////////////////////////////////////////6vvJR+SRTwHfs7R4AAA1sSURBVHgB7d2Hmuo6lgVgute2jKRNkLYoTcPgQ01NzjnnnKdzvO//HAOc2+jjkGRjwFT5vzmHtSwkWTaDwTe+iZOowJYqkY2GWhP2KIMvkLGsRuMJnf9Hm6lDiwq/UeBGRDOPBfUwGgh+bfZCuEY08ZvfGPzCt3Ca1vhMOCLL3DrCl5zBUWLUyRZYBVpMI54i/yRa5iHdOn+wnzmYqcGVvjX4xcx/OWszwldacIQxOCM6xVwOJ0gAWr6Uy4rQKpvyv6WoeDRHJoUrKEW4zuATTiOFrawhIFobT/4hJOdbELFFL36N0C6aeu9XEXdgFJcTXCYa1xB2N8zfCoCsISAq5doouXFKcTmfvPgNg5aRVZZwJ+SUGkecZwyuY4LcLH/GPlERR8hY6TYHOXKV31J4dqKVGgpOU4RrqZJuk390+JJTdBB+sNT6JCfl//zEspoTjmNcT8IQtChepeX8FQ4RGyQ0rlhuMMkhv7ESvBfR8miCI1SLE1tvkO+XLuZPFse4INiiYQjmJpPcuJxN1/E7vCtGqcMpYWhzZfvSav5acJRUJUDD10ITcIv8zcwCxuD9Icf7U8KocA2aTCbjclS8+c+Q7Zd/JeVfOzR+e5kpQdJq/noa8Y6R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\"","export default __webpack_public_path__ + \"static/media/btn_big_bsc.5e5ec82b.png\";","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/btn_big_purchasegmx.52c66104.svg\";","export default __webpack_public_path__ + \"static/media/buy_gmx.618eb538.svg\";","export default __webpack_public_path__ + \"static/media/buy_gmx_bond.67f59201.svg\";","export default __webpack_public_path__ + \"static/media/buy_transfer_eth.fd9264bc.svg\";","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/cross.4f70d802.svg\";","export default __webpack_public_path__ + \"static/media/flag_en.ad3aa4f8.svg\";","export default __webpack_public_path__ + \"static/media/flag_es.284fc0d7.svg\";","export default __webpack_public_path__ + \"static/media/flag_fr.d7acb86a.svg\";","export default __webpack_public_path__ + \"static/media/flag_ja.fdbc8bce.svg\";","export default __webpack_public_path__ + \"static/media/flag_ko.e814d54a.svg\";","export default __webpack_public_path__ + \"static/media/flag_ru.c789ea20.svg\";","export default __webpack_public_path__ + \"static/media/flag_zh.814b7a34.svg\";","export default __webpack_public_path__ + \"static/media/gateio.14235216.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABPCAQAAAC3gKgqAAADyUlEQVR4Ae3BfWhVdQDH4e/Z3Uvb2lZukS5sOEI3UHS95xbBqg2iQmcvpCRZZClYkBoWaAvpD0ncHxVCFjE0iyE6eyFqK6K3RRTaiy1ptaXljDnL29h2t7v7iZGeTuuen9vd7r3nynke+Xw+n8/n800EWToXUMKrVCnVkcELwPsUKbWxlH5GbcZS6mI23/OPk9QqVZHNTv7VxiVKTawkhFMDAaUeKujkv4LUKdWQTzP/9zWlSi2sI0w0O8hU6qCSbqIbYLlSBYW04O4w5UoFWNQTwWQ3OfI+aujFbIhV8jqKaePsuqiQlxGggfHZT768iyX8xfiMsF5eRSnfMn7dVMmLyOJlJqaFafIe7mOQiYnwFJa8hXl0MHG91MhLyKWJ2LRRLO/gEYaJ1TYC8gau5iixC7JIXsAFvI1ZK3sxOcAsJR9PEMGki/mUcBCTF8lUcnEDv2MyxCpJoo4g7vpZqmTiIj7EbDc5kkSABkzaKVOykMYzmP1AuU6jmM8x2UW2koNb+AOTAe6VA7WcxN0QDysZmMkXmO0gUw5YbMakkwVKNNJ5DrODzNIYFPEBJs3kKbG4iz5MgixWFFzPcdyFeUyJxGV8h9lWAoqKxxnB3TEWKlE4j0bMPmOGbAQIyEYBb2DSQqESg/sZxKSXm+XAA6yWA1fQhbsIm5QIzOMnzOqxZKOCI3RzrRxYzRDuTnCj4o3z2YNZC4Wykc9+Rr3LNNnI4TVMPmGG4otHCWNyjIVyYB1hRkXYKAfKOYzJs6QpfriGXzEJs1YOVNLNGT1Uy4HlDODuFLcrXriQdzDbR55sFNKK00dcLBtZvITJV5QoPthIBJOfmS8bFk8z1hbSZKOUbzDZTqamHtX0YBLiQTlQQy9j/cmtcuAO+nDXzzJNNabzMWaNZMtGMW1E8yUzZSOdBkzaKdNUIo0tmB1itmwE2Iab58mQjWLaMNlJtqYOt3EKkyB3yoHFBHHTx91yoJZe3IV4SONi6awo0V5dLpNf1KiQLI1C6bpHZXJ3SIusDp2GpXo9qXS56VKddUCTRwbbmWqvkCUbRbRiso88TR7L6GeqDbJCDlRxHHdh1mqymEM78dDBXDmwgRHc/cZ1mgyy2UW8NJErGwW8icl7FCp2rCREvAyzRg5cyRHcRdikWLGATuLpKFfJgTUM4+4ENykW5NNMvL1FgWzk0oTJp0zXxLGeMPE2wgY5MJcfMdlKQBNDJT0kQi/VcmAFIdz1s0Qu0hVdjpoV0fhZik1Al2JZ6IzXVag5iii6dOXKq7Dk8/l8Pp/Pd676GwYUP6Kwt1/bAAAAAElFTkSuQmCC\"","export default __webpack_public_path__ + \"static/media/gmx-logo-final-white.b7833ed6.png\";","export default __webpack_public_path__ + \"static/media/gmx-logo-final.0b59e423.png\";","export default __webpack_public_path__ + \"static/media/gmx-logo-glow.83c5aea5.png\";","export default __webpack_public_path__ + \"static/media/gmx-logo-with-name.6211e9eb.svg\";","export default __webpack_public_path__ + \"static/media/gmx_logo.9b999610.svg\";","export default __webpack_public_path__ + \"static/media/graphite-01.6f3526cd.png\";","export default __webpack_public_path__ + \"static/media/ic-communityproject.d195d704.svg\";","export default __webpack_public_path__ + \"static/media/ic_1inch.4273e7f6.svg\";","export default __webpack_public_path__ + \"static/media/ic_across.647e2187.svg\";","export default __webpack_public_path__ + \"static/media/ic_arbitrum_16.f4c1a9fe.svg\";","export default __webpack_public_path__ + \"static/media/ic_arbitrum_24.21ec7bfe.svg\";","export default __webpack_public_path__ + \"static/media/ic_arbitrum_hover_16.d779b479.svg\";","export default __webpack_public_path__ + \"static/media/ic_arrowleft16.9d2319ed.svg\";","export default __webpack_public_path__ + \"static/media/ic_arrowright16.25e0dd13.svg\";","export default __webpack_public_path__ + \"static/media/ic_avalanche_16.90aca01d.svg\";","export default __webpack_public_path__ + \"static/media/ic_avalanche_24.be4891c9.svg\";","export default __webpack_public_path__ + \"static/media/ic_avalanche_testnet_16.32340c73.svg\";","export default __webpack_public_path__ + \"static/media/ic_avalanche_testnet_24.b911b6d2.svg\";","export default __webpack_public_path__ + \"static/media/ic_avalanche_testnet_96.0ec8b0e8.svg\";","export default __webpack_public_path__ + \"static/media/ic_avax_24.43583fc4.svg\";","export default __webpack_public_path__ + \"static/media/ic_avax_30.403cd87e.svg\";","export default __webpack_public_path__ + \"static/media/ic_avax_40.ba220dde.svg\";","export default __webpack_public_path__ + \"static/media/ic_banxa.06412144.svg\";","export default __webpack_public_path__ + \"static/media/ic_base_24.5c0f942f.svg\";","export default __webpack_public_path__ + \"static/media/ic_binance.60a43ade.svg\";","export default __webpack_public_path__ + \"static/media/ic_binance_logo.46794a16.svg\";","export default __webpack_public_path__ + \"static/media/ic_bsc.8de996f1.svg\";","export default __webpack_public_path__ + \"static/media/ic_bsc_96.79853d5a.svg\";","export default __webpack_public_path__ + \"static/media/ic_btc.b_24.a8f56d16.svg\";","export default __webpack_public_path__ + \"static/media/ic_btc.b_40.1560513c.svg\";","export default __webpack_public_path__ + \"static/media/ic_btc_24.f992927a.svg\";","export default __webpack_public_path__ + \"static/media/ic_btc_40.1560513c.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAAuElEQVR4AWMYcWAUMMIAGxsbCdr+///PwcEBYTc0NPz69es/GFy9etXS0hK7HmsOhTdy9a/k6oAMTCOAXAcHByB7PxgAGcJ64j47YoEIyIAa8VauHoJeyNagGwEGELa2tjZQCsjw3hoNMcJnZyzUiHdyDTAjaiFGAFVjGgE0F2rEFoQRCI8A9QP9AmQgOxjofqAeNCMgHvHeFoPwCCawsbEBhhwkCL9//45uBPEAGIvAuByhaXkUAABgd3QJTKl1YwAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/ic_busd_24.2432ce58.svg\";","export default __webpack_public_path__ + \"static/media/ic_buy_glp.b4c18be7.svg\";","export default __webpack_public_path__ + \"static/media/ic_bybit.90c5dc27.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAsCAYAAAAq/ZsdAAAFI0lEQVR4Ac1ZA5AsSRCd2FkMvm2cbdu2bdu2bdt3obN9X6tGrW3vxv6x509e5dwtukZdXYt5EW9ZNf1eZFZmVbVJL8yyfJpZlT2UYIw4VzrVlC3IJXINChNhriLXZJOh56gon4Ahbw5RHs8SO+JRwrmmbEMuIfuYiRzgNYNzcK4pG5Gryk9j+vCkGs7JGgOiqYdjj7MEzj/OErrfCHHuBBiS9slR5XpMpXTEMZtf037hcdYgiPAEe3gHU7bghBkw43hrsNWoGZw77iLNqnqWWVW+yVElNR1xDG2mZ51gCRxg1BDOHT8nkrQFFfgLpVvP+rmorRUe6ekJPtrTU3P6Lt7PDRh6Ydy85CjSlVRkxKxIusr2TrXVMBq3NnVtOGq2b5An1TBdxyfFiPwRFbmep/cc1FCvMfRgTzfY/yqLzP6iehJTTVEW5SqyRA3FU0zUEP7dUkRiW13W0X3EIu/Tx9kCDyTjsZbABWNvRi1ckUuUOr0phpxdTuDGzg742+MG4vdrDLWEQvG/v9DfB4c01ofiG9WysiWmCUF5+cxcVaniMYNrxhGNgl6scnpg578anbsfMHgKjcj+oznmfcesyKuoyCC/GT784vDBwnfqk66hY63Bv+g6WiFuRpVf5dyrwT8eD/DCR/3fWBeDZauaYaMHW1IVBwfl9SLV7HTeUylGJxnQ5Cq3B9a4fEA8G6CSeu4Pac2cQP7jrNXVsOPpPelK+Ff8JbyoaBoVOMBbzW6iRYAFVjhrURmsLGxFwRre0xiDy6q1fzuAeKGgSIVDNvKkK+Uq19rKJdKLQzsAHmI5ZmEpIbBVcReK1c0tV3fB8kebMvUnB5rS1W+ouBgl8PKk5iZg8fWAH0Vy07a6DPbbySFsCrc193JFh+k9qVDkBHixnUmxNNx6VTesvL8ZRYuZov2mnREqnHYsmv0A3/ZriwHLw0kILOuI3o2rioUi6WFtqLKJ8Pv1LtCLCk9qYzP/qYZdj+7Xu4H9KjHdiHIP00S5iUVgb+KCL3rjJVkXvNHkppaXtsCOp/bqPmIcawudwDRS5S9RMxutaxsWdHZFDN7tikGxEzKiLwQJhrYhPbDpg208Z6YWxpD0i4ihXMojSChB2JC5x1ti8OfgUFNNxEvt2jl7Egcs+LSexxBoduc0Ql4RQxsVtukuy9hUGWAkNWMOI0GYsqacwxATJbMitxk1YysqgwOJl6fX4BZIA/ydHTPr92o4YoEPhXKvJUy5P40amlZUmZBij7XEv6dMQW80s6Gt3u3kv1CxhT4wIUQu4Dcr7dCIbfYPVTAszYnEIsAAK6PGzFEkPNSLeOkYMvS3ETP2deWwB3GwZriPEGw0dyODsPDdeqNXXiv+v2OTndxbnj9rYC/iRBHxMs2PxAqHnLu6DnY5vk/sDo8K/I23uVpKCRxJwsNCvhvgiUxyM5uXdMKitxoMmUHiBYspDlWdkavIMs8WaObq6gRBuAnFNYELvYVJQexD+HeMJptmx5Eobc6tMPeLWjhyrk/IEHNiVd5BU3qiNefvGq6ewy7+Y6kJPNhtWdIFtnVlsNFDicdwYUOIPEJ2zFXjrx8bKMO5RC5KGqFfqwzdyyE3+bQN8ktVmPldNWxyeyvsv71T2AxS6D4PK0q6D79+d22N/vyRqIBYjionAvohf6d7wIuXReJGkGcuGF8zqMWYCzZKlqBTTIg4UcNQdISBR2GBF1rCxGejhjF/S4cVhj9aYlHBZ/Lf1/Gn4QFxc+PIdK9a/gVaRiAcqhHzNAAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/ic_cash.21569a1d.svg\";","export default __webpack_public_path__ + \"static/media/ic_coingecko_16.ef20d202.svg\";","export default __webpack_public_path__ + \"static/media/ic_coingecko_hover_16.ef20d202.svg\";","export default __webpack_public_path__ + \"static/media/ic_convert_down.74b7eb02.svg\";","export default __webpack_public_path__ + \"static/media/ic_dai_24.bafa9da6.svg\";","export default __webpack_public_path__ + \"static/media/ic_dai_40.6f901476.svg\";","export default __webpack_public_path__ + \"static/media/ic_discord.be4d716c.svg\";","export default __webpack_public_path__ + \"static/media/ic_dodo.56802cbe.svg\";","export default __webpack_public_path__ + \"static/media/ic_eth_24.6b1d8a1d.svg\";","export default __webpack_public_path__ + \"static/media/ic_eth_40.5e255508.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAqCAYAAADBNhlmAAAD8ElEQVR4AWJwL/AZ1HhkOfDvdtP/g9aBPydo/f+91XTGoHTgzz6g4xYb/h90Ufw6Xyn9Y5UaoDt7anckCQM4vrzd73CM2DbHtm3btm3but/9IHO3DtZRd+fZd6rrTE1SqU5najzn4vekUen+VwwQ9ndD+Zn90wr8e3ELZBc2g7BHg5WffEKB2fnNIBN2aV4pP/pEAjNzW0BW2q6llB86GgYKaNx7DczMRnFIaauWUb6vHpiZ0wLSRcv7C8zMbAWitFnHKN9zYnWvP6sVhEPG9xOYmd4KRGmDjrURBd51IiqBM1rxOLjvgncamJnaBkRpnR5LTWpP4uUa5dsuhA3ITmmLZqahwPU6tN/5jgMno7DVeiCXpTV6QCfEJ5GXa5VvujDqGGh8aa0eK99yYe8kMD2xHWTFlQYK2oZPAPDFl8VVeuAloQnI3irwh8AX36QnoLjlBkXVY6l9KxqTrrsx8bpbfOPA9Nh2+HNqNxSXGF9CB19aUTuebGcsUyZddWNvHjgG3XqLjHWh/czB/19mguJiY0Nk0tIVD/ZmgSNR4AKjqvSo9udK1y0uNMLrkC55elyuH6kcN6qzvTDXBJR5rNTIDtXZF+eboBHpohfhDRza1VaYbQJVc3qkhncg6qF4LDGXJZ33Ylx3cWGmGRpJDe1UDaOPZzpSmGUCxuyXged4A6eZgTKdlhpM4vgUZphBiXTGpx4Im774ijrQFAvUkxrYxR9HTZwlna4ESme8u5jAVD/6pNIJ3/PCJAvUSvXnjWMVJlsAoSYtnfRXAtEyE/h7327mxPnJNsiPt0J+QgUaV+INyk+0gKx6vVBrqhUqN45SYJINFI8GID/W+go1hlN+nBVPFi+jy1qFBQ4gN5R4LKAQGEc7DgeBCjyMAkdbsX+HmxXi+BXlyY7BqMkLR4PT5BtAJh5VCox2w7+DzSAe7IkUDga/l5fzI23Y7zG1W49ffpQNKKMJK7qhFAJ/i2hG/R7uhvwwmyLugOE2qAYzLd8yY0bYoJawww/ioeA6JhBHBjWQG2Jn/BbSAFfcUDvUQ41TuCHEA0FqDB3oR4ED7bRBdq44eXxusDoytnqbuC8EwpYAiPtDKoE+zYpcfwfU4Asc4ACaHaEnTcZWbxP3hrCGb3W/ebSQ6+sgeOKwXD8HNEImTW4AcVcYxN1Yw0Asl3AClnTyB/ZxAC8ciLz2h4VfHdoNuZgT/os6f+IOjDuBkahP3BHBuD9R/2LX/UqWeaGJgZIcEeshbkS33PYIZDclv1MLfOf+C7ugkfxwLwhbo/DRfkT/L4BCgsqELVEQNpO4jxSII31uqCVsisEn9TfEfx4UhggbYtAr/yd5AbrkAiTtrDhJAAAAAElFTkSuQmCC\"","export default __webpack_public_path__ + \"static/media/ic_frax_24.7349c478.svg\";","export default __webpack_public_path__ + \"static/media/ic_frax_40.1e127166.svg\";","export default __webpack_public_path__ + \"static/media/ic_fuse_16.4781b0ad.svg\";","export default __webpack_public_path__ + \"static/media/ic_fuse_24.4781b0ad.svg\";","export default __webpack_public_path__ + \"static/media/ic_fuse_96.4781b0ad.svg\";","export default __webpack_public_path__ + \"static/media/ic_glp_24.4d13fb1e.svg\";","export default __webpack_public_path__ + \"static/media/ic_glp_40.a26fd84e.svg\";","export default __webpack_public_path__ + \"static/media/ic_glp_custom.a26fd84e.svg\";","export default __webpack_public_path__ + \"static/media/ic_gmx.6f0be097.svg\";","export default __webpack_public_path__ + \"static/media/ic_gmx_24.2b59d7e0.svg\";","export default __webpack_public_path__ + \"static/media/ic_gmx_30.375de394.svg\";","export default __webpack_public_path__ + \"static/media/ic_gmx_40.55d4999d.svg\";","export default __webpack_public_path__ + \"static/media/ic_gmx_64.6f0be097.svg\";","export default __webpack_public_path__ + \"static/media/ic_gmx_arbitrum.59f04e87.svg\";","export default __webpack_public_path__ + \"static/media/ic_gmx_avax.fb50658c.svg\";","export default __webpack_public_path__ + \"static/media/ic_gmx_big.a0a74216.svg\";","export default __webpack_public_path__ + \"static/media/ic_gmx_footer.6f0be097.svg\";","export default __webpack_public_path__ + \"static/media/ic_gmx_small.a4d9be56.svg\";","export default __webpack_public_path__ + \"static/media/ic_hop.0f4a98a0.svg\";","export default __webpack_public_path__ + \"static/media/ic_huobi.22fdcff5.svg\";","export default __webpack_public_path__ + \"static/media/ic_info.f334ee0a.svg\";","export default __webpack_public_path__ + \"static/media/ic_kucoin.d4526877.svg\";","export default __webpack_public_path__ + \"static/media/ic_link_24.0d641e52.svg\";","export default __webpack_public_path__ + \"static/media/ic_link_40.4bb3a048.svg\";","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/ic_menu_dots.ba19dad8.svg\";","export default \"data:image/bmp;base64,Qk1KIgAAAAAAAIoAAAB8AAAALQAAADAAAAABACAAAwAAAMAhAADXDQAA1w0AAAAAAAAAAAAAAAD/AAD/AAD/AAAAAAAA/0JHUnMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//6oD9+eeX/jpobD36J7n+Oeb+vfjl/r04JTj8ue0re7jt1z//4ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"","export default __webpack_public_path__ + \"static/media/ic_meridian_icon.f657a39a.svg\";","export default __webpack_public_path__ + \"static/media/ic_meridian_name.2988f9e3.data\";","export default \"data:image/jpeg;base64,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\"","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/ic_meridian_name.5251e4e3.svg\";","export default __webpack_public_path__ + \"static/media/ic_metamask_16.aa3dce32.svg\";","export default __webpack_public_path__ + \"static/media/ic_metamask_hover_16.aa3dce32.svg\";","export default __webpack_public_path__ + \"static/media/ic_meter_24.c5738fbc.svg\";","export default __webpack_public_path__ + \"static/media/ic_meter_96.da5b727e.svg\";","export default __webpack_public_path__ + \"static/media/ic_mim_24.b6a1708c.svg\";","export default __webpack_public_path__ + \"static/media/ic_mim_40.42c8b575.svg\";","export default __webpack_public_path__ + \"static/media/ic_multiswap.e577f4fa.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAPCAYAAAAPr1RWAAAABHNCSVQICAgIfAhkiAAAA5ZJREFUOE+NVGtsU2UYfr9zWfv10K4XVrvaG0zpBgw7NsnMWJxENEJinCSQIMEgMQYJl2QzEf5pjJIYLySijniJkYRgwrhkGLYwFZgikmyVHxuzK6WwdesYO6drt572XD7PqQ7r4obfn+e8ed/zPM/7fhcEc9a1sa8+zyupZyVVDOipSXGI2I2PRs2s+0ita/vHc+sXitFsMjx+bEti+vevRVnALIWBpUzAIgwGehGk5THg80lw4MrRMnPwidW2TfH/I1Ig14lvpn46LpEsYsAAmLGrVoMvziJTCoA4ZCJ542JME0mBucSd9Vofr2qwbXygQIH8+9gbM+l8Auvf5dxjEQcVeHqFe/PtWXdDQmetkOc7rvA9LgUo8HPV4WbPqzV6/suRc91JMdbEQY4qYxh5KfYdq3c279Bz6Gri6Be30hd36sFDpupok/fNR/6r5Rt3u9zh7GA0NhM3qoiGNbamxlGVq7uW6vvIQalgRSrYaAIWIFBhDh5Ytfj5Q6g7/tbohPiHi6UxqXQ8t2T5AvPsTJ759Bfht10KoaDaEjrNYNf+fmGoH5Mcsww7f0jn4us5kGgHY8o0el43o/bITlUmOWQ1BIRn/O/YFtqobr7b35W8fEvRnFfgiugu39Z/ddkx/G1UksaWltIUrPO1IHRi8CWiE7q5mnCjp7Uwx4XWvsH3iO7cbSwXDga2F8xcGftuy4wstChEDeVUkbUz+F7Dw68tRmeje6SsPMnYjUuE9Q9w3j7+49rzk72X9ZnXcMsu7vZsaNLJT8Xe5flszMrocy9xQsCy5oPqsuZW1DXS1s9nLlXpRUHbxsaQc2vPfM6PJs6f6pmKvEAAwTrrikM7XE8d0Gs77xzpG8mEQzRRgQFFI68ZaPDsW47axy/slaYvHYZ8FCwGd9ZfWl8136Z+OHyury8TC9lZs3y44mW22ERv4qT/ttg7kBFHsIk2kBeDbVThnH8yfOYGVu8FzbmrgCmDXM6F3q9zvXJwbgcn+Z/9iempb2wl5s+2OdeemJvviL3Np7I3rUbKAJsq21CBXP8pzEcGJvITmCYK6LP7B2UtJlpchKDltfZZDSmtni2q12PvopV3nvS1+u6/LbpAcjp5uj8TCTHFAn8TMfOiUmREBQtbKtc5Ntd67fXX75PPtnhWOxEpOd0iKdlARpkKUNomsUi79BrSmsNiZLXbSGkd0JowC7RYWmL7lUOO/avdfz1sfwIZaJcfXDdbRwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAB9klEQVR4AWJwL/AhG////3/df8JAmBI7SHcUZcAAUIwZgzQUAwGUUlXrUl1dBcXFqYuLWN2cxdlFxF3Qzd3NTVf3peA+uwqddXaxgiCotvg/KITjcv8l/8o/KOXy73Ivl0tC4gsIwDL9jmlcAraRCkVhOSDskNhk+HQAIAtctw5F/yOSxUq4KqCKGVhXXK5rLRJjxKG8eNdfbLDSaLOqdhJrcGLZB23tWNyYc9d7PwSQqi1yEp1PROxDYxBfKZAIkI6ykN2U+qNbjYyJRiMzR8FSygMBKh18izZXOKGfyYWqA9rA286AlfFL5R44uJ4kKXoKzMEUtpkFoW8JfYABjam6AVP6EfPX9OKv9a9nAvKFQ32l7gpYyLvx/akRQDqAQG8WsJAfpf28UUDLJsWn+JsTek8ClrIqMtL/018FAD0dunWzV8hdqXS8s0htiY4dQBbHgVkbZHtUBzCUJZBBuqAeQTKGGuAKOG9nAeCb8W2oxFirArbq4jaAWxbBZkhG6UUs0E8swD6tPXg5n5d2EfCxVSKaA4fk8pybZcuwZToDWMVuJ2wn14nYaAYeDz/Ev3xpkG3u74PkVQzIJQYE5+w+j4vq9yL7fRBkajHx6e0qpVRyp/U0ozQ+c+rY6326p9ge8cw6AXpdO6cOqOxtD5HfXt3+fwGJIMpFxYFtyAAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/ic_olympus.0b15337e.svg\";","export default __webpack_public_path__ + \"static/media/ic_olympus_arbitrum.2d52c3f7.svg\";","export default __webpack_public_path__ + \"static/media/ic_omnidex_footer.e8c00f3d.png\";","export default __webpack_public_path__ + \"static/media/ic_omnidex_footer2.e8c00f3d.png\";","export default __webpack_public_path__ + \"static/media/ic_omnidex_logo.3b4f8edc.jpeg\";","export default __webpack_public_path__ + \"static/media/ic_openocean.4434394c.svg\";","export default __webpack_public_path__ + \"static/media/ic_paraswap.13898880.svg\";","export default __webpack_public_path__ + \"static/media/ic_selector_dropdowns.aaf0b8f0.svg\";","export default __webpack_public_path__ + \"static/media/ic_settings_24.6f286878.svg\";","export default __webpack_public_path__ + \"static/media/ic_sign in_16.b6f5b1d9.svg\";","export default __webpack_public_path__ + \"static/media/ic_slingshot.4b95aa77.svg\";","export default __webpack_public_path__ + \"static/media/ic_stats_big.4a4ebfb7.svg\";","export default __webpack_public_path__ + \"static/media/ic_synapse.8b3e94cb.svg\";","export default __webpack_public_path__ + \"static/media/ic_taiko_16.bbb45e30.svg\";","export default __webpack_public_path__ + \"static/media/ic_taiko_24.7a5791bc.svg\";","export default __webpack_public_path__ + \"static/media/ic_taiko_96.0d9571dc.svg\";","export default __webpack_public_path__ + \"static/media/ic_tether_24.a7c88dcd.svg\";","export default __webpack_public_path__ + \"static/media/ic_tlos_16.2ad1dc98.svg\";","export default __webpack_public_path__ + \"static/media/ic_tlos_24.64f9c276.svg\";","export default __webpack_public_path__ + \"static/media/ic_tlos_40.057cda80.svg\";","export default __webpack_public_path__ + \"static/media/ic_tlos_96.3ceab2bb.svg\";","export default __webpack_public_path__ + \"static/media/ic_tokens.42432da7.svg\";","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/ic_transfer_avax.6d7a1ef1.svg\";","export default __webpack_public_path__ + \"static/media/ic_uni_24.47e903f7.svg\";","export default __webpack_public_path__ + \"static/media/ic_uni_40.efe1f12f.svg\";","export default __webpack_public_path__ + \"static/media/ic_uni_arbitrum.a1fa0b7f.svg\";","export default __webpack_public_path__ + \"static/media/ic_usdc.e_24.0952740b.svg\";","export default __webpack_public_path__ + \"static/media/ic_usdc.e_40.27f415ba.svg\";","export default __webpack_public_path__ + \"static/media/ic_usdc_24.0952740b.svg\";","export default __webpack_public_path__ + \"static/media/ic_usdc_40.27f415ba.svg\";","export default __webpack_public_path__ + \"static/media/ic_usdm_24.5a549211.svg\";","export default __webpack_public_path__ + \"static/media/ic_usdm_40.6a6495e3.svg\";","export default __webpack_public_path__ + \"static/media/ic_usdt_24.5ab8778d.svg\";","export default __webpack_public_path__ + \"static/media/ic_usdt_40.e357d24a.svg\";","export default __webpack_public_path__ + \"static/media/ic_wavax_24.43583fc4.svg\";","export default __webpack_public_path__ + \"static/media/ic_wavax_40.ba36eda4.svg\";","export default __webpack_public_path__ + \"static/media/ic_wbtc_24.5dda0ca3.svg\";","export default __webpack_public_path__ + \"static/media/ic_wbtc_40.8330ef8d.svg\";","export default __webpack_public_path__ + \"static/media/ic_weth_24.bc395894.svg\";","export default __webpack_public_path__ + \"static/media/ic_weth_40.334ca16a.svg\";","export default __webpack_public_path__ + \"static/media/ic_wtlos_16.c4d9de6a.svg\";","export default __webpack_public_path__ + \"static/media/ic_wtlos_24.c8662022.svg\";","export default __webpack_public_path__ + \"static/media/ic_wtlos_40.057cda80.svg\";","export default __webpack_public_path__ + \"static/media/ic_wtlos_96.7228f049.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAACPklEQVR4Ae2ZxZ7UQBDGC3e94C+B3XB3d5/qnsVdL+iVKw4vACccLjj0BHd3d3fLdmR9tyc92plfHb6JJ/VPdZdMoNfc/jklAiIgAiIgAiIgAiIgAvIEJyMdjTP49ORWiQMJ9sI4oFPYG+wVlRMEwn/GAcX4QohhnjYQWNObgsVt8zzEDoNgJxIAYv0hxmw4PKmmWXOI26qpoHJtxAGS2mIMjHy5nk34WR9IYA/3YktKTkIjgATe8l/yS32gy9Ma+RdL4d2sw1jRboX2CH4gsShXCCQl8CoAVMoODI4tYctp3j3RPPTYvUEJ4TK4OqJ6RkDO5LWHU/iztA2JJ9az0WZlgErCvZe6K9dPyOWRIrGjsH1ElTje31LiGlfsMgj2Wq7/qfCZgu9IGMh/8F4FlEJ8ccXRakXVxO7J/qakOAXBHmk/XLC3ilwyMIH7/Q+SEzVCJtuma4Tv4bXF6rDGcHhEXbnvgR4MfoQVwVJHAokNb2u81YPFJzEIvC+3fwS93g0IVqRb2vshZ8KDwKFSF8DiAQxj62WAaRD3PMv1xhN5/iLYFa2dtQYPbKgEAreqDcbbymh5cHwd4zpWEOyIEqoCrxjbgrtDUT8UjzEWyJ/4u3VCsfF/kmh5SeBQ44F8Lx2ID+NnfcOBNLwU7RkaIN9LF+JVEWEDmqKYO29CCBRRFKD4nIAIKMWC2Lj6CqA1hgNpdLsC/4f2c4pbhZf1UJtQfx+CfbNqwOHpdV1dnV6XPnjlMhABERABERAB5QNLHTYJZAT3mgAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/lg_arbitrum.bdf133fe.svg\";","export default __webpack_public_path__ + \"static/media/logo_GMX.6f0be097.svg\";","export default __webpack_public_path__ + \"static/media/logo_OmniDex.e8c00f3d.png\";","export default __webpack_public_path__ + \"static/media/long.0bc4a064.svg\";","export default __webpack_public_path__ + \"static/media/metamask-text.2f9c2df2.svg\";","export default __webpack_public_path__ + \"static/media/nansen_portfolio.886b0a77.svg\";","export default __webpack_public_path__ + \"static/media/page-not-found.bb90d073.svg\";","export default __webpack_public_path__ + \"static/media/position-share-bg.900fbfaa.png\";","export default __webpack_public_path__ + \"static/media/s1.5715d3b2.png\";","export default __webpack_public_path__ + \"static/media/s2.e9b3725c.png\";","export default __webpack_public_path__ + \"static/media/s3.b88183bb.png\";","export default __webpack_public_path__ + \"static/media/s4.b13485d0.png\";","export default __webpack_public_path__ + \"static/media/s5.aca51e91.png\";","export default __webpack_public_path__ + \"static/media/s6.ba272ce3.png\";","export default __webpack_public_path__ + \"static/media/short.1f94a0c2.svg\";","export default __webpack_public_path__ + \"static/media/swap.40fb8e49.svg\";","export default __webpack_public_path__ + \"static/media/trading.7ea1604c.jpg\";","export default __webpack_public_path__ + \"static/media/wallet-connect-text.78166b41.svg\";","export default __webpack_public_path__ + \"static/media/wave-01.3c9bce1e.png\";","export default __webpack_public_path__ + \"static/media/wave-02.4a56e8c7.png\";","var map = {\n\t\"./de/messages.po\": [\n\t\t525,\n\t\t4\n\t],\n\t\"./en/messages.po\": [\n\t\t526,\n\t\t5\n\t],\n\t\"./es/messages.po\": [\n\t\t527,\n\t\t6\n\t],\n\t\"./fr/messages.po\": [\n\t\t528,\n\t\t7\n\t],\n\t\"./ja/messages.po\": [\n\t\t529,\n\t\t8\n\t],\n\t\"./ko/messages.po\": [\n\t\t530,\n\t\t9\n\t],\n\t\"./pseudo/messages.po\": [\n\t\t531,\n\t\t10\n\t],\n\t\"./ru/messages.po\": [\n\t\t532,\n\t\t11\n\t],\n\t\"./zh/messages.po\": [\n\t\t533,\n\t\t12\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__.t(id, 7);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 515;\nmodule.exports = webpackAsyncContext;","export const SELECTED_NETWORK_LOCAL_STORAGE_KEY = \"SELECTED_NETWORK\";\nexport const WALLET_CONNECT_LOCALSTORAGE_KEY = \"walletconnect\";\nexport const WALLET_LINK_LOCALSTORAGE_PREFIX = \"-walletlink\";\nexport const SHOULD_EAGER_CONNECT_LOCALSTORAGE_KEY = \"eagerconnect\";\nexport const CURRENT_PROVIDER_LOCALSTORAGE_KEY = \"currentprovider\";\nexport const LANGUAGE_LOCALSTORAGE_KEY = \"LANGUAGE_KEY\";\nexport const SLIPPAGE_BPS_KEY = \"Exchange-swap-slippage-basis-points-v3\";\nexport const CLOSE_POSITION_RECEIVE_TOKEN_KEY = \"Close-position-receive-token\";\nexport const IS_PNL_IN_LEVERAGE_KEY = \"Exchange-swap-is-pnl-in-leverage\";\nexport const SHOW_PNL_AFTER_FEES_KEY = \"Exchange-swap-show-pnl-after-fees\";\nexport const DISABLE_ORDER_VALIDATION_KEY = \"disable-order-validation\";\nexport const SHOULD_SHOW_POSITION_LINES_KEY = \"Exchange-swap-should-show-position-lines\";\nexport const REFERRAL_CODE_KEY = \"GMX-referralCode\";\nexport const REFERRALS_SELECTED_TAB_KEY = \"Referrals-selected-tab\";\nexport const REDIRECT_POPUP_TIMESTAMP_KEY = \"redirect-popup-timestamp\";\nexport const PRODUCTION_PREVIEW_KEY = \"production-preview\";\n","import { PRODUCTION_PREVIEW_KEY } from \"./localStorage\";\n\nexport const UI_VERSION = \"1.4\";\n\nexport const IS_TOUCH = \"ontouchstart\" in window;\n\nexport function isDevelopment() {\n const isProductionPreview = Boolean(localStorage.getItem(PRODUCTION_PREVIEW_KEY));\n\n return (\n !window.location.host?.includes(\"gmx.io\") && !window.location.host?.includes(\"ipfs.io\") && !isProductionPreview\n );\n}\n\nexport function isLocal() {\n return window.location.host?.includes(\"localhost\");\n}\n","import { ethers } from \"ethers\";\nimport { sample } from \"lodash\";\nimport { NetworkMetadata } from \"lib/wallets\";\nimport { isDevelopment } from \"./env\";\nimport { truncate } from \"fs\";\n\nconst { parseEther } = ethers.utils;\n\nexport const ETH_MAINNET = 1;\nexport const TELOS_TESTNET = 41;\nexport const TELOS_MAINNET = 40;\nexport const BASE_MAINNET = 8453;\nexport const FUSE_MAINNET = 122;\nexport const METER_MAINNET = 82;\nexport const TAIKO_MAINNET = 167000;\nexport const TARAXA_MAINNET = 841;\nexport const ARTELA_MAINNET = 11820;\n// export const BASE_TESTNET = 84531;\n\n\n\n// TODO take it from web3 JJ\nexport const DEFAULT_CHAIN_ID = TELOS_MAINNET;\nexport const CHAIN_ID = DEFAULT_CHAIN_ID;\n\nexport const SUPPORTED_CHAIN_IDS = [TELOS_MAINNET, BASE_MAINNET, FUSE_MAINNET, METER_MAINNET, TAIKO_MAINNET, ARTELA_MAINNET];\n\nif (isDevelopment()) {\n SUPPORTED_CHAIN_IDS.push(TELOS_TESTNET);\n}\n\nexport const IS_NETWORK_DISABLED = {\n [TELOS_TESTNET]: true,\n [BASE_MAINNET]: false,\n [TELOS_MAINNET]: false,\n [FUSE_MAINNET]: false,\n [METER_MAINNET]: false,\n [TAIKO_MAINNET]: false,\n [ARTELA_MAINNET]: false,\n};\n\nexport const CHAIN_NAMES_MAP = {\n [TELOS_TESTNET]: \"Telos Testnet\",\n [TELOS_MAINNET]: \"Telos Mainnet\",\n [BASE_MAINNET]: \"Base Mainnet\",\n [FUSE_MAINNET]: \"Fuse Mainnet\",\n [METER_MAINNET]: \"Meter Mainnet\",\n [TAIKO_MAINNET]: \"Taiko Mainnet\",\n [ARTELA_MAINNET]: \"Artela Mainnet\",\n\n};\n\nexport const GAS_PRICE_ADJUSTMENT_MAP = {\n [TELOS_TESTNET]: \"0\", // 3 gwei\n [TELOS_MAINNET]: \"0\", // 3 gwei\n [BASE_MAINNET]: \"0\", // 3 gwei\n [FUSE_MAINNET]: \"0\", // 3 gwei\n [METER_MAINNET]: \"0\", // 3 gwei\n [TAIKO_MAINNET]: \"0\", // 3 gwei\n [ARTELA_MAINNET]: \"0\", // 3 gwei\n};\n\nexport const MAX_GAS_PRICE_MAP = {\n [TELOS_TESTNET]: \"200000000000\", // 200 gwei\n};\n\nexport const HIGH_EXECUTION_FEES_MAP = {\n [TELOS_TESTNET]: 3, // 3 USD\n [TELOS_MAINNET]: 3, // 3 USD\n [BASE_MAINNET]: 3, // 3 USD\n [FUSE_MAINNET]: 3, // 3 USD\n [METER_MAINNET]: 3, // 3 USD\n [TAIKO_MAINNET]: 3, // 3 USD\n [ARTELA_MAINNET]: 3, // 3 USD\n\n};\n\nconst constants = {\n\n [TELOS_TESTNET]: {\n nativeTokenSymbol: \"TLOS\",\n wrappedTokenSymbol: \"WTLOS\",\n defaultCollateralSymbol: \"USDC\",\n defaultFlagOrdersEnabled: false,\n positionReaderPropsLength: 9,\n v2: true,\n\n SWAP_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.0003\"),\n INCREASE_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.0003\"),\n // contract requires that execution fee be strictly greater than instead of gte\n DECREASE_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.000300001\"),\n },\n\n [TELOS_MAINNET]: {\n nativeTokenSymbol: \"TLOS\",\n wrappedTokenSymbol: \"WTLOS\",\n defaultCollateralSymbol: \"USDM\",\n defaultFlagOrdersEnabled: false,\n positionReaderPropsLength: 9,\n v2: true,\n\n SWAP_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.0003\"),\n INCREASE_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.0003\"),\n // contract requires that execution fee be strictly greater than instead of gte\n DECREASE_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.000300001\"),\n },\n\n\n [BASE_MAINNET]: {\n nativeTokenSymbol: \"ETH\",\n wrappedTokenSymbol: \"WETH\",\n defaultCollateralSymbol: \"USDM\",\n defaultFlagOrdersEnabled: false,\n positionReaderPropsLength: 9,\n v2: true,\n\n SWAP_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.0003\"),\n INCREASE_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.0003\"),\n // contract requires that execution fee be strictly greater than instead of gte\n DECREASE_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.000300001\"),\n },\n [TAIKO_MAINNET]: {\n nativeTokenSymbol: \"ETH\",\n wrappedTokenSymbol: \"WETH\",\n defaultCollateralSymbol: \"USDM\",\n defaultFlagOrdersEnabled: false,\n positionReaderPropsLength: 9,\n v2: true,\n\n SWAP_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.0003\"),\n INCREASE_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.0003\"),\n // contract requires that execution fee be strictly greater than instead of gte\n DECREASE_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.000300001\"),\n },\n\n [FUSE_MAINNET]: {\n nativeTokenSymbol: \"FUSE\",\n wrappedTokenSymbol: \"WFUSE\",\n defaultCollateralSymbol: \"USDM\",\n defaultFlagOrdersEnabled: false,\n positionReaderPropsLength: 9,\n v2: true,\n\n SWAP_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.0003\"),\n INCREASE_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.0003\"),\n // contract requires that execution fee be strictly greater than instead of gte\n DECREASE_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.000300001\"),\n },\n\n [METER_MAINNET]: {\n nativeTokenSymbol: \"MTR\",\n wrappedTokenSymbol: \"WMTR\",\n defaultCollateralSymbol: \"USDM\",\n defaultFlagOrdersEnabled: false,\n positionReaderPropsLength: 9,\n v2: true,\n\n SWAP_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.0003\"),\n INCREASE_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.0003\"),\n // contract requires that execution fee be strictly greater than instead of gte\n DECREASE_ORDER_EXECUTION_GAS_FEE: parseEther(\"0.000300001\"),\n },\n};\n\nconst ALCHEMY_WHITELISTED_DOMAINS = [\"gmx.io\", \"app.gmx.io\"];\n\nexport const RPC_PROVIDERS = {\n [ETH_MAINNET]: [\"https://rpc.ankr.com/eth\"],\n [TELOS_TESTNET]: [\"https://testnet.telos.net/evm\"],\n [TELOS_MAINNET]: [\"https://rpc.telos.net/evm\"],\n [BASE_MAINNET]: [\"https://1rpc.io/base\"],\n [FUSE_MAINNET]: [\"https://rpc.fuse.io\"],\n [METER_MAINNET]: [\"https://rpc.meter.io\"],\n [TAIKO_MAINNET]: [\"https://rpc.taiko.xyz\"]\n};\n\nexport const FALLBACK_PROVIDERS = {\n [TELOS_TESTNET]: [\"https://testnet.telos.net/evm\"],\n [TELOS_MAINNET]: [\"https://rpc1.us.telos.net/evm\"],\n [BASE_MAINNET]: [\"https://base.meowrpc.com\"],\n [FUSE_MAINNET]: [\"https://fuse-pokt.nodies.app\"],\n [METER_MAINNET]: [\"https://meter.blockpi.network/v1/rpc/public\"],\n [TAIKO_MAINNET]: [\"https://taiko.blockpi.network/v1/rpc/public\"]\n\n};\n\nexport const NETWORK_METADATA: { [chainId: number]: NetworkMetadata } = {\n\n [TELOS_TESTNET]: {\n chainId: \"0x\" + TELOS_TESTNET.toString(16),\n chainName: \"Telos Testnet\",\n launchTime: 1705320307,\n nativeCurrency: {\n name: \"TLOS\",\n symbol: \"TLOS\",\n decimals: 18,\n },\n rpcUrls: [\"https://testnet.telos.net/evm\"],\n blockExplorerUrls: [\"https://testnet.teloscan.io/\"],\n },\n\n [TELOS_MAINNET]: {\n chainId: \"0x\" + TELOS_MAINNET.toString(16),\n chainName: \"Telos Mainnet\",\n launchTime: 1705320307,\n nativeCurrency: {\n name: \"TLOS\",\n symbol: \"TLOS\",\n decimals: 18,\n },\n rpcUrls: [\"https://mainnet.telos.net/evm\"],\n blockExplorerUrls: [\"https://www.teloscan.io/\"],\n },\n [BASE_MAINNET]: {\n chainId: \"0x\" + BASE_MAINNET.toString(16),\n chainName: \"Base Mainnet\",\n launchTime: 1705320307,\n nativeCurrency: {\n name: \"ETH\",\n symbol: \"ETH\",\n decimals: 18,\n },\n rpcUrls: [\"https://base.meowrpc.com\"],\n blockExplorerUrls: [\"https://basescan.org/\"],\n },\n [TAIKO_MAINNET]: {\n chainId: \"0x\" + BASE_MAINNET.toString(16),\n chainName: \"Taiko Mainnet\",\n launchTime: 1705320307,\n nativeCurrency: {\n name: \"ETH\",\n symbol: \"ETH\",\n decimals: 18,\n },\n rpcUrls: [\"https://rpc.taiko.xyz\"],\n blockExplorerUrls: [\"https://taikoscan.io/\"],\n },\n [FUSE_MAINNET]: {\n chainId: \"0x\" + FUSE_MAINNET.toString(16),\n chainName: \"Fuse Mainnet\",\n launchTime: 1708517107,\n nativeCurrency: {\n name: \"FUSE\",\n symbol: \"FUSE\",\n decimals: 18,\n },\n rpcUrls: [\"https://rpc.fuse.io\"],\n blockExplorerUrls: [\"https://explorer.fuse.io/\"],\n },\n [METER_MAINNET]: {\n chainId: \"0x\" + METER_MAINNET.toString(16),\n chainName: \"Meter Mainnet\",\n launchTime: 1711111636,\n nativeCurrency: {\n name: \"MTR\",\n symbol: \"MTR\",\n decimals: 18,\n },\n rpcUrls: [\"https://rpc.meter.io\"],\n blockExplorerUrls: [\"https://scan.meter.io//\"],\n },\n\n};\n\nexport const CHAIN_ICONS = {\n\n [TELOS_TESTNET]: {\n 16: \"ic_tlos_16.svg\",\n 24: \"ic_tlos_24.svg\",\n 96: \"ic_tlos_96.svg\",\n },\n\n [TELOS_MAINNET]: {\n 16: \"ic_tlos_16.svg\",\n 24: \"ic_tlos_24.svg\",\n 96: \"ic_tlos_96.svg\",\n },\n\n [BASE_MAINNET]: {\n 16: \"ic_base_16.svg\",\n 24: \"ic_base_24.svg\",\n 96: \"ic_base_96.svg\",\n },\n\n [FUSE_MAINNET]: {\n 16: \"ic_fuse_16.svg\",\n 24: \"ic_fuse_24.svg\",\n 96: \"ic_fuse_96.svg\",\n },\n\n [METER_MAINNET]: {\n 16: \"ic_meter_16.svg\",\n 24: \"ic_meter_24.svg\",\n 96: \"ic_meter_96.svg\",\n },\n\n [TAIKO_MAINNET]: {\n 16: \"ic_taiko_16.svg\",\n 24: \"ic_taiko_24.svg\",\n 96: \"ic_taiko_96.svg\",\n },\n};\n\nexport const getConstant = (chainId: number, key: string) => {\n if (!constants[chainId]) {\n throw new Error(`Unsupported chainId ${chainId}`);\n }\n\n if (!(key in constants[chainId])) {\n throw new Error(`Key ${key} does not exist for chainId ${chainId}`);\n }\n\n return constants[chainId][key];\n};\n\nexport function getChainName(chainId: number) {\n return CHAIN_NAMES_MAP[chainId];\n}\n\nexport function getChainIcon(chainId: number, size: 16 | 24 | 96 | 41): string | undefined {\n return CHAIN_ICONS[chainId]?.[size];\n}\n\nexport function getDefaultArbitrumRpcUrl() {\n return \"https://arb1.arbitrum.io/rpc\";\n}\n\nexport function getRpcUrl(chainId: number): string | undefined {\n return sample(RPC_PROVIDERS[chainId]);\n}\n\nexport function getFallbackRpcUrl(chainId: number): string | undefined {\n return sample(FALLBACK_PROVIDERS[chainId]);\n}\n\nexport function getAlchemyHttpUrl() {\n if (ALCHEMY_WHITELISTED_DOMAINS.includes(window.location.host)) {\n return \"https://arb-mainnet.g.alchemy.com/v2/ha7CFsr1bx5ZItuR6VZBbhKozcKDY4LZ\";\n }\n return \"https://arb-mainnet.g.alchemy.com/v2/EmVYwUw0N2tXOuG0SZfe5Z04rzBsCbr2\";\n}\n\nexport function getAlchemyWsUrl() {\n if (ALCHEMY_WHITELISTED_DOMAINS.includes(window.location.host)) {\n return \"wss://arb-mainnet.g.alchemy.com/v2/ha7CFsr1bx5ZItuR6VZBbhKozcKDY4LZ\";\n }\n return \"wss://arb-mainnet.g.alchemy.com/v2/EmVYwUw0N2tXOuG0SZfe5Z04rzBsCbr2\";\n}\n\nexport function getExplorerUrl(chainId) {\n if (chainId === TELOS_TESTNET) {\n return \"https://testnet.teloscan.io/\";\n } else if (chainId === TELOS_MAINNET) {\n return \"https://www.teloscan.io/\";\n } else if (chainId === BASE_MAINNET) {\n return \"https://basescan.org/\";\n } else if (chainId === FUSE_MAINNET) {\n return \"https://explorer.fuse.io/\";\n } else if (chainId === METER_MAINNET) {\n return \"https://scan.meter.io/\";\n } else if (chainId === TAIKO_MAINNET) {\n return \"https://taikoscan.io/\";\n }\n return \"https://etherscan.io/\";\n}\n\nexport function getHighExecutionFee(chainId) {\n return HIGH_EXECUTION_FEES_MAP[chainId] || 3;\n}\n\nexport function isSupportedChain(chainId) {\n return SUPPORTED_CHAIN_IDS.includes(chainId);\n}\n","import { ethers } from \"ethers\";\nimport { BASE_MAINNET, TELOS_TESTNET, TELOS_MAINNET, FUSE_MAINNET, METER_MAINNET, TAIKO_MAINNET } from \"./chains\";\n\nconst { AddressZero } = ethers.constants;\n\nexport const XGMT_EXCLUDED_ACCOUNTS = [\n \"0x330eef6b9b1ea6edd620c825c9919dc8b611d5d5\",\n \"0xd9b1c23411adbb984b1c4be515fafc47a12898b2\",\n \"0xa633158288520807f91ccc98aa58e0ea43acb400\",\n \"0xffd0a93b4362052a336a7b22494f1b77018dd34b\",\n];\n\nconst CONTRACTS = {\n [BASE_MAINNET]: {\n DIA_ORACLE: \"0x72301227B359df68637E962b3ED0B46575167277\",\n MeridianMultiPoolStaking: \"0xF3d840E84183AA5f4FaC81be97E09b1C4B199ffe\",\n MeridianUSDMStaking: \"0xfCcD02F7a964DE33032cb57746DC3B5F9319eaB7\",\n MST: \"0x2F3b1A07E3eFb1fCc64BD09b86bD0Fa885D93552\",\n USDM: \"0x5e06eA564efcB3158a85dBF0B9E017cb003ff56f\",\n RewardReader: \"0x69EcA412FFDe3F70A3AFeDFC2212c1c9Cfe2299B\",\n StakedGmxTracker: \"0xF4cd03207D6f590A9b001A91ccFcc81D95626B27\",\n BonusGmxTracker: \"0xc5c585F3abf1aE67A42Ef32ED3082ffdA971b99E\",\n FeeGmxTracker: \"0xc6F502B0A5079342d8e153441FeA9621bD27Be4D\",\n StakedGlpTracker: \"0x0dD255eb87087b7AfB8EE6074F91CFF8DD394e9F\",\n FeeGlpTracker: \"0xe677F9CC83c512770da2cC80a7CB8C79D89801E5\",\n },\n [TELOS_TESTNET]: {\n // telos testnet\n DIA_ORACLE: \"0x86c5997d10d1DF6cbB15c01280e596ED5ac90a33\",\n MST: \"0xa9a495086b8870c1F91Cd175A4d404912ea40325\",\n NATIVE_TOKEN: \"0xaE85Bf723A9e74d6c663dd226996AC1b8d075AA9\", // Fill\n MeridianMultiPoolStaking: \"0xeeD4a3c7d569690a609f04d109498E2FF8f449A3\",\n USDMStaking: \"0xE07D7f1C1153bCebc4f772C48A8A8eed1283ecCE\",\n\n },\n\n [TELOS_MAINNET]: {\n // telos mainnet\n DIA_ORACLE: \"0x86c5997d10d1DF6cbB15c01280e596ED5ac90a33\",\n NATIVE_TOKEN: \"0x4200000000000000000000000000000000000006\", // Fill\n MST: \"0x568524DA340579887db50Ecf602Cd1BA8451b243\",\n USDM: \"0x8f7D64ea96D729EF24a0F30b4526D47b80d877B9\",\n MSTMAIN: \"0x568524DA340579887db50Ecf602Cd1BA8451b243\",\n MeridianMultiPoolStaking: \"0x493A60387522a7573082f0f27B98d78Ca8635e43\",\n MeridianUSDMStaking: \"0xE07D7f1C1153bCebc4f772C48A8A8eed1283ecCE\",\n UniswapGmxEthPool: \"0xad701515a9a3116E1313C6CfF5194e346F34a45E\",\n Multicall: \"0x96535E6ecF23Ba183248E0fC653361F5920F171D\",\n },\n [TAIKO_MAINNET]: {\n // telos mainnet\n PRICE_FEED: \"0xd79417be2cE02fc22F2E520869b1DfC02a677751\",\n NATIVE_TOKEN: \"0x4200000000000000000000000000000000000006\", // Fill\n MST: \"0x9cf571FD53a49993993D0BE98045EF8416bCF4F2\",\n USDM: \"0x8f7D64ea96D729EF24a0F30b4526D47b80d877B9\",\n MSTMAIN: \"0x9cf571FD53a49993993D0BE98045EF8416bCF4F2\",\n MeridianMultiPoolStaking: \"0x623741035bf302DFe954828F08f626D0247864ac\",\n MeridianUSDMStaking: \"0xE07D7f1C1153bCebc4f772C48A8A8eed1283ecCE\",\n UniswapGmxEthPool: \"0xad701515a9a3116E1313C6CfF5194e346F34a45E\",\n Multicall: \"0x96535E6ecF23Ba183248E0fC653361F5920F171D\",\n },\n\n [FUSE_MAINNET]: {\n // fuse mainnet\n DIA_ORACLE: \"0x86c5997d10d1DF6cbB15c01280e596ED5ac90a33\",\n PRICE_FEED: \"0x9376DB040fE7Da43866471036c06E00bBA0Ce8EF\",\n NATIVE_TOKEN: \"0x0BE9e53fd7EDaC9F859882AfdDa116645287C629\", // Fill\n MST: \"0x2363Df84fDb7D4ee9d4E1A15c763BB6b7177eAEe\",\n USDM: \"0x4447863cddABbF2c3dAC826f042e03c91927A196\",\n MeridianMultiPoolStaking: \"0xb513fE4E2a3ed79bE6a7a936C7837f0294AFFEAd\",\n UniswapGmxEthPool: \"0xad701515a9a3116E1313C6CfF5194e346F34a45E\",\n Multicall: \"0x96535E6ecF23Ba183248E0fC653361F5920F171D\",\n },\n\n [METER_MAINNET]: {\n // fuse mainnet\n METER_ORACLE: \"0xB8a36aB2d679Eec5b031193114338458fE7a65c3\",\n METER_TEST_ORACLE: \"0x69D4873B452b3D87e79f4F56A315d5bfD188383C\", \n NATIVE_TOKEN: \"0x228ebBeE999c6a7ad74A6130E81b12f9Fe237Ba3\", // MTRG\n MST: \"0x5647f6cc997e45b81d786bAa9ECd8A1ad40Ef25f\",\n USDM: \"0x0f7CCEb45Afc2dCD626d6Da01116183e428F7F7D\", // Dummy USDM contract on METER until real USDM available\n MeridianMultiPoolStaking: \"0xe50882F137e0E00C06E62634f8A2b25c9FC64971\",\n UniswapGmxEthPool: \"0xad701515a9a3116E1313C6CfF5194e346F34a45E\",\n Multicall: \"0x96535E6ecF23Ba183248E0fC653361F5920F171D\",\n },\n};\n\nexport function getContract(chainId: number, name: string): string {\n if (!CONTRACTS[chainId]) {\n throw new Error(`Unknown chainId ${chainId}`);\n }\n\n if (!CONTRACTS[chainId][name]) {\n throw new Error(`Unknown contract \"${name}\" for chainId ${chainId}`);\n }\n\n return CONTRACTS[chainId][name];\n}\n","import {TELOS_TESTNET, TELOS_MAINNET } from \"./chains\";\n\nexport const GMX_STATS_API_URL = \"https://statsapi.meridianfinance.net/api\";\n\nconst BACKEND_URLS = {\n default: \"\",\n\n [TELOS_TESTNET]: \"https://omnidex.bmaa3ajd1gjri.eu-west-2.cs.amazonlightsail.com/\",\n [TELOS_MAINNET]: \"https://omnidex.bmaa3ajd1gjri.eu-west-2.cs.amazonlightsail.com/\",\n};\nexport function getServerBaseUrl(chainId: number) {\n if (!chainId) {\n throw new Error(\"chainId is not provided\");\n }\n\n if (document.location.hostname.includes(\"deploy-preview\")) {\n const fromLocalStorage = localStorage.getItem(\"SERVER_BASE_URL\");\n if (fromLocalStorage) {\n return fromLocalStorage;\n }\n }\n\n return BACKEND_URLS[chainId] || BACKEND_URLS.default;\n}\n\nexport function getServerUrl(chainId: number, path: string) {\n return `${getServerBaseUrl(chainId)}${path}`;\n}\n","import { ethers } from \"ethers\";\nimport { getContract } from \"./contracts\";\nimport { TELOS_TESTNET, TELOS_MAINNET, FUSE_MAINNET, METER_MAINNET, TAIKO_MAINNET } from \"./chains\";\nimport { Token } from \"domain/tokens\";\n\nexport const TOKENS: { [chainId: number]: Token[] } = {\n \n [TELOS_TESTNET]: [\n {\n name: \"Telos\",\n symbol: \"TLOS\",\n decimals: 18,\n address: ethers.constants.AddressZero,\n isNative: true,\n isShortable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/12559/small/coin-round-red.png?1604021818\",\n },\n\n\n {\n name: \"Wrapped TLOS\",\n symbol: \"WTLOS\",\n decimals: 18,\n address: \"0xaE85Bf723A9e74d6c663dd226996AC1b8d075AA9\",\n isWrapped: true,\n baseSymbol: \"TLOS\",\n imageUrl: \"https://assets.coingecko.com/coins/images/12559/small/coin-round-red.png?1604021818\",\n },\n {\n name: \"Bitcoin\",\n symbol: \"BTC\",\n address: \"0xA9F175d3eEB1483d8Ad31D38b5673C951720C49a\",\n decimals: 18,\n isShortable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/7598/thumb/wrapped_bitcoin_wbtc.png?1548822744\",\n },\n {\n name: \"Ethereum (WETH)\",\n symbol: \"ETH\",\n address: \"0x2433D3c00128d1B5C2D241bFAA61aFD6b22810D6\",\n decimals: 18,\n isShortable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/279/small/ethereum.png?1595348880\",\n },\n {\n name: \"USD Coin\",\n symbol: \"USDC\",\n address: \"0x7456Dd35C2FD863C7Aa917E6A46dBF9192ca6B70\",\n decimals: 18,\n isStable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/6319/thumb/USD_Coin_icon.png?1547042389\",\n },\n {\n name: \"Tether\",\n symbol: \"USDT\",\n decimals: 18,\n address: \"0x929eE3B7cbD7331bb9ac8659CDe7157bCBB0A6a2\",\n isStable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/325/thumb/Tether-logo.png?1598003707\",\n },\n ],\n\n [TELOS_MAINNET]: [\n {\n name: \"ETH\",\n symbol: \"ETH\",\n decimals: 18,\n address: ethers.constants.AddressZero,\n isNative: true,\n isShortable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/279/small/ethereum.png?1595348880\",\n },\n {\n name: \"Wrapped ETH\",\n symbol: \"WETH\",\n decimals: 18,\n address: \"0x4200000000000000000000000000000000000006\",\n isWrapped: true,\n baseSymbol: \"ETH\",\n imageUrl: \"https://assets.coingecko.com/coins/images/2518/thumb/weth.png?1628852295\",\n },\n {\n name: \"USD Base Coin\",\n symbol: \"USDC\",\n address: \"0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA\",\n decimals: 6,\n isStable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/6319/thumb/USD_Coin_icon.png?1547042389\",\n },\n {\n name: \"USDM\",\n symbol: \"USDM\",\n address: \"0x5e06eA564efcB3158a85dBF0B9E017cb003ff56f\",\n decimals: 18,\n isStable: true,\n imageUrl: \"https://github.com/MeridianDollar/brand-assets/blob/main/USDM.png\",\n },\n ],\n [FUSE_MAINNET]: [\n {\n name: \"ETH\",\n symbol: \"ETH\",\n decimals: 18,\n address: ethers.constants.AddressZero,\n isNative: true,\n isShortable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/279/small/ethereum.png?1595348880\",\n },\n {\n name: \"Wrapped ETH\",\n symbol: \"WETH\",\n decimals: 18,\n address: \"0x4200000000000000000000000000000000000006\",\n isWrapped: true,\n baseSymbol: \"ETH\",\n imageUrl: \"https://assets.coingecko.com/coins/images/2518/thumb/weth.png?1628852295\",\n },\n {\n name: \"USD Base Coin\",\n symbol: \"USDC\",\n address: \"0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA\",\n decimals: 6,\n isStable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/6319/thumb/USD_Coin_icon.png?1547042389\",\n },\n {\n name: \"USDM\",\n symbol: \"USDM\",\n address: \"0x5e06eA564efcB3158a85dBF0B9E017cb003ff56f\",\n decimals: 18,\n isStable: true,\n imageUrl: \"https://github.com/MeridianDollar/brand-assets/blob/main/USDM.png\",\n },\n ],\n [METER_MAINNET]: [\n {\n name: \"ETH\",\n symbol: \"ETH\",\n decimals: 18,\n address: ethers.constants.AddressZero,\n isNative: true,\n isShortable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/279/small/ethereum.png?1595348880\",\n },\n {\n name: \"Wrapped ETH\",\n symbol: \"WETH\",\n decimals: 18,\n address: \"0x4200000000000000000000000000000000000006\",\n isWrapped: true,\n baseSymbol: \"ETH\",\n imageUrl: \"https://assets.coingecko.com/coins/images/2518/thumb/weth.png?1628852295\",\n },\n {\n name: \"USD Base Coin\",\n symbol: \"USDC\",\n address: \"0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA\",\n decimals: 6,\n isStable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/6319/thumb/USD_Coin_icon.png?1547042389\",\n },\n {\n name: \"USDM\",\n symbol: \"USDM\",\n address: \"0x5e06eA564efcB3158a85dBF0B9E017cb003ff56f\",\n decimals: 18,\n isStable: true,\n imageUrl: \"https://github.com/MeridianDollar/brand-assets/blob/main/USDM.png\",\n },\n ],\n [TAIKO_MAINNET]: [\n {\n name: \"ETH\",\n symbol: \"ETH\",\n decimals: 18,\n address: ethers.constants.AddressZero,\n isNative: true,\n isShortable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/279/small/ethereum.png?1595348880\",\n },\n {\n name: \"Wrapped ETH\",\n symbol: \"WETH\",\n decimals: 18,\n address: \"0xA51894664A773981C6C112C43ce576f315d5b1B6\",\n isWrapped: true,\n baseSymbol: \"ETH\",\n imageUrl: \"https://assets.coingecko.com/coins/images/2518/thumb/weth.png?1628852295\",\n },\n {\n name: \"USD Coin\",\n symbol: \"USDC\",\n address: \"0x07d83526730c7438048D55A4fc0b850e2aaB6f0b\",\n decimals: 6,\n isStable: true,\n imageUrl: \"https://assets.coingecko.com/coins/images/6319/thumb/USD_Coin_icon.png?1547042389\",\n },\n {\n name: \"USDC.e\",\n symbol: \"USDC.e\",\n address: \"0x19e26B0638bf63aa9fa4d14c6baF8D52eBE86C5C\",\n decimals: 6,\n isStable: true,\n imageUrl: \"https://github.com/MeridianDollar/brand-assets/blob/main/USDM.png\",\n },\n ],\n};\n\nexport const ADDITIONAL_TOKENS: { [chainId: number]: Token[] } = {\n \n [TELOS_TESTNET]: [\n {\n name: \"MST\",\n symbol: \"MST\",\n address: getContract(TELOS_TESTNET, \"MST\"),\n decimals: 18,\n imageUrl: \"https://assets.coingecko.com/coins/images/18323/small/arbit.png?1631532468\",\n },\n ],\n\n [TELOS_MAINNET]: [\n {\n name: \"MST\",\n symbol: \"MST\",\n address: getContract(TELOS_MAINNET, \"MST\"),\n decimals: 18,\n imageUrl: \"https://assets.coingecko.com/coins/images/18323/small/arbit.png?1631532468\",\n },\n ],\n\n [FUSE_MAINNET]: [\n {\n name: \"MST\",\n symbol: \"MST\",\n address: getContract(FUSE_MAINNET, \"MST\"),\n decimals: 18,\n imageUrl: \"https://assets.coingecko.com/coins/images/18323/small/arbit.png?1631532468\",\n },\n ],\n\n [METER_MAINNET]: [\n {\n name: \"MST\",\n symbol: \"MST\",\n address: getContract(METER_MAINNET, \"MST\"),\n decimals: 18,\n imageUrl: \"https://assets.coingecko.com/coins/images/18323/small/arbit.png?1631532468\",\n },\n ],\n [TAIKO_MAINNET]: [\n {\n name: \"MST\",\n symbol: \"MST\",\n address: getContract(TAIKO_MAINNET, \"MST\"),\n decimals: 18,\n imageUrl: \"https://assets.coingecko.com/coins/images/18323/small/arbit.png?1631532468\",\n },\n ],\n};\n\nexport const PLATFORM_TOKENS: { [chainId: number]: { [symbol: string]: Token } } = {\n \n [TELOS_TESTNET]: {\n // arbitrum\n MST: {\n name: \"MST\",\n symbol: \"MST\",\n decimals: 18,\n address: getContract(TELOS_TESTNET, \"MST\"),\n imageUrl: \"https://assets.coingecko.com/coins/images/18323/small/arbit.png?1631532468\",\n },\n },\n [TELOS_MAINNET]: {\n // arbitrum\n MST: {\n name: \"MST\",\n symbol: \"MST\",\n decimals: 18,\n address: getContract(TELOS_MAINNET, \"MST\"),\n imageUrl: \"https://github.com/MeridianDollar/brand-assets/blob/main/MeridianLogo%20(1).png\",\n },\n },\n [FUSE_MAINNET]: {\n // arbitrum\n MST: {\n name: \"MST\",\n symbol: \"MST\",\n decimals: 18,\n address: getContract(FUSE_MAINNET, \"MST\"),\n imageUrl: \"https://github.com/MeridianDollar/brand-assets/blob/main/MeridianLogo%20(1).png\",\n },\n },\n [METER_MAINNET]: {\n // arbitrum\n MST: {\n name: \"MST\",\n symbol: \"MST\",\n decimals: 18,\n address: getContract(METER_MAINNET, \"MST\"),\n imageUrl: \"https://github.com/MeridianDollar/brand-assets/blob/main/MeridianLogo%20(1).png\",\n },\n },\n [TAIKO_MAINNET]: {\n // arbitrum\n MST: {\n name: \"MST\",\n symbol: \"MST\",\n decimals: 18,\n address: getContract(TAIKO_MAINNET, \"MST\"),\n imageUrl: \"https://github.com/MeridianDollar/brand-assets/blob/main/MeridianLogo%20(1).png\",\n },\n },\n};\n\nexport const ICONLINKS = {\n \n [TELOS_TESTNET]: {\n TLOS: {\n coingecko: \"https://www.coingecko.com/en/coins/avalanche\",\n },\n ETH: {\n coingecko: \"https://www.coingecko.com/en/coins/weth\",\n },\n USDC: {\n coingecko: \"https://www.coingecko.com/en/coins/usd-coin\",\n },\n USDT: {\n coingecko: \"https://www.coingecko.com/en/coins/usd-coin\",\n },\n BTC: {\n coingecko: \"https://www.coingecko.com/en/coins/usd-coin\",\n },\n },\n [TELOS_MAINNET]: {\n ETH: {\n coingecko: \"https://www.coingecko.com/en/coins/weth\",\n },\n USDM: {\n coingecko: \"https://www.coingecko.com/en/coins/usd\",\n },\n USDC: {\n coingecko: \"https://www.coingecko.com/en/coins/usd-coin\",\n }\n },\n [FUSE_MAINNET]: {\n ETH: {\n coingecko: \"https://www.coingecko.com/en/coins/weth\",\n },\n USDM: {\n coingecko: \"https://www.coingecko.com/en/coins/usd\",\n },\n USDC: {\n coingecko: \"https://www.coingecko.com/en/coins/usd-coin\",\n }\n },\n [METER_MAINNET]: {\n ETH: {\n coingecko: \"https://www.coingecko.com/en/coins/weth\",\n },\n USDM: {\n coingecko: \"https://www.coingecko.com/en/coins/usd\",\n },\n USDC: {\n coingecko: \"https://www.coingecko.com/en/coins/usd-coin\",\n }\n },\n [TAIKO_MAINNET]: {\n ETH: {\n coingecko: \"https://www.coingecko.com/en/coins/weth\",\n },\n USDM: {\n coingecko: \"https://www.coingecko.com/en/coins/usd\",\n },\n USDC: {\n coingecko: \"https://www.coingecko.com/en/coins/usd-coin\",\n }\n },\n};\n\nexport const GLP_POOL_COLORS = {\n ETH: \"#6062a6\",\n BTC: \"#F7931A\",\n WBTC: \"#F7931A\",\n USDC: \"#2775CA\",\n USDM: \"#133763\",\n TLOS: \"#6a47b5\",\n USDT: \"#67B18A\",\n MIM: \"#9695F8\",\n FRAX: \"#000\",\n DAI: \"#FAC044\",\n UNI: \"#E9167C\",\n AVAX: \"#E84142\",\n LINK: \"#3256D6\",\n};\n\nexport const TOKENS_MAP: { [chainId: number]: { [address: string]: Token } } = {};\nexport const TOKENS_BY_SYMBOL_MAP: { [chainId: number]: { [symbol: string]: Token } } = {};\nexport const WRAPPED_TOKENS_MAP: { [chainId: number]: Token } = {};\nexport const NATIVE_TOKENS_MAP: { [chainId: number]: Token } = {};\n\nconst CHAIN_IDS = [TELOS_TESTNET, TELOS_MAINNET, FUSE_MAINNET, METER_MAINNET, TAIKO_MAINNET];\n\nfor (let j = 0; j < CHAIN_IDS.length; j++) {\n const chainId = CHAIN_IDS[j];\n TOKENS_MAP[chainId] = {};\n TOKENS_BY_SYMBOL_MAP[chainId] = {};\n let tokens = TOKENS[chainId];\n if (ADDITIONAL_TOKENS[chainId]) {\n tokens = tokens.concat(ADDITIONAL_TOKENS[chainId]);\n }\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n TOKENS_MAP[chainId][token.address] = token;\n TOKENS_BY_SYMBOL_MAP[chainId][token.symbol] = token;\n }\n}\n\nfor (const chainId of CHAIN_IDS) {\n for (const token of TOKENS[chainId]) {\n if (token.isWrapped) {\n WRAPPED_TOKENS_MAP[chainId] = token;\n } else if (token.isNative) {\n NATIVE_TOKENS_MAP[chainId] = token;\n }\n }\n}\n\nexport function getWrappedToken(chainId: number) {\n return WRAPPED_TOKENS_MAP[chainId];\n}\n\nexport function getNativeToken(chainId: number) {\n return NATIVE_TOKENS_MAP[chainId];\n}\n\nexport function getTokens(chainId: number) {\n return TOKENS[chainId];\n}\n\nexport function isValidToken(chainId: number, address: string) {\n if (!TOKENS_MAP[chainId]) {\n throw new Error(`Incorrect chainId ${chainId}`);\n }\n return address in TOKENS_MAP[chainId];\n}\n\nexport function getToken(chainId: number, address: string) {\n if (!TOKENS_MAP[chainId]) {\n throw new Error(`Incorrect chainId ${chainId}`);\n }\n if (!TOKENS_MAP[chainId][address]) {\n throw new Error(`Incorrect address \"${address}\" for chainId ${chainId}`);\n }\n return TOKENS_MAP[chainId][address];\n}\n\nexport function getTokenBySymbol(chainId: number, symbol: string) {\n const token = TOKENS_BY_SYMBOL_MAP[chainId][symbol];\n if (!token) {\n throw new Error(`Incorrect symbol \"${symbol}\" for chainId ${chainId}`);\n }\n return token;\n}\n\nexport function getWhitelistedTokens(chainId: number) {\n return TOKENS[chainId].filter((token) => token.symbol !== \"USDG\");\n}\n\nexport function getVisibleTokens(chainId: number) {\n return getWhitelistedTokens(chainId).filter((token) => !token.isWrapped && !token.isTempHidden);\n}\n","import { BigNumber, ethers } from \"ethers\";\nimport {\n adjustForDecimals,\n DUST_BNB,\n USD_DECIMALS,\n} from \"lib/legacy\";\nimport { getWhitelistedTokens } from \"config/tokens\";\nimport { getExplorerUrl } from \"config/chains\";\nimport { InfoTokens, Token, TokenInfo } from \"./types\";\n\nconst { AddressZero } = ethers.constants;\n\nexport function getTokenUrl(chainId: number, address: string) {\n if (!address) {\n return getExplorerUrl(chainId);\n }\n return getExplorerUrl(chainId) + \"token/\" + address;\n}\n\nexport function getTokenInfo(\n infoTokens: InfoTokens,\n tokenAddress: string,\n replaceNative?: boolean,\n nativeTokenAddress?: string\n) {\n if (replaceNative && tokenAddress === nativeTokenAddress) {\n return infoTokens[AddressZero];\n }\n\n return infoTokens[tokenAddress];\n}\n\n\n\nexport function getMostAbundantStableToken(chainId: number, infoTokens: InfoTokens) {\n const whitelistedTokens = getWhitelistedTokens(chainId);\n let availableAmount;\n let stableToken = whitelistedTokens.find((t) => t.isStable);\n\n for (let i = 0; i < whitelistedTokens.length; i++) {\n const info = getTokenInfo(infoTokens, whitelistedTokens[i].address);\n if (!info.isStable || !info.availableAmount) {\n continue;\n }\n\n const adjustedAvailableAmount = adjustForDecimals(info.availableAmount, info.decimals, USD_DECIMALS);\n if (!availableAmount || adjustedAvailableAmount.gt(availableAmount)) {\n availableAmount = adjustedAvailableAmount;\n stableToken = info;\n }\n }\n\n return stableToken as TokenInfo;\n}\n\nexport function shouldRaiseGasError(token: TokenInfo, amount?: BigNumber) {\n if (!amount) {\n return false;\n }\n if (token.address !== AddressZero) {\n return false;\n }\n if (!token.balance) {\n return false;\n }\n if (amount.gte(token.balance)) {\n return true;\n }\n if (token.balance.sub(amount).lt(DUST_BNB)) {\n return true;\n }\n return false;\n}\n\nexport const replaceNativeTokenAddress = (path: string[], nativeTokenAddress: string) => {\n if (!path) {\n return;\n }\n\n let updatedPath: string[] = [];\n\n for (let i = 0; i < path.length; i++) {\n let address = path[i];\n if (address === AddressZero) {\n address = nativeTokenAddress;\n }\n updatedPath.push(address);\n }\n\n return updatedPath;\n};\n","import { useEffect, useState } from \"react\";\nimport { FALLBACK_PROVIDERS, getFallbackRpcUrl, getRpcUrl } from \"config/chains\";\nimport { ethers } from \"ethers\";\nimport { JsonRpcProvider, Web3Provider } from \"@ethersproject/providers\";\n\nexport function getProvider(library: Web3Provider | undefined, chainId: number) {\n let provider;\n\n if (library) {\n return library.getSigner();\n }\n\n provider = getRpcUrl(chainId);\n\n return new ethers.providers.StaticJsonRpcProvider(\n provider,\n // @ts-ignore incorrect Network param types\n { chainId }\n );\n}\n\nexport function getFallbackProvider(chainId: number) {\n if (!FALLBACK_PROVIDERS[chainId]) {\n return;\n }\n\n const provider = getFallbackRpcUrl(chainId);\n\n return new ethers.providers.StaticJsonRpcProvider(\n provider,\n // @ts-ignore incorrect Network param types\n { chainId }\n );\n}\n\nexport function useJsonRpcProvider(chainId: number) {\n const [provider, setProvider] = useState();\n\n useEffect(() => {\n async function initializeProvider() {\n const rpcUrl = getRpcUrl(chainId);\n\n if (!rpcUrl) return;\n\n const provider = new ethers.providers.JsonRpcProvider(rpcUrl);\n\n await provider.ready;\n\n setProvider(provider);\n }\n\n initializeProvider();\n }, [chainId]);\n\n return { provider };\n}\n","import { BigNumber, BigNumberish, ethers } from \"ethers\";\n\nexport function bigNumberify(n: BigNumberish) {\n try {\n return BigNumber.from(n);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"bigNumberify error\", e);\n return undefined;\n }\n}\n\nexport function expandDecimals(n: BigNumberish, decimals: number): BigNumber {\n // @ts-ignore\n return bigNumberify(n).mul(bigNumberify(10).pow(decimals));\n}\n\nexport const trimZeroDecimals = (amount: string) => {\n if (parseFloat(amount) === parseInt(amount)) {\n return parseInt(amount).toString();\n }\n return amount;\n};\n\nexport const limitDecimals = (amount: BigNumberish, maxDecimals?: number) => {\n let amountStr = amount.toString();\n if (maxDecimals === undefined) {\n return amountStr;\n }\n if (maxDecimals === 0) {\n return amountStr.split(\".\")[0];\n }\n const dotIndex = amountStr.indexOf(\".\");\n if (dotIndex !== -1) {\n let decimals = amountStr.length - dotIndex - 1;\n if (decimals > maxDecimals) {\n amountStr = amountStr.substr(0, amountStr.length - (decimals - maxDecimals));\n }\n }\n return amountStr;\n};\n\nexport const padDecimals = (amount: BigNumberish, minDecimals: number) => {\n let amountStr = amount.toString();\n const dotIndex = amountStr.indexOf(\".\");\n if (dotIndex !== -1) {\n const decimals = amountStr.length - dotIndex - 1;\n if (decimals < minDecimals) {\n amountStr = amountStr.padEnd(amountStr.length + (minDecimals - decimals), \"0\");\n }\n } else {\n amountStr = amountStr + \".0000\";\n }\n return amountStr;\n};\n\nexport const formatAmount = (\n amount: BigNumberish | undefined,\n tokenDecimals: number,\n displayDecimals?: number,\n useCommas?: boolean,\n defaultValue?: string\n) => {\n if (!defaultValue) {\n defaultValue = \"...\";\n }\n if (amount === undefined || amount.toString().length === 0) {\n return defaultValue;\n }\n if (displayDecimals === undefined) {\n displayDecimals = 4;\n }\n let amountStr = ethers.utils.formatUnits(amount, tokenDecimals);\n amountStr = limitDecimals(amountStr, displayDecimals);\n if (displayDecimals !== 0) {\n amountStr = padDecimals(amountStr, displayDecimals);\n }\n if (useCommas) {\n return numberWithCommas(amountStr);\n }\n return amountStr;\n};\n\nexport const formatKeyAmount = (\n map: any,\n key: string,\n tokenDecimals: number,\n displayDecimals: number,\n useCommas?: boolean\n) => {\n if (!map || !map[key]) {\n return \"...\";\n }\n\n return formatAmount(map[key], tokenDecimals, displayDecimals, useCommas);\n};\n\nexport const formatArrayAmount = (\n arr: any[],\n index: number,\n tokenDecimals: number,\n displayDecimals?: number,\n useCommas?: boolean\n) => {\n if (!arr || !arr[index]) {\n return \"...\";\n }\n\n return formatAmount(arr[index], tokenDecimals, displayDecimals, useCommas);\n};\n\nexport const formatAmountFree = (amount: BigNumberish, tokenDecimals: number, displayDecimals?: number) => {\n if (!amount) {\n return \"...\";\n }\n let amountStr = ethers.utils.formatUnits(amount, tokenDecimals);\n amountStr = limitDecimals(amountStr, displayDecimals);\n return trimZeroDecimals(amountStr);\n};\n\nexport const parseValue = (value: string, tokenDecimals: number) => {\n const pValue = parseFloat(value);\n\n if (isNaN(pValue)) {\n return undefined;\n }\n\n value = limitDecimals(value, tokenDecimals);\n const amount = ethers.utils.parseUnits(value, tokenDecimals);\n return bigNumberify(amount);\n};\n\nexport function numberWithCommas(x: BigNumberish) {\n if (!x) {\n return \"...\";\n }\n\n var parts = x.toString().split(\".\");\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n return parts.join(\".\");\n}\n","import { useWeb3React } from \"@web3-react/core\";\nimport { SELECTED_NETWORK_LOCAL_STORAGE_KEY } from \"config/localStorage\";\nimport { DEFAULT_CHAIN_ID, SUPPORTED_CHAIN_IDS } from \"config/chains\";\n\nexport function useChainId() {\n let { chainId } = useWeb3React();\n if (!chainId) {\n const chainIdFromLocalStorage = localStorage.getItem(SELECTED_NETWORK_LOCAL_STORAGE_KEY);\n if (chainIdFromLocalStorage) {\n chainId = parseInt(chainIdFromLocalStorage);\n if (!chainId) {\n // localstorage value is invalid\n localStorage.removeItem(SELECTED_NETWORK_LOCAL_STORAGE_KEY);\n }\n }\n }\n\n if (!chainId || !SUPPORTED_CHAIN_IDS.includes(chainId)) {\n chainId = DEFAULT_CHAIN_ID;\n }\n\n return { chainId };\n}\n","import { useEffect, useState } from \"react\";\nimport { useWeb3React } from \"@web3-react/core\";\nimport { BigNumber, ethers } from \"ethers\";\nimport { getContract } from \"config/contracts\";\nimport useSWR from \"swr\";\n\nimport OrderBookReader from \"abis/OrderBookReader.json\";\nimport OrderBook from \"abis/OrderBook.json\";\n\nimport { CHAIN_ID, ETH_MAINNET, getExplorerUrl, getRpcUrl } from \"config/chains\";\nimport { getServerBaseUrl } from \"config/backend\";\nimport { getMostAbundantStableToken } from \"domain/tokens\";\nimport { getTokenInfo } from \"domain/tokens/utils\";\nimport { getProvider } from \"./rpc\";\nimport { bigNumberify, expandDecimals, formatAmount } from \"./numbers\";\nimport { isValidToken } from \"config/tokens\";\nimport { useChainId } from \"./chains\";\nimport { isValidTimestamp } from \"./dates\";\nimport { t } from \"@lingui/macro\";\nimport { isLocal } from \"config/env\";\n\nconst { AddressZero } = ethers.constants;\n\n// use a random placeholder account instead of the zero address as the zero address might have tokens\nexport const PLACEHOLDER_ACCOUNT = ethers.Wallet.createRandom().address;\n\nexport const MIN_PROFIT_TIME = 0;\n\nexport const BASIS_POINTS_DIVISOR = 10000;\nexport const MAX_LEVERAGE = 100 * BASIS_POINTS_DIVISOR;\nexport const MAX_ALLOWED_LEVERAGE = 50 * BASIS_POINTS_DIVISOR;\n\nexport const MAX_PRICE_DEVIATION_BASIS_POINTS = 750;\nexport const DEFAULT_GAS_LIMIT = 1 * 1000 * 1000;\nexport const SECONDS_PER_YEAR = 31536000;\nexport const SECONDS_PER_DAY = 86400;\nexport const DIA_DECIMALS = 8;\nexport const METER_DECIMALS = 8;\nexport const USDG_DECIMALS = 18;\nexport const USD_DECIMALS = 30;\nexport const DEPOSIT_FEE = 30;\nexport const DUST_BNB = \"2000000000000000\";\nexport const DUST_USD = expandDecimals(1, USD_DECIMALS);\nexport const PRECISION = expandDecimals(1, 30);\nexport const MST_DECIMALS = 18;\nexport const NATIVE_DECIMALS = 18;\n\nexport const DEFAULT_MAX_USDG_AMOUNT = expandDecimals(200 * 1000 * 1000, 18);\n\nexport const TAX_BASIS_POINTS = 60;\nexport const STABLE_TAX_BASIS_POINTS = 5;\nexport const MINT_BURN_FEE_BASIS_POINTS = 25;\nexport const SWAP_FEE_BASIS_POINTS = 30;\nexport const STABLE_SWAP_FEE_BASIS_POINTS = 4;\nexport const MARGIN_FEE_BASIS_POINTS = 40;\n\nexport const LIQUIDATION_FEE = expandDecimals(5, USD_DECIMALS);\n\nexport const TRADES_PAGE_SIZE = 100;\n\nexport const GLP_COOLDOWN_DURATION = 0;\nexport const THRESHOLD_REDEMPTION_VALUE = expandDecimals(993, 27); // 0.993\nexport const FUNDING_RATE_PRECISION = 1000000;\n\nexport const SWAP = \"Swap\";\nexport const INCREASE = \"Increase\";\nexport const DECREASE = \"Decrease\";\nexport const LONG = \"Long\";\nexport const SHORT = \"Short\";\n\nexport const MARKET = \"Market\";\nexport const LIMIT = \"Limit\";\nexport const STOP = \"Stop\";\nexport const LEVERAGE_ORDER_OPTIONS = [MARKET]; // , LIMIT, STOP\nexport const SWAP_ORDER_OPTIONS = [MARKET]; // LIMIT\nexport const SWAP_OPTIONS = [LONG, SHORT, SWAP];\nexport const DEFAULT_SLIPPAGE_AMOUNT = 30;\nexport const DEFAULT_HIGHER_SLIPPAGE_AMOUNT = 100;\n\nexport const REFERRAL_CODE_QUERY_PARAM = \"ref\";\nexport const MAX_REFERRAL_CODE_LENGTH = 20;\n\nexport const MIN_PROFIT_BIPS = 0;\n\nexport function deserialize(data) {\n for (const [key, value] of Object.entries(data) as any) {\n if (value._type === \"BigNumber\") {\n data[key] = bigNumberify(value.value);\n }\n }\n return data;\n}\n\nexport function isHomeSite() {\n return process.env.REACT_APP_IS_HOME_SITE === \"true\";\n}\n\nexport function getLiquidationPriceFromDelta({ liquidationAmount, size, collateral, averagePrice, isLong }) {\n if (!size || size.eq(0)) {\n return;\n }\n\n if (liquidationAmount.gt(collateral)) {\n const liquidationDelta = liquidationAmount.sub(collateral);\n const priceDelta = liquidationDelta.mul(averagePrice).div(size);\n\n return isLong ? averagePrice.add(priceDelta) : averagePrice.sub(priceDelta);\n }\n\n const liquidationDelta = collateral.sub(liquidationAmount);\n const priceDelta = liquidationDelta.mul(averagePrice).div(size);\n\n return isLong ? averagePrice.sub(priceDelta) : averagePrice.add(priceDelta);\n}\n\nexport function getMarginFee(sizeDelta) {\n if (!sizeDelta) {\n return bigNumberify(0);\n }\n const afterFeeUsd = sizeDelta.mul(BASIS_POINTS_DIVISOR - MARGIN_FEE_BASIS_POINTS).div(BASIS_POINTS_DIVISOR);\n return sizeDelta.sub(afterFeeUsd);\n}\n\nexport function isTriggerRatioInverted(fromTokenInfo, toTokenInfo) {\n if (!toTokenInfo || !fromTokenInfo) return false;\n if (toTokenInfo.isStable || toTokenInfo.isUsdg) return true;\n if (toTokenInfo.maxPrice) return toTokenInfo.maxPrice.lt(fromTokenInfo.maxPrice);\n return false;\n}\n\nexport function getExchangeRate(tokenAInfo, tokenBInfo, inverted) {\n if (!tokenAInfo || !tokenAInfo.minPrice || !tokenBInfo || !tokenBInfo.maxPrice) {\n return;\n }\n if (inverted) {\n return tokenAInfo.minPrice.mul(PRECISION).div(tokenBInfo.maxPrice);\n }\n return tokenBInfo.maxPrice.mul(PRECISION).div(tokenAInfo.minPrice);\n}\n\nexport function shouldInvertTriggerRatio(tokenA, tokenB) {\n if (tokenB.isStable || tokenB.isUsdg) return true;\n if (tokenB.maxPrice && tokenA.maxPrice && tokenB.maxPrice.lt(tokenA.maxPrice)) return true;\n return false;\n}\n\nexport function getExchangeRateDisplay(rate, tokenA, tokenB, opts: { omitSymbols?: boolean } = {}) {\n if (!rate || !tokenA || !tokenB) return \"...\";\n if (shouldInvertTriggerRatio(tokenA, tokenB)) {\n [tokenA, tokenB] = [tokenB, tokenA];\n rate = PRECISION.mul(PRECISION).div(rate);\n }\n const rateValue = formatAmount(rate, USD_DECIMALS, tokenA.isStable || tokenA.isUsdg ? 2 : 4, true);\n if (opts.omitSymbols) {\n return rateValue;\n }\n return `${rateValue} ${tokenA.symbol} / ${tokenB.symbol}`;\n}\n\nconst adjustForDecimalsFactory = (n) => (number) => {\n if (n === 0) {\n return number;\n }\n if (n > 0) {\n return number.mul(expandDecimals(1, n));\n }\n return number.div(expandDecimals(1, -n));\n};\n\nexport function adjustForDecimals(amount, divDecimals, mulDecimals) {\n return amount.mul(expandDecimals(1, mulDecimals)).div(expandDecimals(1, divDecimals));\n}\n\nexport function getTargetUsdgAmount(token, usdgSupply, totalTokenWeights) {\n if (!token || !token.weight || !usdgSupply) {\n return;\n }\n\n if (usdgSupply.eq(0)) {\n return bigNumberify(0);\n }\n\n return token.weight.mul(usdgSupply).div(totalTokenWeights);\n}\n\nexport function getFeeBasisPoints(\n token,\n usdgDelta,\n feeBasisPoints,\n taxBasisPoints,\n increment,\n usdgSupply,\n totalTokenWeights\n) {\n if (!token || !token.usdgAmount || !usdgSupply || !totalTokenWeights) {\n return 0;\n }\n\n feeBasisPoints = bigNumberify(feeBasisPoints);\n taxBasisPoints = bigNumberify(taxBasisPoints);\n\n const initialAmount = token.usdgAmount;\n let nextAmount = initialAmount.add(usdgDelta);\n if (!increment) {\n nextAmount = usdgDelta.gt(initialAmount) ? bigNumberify(0) : initialAmount.sub(usdgDelta);\n }\n\n const targetAmount = getTargetUsdgAmount(token, usdgSupply, totalTokenWeights);\n if (!targetAmount || targetAmount.eq(0)) {\n return feeBasisPoints.toNumber();\n }\n\n const initialDiff = initialAmount.gt(targetAmount)\n ? initialAmount.sub(targetAmount)\n : targetAmount.sub(initialAmount);\n const nextDiff = nextAmount.gt(targetAmount) ? nextAmount.sub(targetAmount) : targetAmount.sub(nextAmount);\n\n if (nextDiff.lt(initialDiff)) {\n const rebateBps = taxBasisPoints.mul(initialDiff).div(targetAmount);\n return rebateBps.gt(feeBasisPoints) ? 0 : feeBasisPoints.sub(rebateBps).toNumber();\n }\n\n let averageDiff = initialDiff.add(nextDiff).div(2);\n if (averageDiff.gt(targetAmount)) {\n averageDiff = targetAmount;\n }\n const taxBps = taxBasisPoints.mul(averageDiff).div(targetAmount);\n return feeBasisPoints.add(taxBps).toNumber();\n}\n\nexport function getBuyGlpToAmount(fromAmount, swapTokenAddress, infoTokens, glpPrice, usdgSupply, totalTokenWeights) {\n const defaultValue = { amount: bigNumberify(0), feeBasisPoints: 0 };\n if (!fromAmount || !swapTokenAddress || !infoTokens || !glpPrice || !usdgSupply || !totalTokenWeights) {\n return defaultValue;\n }\n\n const swapToken = getTokenInfo(infoTokens, swapTokenAddress);\n if (!swapToken || !swapToken.minPrice) {\n return defaultValue;\n }\n\n let glpAmount = fromAmount.mul(swapToken.minPrice).div(glpPrice);\n glpAmount = adjustForDecimals(glpAmount, swapToken.decimals, USDG_DECIMALS);\n\n let usdgAmount = fromAmount.mul(swapToken.minPrice).div(PRECISION);\n usdgAmount = adjustForDecimals(usdgAmount, swapToken.decimals, USDG_DECIMALS);\n const feeBasisPoints = getFeeBasisPoints(\n swapToken,\n usdgAmount,\n MINT_BURN_FEE_BASIS_POINTS,\n TAX_BASIS_POINTS,\n true,\n usdgSupply,\n totalTokenWeights\n );\n\n glpAmount = glpAmount.mul(BASIS_POINTS_DIVISOR - feeBasisPoints).div(BASIS_POINTS_DIVISOR);\n\n return { amount: glpAmount, feeBasisPoints };\n}\n\nexport function getSellGlpFromAmount(toAmount, swapTokenAddress, infoTokens, glpPrice, usdgSupply, totalTokenWeights) {\n const defaultValue = { amount: bigNumberify(0), feeBasisPoints: 0 };\n if (!toAmount || !swapTokenAddress || !infoTokens || !glpPrice || !usdgSupply || !totalTokenWeights) {\n return defaultValue;\n }\n\n const swapToken = getTokenInfo(infoTokens, swapTokenAddress);\n if (!swapToken || !swapToken.maxPrice) {\n return defaultValue;\n }\n\n let glpAmount = toAmount.mul(swapToken.maxPrice).div(glpPrice);\n glpAmount = adjustForDecimals(glpAmount, swapToken.decimals, USDG_DECIMALS);\n\n let usdgAmount = toAmount.mul(swapToken.maxPrice).div(PRECISION);\n usdgAmount = adjustForDecimals(usdgAmount, swapToken.decimals, USDG_DECIMALS);\n const feeBasisPoints = getFeeBasisPoints(\n swapToken,\n usdgAmount,\n MINT_BURN_FEE_BASIS_POINTS,\n TAX_BASIS_POINTS,\n false,\n usdgSupply,\n totalTokenWeights\n );\n\n glpAmount = glpAmount.mul(BASIS_POINTS_DIVISOR).div(BASIS_POINTS_DIVISOR - feeBasisPoints);\n\n return { amount: glpAmount, feeBasisPoints };\n}\n\nexport function getBuyGlpFromAmount(toAmount, fromTokenAddress, infoTokens, glpPrice, usdgSupply, totalTokenWeights) {\n const defaultValue = { amount: bigNumberify(0) };\n if (!toAmount || !fromTokenAddress || !infoTokens || !glpPrice || !usdgSupply || !totalTokenWeights) {\n return defaultValue;\n }\n\n const fromToken = getTokenInfo(infoTokens, fromTokenAddress);\n if (!fromToken || !fromToken.minPrice) {\n return defaultValue;\n }\n\n let fromAmount = toAmount.mul(glpPrice).div(fromToken.minPrice);\n fromAmount = adjustForDecimals(fromAmount, MST_DECIMALS, fromToken.decimals);\n\n const usdgAmount = toAmount.mul(glpPrice).div(PRECISION);\n const feeBasisPoints = getFeeBasisPoints(\n fromToken,\n usdgAmount,\n MINT_BURN_FEE_BASIS_POINTS,\n TAX_BASIS_POINTS,\n true,\n usdgSupply,\n totalTokenWeights\n );\n\n fromAmount = fromAmount.mul(BASIS_POINTS_DIVISOR).div(BASIS_POINTS_DIVISOR - feeBasisPoints);\n\n return { amount: fromAmount, feeBasisPoints };\n}\n\nexport function getSellGlpToAmount(toAmount, fromTokenAddress, infoTokens, glpPrice, usdgSupply, totalTokenWeights) {\n const defaultValue = { amount: bigNumberify(0) };\n if (!toAmount || !fromTokenAddress || !infoTokens || !glpPrice || !usdgSupply || !totalTokenWeights) {\n return defaultValue;\n }\n\n const fromToken = getTokenInfo(infoTokens, fromTokenAddress);\n if (!fromToken || !fromToken.maxPrice) {\n return defaultValue;\n }\n\n let fromAmount = toAmount.mul(glpPrice).div(fromToken.maxPrice);\n fromAmount = adjustForDecimals(fromAmount, MST_DECIMALS, fromToken.decimals);\n\n const usdgAmount = toAmount.mul(glpPrice).div(PRECISION);\n const feeBasisPoints = getFeeBasisPoints(\n fromToken,\n usdgAmount,\n MINT_BURN_FEE_BASIS_POINTS,\n TAX_BASIS_POINTS,\n false,\n usdgSupply,\n totalTokenWeights\n );\n\n fromAmount = fromAmount.mul(BASIS_POINTS_DIVISOR - feeBasisPoints).div(BASIS_POINTS_DIVISOR);\n\n return { amount: fromAmount, feeBasisPoints };\n}\n\nexport function getNextFromAmount(\n chainId,\n toAmount,\n fromTokenAddress,\n toTokenAddress,\n infoTokens,\n toTokenPriceUsd,\n ratio,\n usdgSupply,\n totalTokenWeights,\n forSwap\n) {\n const defaultValue = { amount: bigNumberify(0) };\n\n if (!toAmount || !fromTokenAddress || !toTokenAddress || !infoTokens) {\n return defaultValue;\n }\n\n if (fromTokenAddress === toTokenAddress) {\n return { amount: toAmount };\n }\n\n const fromToken = getTokenInfo(infoTokens, fromTokenAddress);\n const toToken = getTokenInfo(infoTokens, toTokenAddress);\n\n if (fromToken.isNative && toToken.isWrapped) {\n return { amount: toAmount };\n }\n\n if (fromToken.isWrapped && toToken.isNative) {\n return { amount: toAmount };\n }\n\n // the realtime price should be used if it is for a transaction to open / close a position\n // or if the transaction involves doing a swap and opening / closing a position\n // otherwise use the contract price instead of realtime price for swaps\n\n let fromTokenMinPrice;\n if (fromToken) {\n fromTokenMinPrice = forSwap ? fromToken.contractMinPrice : fromToken.minPrice;\n }\n\n let toTokenMaxPrice;\n if (toToken) {\n toTokenMaxPrice = forSwap ? toToken.contractMaxPrice : toToken.maxPrice;\n }\n\n if (!fromToken || !fromTokenMinPrice || !toToken || !toTokenMaxPrice) {\n return defaultValue;\n }\n\n const adjustDecimals = adjustForDecimalsFactory(fromToken.decimals - toToken.decimals);\n\n let fromAmountBasedOnRatio;\n if (ratio && !ratio.isZero()) {\n fromAmountBasedOnRatio = toAmount.mul(ratio).div(PRECISION);\n }\n\n const fromAmount =\n ratio && !ratio.isZero() ? fromAmountBasedOnRatio : toAmount.mul(toTokenMaxPrice).div(fromTokenMinPrice);\n\n let usdgAmount = fromAmount.mul(fromTokenMinPrice).div(PRECISION);\n usdgAmount = adjustForDecimals(usdgAmount, toToken.decimals, USDG_DECIMALS);\n const swapFeeBasisPoints =\n fromToken.isStable && toToken.isStable ? STABLE_SWAP_FEE_BASIS_POINTS : SWAP_FEE_BASIS_POINTS;\n const taxBasisPoints = fromToken.isStable && toToken.isStable ? STABLE_TAX_BASIS_POINTS : TAX_BASIS_POINTS;\n const feeBasisPoints0 = getFeeBasisPoints(\n fromToken,\n usdgAmount,\n swapFeeBasisPoints,\n taxBasisPoints,\n true,\n usdgSupply,\n totalTokenWeights\n );\n const feeBasisPoints1 = getFeeBasisPoints(\n toToken,\n usdgAmount,\n swapFeeBasisPoints,\n taxBasisPoints,\n false,\n usdgSupply,\n totalTokenWeights\n );\n const feeBasisPoints = feeBasisPoints0 > feeBasisPoints1 ? feeBasisPoints0 : feeBasisPoints1;\n\n return {\n amount: adjustDecimals(fromAmount.mul(BASIS_POINTS_DIVISOR).div(BASIS_POINTS_DIVISOR - feeBasisPoints)),\n feeBasisPoints,\n };\n}\n\nexport function getProfitPrice(closePrice, position) {\n let profitPrice;\n if (position && position.averagePrice && closePrice) {\n profitPrice = position.isLong\n ? position.averagePrice.mul(BASIS_POINTS_DIVISOR + MIN_PROFIT_BIPS).div(BASIS_POINTS_DIVISOR)\n : position.averagePrice.mul(BASIS_POINTS_DIVISOR - MIN_PROFIT_BIPS).div(BASIS_POINTS_DIVISOR);\n }\n return profitPrice;\n}\n\nexport function calculatePositionDelta(\n price,\n { size, collateral, isLong, averagePrice, lastIncreasedTime },\n sizeDelta\n) {\n if (!sizeDelta) {\n sizeDelta = size;\n }\n const priceDelta = averagePrice.gt(price) ? averagePrice.sub(price) : price.sub(averagePrice);\n let delta = sizeDelta.mul(priceDelta).div(averagePrice);\n const pendingDelta = delta;\n\n const minProfitExpired = lastIncreasedTime + MIN_PROFIT_TIME < Date.now() / 1000;\n const hasProfit = isLong ? price.gt(averagePrice) : price.lt(averagePrice);\n if (!minProfitExpired && hasProfit && delta.mul(BASIS_POINTS_DIVISOR).lte(size.mul(MIN_PROFIT_BIPS))) {\n delta = bigNumberify(0);\n }\n\n const deltaPercentage = delta.mul(BASIS_POINTS_DIVISOR).div(collateral);\n const pendingDeltaPercentage = pendingDelta.mul(BASIS_POINTS_DIVISOR).div(collateral);\n\n return {\n delta,\n pendingDelta,\n pendingDeltaPercentage,\n hasProfit,\n deltaPercentage,\n };\n}\n\nexport function getDeltaStr({ delta, deltaPercentage, hasProfit }) {\n let deltaStr;\n let deltaPercentageStr;\n\n if (delta.gt(0)) {\n deltaStr = hasProfit ? \"+\" : \"-\";\n deltaPercentageStr = hasProfit ? \"+\" : \"-\";\n } else {\n deltaStr = \"\";\n deltaPercentageStr = \"\";\n }\n deltaStr += `$${formatAmount(delta, USD_DECIMALS, 2, true)}`;\n deltaPercentageStr += `${formatAmount(deltaPercentage, 2, 2)}%`;\n\n return { deltaStr, deltaPercentageStr };\n}\n\nexport function getLeverage({\n size,\n sizeDelta,\n increaseSize,\n collateral,\n collateralDelta,\n increaseCollateral,\n entryFundingRate,\n cumulativeFundingRate,\n hasProfit,\n delta,\n includeDelta,\n}) {\n if (!size && !sizeDelta) {\n return;\n }\n if (!collateral && !collateralDelta) {\n return;\n }\n\n let nextSize = size ? size : bigNumberify(0);\n if (sizeDelta) {\n if (increaseSize) {\n nextSize = size.add(sizeDelta);\n } else {\n if (sizeDelta.gte(size)) {\n return;\n }\n nextSize = size.sub(sizeDelta);\n }\n }\n\n let remainingCollateral = collateral ? collateral : bigNumberify(0);\n if (collateralDelta) {\n if (increaseCollateral) {\n remainingCollateral = collateral.add(collateralDelta);\n } else {\n if (collateralDelta.gte(collateral)) {\n return;\n }\n remainingCollateral = collateral.sub(collateralDelta);\n }\n }\n\n if (delta && includeDelta) {\n if (hasProfit) {\n remainingCollateral = remainingCollateral.add(delta);\n } else {\n if (delta.gt(remainingCollateral)) {\n return;\n }\n\n remainingCollateral = remainingCollateral.sub(delta);\n }\n }\n\n if (remainingCollateral.eq(0)) {\n return;\n }\n\n remainingCollateral = sizeDelta\n ? remainingCollateral.mul(BASIS_POINTS_DIVISOR - MARGIN_FEE_BASIS_POINTS).div(BASIS_POINTS_DIVISOR)\n : remainingCollateral;\n if (entryFundingRate && cumulativeFundingRate) {\n const fundingFee = size.mul(cumulativeFundingRate.sub(entryFundingRate)).div(FUNDING_RATE_PRECISION);\n remainingCollateral = remainingCollateral.sub(fundingFee);\n }\n\n return nextSize.mul(BASIS_POINTS_DIVISOR).div(remainingCollateral);\n}\n\nexport function getFundingFee(data: {\n size: BigNumber;\n entryFundingRate?: BigNumber;\n cumulativeFundingRate?: BigNumber;\n}) {\n let { entryFundingRate, cumulativeFundingRate, size } = data;\n\n if (entryFundingRate && cumulativeFundingRate) {\n return size.mul(cumulativeFundingRate.sub(entryFundingRate)).div(FUNDING_RATE_PRECISION);\n }\n\n return;\n}\n\nexport function getLiquidationPrice(data) {\n let {\n isLong,\n size,\n collateral,\n averagePrice,\n entryFundingRate,\n cumulativeFundingRate,\n sizeDelta,\n collateralDelta,\n increaseCollateral,\n increaseSize,\n delta,\n hasProfit,\n includeDelta,\n } = data;\n if (!size || !collateral || !averagePrice) {\n return;\n }\n\n let nextSize = size ? size : bigNumberify(0);\n let remainingCollateral = collateral;\n\n if (sizeDelta) {\n if (increaseSize) {\n nextSize = size.add(sizeDelta);\n } else {\n if (sizeDelta.gte(size)) {\n return;\n }\n nextSize = size.sub(sizeDelta);\n }\n\n const marginFee = getMarginFee(sizeDelta);\n remainingCollateral = remainingCollateral.sub(marginFee);\n\n if (includeDelta && !hasProfit) {\n const adjustedDelta = sizeDelta.mul(delta).div(size);\n remainingCollateral = remainingCollateral.sub(adjustedDelta);\n }\n }\n\n if (collateralDelta) {\n if (increaseCollateral) {\n remainingCollateral = remainingCollateral.add(collateralDelta);\n } else {\n if (collateralDelta.gte(remainingCollateral)) {\n return;\n }\n remainingCollateral = remainingCollateral.sub(collateralDelta);\n }\n }\n\n let positionFee = getMarginFee(size).add(LIQUIDATION_FEE);\n\n if (entryFundingRate && cumulativeFundingRate) {\n const fundingFee = size.mul(cumulativeFundingRate.sub(entryFundingRate)).div(FUNDING_RATE_PRECISION);\n positionFee = positionFee.add(fundingFee);\n }\n\n const liquidationPriceForFees = getLiquidationPriceFromDelta({\n liquidationAmount: positionFee,\n size: nextSize,\n collateral: remainingCollateral,\n averagePrice,\n isLong,\n });\n\n const liquidationPriceForMaxLeverage = getLiquidationPriceFromDelta({\n liquidationAmount: nextSize.mul(BASIS_POINTS_DIVISOR).div(MAX_LEVERAGE),\n size: nextSize,\n collateral: remainingCollateral,\n averagePrice,\n isLong,\n });\n\n if (!liquidationPriceForFees) {\n return liquidationPriceForMaxLeverage;\n }\n\n if (!liquidationPriceForMaxLeverage) {\n return liquidationPriceForFees;\n }\n\n if (isLong) {\n // return the higher price\n return liquidationPriceForFees.gt(liquidationPriceForMaxLeverage)\n ? liquidationPriceForFees\n : liquidationPriceForMaxLeverage;\n }\n\n // return the lower price\n return liquidationPriceForFees.lt(liquidationPriceForMaxLeverage)\n ? liquidationPriceForFees\n : liquidationPriceForMaxLeverage;\n}\n\nexport function getPositionKey(\n account: string,\n collateralTokenAddress: string,\n indexTokenAddress: string,\n isLong: boolean,\n nativeTokenAddress?: string\n) {\n const tokenAddress0 = collateralTokenAddress === AddressZero ? nativeTokenAddress : collateralTokenAddress;\n const tokenAddress1 = indexTokenAddress === AddressZero ? nativeTokenAddress : indexTokenAddress;\n return account + \":\" + tokenAddress0 + \":\" + tokenAddress1 + \":\" + isLong;\n}\n\nexport function getPositionContractKey(account, collateralToken, indexToken, isLong) {\n return ethers.utils.solidityKeccak256(\n [\"address\", \"address\", \"address\", \"bool\"],\n [account, collateralToken, indexToken, isLong]\n );\n}\n\nexport function getSwapFeeBasisPoints(isStable) {\n return isStable ? STABLE_SWAP_FEE_BASIS_POINTS : SWAP_FEE_BASIS_POINTS;\n}\n\nexport function shortenAddress(address, length) {\n if (!length) {\n return \"\";\n }\n if (!address) {\n return address;\n }\n if (address.length < 10) {\n return address;\n }\n let left = Math.floor((length - 3) / 2) + 1;\n return address.substring(0, left) + \"...\" + address.substring(address.length - (length - (left + 3)), address.length);\n}\n\nexport function useENS(address) {\n const [ensName, setENSName] = useState();\n\n useEffect(() => {\n async function resolveENS() {\n if (address) {\n const provider = new ethers.providers.JsonRpcProvider(getRpcUrl(ETH_MAINNET));\n const name = await provider.lookupAddress(address.toLowerCase());\n if (name) setENSName(name);\n }\n }\n resolveENS();\n }, [address]);\n\n return { ensName };\n}\n\nfunction _parseOrdersData(ordersData, account, indexes, extractor, uintPropsLength, addressPropsLength) {\n if (!ordersData || ordersData.length === 0) {\n return [];\n }\n const [uintProps, addressProps] = ordersData;\n const count = uintProps.length / uintPropsLength;\n\n const orders: any[] = [];\n for (let i = 0; i < count; i++) {\n const sliced = addressProps\n .slice(addressPropsLength * i, addressPropsLength * (i + 1))\n .concat(uintProps.slice(uintPropsLength * i, uintPropsLength * (i + 1)));\n\n if (sliced[0] === AddressZero && sliced[1] === AddressZero) {\n continue;\n }\n\n const order = extractor(sliced);\n order.index = indexes[i];\n order.account = account;\n orders.push(order);\n }\n\n return orders;\n}\n\nfunction parseDecreaseOrdersData(chainId, decreaseOrdersData, account, indexes) {\n const extractor = (sliced) => {\n const isLong = sliced[4].toString() === \"1\";\n return {\n collateralToken: sliced[0],\n indexToken: sliced[1],\n collateralDelta: sliced[2],\n sizeDelta: sliced[3],\n isLong,\n triggerPrice: sliced[5],\n triggerAboveThreshold: sliced[6].toString() === \"1\",\n type: DECREASE,\n };\n };\n return _parseOrdersData(decreaseOrdersData, account, indexes, extractor, 5, 2).filter((order) => {\n return isValidToken(chainId, order.collateralToken) && isValidToken(chainId, order.indexToken);\n });\n}\n\nfunction parseIncreaseOrdersData(chainId, increaseOrdersData, account, indexes) {\n const extractor = (sliced) => {\n const isLong = sliced[5].toString() === \"1\";\n return {\n purchaseToken: sliced[0],\n collateralToken: sliced[1],\n indexToken: sliced[2],\n purchaseTokenAmount: sliced[3],\n sizeDelta: sliced[4],\n isLong,\n triggerPrice: sliced[6],\n triggerAboveThreshold: sliced[7].toString() === \"1\",\n type: INCREASE,\n };\n };\n return _parseOrdersData(increaseOrdersData, account, indexes, extractor, 5, 3).filter((order) => {\n return (\n isValidToken(chainId, order.purchaseToken) &&\n isValidToken(chainId, order.collateralToken) &&\n isValidToken(chainId, order.indexToken)\n );\n });\n}\n\nfunction parseSwapOrdersData(chainId, swapOrdersData, account, indexes) {\n if (!swapOrdersData || !swapOrdersData.length) {\n return [];\n }\n\n const extractor = (sliced) => {\n const triggerAboveThreshold = sliced[6].toString() === \"1\";\n const shouldUnwrap = sliced[7].toString() === \"1\";\n\n return {\n path: [sliced[0], sliced[1], sliced[2]].filter((address) => address !== AddressZero),\n amountIn: sliced[3],\n minOut: sliced[4],\n triggerRatio: sliced[5],\n triggerAboveThreshold,\n type: SWAP,\n shouldUnwrap,\n };\n };\n return _parseOrdersData(swapOrdersData, account, indexes, extractor, 5, 3).filter((order) => {\n return order.path.every((token) => isValidToken(chainId, token));\n });\n}\n\nexport function getOrderKey(order) {\n return `${order.type}-${order.account}-${order.index}`;\n}\n\nexport function useAccountOrders(flagOrdersEnabled, overrideAccount) {\n const { library, account: connectedAccount } = useWeb3React();\n const active = true; // this is used in Actions.js so set active to always be true\n const account = overrideAccount || connectedAccount;\n\n const { chainId } = useChainId();\n const shouldRequest = active && account && flagOrdersEnabled;\n\n const orderBookAddress = getContract(chainId, \"OrderBook\");\n const orderBookReaderAddress = getContract(chainId, \"OrderBookReader\");\n const key: any = shouldRequest ? [active, chainId, orderBookAddress, account] : false;\n const {\n data: orders = [],\n mutate: updateOrders,\n error: ordersError,\n } = useSWR(key, {\n dedupingInterval: 5000,\n fetcher: async (active, chainId, orderBookAddress, account) => {\n const provider = getProvider(library, chainId);\n const orderBookContract = new ethers.Contract(orderBookAddress, OrderBook.abi, provider);\n const orderBookReaderContract = new ethers.Contract(orderBookReaderAddress, OrderBookReader.abi, provider);\n\n const fetchIndexesFromServer = () => {\n const ordersIndexesUrl = `${getServerBaseUrl(chainId)}/orders_indices?account=${account}`;\n return fetch(ordersIndexesUrl)\n .then(async (res) => {\n const json = await res.json();\n const ret = {};\n for (const key of Object.keys(json)) {\n ret[key.toLowerCase()] = json[key].map((val) => parseInt(val.value)).sort((a, b) => a - b);\n }\n\n return ret;\n })\n .catch(() => ({ swap: [], increase: [], decrease: [] }));\n };\n\n const fetchLastIndex = async (type) => {\n const method = type.toLowerCase() + \"OrdersIndex\";\n return await orderBookContract[method](account).then((res) => bigNumberify(res._hex)!.toNumber());\n };\n\n const fetchLastIndexes = async () => {\n const [swap, increase, decrease] = await Promise.all([\n fetchLastIndex(\"swap\"),\n fetchLastIndex(\"increase\"),\n fetchLastIndex(\"decrease\"),\n ]);\n\n return { swap, increase, decrease };\n };\n\n const getRange = (to: number, from?: number) => {\n const LIMIT = 10;\n const _indexes: number[] = [];\n from = from || Math.max(to - LIMIT, 0);\n for (let i = to - 1; i >= from; i--) {\n _indexes.push(i);\n }\n return _indexes;\n };\n\n const getIndexes = (knownIndexes, lastIndex) => {\n if (knownIndexes.length === 0) {\n return getRange(lastIndex);\n }\n return [\n ...knownIndexes,\n ...getRange(lastIndex, knownIndexes[knownIndexes.length - 1] + 1).sort((a, b) => b - a),\n ];\n };\n\n const getOrders = async (method, knownIndexes, lastIndex, parseFunc) => {\n const indexes = getIndexes(knownIndexes, lastIndex);\n const ordersData = await orderBookReaderContract[method](orderBookAddress, account, indexes);\n const orders = parseFunc(chainId, ordersData, account, indexes);\n\n return orders;\n };\n\n try {\n const [serverIndexes, lastIndexes]: any = await Promise.all([fetchIndexesFromServer(), fetchLastIndexes()]);\n const [swapOrders = [], increaseOrders = [], decreaseOrders = []] = await Promise.all([\n getOrders(\"getSwapOrders\", serverIndexes.swap, lastIndexes.swap, parseSwapOrdersData),\n getOrders(\"getIncreaseOrders\", serverIndexes.increase, lastIndexes.increase, parseIncreaseOrdersData),\n getOrders(\"getDecreaseOrders\", serverIndexes.decrease, lastIndexes.decrease, parseDecreaseOrdersData),\n ]);\n return [...swapOrders, ...increaseOrders, ...decreaseOrders];\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.error(ex);\n }\n },\n });\n\n return [orders, updateOrders, ordersError];\n}\n\nexport function getAccountUrl(chainId, account) {\n if (!account) {\n return getExplorerUrl(chainId);\n }\n return getExplorerUrl(chainId) + \"address/\" + account;\n}\n\nexport function isMobileDevice(navigator) {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n}\n\nexport const CHART_PERIODS = {\n // \"5m\": 60 * 5,\n \"15m\": 60 * 15,\n \"1h\": 60 * 60,\n \"4h\": 60 * 60 * 4,\n // \"1d\": 60 * 60 * 24,\n};\n\nexport function getTotalVolumeSum(volumes) {\n if (!volumes || volumes.length === 0) {\n return;\n }\n\n let volume = bigNumberify(0)!;\n\n for (let i = 0; i < volumes.length; i++) {\n volume = volume.add(volumes[i].data.volume);\n }\n\n return volume;\n}\n\nexport function getBalanceAndSupplyData(balances) {\n if (!balances || balances.length === 0) {\n return {};\n }\n\n const keys = [\"gmx\", \"esGmx\", \"glp\", \"stakedGmxTracker\"];\n const balanceData = {};\n const supplyData = {};\n const propsLength = 2;\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n balanceData[key] = balances[i * propsLength];\n supplyData[key] = balances[i * propsLength + 1];\n }\n\n return { balanceData, supplyData };\n}\n\nexport function getDepositBalanceData(depositBalances) {\n if (!depositBalances || depositBalances.length === 0) {\n return;\n }\n\n const keys = [\n \"gmxInStakedGmx\",\n ];\n const data = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n data[key] = depositBalances[i];\n }\n\n return data;\n}\n\nexport function getVestingData(vestingInfo) {\n if (!vestingInfo || vestingInfo.length === 0) {\n return;\n }\n\n const keys = [\"gmxVester\", \"glpVester\"];\n const data = {};\n const propsLength = 7;\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n data[key] = {\n pairAmount: vestingInfo[i * propsLength],\n vestedAmount: vestingInfo[i * propsLength + 1],\n escrowedBalance: vestingInfo[i * propsLength + 2],\n claimedAmounts: vestingInfo[i * propsLength + 3],\n claimable: vestingInfo[i * propsLength + 4],\n maxVestableAmount: vestingInfo[i * propsLength + 5],\n averageStakedAmount: vestingInfo[i * propsLength + 6],\n };\n\n data[key + \"PairAmount\"] = data[key].pairAmount;\n data[key + \"VestedAmount\"] = data[key].vestedAmount;\n data[key + \"EscrowedBalance\"] = data[key].escrowedBalance;\n data[key + \"ClaimSum\"] = data[key].claimedAmounts.add(data[key].claimable);\n data[key + \"Claimable\"] = data[key].claimable;\n data[key + \"MaxVestableAmount\"] = data[key].maxVestableAmount;\n data[key + \"AverageStakedAmount\"] = data[key].averageStakedAmount;\n }\n\n return data;\n}\n\nexport function getStakingData(stakingInfo) {\n if (!stakingInfo || stakingInfo.length === 0) {\n return;\n }\n\n const keys = [\"stakedGmxTracker\", \"bonusGmxTracker\", \"feeGmxTracker\", \"stakedGlpTracker\", \"feeGlpTracker\"];\n const data = {};\n const propsLength = 5;\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n data[key] = {\n claimable: stakingInfo[i * propsLength],\n tokensPerInterval: stakingInfo[i * propsLength + 1],\n averageStakedAmounts: stakingInfo[i * propsLength + 2],\n cumulativeRewards: stakingInfo[i * propsLength + 3],\n totalSupply: stakingInfo[i * propsLength + 4],\n };\n }\n\n return data;\n}\n\nexport function getProcessedData(\n balanceData,\n userTotalMstStaked,\n mstPrice,\n mstSupply,\n stakingData,\n EthPrice\n) {\n if (\n !balanceData ||\n !userTotalMstStaked ||\n !mstPrice ||\n !mstSupply ||\n !stakingData ||\n !EthPrice\n ) {\n return {};\n }\n if (Object.keys(stakingData).length === 0 && stakingData.constructor === Object) {\n return {};\n }\n\n const data: any = {};\n\n data.mstBalance = balanceData;\n data.mstBalanceUsd = balanceData.mul(mstPrice).div(expandDecimals(1, 18));\n\n data.userTotalMstStaked = userTotalMstStaked \n data.userTotalMstStakedUsd = userTotalMstStaked.mul(mstPrice).div(expandDecimals(1, 18))\n\n data.mstSupply = bigNumberify(mstSupply);\n data.mstSupplyUsd = data.mstSupply.mul(mstPrice).div(expandDecimals(1, 18));\n data.feeMstSupply = stakingData.feeGmxTracker.totalSupply;\n data.feeMstSupplyUsd = data.feeMstSupply.mul(mstPrice).div(expandDecimals(1, 18));\n data.feeMstTrackerAnnualRewardsUsd = stakingData.feeGmxTracker.tokensPerInterval.mul(SECONDS_PER_YEAR).mul(EthPrice);\n data.mstSuperStakingApr =\n data.feeMstSupplyUsd && data.feeMstSupplyUsd.gt(0)\n ? data.feeMstTrackerAnnualRewardsUsd.mul(BASIS_POINTS_DIVISOR).div(data.feeMstSupplyUsd)\n : bigNumberify(0);\n return data;\n}\n\nexport function getPageTitle(data) {\n return `${data} | Decentralized\n Trading Platform | Meridian`;\n}\n\nexport function isHashZero(value) {\n return value === ethers.constants.HashZero;\n}\nexport function isAddressZero(value) {\n return value === ethers.constants.AddressZero;\n}\n\nexport function getHomeUrl() {\n if (isLocal()) {\n return \"http://localhost:3010\";\n }\n\n return \"https://app.meridianfinance.net\";\n}\n\nexport function getAppBaseUrl() {\n if (isLocal()) {\n return \"http://localhost:3011/#\";\n }\n\n return \"https://app.meridianfinance.net/#\";\n}\n\nexport function getRootShareApiUrl() {\n if (isLocal()) {\n return \"https://api-eight-zeta-94.vercel.app\";\n }\n\n return \"https://api-eight-zeta-94.vercel.app\";\n}\n\nexport function getTradePageUrl() {\n if (isLocal()) {\n return \"http://localhost:3011/#/trade\";\n }\n\n return \"https://app.meridianfinance.net/#/trade\";\n}\n\nexport function importImage(name) {\n let tokenImage: { default: string } | null = null;\n\n try {\n tokenImage = require(\"img/\" + name);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n\n return tokenImage?.default;\n}\n\nexport function getTwitterIntentURL(text, url = \"\", hashtag = \"\") {\n let finalURL = \"https://twitter.com/intent/tweet?text=\";\n if (text.length > 0) {\n finalURL += Array.isArray(text) ? text.map((t) => encodeURIComponent(t)).join(\"%0a%0a\") : encodeURIComponent(text);\n if (hashtag.length > 0) {\n finalURL += \"&hashtags=\" + encodeURIComponent(hashtag.replace(/#/g, \"\"));\n }\n if (url.length > 0) {\n finalURL += \"&url=\" + encodeURIComponent(url);\n }\n }\n return finalURL;\n}\n\nexport function getPositionForOrder(account, order, positionsMap) {\n const key = getPositionKey(account, order.collateralToken, order.indexToken, order.isLong);\n\n const position = positionsMap[key];\n\n return position && position.size && position.size.gt(0) ? position : null;\n}\n\nexport function getOrderError(account, order, positionsMap, position) {\n if (order.type !== DECREASE) {\n return;\n }\n\n const positionForOrder = position ? position : getPositionForOrder(account, order, positionsMap);\n\n if (!positionForOrder) {\n return t`No open position, order cannot be executed unless a position is opened`;\n }\n if (positionForOrder.size.lt(order.sizeDelta)) {\n return t`Order size is bigger than position, will only be executable if position increases`;\n }\n\n if (positionForOrder.size.gt(order.sizeDelta)) {\n if (positionForOrder.size.sub(order.sizeDelta).lt(positionForOrder.collateral.sub(order.collateralDelta))) {\n return t`Order cannot be executed as it would reduce the position's leverage below 1`;\n }\n if (positionForOrder.size.sub(order.sizeDelta).lt(expandDecimals(5, USD_DECIMALS))) {\n return t`Order cannot be executed as the remaining position would be smaller than $5.00`;\n }\n }\n}\n\nexport function arrayURLFetcher(...urlArr) {\n const fetcher = (url) => fetch(url).then((res) => res.json());\n return Promise.all(urlArr.map(fetcher));\n}\n\nexport function shouldShowRedirectModal(timestamp) {\n const thirtyDays = 1000 * 60 * 60 * 24 * 30;\n const expiryTime = timestamp + thirtyDays;\n return !isValidTimestamp(timestamp) || Date.now() > expiryTime;\n}\n","import { format as formatDateFn } from \"date-fns\";\n\nexport function formatDateTime(time: number) {\n return formatDateFn(time * 1000, \"dd MMM yyyy, h:mm a\");\n}\n\nexport function formatDate(time: number) {\n return formatDateFn(time * 1000, \"dd MMM yyyy\");\n}\n\nexport function getTimeRemaining(time: number) {\n const now = parseInt(String(Date.now() / 1000));\n if (time < now) {\n return \"0h 0m\";\n }\n const diff = time - now;\n const hours = parseInt(String(diff / (60 * 60)));\n const minutes = parseInt(String((diff - hours * 60 * 60) / 60));\n return `${hours}h ${minutes}m`;\n}\n\nexport function isValidTimestamp(timestamp: any) {\n return new Date(timestamp).getTime() > 0;\n}\n","import { t } from \"@lingui/macro\";\nimport \"./Footer.css\";\nimport twitterIcon from \"img/ic_twitter.svg\";\nimport discordIcon from \"img/ic_discord.svg\";\nimport telegramIcon from \"img/ic_telegram.svg\";\nimport githubIcon from \"img/ic_github.svg\";\nimport mediumIcon from \"img/ic_medium.svg\";\n\ntype Link = {\n text: string;\n link: string;\n external?: boolean;\n isAppLink?: boolean;\n};\n\ntype SocialLink = {\n link: string;\n name: string;\n icon: string;\n};\n\nexport const FOOTER_LINKS: { home: Link[]; app: Link[] } = {\n home: [\n // { text: t`Terms and Conditions`, link: \"/terms-and-conditions\" },\n // { text: t`Referral Terms`, link: \"/referral-terms\" },\n // { text: t`Media Kit`, link: \"https://docs.meridianfinance.net/media-kit\", external: true },\n // { text: \"Jobs\", link: \"/jobs\", isAppLink: true },\n ],\n app: [\n // { text: t`Media Kit`, link: \"https://docs.meridianfinance.net/media-kit\", external: true },\n // { text: \"Jobs\", link: \"/jobs\" },\n ],\n};\n\n// { link: \"https://discord.com/invite/K6XRMCx7XM\", name: \"Discord\", icon: discordIcon },\n\nexport const SOCIAL_LINKS: SocialLink[] = [\n { link: \"https://twitter.com/MeridianFi\", name: \"Twitter\", icon: twitterIcon },\n { link: \"https://medium.com/@meridianFinance\", name: \"Medium\", icon: mediumIcon },\n { link: \"https://github.com/MeridianDollar\", name: \"Github\", icon: githubIcon },\n { link: \"https://t.me/meridianFinance1\", name: \"Telegram\", icon: telegramIcon },\n];\n","import React from \"react\";\nimport cx from \"classnames\";\nimport \"./ExternalLink.scss\";\n\ntype Props = {\n href: string;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction ExternalLink({ href, children, className }: Props) {\n const classNames = cx(\"link-underline\", className);\n return (\n \n {children}\n \n );\n}\n\nexport default ExternalLink;\n","import React from \"react\";\nimport cx from \"classnames\";\nimport \"./Footer.css\";\nimport logoImg from \"img/ic_omnidex_footer.svg\";\nimport { NavLink } from \"react-router-dom\";\nimport { isHomeSite, getAppBaseUrl, shouldShowRedirectModal } from \"lib/legacy\";\nimport { FOOTER_LINKS, SOCIAL_LINKS } from \"./constants\";\nimport ExternalLink from \"components/ExternalLink/ExternalLink\";\n\ntype Props = { showRedirectModal?: (to: string) => void; redirectPopupTimestamp?: () => void };\n\nexport default function Footer({ showRedirectModal, redirectPopupTimestamp }: Props) {\n const isHome = isHomeSite();\n\n return (\n
\n
\n
\n \"MetaMask\"\n
\n
\n {SOCIAL_LINKS.map((platform) => {\n return (\n \n {platform.name}\n \n );\n })}\n
\n
\n {FOOTER_LINKS[isHome ? \"home\" : \"app\"].map(({ external, text, link, isAppLink }) => {\n if (external) {\n return (\n \n {text}\n \n );\n }\n if (isAppLink) {\n if (shouldShowRedirectModal(redirectPopupTimestamp)) {\n return (\n showRedirectModal && showRedirectModal(link)}\n >\n {text}\n
\n );\n } else {\n const baseUrl = getAppBaseUrl();\n return (\n \n {text}\n \n );\n }\n }\n return (\n \n {text}\n \n );\n })}\n
\n
\n \n );\n}\n","import { ApolloClient, InMemoryCache } from \"@apollo/client\";\n\nexport function createClient(uri: string) {\n return new ApolloClient({\n uri,\n cache: new InMemoryCache(),\n });\n}\n","import { TELOS_TESTNET, TELOS_MAINNET } from \"./chains\";\n\nexport const SUBGRAPH_URLS = {\n\n [TELOS_TESTNET]: {\n stats: \"https://subgraph.meridianfinance.net/subgraphs/name/perpetuals-stats\",\n referrals: \"https://subgraph.meridianfinance.net/subgraphs/name/perpetuals-referrals\",\n },\n\n [TELOS_MAINNET]: {\n stats: \"https://subgraph.meridianfinance.net/subgraphs/name/perpetuals-stats\",\n referrals: \"https://subgraph.meridianfinance.net/subgraphs/name/perpetuals-referrals\",\n },\n\n common: {\n chainLink: \"https://api.thegraph.com/subgraphs/name/deividask/chainlink\",\n },\n};\n","import { createClient } from \"./utils\";\nimport { SUBGRAPH_URLS } from \"config/subgraph\";\nimport {TELOS_TESTNET, TELOS_MAINNET } from \"config/chains\";\n\nexport const chainlinkClient = createClient(SUBGRAPH_URLS.common.chainLink);\n\nexport const telosMainnetReferralsGraphClient = createClient(SUBGRAPH_URLS[TELOS_MAINNET].referrals);\nexport const telosMainnetGraphClient = createClient(SUBGRAPH_URLS[TELOS_MAINNET].stats);\n\n\nexport function getGmxGraphClient(chainId: number) {\n if (chainId === TELOS_MAINNET) {\n return telosMainnetGraphClient;\n } else if (chainId === TELOS_TESTNET) {\n return null;\n }\n\n throw new Error(`Unsupported chain ${chainId}`);\n}\n","import { toast, ToastContent, ToastOptions } from \"react-toastify\";\n\nexport const helperToast = {\n success: (content: ToastContent, opts?: ToastOptions) => {\n toast.dismiss();\n toast.success(content, opts);\n },\n error: (content: ToastContent, opts?: ToastOptions) => {\n toast.dismiss();\n toast.error(content, opts);\n },\n};\n","import { useState } from \"react\";\n\nexport function ToastifyDebug(props) {\n const [open, setOpen] = useState(false);\n return (\n
\n setOpen((old) => !old)}>\n {open ? \"Hide error\" : \"Show error\"}\n \n {open &&
{props.children}
}\n
\n );\n}\n","export const NOT_ENOUGH_FUNDS = \"NOT_ENOUGH_FUNDS\";\nexport const USER_DENIED = \"USER_DENIED\";\nexport const SLIPPAGE = \"SLIPPAGE\";\nexport const RPC_ERROR = \"RPC_ERROR\";\nexport const NETWORK_CHANGED = \"NETWORK_CHANGED\";\n\ntype ErrorPattern = { msg?: string; code?: number };\n\nconst TX_ERROR_PATTERNS: { [key: string]: ErrorPattern[] } = {\n [NOT_ENOUGH_FUNDS]: [\n { msg: \"not enough funds for gas\" },\n { msg: \"failed to execute call with revert code InsufficientGasFunds\" },\n ],\n [USER_DENIED]: [{ msg: \"User denied transaction signature\" }],\n [SLIPPAGE]: [{ msg: \"Router: mark price lower than limit\" }, { msg: \"Router: mark price higher than limit\" }],\n [NETWORK_CHANGED]: [{ msg: \"underlying network changed\" }],\n [RPC_ERROR]: [\n // @see https://eips.ethereum.org/EIPS/eip-1474#error-codes\n { code: -32005 },\n { msg: \"Non-200 status code\" },\n { msg: \"Request limit exceeded\" },\n { msg: \"Internal JSON-RPC error\" },\n { msg: \"Response has no error or result\" },\n { msg: \"we can't execute this request\" },\n { msg: \"couldn't connect to the network\" },\n ],\n};\n\ntype TxError = {\n message?: string;\n code?: number;\n data?: any;\n};\n\nexport function extractError(ex: TxError) {\n if (!ex) {\n return [];\n }\n\n const message = ex.data?.message || ex.message;\n const code = ex.code;\n\n if (!message && !code) {\n return [];\n }\n\n for (const [type, patterns] of Object.entries(TX_ERROR_PATTERNS)) {\n for (const pattern of patterns) {\n const matchCode = pattern.code && code === pattern.code;\n const matchMessage = pattern.msg && message && message.includes(pattern.msg);\n\n if (matchCode || matchMessage) {\n return [message, type, ex.data];\n }\n }\n }\n\n return [message, null, ex.data];\n}\n","import { Provider } from \"@ethersproject/providers\";\nimport { Contract } from \"ethers\";\nimport { GAS_PRICE_ADJUSTMENT_MAP, MAX_GAS_PRICE_MAP } from \"config/chains\";\nimport { bigNumberify } from \"../numbers\";\n\nexport async function setGasPrice(txnOpts: any, provider: Provider, chainId: number) {\n let maxGasPrice = MAX_GAS_PRICE_MAP[chainId];\n const premium = GAS_PRICE_ADJUSTMENT_MAP[chainId] || bigNumberify(0);\n\n const gasPrice = await provider.getGasPrice();\n\n if (maxGasPrice) {\n if (gasPrice.gt(maxGasPrice)) {\n maxGasPrice = gasPrice;\n }\n\n const feeData = await provider.getFeeData();\n\n // the wallet provider might not return maxPriorityFeePerGas in feeData\n // in which case we should fallback to the usual getGasPrice flow handled below\n if (feeData && feeData.maxPriorityFeePerGas) {\n txnOpts.maxFeePerGas = maxGasPrice;\n txnOpts.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas.add(premium);\n return;\n }\n }\n\n txnOpts.gasPrice = gasPrice.add(premium);\n return;\n}\n\nexport async function getGasLimit(contract: Contract, method, params = [], value) {\n const defaultValue = bigNumberify(0);\n\n if (!value) {\n value = defaultValue;\n }\n\n let gasLimit = await contract.estimateGas[method](...params, { value });\n\n if (gasLimit.lt(22000)) {\n gasLimit = bigNumberify(22000)!;\n }\n\n return gasLimit.mul(11000).div(10000); // add a 10% buffer\n}\n","import { useEffect, useState } from \"react\";\nimport { InjectedConnector } from \"@web3-react/injected-connector\";\nimport {\n TELOS_MAINNET,\n TELOS_TESTNET,\n DEFAULT_CHAIN_ID,\n getChainName,\n getRpcUrl,\n NETWORK_METADATA,\n SUPPORTED_CHAIN_IDS,\n} from \"config/chains\";\nimport { UnsupportedChainIdError, useWeb3React } from \"@web3-react/core\";\nimport {\n CURRENT_PROVIDER_LOCALSTORAGE_KEY,\n SELECTED_NETWORK_LOCAL_STORAGE_KEY,\n SHOULD_EAGER_CONNECT_LOCALSTORAGE_KEY,\n WALLET_CONNECT_LOCALSTORAGE_KEY,\n WALLET_LINK_LOCALSTORAGE_PREFIX,\n} from \"config/localStorage\";\nimport {\n UserRejectedRequestError as UserRejectedRequestErrorWalletConnect,\n WalletConnectConnector,\n} from \"@web3-react/walletconnect-connector\";\nimport { helperToast } from \"../helperToast\";\nimport { t, Trans } from \"@lingui/macro\";\n\nimport { Web3ReactManagerFunctions } from \"@web3-react/core/dist/types\";\n\nexport type NetworkMetadata = {\n chainId: string;\n chainName: string;\n launchTime: number;\n nativeCurrency: {\n name: string;\n symbol: string;\n decimals: number;\n };\n rpcUrls: string[];\n blockExplorerUrls: string[];\n};\n\nconst injectedConnector = new InjectedConnector({\n supportedChainIds: SUPPORTED_CHAIN_IDS,\n});\n\nexport function hasMetaMaskWalletExtension() {\n return window.ethereum;\n}\n\nexport function hasCoinBaseWalletExtension() {\n const { ethereum } = window;\n\n if (!ethereum?.providers && !ethereum?.isCoinbaseWallet) {\n return false;\n }\n\n return window.ethereum.isCoinbaseWallet || ethereum.providers.find(({ isCoinbaseWallet }) => isCoinbaseWallet);\n}\n\nexport function activateInjectedProvider(providerName: string) {\n const { ethereum } = window;\n\n if (!ethereum?.providers && !ethereum?.isCoinbaseWallet && !ethereum?.isMetaMask) {\n return undefined;\n }\n\n let provider;\n if (ethereum?.providers) {\n switch (providerName) {\n case \"CoinBase\":\n provider = ethereum.providers.find(({ isCoinbaseWallet }) => isCoinbaseWallet);\n break;\n case \"MetaMask\":\n default:\n provider = ethereum.providers.find(({ isMetaMask }) => isMetaMask);\n break;\n }\n }\n\n if (provider) {\n ethereum.setSelectedProvider(provider);\n }\n}\n\nexport function getInjectedConnector() {\n return injectedConnector;\n}\n\nexport const getWalletConnectConnector = () => {\n const chainId = Number(localStorage.getItem(SELECTED_NETWORK_LOCAL_STORAGE_KEY)) || DEFAULT_CHAIN_ID;\n\n return new WalletConnectConnector({\n rpc: {\n [TELOS_MAINNET]: getRpcUrl(TELOS_MAINNET)!,\n [TELOS_TESTNET]: getRpcUrl(TELOS_MAINNET)!,\n },\n qrcode: true,\n chainId,\n });\n};\n\nexport function clearWalletConnectData() {\n localStorage.removeItem(WALLET_CONNECT_LOCALSTORAGE_KEY);\n}\n\nexport function clearWalletLinkData() {\n Object.entries(localStorage)\n .map((x) => x[0])\n .filter((x) => x.startsWith(WALLET_LINK_LOCALSTORAGE_PREFIX))\n .map((x) => localStorage.removeItem(x));\n}\n\nexport function useEagerConnect(setActivatingConnector: (connector: any) => void) {\n const { activate, active } = useWeb3React();\n const [tried, setTried] = useState(false);\n\n useEffect(() => {\n (async function () {\n if (Boolean(localStorage.getItem(SHOULD_EAGER_CONNECT_LOCALSTORAGE_KEY)) !== true) {\n // only works with WalletConnect\n clearWalletConnectData();\n // force clear localStorage connection for MM/CB Wallet (Brave legacy)\n clearWalletLinkData();\n return;\n }\n\n let shouldTryWalletConnect = false;\n try {\n // naive validation to not trigger Wallet Connect if data is corrupted\n const rawData = localStorage.getItem(WALLET_CONNECT_LOCALSTORAGE_KEY);\n if (rawData) {\n const data = JSON.parse(rawData);\n if (data && data.connected) {\n shouldTryWalletConnect = true;\n }\n }\n } catch (ex) {\n if (ex instanceof SyntaxError) {\n // rawData is not a valid json\n clearWalletConnectData();\n }\n }\n\n if (shouldTryWalletConnect) {\n try {\n const connector = getWalletConnectConnector();\n setActivatingConnector(connector);\n await activate(connector, undefined, true);\n // in case Wallet Connect is activated no need to check injected wallet\n return;\n } catch (ex) {\n // assume data in localstorage is corrupted and delete it to not retry on next page load\n clearWalletConnectData();\n }\n }\n\n try {\n const connector = getInjectedConnector();\n const currentProviderName = localStorage.getItem(CURRENT_PROVIDER_LOCALSTORAGE_KEY) ?? false;\n if (currentProviderName !== false) {\n activateInjectedProvider(currentProviderName);\n }\n const authorized = await connector.isAuthorized();\n if (authorized) {\n setActivatingConnector(connector);\n await activate(connector, undefined, true);\n }\n } catch (ex) {}\n\n setTried(true);\n })();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // intentionally only running on mount (make sure it's only mounted once :))\n\n // if the connection worked, wait until we get confirmation of that to flip the flag\n useEffect(() => {\n if (!tried && active) {\n setTried(true);\n }\n }, [tried, active]);\n\n return tried;\n}\n\nexport function useInactiveListener(suppress = false) {\n const injected = getInjectedConnector();\n const { active, error, activate } = useWeb3React();\n\n useEffect(() => {\n const { ethereum } = window;\n if (ethereum && ethereum.on && !active && !error && !suppress) {\n const handleConnect = () => {\n activate(injected);\n };\n const handleChainChanged = (chainId) => {\n activate(injected);\n };\n const handleAccountsChanged = (accounts) => {\n if (accounts.length > 0) {\n activate(injected);\n }\n };\n const handleNetworkChanged = (networkId) => {\n activate(injected);\n };\n\n ethereum.on(\"connect\", handleConnect);\n ethereum.on(\"chainChanged\", handleChainChanged);\n ethereum.on(\"accountsChanged\", handleAccountsChanged);\n ethereum.on(\"networkChanged\", handleNetworkChanged);\n\n return () => {\n if (ethereum.removeListener) {\n ethereum.removeListener(\"connect\", handleConnect);\n ethereum.removeListener(\"chainChanged\", handleChainChanged);\n ethereum.removeListener(\"accountsChanged\", handleAccountsChanged);\n ethereum.removeListener(\"networkChanged\", handleNetworkChanged);\n }\n };\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [active, error, suppress, activate]);\n}\n\nexport const addNetwork = async (metadata: NetworkMetadata) => {\n await window.ethereum.request({ method: \"wallet_addEthereumChain\", params: [metadata] }).catch();\n};\n\nexport const switchNetwork = async (chainId: number, active?: boolean) => {\n if (!active) {\n // chainId in localStorage allows to switch network even if wallet is not connected\n // or there is no wallet at all\n localStorage.setItem(SELECTED_NETWORK_LOCAL_STORAGE_KEY, String(chainId));\n document.location.reload();\n return;\n }\n\n try {\n const chainIdHex = \"0x\" + chainId.toString(16);\n await window.ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: chainIdHex }],\n });\n helperToast.success(t`Connected to ${getChainName(chainId)}`);\n return getChainName(chainId);\n } catch (ex) {\n // https://docs.metamask.io/guide/rpc-api.html#other-rpc-methods\n // This error code indicates that the chain has not been added to MetaMask.\n // 4001 error means user has denied the request\n // If the error code is not 4001, then we need to add the network\n if (ex.code !== 4001) {\n return await addNetwork(NETWORK_METADATA[chainId]);\n }\n\n // eslint-disable-next-line no-console\n console.error(\"error\", ex);\n }\n};\n\nexport const getWalletConnectHandler = (\n activate: Web3ReactManagerFunctions[\"activate\"],\n deactivate: Web3ReactManagerFunctions[\"deactivate\"],\n setActivatingConnector: (connector?: WalletConnectConnector) => void\n) => {\n const fn = async () => {\n const walletConnect = getWalletConnectConnector();\n setActivatingConnector(walletConnect);\n activate(walletConnect, (ex) => {\n if (ex instanceof UnsupportedChainIdError) {\n helperToast.error(t`Unsupported chain. Switch to Arbitrum network on your wallet and try again`);\n // eslint-disable-next-line no-console\n console.warn(ex);\n } else if (!(ex instanceof UserRejectedRequestErrorWalletConnect)) {\n helperToast.error(ex.message);\n // eslint-disable-next-line no-console\n console.warn(ex);\n }\n clearWalletConnectData();\n deactivate();\n });\n };\n return fn;\n};\n\nexport const getInjectedHandler = (\n activate: Web3ReactManagerFunctions[\"activate\"],\n deactivate: Web3ReactManagerFunctions[\"deactivate\"]\n) => {\n const fn = async () => {\n activate(getInjectedConnector(), (e) => {\n if (e instanceof UnsupportedChainIdError) {\n showUnsupportedNetworkToast();\n\n deactivate();\n\n return;\n }\n\n const errString = e.message ?? e.toString();\n helperToast.error(errString);\n });\n };\n return fn;\n};\n\nexport async function addTokenToMetamask(token: {\n address: string;\n symbol: string;\n decimals: number;\n imageUrl?: string;\n}) {\n try {\n const wasAdded = await window.ethereum.request({\n method: \"wallet_watchAsset\",\n params: {\n type: \"ERC20\",\n options: {\n address: token.address,\n symbol: token.symbol,\n decimals: token.decimals,\n image: token.imageUrl,\n },\n },\n });\n if (wasAdded) {\n // https://github.com/MetaMask/metamask-extension/issues/11377\n // We can show a toast message when the token is added to metamask but because of the bug we can't. Once the bug is fixed we can show a toast message.\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n}\n\nexport function showUnsupportedNetworkToast() {\n const chainId = Number(localStorage.getItem(SELECTED_NETWORK_LOCAL_STORAGE_KEY)) || DEFAULT_CHAIN_ID;\n\n helperToast.error(\n
\n \n
Your wallet is not connected to {getChainName(chainId)}.
\n
\n
switchNetwork(chainId, true)}>\n Switch to {getChainName(chainId)}\n
\n
\n
\n );\n}\n\nexport function useHandleUnsupportedNetwork() {\n const { error, deactivate } = useWeb3React();\n\n useEffect(() => {\n if (error instanceof UnsupportedChainIdError) {\n showUnsupportedNetworkToast();\n\n deactivate();\n }\n }, [error, deactivate]);\n}\n","import { BigNumber, Contract } from \"ethers\";\nimport { helperToast } from \"../helperToast\";\nimport { ToastifyDebug } from \"components/ToastifyDebug/ToastifyDebug\";\nimport { extractError, NETWORK_CHANGED, NOT_ENOUGH_FUNDS, RPC_ERROR, SLIPPAGE, USER_DENIED } from \"./transactionErrors\";\nimport { getGasLimit, setGasPrice } from \"./utils\";\nimport { getChainName, getExplorerUrl } from \"config/chains\";\nimport { switchNetwork } from \"lib/wallets\";\nimport { t, Trans } from \"@lingui/macro\";\nimport ExternalLink from \"components/ExternalLink/ExternalLink\";\n\nexport async function callContract(\n chainId: number,\n contract: Contract,\n method: string,\n params: any,\n opts: {\n value?: BigNumber | number;\n gasLimit?: BigNumber | number;\n sentMsg?: string;\n successMsg?: string;\n hideSuccessMsg?: boolean;\n failMsg?: string;\n setPendingTxns?: (txns: any) => void;\n }\n) {\n try {\n if (!Array.isArray(params) && typeof params === \"object\" && opts === undefined) {\n opts = params;\n params = [];\n }\n\n if (!opts) {\n opts = {};\n }\n\n const txnOpts: any = {};\n\n if (opts.value) {\n txnOpts.value = opts.value;\n }\n\n txnOpts.gasLimit = opts.gasLimit ? opts.gasLimit : await getGasLimit(contract, method, params, opts.value);\n\n await setGasPrice(txnOpts, contract.provider, chainId);\n\n const res = await contract[method](...params, txnOpts);\n const txUrl = getExplorerUrl(chainId) + \"tx/\" + res.hash;\n const sentMsg = opts.sentMsg || t`Transaction sent.`;\n\n helperToast.success(\n
\n {sentMsg}{\" \"}\n \n View status.\n \n
\n
\n );\n\n if (opts.setPendingTxns) {\n const message = opts.hideSuccessMsg ? undefined : opts.successMsg || t`Transaction completed!`;\n const pendingTxn = {\n hash: res.hash,\n message,\n };\n opts.setPendingTxns((pendingTxns) => [...pendingTxns, pendingTxn]);\n }\n\n return res;\n } catch (e) {\n let failMsg;\n\n let autoCloseToast: number | boolean = 5000;\n\n const [message, type, errorData] = extractError(e);\n switch (type) {\n case NOT_ENOUGH_FUNDS:\n failMsg = (\n
\n \n There is not enough ETH in your account on Arbitrum to send this transaction.\n
\n
\n Bridge ETH to Arbitrum\n
\n
\n );\n break;\n case NETWORK_CHANGED:\n failMsg = (\n
\n
Your wallet is not connected to {getChainName(chainId)}.
\n
\n
switchNetwork(chainId, true)}>\n Switch to {getChainName(chainId)}\n
\n
\n );\n break;\n case USER_DENIED:\n failMsg = t`Transaction was cancelled.`;\n break;\n case SLIPPAGE:\n failMsg = t`The mark price has changed, consider increasing your Allowed Slippage by clicking on the \"...\" icon next to your address.`;\n break;\n case RPC_ERROR:\n autoCloseToast = false;\n\n const originalError = errorData?.error?.message || errorData?.message || message;\n\n failMsg = (\n
\n \n Transaction failed due to RPC error.\n
\n
\n Please try changing the RPC url in your wallet settings.{\" \"}\n More info\n
\n
\n {originalError && {originalError}}\n
\n );\n break;\n default:\n autoCloseToast = false;\n\n failMsg = (\n
\n {opts.failMsg || t`Transaction failed`}\n
\n {message && {message}}\n
\n );\n }\n\n helperToast.error(failMsg, { autoClose: autoCloseToast });\n throw e;\n }\n}\n","import { ethers, BigNumber } from \"ethers\";\nimport { Web3Provider } from \"@ethersproject/providers\";\nimport { getFallbackProvider, getProvider } from \"../rpc\";\n\nexport const contractFetcher =\n (library: Web3Provider | undefined, contractInfo: any, additionalArgs?: any[]) =>\n (...args: any): Promise => {\n // eslint-disable-next-line\n const [id, chainId, arg0, arg1, ...params] = args;\n\n const provider = getProvider(library, chainId);\n\n const method = ethers.utils.isAddress(arg0) ? arg1 : arg0;\n\n const contractCall = getContractCall({\n provider,\n contractInfo,\n arg0,\n arg1,\n method,\n params,\n additionalArgs,\n });\n\n let shouldCallFallback = true;\n\n const handleFallback = async (resolve, reject, error) => {\n if (!shouldCallFallback) {\n return;\n }\n // prevent fallback from being called twice\n shouldCallFallback = false;\n\n const fallbackProvider = getFallbackProvider(chainId);\n if (!fallbackProvider) {\n reject(error);\n return;\n }\n\n // eslint-disable-next-line no-console\n console.info(\"using fallbackProvider for\", method);\n const fallbackContractCall = getContractCall({\n provider: fallbackProvider,\n contractInfo,\n arg0,\n arg1,\n method,\n params,\n additionalArgs,\n });\n\n fallbackContractCall\n .then((result) => resolve(result))\n .catch((e) => {\n // eslint-disable-next-line no-console\n console.error(\"fallback fetcher error\", id, contractInfo.contractName, method, e);\n reject(e);\n });\n };\n\n return new Promise(async (resolve, reject) => {\n \n contractCall\n .then((result) => {\n shouldCallFallback = false;\n resolve(result);\n })\n .catch((e) => {\n // eslint-disable-next-line no-console\n console.error(\"fetcher error\", id, contractInfo.contractName, method, e);\n handleFallback(resolve, reject, e);\n });\n\n setTimeout(() => {\n handleFallback(resolve, reject, \"contractCall timeout\");\n }, 2000);\n });\n };\n\nfunction getContractCall({ provider, contractInfo, arg0, arg1, method, params, additionalArgs }) {\n\n if (ethers.utils.isAddress(arg0)) {\n const address = arg0;\n const contract = new ethers.Contract(address, contractInfo.abi, provider);\n\n if (additionalArgs) {\n\n const callArgs = params.concat(additionalArgs);\n return contract[method](...callArgs);\n }\n return contract[method](...params);\n }\n\n if (!provider) {\n return;\n }\n return provider[method](arg1, ...params);\n}\n","import { useMemo } from \"react\";\nimport { gql } from \"@apollo/client\";\nimport useSWR from \"swr\";\nimport { ethers } from \"ethers\";\n\nimport { USD_DECIMALS, CHART_PERIODS } from \"lib/legacy\";\nimport { GMX_STATS_API_URL } from \"config/backend\";\nimport { chainlinkClient } from \"lib/subgraph/clients\";\nimport { sleep } from \"lib/sleep\";\nimport { formatAmount } from \"lib/numbers\";\n\nconst BigNumber = ethers.BigNumber;\n\n// Ethereum network, Chainlink Aggregator contracts\nconst FEED_ID_MAP = {\n BTC_USD: \"0xae74faa92cb67a95ebcab07358bc222e33a34da7\",\n ETH_USD: \"0x37bc7498f4ff12c19678ee8fe19d713b87f6a9e6\",\n BNB_USD: \"0xc45ebd0f901ba6b2b8c7e70b717778f055ef5e6d\",\n LINK_USD: \"0xdfd03bfc3465107ce570a0397b247f546a42d0fa\",\n UNI_USD: \"0x68577f915131087199fe48913d8b416b3984fd38\",\n SUSHI_USD: \"0x7213536a36094cd8a768a5e45203ec286cba2d74\",\n AVAX_USD: \"0x0fc3657899693648bba4dbd2d8b33b82e875105d\",\n AAVE_USD: \"0xe3f0dede4b499c07e12475087ab1a084b5f93bc0\",\n YFI_USD: \"0x8a4d74003870064d41d4f84940550911fbfccf04\",\n SPELL_USD: \"0x8640b23468815902e011948f3ab173e1e83f9879\",\n};\nconst timezoneOffset = -new Date().getTimezoneOffset() * 60;\n\nfunction fillGaps(prices, periodSeconds) {\n if (prices.length < 2) {\n return prices;\n }\n\n const newPrices = [prices[0]];\n let prevTime = prices[0].time;\n for (let i = 1; i < prices.length; i++) {\n const { time, open } = prices[i];\n if (prevTime) {\n let j = (time - prevTime) / periodSeconds - 1;\n while (j > 0) {\n newPrices.push({\n time: time - j * periodSeconds,\n open,\n close: open,\n high: open * 1.0003,\n low: open * 0.9996,\n });\n j--;\n }\n }\n\n prevTime = time;\n newPrices.push(prices[i]);\n }\n\n return newPrices;\n}\n\nasync function getChartPricesFromStats(chainId, symbol, period) {\n if ([\"WBTC\", \"WETH\", \"WTLOS\"].includes(symbol)) {\n symbol = symbol.substr(1);\n } else if (symbol === \"BTC.b\") {\n symbol = \"BTC\";\n }\n\n const timeDiff = CHART_PERIODS[period] * 3000;\n const from = Math.floor(Date.now() / 1000 - timeDiff);\n const url = `${GMX_STATS_API_URL}/candles/${symbol}?preferableChainId=${chainId}&period=${period}&from=${from}&preferableSource=fast`;\n const TIMEOUT = 5000;\n const res: Response = await new Promise(async (resolve, reject) => {\n let done = false;\n setTimeout(() => {\n done = true;\n reject(new Error(`request timeout ${url}`));\n }, TIMEOUT);\n\n let lastEx;\n for (let i = 0; i < 3; i++) {\n if (done) return;\n try {\n const res = await fetch(url);\n resolve(res);\n return;\n } catch (ex) {\n await sleep(300);\n lastEx = ex;\n }\n }\n reject(lastEx);\n });\n if (!res.ok) {\n throw new Error(`request failed ${res.status} ${res.statusText}`);\n }\n const json = await res.json();\n let prices = json?.prices;\n if (!prices || prices.length < 10) {\n throw new Error(`not enough prices data: ${prices?.length}`);\n }\n\n const OBSOLETE_THRESHOLD = Date.now() / 1000 - 60 * 30; // 30 min ago\n const updatedAt = json?.updatedAt || 0;\n if (updatedAt < OBSOLETE_THRESHOLD) {\n throw new Error(\n \"chart data is obsolete, last price record at \" +\n new Date(updatedAt * 1000).toISOString() +\n \" now: \" +\n new Date().toISOString()\n );\n }\n\n prices = prices.map(({ t, o: open, c: close, h: high, l: low }) => ({\n time: t + timezoneOffset,\n open,\n close,\n high,\n low,\n }));\n return prices;\n}\n\nfunction getCandlesFromPrices(prices, period) {\n const periodTime = CHART_PERIODS[period];\n\n if (prices.length < 2) {\n return [];\n }\n\n const candles: any[] = [];\n const first = prices[0];\n let prevTsGroup = Math.floor(first[0] / periodTime) * periodTime;\n let prevPrice = first[1];\n let o = prevPrice;\n let h = prevPrice;\n let l = prevPrice;\n let c = prevPrice;\n for (let i = 1; i < prices.length; i++) {\n const [ts, price] = prices[i];\n const tsGroup = Math.floor(ts / periodTime) * periodTime;\n if (prevTsGroup !== tsGroup) {\n candles.push({ t: prevTsGroup + timezoneOffset, o, h, l, c });\n o = c;\n h = Math.max(o, c);\n l = Math.min(o, c);\n }\n c = price;\n h = Math.max(h, price);\n l = Math.min(l, price);\n prevTsGroup = tsGroup;\n }\n\n return candles.map(({ t: time, o: open, c: close, h: high, l: low }) => ({\n time,\n open,\n close,\n high,\n low,\n }));\n}\n\nfunction getChainlinkChartPricesFromGraph(tokenSymbol, period) {\n if ([\"WBTC\", \"WETH\", \"WAVAX\"].includes(tokenSymbol)) {\n tokenSymbol = tokenSymbol.substr(1);\n }\n const marketName = tokenSymbol + \"_USD\";\n const feedId = FEED_ID_MAP[marketName];\n if (!feedId) {\n throw new Error(`undefined marketName ${marketName}`);\n }\n\n const PER_CHUNK = 1000;\n const CHUNKS_TOTAL = 6;\n const requests: any[] = [];\n for (let i = 0; i < CHUNKS_TOTAL; i++) {\n const query = gql(`{\n rounds(\n first: ${PER_CHUNK},\n skip: ${i * PER_CHUNK},\n orderBy: unixTimestamp,\n orderDirection: desc,\n where: {feed: \"${feedId}\"}\n ) {\n unixTimestamp,\n value\n }\n }`);\n requests.push(chainlinkClient.query({ query }));\n }\n\n return Promise.all(requests)\n .then((chunks) => {\n let prices: any[] = [];\n const uniqTs = new Set();\n chunks.forEach((chunk) => {\n chunk.data.rounds.forEach((item) => {\n if (uniqTs.has(item.unixTimestamp)) {\n return;\n }\n\n uniqTs.add(item.unixTimestamp);\n prices.push([item.unixTimestamp, Number(item.value) / 1e8]);\n });\n });\n\n prices.sort(([timeA], [timeB]) => timeA - timeB);\n prices = getCandlesFromPrices(prices, period);\n return prices;\n })\n .catch((err) => {\n // eslint-disable-next-line no-console\n console.error(err);\n });\n}\n\nexport function useChartPrices(chainId, symbol, isStable, period, currentAveragePrice) {\n const swrKey = !isStable && symbol ? [\"getChartCandles\", chainId, symbol, period] : null;\n let { data: prices, mutate: updatePrices } = useSWR(swrKey, {\n fetcher: async (...args) => {\n try {\n return await getChartPricesFromStats(chainId, symbol, period);\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.warn(ex);\n // eslint-disable-next-line no-console\n console.warn(\"Switching to graph chainlink data\");\n try {\n // return await getChainlinkChartPricesFromGraph(symbol, period);\n return await getChartPricesFromStats(chainId, symbol, period);\n } catch (ex2) {\n // eslint-disable-next-line no-console\n console.warn(\"getChainlinkChartPricesFromGraph failed\");\n // eslint-disable-next-line no-console\n console.warn(ex2);\n return [];\n }\n }\n },\n dedupingInterval: 60000,\n focusThrottleInterval: 60000 * 10,\n });\n\n const currentAveragePriceString = currentAveragePrice && currentAveragePrice.toString();\n const retPrices = useMemo(() => {\n if (isStable) {\n return getStablePriceData(period);\n }\n\n if (!prices) {\n return [];\n }\n\n let _prices = [...prices];\n if (currentAveragePriceString && prices.length) {\n _prices = appendCurrentAveragePrice(_prices, BigNumber.from(currentAveragePriceString), period);\n }\n\n return fillGaps(_prices, CHART_PERIODS[period]);\n }, [prices, isStable, currentAveragePriceString, period]);\n\n return [retPrices, updatePrices];\n}\n\nfunction appendCurrentAveragePrice(prices, currentAveragePrice, period) {\n const periodSeconds = CHART_PERIODS[period];\n const currentCandleTime = Math.floor(Date.now() / 1000 / periodSeconds) * periodSeconds + timezoneOffset;\n const last = prices[prices.length - 1];\n const averagePriceValue = parseFloat(formatAmount(currentAveragePrice, USD_DECIMALS, 4));\n if (currentCandleTime === last.time) {\n last.close = averagePriceValue;\n last.high = Math.max(last.high, averagePriceValue);\n last.low = Math.max(last.low, averagePriceValue);\n return prices;\n } else {\n const newCandle = {\n time: currentCandleTime,\n open: last.close,\n close: averagePriceValue,\n high: averagePriceValue,\n low: averagePriceValue,\n };\n return [...prices, newCandle];\n }\n}\n\nfunction getStablePriceData(period) {\n const periodSeconds = CHART_PERIODS[period];\n const now = Math.floor(Date.now() / 1000 / periodSeconds) * periodSeconds;\n let priceData: any = [];\n for (let i = 100; i > 0; i--) {\n priceData.push({\n time: now - i * periodSeconds,\n open: 1,\n close: 1,\n high: 1,\n low: 1,\n });\n }\n return priceData;\n}\n","import { BigNumber, ethers } from \"ethers\";\nimport { gql } from \"@apollo/client\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport useSWR from \"swr\";\n\n\nimport Token from \"abis/Token.json\";\n\nimport { getContract } from \"config/contracts\";\nimport { BASE_MAINNET, TELOS_MAINNET, FUSE_MAINNET, METER_MAINNET, TAIKO_MAINNET, getConstant, getHighExecutionFee } from \"config/chains\";\n\nimport { getServerBaseUrl, getServerUrl } from \"config/backend\";\nimport { getGmxGraphClient } from \"lib/subgraph/clients\";\nimport { callContract, contractFetcher } from \"lib/contracts\";\nimport { bigNumberify, expandDecimals, parseValue } from \"lib/numbers\";\n\nexport * from \"./prices\";\n\nconst { AddressZero } = ethers.constants;\n\nexport function useUserStat(chainId) {\n const query = gql(`{\n userStat(id: \"total\") {\n id\n uniqueCount\n }\n }`);\n\n const [res, setRes] = useState();\n\n useEffect(() => {\n // eslint-disable-next-line no-console\n getGmxGraphClient(chainId)?.query({ query }).then(setRes).catch(console.warn);\n }, [setRes, query, chainId]);\n\n return res ? res.data.userStat : null;\n}\n\n// use only the supply endpoint on arbitrum, it includes the supply on avalanche\nexport function useTotalMstSupply() {\n const gmxSupplyUrlArbitrum = getServerUrl(TELOS_MAINNET, \"/mst_supply\");\n\n const { data: gmxSupply, mutate: updateGmxSupply } = useSWR([gmxSupplyUrlArbitrum], {\n // @ts-ignore\n fetcher: (...args) => fetch(...args).then((res) => res.text()).then((text) => text.replace(/\\n/g, '')),\n });\n\n return {\n total: gmxSupply ? bigNumberify(gmxSupply) : undefined,\n mutate: updateGmxSupply,\n };\n}\n\nexport function useMstPrice() {\n const coingeckoUrl =\n \"https://api.coingecko.com/api/v3/simple/price?ids=meridian-mst&vs_currencies=usd\";\n\n const { data: mstPrice, mutate: updateMst } = useSWR(coingeckoUrl, {\n fetcher: (url: string) =>\n fetch(url)\n .then((res) => res.json())\n .then((data) => {\n // Expected response shape: { mst: { usd: } }\n console.log(data, \"data price\")\n const price = data?.[\"meridian-mst\"]?.usd;\n if (price === undefined || price === null) {\n return \"0\";\n }\n // Convert the price to a string (e.g., \"1.23\")\n const priceStr = String(price);\n // Split into whole and fractional parts.\n const [whole, fraction = \"\"] = priceStr.split(\".\");\n // Ensure the fractional part has exactly 30 digits.\n const fractionPadded = (fraction + \"0\".repeat(30)).slice(0, 30);\n // Concatenate whole and padded fraction to represent the price multiplied by 1e30.\n const integerStr = whole + fractionPadded;\n return integerStr;\n }),\n });\n\n const refreshInterval = 30000;\n\n const memoizedResult = useMemo(\n () => ({\n total: mstPrice ? bigNumberify(mstPrice) : bigNumberify(0),\n mutate: updateMst,\n }),\n [mstPrice, updateMst]\n );\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n updateMst();\n }, refreshInterval);\n\n return () => clearInterval(intervalId);\n }, [updateMst, refreshInterval]);\n\n console.log(memoizedResult, \"MST PRICE\");\n\n return memoizedResult;\n}\n\n// return {\n// total: mstPrice ? bigNumberify(mstPrice) : bigNumberify(0),\n// mutate: updateMst,\n// };\n// }\n\n\nexport function useTotalMstStaked() {\n const MeridianUSDMStakingAddressBase = getContract(BASE_MAINNET, \"MeridianUSDMStaking\");\n const MeridianSupertakingAddressBase = getContract(BASE_MAINNET, \"FeeGmxTracker\");\n const MeridianMultiPoolStakingAddressBase = getContract(BASE_MAINNET, \"MeridianMultiPoolStaking\");\n const MeridianMultiPoolStakingAddressFuse = getContract(FUSE_MAINNET, \"MeridianMultiPoolStaking\");\n const MeridianMultiPoolStakingAddressMeter = getContract(METER_MAINNET, \"MeridianMultiPoolStaking\");\n const MeridianMultiPoolStakingAddressTaiko = getContract(TAIKO_MAINNET, \"MeridianMultiPoolStaking\");\n const MeridianMultiPoolStakingAddressTelos = getContract(TELOS_MAINNET, \"MeridianMultiPoolStaking\");\n const MeridianUSDMStakingAddressTelos = getContract(TELOS_MAINNET, \"MeridianUSDMStaking\");\n let totalStakedMst = useRef(bigNumberify(0));\n\n const { data: stakedMstOnUSDMBase, mutate: updatestakedMstOnUSDMBase } = useSWR(\n [\n `StakeV2:stakedMstSupply:${BASE_MAINNET}`,\n BASE_MAINNET,\n getContract(BASE_MAINNET, \"MST\"),\n \"balanceOf\",\n MeridianUSDMStakingAddressBase,\n ],\n {\n fetcher: contractFetcher(undefined, Token),\n }\n );\n\n const { data: stakedSuperStakingBase, mutate: updatestakedSuperStakingBase } = useSWR(\n [\n `StakeV2:stakedMstSupply:${BASE_MAINNET}`,\n BASE_MAINNET,\n MeridianSupertakingAddressBase,\n \"totalSupply\",\n ],\n {\n fetcher: contractFetcher(undefined, Token),\n }\n );\n\n const { data: stakedMstBase, mutate: updatestakedMstBase } = useSWR(\n [\n `StakeV2:stakedMstSupply:${BASE_MAINNET}`,\n BASE_MAINNET,\n getContract(BASE_MAINNET, \"MST\"),\n \"balanceOf\",\n MeridianMultiPoolStakingAddressBase,\n ],\n {\n fetcher: contractFetcher(undefined, Token),\n }\n );\n\n const { data: stakedMstFuse, mutate: updatestakedMstFuse } = useSWR(\n [\n `StakeV2:stakedMstSupply:${FUSE_MAINNET}`,\n FUSE_MAINNET,\n getContract(FUSE_MAINNET, \"MST\"),\n \"balanceOf\",\n MeridianMultiPoolStakingAddressFuse,\n ],\n {\n fetcher: contractFetcher(undefined, Token),\n }\n );\n\n const { data: stakedMstMeter, mutate: updatestakedMstMeter } = useSWR(\n [\n `StakeV2:stakedMstSupply:${METER_MAINNET}`,\n METER_MAINNET,\n getContract(METER_MAINNET, \"MST\"),\n \"balanceOf\",\n MeridianMultiPoolStakingAddressMeter,\n ],\n {\n fetcher: contractFetcher(undefined, Token),\n }\n );\n\n const { data: stakedMstTaiko, mutate: updatestakedMstTaiko } = useSWR(\n [\n `StakeV2:stakedMstSupply:${TAIKO_MAINNET}`,\n TAIKO_MAINNET,\n getContract(TAIKO_MAINNET, \"MST\"),\n \"balanceOf\",\n MeridianMultiPoolStakingAddressTaiko,\n ],\n {\n fetcher: contractFetcher(undefined, Token),\n }\n );\n\n\n const { data: stakedMstTelos, mutate: updateStakedMstTelos } = useSWR(\n [\n `StakeV2:stakedMstSupply:${TELOS_MAINNET}`,\n TELOS_MAINNET,\n getContract(TELOS_MAINNET, \"MST\"),\n \"balanceOf\",\n MeridianMultiPoolStakingAddressTelos,\n ],\n {\n fetcher: contractFetcher(undefined, Token),\n }\n );\n\n const { data: stakedMstOnUSDMTelos, mutate: updateStakedMstOnUSDMTelos } = useSWR(\n [\n `StakeV2:stakedMstOnUSDMSupply:${TELOS_MAINNET}`,\n TELOS_MAINNET,\n getContract(TELOS_MAINNET, \"MST\"),\n \"balanceOf\",\n MeridianUSDMStakingAddressTelos,\n ],\n {\n fetcher: contractFetcher(undefined, Token),\n }\n );\n\n const mutate = useCallback(() => {\n updatestakedMstOnUSDMBase();\n updatestakedSuperStakingBase();\n updatestakedMstBase();\n updatestakedMstFuse();\n updatestakedMstMeter();\n updatestakedMstTaiko();\n updateStakedMstTelos();\n updateStakedMstOnUSDMTelos();\n }, [updatestakedMstOnUSDMBase, updatestakedSuperStakingBase, updatestakedMstBase,\n updatestakedMstFuse, updatestakedMstMeter, updatestakedMstTaiko,\n updateStakedMstTelos, updateStakedMstOnUSDMTelos]);\n\n let total = BigNumber.from(0)\n if (stakedMstOnUSDMBase) {\n total = total.add(stakedMstOnUSDMBase);\n }\n if (stakedSuperStakingBase) {\n total = total.add(stakedSuperStakingBase);\n }\n if (stakedMstBase) {\n total = total.add(stakedMstBase);\n }\n if (stakedMstFuse) {\n total = total.add(stakedMstFuse);\n }\n if (stakedMstMeter) {\n total = total.add(stakedMstMeter);\n }\n if (stakedMstTaiko) {\n total = total.add(stakedMstTaiko);\n }\n if (stakedMstTelos) {\n total = total.add(stakedMstTelos);\n }\n if (stakedMstOnUSDMTelos) {\n total = total.add(stakedMstOnUSDMTelos);\n }\n totalStakedMst.current = total;\n\n return {\n baseMstOnUsdm: stakedMstOnUSDMBase,\n baseSuperStaking: stakedSuperStakingBase,\n base: stakedMstBase,\n fuse: stakedMstFuse,\n meter: stakedMstMeter,\n taiko: stakedMstTaiko,\n telos: stakedMstTelos,\n telosMstOnUsdm: stakedMstOnUSDMTelos,\n total: totalStakedMst.current,\n mutate,\n };\n}\n","import React from \"react\";\n\nimport useSWR from \"swr\";\n\nimport {\n PLACEHOLDER_ACCOUNT,\n getBalanceAndSupplyData,\n getDepositBalanceData,\n getVestingData,\n getStakingData,\n getProcessedData,\n} from \"lib/legacy\";\n\nimport Vault from \"abis/Vault.json\";\nimport ReaderV2 from \"abis/ReaderV2.json\";\nimport RewardReader from \"abis/RewardReader.json\";\nimport Token from \"abis/Token.json\";\nimport GlpManager from \"abis/GlpManager.json\";\n\nimport { useWeb3React } from \"@web3-react/core\";\n\nimport { useMstPrice } from \"domain/legacy\";\n\nimport { getContract } from \"config/contracts\";\nimport { getServerUrl } from \"config/backend\";\nimport { contractFetcher } from \"lib/contracts\";\nimport { formatKeyAmount } from \"lib/numbers\";\n\nexport default function APRLabel({ chainId, label }) {\n let { active } = useWeb3React();\n\n const rewardReaderAddress = getContract(chainId, \"RewardReader\");\n const readerAddress = getContract(chainId, \"Reader\");\n\n const vaultAddress = getContract(chainId, \"Vault\");\n const nativeTokenAddress = getContract(chainId, \"NATIVE_TOKEN\");\n const gmxAddress = getContract(chainId, \"GMX\");\n const bnGmxAddress = getContract(chainId, \"BN_GMX\");\n\n const MeridianMultiPoolStakingAddress = getContract(chainId, \"MeridianMultiPoolStaking\");\n const bonusGmxTrackerAddress = getContract(chainId, \"BonusGmxTracker\");\n const feeGmxTrackerAddress = getContract(chainId, \"FeeGmxTracker\");\n\n const stakedGlpTrackerAddress = getContract(chainId, \"StakedGlpTracker\");\n const feeGlpTrackerAddress = getContract(chainId, \"FeeGlpTracker\");\n\n const glpManagerAddress = getContract(chainId, \"GlpManager\");\n\n const gmxVesterAddress = getContract(chainId, \"GmxVester\");\n const glpVesterAddress = getContract(chainId, \"GlpVester\");\n\n const vesterAddresses = [gmxVesterAddress, glpVesterAddress];\n\n const walletTokens = [gmxAddress, MeridianMultiPoolStakingAddress];\n const depositTokens = [\n gmxAddress,\n MeridianMultiPoolStakingAddress,\n bonusGmxTrackerAddress,\n bnGmxAddress,\n ];\n const rewardTrackersForDepositBalances = [\n MeridianMultiPoolStakingAddress,\n MeridianMultiPoolStakingAddress,\n bonusGmxTrackerAddress,\n feeGmxTrackerAddress,\n feeGmxTrackerAddress,\n feeGlpTrackerAddress,\n ];\n const rewardTrackersForStakingInfo = [\n MeridianMultiPoolStakingAddress,\n bonusGmxTrackerAddress,\n feeGmxTrackerAddress,\n stakedGlpTrackerAddress,\n feeGlpTrackerAddress,\n ];\n\n const { data: walletBalances } = useSWR(\n [`StakeV2:walletBalances:${active}`, chainId, readerAddress, \"getTokenBalancesWithSupplies\", PLACEHOLDER_ACCOUNT],\n {\n fetcher: contractFetcher(undefined, ReaderV2, [walletTokens]),\n }\n );\n\n const { data: depositBalances } = useSWR(\n [`StakeV2:depositBalances:${active}`, chainId, rewardReaderAddress, \"getDepositBalances\", PLACEHOLDER_ACCOUNT],\n {\n fetcher: contractFetcher(undefined, RewardReader, [depositTokens, rewardTrackersForDepositBalances]),\n }\n );\n\n\n\n const { data: stakingInfo } = useSWR(\n [`StakeV2:stakingInfo:${active}`, chainId, rewardReaderAddress, \"getStakingInfo\", PLACEHOLDER_ACCOUNT],\n {\n fetcher: contractFetcher(undefined, RewardReader, [rewardTrackersForStakingInfo]),\n }\n );\n\n const { data: stakedGmxSupply } = useSWR(\n [`StakeV2:stakedGmxSupply:${active}`, chainId, gmxAddress, \"balanceOf\", MeridianMultiPoolStakingAddress],\n {\n fetcher: contractFetcher(undefined, Token),\n }\n );\n\n const { data: aums } = useSWR([`StakeV2:getAums:${active}`, chainId, glpManagerAddress, \"getAums\"], {\n fetcher: contractFetcher(undefined, GlpManager),\n });\n\n const { data: nativeTokenPrice } = useSWR(\n [`StakeV2:nativeTokenPrice:${active}`, chainId, vaultAddress, \"getMinPrice\", nativeTokenAddress],\n {\n fetcher: contractFetcher(undefined, Vault),\n }\n );\n\n const { data: vestingInfo } = useSWR(\n [`StakeV2:vestingInfo:${active}`, chainId, readerAddress, \"getVestingInfo\", PLACEHOLDER_ACCOUNT],\n {\n fetcher: contractFetcher(undefined, ReaderV2, [vesterAddresses]),\n }\n );\n\n let { total: gmxPrice } = useMstPrice() // JJ\n\n const gmxSupplyUrl = getServerUrl(chainId, \"/mst_supply\");\n const { data: gmxSupply } = useSWR([gmxSupplyUrl], {\n fetcher: (...args) => fetch(...args).then((res) => res.text()).then((text) => text.replace(/\\n/g, '')),\n });\n\n let aum;\n if (aums && aums.length > 0) {\n aum = aums[0].add(aums[1]).div(2);\n }\n\n const { balanceData, supplyData } = getBalanceAndSupplyData(walletBalances);\n const depositBalanceData = getDepositBalanceData(depositBalances);\n const stakingData = getStakingData(stakingInfo);\n const vestingData = getVestingData(vestingInfo);\n\n const processedData = getProcessedData(\n balanceData,\n supplyData,\n depositBalanceData,\n stakingData,\n vestingData,\n aum,\n nativeTokenPrice,\n stakedGmxSupply,\n gmxPrice,\n gmxSupply\n );\n\n return <>{`${formatKeyAmount(processedData, label, 2, 2, true)}%`};\n}\n","import React, { ReactNode } from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport cx from \"classnames\";\nimport { getAppBaseUrl, getHomeUrl } from \"lib/legacy\";\n\nimport \"./Header.css\";\nimport { isHomeSite, shouldShowRedirectModal } from \"lib/legacy\";\n\ntype Props = {\n isHome?: boolean;\n isHomeLink?: boolean;\n className?: string;\n exact?: boolean;\n to: string;\n shouldShowRedirectModal?: boolean;\n showRedirectModal: (to: string) => void;\n redirectPopupTimestamp: number;\n children?: ReactNode;\n};\n\nexport function HeaderLink({\n isHomeLink,\n className,\n exact,\n to,\n children,\n redirectPopupTimestamp,\n showRedirectModal,\n}: Props) {\n const isOnHomePage = window.location.pathname === \"/\";\n const isHome = isHomeSite();\n\n if (isHome && !(isHomeLink && !isOnHomePage)) {\n if (shouldShowRedirectModal(redirectPopupTimestamp)) {\n return (\n
showRedirectModal(to)}>\n {children}\n
\n );\n } else {\n const baseUrl = getAppBaseUrl();\n return (\n \n {children}\n \n );\n }\n }\n\n if (isHomeLink) {\n return (\n \n {children}\n \n );\n }\n\n return (\n \n {children}\n \n );\n}\n","import React, { useCallback } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Trans } from \"@lingui/macro\";\n\nimport gmxBigIcon from \"img/ic_gmx_custom.svg\";\n// import glpBigIcon from \"img/.svg\";\nimport glpBigIcon from \"img/glpLogo1.svg\";\n\nimport { isHomeSite } from \"lib/legacy\";\n\nimport { useWeb3React } from \"@web3-react/core\";\n\nimport APRLabel from \"../APRLabel/APRLabel\";\nimport { HeaderLink } from \"../Header/HeaderLink\";\nimport { TELOS_TESTNET, TELOS_MAINNET } from \"config/chains\";\nimport { switchNetwork } from \"lib/wallets\";\nimport { useChainId } from \"lib/chains\";\nimport ExternalLink from \"components/ExternalLink/ExternalLink\";\n\nexport default function TokenCard({ showRedirectModal, redirectPopupTimestamp }) {\n const isHome = isHomeSite();\n const { chainId } = useChainId();\n const { active } = useWeb3React();\n\n const changeNetwork = useCallback(\n (network) => {\n if (network === chainId) {\n return;\n }\n if (!active) {\n setTimeout(() => {\n return switchNetwork(network, active);\n }, 500);\n } else {\n return switchNetwork(network, active);\n }\n },\n [chainId, active]\n );\n\n const BuyLink = ({ className, to, children, network }) => {\n if (isHome && showRedirectModal) {\n return (\n \n {children}\n \n );\n }\n\n return (\n changeNetwork(network)}>\n {children}\n \n );\n };\n\n return (\n
\n
\n
\n \"gmxBigIcon\" MST\n
\n
\n
\n MST is the utility and governance token. Accrues 30% of the platform's generated fees.\n
\n
\n {/*Arbitrum APR: ,{\" \"} */}\n ETH APR: \n
\n\n\n
\n {/*\n
\n \n Buy on Arbitrum\n \n \n Buy\n \n
\n\n */} \n Buy MST\n \n\n \n Add Liquidity\n \n
\n
\n
\n
\n
\n \"glpBigIcon\" MLP\n
\n
\n
\n MLP is the liquidity provider token. Accrues 60% of the platform's generated fees.\n
\n
\n {/* Arbitrum APR: ,{\" \"} */}\n APR: \n
\n
\n
\n {/* \n Buy on Arbitrum\n */}\n \n Buy MLP\n \n
\n \n Read more\n \n
\n
\n
\n
\n );\n}\n","import React from \"react\";\nimport Footer from \"components/Footer/Footer\";\nimport \"./Home.css\";\nimport BigNumber from 'bignumber.js';\nimport simpleSwapIcon from \"img/ic_simpleswaps.svg\";\nimport costIcon from \"img/ic_cost.svg\";\nimport liquidityIcon from \"img/ic_liquidity.svg\";\nimport totaluserIcon from \"img/ic_totaluser.svg\";\n\nimport arbitrumIcon from \"img/ic_arbitrum_96.svg\";\nimport avaIcon from \"img/ic_avalanche_96.svg\";\n\nimport statsIcon from \"img/ic_stats.svg\";\nimport tradingIcon from \"img/ic_trading.svg\";\n\nimport useSWR from \"swr\";\n\nimport { USD_DECIMALS, getTotalVolumeSum } from \"lib/legacy\";\n\nimport { useUserStat } from \"domain/legacy\";\n\nimport TokenCard from \"components/TokenCard/TokenCard\";\nimport { Trans } from \"@lingui/macro\";\nimport { HeaderLink } from \"components/Header/HeaderLink\";\nimport { TELOS_TESTNET, TELOS_MAINNET } from \"config/chains\";\nimport { getServerUrl } from \"config/backend\";\nimport { bigNumberify, formatAmount, numberWithCommas } from \"lib/numbers\";\n\nexport default function Home({ showRedirectModal, redirectPopupTimestamp }) {\n // const [openedFAQIndex, setOpenedFAQIndex] = useState(null)\n // const faqContent = [{\n // id: 1,\n // question: \"What is GMX?\",\n // answer: \"GMX is a decentralized spot and perpetual exchange that supports low swap fees and zero price impact trades.

Trading is supported by a unique multi-asset pool that earns liquidity providers fees from market making, swap fees, leverage trading (spreads, funding fees & liquidations), and asset rebalancing.

Dynamic pricing is supported by Chainlink Oracles along with TWAP pricing from leading volume DEXs.\"\n // }, {\n // id: 2,\n // question: \"What is the GMX Governance Token? \",\n // answer: \"The GMX token is the governance token of the GMX ecosystem, it provides the token owner voting rights on the direction of the GMX platform.

Additionally, when GMX is staked you will earn 30% of the platform-generated fees, you will also earn Escrowed GMX tokens and Multiplier Points.\"\n // }, {\n // id: 3,\n // question: \"What is the GLP Token? \",\n // answer: \"The GLP token represents the liquidity users provide to the GMX platform for Swaps and Margin Trading.

To provide liquidity to GLP you trade your crypto asset BTC, ETH, LINK, UNI, USDC, USDT, MIM, or FRAX to the liquidity pool, in exchange, you gain exposure to a diversified index of tokens while earning 50% of the platform trading fees and esGMX.\"\n // }, {\n // id: 4,\n // question: \"What can I trade on GMX? \",\n // answer: \"On GMX you can swap or margin trade any of the following assets: ETH, BTC, LINK, UNI, USDC, USDT, MIM, FRAX, with others to be added. \"\n // }]\n\n // const toggleFAQContent = function(index) {\n // if (openedFAQIndex === index) {\n // setOpenedFAQIndex(null)\n // } else {\n // setOpenedFAQIndex(index)\n // }\n // }\n\n // ARBITRUM\n\n const arbitrumPositionStatsUrl = getServerUrl(TELOS_MAINNET, \"/position_stats\");\n const { data: arbitrumPositionStats } = useSWR([arbitrumPositionStatsUrl], {\n fetcher: (...args) => fetch(...args).then((res) => res.json()),\n });\n\n {/*\n const arbitrumTotalVolumeUrl = getServerUrl(TELOS_TESTNET, \"/total_volume\"); // TJ\n const { data: arbitrumTotalVolume } = useSWR([arbitrumTotalVolumeUrl], { // TJ\n fetcher: (...args) => fetch(...args).then((res) => res.json()), // TJ\n });\n\n*/}\n const arbitrumTotalVolumeUrl = getServerUrl(TELOS_MAINNET, \"/volume_data\");\n const { data: arbitrumTotalVolume } = useSWR([arbitrumTotalVolumeUrl], {\n fetcher: (...args) => fetch(...args).then((res) => res.json()),\n });\n\n const telosTotalUsersUrl = getServerUrl(TELOS_MAINNET, \"/user_data\");\n const { data: telosTotalUsers } = useSWR([telosTotalUsersUrl], {\n fetcher: (...args) => fetch(...args).then((res) => res.json()),\n });\n\n\n // let telosVolume = new BigNumber(arbitrumTotalVolume).times(1e18)\n\n // Total Volume\n\n // getTotalVolumeSum(arbitrumTotalVolume); //TJ\n // getTotalVolumeSum(avalancheTotalVolume); // TJ\n\n\n let telosVolume = bigNumberify(0);\n\n if (arbitrumTotalVolume) { // TJ\n // totalVolumeSum = totalVolumeSum.add(arbitrumTotalVolumeSum);\n // totalVolumeSum = totalVolumeSum.add(avalancheTotalVolumeSum);\n telosVolume = telosVolume.add(arbitrumTotalVolume.total_volume);\n }\n\n let telosUsers = bigNumberify(0);\n\n if (telosTotalUsers) { // TJ\n // totalVolumeSum = totalVolumeSum.add(arbitrumTotalVolumeSum);\n // totalVolumeSum = totalVolumeSum.add(avalancheTotalVolumeSum);\n telosUsers = telosUsers.add(telosTotalUsers.total_users);\n }\n\n\n // telosVolume = telosVolume.add(arbitrumTotalVolume.total_volume);\n\n\n // Open Interest\n\n let openInterest = bigNumberify(0);\n\n // user stat\n const arbitrumUserStats = useUserStat(TELOS_MAINNET);\n let totalUsers = 0;\n\n if (arbitrumUserStats && arbitrumUserStats.uniqueCount) {\n totalUsers += arbitrumUserStats.uniqueCount;\n }\n\n const LaunchExchangeButton = () => {\n return (\n \n Launch App\n \n );\n };\n\n return (\n
\n
\n {/*
*/}\n
\n
\n
\n \n Decentralized\n
\n Trading Platform\n
\n
\n
\n \n Trade with up to 50x leverage, obtain credit through overcollateralised loans and earn interest by providing liquidity.



- Currently available on BASE Network\n
\n
\n \n
\n
\n
\n
\n \"Total\n
\n
\n Total Trading Volume\n
\n
${formatAmount(telosVolume, USD_DECIMALS, 0, true)}
\n
\n
\n
\n \"Open\n
\n
\n Open Interest\n
\n
${formatAmount(openInterest, USD_DECIMALS, 0, true)}
\n
\n
\n
\n \"Total\n
\n
\n Total Users\n
\n
{formatAmount(telosUsers, USD_DECIMALS, 0, true)}
\n
\n
\n
\n
\n
\n
\n
\n
\n \"Reduce\n
\n Reduce Liquidation Risks\n
\n
\n
\n \n An aggregate of high-quality price feeds determine when liquidations occur. This keeps positions safe\n from temporary wicks.\n \n
\n
\n
\n
\n \"Save\n
\n Save on Costs\n
\n
\n
\n \n Enter and exit positions with minimal spread and zero price impact. Get the optimal price without\n incurring additional costs.\n \n
\n
\n
\n
\n \"Simple\n
\n Simple Swaps\n
\n
\n
\n \n Open positions through a simple swap interface. Conveniently swap from any supported asset into the\n position of your choice.\n \n
\n
\n
\n
\n
\n
\n
\n
\n Two tokens create our ecosystem\n
\n
\n \n
\n
\n
\n
\n );\n}\n","import { disableBodyScroll, enableBodyScroll, clearAllBodyScrollLocks } from \"body-scroll-lock\";\nimport { RefObject, useEffect } from \"react\";\n\nexport const TOUCH_MOVE_CONTAINER_CLASS_NAME = \"DiableScroll-touch-move-container\";\n\n// @see https://github.com/willmcpo/body-scroll-lock#allowtouchmove\nconst allowTouchMoveFn = (el: HTMLElement) => {\n while (el && el !== document.body) {\n if (el.className?.includes?.(TOUCH_MOVE_CONTAINER_CLASS_NAME)) return true;\n\n el = el.parentElement as HTMLElement;\n }\n};\n\nexport default function useLockBodyScroll(\n ref: RefObject,\n isVisible: boolean,\n opts: {\n disableLock?: boolean;\n allowTouchMove?: boolean;\n } = {}\n) {\n useEffect(() => {\n if (opts.disableLock) {\n return;\n }\n\n if (ref.current) {\n if (isVisible) {\n disableBodyScroll(ref.current, {\n allowTouchMove: opts.allowTouchMove ? allowTouchMoveFn : undefined,\n });\n } else {\n enableBodyScroll(ref.current);\n }\n }\n\n return () => clearAllBodyScrollLocks();\n\n // needs ref.current in deps, not just ref\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref.current, opts.allowTouchMove, opts.disableLock, isVisible]);\n}\n","import React, { useRef, useEffect } from \"react\";\nimport cx from \"classnames\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nimport { MdClose } from \"react-icons/md\";\n\nimport \"./Modal.css\";\nimport useLockBodyScroll, { TOUCH_MOVE_CONTAINER_CLASS_NAME } from \"lib/useLockBodyScroll\";\n\nexport default function Modal(props) {\n const { isVisible, setIsVisible, className, zIndex, onAfterOpen, disableBodyScrollLock, allowContentTouchMove } =\n props;\n\n const modalRef = useRef(null);\n\n useLockBodyScroll(modalRef, isVisible, {\n disableLock: disableBodyScrollLock,\n allowTouchMove: allowContentTouchMove,\n });\n\n useEffect(() => {\n function close(e) {\n if (e.keyCode === 27 && setIsVisible) {\n setIsVisible(false);\n }\n }\n window.addEventListener(\"keydown\", close);\n return () => window.removeEventListener(\"keydown\", close);\n }, [setIsVisible]);\n\n useEffect(() => {\n if (typeof onAfterOpen === \"function\") onAfterOpen();\n }, [onAfterOpen]);\n\n const fadeVariants = {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n };\n\n return (\n \n {isVisible && (\n \n setIsVisible(false)}\n >\n
\n
\n
{props.label}
\n
setIsVisible(false)}>\n \n
\n
\n
\n
\n {props.children}\n
\n
\n \n )}\n \n );\n}\n","import React from \"react\";\nimport { library, IconName, IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n faBridge,\n faCircleNotch,\n faCheckCircle,\n faCoins,\n faEllipsisH,\n faExclamationTriangle,\n faInfoCircle,\n faTimes,\n faTrash,\n faChartLine,\n faRedo,\n faHandshake,\n faHandHoldingDollar,\n faHistory,\n faChevronLeft,\n faChevronRight,\n faUserCircle,\n faWallet,\n faExternalLinkAlt,\n faClipboardCheck,\n faCog,\n faCheck,\n faPlug,\n faExclamationCircle,\n faAngleUp,\n faAngleDoubleUp,\n faAngleDown,\n faAngleDoubleDown,\n faPen,\n faSeedling,\n faHandPaper,\n faHeartbeat,\n faBars\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { faClipboard, faQuestionCircle } from \"@fortawesome/free-regular-svg-icons\";\nimport { FontAwesomeIcon, FontAwesomeIconProps } from \"@fortawesome/react-fontawesome\";\n\nlibrary.add(\n faBridge,\n faCircleNotch,\n faCheck,\n faCheckCircle,\n faCoins,\n faEllipsisH,\n faExclamationTriangle,\n faInfoCircle,\n faTimes,\n faTrash,\n faChartLine,\n faRedo,\n faHandshake,\n faHandHoldingDollar,\n faHistory,\n faChevronLeft,\n faChevronRight,\n faClipboard,\n faClipboardCheck,\n faUserCircle,\n faWallet,\n faExternalLinkAlt,\n faCog,\n faPlug,\n faExclamationCircle,\n faAngleUp,\n faAngleDoubleUp,\n faAngleDown,\n faAngleDoubleDown,\n faPen,\n faHandPaper,\n faHeartbeat,\n faSeedling,\n faBars,\n faQuestionCircle\n);\n\nconst getIcon = function(name) {\n switch (name) {\n case \"clipboard\":\n return [\"far\", \"clipboard\"];\n case \"question-circle\":\n return [\"far\", \"question-circle\"];\n default:\n return name;\n }\n };\n \n\nexport const IconProps = {\n style: \"style\",\n size: \"size\",\n color: \"color\",\n spin: \"spin\",\n name: \"name\",\n };\n \nexport const Icon = function({ name, style, ...rest }) {\n return ;\n };\n ","import cx from \"classnames\";\nimport { useCallback, useState, useRef } from \"react\";\nimport { IS_TOUCH } from \"config/env\";\nimport { Icon } from \"./Icon\";\nimport \"./Tooltip.css\";\n\nconst OPEN_DELAY = 0;\nconst CLOSE_DELAY = 100;\n\nexport default function Tooltip(props) {\n const [visible, setVisible] = useState(false);\n const intervalCloseRef = useRef(null);\n const intervalOpenRef = useRef(null);\n\n const position = props.position ?? \"left-bottom\";\n const trigger = props.trigger ?? \"hover\";\n\n const onMouseEnter = useCallback(() => {\n if (trigger !== \"hover\" || IS_TOUCH) return;\n\n if (intervalCloseRef.current) {\n clearInterval(intervalCloseRef.current);\n intervalCloseRef.current = null;\n }\n if (!intervalOpenRef.current) {\n intervalOpenRef.current = setTimeout(() => {\n setVisible(true);\n intervalOpenRef.current = null;\n }, OPEN_DELAY);\n }\n }, [setVisible, intervalCloseRef, intervalOpenRef, trigger]);\n\n const onMouseClick = useCallback(() => {\n if (trigger !== \"click\" && !IS_TOUCH) return;\n if (intervalCloseRef.current) {\n clearInterval(intervalCloseRef.current);\n intervalCloseRef.current = null;\n }\n if (intervalOpenRef.current) {\n clearInterval(intervalOpenRef.current);\n intervalOpenRef.current = null;\n }\n\n setVisible(true);\n }, [setVisible, intervalCloseRef, trigger]);\n\n const onMouseLeave = useCallback(() => {\n intervalCloseRef.current = setTimeout(() => {\n setVisible(false);\n intervalCloseRef.current = null;\n }, CLOSE_DELAY);\n if (intervalOpenRef.current) {\n clearInterval(intervalOpenRef.current);\n intervalOpenRef.current = null;\n }\n }, [setVisible, intervalCloseRef]);\n\n const className = cx(\"Tooltip\", props.className);\n\n return (\n \n \n {props.handle}\n \n \n  \n \n \n {visible &&
{props.renderContent()}
}\n \n );\n}\n","import React, { useState } from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport './PageSwitcher.css'; // Import the CSS file\n\nconst PageSwitcher = () => {\n const location = useLocation(); // Get the current location\n const [activePage, setActivePage] = useState(location.pathname); // Initialize activePage state with current path\n\n const handlePageChange = (path: string) => {\n setActivePage(path); // Update activePage state when a button is clicked\n };\n\n return (\n
\n
\n handlePageChange('/stakemst')}>\n Staking\n \n handlePageChange('/yields')}>\n Analytics\n \n handlePageChange('/tokens')}>\n Token Portal\n \n handlePageChange('/ecosystem')}>\n Ecosystem\n \n
\n
\n );\n};\n\nexport default PageSwitcher;\n\n","import React from \"react\";\nimport \"./TitleSection.scss\";\nimport PageSwitcher from \"../PageSwitcher/PageSwitcher\";\n\nconst TitleSection = ({ title, subTitle, shortSubTitle }) => {\n return (\n
\n
\n

{title}

\n
\n

\n {subTitle}\n

\n

\n {shortSubTitle}\n

\n
\n \n
\n
\n );\n};\n\nexport default TitleSection;\n","import { ethers} from \"ethers\";\nimport { getContract } from \"config/contracts\";\nimport { getRpcUrl } from \"config/chains\";\n\n\nexport function getConnection(chainId, contractName, abi) {\n const ContractAddress = getContract(chainId, contractName);\n const RPC = getRpcUrl(chainId);\n const RPCAsString = RPC ? RPC.toString() : \"\"\n if (!RPCAsString) {\n throw new Error(\"RPC URL is not available\");\n }\n const provider = new ethers.providers.StaticJsonRpcProvider(RPCAsString, chainId);\n const contract = new ethers.Contract(ContractAddress, abi, provider);\n return contract\n}","import { getConnection } from \"./Helpers\"\nimport { TELOS_MAINNET, FUSE_MAINNET, METER_MAINNET, TAIKO_MAINNET } from \"config/chains\";\nimport DIAPriceFeed from \"abis/DIAPriceFeed.json\";\nimport FusePriceFeed from \"abis/FusePriceFeed.json\";\nimport MeterOracle from \"abis/MeterOracle.json\"; \n\nimport { expandDecimals } from \"lib/numbers\";\nimport {MST_DECIMALS, DIA_DECIMALS, METER_DECIMALS } from \"lib/legacy\";\n\n\nconst fetchPrice = async (endpoint) => {\n const key = (endpoint.key).toString()\n if (key === 'stableCoin') {\n return 1E18;\n } else if (key === \"\" || key === \"undefined\") {\n return 0;\n }\n try {\n switch (endpoint.source) {\n case 'TELOS': {\n const contract = getConnection(TELOS_MAINNET, \"DIA_ORACLE\",DIAPriceFeed.abi)\n const result = await contract.getValue(key);\n return expandDecimals(result[0], (MST_DECIMALS - DIA_DECIMALS))\n };\n case 'FUSE': {\n const priceFeedContract = getConnection(FUSE_MAINNET, \"PRICE_FEED\", FusePriceFeed.abi)\n const result = await priceFeedContract.fetchPrice(); // fetches the price of WFUSE\n return result;\n };\n case 'TAIKO': {\n const priceFeedContract = getConnection(TAIKO_MAINNET, \"PRICE_FEED\", MeterOracle)\n const result = await priceFeedContract.getAssetPrice(key); // fetches the price of WFUSE\n return expandDecimals(result, (MST_DECIMALS - METER_DECIMALS));\n };\n case 'METER': {\n const contract = getConnection(METER_MAINNET, \"METER_ORACLE\",MeterOracle)\n const result = await contract.getAssetPrice(key);\n return expandDecimals(result, (MST_DECIMALS - METER_DECIMALS));\n };\n default:\n return 0\n }\n } catch (error) {\n console.error(`Error fetching token price for ${key}:`, error.message);\n throw error;\n }\n }\n\nexport default fetchPrice;","import React from 'react';\nimport { Trans, t } from \"@lingui/macro\";\nimport Modal from \"components/Modal/Modal\";\nimport { switchNetwork } from \"lib/wallets\";\nimport { getChainName } from \"config/chains\";\n\nexport default function SwitchNetworkModal(props) {\n const {\n isVisible,\n setIsVisible,\n currentChainId,\n targetChainId,\n targetPath,\n } = props;\n \n if (currentChainId === targetChainId) {\n return null;\n }\n \n const onClickPrimary = async () => {\n try {\n const newChainName = await switchNetwork(targetChainId, true)\n if (newChainName === getChainName(targetChainId)) {\n window.location.href = targetPath\n setIsVisible(false);\n }\n } catch (error) {\n console.error('Error switching network:', error);\n }\n }\n \n return (\n
\n \n
\n
\n Switch to {getChainName(targetChainId)}\n
\n
\n
\n \n
\n
\n
\n )\n }","import \"./StatsTooltip.css\";\ntype Props = {\n label: string;\n value: number | string | string[] | number[];\n showDollar?: boolean;\n};\n\nexport default function StatsTooltipRow({ label, value, showDollar = true }: Props) {\n function renderValue() {\n if (Array.isArray(value)) {\n return (\n
    \n {value.map((v, i) => (\n
  • {v}
  • \n ))}\n
\n );\n }\n return (\n \n {showDollar && \"$\"}\n {value}\n \n );\n }\n return (\n
\n {label}:\n {renderValue()}\n
\n );\n}\n","export const TOKEN_PRICE_ENDPOINTS: { [address: string]: { Name: string, Symbol: string, PriceEndPoint: object, isStableCoin: boolean } } = {\n \"0x568524DA340579887db50Ecf602Cd1BA8451b243\": {\n Name: \"meridian-mst\",\n Symbol: \"MST\",\n PriceEndPoint: {source: \"TLOS\", key: \"MST/TLOS\"}, \n isStableCoin: false,\n },\n \"0xA0fB8cd450c8Fd3a11901876cD5f17eB47C6bc50\": {\n Name: \"ethereum\",\n Symbol: \"ETH\",\n PriceEndPoint: {source: \"TLOS\", key: \"ETH/USD\"},\n isStableCoin: false,\n }, \n \"0x8f7D64ea96D729EF24a0F30b4526D47b80d877B9\": {\n Name: \"usdm-telos\",\n Symbol: \"USDM\",\n PriceEndPoint: {source: \"\", key: \"stableCoin\"},\n isStableCoin: true,\n },\n \"0x4447863cddABbF2c3dAC826f042e03c91927A196\": {\n Name: \"usdm-fuse\",\n Symbol: \"USDM\",\n PriceEndPoint: {source: \"\", key: \"stableCoin\"},\n isStableCoin: true,\n },\n \"0x0BE9e53fd7EDaC9F859882AfdDa116645287C629\": {\n Name: \"wfuse\",\n Symbol: \"WFUSE\",\n PriceEndPoint: {source: \"FUSE\", key: \"88\"},\n isStableCoin: false,\n },\n \"0x228ebBeE999c6a7ad74A6130E81b12f9Fe237Ba3\": {\n Name: \"mtrg\",\n Symbol: \"MTRG\",\n PriceEndPoint: {source: \"METER\", key: \"0x228ebBeE999c6a7ad74A6130E81b12f9Fe237Ba3\"}, // TO DO\n isStableCoin: false,\n }, \n \"0xA9d23408b9bA935c230493c40C73824Df71A0975\": {\n Name: \"taiko\",\n Symbol: \"TAIKO\",\n PriceEndPoint: {source: \"TAIKO\", key: \"0xA9d23408b9bA935c230493c40C73824Df71A0975\"}, // TO DO\n isStableCoin: false,\n }, \n //Add more tokens here\n };\n\n export const NETWORK_TOKEN_ENDPOINTS: { [address: string]: { Name: string, Symbol: string, PriceEndPoint: object, isStableCoin: boolean } } = {\n \"0xD102cE6A4dB07D247fcc28F366A623Df0938CA9E\": { // Telos Mainnet\n Name: \"wtlos\",\n Symbol: \"TLOS\",\n PriceEndPoint: {source: \"TELOS\", key: \"TLOS/USD\"}, \n isStableCoin: false,\n },\n \"0xA0fB8cd450c8Fd3a11901876cD5f17eB47C6bc50\": { // Base Mainnet\n Name: \"ethereum\",\n Symbol: \"ETH\",\n PriceEndPoint: {source: \"TELOS\", key: \"ETH/USD\"},\n isStableCoin: false,\n }, \n \"0x0BE9e53fd7EDaC9F859882AfdDa116645287C629\": { // Fuse Mainnet\n Name: \"wfuse\",\n Symbol: \"FUSE\",\n PriceEndPoint: {source: \"FUSE\", key: \"88\"},\n isStableCoin: false,\n },\n \"0x228ebBeE999c6a7ad74A6130E81b12f9Fe237Ba3\": { // Meter Mainnet\n Name: \"mtrg\",\n Symbol: \"MTRG\",\n PriceEndPoint: {source: \"METER\", key: \"0x228ebBeE999c6a7ad74A6130E81b12f9Fe237Ba3\"}, // TO DO\n isStableCoin: false,\n }, \n //Add more tokens here\n };","import { BASE_MAINNET, TELOS_TESTNET, TELOS_MAINNET, TAIKO_MAINNET } from \"./chains\";\n\nconst BASELINES = {\n [BASE_MAINNET]: {\n BASELINE_TIMESTAMP: 1706206540,\n BASELINE_NATIVE_SNAPSHOT: 26857448079 ,\n BASELINE_USDM_SNAPSHOT: 1789422171216235 ,\n },\n [TELOS_MAINNET]: {\n BASELINE_TIMESTAMP: 1706097600,\n BASELINE_NATIVE_SNAPSHOT: 8270198497155849,\n BASELINE_USDM_SNAPSHOT: 4813419619000996,\n },\n [TAIKO_MAINNET]: {\n BASELINE_TIMESTAMP: 1724338566,\n BASELINE_NATIVE_SNAPSHOT: 8270198497155849,\n BASELINE_USDM_SNAPSHOT: 4813419619000996,\n }\n}\n\nexport function getBaseline(chainId: number, name: string): string {\n if (!BASELINES[chainId]) {\n throw new Error(`Unknown chainId ${chainId}`);\n } \n if (!BASELINES[chainId][name]) {\n throw new Error(`Unknown Constant \"${name}\" for chainId ${chainId}`);\n } \n return BASELINES[chainId][name];\n }","import React, { useState, useEffect } from \"react\";\nimport { BigNumber, ethers } from \"ethers\";\nimport useSWR from \"swr\";\nimport USDMStaking from \"abis/USDMStaking.json\";\nimport { getContract } from \"config/contracts\";\nimport { BASE_MAINNET, TELOS_TESTNET, TELOS_MAINNET } from \"config/chains\";\nimport { contractFetcher } from \"lib/contracts\";\nimport { getBaseline } from \"config/AprBaselineUsdm\"\n\n\nexport function getDeltas(Network, currentNativeSnapshot, currentUsdmSnapshot) { \n let changeInNativeSnapshot = BigNumber.from(0) \n if(currentNativeSnapshot) {\n changeInNativeSnapshot = BigNumber.from((currentNativeSnapshot.sub(getBaseline(Network,\"BASELINE_NATIVE_SNAPSHOT\")).toString()))\n }\n let changeInUsdmSnapshot = BigNumber.from(0)\n if(currentUsdmSnapshot) {\n changeInUsdmSnapshot = BigNumber.from((currentUsdmSnapshot.sub(getBaseline(Network,\"BASELINE_USDM_SNAPSHOT\")).toString()))\n }\n const currentTimestampInSeconds = Math.floor(new Date().getTime() / 1000);\n const changeInTimeStamp = currentTimestampInSeconds - (getBaseline(Network,\"BASELINE_TIMESTAMP\")); \n return {\n changeInNativeSnapshot,\n changeInUsdmSnapshot,\n changeInTimeStamp,\n };\n}\n\nfunction getReturnValues(Network, currentNativeSnapshot, currentUsdmSnapshot) { \n let changeInNativeSnapshot = BigNumber.from(0) \n if(currentNativeSnapshot) {\n changeInNativeSnapshot = BigNumber.from((currentNativeSnapshot.sub(getBaseline(Network,\"BASELINE_NATIVE_SNAPSHOT\")).toString()))\n }\n let changeInUsdmSnapshot = BigNumber.from(0)\n if(currentUsdmSnapshot) {\n changeInUsdmSnapshot = BigNumber.from((currentUsdmSnapshot.sub(getBaseline(Network,\"BASELINE_USDM_SNAPSHOT\")).toString()))\n }\n const currentTimestampInSeconds = Math.floor(new Date().getTime() / 1000);\n const changeInTimeStamp = currentTimestampInSeconds - (getBaseline(Network,\"BASELINE_TIMESTAMP\")); \n return {\n changeInNativeSnapshot,\n changeInUsdmSnapshot,\n changeInTimeStamp,\n };\n}\n\n/* export function useGetChangeInUSDMStakingSnapshotsTlos() {\n // Get the current snapshots for Native Token\n const { data: currentNativeSnapshot } = useSWR(\n [ `StakeV2:nativeSnapshotOnUSDMStaking:${TELOS_MAINNET}`,\n TELOS_MAINNET,\n getContract( TELOS_MAINNET, \"MeridianUSDMStaking\"),\n \"F_ETH\",\n ],\n { fetcher: contractFetcher(undefined, USDMStaking),}\n );\n // and USDM\n const { data: currentUsdmSnapshot } = useSWR(\n [`StakeV2:usdmSnapshotOnUSDMStaking:${TELOS_MAINNET}`,\n TELOS_MAINNET,\n getContract( TELOS_MAINNET, \"MeridianUSDMStaking\"),\n \"F_LUSD\",\n ],\n {fetcher: contractFetcher(undefined, USDMStaking),}\n );\n const {changeInNativeSnapshot, changeInUsdmSnapshot, changeInTimeStamp} = getReturnValues(TELOS_MAINNET, currentNativeSnapshot, currentUsdmSnapshot)\n return {\n nativeDelta: changeInNativeSnapshot,\n usdmDelta: changeInUsdmSnapshot,\n timeDelta: changeInTimeStamp,\n };\n} */\n\nexport function useGetChangeInUSDMStakingSnapshotsTlos() {\n const [snapshotData, setSnapshotData] = useState({\n nativeDelta: null,\n usdmDelta: null,\n timeDelta: null\n });\n\n const fetchData = async () => {\n try {\n const additionalArgs1 = [\n `StakeV2:nativeSnapshotOnUSDMStaking:${TELOS_MAINNET}`,\n TELOS_MAINNET,\n getContract(TELOS_MAINNET, \"MeridianUSDMStaking\"),\n \"F_ETH\"\n ];\n const currentNativeSnapshot = contractFetcher(undefined, USDMStaking, additionalArgs1)\n const additionalArgs2 = [\n `StakeV2:usdmSnapshotOnUSDMStaking:${TELOS_MAINNET}`,\n TELOS_MAINNET,\n getContract(TELOS_MAINNET, \"MeridianUSDMStaking\"),\n \"F_LUSD\"\n ];\n const currentUsdmSnapshot = contractFetcher(undefined, USDMStaking, additionalArgs2)\n\n // const [currentNativeSnapshot, currentUsdmSnapshot] = await Promise.all([\n // contractFetcher(undefined, USDMStaking, additionalArgs1),\n // contractFetcher(undefined, USDMStaking, additionalArgs2)\n // ]);\n const { changeInNativeSnapshot, changeInUsdmSnapshot, changeInTimeStamp } = getReturnValues(TELOS_MAINNET, currentNativeSnapshot, currentUsdmSnapshot);\n\n setSnapshotData({\n nativeDelta: changeInNativeSnapshot,\n usdmDelta: changeInUsdmSnapshot,\n timeDelta: changeInTimeStamp\n });\n } catch (error) {\n console.error(\"Error fetching APR data:\", error);\n }\n };\n\n useEffect(() => {\n fetchData(); // Fetch data initially\n\n const intervalId = setInterval(fetchData, 30000); // Fetch data every 60 seconds\n\n return () => clearInterval(intervalId); \n }, []);\n\n return snapshotData;\n}\n\nexport function useGetChangeInUSDMStakingSnapshotsBase() {\n const [snapshotData, setSnapshotData] = useState({\n nativeDelta: null,\n usdmDelta: null,\n timeDelta: null\n });\n\n const fetchData = async () => {\n try {\n const additionalArgs1 = [\n `StakeV2:nativeSnapshotOnUSDMStaking:${BASE_MAINNET}`,\n BASE_MAINNET,\n getContract(BASE_MAINNET, \"MeridianUSDMStaking\"),\n \"F_ETH\"\n ];\n const additionalArgs2 = [\n `StakeV2:usdmSnapshotOnUSDMStaking:${BASE_MAINNET}`,\n BASE_MAINNET,\n getContract(BASE_MAINNET, \"MeridianUSDMStaking\"),\n \"F_LUSD\"\n ];\n const [currentNativeSnapshot, currentUsdmSnapshot] = await Promise.all([\n contractFetcher(undefined, USDMStaking, additionalArgs1),\n contractFetcher(undefined, USDMStaking, additionalArgs2)\n ]); \n const { changeInNativeSnapshot, changeInUsdmSnapshot, changeInTimeStamp } = getReturnValues(BASE_MAINNET, currentNativeSnapshot, currentUsdmSnapshot);\n\n setSnapshotData({\n nativeDelta: changeInNativeSnapshot,\n usdmDelta: changeInUsdmSnapshot,\n timeDelta: changeInTimeStamp\n });\n } catch (error) {\n console.error(\"Error fetching APR data:\", error);\n }\n };\n\n useEffect(() => {\n fetchData(); // Fetch data initially\n\n const intervalId = setInterval(fetchData, 30000); // Fetch data every 60 seconds\n\n return () => clearInterval(intervalId); \n }, []);\n\n return snapshotData;\n}\n","import { BigNumber, utils } from 'ethers'\n\nexport async function fetchPrice(apiUrl,tokenName) {\n try {\n const response = await fetch(apiUrl);\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`);\n }\n const data = await response.json();\n if (tokenName in data) {\n const tokenPrice = utils.parseUnits(data[tokenName].usd.toString(), 18);\n return tokenPrice;\n } else {\n throw new Error(`Token ID \"${tokenName}\" not found in the API response.`);\n }\n } catch (error) {\n console.error(\"Error fetching price:\", error.message);\n throw error; \n }\n}\n\n// For a given rewards token this function calculates the \n// weekly change for the rewards per weighted stake from the staking contract (rewardsPerWeightedStake)\nfunction calculateWeeklyChange(values, currentPtr) {\n // Validate input\n if (!Array.isArray(values) || values.length !== 8) {\n throw new Error('Invalid input array to calculateWeeklyChange ');\n } \n // Calculate the index for the value 7 days ago\n const ptr = currentPtr.toNumber();\n const oneWeekAgoPtr = (ptr + 1) % 8;\n const currentValue = BigNumber.from(values[ptr].toString());\n const oneWeekAgoValue = BigNumber.from(values[oneWeekAgoPtr].toString());\n const weeklyChange = BigNumber.from(currentValue.sub(oneWeekAgoValue)); \n return weeklyChange;\n}\n\nfunction calculateDailyChange(values, currentPtr) {\n // Validate input\n if (!Array.isArray(values) || values.length !== 8) {\n throw new Error('Invalid input array to calculateDailyChange ');\n } \n // Calculate the index for the value 1 day ago\n const ptr = currentPtr.toNumber();\n const oneDayAgoPtr = (ptr + 7) % 8;\n const currentValue = BigNumber.from(values[ptr].toString());\n const oneDayAgoValue = BigNumber.from(values[oneDayAgoPtr].toString());\n const dailyChange = BigNumber.from(currentValue.sub(oneDayAgoValue)); \n return dailyChange;\n}\n\n\n// Uses the change in rewardsPerWeightedStake for each rewards token to calculate the added USD per weighted stake\n// These are then summed to get the total USD per weighted stake for all reward tokens\nexport function getWeeklyBaseApr(rewardTokens, snapshots, currentRateIndex, mstPrice, tokenPrices){\n if (!Array.isArray(rewardTokens) || rewardTokens.length === 0 || !Array.isArray(snapshots) || snapshots.length === 0) {\n throw new Error('Invalid input array to getBaseApr ',rewardTokens, snapshots);\n } \n let weeklyUsdPerMST = BigNumber.from(0)\n for (let i = 0; i < rewardTokens.length; i++) {\n const weeklyChange = BigNumber.from(calculateWeeklyChange(snapshots[i], currentRateIndex))\n let tokenPrice = tokenPrices[i] ? tokenPrices[i] : BigNumber.from(0);\n tokenPrice = tokenPrices[i] ? BigNumber.from(tokenPrices[i].toString()) : BigNumber.from(0); \n weeklyUsdPerMST = weeklyUsdPerMST.add(tokenPrice.mul(weeklyChange));\n\n }\n const powerScale = BigNumber.from('10').pow(12)\n let estimatedBaseApr = BigNumber.from('0')\n if(mstPrice > 0){\n estimatedBaseApr = BigNumber.from(weeklyUsdPerMST.mul(52).mul(powerScale).div(mstPrice.toString()))\n }\n return estimatedBaseApr.gt(BigNumber.from(\"10000000000000000000\")) ? BigNumber.from(\"10000000000000000000\") : estimatedBaseApr\n}\n\nexport function getDailyBaseApr(rewardTokens, snapshots, currentRateIndex, mstPrice, tokenPrices){\n if (!Array.isArray(rewardTokens) || rewardTokens.length === 0 || !Array.isArray(snapshots) || snapshots.length === 0) {\n throw new Error('Invalid input array to getBaseApr ',rewardTokens, snapshots);\n } \n let dailyUsdPerMST = BigNumber.from(0)\n for (let i = 0; i < rewardTokens.length; i++) {\n const dailyChange = BigNumber.from(calculateDailyChange(snapshots[i], currentRateIndex))\n let tokenPrice = tokenPrices[i] ? tokenPrices[i] : BigNumber.from(0);\n tokenPrice = tokenPrices[i] ? BigNumber.from(tokenPrices[i].toString()) : BigNumber.from(0); \n dailyUsdPerMST = dailyUsdPerMST.add(tokenPrice.mul(dailyChange));\n }\n const powerScale = BigNumber.from('10').pow(12)\n let estimatedBaseApr = BigNumber.from('0')\n if(mstPrice > 0){\n estimatedBaseApr = BigNumber.from(dailyUsdPerMST.mul(365).mul(powerScale).div(mstPrice.toString()))\n }\n return estimatedBaseApr.gt(BigNumber.from(\"10000000000000000000\")) ? BigNumber.from(\"10000000000000000000\") : estimatedBaseApr\n}\n\n\n","import { getConnection } from \"./Helpers\"\nimport { BigNumber } from \"ethers\";\nimport { getDailyBaseApr, getWeeklyBaseApr } from \"components/Helpers/getBaseApr\";\nimport MSTStaking from \"abis/MSTStaking.json\";\nimport fetchPrice from \"./FetchPrice\";\nimport { TOKEN_PRICE_ENDPOINTS } from \"config/tokenPriceEndpoints\";\nimport { TELOS_MAINNET, FUSE_MAINNET, METER_MAINNET, NETWORK_METADATA } from \"config/chains\";\n\nasync function getRewardTokens(chainId) {\n const contract = getConnection(chainId, \"MeridianMultiPoolStaking\", MSTStaking.abi) \n try {\n const result = await contract.getRewardTokens(); \n return result;\n } catch (error) {\n console.error(`Error fetching reward tokens for network ${chainId}:`, error.message);\n throw error;\n }\n}\nasync function fetchDailyRateSnapshots(token, chainId) {\n const contract = getConnection(chainId, \"MeridianMultiPoolStaking\", MSTStaking.abi)\n try {\n const result = await contract.getDailyRateSnapshots(token);\n return result;\n } catch (error) {\n console.error(`Error fetching snapshots for ${token}:`, error.message);\n throw error;\n }\n};\n// Calculates the base APR for MST staking on specified network (chainId)\nconst InterestRate = async ({ chainId, mstPrice }) => {\n \n // snapshot calculation of interest only valid 8 days after launch so return use daily calcs during first 8 days\n let dailyCalcMethod = false\n const currentTimestamp = Math.floor(Date.now() / 1000); // Convert milliseconds to seconds\n if((NETWORK_METADATA[chainId].launchTime + 691200) > currentTimestamp){ \n dailyCalcMethod = true\n }\n\n try {\n // Step 1: Get reward tokens for specified network from the contract\n let rewardTokens = await getRewardTokens(chainId);\n\n // Step 2: Get the current rate index pointer from the contract\n const contract = getConnection(chainId, \"MeridianMultiPoolStaking\", MSTStaking.abi);\n const currentRateIndex = await contract.currentRateIndex();\n\n // Step 3: Get the price keys for the reward tokens\n const priceEndPoints = Array.isArray(rewardTokens) ? rewardTokens.map((address) => TOKEN_PRICE_ENDPOINTS[address]?.PriceEndPoint) : [];\n const getPriceKey = (endpoint) => `StakeMSTDIAKeys:${endpoint}:${chainId}`;\n const priceKeys = priceEndPoints ? priceEndPoints.map(getPriceKey) : [];\n\n // Step 4: Set up the calls ready to get the daily rate snapshots for the reward tokens from the contract\n const getSnapshotsKey = (rewardToken) => `dailyRateSnapshots-${rewardToken}-${chainId}`;\n const snapshotKeys = rewardTokens ? rewardTokens.map(getSnapshotsKey) : [];\n const snapshotPromises = snapshotKeys.map((key) => {\n const token = key.split('-')[1];\n return fetchDailyRateSnapshots(token, chainId);\n });\n \n // Step 5: Make the contract calls and await results\n const [prices, snapshotResults] = await Promise.all([\n Promise.all(priceEndPoints.map((endpoint) => fetchPrice(endpoint))),\n Promise.all(snapshotPromises)\n ]);\n\n // Step 6: Calculate the estimated APR\n let APR = BigNumber.from(0);\n if (snapshotResults.length > 0 && mstPrice && currentRateIndex && prices.length > 0) {\n if(dailyCalcMethod ) {\n APR = getDailyBaseApr(rewardTokens, snapshotResults, currentRateIndex, mstPrice, prices);\n } else {\n APR = getWeeklyBaseApr(rewardTokens, snapshotResults, currentRateIndex, mstPrice, prices);\n }\n }\n return APR;\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n return BigNumber.from(0); // Return default APR \n }\n}\n\nexport default InterestRate;","import React, { useState, useEffect, useMemo, useRef } from \"react\";\nimport { Trans, t } from \"@lingui/macro\";\nimport { useWeb3React } from \"@web3-react/core\";\n\nimport Modal from \"components/Modal/Modal\";\nimport Tooltip from \"components/Tooltip/Tooltip\";\nimport Footer from \"components/Footer/Footer\";\nimport TitleSection from \"../../components/TitleSection/TitleSection\";\n\nimport MSTStaking from \"abis/MSTStaking.json\";\nimport USDMStaking from \"abis/USDMStaking.json\";\nimport Token from \"abis/Token.json\";\nimport RewardReader from \"abis/RewardReader.json\";\nimport fetchPrice from \"./FetchPrice\";\n\nimport { ethers, BigNumber, utils } from \"ethers\";\nimport {\n MST_DECIMALS,\n NATIVE_DECIMALS,\n USD_DECIMALS,\n DIA_DECIMALS,\n SECONDS_PER_DAY,\n BASIS_POINTS_DIVISOR,\n PLACEHOLDER_ACCOUNT,\n getProcessedData,\n getPageTitle,\n getStakingData,\n} from \"lib/legacy\";\nimport { useMstPrice, useTotalMstStaked, useTotalMstSupply } from \"domain/legacy\";\nimport { TELOS_MAINNET, BASE_MAINNET, FUSE_MAINNET, METER_MAINNET, TAIKO_MAINNET, NETWORK_METADATA, getRpcUrl, getChainName, getConstant } from \"config/chains\";\n\nimport useSWR from \"swr\";\n\nimport { getContract } from \"config/contracts\";\nimport { getProvider } from \"lib/rpc\";\nimport { switchNetwork } from \"lib/wallets\";\nimport SwitchNetworkModal from \"components/SwitchNetworkModal/SwitchNetworkModal\";\n\nimport \"./StakeMST.css\";\nimport StatsTooltipRow from \"components/StatsTooltip/StatsTooltipRow\";\nimport { getServerUrl } from \"config/backend\";\nimport { callContract, contractFetcher } from \"lib/contracts\";\nimport { helperToast } from \"lib/helperToast\";\nimport { approveTokens } from \"domain/tokens\";\nimport { TOKEN_PRICE_ENDPOINTS, NETWORK_TOKEN_ENDPOINTS } from \"config/tokenPriceEndpoints\"\nimport { bigNumberify, expandDecimals, formatAmount, formatAmountFree, formatKeyAmount, parseValue } from \"lib/numbers\";\nimport { useChainId } from \"lib/chains\";\nimport ExternalLink from \"components/ExternalLink/ExternalLink\";\nimport { getDeltas } from './USDMStakingRateGetter'\nimport InterestRate from \"./InterestRateGetter\"\n\nconst { AddressZero } = ethers.constants;\n\n// Helper functions\n\nconst getRateFromMultiplier = (multiplier, estimatedBaseApr) => {\n const rateValue = BigNumber.from(multiplier).mul(estimatedBaseApr);\n return rateValue\n}\n\nfunction calculateDaysFromNow(timestamp) {\n const now = Date.now() / 1000; // Current timestamp in seconds\n const differenceInSeconds = timestamp - now;\n if (differenceInSeconds <= 0) {\n return 0;\n }\n return Math.ceil(differenceInSeconds / (24 * 60 * 60));\n}\n\nfunction daysFromNowString(timestamp) {\n const daysFromNow = calculateDaysFromNow(timestamp)\n if (daysFromNow <= 0) {\n return 'now';\n }\n return `${daysFromNow} days`;\n}\n\nfunction GetMaxAvailableToRedeem(userInvestments) {\n if (!userInvestments) {\n return 0\n }\n let maxAvailableToRedeem = BigNumber.from(0);\n userInvestments.forEach((pool) => {\n pool.forEach((entry) => {\n const { amount, vestingTimestamp } = entry;\n const timespan = calculateDaysFromNow(vestingTimestamp);\n if (timespan <= 0) {\n maxAvailableToRedeem = maxAvailableToRedeem.add(BigNumber.from(amount.toString()));\n }\n });\n });\n return maxAvailableToRedeem;\n}\n\n// Main components\n\nfunction StakeModal(props) {\n const {\n isVisible,\n setIsVisible,\n chainId,\n title,\n maxAmount,\n value,\n setValue,\n active,\n account,\n library,\n stakingTokenSymbol,\n stakingTokenAddress,\n farmAddress,\n stakingContractAddress,\n stakeMethodName,\n setPendingTxns,\n presetDurations,\n presetMultipliers,\n estimatedBaseApr,\n rewardsAvailable,\n } = props;\n\n const [isStaking, setIsStaking] = useState(false);\n const [isApproving, setIsApproving] = useState(false);\n const [selectedRowIndex, setSelectedRowIndex] = useState(null);\n\n const { data: tokenAllowance } = useSWR(\n active && stakingTokenAddress && [active, chainId, stakingTokenAddress, \"allowance\", account, farmAddress],\n {\n fetcher: contractFetcher(library, Token),\n }\n );\n\n let amount = parseValue(value, 18);\n const needApproval = farmAddress !== AddressZero && tokenAllowance && amount && amount.gt(tokenAllowance);\n\n const getError = () => {\n if (!amount || amount.eq(0)) {\n return t`Enter an amount`;\n }\n if (maxAmount && amount.gt(maxAmount)) {\n return t`Max amount exceeded`;\n }\n if (selectedRowIndex === null) {\n return t`Select lockup period`;\n }\n };\n\n const onClickPrimary = () => {\n if (needApproval) {\n approveTokens({\n setIsApproving,\n library,\n tokenAddress: stakingTokenAddress,\n spender: farmAddress,\n chainId,\n });\n return;\n }\n\n setIsStaking(true);\n const contract = new ethers.Contract(stakingContractAddress, MSTStaking.abi, library.getSigner());\n\n callContract(chainId, contract, stakeMethodName, [amount, selectedRowIndex], {\n sentMsg: t`Stake submitted!`,\n failMsg: t`Stake failed.`,\n setPendingTxns,\n })\n .then(async (res) => {\n setIsVisible(false);\n })\n .finally(() => {\n setIsStaking(false);\n setSelectedRowIndex(null)\n });\n };\n\n const isPrimaryEnabled = () => {\n const error = getError();\n if (error) {\n return false;\n }\n if (isApproving) {\n return false;\n }\n if (isStaking) {\n return false;\n }\n if (selectedRowIndex === null) {\n return false;\n }\n return true;\n };\n\n const getPrimaryText = () => {\n const error = getError();\n if (error) {\n return error;\n }\n if (isApproving) {\n return t`Approving ${stakingTokenSymbol}...`;\n }\n if (needApproval) {\n return t`Approve ${stakingTokenSymbol}`;\n }\n if (isStaking) {\n return t`Staking...`;\n }\n return t`Stake`;\n };\n\n const AprTableInModal = ({ presetMultipliers, presetDurations, estimatedBaseApr }) => {\n if (!presetMultipliers || !presetDurations) {\n return
Loading ...
;\n }\n const daysArray = presetDurations.map((value) => `${value} ${value === 1 ? 'Day' : 'Days'}`);\n\n const handleCheckboxChange = (index) => {\n setSelectedRowIndex(index);\n };\n\n\n return (\n
\n
\n Available Rates\n
\n
\n
\n
Min Lockup
\n
Forecast APR
\n
Select
\n
\n {presetMultipliers.map((value, index) => (\n
\n
\n {daysArray[index]}\n
\n
\n {formatAmount(getRateFromMultiplier(value, estimatedBaseApr), 19, 1, false)}%\n
\n
\n handleCheckboxChange(index)}\n />\n
\n
\n ))}\n
\n
\n );\n };\n\n return (\n
\n \n
\n {(() => AprTableInModal({ presetMultipliers, presetDurations, estimatedBaseApr }))()}\n
\n
\n
\n
\n Stake\n
\n
setValue(formatAmountFree(maxAmount, 18, 18))}>\n Max: {formatAmount(maxAmount, 18, 2, true)}\n
\n
\n
\n
\n setValue(e.target.value)}\n />\n
\n
{stakingTokenSymbol}
\n
\n
\n
\n
\n {rewardsAvailable && (\n
\n Pending rewards will be sent to your wallet\n
\n )}\n
\n \n
\n
\n
\n );\n}\n\nfunction UnstakeModal(props) {\n const {\n isVisible,\n setIsVisible,\n chainId,\n title,\n maxAmount,\n value,\n setValue,\n library,\n unstakingTokenSymbol,\n stakingContractAddress,\n unstakeMethodName,\n setPendingTxns,\n rewardsAvailable,\n } = props;\n const [isUnstaking, setIsUnstaking] = useState(false);\n\n let amount = parseValue(value, 18);\n\n const getError = () => {\n if (!amount) {\n return t`Enter an amount`;\n }\n if (amount.gt(maxAmount)) {\n return t`Max amount exceeded`;\n }\n };\n\n const onClickPrimary = () => {\n setIsUnstaking(true);\n const contract = new ethers.Contract(stakingContractAddress, MSTStaking.abi, library.getSigner());\n\n callContract(chainId, contract, unstakeMethodName, [amount], {\n sentMsg: t`Unstake submitted!`,\n failMsg: t`Unstake failed.`,\n successMsg: t`Unstake completed!`,\n setPendingTxns,\n })\n .then(async (res) => {\n setIsVisible(false);\n })\n .finally(() => {\n setIsUnstaking(false);\n });\n };\n\n const isPrimaryEnabled = () => {\n const error = getError();\n if (error) {\n return false;\n }\n if (isUnstaking) {\n return false;\n }\n return true;\n };\n\n const getPrimaryText = () => {\n const error = getError();\n if (error) {\n return error;\n }\n if (isUnstaking) {\n return t`Unstaking...`;\n }\n return t`Unstake`;\n };\n\n return (\n
\n \n
\n
\n
\n
\n Unstake\n
\n
setValue(formatAmountFree(maxAmount, 18, 18))}>\n Max: {formatAmount(maxAmount, 18, 2, true)}\n
\n
\n
\n
\n setValue(e.target.value)}\n />\n
\n
{unstakingTokenSymbol}
\n
\n
\n
\n {rewardsAvailable && (\n
\n Pending rewards will be sent to your wallet\n
\n )}\n
\n \n
\n
\n
\n );\n}\n\n\nfunction ClaimModal(props) {\n const {\n isVisible,\n setIsVisible,\n stakingContractAddress,\n library,\n chainId,\n setPendingTxns,\n } = props;\n const [isClaiming, setIsClaiming] = useState(false);\n\n const isPrimaryEnabled = () => {\n return !isClaiming;\n };\n\n const getPrimaryText = () => {\n if (isClaiming) {\n return t`Claiming...`;\n }\n return t`Claim`;\n };\n\n const onClickPrimary = () => {\n setIsClaiming(true);\n\n const contract = new ethers.Contract(stakingContractAddress, MSTStaking.abi, library.getSigner());\n callContract(\n chainId,\n contract,\n \"claimRewards\",\n {\n sentMsg: t`Claim submitted.`,\n failMsg: t`Claim failed.`,\n successMsg: t`Claim completed!`,\n setPendingTxns,\n }\n )\n .then(async (res) => {\n setIsVisible(false);\n })\n .finally(() => {\n setIsClaiming(false);\n });\n };\n\n return (\n
\n \n
\n
\n \n Claim all reward tokens to wallet\n \n
\n
\n
\n \n
\n
\n
\n );\n}\n\nexport default function StakeV2({ setPendingTxns, connectWallet }) {\n const { active, library, account } = useWeb3React();\n const { chainId } = useChainId();\n\n const chainName = getChainName(chainId);\n\n const [isStakeModalVisible, setIsStakeModalVisible] = useState(false);\n const [stakeModalTitle, setStakeModalTitle] = useState(\"\");\n const [stakeModalMaxAmount, setStakeModalMaxAmount] = useState(undefined);\n const [stakeValue, setStakeValue] = useState(\"\");\n const [stakingTokenSymbol, setStakingTokenSymbol] = useState(\"\");\n const [stakingTokenAddress, setStakingTokenAddress] = useState(\"\");\n const [stakingFarmAddress, setStakingFarmAddress] = useState(\"\");\n const [stakeMethodName, setStakeMethodName] = useState(\"\");\n\n const [isUnstakeModalVisible, setIsUnstakeModalVisible] = useState(false);\n const [unstakeModalTitle, setUnstakeModalTitle] = useState(\"\");\n const [unstakeModalMaxAmount, setUnstakeModalMaxAmount] = useState(undefined);\n const [unstakeValue, setUnstakeValue] = useState(\"\");\n const [unstakingTokenSymbol, setUnstakingTokenSymbol] = useState(\"\");\n const [unstakeMethodName, setUnstakeMethodName] = useState(\"\");\n const [estimatedBaseApr, setEstimatedBaseApr] = useState(BigNumber.from(0));\n\n const [isClaimModalVisible, setIsClaimModalVisible] = useState(false);\n const [isSwitchNetworkVisible, setIsSwitchNetworkVisible] = useState(false);\n const [targetChainId, setTargetChainId] = useState(TELOS_MAINNET)\n const [targetPath, setTargetPath] = useState(\"https://mint.meridianfinance.net/#/\")\n\n const [mstMarketCap, setMstMarketCap] = useState(0);\n const [tokenSymbols, setRewardTokenSymbols] = useState([]);\n\n const [totalUserInvestment, setTotalUserInvestment] = useState(BigNumber.from(0));\n const [availableToRedeem, setAvailableToRedeem] = useState(BigNumber.from(0));\n const [totalTokensToUsd, setTotalTokensToUsd] = useState(BigNumber.from(0));\n const [averageWeightedApr, setAverageWeightedApr] = useState(BigNumber.from(0));\n const [tokensInUsd, setTokensInUsd] = useState(BigNumber.from(0));\n const [tokenPrices, setTokenPrices] = useState([]);\n const [usdmStakingAprTlos, setUsdmStakingAprTlos] = useState(BigNumber.from(0));\n const [usdmStakingAprBase, setUsdmStakingAprBase] = useState(BigNumber.from(0));\n const [networkTokenPrices, setNetworkTokenPrices] = useState({});\n const [stakingData, setStakingData] = useState({});\n const [aprTimer, setAprTimer] = useState(0);\n const [otherChainAprData, setOtherChainAprData] = useState([]);\n\n const mstAddress = getContract(chainId, \"MST\");\n const rewardsAvailable = totalTokensToUsd.gt(0);\n\n const MeridianMultiPoolStakingAddress = getContract(chainId, \"MeridianMultiPoolStaking\");\n const stakingContractAddress = MeridianMultiPoolStakingAddress\n\n const nativeTokenSymbol = getConstant(chainId, \"nativeTokenSymbol\");\n const wrappedTokenSymbol = getConstant(chainId, \"wrappedTokenSymbol\");\n\n const { total: mstPrice } = useMstPrice()\n const mstPriceRef = useRef(mstPrice);\n\n const EthPrice = networkTokenPrices.hasOwnProperty('TLOS') ? BigNumber.from(networkTokenPrices['ETH'].toString()) : BigNumber.from(0)\n\n const handleNetworkCheck = (target, path) => {\n setTargetChainId(target);\n setTargetPath(path);\n setIsSwitchNetworkVisible(true);\n };\n\n const handleRedirect = (target) => {\n window.location.href = target;\n }\n\n // Contract Calls and data setup functions\n\n //get user wallet balance of MST\n const { data: walletMSTBalance } = useSWR(\n [`StakeMST:walletMSTBalance:${active}`, chainId, getContract(chainId, \"MST\"), \"balanceOf\", account || PLACEHOLDER_ACCOUNT],\n {\n fetcher: contractFetcher(library, Token),\n }\n );\n //get user staking balance for MST\n const { data: userTotalMstStaked } = useSWR(\n [`StakeMST:userTotalMstStaked:${active}`, chainId, MeridianMultiPoolStakingAddress, \"getMstStake\", account || PLACEHOLDER_ACCOUNT],\n {\n fetcher: contractFetcher(library, MSTStaking),\n }\n );\n // get the user's pending rewards\n const { data: userPendingRewards } = useSWR(\n [`StakeMST:userPendingRewards:${active}`, chainId, MeridianMultiPoolStakingAddress, \"getUserPendingRewards\", account || PLACEHOLDER_ACCOUNT],\n {\n fetcher: contractFetcher(library, MSTStaking),\n }\n );\n // fetch the configured reward token addresses\n const { data: rewardTokens } = useSWR(\n [`StakeMST:rewardTokens:${active}`, chainId, MeridianMultiPoolStakingAddress, \"getRewardTokens\"],\n {\n fetcher: contractFetcher(library, MSTStaking),\n refreshInterval: 60000, // 60 second refresh\n }\n );\n // fetch the configured number of investment pools\n const { data: numberOfPools } = useSWR(\n [`StakeMST:numberOfPools:${active}`, chainId, MeridianMultiPoolStakingAddress, \"numberOfPools\"],\n {\n fetcher: contractFetcher(library, MSTStaking),\n refreshInterval: 60000, // 60 second refresh\n }\n );\n\n // Get the oracle price for the network tokens\n const networkTokenEndPoints = Object.values(NETWORK_TOKEN_ENDPOINTS).map(token => token.PriceEndPoint);\n const { data: nativeTokenPrices, networkTokenError } = useSWR(\n networkTokenEndPoints ? networkTokenEndPoints.map(endpoint => endpoint) : null, (...endpoints) => Promise.all(endpoints.map((endpoint) => fetchPrice(endpoint))),\n {\n fallbackData: [],\n });\n if (networkTokenError) {\n console.error(\"Error fetching Network Token Prices:\", networkTokenError);\n }\n useEffect(() => {\n if (nativeTokenPrices) {\n // create a price object eg{TLOS: TLOSprice, ETH: ETHprice ... }\n const formattedData = nativeTokenPrices.reduce((acc, price, index) => {\n const networkTokenSymbol = Object.values(NETWORK_TOKEN_ENDPOINTS).map(token => token.Symbol);\n const tokenName = networkTokenSymbol[index];\n acc[tokenName] = price;\n return acc;\n }, {});\n setNetworkTokenPrices(formattedData);\n }\n }, [nativeTokenPrices]);\n\n // Get the oracle price for the reward tokens\n const priceEndPoints = Array.isArray(rewardTokens) ? rewardTokens.map((address) => TOKEN_PRICE_ENDPOINTS[address]?.PriceEndPoint) : [];\n const { data: prices, diaError } = useSWR(\n priceEndPoints ? priceEndPoints.map(endpoint => endpoint) : null, (...endpoints) => Promise.all(endpoints.map((endpoint) => fetchPrice(endpoint))),\n {\n fallbackData: [],\n refreshInterval: 30000, // 30 second refresh\n });\n if (diaError) {\n console.error(\"Error fetching reward token Prices:\", diaError);\n }\n\n useEffect(() => {\n setTokenPrices(prices ? prices : []);\n }, [prices]);\n\n // Set reward token prices in USD\n const getTotalTokensToUsd = (userPendingRewards, tokenPrices) => {\n if (userPendingRewards && tokenPrices) {\n return userPendingRewards.reduce((sum, value, index) => {\n const tokenToUsd = getTokensToUsd(index, value, tokenPrices);\n return sum.add(tokenToUsd);\n }, BigNumber.from(0));\n } else {\n return BigNumber.from(0)\n }\n };\n useEffect(() => {\n if (userPendingRewards && tokenPrices) {\n let resultArray = [];\n userPendingRewards.forEach((numTokens, index) => {\n const thisTokenUSDValue = getTokensToUsd(index, numTokens, tokenPrices);\n resultArray.push(thisTokenUSDValue);\n });\n setTokensInUsd(resultArray);\n }\n }, [userPendingRewards, tokenPrices]);\n\n useEffect(() => {\n setTotalTokensToUsd(getTotalTokensToUsd(userPendingRewards, tokenPrices));\n }, [userPendingRewards, tokenPrices]);\n\n\n // get reward token symbols for display\n useEffect(() => {\n if (rewardTokens) {\n const symbols = rewardTokens.map((address) => TOKEN_PRICE_ENDPOINTS[address]?.Symbol);\n setRewardTokenSymbols(symbols);\n }\n }, [rewardTokens]);\n\n useEffect(() => {\n mstPriceRef.current = mstPrice; // Update mstPriceRef when mstPrice changes\n }, [mstPrice]);\n\n // Set the estimated APR for each network\n const fetchTlosAPR = async () => {\n try {\n const apr = await InterestRate({ chainId: TELOS_MAINNET, mstPrice: mstPriceRef.current });\n return apr\n } catch (error) { console.error('Error fetching TLOS APR:', error); }\n }\n\n const fetchBaseAPR = async () => {\n try {\n const apr = await InterestRate({ chainId: BASE_MAINNET, mstPrice: mstPriceRef.current });\n return apr\n } catch (error) { console.error('Error fetching BASE APR:', error); }\n }\n\n const fetchFuseAPR = async () => {\n try {\n const apr = await InterestRate({ chainId: FUSE_MAINNET, mstPrice: mstPriceRef.current });\n console.log(apr, \"Meter ARR\");\n return apr\n } catch (error) { console.error('Error fetching FUSE APR:', error); }\n }\n\n const fetchMeterAPR = async () => {\n try {\n const apr = await InterestRate({ chainId: METER_MAINNET, mstPrice: mstPriceRef.current });\n return apr\n } catch (error) { console.error('Error fetching NETER APR:', error); }\n }\n\n const fetchTaikoAPR = async () => {\n try {\n const apr = await InterestRate({ chainId: TAIKO_MAINNET, mstPrice: mstPriceRef.current });\n console.log(apr, \"ARR\");\n return apr\n } catch (error) { console.error('Error fetching TAIKO APR:', error); }\n }\n\n // selector to get the base APR for specified chainId\n const getCurrentBaseApr = (tlosAPR, baseAPR, fuseAPR, meterAPR, taikoAPR, chainId) => {\n switch (chainId) {\n case TELOS_MAINNET:\n return tlosAPR ? tlosAPR : BigNumber.from(0);\n case BASE_MAINNET:\n return baseAPR ? baseAPR : BigNumber.from(0);\n case FUSE_MAINNET:\n return fuseAPR ? fuseAPR : BigNumber.from(0);\n case METER_MAINNET:\n return meterAPR ? meterAPR : BigNumber.from(0);\n case TAIKO_MAINNET:\n return taikoAPR ? taikoAPR : BigNumber.from(0);\n default:\n return BigNumber.from(0);\n }\n };\n\n // Initiate calculations for current base APR\n useEffect(() => {\n const fetchDataAndCalculateAPR = async () => {\n try {\n const [tlosAPR, baseAPR, fuseAPR, meterAPR, taikoAPR] = await Promise.all([fetchTlosAPR(), fetchBaseAPR(), fetchFuseAPR(), fetchMeterAPR(), fetchTaikoAPR()]);\n const latestAPR = getCurrentBaseApr(tlosAPR, baseAPR, fuseAPR, meterAPR, taikoAPR, chainId);\n setEstimatedBaseApr(latestAPR);\n\n // Generate array of other chainIds and their respective APRs\n const networks = [\n { id: TELOS_MAINNET, apr: tlosAPR },\n { id: BASE_MAINNET, apr: baseAPR },\n { id: FUSE_MAINNET, apr: fuseAPR },\n { id: METER_MAINNET, apr: meterAPR },\n { id: TAIKO_MAINNET, apr: taikoAPR }\n\n ];\n\n console.log(taikoAPR, \"taikoAPR\")\n\n const filteredNetworks = networks.filter(network => network.id !== chainId);\n const otherChainData = filteredNetworks.map(network => ({\n targetChainId: network.id,\n currentBaseStakingApr: network.apr\n }));\n setOtherChainAprData(otherChainData);\n\n } catch (error) {\n console.error(\"Error fetching and calculating APR:\", error);\n }\n };\n fetchDataAndCalculateAPR();\n const intervalId = setInterval(() => { setAprTimer(prevTimer => prevTimer + 1); }, 10000); // 10 seconds\n return () => clearInterval(intervalId);\n }, [chainId, aprTimer]);\n\n\n\n // get the super staking data for trading platform (Base Network)\n const rewardReaderAddress = getContract(BASE_MAINNET, 'RewardReader');\n const stakedGmxTrackerAddress = getContract(BASE_MAINNET, \"StakedGmxTracker\");\n const bonusGmxTrackerAddress = getContract(BASE_MAINNET, \"BonusGmxTracker\");\n const feeGmxTrackerAddress = getContract(BASE_MAINNET, \"FeeGmxTracker\");\n const stakedGlpTrackerAddress = getContract(BASE_MAINNET, \"StakedGlpTracker\");\n const feeGlpTrackerAddress = getContract(BASE_MAINNET, \"FeeGlpTracker\");\n const rewardTrackersForStakingInfo = [stakedGmxTrackerAddress, bonusGmxTrackerAddress, feeGmxTrackerAddress, stakedGlpTrackerAddress, feeGlpTrackerAddress,];\n const fetcherDependencies = useMemo(() => [\n `StakeV2:stakingInfo:${active}`,\n BASE_MAINNET,\n rewardReaderAddress,\n \"getStakingInfo\",\n account || PLACEHOLDER_ACCOUNT,\n ], [active, rewardReaderAddress, account]);\n\n const { data: stakingInfo } = useSWR(fetcherDependencies,\n {\n fetcher: contractFetcher(library, RewardReader, [rewardTrackersForStakingInfo]),\n refreshInterval: 60000,\n }\n );\n\n useEffect(() => {\n const stakingData = getStakingData(stakingInfo);\n setStakingData(stakingData);\n }, [stakingInfo]);\n\n\n\n let poolIDs = [0]\n if (numberOfPools) {\n poolIDs = Array.from({ length: numberOfPools }, (_, index) => index);\n }\n\n const getTokenSymbol = (tokenIndex) => {\n if (tokenSymbols) {\n return tokenSymbols[tokenIndex]\n } else {\n return (\"Loading\")\n }\n }\n\n const getTokensToUsd = (tokenIndex, numOfTokens, tokenPrices) => {\n if (tokenPrices[tokenIndex]) {\n const price = BigNumber.from(tokenPrices[tokenIndex].toString());\n const tokens = BigNumber.from(numOfTokens.toString())\n const divisor = BigNumber.from(\"1000000000000000000\")\n return BigNumber.from((price.mul(tokens).div(divisor)))\n } else {\n return BigNumber.from(0)\n }\n }\n\n const fetchMultipliers = async (poolID) => {\n const provider = getProvider(library, chainId);\n const contract = new ethers.Contract(MeridianMultiPoolStakingAddress, MSTStaking.abi, provider);\n try {\n const result = await contract.getPresetMultipliers(poolID);\n return parseInt(result.toString(), 10);\n } catch (error) {\n console.error(`Error fetching multipliers for poolID ${poolID}:`, error.message);\n throw error;\n }\n };\n const getMutiplierKey = (poolID) => `fetchMultipliers-${poolID}`;\n const { data: presetMultipliers, pmerror } = useSWR(poolIDs.map(getMutiplierKey), (...keys) => Promise.all(keys.map((key) => fetchMultipliers(parseInt(key.split('-')[1], 10)))));\n\n const fetchDurations = async (poolID) => {\n const provider = getProvider(library, chainId);\n const contract = new ethers.Contract(MeridianMultiPoolStakingAddress, MSTStaking.abi, provider);\n try {\n const result = await contract.getPresetDurations(poolID);\n return parseInt(result.toString(), 10);\n } catch (error) {\n console.error(`Error fetching durations for poolID ${poolID}:`, error.message);\n throw error;\n }\n };\n const getDurationKey = (poolID) => `fetchDurations-${poolID}`;\n const { data: presetDurations, pderror } = useSWR(poolIDs.map(getDurationKey), (...keys) => Promise.all(keys.map((key) => fetchDurations(parseInt(key.split('-')[1], 10)))));\n\n\n // Calculate the approx APR for Mint USDM staking on Telos\n const { data: currentTlosStakingSnapshot } = useSWR(\n [`StakeV2:nativeSnapshotOnUSDMStaking:${TELOS_MAINNET}`, TELOS_MAINNET, getContract(TELOS_MAINNET, \"MeridianUSDMStaking\"), \"F_ETH\",],\n { fetcher: contractFetcher(undefined, USDMStaking), }\n );\n const { data: currentUsdmStakingOnTlos } = useSWR(\n [`StakeV2:usdmSnapshotOnUSDMStaking:${TELOS_MAINNET}`, TELOS_MAINNET, getContract(TELOS_MAINNET, \"MeridianUSDMStaking\"), \"F_LUSD\",],\n { fetcher: contractFetcher(undefined, USDMStaking), }\n );\n const { changeInNativeSnapshot: telosDelta,\n changeInUsdmSnapshot: usdmDeltaTelos,\n changeInTimeStamp: timeDeltaTelos } = getDeltas(TELOS_MAINNET, currentTlosStakingSnapshot, currentUsdmStakingOnTlos);\n\n useEffect(() => {\n if (!mstPrice || mstPrice == 0 || !telosDelta || !usdmDeltaTelos || !timeDeltaTelos) {\n console.warn('data not available yet. Skipping calculations.');\n return;\n }\n if (networkTokenPrices.hasOwnProperty('TLOS')) {\n const nativeTokenPrice = BigNumber.from(networkTokenPrices['TLOS'].toString());\n const nativeRewards = BigNumber.from(telosDelta.mul(nativeTokenPrice).div(expandDecimals(1, NATIVE_DECIMALS)))\n const rewardsUSD = BigNumber.from(((nativeRewards.add(usdmDeltaTelos)).mul(expandDecimals(1, USD_DECIMALS))).toString())\n const annualRewardsPerStakeUSD = BigNumber.from(rewardsUSD.mul(365).mul(SECONDS_PER_DAY).div(timeDeltaTelos));\n const APR = BigNumber.from((annualRewardsPerStakeUSD.div(mstPrice).mul(100)).toString());\n setUsdmStakingAprTlos(APR)\n }\n }, [mstPrice, networkTokenPrices,]);\n\n // Calculate the approx APR for Mint USDM staking on Base\n const { data: currentBaseStakingSnapshot } = useSWR(\n [`StakeV2:nativeSnapshotOnUSDMStaking:${BASE_MAINNET}`, BASE_MAINNET, getContract(BASE_MAINNET, \"MeridianUSDMStaking\"), \"F_ETH\",],\n { fetcher: contractFetcher(undefined, USDMStaking), }\n );\n const { data: currentUsdmStakingOnBase } = useSWR(\n [`StakeV2:usdmSnapshotOnUSDMStaking:${BASE_MAINNET}`, BASE_MAINNET, getContract(BASE_MAINNET, \"MeridianUSDMStaking\"), \"F_LUSD\",],\n { fetcher: contractFetcher(undefined, USDMStaking), }\n );\n const { changeInNativeSnapshot: ethDelta,\n changeInUsdmSnapshot: usdmDeltaBase,\n changeInTimeStamp: timeDeltaBase } = getDeltas(BASE_MAINNET, currentBaseStakingSnapshot, currentUsdmStakingOnBase);\n\n useEffect(() => {\n if (!mstPrice || mstPrice == 0 || !ethDelta || !usdmDeltaBase || !timeDeltaBase) {\n console.warn('data not available yet. Skipping calculations.');\n return;\n }\n if (networkTokenPrices.hasOwnProperty('ETH')) {\n const nativeTokenPrice = BigNumber.from(networkTokenPrices['ETH'].toString());\n const nativeRewards = BigNumber.from(ethDelta.mul(nativeTokenPrice).div(expandDecimals(1, NATIVE_DECIMALS)))\n const rewardsUSD = BigNumber.from(((nativeRewards.add(usdmDeltaBase)).mul(expandDecimals(1, USD_DECIMALS))).toString())\n const annualRewardsPerStakeUSD = BigNumber.from(rewardsUSD.mul(365).mul(SECONDS_PER_DAY).div(timeDeltaBase));\n const APR = BigNumber.from((annualRewardsPerStakeUSD.div(mstPrice).mul(100)).toString());\n setUsdmStakingAprBase(APR)\n }\n }, [mstPrice, networkTokenPrices,]);\n\n\n const AprTable = ({ presetMultipliers, presetDurations, estimatedBaseApr, baseMstOnUsdm }) => {\n if (!presetMultipliers || !presetDurations) {\n return
Loading ...
;\n }\n\n const daysArray = presetDurations.map((value) => `${value} ${value === 1 ? 'Day' : 'Days'}`);\n const isTelosNetwork = typeof chainId !== 'undefined' && chainId === 40; // Check if chainId is Telos\n\n return (\n
\n
\n
Min Lockup
\n
APR %
\n
\n {presetMultipliers.map((value, index) => (\n
\n
\n {daysArray[index]}\n {isTelosNetwork && (presetDurations[index] === 180 || presetDurations[index] === 365) && (\n
\n \n Points Available\n \n
\n )}\n
\n
\n {formatAmount(getRateFromMultiplier(value, estimatedBaseApr), 19, 1, false)}%\n
\n
\n ))}\n
\n );\n };\n // Get the array of investment positions for this user and then useSWR to store them in userInvestments\n const fetchUserInvestments = async (poolID, account) => {\n const provider = getProvider(library, chainId);\n const contract = new ethers.Contract(MeridianMultiPoolStakingAddress, MSTStaking.abi, provider);\n try {\n const result = await contract.getUserInvestments(account, poolID);\n return result;\n } catch (error) {\n console.error(`Error fetching user investments for poolID ${poolID}:`, error.message);\n throw error;\n }\n };\n const getUserInvestmentsKey = (poolID) => `fetchUserInvestmentsKey-${poolID}`;\n const { data: userInvestments, UIerror } = useSWR(poolIDs.map(getUserInvestmentsKey), (...keys) => Promise.all(keys.map((key) => fetchUserInvestments(parseInt(key.split('-')[1], 10), account || PLACEHOLDER_ACCOUNT))));\n // userInvestments\n\n // Sum up all MST investment positions to get the total MST invested by this user - store in totalUserInvestment\n useEffect(() => {\n let newTotalInvestment\n if (userInvestments) {\n newTotalInvestment = userInvestments.flat().reduce((sum, tuple) => sum.add(tuple[0]), BigNumber.from(0));\n } else {\n newTotalInvestment = BigNumber.from(0)\n }\n setTotalUserInvestment(newTotalInvestment);\n }, [userInvestments]);\n // totalUserInvestment\n\n // Sum up all MST investment positions for this user where timelock has completed and store value in availableToRedeem\n useEffect(() => {\n setAvailableToRedeem(GetMaxAvailableToRedeem(userInvestments));\n }, [userInvestments]);\n // availableToRedeem\n\n // Calculate the average APR that this user is earning by creating a weighted average \n // based on the MST investment and APR of each indevidual position. Store result in averageWeightedApr\n const getAverageWeightedApr = (userInvestments, estimatedBaseApr) => {\n if (!userInvestments || !estimatedBaseApr) {\n return BigNumber.from(0);\n }\n let totalWeightedValue = BigNumber.from(0);\n let totalTuple0 = BigNumber.from(0);\n userInvestments.forEach((poolData) => {\n poolData.forEach((tuple) => {\n const tuple0 = BigNumber.from(tuple[0]);\n const rateMultiplier = getRateFromMultiplier(tuple[1], estimatedBaseApr);\n const weightedValue = tuple0.mul(rateMultiplier);\n\n totalWeightedValue = totalWeightedValue.add(weightedValue);\n totalTuple0 = totalTuple0.add(tuple0);\n });\n });\n if (totalTuple0.isZero()) {\n return BigNumber.from(0);\n }\n const weightedAverage = totalWeightedValue.div(totalTuple0);\n return weightedAverage;\n };\n useEffect(() => {\n setAverageWeightedApr(getAverageWeightedApr(userInvestments, estimatedBaseApr));\n }, [userInvestments, estimatedBaseApr]);\n // averageWeightedApr\n\n\n const PositionSummary = ({ userInvestments }) => {\n if (!userInvestments || userInvestments.length === 0) {\n return
Loading...
;\n }\n return (\n
\n
\n
{formatAmount(totalUserInvestment, MST_DECIMALS, 2, true)}
\n
{formatAmount(averageWeightedApr, 19, 1, false)}
\n
{formatAmount(availableToRedeem, MST_DECIMALS, 2, true)}
\n
{formatAmount((totalUserInvestment.sub(availableToRedeem)), MST_DECIMALS, 2, true)}
\n
{formatAmount(totalTokensToUsd, MST_DECIMALS, 2, true)}
\n
\n
\n
\n
\n
\n
\n {active && (\n \n )}\n {active && (\n \n )}\n {!active && (\n \n )}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {active && (\n \n )}\n {active && (\n \n )}\n {!active && (\n \n )}\n
\n
\n
\n
\n
\n );\n };\n\n const PositionsTable = ({ userInvestments }) => {\n if (!userInvestments || userInvestments.length === 0) {\n return
Loading...
;\n }\n return (\n
\n {userInvestments.map((poolData, poolIndex) => (\n
\n {poolData.map((tuple, tupleIndex) => (\n
\n
{formatAmount(tuple[0], 18, 2, true)}
\n
{formatAmount(getRateFromMultiplier(tuple[1], estimatedBaseApr), 19, 1, false)}%
\n
{daysFromNowString(tuple[2])}
\n
\n ))}\n
\n ))}\n
\n );\n };\n\n const UserPendingRewardsTable = ({ userPendingRewards }) => {\n if (!userPendingRewards) {\n return
Loading ...
;\n }\n return (\n
\n {userPendingRewards.map((value, index) => (\n
\n
\n {getTokenSymbol(index)}\n
\n
\n {formatAmount(value, 18, 4, true)}\n
\n
\n {formatAmount(tokensInUsd[index], 18, 2, true)}\n
\n
\n ))}\n
\n
\n
\n
\n
\n {active && (\n \n )}\n {!active && (\n \n )}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {active && (\n \n )}\n {!active && (\n \n )}\n
\n
\n
\n
\n
\n );\n };\n\n const OtherNetworkAprRows = ({ targetChainData }) => {\n\n return (\n <>\n {targetChainData ? (\n targetChainData.filter(({ currentBaseStakingApr }) => currentBaseStakingApr > 0).map(({ targetChainId, currentBaseStakingApr }) => (\n
\n
\n (\n \n Currrent estimated APR for immediate withdrawals\n \n )}\n />\n
\n
\n {formatAmount(currentBaseStakingApr, 16, 1, false)}%\n
\n handleNetworkCheck(targetChainId, 'https://stake.meridianfinance.net/#/stakemst')}\n >\n Switch\n \n
\n ))\n ) : (\n
Loading ...
\n )}\n \n );\n }\n\n\n\n let { total: totalMstSupply } = useTotalMstSupply();\n let { baseMstOnUsdm: baseMstOnUsdm,\n baseSuperStaking: baseSuperStaking,\n base: baseMstStaked,\n fuse: fuseMstStaked,\n meter: meterMstStaked,\n taiko: taikoMstStaked,\n telos: telosMultiStakingTotal,\n telosMstOnUsdm: telosMstOnUSDMTotal,\n total:\n totalMstStaked } = useTotalMstStaked();\n\n const mstSupplyUrl = getServerUrl(TELOS_MAINNET, \"/mst_supply\");\n const { data: mstSupply } = useSWR([mstSupplyUrl], {\n fetcher: (...args) => fetch(...args).then((res) => res.text()).then((text) => text.replace(/\\n/g, '')),\n });\n\n const isGmxTransferEnabled = true;\n\n const balanceData = walletMSTBalance;\n\n const processedData = getProcessedData(\n balanceData,\n userTotalMstStaked,\n mstPrice,\n mstSupply,\n stakingData,\n EthPrice,\n );\n\n let totalSupplyUsd;\n if (totalMstSupply && !totalMstSupply.isZero() && mstPrice) {\n totalSupplyUsd = totalMstSupply.mul(mstPrice).div(expandDecimals(1, 18));\n }\n\n let maxUnstakeableGmx = userInvestments ? GetMaxAvailableToRedeem(userInvestments) : bigNumberify(0)\n\n const showStakeMstModal = () => {\n if (!isGmxTransferEnabled) {\n helperToast.error(t`MST transfers not yet enabled`);\n return;\n }\n setIsStakeModalVisible(true);\n setStakeModalTitle(t`Stake MST`);\n setStakeModalMaxAmount(processedData.mstBalance);\n setStakeValue(\"\");\n setStakingTokenSymbol(\"MST\");\n setStakingTokenAddress(mstAddress);\n setStakingFarmAddress(MeridianMultiPoolStakingAddress);\n setStakeMethodName(\"stakeMst\");\n };\n\n\n const showUnstakeMstModal = () => {\n if (!isGmxTransferEnabled) {\n helperToast.error(t`MST transfers not yet enabled`);\n return;\n }\n setIsUnstakeModalVisible(true);\n setUnstakeModalTitle(t`Unstake MST`);\n let maxAmount = processedData.userTotalMstStaked;\n if (\n processedData.userTotalMstStaked &&\n maxUnstakeableGmx &&\n maxUnstakeableGmx.lt(processedData.userTotalMstStaked)\n ) {\n maxAmount = maxUnstakeableGmx;\n }\n setUnstakeModalMaxAmount(maxAmount);\n setUnstakeValue(\"\");\n setUnstakingTokenSymbol(\"MST\");\n setUnstakeMethodName(\"unStakeMst\");\n };\n\n\n let totalRewards // JJ needs to be defined\n let earnMsg;\n if (totalRewards && totalRewards.gt(0)) {\n let gmxAmountStr;\n if (processedData.userTotalMstStaked && processedData.userTotalMstStaked.gt(0)) {\n gmxAmountStr = formatAmount(processedData.userTotalMstStaked, 18, 2, true) + \"MST\";\n }\n let mpAmountStr;\n\n let glpStr;\n if (processedData.glpBalance && processedData.glpBalance.gt(0)) {\n glpStr = formatAmount(processedData.glpBalance, 18, 2, true) + \" MLP\";\n }\n const amountStr = [gmxAmountStr, mpAmountStr, glpStr].filter((s) => s).join(\", \");\n earnMsg = (\n
\n \n You are earning {nativeTokenSymbol} rewards with {formatAmount(totalRewards, 18, 2, true)} tokens.\n
\n Tokens: {amountStr}.\n
\n
\n );\n }\n\n\n return (\n
\n \n \n \n \n\n \n\n
\n
\n
\n
\n
\n MST Statistics\n
\n
\n
\n
MST Price
\n
\n {formatAmount(mstPrice, USD_DECIMALS, 4, true)}\n
\n
\n
\n
MST Circulating Supply
\n
\n {formatAmount(10000000, 0, 0, true)}\n
\n
\n
\n
\n {\n return (\n
\n {/* {baseSuperStaking > 0 && (\n )}\n {baseMstOnUsdm > 0 && (\n )} */}\n {/* {baseMstStaked > 0 && (\n )}\n */}\n {fuseMstStaked > 0 && (\n )}\n {/* {meterMstStaked > 0 && (\n )} */}\n {taikoMstStaked > 0 && (\n )}\n {telosMultiStakingTotal > 0 && (\n )}\n {telosMstOnUSDMTotal > 0 && (\n )}\n\n
\n );\n }}\n />\n
\n
\n {formatAmount(totalMstStaked, 18, 0, true)}\n
\n
\n
\n
\n MST in Wallet\n
\n
\n {formatKeyAmount(processedData, \"mstBalance\", 18, 0, true)} MST ($\n {formatKeyAmount(processedData, \"mstBalanceUsd\", USD_DECIMALS, 2, true)})\n
\n
\n\n
\n
\n
\n
\n
\n {active && (\n \n )}\n {!active && (\n \n )}\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n {\n return (\n \n Projected annual earnings for the immediate access pool based on the tokens recieved this week and todays token prices. \n \n );\n }}\n />\n
\n
\n\n
\n \n
\n
\n
\n
\n
\n {active && (\n \n )}\n {!active && (\n \n )}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n Other MST Staking Rates\n
\n
\n
\n
APR %
\n
\n {otherChainAprData && otherChainAprData.length > 0 && (\n \n )}\n
\n
\n {\n return (\n \n Projected annual earnings for MST staking at mint.meridianfinance on the Telos network. Based on todays token prices and fees recieved since 24 Jan 24. \n \n );\n }}\n />\n
\n
\n {formatAmount(usdmStakingAprTlos, 18, 1, false)}%\n
\n {chainId === TELOS_MAINNET && (\n \n )}\n {chainId !== TELOS_MAINNET && (\n \n )}\n
\n {/*
\n
\n {\n return (\n \n Projected annual earnings for MST staking at mint.meridianfinance on the Base network. Based on todays token prices and fees recieved since 25 Jan 24. \n \n );\n }}\n />\n
\n
\n {formatAmount(usdmStakingAprBase, 18, 1, false)}%\n
\n {chainId === BASE_MAINNET && (\n \n )}\n {chainId !== BASE_MAINNET && (\n \n )}\n
*/}\n {/*
\n
\n {\n return (\n \n Projected annual earnings for MST SuperStaking on the Base network. Excludes user boosted rewards. \n \n );\n }}\n />\n
\n
\n {formatAmount(processedData.mstSuperStakingApr, DIA_DECIMALS, 1, false)}%\n
\n {chainId === BASE_MAINNET && (\n \n )}\n {chainId !== BASE_MAINNET && (\n \n )}\n
*/}\n
\n
\n
\n
\n
\n
\n Positions Summary\n
\n
\n
\n
Total Staked
\n
\n {\n return (\n \n
\n Projected reward based on current Estimated Base APR, current user positions and user lockup commitments . \n
\n
\n );\n }}\n />\n
\n
Available Now
\n
Still to Mature
\n
\n {\n return (\n \n Based on current token prices . \n \n );\n }}\n />\n
\n
\n \n
\n
\n
\n\n
\n
\n
\n Positions Table\n
\n
\n
\n
Staked Tokens
\n
Forecast APR
\n
When Available
\n
\n \n
\n
\n
\n
\n Pending Rewards\n
\n
\n
\n
Token
\n
Amount
\n
USD
\n
\n \n
\n
\n
\n
\n
\n {/*
*/}\n
\n );\n}\n","import { ethers } from \"ethers\";\nimport Token from \"abis/Token.json\";\nimport { getExplorerUrl } from \"config/chains\";\nimport { helperToast } from \"lib/helperToast\";\nimport { InfoTokens, TokenInfo } from \"./types\";\nimport { Web3Provider } from \"@ethersproject/providers\";\nimport ExternalLink from \"components/ExternalLink/ExternalLink\";\nimport { t, Trans } from \"@lingui/macro\";\n\ntype Params = {\n setIsApproving: (val: boolean) => void;\n library: Web3Provider;\n tokenAddress: string;\n spender: string;\n chainId: number;\n onApproveSubmitted: () => void;\n getTokenInfo?: (infoTokens: InfoTokens, tokenAddress: string) => TokenInfo;\n infoTokens: InfoTokens;\n pendingTxns: any[];\n setPendingTxns: (txns: any[]) => void;\n includeMessage?: boolean;\n};\n\nexport function approveTokens({\n setIsApproving,\n library,\n tokenAddress,\n spender,\n chainId,\n onApproveSubmitted,\n getTokenInfo,\n infoTokens,\n pendingTxns,\n setPendingTxns,\n includeMessage,\n}: Params) {\n setIsApproving(true);\n const contract = new ethers.Contract(tokenAddress, Token.abi, library.getSigner());\n contract\n .approve(spender, ethers.constants.MaxUint256)\n .then(async (res) => {\n const txUrl = getExplorerUrl(chainId) + \"tx/\" + res.hash;\n helperToast.success(\n
\n \n Approval submitted! View status.\n \n
\n
\n );\n if (onApproveSubmitted) {\n onApproveSubmitted();\n }\n if (getTokenInfo && infoTokens && pendingTxns && setPendingTxns) {\n const token = getTokenInfo(infoTokens, tokenAddress);\n const pendingTxn = {\n hash: res.hash,\n message: includeMessage ? t`${token.symbol} Approved!` : false,\n };\n setPendingTxns([...pendingTxns, pendingTxn]);\n }\n })\n .catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n let failMsg;\n if (\n [\"not enough funds for gas\", \"failed to execute call with revert code InsufficientGasFunds\"].includes(\n e.data?.message\n )\n ) {\n failMsg = (\n
\n \n There is not enough ETH in your account on Arbitrum to send this transaction.\n
\n
\n Bridge ETH to Arbitrum\n
\n
\n );\n } else if (e.message?.includes(\"User denied transaction signature\")) {\n failMsg = t`Approval was cancelled`;\n } else {\n failMsg = t`Approval failed`;\n }\n helperToast.error(failMsg);\n })\n .finally(() => {\n setIsApproving(false);\n });\n}\n","\nimport StakeMST from \"./StakeMST\";\n\nexport default function Stake(props) {\n\n return ;\n}\n","export const getMintData = async (setMintData, setIsLoading) => {\n const mintData = await fetch(\n \"https://omnidex.bmaa3ajd1gjri.eu-west-2.cs.amazonlightsail.com/stability_pool\"\n );\n const data = await mintData.json();\n const updatedMintData = [\n {\n icon: \"/assets/yields/telos-evm.svg\",\n title: \"Stability Pool\",\n subTitle: \"TelosEVM\",\n percentage: `${data.telos}%`,\n color: \"#8273FF\",\n appPath: \"https://mint.meridianfinance.net/#/\",\n },\n {\n icon: \"/assets/yields/fuse.svg\",\n title: \"Stability Pool\",\n subTitle: \"Fuse\",\n percentage: `${data.fuse}%`,\n color: \"#28C76F\",\n appPath: \"https://mint.meridianfinance.net/#/\",\n },\n {\n icon: \"/assets/yields/base.svg\",\n title: \"Stability Pool\",\n subTitle: \"Base\",\n percentage: `${data.base}%`,\n color: \"#60C3FB\",\n appPath: \"https://mint.meridianfinance.net/#/\",\n },\n ];\n\n // Filter out items with percentage of '0%'\n const nonZeroMintData = updatedMintData.filter(\n (item) => parseFloat(item.percentage) > 0\n );\n\n // Sort data by percentage descending\n nonZeroMintData.sort(\n (a, b) => parseFloat(b.percentage) - parseFloat(a.percentage)\n );\n\n setMintData(nonZeroMintData);\n setIsLoading(false);\n};\n","import React from \"react\";\nimport { InfinitySpin } from \"react-loader-spinner\";\n\nconst Loader = () => {\n return (\n <>\n \n
\n \n
\n
\n \n );\n};\n\nexport default Loader;\n","//get data from api\nexport const getUSDMData = async (\n setUSDMData,\n setIsLoading,\n setETHMData,\n setUSDTData,\n setUSDCData\n) => {\n try {\n const mintData = await fetch(\n \"https://omnidex.bmaa3ajd1gjri.eu-west-2.cs.amazonlightsail.com/lending_yields\"\n );\n\n const data = await mintData.json();\n\n // Format percentage with one decimal place\n const formatPercentage = (value) => {\n return parseFloat(value).toFixed(1);\n };\n\n //set USDM data\n const updatedUSDMData = [\n {\n icon: \"/assets/yields/telos-evm.svg\",\n title: \"Lending Pool\",\n subTitle: \"TelosEVM\",\n percentage: `${formatPercentage(data?.telos?.USDM?.total_deposit_yield) || 0}%`,\n color: \"#8273FF\",\n appPath: \"https://mint.meridianfinance.net/#/\",\n },\n {\n icon: \"/assets/yields/fuse.svg\",\n title: \"Lending Pool\",\n subTitle: \"Fuse\",\n percentage: `${formatPercentage(data?.fuse?.USDM?.total_deposit_yield) || 0}%`,\n color: \"#28C76F\",\n appPath: \"https://mint.meridianfinance.net/#/\",\n },\n ];\n\n // Sort data by percentage descending\n updatedUSDMData.sort(\n (a, b) => parseFloat(b.percentage) - parseFloat(a.percentage)\n );\n setUSDMData(updatedUSDMData);\n\n //set ETHM data\n const updatedETHMData = [\n {\n icon: \"/assets/yields/telos-evm.svg\",\n title: \"Lending Pool\",\n subTitle: \"TelosEVM\",\n percentage: `${formatPercentage(data?.telos?.WETH?.total_deposit_yield) || 0}%`,\n color: \"#8273FF\",\n appPath: \"https://lend.meridianfinance.net/markets\",\n },\n {\n icon: \"/assets/yields/fuse.svg\",\n title: \"Lending Pool\",\n subTitle: \"Fuse\",\n percentage: `${formatPercentage(data?.fuse?.WETH?.total_deposit_yield) || 0}%`,\n color: \"#28C76F\",\n appPath: \"https://lend.meridianfinance.net/markets\",\n },\n {\n icon: \"/assets/yields/meter.svg\",\n title: \"Lending Pool\",\n subTitle: \"Meter\",\n percentage: `${formatPercentage(data?.meter?.WETH?.total_deposit_yield) || 0}%`,\n color: \"#685B72\",\n appPath: \"https://lend.meridianfinance.net/markets\",\n },\n {\n icon: \"/assets/yields/taiko.svg\",\n title: \"Lending Pool\",\n subTitle: \"Taiko\",\n percentage: `${formatPercentage(data?.taiko?.WETH?.total_deposit_yield) || 0}%`,\n color: \"#685B72\",\n appPath: \"https://lend.meridianfinance.net/markets\",\n },\n ];\n // Sort data by percentage descending\n updatedETHMData.sort(\n (a, b) => parseFloat(b.percentage) - parseFloat(a.percentage)\n );\n setETHMData(updatedETHMData);\n\n //set USDT data\n const updatedUSDTData = [\n {\n icon: \"/assets/yields/telos-evm.svg\",\n title: \"Lending Pool\",\n subTitle: \"TelosEVM\",\n percentage: `${formatPercentage(data?.telos?.USDT?.total_deposit_yield) || 0}%`,\n color: \"#8273FF\",\n appPath: \"https://lend.meridianfinance.net/markets\",\n },\n {\n icon: \"/assets/yields/fuse.svg\",\n title: \"Lending Pool\",\n subTitle: \"Fuse\",\n percentage: `${formatPercentage(data?.fuse?.USDT?.total_deposit_yield) || 0}%`,\n color: \"#28C76F\",\n appPath: \"https://lend.meridianfinance.net/markets\",\n },\n {\n icon: \"/assets/yields/meter.svg\",\n title: \"Lending Pool\",\n subTitle: \"Meter\",\n percentage: `${formatPercentage(data?.meter?.USDT?.total_deposit_yield) || 0}%`,\n color: \"#685B72\",\n appPath: \"https://lend.meridianfinance.net/markets\",\n },\n {\n icon: \"/assets/yields/taiko.svg\",\n title: \"Lending Pool\",\n subTitle: \"Taiko\",\n percentage: `${formatPercentage(data?.taiko?.USDT?.total_deposit_yield) || 0}%`,\n color: \"#8273FF\",\n appPath: \"https://lend.meridianfinance.net/markets\",\n },\n ];\n // Sort data by percentage descending\n updatedUSDTData.sort(\n (a, b) => parseFloat(b.percentage) - parseFloat(a.percentage)\n );\n setUSDTData(updatedUSDTData);\n\n //set USDC data\n const updatedUSDCData = [\n {\n icon: \"/assets/yields/telos-evm.svg\",\n title: \"Lending Pool\",\n subTitle: \"TelosEVM\",\n percentage: `${formatPercentage(data?.telos?.USDC?.total_deposit_yield) || 0}%`,\n color: \"#8273FF\",\n appPath: \"https://lend.meridianfinance.net/markets\",\n },\n {\n icon: \"/assets/yields/fuse.svg\",\n title: \"Lending Pool\",\n subTitle: \"Fuse\",\n percentage: `${formatPercentage(data?.fuse?.USDC?.total_deposit_yield) || 0}%`,\n color: \"#28C76F\",\n appPath: \"https://lend.meridianfinance.net/markets\",\n },\n {\n icon: \"/assets/yields/meter.svg\",\n title: \"Lending Pool\",\n subTitle: \"Meter\",\n percentage: `${formatPercentage(data?.meter?.USDC?.total_deposit_yield) || 0}%`,\n color: \"#685B72\",\n appPath: \"https://lend.meridianfinance.net/markets\",\n },\n {\n icon: \"/assets/yields/taiko.svg\",\n title: \"Lending Pool\",\n subTitle: \"Taiko\",\n percentage: `${formatPercentage(data?.taiko?.USDCe?.total_deposit_yield) || 0}%`,\n color: \"#685B72\",\n appPath: \"https://lend.meridianfinance.net/markets\",\n },\n ];\n // Sort data by percentage descending\n updatedUSDCData.sort(\n (a, b) => parseFloat(b.percentage) - parseFloat(a.percentage)\n );\n setUSDCData(updatedUSDCData);\n\n setIsLoading(false);\n } catch (error) {\n console.error(\"Error fetching yields data:\", error);\n setIsLoading(false);\n // Handle error state if needed\n }\n};\n","import React, { useEffect, useState } from \"react\";\nimport { HiOutlineDotsVertical } from \"react-icons/hi\";\n\nimport \"./Mint.scss\";\nimport { getMintData } from \"../../lib/yields/mint\";\nimport Loader from \"../../utils/Loader\";\nimport { getUSDMData } from \"../../lib/yields/yields\";\n\nconst handleClick = (path) => {\n window.open(path, '_blank');\n}\n\nconst YieldsCard = () => {\n const [mintData, setMintData] = useState([]);\n const [isLoading, setIsLoading] = useState(true);\n const [USDMData, setUSDMData] = useState([]);\n const [ETHData, setETHMData] = useState([]);\n const [USDTData, setUSDTData] = useState([]);\n const [USDCData, setUSDCData] = useState([]);\n\n console.log(mintData, \"MINT DATA\")\n\n useEffect(() => {\n getMintData(setMintData, setIsLoading);\n getUSDMData(\n setUSDMData,\n setIsLoading,\n setETHMData,\n setUSDTData,\n setUSDCData\n );\n }, []);\n\n if (isLoading) {\n return ;\n }\n\n return (\n
\n
\n
\n
\n
\n
\n
\n acc + parseInt(item.percentage),\n 0\n ) / ETHData.length\n }\n />\n
\n
\n
\n
\n acc + parseInt(item.percentage),\n 0\n ) / USDTData.length\n }\n />\n
\n
\n
\n
\n acc + parseInt(item.percentage),\n 0\n ) / USDCData.length\n }\n />\n
\n
\n
\n
\n acc + parseInt(item.percentage),\n 0\n ) / USDMData.length\n }\n />\n
\n
\n
\n
\n
\n );\n};\n\nconst SingleYield = ({ data, title, avg, appPath }) => {\n // Function to calculate scaled width based on percentage\n const calculateScaledWidth = (percentage) => {\n const value = parseFloat(percentage.trim().replace(\"%\", \"\")); // Parse and remove '%' from percentage\n return `${(value / findMaxPercentage(data)) * 100}%`; // Scale the value based on the maximum percentage\n };\n\n // Function to find the maximum percentage in the data array\n const findMaxPercentage = (data) => {\n let maxPercentage = 0;\n data.forEach((item) => {\n const value = parseFloat(item.percentage.trim().replace(\"%\", \"\"));\n if (value > maxPercentage) {\n maxPercentage = value;\n }\n });\n return maxPercentage;\n };\n\n return (\n
\n
\n
\n
{title}
\n

Average {Math.round(avg)}%

\n
\n
\n \n
\n
\n
\n {data.map((item, index) => (\n
\n
\n {item.subTitle}\n
\n
\n
{item.title}
\n

{item.subTitle}

\n
\n
\n
\n
\n
{item.percentage}
\n
\n ))}\n
\n {/*\n \n */}\n \n );\n};\n\nexport default YieldsCard;\n","import TitleSection from \"../../components/TitleSection/TitleSection\";\nimport YieldsCard from \"../../components/Yields/Mint\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport \"slick-carousel/slick/slick.css\";\nimport \"slick-carousel/slick/slick-theme.css\";\nimport \"./yields.css\";\n\nconst Yields = () => {\n return (\n
\n \n \n \n
\n );\n};\n\nexport default Yields;\n","import React, { useState } from 'react';\n\nexport const ToggleContext = React.createContext();\n\nexport const ToggleProvider = ({ children }) => {\n const [toggle, setToggle] = useState(false);\n console.log(toggle, \"TOGGLE \")\n return (\n \n {children}\n \n );\n};","import React, { useContext } from \"react\";\n// import { BaseUSDMData } from \"../../Data\";\nimport uniswapIMG from \"../../img/Uniswap.svg\";\nimport aerodromeIMG from \"../../img/aerodrome.svg\";\nimport image2 from \"../../img/Symmetric.png\";\nimport { ToggleContext } from './ToggleContext';\n\n\nconst BaseTrade = () => {\n\n // darkmode light mode\n const [mstPriceUniswap, setMSTPriceUniswap] = React.useState(0);\n const [mstLiquidityUniswap, setMSTLiquidityUniswap] = React.useState(0);\n\n const [usdmPriceUniswap, setUSDMPriceUniswap] = React.useState(0);\n const [usdmLiquidityUniswap, setUSDMLiquidityUniswap] = React.useState(0);\n\n function formatNumberWithCommas(number) {\n return Math.floor(number).toLocaleString();\n }\n\n\n React.useEffect(() => {\n const getMSTUniswapData = async () => {\n try {\n const response = await fetch(\n \"https://api.dexscreener.com/latest/dex/tokens/0x88558259ceda5d8e681fedb55c50070fbd3da8f9\"\n );\n const data = await response.json();\n\n // Accessing the priceNative field from the first pair\n const priceMST = data.pairs[0].priceUsd;\n const liquidityMST = data.pairs[0].liquidity.usd;\n const formattedMSTLiquidity = formatNumberWithCommas(liquidityMST);\n\n setMSTPriceUniswap(priceMST)\n setMSTLiquidityUniswap(formattedMSTLiquidity)\n\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n }\n };\n\n getMSTUniswapData();\n }, []);\n\n\n React.useEffect(() => {\n const getUSDMUniswapData = async () => {\n try {\n const response = await fetch(\n \"https://api.dexscreener.com/latest/dex/tokens/0x5e06eA564efcB3158a85dBF0B9E017cb003ff56f\"\n );\n const data = await response.json();\n\n // Accessing the priceNative field from the first pair\n const priceUSDM = data.pairs[0].priceUsd;\n const liquidityUSDM = data.pairs[0].liquidity.usd;\n const formattedUSDMLiquidity = formatNumberWithCommas(liquidityUSDM);\n\n\n setUSDMPriceUniswap(priceUSDM)\n setUSDMLiquidityUniswap(formattedUSDMLiquidity)\n\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n }\n };\n\n getUSDMUniswapData();\n }, []);\n\n\n const BaseUSDMData = [\n {\n img: uniswapIMG,\n priceType: \"USDM/USDC\",\n price: \"$\" + usdmPriceUniswap,\n para: \"Current Liquidity: $\" + usdmLiquidityUniswap,\n button: \"Trade Now\",\n href: \"https://app.uniswap.org/swap?exactField=input&exactAmount=0&outputCurrency=0x5e06eA564efcB3158a85dBF0B9E017cb003ff56f&inputCurrency=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&chain=base\"\n },\n ];\n\n\n const BaseMSTData = [\n {\n img: aerodromeIMG,\n priceType: \"MST/ETH\",\n price: \"$\" + mstPriceUniswap,\n para: \"Current Liquidity: $\" + mstLiquidityUniswap,\n button: \"Trade Now\",\n href: \"https://aerodrome.finance/swap?from=eth&to=0x88558259ceda5d8e681fedb55c50070fbd3da8f9\"\n },\n ];\n\n\n const { toggle, setToggle } = useContext(ToggleContext);\n return (\n
\n
\n \n
\n setToggle(!toggle)} // Use onChange event to update toggle state\n />\n \n
\n
\n {/* Render other components based on toggle value */}\n\n {toggle === true ? (\n
\n {BaseUSDMData.map((e, i) => {\n return (\n
\n \"PIC\"\n

\n {e.switch} {e.priceType}\n

\n

{e.price}

\n

{e.para}

\n \n \n \n
\n );\n })}\n
\n ) : (\n
\n {BaseMSTData.map((e, i) => {\n return (\n
\n \"PIC\"\n

\n {e.switch} {e.priceType}\n

\n

{e.price}

\n

{e.para}

\n \n \n \n
\n );\n })}\n
\n )}\n
\n );\n};\n\nexport default BaseTrade;\n","import React, { useContext } from \"react\";\nimport image1 from \"../../img/Swapsicle.png\";\nimport image2 from \"../../img/Symmetric.png\";\nimport image3 from \"../../img/meridian.png\";\nimport { ToggleContext } from './ToggleContext';\n\nconst BaseTrade = () => {\n // State variables for USDM data\n const [usdmPriceSwapsicle1, setUSDMPriceSwapsicle1] = React.useState(0);\n const [usdmPriceSwapsicle2, setUSDMPriceSwapsicle2] = React.useState(0);\n const [usdmLiquiditySwapsicle1, setUSDMLiquiditySwapsicle1] = React.useState(0);\n const [usdmLiquiditySwapsicle2, setUSDMLiquiditySwapsicle2] = React.useState(0);\n const [usdmPriceSymmetric, setUSDMPriceSymmetric] = React.useState(0);\n const [usdmLiquiditySymmetric, setUSDMLiquiditySymmetric] = React.useState(0);\n const [usdmPriceNewDex1, setUSDMPriceNewDex1] = React.useState(0);\n const [usdmPriceNewDex2, setUSDMPriceNewDex2] = React.useState(0);\n const [usdmLiquidityNewDex1, setUSDMLiquidityNewDex1] = React.useState(0);\n const [usdmLiquidityNewDex2, setUSDMLiquidityNewDex2] = React.useState(0);\n\n // State variables for MST data\n const [mstPriceSwapsicle, setMSTPriceSwapsicle] = React.useState(0);\n const [mstPriceSwapsicle2, setMSTPriceSwapsicle2] = React.useState(0);\n const [mstLiquiditySwapsicle, setMSTLiquiditySwapsicle] = React.useState(0);\n const [mstLiquiditySwapsicle2, setMSTLiquiditySwapsicle2] = React.useState(0);\n const [mstPriceSymmetric, setMSTPriceSymmetric] = React.useState(0);\n const [mstLiquiditySymmetric, setMSTLiquiditySymmetric] = React.useState(0);\n const [mstPriceNewDex1, setMSTPriceNewDex1] = React.useState(0);\n const [mstPriceNewDex2, setMSTPriceNewDex2] = React.useState(0);\n const [mstLiquidityNewDex1, setMSTLiquidityNewDex1] = React.useState(0);\n const [mstLiquidityNewDex2, setMSTLiquidityNewDex2] = React.useState(0);\n\n // Format numbers with commas\n function formatNumberWithCommas(number) {\n return Math.floor(number).toLocaleString();\n }\n\n\n\n\n // Fetch USDM data\n React.useEffect(() => {\n const getUSDMData = async () => {\n try {\n const response = await fetch(\n \"https://api.dexscreener.com/latest/dex/tokens/0x8f7D64ea96D729EF24a0F30b4526D47b80d877B9\"\n );\n const data = await response.json();\n\n // Dex IDs\n const swapsicleDexId = \"swapsicle\";\n const newDexDexId = \"0x1f2542d8f784565d526eeadc9f1ca8fbb75e5996\"; // Ensure lowercase\n\n // Filter pairs\n const swapsiclePairs = data.pairs.filter(\n (pair) => pair.dexId.toLowerCase() === swapsicleDexId\n );\n\n const newDexPairs = data.pairs.filter(\n (pair) => pair.dexId.toLowerCase() === newDexDexId\n );\n\n // Process Swapsicle pairs\n // USDM/WTLOS\n const usdmWtlosPairSwapsicle = swapsiclePairs.find(\n (pair) => pair.quoteToken.symbol === \"WTLOS\"\n );\n\n // USDM/USDC\n const usdmUsdcPairSwapsicle = swapsiclePairs.find(\n (pair) =>\n pair.quoteToken.symbol === \"USDC\" ||\n pair.quoteToken.symbol === \"USDC.e\"\n );\n\n if (usdmWtlosPairSwapsicle) {\n const price = usdmWtlosPairSwapsicle.priceUsd;\n const liquidity = usdmWtlosPairSwapsicle.liquidity.usd;\n setUSDMPriceSwapsicle1(price);\n setUSDMLiquiditySwapsicle1(formatNumberWithCommas(liquidity));\n } else {\n console.error(\"USDM/WTLOS pair not found on Swapsicle.\");\n }\n\n if (usdmUsdcPairSwapsicle) {\n const price = usdmUsdcPairSwapsicle.priceUsd;\n const liquidity = usdmUsdcPairSwapsicle.liquidity.usd;\n setUSDMPriceSwapsicle2(price);\n setUSDMLiquiditySwapsicle2(formatNumberWithCommas(liquidity));\n } else {\n console.error(\"USDM/USDC pair not found on Swapsicle.\");\n }\n\n // Process New Dex pairs\n // USDM/WTLOS\n const usdmWtlosPairNewDex = newDexPairs.find(\n (pair) => pair.quoteToken.symbol === \"WTLOS\"\n );\n\n // USDM/USDC or USDT\n const usdmUsdcPairNewDex = newDexPairs.find(\n (pair) =>\n pair.quoteToken.symbol === \"USDC\" ||\n pair.quoteToken.symbol === \"USDT\"\n );\n\n if (usdmWtlosPairNewDex) {\n const price = usdmWtlosPairNewDex.priceUsd;\n const liquidity = usdmWtlosPairNewDex.liquidity.usd;\n setUSDMPriceNewDex1(price);\n setUSDMLiquidityNewDex1(formatNumberWithCommas(liquidity));\n } else {\n console.error(\"USDM/WTLOS pair not found on the new dex.\");\n }\n\n if (usdmUsdcPairNewDex) {\n const price = usdmUsdcPairNewDex.priceUsd;\n const liquidity = usdmUsdcPairNewDex.liquidity.usd;\n setUSDMPriceNewDex2(price);\n setUSDMLiquidityNewDex2(formatNumberWithCommas(liquidity));\n } else {\n console.error(\"USDM/USDC or USDT pair not found on the new dex.\");\n }\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n }\n };\n\n getUSDMData();\n }, []);\n\n\n React.useEffect(() => {\n const getUSDMSymmetricData = async () => {\n try {\n const response = await fetch(\n \"https://api.goldsky.com/api/public/project_clnbo3e3c16lj33xva5r2aqk7/subgraphs/symmetric-telos/prod/gn\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n query: `\n query USDMPoolQuery {\n token(id: \"0x8f7d64ea96d729ef24a0f30b4526d47b80d877b9\") {\n latestUSDPrice\n }\n pool(id: \"0x5e99843486cf052baf0925a0cdeb40920477295900000000000000000000000b\") {\n id\n symbol\n totalLiquidity\n totalLiquiditySansBPT\n }\n }\n `,\n }),\n }\n );\n\n const responseData = await response.json();\n\n // Accessing the latestUSDPrice field from the token object\n const priceUSDM = responseData.data.token.latestUSDPrice;\n const roundedPriceUSDM = Math.round(priceUSDM * 10000) / 10000;\n\n const liquidityUSDM = responseData.data.pool.totalLiquidity;\n const formattedUSDMLiquidity = Math.floor(Number(liquidityUSDM)).toLocaleString(); // Remove decimal places and add comma as thousands separator\n\n setUSDMPriceSymmetric(roundedPriceUSDM);\n setUSDMLiquiditySymmetric(formattedUSDMLiquidity);\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n }\n };\n\n getUSDMSymmetricData();\n }, []);\n\n // Fetch MST data\n React.useEffect(() => {\n const getMSTData = async () => {\n try {\n const response = await fetch(\n \"https://api.dexscreener.com/latest/dex/tokens/0x568524DA340579887db50Ecf602Cd1BA8451b243\"\n );\n const data = await response.json();\n\n // Dex IDs\n const swapsicleDexId = \"swapsicle\";\n const newDexDexId = \"0x1f2542d8f784565d526eeadc9f1ca8fbb75e5996\"; // Ensure lowercase\n\n // Filter pairs\n const swapsiclePairs = data.pairs.filter(\n (pair) => pair.dexId.toLowerCase() === swapsicleDexId\n );\n\n const newDexPairs = data.pairs.filter(\n (pair) => pair.dexId.toLowerCase() === newDexDexId\n );\n\n // Process Swapsicle pairs\n if (swapsiclePairs.length > 0) {\n // MST/WTLOS\n const mstWtlosPairSwapsicle = swapsiclePairs.find(\n (pair) => pair.quoteToken.symbol === \"WTLOS\"\n );\n\n // MST/USDC\n const mstUsdcPairSwapsicle = swapsiclePairs.find(\n (pair) =>\n pair.quoteToken.symbol === \"USDC\" || pair.quoteToken.symbol === \"USDC.e\"\n );\n\n if (mstWtlosPairSwapsicle) {\n const price = mstWtlosPairSwapsicle.priceUsd;\n const liquidity = mstWtlosPairSwapsicle.liquidity.usd;\n setMSTPriceSwapsicle(price);\n setMSTLiquiditySwapsicle(formatNumberWithCommas(liquidity));\n } else {\n console.error(\"MST/WTLOS pair not found on Swapsicle.\");\n }\n\n if (mstUsdcPairSwapsicle) {\n const price = mstUsdcPairSwapsicle.priceUsd;\n const liquidity = mstUsdcPairSwapsicle.liquidity.usd;\n setMSTPriceSwapsicle2(price);\n setMSTLiquiditySwapsicle2(formatNumberWithCommas(liquidity));\n } else {\n console.error(\"MST/USDC pair not found on Swapsicle.\");\n }\n } else {\n console.error(\"No Swapsicle pairs found for MST.\");\n }\n\n // Process New Dex pairs\n if (newDexPairs.length > 0) {\n // MST/WTLOS or MST/STLOS\n const mstWtlosPairNewDex = newDexPairs.find(\n (pair) => pair.quoteToken.symbol === \"WTLOS\" || pair.quoteToken.symbol === \"STLOS\"\n );\n\n // MST/USDC or MST/USDT\n const mstUsdcPairNewDex = newDexPairs.find(\n (pair) =>\n pair.quoteToken.symbol === \"USDC\" || pair.quoteToken.symbol === \"USDT\"\n );\n\n if (mstWtlosPairNewDex) {\n const price = mstWtlosPairNewDex.priceUsd;\n const liquidity = mstWtlosPairNewDex.liquidity.usd;\n setMSTPriceNewDex1(price);\n setMSTLiquidityNewDex1(formatNumberWithCommas(liquidity));\n } else {\n console.error(\"MST/WTLOS or MST/STLOS pair not found on the new dex.\");\n }\n\n if (mstUsdcPairNewDex) {\n const price = mstUsdcPairNewDex.priceUsd;\n const liquidity = mstUsdcPairNewDex.liquidity.usd;\n setMSTPriceNewDex2(price);\n setMSTLiquidityNewDex2(formatNumberWithCommas(liquidity));\n } else {\n console.error(\"MST/USDC or MST/USDT pair not found on the new dex.\");\n }\n } else {\n console.error(\"No pairs found for MST on the new dex.\");\n }\n } catch (error) {\n console.error(\"Error fetching MST data:\", error);\n }\n };\n\n getMSTData();\n }, []);\n\n // Fetch MST data from Symmetric\n React.useEffect(() => {\n const getMSTSymmetricData = async () => {\n try {\n const response = await fetch(\"https://api.goldsky.com/api/public/project_clnbo3e3c16lj33xva5r2aqk7/subgraphs/symmetric-telos/prod/gn\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n query: `\n query MSTPoolQuery {\n token(id: \"0x568524da340579887db50ecf602cd1ba8451b243\") {\n latestUSDPrice\n }\n pool(id: \"0x304970d2511aa3b121148afd387cfa623f551410000200000000000000000016\") {\n totalLiquidity\n }\n }\n `\n })\n });\n\n const responseData = await response.json();\n\n // Accessing the latestUSDPrice field from the token object\n const priceMST = responseData.data.token.latestUSDPrice;\n const roundedPriceMST = Math.round(priceMST * 100) / 100; // Round to 2 decimal places\n\n const liquidityMST = responseData.data.pool.totalLiquidity;\n const formattedMSTLiquidity = Math.floor(Number(liquidityMST)).toLocaleString();\n\n setMSTPriceSymmetric(roundedPriceMST);\n setMSTLiquiditySymmetric(formattedMSTLiquidity);\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n }\n };\n\n getMSTSymmetricData();\n }, []);\n\n // BaseUSDMData array\n const BaseUSDMData = [\n {\n img: image1,\n priceType: \"USDM/WTLOS\",\n price: \"$\" + usdmPriceSwapsicle1,\n para: \"Current Liquidity: $\" + usdmLiquiditySwapsicle1,\n button: \"Trade Now\",\n href: \"https://telos.swapsicle.io/swap?outputCurrency=USDM_ADDRESS&inputCurrency=WTLOS_ADDRESS\"\n },\n {\n img: image1,\n priceType: \"USDM/USDC\",\n price: \"$\" + usdmPriceSwapsicle2,\n para: \"Current Liquidity: $\" + usdmLiquiditySwapsicle2,\n button: \"Trade Now\",\n href: \"https://telos.swapsicle.io/swap?outputCurrency=USDM_ADDRESS&inputCurrency=USDC_ADDRESS\"\n },\n {\n img: image2,\n priceType: \"USDM/USDT-USDC\",\n price: \"$\" + usdmPriceSymmetric,\n para: \"Current Liquidity: $\" + usdmLiquiditySymmetric,\n button: \"Trade Now\",\n href: \"https://telos.symm.fi/#/telos/swap\"\n },\n {\n img: image3,\n priceType: \"USDM/WTLOS\",\n price: \"$\" + usdmPriceNewDex1,\n para: \"Current Liquidity: $\" + usdmLiquidityNewDex1,\n button: \"Trade Now\",\n href: \"https://swaps.meridianfinance.net\"\n },\n {\n img: image3,\n priceType: \"USDM/USDT\",\n price: \"$\" + usdmPriceNewDex2,\n para: \"Current Liquidity: $\" + usdmLiquidityNewDex2,\n button: \"Trade Now\",\n href: \"https://swaps.meridianfinance.net\"\n },\n ];\n\n // BaseMSTData array\n const BaseMSTData = [\n {\n img: image2,\n priceType: \"MST/USDM\",\n price: \"$\" + mstPriceSymmetric,\n para: \"Current Liquidity: $\" + mstLiquiditySymmetric,\n button: \"Trade Now\",\n href: \"https://telos.symm.fi/#/telos/swap\"\n },\n {\n img: image3,\n priceType: \"MST/STLOS\",\n price: \"$\" + mstPriceNewDex1,\n para: \"Current Liquidity: $\" + mstLiquidityNewDex1,\n button: \"Trade Now\",\n href: \"https://swaps.meridianfinance.net\"\n },\n ];\n\n const { toggle, setToggle } = useContext(ToggleContext);\n\n return (\n
\n {/* Toggle Switch */}\n
\n \n
\n setToggle(!toggle)}\n />\n \n
\n
\n\n {/* Display USDM Data */}\n {toggle === true ? (\n
\n {BaseUSDMData.map((e, i) => (\n
\n \"PIC\"\n

\n {e.priceType}\n

\n

{e.price}

\n

{e.para}

\n \n \n \n
\n ))}\n
\n ) : (\n // Display MST Data\n
\n {BaseMSTData.map((e, i) => (\n
\n \"PIC\"\n

\n {e.priceType}\n

\n

{e.price}

\n

{e.para}

\n \n \n \n
\n ))}\n
\n )}\n
\n );\n};\n\nexport default BaseTrade;\n","import React, { useContext } from 'react';\n// import { BaseUSDMData } from \"../../Data\";\nimport image2 from \"../../img/Voltage.png\";\nimport { ToggleContext } from './ToggleContext';\n\n\nconst BaseTrade = () => {\n\n // darkmode light mode\n const [mstPriceVoltage, setMSTPriceVoltage] = React.useState(0);\n const [usdmPriceVoltage, setUSDMPriceVoltage] = React.useState(0);\n\n const [mstLiquidityVoltage, setMSTLiquidityVoltage] = React.useState(0);\n const [usdmLiquidityVoltage, setUSDMLiquidityVoltage] = React.useState(0);\n\n function formatNumberWithCommas(number) {\n return Math.floor(number).toLocaleString();\n }\n\n React.useEffect(() => {\n const getUSDMVoltageData = async () => {\n try {\n const response = await fetch(\"https://api.thegraph.com/subgraphs/name/voltfinance/exchange-v3\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n query: `\n {\n pool(id: \"0x633feb7c4e690c9a0c79541056bf53dd3adc1cf2\") {\n id\n token0 {\n symbol\n }\n token1 {\n symbol\n }\n liquidityProviderCount\n poolHourData(orderBy: periodStartUnix, orderDirection: desc, first: 1) {\n periodStartUnix\n tvlUSD\n volumeUSD\n token0Price\n token1Price\n }\n }\n }\n `\n })\n });\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch data\");\n }\n\n const data = await response.json();\n const liquidityUSDM = data.data.pool.poolHourData[0].tvlUSD;\n const USDMRatio = data.data.pool.poolHourData[0].token0Price;\n\n let priceFUSE = 0;\n try {\n const responseFUSE = await fetch(\"https://api.dexscreener.com/latest/dex/tokens/0x0BE9e53fd7EDaC9F859882AfdDa116645287C629\");\n const dataFUSE = await responseFUSE.json();\n priceFUSE = dataFUSE.pairs[0].priceUsd;\n } catch (error) {\n console.error(\"Error fetching FUSE data:\", error);\n }\n\n const USDMPrice = USDMRatio * priceFUSE\n const formattedUSDMLiquidity = formatNumberWithCommas(liquidityUSDM);\n\n setUSDMPriceVoltage(USDMPrice);\n setUSDMLiquidityVoltage(formattedUSDMLiquidity);\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n }\n };\n\n getUSDMVoltageData();\n }, []);\n\n\n\n React.useEffect(() => {\n const getMSTSymmetricData = async () => {\n try {\n const response = await fetch(\"https://api.goldsky.com/api/public/project_clnbo3e3c16lj33xva5r2aqk7/subgraphs/symmetric-telos/prod/gn\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n query: `\n query USDMPoolQuery {\n token(id: \"0x568524da340579887db50ecf602cd1ba8451b243\") {\n latestUSDPrice\n id\n pool {\n id\n }\n }\n pool(id: \"0x304970d2511aa3b121148afd387cfa623f551410000200000000000000000016\") {\n id\n symbol\n totalLiquidity\n totalLiquiditySansBPT\n }\n }\n `\n })\n });\n\n const responseData = await response.json();\n\n // Accessing the latestUSDPrice field from the token object\n const priceMST = responseData.data.token.latestUSDPrice;\n const roundedPriceMST = Math.round(priceMST * 100) / 100; // Round to 2 decimal places\n\n const liquidityMST = responseData.data.pool.totalLiquidity;\n const formattedMSTLiquidity = Math.floor(Number(liquidityMST)).toLocaleString(); // Remove decimal places and add comma as thousands separator\n\n setMSTPriceVoltage(roundedPriceMST);\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n }\n };\n\n getMSTSymmetricData();\n }, []);\n\n\n React.useEffect(() => {\n const getMSTVoltageData = async () => {\n try {\n const response = await fetch(\"https://api.thegraph.com/subgraphs/name/voltfinance/exchange-v3\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n query: `\n {\n pool(id: \"0xad25c8031b2f275f82c98047b45b8a29fca14458\") {\n id\n token0 {\n symbol\n }\n token1 {\n symbol\n }\n liquidityProviderCount\n poolHourData(orderBy: periodStartUnix, orderDirection: desc, first: 1) {\n periodStartUnix\n tvlUSD\n volumeUSD\n token0Price\n token1Price\n }\n }\n }\n `\n })\n });\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch data\");\n }\n\n const data = await response.json();\n const liquidityMST = data.data.pool.poolHourData[0].tvlUSD;\n const MSTRatio = data.data.pool.poolHourData[0].token0Price;\n const formattedMSTLiquidity = formatNumberWithCommas(liquidityMST);\n\n let priceFUSE = 0;\n try {\n const responseFUSE = await fetch(\"https://api.dexscreener.com/latest/dex/tokens/0x0BE9e53fd7EDaC9F859882AfdDa116645287C629\");\n const dataFUSE = await responseFUSE.json();\n priceFUSE = dataFUSE.pairs[0].priceUsd;\n } catch (error) {\n console.error(\"Error fetching FUSE data:\", error);\n }\n const MSTPrice = MSTRatio * priceFUSE\n\n // Update state variables\n // setMSTPriceVoltage(MSTPrice);\n setMSTLiquidityVoltage(formattedMSTLiquidity);\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n }\n };\n\n getMSTVoltageData();\n }, []); // Empty dependency array since it runs once after the component mounts\n\n\n\n\n\n const BaseUSDMData = [\n {\n img: image2,\n priceType: \"USDM/FUSE\",\n price: \"$\" + usdmPriceVoltage.toFixed(3),\n para: \"Current Liquidity: $\" + usdmLiquidityVoltage,\n button: \"Trade Now\",\n href: \"https://voltage.finance/swap?outputCurrency=0x4447863cddABbF2c3dAC826f042e03c91927A196\"\n },\n ];\n\n\n const BaseMSTData = [\n {\n img: image2,\n priceType: \"MST/SFUSE\",\n price: \"$\" + mstPriceVoltage.toFixed(3),\n para: \"Current Liquidity: $\" + mstLiquidityVoltage,\n button: \"Trade Now\",\n href: \"https://voltage.finance/swap?outputCurrency=0x2363Df84fDb7D4ee9d4E1A15c763BB6b7177eAEe\"\n },\n ];\n\n const { toggle, setToggle } = useContext(ToggleContext);\n console.log(toggle, \"IS TRUE\")\n return (\n
\n
\n \n
\n setToggle(!toggle)} // Use onChange event to update toggle state\n />\n \n
\n
\n\n {toggle === true ? (\n\n
\n {BaseUSDMData.map((e, i) => {\n return (\n
\n \"PIC\"\n

\n {e.switch} {e.priceType}\n

\n

{e.price}

\n

{e.para}

\n \n \n \n
\n );\n })}\n
\n ) : (\n
\n {BaseMSTData.map((e, i) => {\n return (\n
\n \"PIC\"\n

\n {e.switch} {e.priceType}\n

\n

{e.price}

\n

{e.para}

\n \n \n \n
\n );\n })}\n
\n )}\n
\n );\n};\n\nexport default BaseTrade;\n","import { createContext, useContext, useEffect, useState } from \"react\";\n\nconst ThemeContext = createContext();\n\nconst ThemeProvider = ({ children }) => {\n const [isDarkMode, setIsDarkMode] = useState(false);\n\n useEffect(() => {\n // Check local storage for the user's preference\n const storedTheme = localStorage.getItem(\"darkMode\");\n setIsDarkMode(storedTheme === \"true\");\n }, []);\n\n const toggleTheme = () => {\n const newMode = !isDarkMode;\n setIsDarkMode(newMode);\n // Save the user's preference to local storage\n localStorage.setItem(\"darkMode\", newMode);\n };\n\n return (\n \n {children}\n \n );\n};\n\nconst useTheme = () => {\n return useContext(ThemeContext);\n};\n\nexport { ThemeProvider, useTheme };\n","import React, { useState } from \"react\";\nimport \"./tradepage.css\";\nimport BaseTrade from \"../../components/TokenSwaps/BaseTrade\";\nimport TelosEVM from \"../../components/TokenSwaps/TelosEVM\";\nimport FuseTrade from \"../../components/TokenSwaps/FuseTrade\";\nimport MeterTrade from \"../../components/TokenSwaps/MeterTrade\";\nimport shape from \"../../img/shape.png\"\nimport Navbar from \"../../components/Navbar/Navbar\";\nimport PageSwitcher from \"../../components/PageSwitcher/PageSwitcher\";\nimport { ThemeProvider } from \"./ThemeContext\";\nimport { ToggleProvider } from \"../../components/TokenSwaps/ToggleContext\";\nimport TitleSection from \"../../components/TitleSection/TitleSection\";\n\n\nconst TradePage = () => {\n\n const [islink, setIsLink] = useState(\"base\");\n\n return (\n \n \n
\n \n
\n
{/* Add margin-top */}\n setIsLink(\"base\")}\n className={islink === \"base\" ? \"isActive\" : \"\"}\n >\n Base\n \n setIsLink(\"teloTrade\")}\n className={islink === \"teloTrade\" ? \"isActive\" : \"\"}\n >\n TelosEVM\n \n {/* setIsLink(\"fuse\")}\n className={islink === \"fuse\" ? \"isActive\" : \"\"}\n >\n Fuse\n */}\n {/* setIsLink(\"meter\")}\n className={islink === \"meter\" ? \"isActive\" : \"\"}\n >\n Meter\n */}\n
\n {islink === \"base\" && }\n {islink === \"teloTrade\" && }\n {islink === \"fuse\" && }\n {/* {islink === \"meter\" && } */}\n
\n
\n
\n
\n );\n};\n\nexport default TradePage;\n","import React from \"react\";\nimport \"./LogoCard.scss\";\n\nconst handleClick = (path) => {\n window.open(path, '_blank');\n}\n\nconst LogoCard = () => {\n return (\n
\n
\n
\n {logoData.map((item) => (\n
\n
\n
\n {item.tags.map((tag) => (\n \n {tag}\n \n ))}\n
\n
\n {item.name}\n
\n

{item.name}

\n

{item.tagline}

\n
\n

\n {item.description.map((desc, index) => (\n <>\n {desc}
\n \n ))}\n

\n
\n
\n \n \n
\n
\n
\n ))}\n
\n
\n
\n );\n};\n\nexport default LogoCard;\n\nexport const logoData = [\n {\n id: 1,\n logo: \"/assets/exo-system/logo-lynx.svg\",\n name: \"Lynx\",\n tagline: \"Leverage Trade using MST \",\n description: [\n \"Holders of MST can now open long/short positions with up to 100x leverage on BTC/USD, ETH/USD, and other tradeable instruments on the Fuse network. Users can also provide MST liquidity to earn protocol fees.\",\n ],\n tags: [\"MST\"],\n tutorialPath: \"https://lynx-finance.gitbook.io/lynx-finance\",\n AppPath: \"https://www.lynx.finance/\",\n },\n {\n id: 2,\n logo: \"/assets/exo-system/logo-robinos.svg\",\n name: \"Robinos\",\n tagline: \"Bet on ‘Versus’ events\",\n description: [\n \"Robinos is a sports performance platform on the Telos EVM network. Use USDM to place bets on the short term events such as “which team will win” Robinos lists a variety of different types of predictions for users to play with\",\n ],\n tags: [\"USDM\"],\n tutorialPath: \"https://robinospredict.notion.site/2dffcd940379462cbc626f6e7dae123e?v=22a28f25af564e9e8d60c8b85e52fad7\",\n AppPath: \"https://robinos.finance/\",\n },\n {\n id: 3,\n logo: \"/assets/exo-system/logo-swapsicle.svg\",\n name: \"Swapsicle\",\n tagline: \"Trade MST & USDM\",\n description: [\n \"Swapsicle is a cross-chain DeFi hub that offers a suite of services including Swaps, Yield Farming and concentrated liquidity. Users can also provide MST and USDM liquidity to earn protocol fees.\",\n ],\n tags: [\"USDM\", \"MST\"],\n tutorialPath: \"https://docs.swapsicle.io/\",\n AppPath: \"https://www.swapsicle.io/\",\n },\n {\n id: 4,\n logo: \"/assets/exo-system/logo-swing.svg\",\n name: \"Swing\",\n tagline: \"Buy MST on every network\",\n description: [\n \"Swing is a modern crypto liquidity routing platform built for the financial future of blockchain. It delivers frictionless, cross-chain liquidity for all crypto assets.\",\n ],\n tags: [\"MST\"],\n tutorialPath: \"https://swing.xyz/about\",\n AppPath: \"https://swing.xyz/\",\n },\n {\n id: 5,\n logo: \"/assets/exo-system/logo-symmetric.jpg\",\n name: \"Symmetric\",\n tagline: \"Trade MST & USDM\",\n description: [\n \"Symmetric is an Automated Market Maker and Decentralized Exchange where investors swap tokens and earn protocol fees by adding liquidity to smart pools for both USDM and MST\",\n ],\n tags: [\"USDM\", \"MST\"],\n tutorialPath: \"https://docs.symmetric.exchange/\",\n AppPath: \"https://app.symm.fi/#/\",\n },\n {\n id: 6,\n logo: \"/assets/exo-system/logo-voltage.jpg\",\n name: \"Voltage\",\n tagline: \"Trade MST & USDM\",\n description: [\n \"Voltage is a DeFi exchange on the Fuse Blockchain, enabling investors to trade USDM, MST and many other tokens. Users can also provide MST and USDM liquidity to earn protocol fees..\"\n ],\n tags: [\"USDM\", \"MST\"],\n tutorialPath: \"https://docs.voltage.finance/voltage\",\n AppPath: \"https://voltage.finance/swap\",\n },\n\n];\n","import React from \"react\";\nimport \"./EcoFooter.scss\";\n\nconst EcoFooter = () => {\n return (\n
\n
\n

Integrate Meridian Assets in your Protocol.

\n

\n Enjoy the power of Meridian’s assets in your project, unlocking\n untapped liquidity on the ecosystem.
\n Connect with us to get technical and liquidity support!\n

\n \n
\n
\n );\n};\n\nexport default EcoFooter;\n","import React from \"react\";\nimport TitleSection from \"../../components/TitleSection/TitleSection\";\nimport LogoCard from \"../../components/Ecosystem/LogoCard/LogoCard\";\nimport EcoFooter from \"../../components/Ecosystem/Footer/EcoFooter\";\nimport \"./Ecosystem.css\";\n\nconst Ecosystem = () => {\n return (\n
\n \n \n \n
\n );\n};\n\nexport default Ecosystem;\n","import React from \"react\";\n\nimport cx from \"classnames\";\n\nimport \"./Checkbox.css\";\nimport { ImCheckboxUnchecked, ImCheckboxChecked } from \"react-icons/im\";\n\nexport default function Checkbox(props) {\n const { isChecked, setIsChecked, disabled, className } = props;\n\n return (\n setIsChecked(!isChecked)}\n >\n \n {isChecked && }\n {!isChecked && }\n \n {props.children}\n \n );\n}\n","// date format: d MMM yyyy, H:mm, time should be specifed based on UTC time\n\nexport type EventData = {\n id: string;\n title: string;\n isActive?: boolean;\n validTill: string;\n bodyText: string | string[];\n buttons: {\n text: string;\n link: string;\n newTab: boolean;\n }[];\n};\n\nexport const homeEventsData: EventData[] = [\n \n];\n\nexport const appEventsData: EventData[] = [\n \n {\n id: \"mst-manager-updates\",\n title: \"MST Manager Updates\",\n isActive: true,\n validTill: \"18 Dec 2022, 12:00\",\n bodyText:\n \"The MST Manager address has been updated based on the linked post, existing users will need to approve the new MST Manager to buy MST tokens.\",\n buttons: [\n {\n text: \"Read More\",\n link: \"https://medium.com/@Omni-Dex/mst-deployment-updates-nov-2022-16572314874d\",\n newTab: true,\n },\n ],\n },\n];\n","function Icon({ className }) {\n return (\n \n \n \n );\n}\n\nexport default Icon;\n","import \"./EventToast.css\";\nimport Icon from \"./AnnouncementIcon\";\nimport { MdOutlineClose } from \"react-icons/md\";\nimport ExternalLink from \"components/ExternalLink/ExternalLink\";\n\nexport default function EventToast({ event, id, onClick, t }) {\n return (\n
\n
\n
\n \n

{event.title}

\n
\n \n
\n {Array.isArray(event.bodyText) ? (\n event.bodyText.map((text, i) => (\n

\n {text}\n

\n ))\n ) : (\n

{event.bodyText}

\n )}\n
\n {event.buttons.map((button) => {\n if (button.newTab) {\n return (\n \n {button.text}\n \n );\n } else {\n return (\n \n {button.text}\n \n );\n }\n })}\n
\n
\n );\n}\n","import { useLocalStorage } from \"react-use\";\nimport toast from \"react-hot-toast\";\nimport { homeEventsData, appEventsData } from \"config/events\";\nimport { useEffect } from \"react\";\nimport EventToast from \"./EventToast\";\nimport { isFuture, parse } from \"date-fns\";\nimport { isHomeSite } from \"lib/legacy\";\n\nfunction useEventToast() {\n const isHome = isHomeSite();\n const [visited, setVisited] = useLocalStorage(\"visited-announcements\", []);\n\n useEffect(() => {\n const eventsData = isHome ? homeEventsData : appEventsData;\n\n eventsData\n .filter((event) => event.isActive)\n .filter((event) => isFuture(parse(event.validTill + \", +00\", \"d MMM yyyy, H:mm, x\", new Date())))\n .filter((event) => Array.isArray(visited) && !visited.includes(event.id))\n .forEach((event) => {\n toast.custom(\n (t) => (\n {\n toast.dismiss(event.id);\n visited.push(event.id);\n setVisited(visited);\n }}\n />\n ),\n {\n id: event.id,\n style: {},\n }\n );\n });\n }, [visited, setVisited, isHome]);\n}\n\nexport default useEventToast;\n","import { Toaster } from \"react-hot-toast\";\nimport { useWindowScroll, createBreakpoint } from \"react-use\";\n\nfunction EventToastContainer() {\n let { y: scrollY } = useWindowScroll();\n const useBreakpoint = createBreakpoint({ XL: 1033, L: 768, S: 350 });\n const breakpoint = useBreakpoint();\n return (\n 60 ? \"30px\" : `${93 - scrollY}px`,\n right: breakpoint === \"XL\" ? \"30px\" : \"1rem\",\n }}\n toastOptions={{\n duration: Infinity,\n }}\n />\n );\n}\nexport default EventToastContainer;\n","import { Helmet } from \"react-helmet\";\n\nfunction SEO(props) {\n const { children, ...customMeta } = props;\n const meta = {\n title: \"Meridian | Decentralized Perpetual Exchange\",\n description:\n \"Trade spot or perpetual BTC, ETH, USDM and other top cryptocurrencies with up to 50x leverage directly from your wallet on Arbitrum and Avalanche.\",\n image: \"https://gmx.io/og.png\",\n type: \"exchange\",\n ...customMeta,\n };\n return (\n <>\n \n {meta.title}\n \n \n \n \n \n \n \n \n \n \n \n \n \n {children}\n \n );\n}\n\nexport default SEO;\n","import SEO from \"components/Common/SEO\";\nimport Footer from \"components/Footer/Footer\";\nimport { getPageTitle } from \"lib/legacy\";\nimport \"./PageNotFound.css\";\nimport { Trans } from \"@lingui/macro\";\nimport { getHomeUrl, getTradePageUrl } from \"lib/legacy\";\n\nfunction PageNotFound() {\n const homeUrl = getHomeUrl();\n const tradePageUrl = getTradePageUrl();\n\n return (\n \n
\n
\n
\n

\n Page not found\n

\n

\n \n Return to \n Homepage or Trade\n \n

\n
\n
\n
\n
\n
\n );\n}\n\nexport default PageNotFound;\n","import React from \"react\";\nimport Footer from \"components/Footer/Footer\";\nimport SEO from \"components/Common/SEO\";\nimport { getPageTitle } from \"lib/legacy\";\nimport \"./TermsAndConditions.css\";\n\nexport default function TermsAndConditions() {\n return (\n \n
\n
\n
\n
GMX
\n
Terms and Conditions
\n
Last modified: August 1st, 2022
\n
\n
\n
\n

\n Welcome to GMX.io (\"we,\" \"us,\" or \"our\"), the informational resource for GMX Protocol, as defined below.\n

\n

\n GMX.io provides information and resources about the fundamentals of the decentralized non-custodial\n protocol called the GMX Protocol (the \"GMX Protocol,\" \"Protocol,\" or \"GMX DApp\"). GMX.io is not an\n available access point to the GMX Protocol.\n

\n

\n These Terms and Conditions and any other documents incorporated herein by reference (collectively, these\n \"Terms\") to you or the company or other legal entity you represent (\"you\" or \"your\") explains the terms\n and conditions by which you may access GMX.io (\"the Site\") and app.GMX.io (\"the Interface\"). Please do\n not use the Site or Interface if you disagree with any of these Terms.\n

\n
\n
\n

1. USE OF THE SITE AND THE INTERFACE

\n

The GMX.io site is for informational purposes only.

\n

\n GMX.io is not part of any transaction on the blockchain networks underlying the GMX Protocol; we do not\n have possession, custody, or control over any crypto assets appearing on the Interface; and we do not\n have possession, custody, or control over any user's funds. Further, we do not store, send, or receive\n any crypto assets. You understand that when you interact with any GMX Protocol smart contracts, you\n always retain control over your crypto assets. We do not have access to your private keys.\n

\n
    \n
  • \n

    \n 1.1. As a condition to accessing or using the Site or Interface, you represent and warrant to GMX.io\n the following:\n

    \n
      \n
    • \n

      \n 1.1.1. If you are an individual person, then you are of legal age in the jurisdiction in which\n you reside, and you have the legal capacity to enter into these Terms and be bound by them;\n

      \n
    • \n
    • \n

      \n 1.1.2. If you are an entity, then you must have the legal authority to accept these Terms on\n that entity's behalf, in which case \"you\" (except as used in this paragraph) will mean that\n entity;\n

      \n
    • \n
    • \n

      1.1.3. You are not a U.S. Person;

      \n
    • \n
    • \n

      \n 1.1.4. You are not a resident, national, or agent of any country to which the United States, the\n United Kingdom, or the European Union embargoes goods or imposes similar sanctions\n (collectively, \"Restricted Territories\");\n

      \n
    • \n
    • \n

      \n 1.1.5. You are not subject to economic or trade sanctions administered or enforced by any\n governmental authority; or otherwise, you are not a member of any sanctions list or equivalent\n maintained by the United States government, the United Kingdom government, the European Union,\n or the United Nations, including without limitation the U.S. Office of Foreign Asset Control\n Specifically Designated Nationals and Blocked Person List (collectively, \"Sanctions Lists\n Persons\");\n

      \n
    • \n
    • \n

      \n 1.1.6. You do intend to transact with any Restricted Person or Sanctions List Person;\n

      \n
    • \n
    • \n

      \n 1.1.7. You do not, and will not, use VPN software or any other privacy or anonymization tools or\n techniques, or other means, to circumvent, or attempt to circumvent, any restrictions that\n apply; and\n

      \n
    • \n
    • \n

      \n 1.1.8. Your access is not (a) prohibited by and does not otherwise violate or assist you in\n violating any domestic or foreign law, rule, statute, regulation, by-law, order, protocol, code,\n decree, letter, or another directive, requirement, guidance, or guideline, published or in force\n that applies to or is otherwise intended to govern or regulate any person, property,\n transaction, activity, event or other matter, including any rule, letter, order, judgment,\n directive or other requirements, guidance, or guideline issued by any domestic or foreign\n federal, provincial or state, municipal, local or other governmental, regulatory, judicial or\n administrative authority having jurisdiction over GMX.io or you as otherwise duly enacted,\n enforceable by law, the common law or equity (collectively, \"Applicable Laws\"); or (b)\n contribute to or facilitate any illegal activity.\n

      \n
    • \n
    \n
  • \n
\n
    \n
  • \n

    \n 1.2. As a condition to accessing or using the Site or the Interface, you acknowledge, understand,\n and agree to the following:\n

    \n
      \n
    • \n

      \n 1.2.1. From time to time, the Site or the Interface may be inaccessible or inoperable for any\n reason, including, but not limited to: (a) equipment malfunctions; (b) periodic maintenance\n procedures or repairs that GMX.io or any of its suppliers or contractors may undertake from time\n to time; (c) causes beyond GMX.io's control or that GMX.io could not reasonably foresee; (d)\n disruptions and temporary or permanent unavailability of underlying blockchain infrastructure;\n or (e) unavailability of third-party service providers or external partners for any reason;\n

      \n
    • \n
    • \n

      \n 1.2.2. We reserve the right to disable or modify access to the Site at any time in the event of\n any breach of these Terms, including, without limitation, if we reasonably believe any of your\n representations and warranties may be untrue or inaccurate, and we will not be liable to you for\n any losses or damages you may suffer as a result of or in connection with the Site or the\n Interface being inaccessible to you at any time or for any reason;\n

      \n
    • \n
    • \n

      \n 1.2.3. The Interface may evolve, which means third parties may apply changes, replace, or\n discontinue (temporarily or permanently) the access at any time in their sole discretion;\n

      \n
    • \n
    • \n

      \n 1.2.4. The pricing information provided on the Site or the Interface does not represent an\n offer, a solicitation of an offer, or any advice regarding, or recommendation to enter into, a\n transaction with GMX.io;\n

      \n
    • \n
    • \n

      1.2.5. GMX.io does not act as a broker or advisor for you;

      \n
    • \n
    • \n

      \n 1.2.6. You are solely responsible for your use of the Site or the Interface, including all of\n your transfers of digital assets;\n

      \n
    • \n
    • \n

      \n 1.2.7. To the fullest not prohibited by Applicable Law, we owe no fiduciary duties or\n liabilities to you or any other party, and that to the extent any such duties or liabilities may\n exist at law or in equity, you hereby irrevocably disclaim, waive, and eliminate those duties\n and liabilities;\n

      \n
    • \n
    • \n

      \n 1.2.8. You are solely responsible for reporting and paying any taxes applicable to your use of\n the Interface; and\n

      \n
    • \n
    • \n

      \n 1.2.9. We have no control over, or liability for, the delivery, quality, safety, legality, or\n any other aspect of any digital assets that you may transfer to or from a third party, and we\n are not responsible for ensuring that an entity with whom you transact completes the transaction\n or is authorized to do so. If you experience a problem with any transactions in digital assets\n using the Site or the Interface, you bear the entire risk.\n

      \n
    • \n
    \n
  • \n
\n
\n
\n

2. FEES

\n

\n You are required to pay all fees for transactions involving certain blockchain networks. These fees may\n include gas costs and all other fees reflected on the Interface at your use, including trading-related\n fees. GMX.io does not receive fees for any blockchain transactions or using the Site or the Interface.\n

\n
\n
\n

3. NO PROFESSIONAL ADVICE OR FIDUCIARY DUTIES

\n

\n Nothing herein constitutes legal, financial, business, or tax advice, and you are strongly advised to\n consult an advisor(s) before engaging in any activity in connection herewith. All information provided\n by the Site is for informational purposes only and should not be construed as professional advice. You\n should not take, or refrain from taking, any action based on any information contained on the Site or\n any other information that we make available at any time, including, without limitation, blog posts,\n articles, links to third-party content, discord content, news feeds, tutorials, tweets, and videos. The\n Terms are not intended to, and do not, create or impose any fiduciary duties on us.\n

\n
\n
\n

4. PROPRIETARY RIGHT

\n
    \n
  • \n

    \n 4.1. GMX.io own all rights, names, logos, and other marks used on the Site and the Interface,\n including, without limitation, any copyrights in and to any content, code, data, or other materials\n that you may access or use on or through the Site or the Interface; however, the code for the GMX\n Protocol and the Interface (app.GMX.io) deployed on IPFS is open-sourced. Except as expressly set\n forth herein, your use of or access to the Site or the Interface does not grant you any ownership or\n other rights therein.\n

    \n
  • \n
  • \n

    \n 4.2. GMX.io may use and share your comments, bug reports, ideas, or other feedback that you may\n provide, including suggestions about how we might improve. You agree that GMX.io is free to use or\n not use any feedback we receive from you as we see fit, including copying and sharing such feedback\n with third parties, without any obligation to you.\n

    \n
  • \n
\n
\n
\n

5. MODIFICATION, SUSPENSION, AND TERMINATION

\n
    \n
  • \n

    \n 5.1. GMX.io reserve the right, at our sole discretion, from time to time and with or without prior\n notice to you, to modify, suspend or disable (temporarily or permanently) the Site or our subdomain\n to the Interface, in whole or in part, for any reason whatsoever, including, without limitation.\n Upon termination of your access, your right to use the Site or the Interface from our subdomain will\n immediately cease. However, it would still be accessible via a third party since we do not host or\n own its code. GMX.io will not be liable for any losses suffered by you resulting from any\n modification to the Site or the Interface or from any modification, suspension, or termination, for\n any reason, of your access to all or any portion of the Site or the Interface.\n

    \n
  • \n
  • \n

    \n 5.2. GMX.io may revise these Terms from time to time. We will notify you by updating the date at the\n top of the Terms and maintaining a current version. The most current version of the Terms will\n always be at https://perpetuals.meridianfinance.net/#/terms-and-conditions. All modifications will be effective when they\n are posted. By continuing to access or use the Site or the Interface after those revisions become\n effective, you agree to be bound by the revised Terms.\n

    \n
  • \n
\n
\n
\n

6. RISKS

\n
    \n
  • \n

    \n 6.1. The use of technology related to blockchain, smart contracts, and cryptocurrencies, among\n others, entails a risk that by accessing transactions, you are assuming. GMX.io does not own or\n control any underlying software through which blockchain networks are formed. The software\n underlying blockchain networks are open-source so anyone can use, copy, modify, and distribute it.\n By using the Interface, you acknowledge and agree:\n

    \n
      \n
    • \n

      \n 6.1.1. That GMX.io is not responsible for the operation of the open-source software and networks\n underlying the Interface;\n

      \n
    • \n
    • \n

      \n 6.1.2. That there exists no guarantee of the functionality, security, or availability of that\n software and networks; and\n

      \n
    • \n
    • \n

      \n 6.1.3. That the underlying networks are subject to sudden changes in operating rules, such as\n those commonly referred to as \"forks,\" which may materially affect the Interface. You are\n responsible for securing your private key(s). We do not have access to your private key(s);\n losing control of your private key(s) will permanently and irreversibly deny you access to any\n blockchain-based network. Neither GMX.io nor any other person or entity will be able to retrieve\n or protect your digital assets. If your private key(s) are lost, you will not be able to\n transfer your digital assets to any blockchain address or wallet. If this occurs, you will not\n be able to realize any value or utility from the digital assets you may hold.\n

      \n
    • \n
    \n
  • \n
  • \n

    \n 6.2. GMX.io is not responsible for the content of any third party, including, but not limited to,\n information, materials, products, or services that GMX.io does not own or control. In addition,\n third parties may offer promotions related to your access and use of the Interface. GMX.io does not\n endorse or assume any responsibility for such resources or promotions. Suppose you access any such\n resources or participate in any such promotions. In that case, you do so at your own risk and\n understand that these Terms do not apply to your dealings or relationships with any third parties.\n You expressly relieve GMX.io of all liability arising from using such resources or participating in\n such promotions.\n

    \n
  • \n
  • \n

    \n 6.3. You understand that the Arbitrum and Avalanche blockchain remains under development, which\n creates technological and security risks when using the Interface, in addition to uncertainty\n relating to digital assets and transactions therein. You acknowledge that the cost of transacting on\n the Arbitrum and Avalanche blockchain is variable and may increase at any time, causing an impact on\n any activities taking place on these blockchains, which may result in price fluctuations or\n increased costs when using the Interface.\n

    \n
  • \n
  • \n

    \n 6.4. Transactions entered into in connection with the Interface are irreversible and final, and\n there are no refunds. You acknowledge and agree that you will access and use the Interface at your\n own risk.\n

    \n
  • \n
  • \n

    \n 6.5. We must comply with Applicable Law, which may require us to, upon request by government\n agencies, take certain actions or provide information that may not be in your best interests.\n

    \n
  • \n
  • \n

    \n 6.6. You hereby assume and agree that GMX.io will have no responsibility or liability for the risks\n in Section 9. You hereby irrevocably waive, release and discharge all claims, whether known or\n unknown to you, against GMX.io, its affiliates, and their respective shareholders, members,\n directors, officers, employees, agents, representatives, suppliers, and contractors related to any\n of the risks set forth in this Section 6.\n

    \n
  • \n
\n
\n
\n

7. PROHIBITED USES

\n
    \n
  • \n

    \n 7.1 You agree not to engage in the prohibited uses set forth below. The specific activities set\n forth below are representative but not exhaustive. By using the Site or the Interface, you confirm\n that you will not do any of the following:\n

    \n
      \n
    • \n

      \n 7.1.1. Promote or facilitate illegal activities, including but not limited to money laundering,\n terrorist financing, tax evasion, buying or selling illegal drugs, contraband, counterfeit\n goods, or illegal weapons;\n

      \n
    • \n
    • \n

      \n 7.1.2. Engage in transactions involving items that infringe or violate any copyright, trademark,\n right of publicity, privacy, or any other proprietary right of GMX.io;\n

      \n
    • \n
    • \n

      \n 7.1.3. Engage in improper or abusive trading practices, including but not limited to (a) any\n fraudulent act or scheme to defraud, deceive, trick, or mislead; (b) trading ahead of another\n user of the Site or the Interface or front-running; (c) fraudulent trading; (d) accommodation\n trading; (e) fictitious transactions; (f) pre-arranged or non-competitive transactions; or (g)\n cornering;\n

      \n
    • \n
    • \n

      \n 7.1.4. Uploading or transmitting viruses, worms, Trojan horses, time bombs, cancelbots, spiders,\n malware, or any other type of malicious code that will or may be used in any way that will\n affect the functionality or operation of the Site or the Interface;\n

      \n
    • \n
    • \n

      \n 7.1.5. Use the Site or Interface in any way that is, in our sole discretion, libelous,\n defamatory, profane, obscene, pornographic, sexually explicit, indecent, lewd, vulgar,\n suggestive, harassing, stalking, hateful, threatening, offensive, discriminatory, bigoted,\n abusive, inflammatory, fraudulent, deceptive, or otherwise objectionable or likely or intended\n to incite, threaten, facilitate, promote, or encourage hate, racial intolerance, or violent acts\n against others;\n

      \n
    • \n
    • \n

      \n 7.1.6. Harass, abuse, or harm another person or entity, including GMX.io's collaborator and\n service providers;\n

      \n
    • \n
    • \n

      \n 7.1.7. Impersonate another user of the Site or the Interface or otherwise misrepresent yourself;\n or\n

      \n
    • \n
    • \n

      \n 7.1.8. Engage or attempt to engage or encourage, induce or assist any third party, or yourself\n attempt, to engage in any of the activities prohibited under this Section 4 or any other\n provision of these Terms.\n

      \n
    • \n
    \n
  • \n
\n
\n
\n

8. DISCLOSURES; DISCLAIMERS

\n

\n GMX.io is an informational site for the GMX Protocol. GMX.io does not operate an exchange platform or\n offer trade execution or clearing services and has no oversight, involvement, or control concerning your\n transactions using the Interface. All transactions between users of the Interface are executed\n peer-to-peer directly between the users' blockchain addresses through a third-party developed\n open-source smart contract.\n

\n

\n You are responsible for complying with all Applicable Laws that govern your Perpetual Contracts. As a\n result of restrictions under the Commodity Exchange Act and the regulations promulgated thereunder by\n the U.S. Commodity Futures Trading Commission (\"CFTC\"), no U.S. Person may enter into Perpetual\n Contracts using the Interface.\n

\n

\n You understand that GMX.io is not registered or licensed by any regulatory agency or authority. No such\n agency or authority has reviewed or approved the use of the Site or the Interface.\n

\n

\n You agree that the Site and the Interface are provided on an \"AS IS\" and \"AS AVAILABLE\" basis. GMX.io\n makes no guarantees of any kind or connection with the Site or the Interface.\n

\n
\n
\n

9. LIMITATION OF LIABILITY

\n

\n In no event shall GMX.io, its affiliates, its suppliers and contractors, and its affiliates', suppliers'\n and contractors' respective stockholders, members, directors, officers, managers, employees, attorneys,\n agents, representatives, suppliers, and contractors shall be liable for any direct, indirect,\n incidental, special, punitive, consequential or similar damages or liabilities whatsoever (including,\n without limitation, damages for loss of fiat, assets, data, information, revenue, opportunities, use,\n goodwill, profits or other business or financial benefit) arising out of or in connection with the Site\n or the Interface, or other item provided by or on behalf of GMX.io, whether under contract, tort\n (including negligence), civil liability, statute, strict liability, breach of warranties, or under any\n other theory of liability, and whether or not we have been advised of, knew of or should have known of\n the possibility of such damages and notwithstanding any failure of the essential purpose of these Terms\n or any limited remedy hereunder nor is GMX.io in any way responsible for the execution or settlement of\n transactions between users of the Interface.\n

\n

\n In no event shall GMX.io's aggregate liability arising out of or in connection with the Site or\n Interface exceed one thousand Singapore Dollars (1,000.00 SGD).\n

\n
\n
\n

10. INDEMNIFICATION

\n

\n You will defend, indemnify, and hold harmless GMX.io, its affiliates, members, member, managers,\n employees, attorneys, representatives, suppliers, and contractors from any claim, demand, lawsuit,\n action, proceeding, investigation, liability, damage, loss, cost or expense, including without\n limitation reasonable attorneys' fees, arising out of or relating to (a) your use of or conduct in\n connection with the Site or the Interface (b) your violation of these Terms; or (c) your misuse of the\n Site or the Interface, or any smart contract and/or script related thereto; (d) your violation of any\n laws, rules, regulations, codes, statutes, ordinances, or orders of any governmental or\n quasi-governmental authorities; (e) your violation of the rights of any third party, including any\n intellectual property right, publicity, confidentiality, property, or privacy right; (f) your use of a\n third-party product, service, and/or website; or (g) any misrepresentation made by you. We reserve the\n right to assume, at your expense, the exclusive defense, and control of any matter subject to\n indemnification by you. You agree to cooperate with our defense of any claim. You will not, in any\n event, settle any claim without.\n

\n
\n
\n

11. DISPUTE RESOLUTION & ARBITRATION

\n

\n GMX.io will use its best efforts to resolve potential disputes through informal, good faith\n negotiations. If a potential dispute arises, you must contact us by sending a written notice of your\n claim (\"Notice\") to GMX.io on any of our official channels. The notice must (a) describe the nature and\n basis of the claim and (b) set forth the specific relief sought. Our notice to you will be similar in\n form to that described above. If you and GMX.io cannot reach an agreement to resolve the claim within\n sixty (60) days of your email, then you and GMX.io agree to resolve the potential dispute according to\n the process set forth below.\n

\n

\n Any claim or controversy arising out of or relating to the Site, the Interface, or these Terms, or any\n other acts or omissions for which you may contend that we are liable, including (but not limited to) any\n claim or controversy as to arbitrability (\"Dispute\"), shall be finally and exclusively settled by\n arbitration under the Corte Civil y Mercantil de Arbitraje (CIMA). You understand that you are required\n to resolve all Disputes by binding arbitration. The arbitration shall be confidential before a single\n arbitrator, who shall be selected pursuant to the CIMA rules. The arbitration will be held in Madrid,\n Spain, unless you and we both agree to hold it elsewhere. Unless we agree otherwise, the arbitrator may\n not consolidate your claims with those of any other party. Any judgment on the award rendered by the\n arbitrator may be entered in any court of competent jurisdiction.\n

\n

\n Any claim arising out of or related to these Terms or the Site or the Interface must be filed within one\n year after such claim arose; otherwise, the claim is permanently barred, which means that you and GMX.io\n will not have the right to assert the claim.\n

\n
\n
\n

12. GOVERNING LAW

\n

\n The interpretation and enforcement of these Terms, and any dispute related to these Terms, the Site, or\n the Interface, will be governed by and construed and enforced under the laws of the Bahamas, as\n applicable.\n

\n
\n
\n

13. GENERAL INFORMATION

\n
    \n
  • \n

    \n 13.1. Any right or remedy of GMX.io set forth in these Terms is in addition to, and not in lieu of,\n any other right or remedy whether described in these Terms, under Applicable Law, at law, or in\n equity. The failure or delay of GMX.io in exercising any right, power, or privilege under these\n Terms shall not operate as a waiver thereof.\n

    \n
  • \n
  • \n

    \n 13.2. The following sections of these Terms will survive any termination of your access to the Site\n or the Interface, regardless of the reasons for its expiration or termination, in addition to any\n other provision which by law or by its nature should survive: Sections 3 through 12.\n

    \n
  • \n
  • \n

    \n 13.3. The invalidity or unenforceability of any of these Terms shall not affect the validity or\n enforceability of any other of these Terms, all of which shall remain in full force and effect.\n

    \n
  • \n
  • \n

    \n 13.4. GMX.io will have no responsibility or liability for any failure or delay in performance of the\n Site or the Interface, or any loss or damage that you may incur, due to any circumstance or event\n beyond our control, including without limitation any flood, extraordinary weather conditions,\n earthquake, or other act of God, fire, war, insurrection, riot, labor dispute, accident, any law,\n order regulation, direction, action or request of the government, communications, power failure, or\n equipment or software malfunction.\n

    \n
  • \n
  • \n

    \n 13.5. You may not assign or transfer any right to use the Site, the Interface, or any of your rights\n or obligations under these Terms, without our express prior written consent, including by operation\n of law or in connection with any change of control. We may assign or transfer any or all of our\n rights or obligations under these Terms, in whole or part, without notice or obtaining your consent\n or approval.\n

    \n
  • \n
  • \n

    \n 13.6. These Terms contain the entire agreement between you and GMX.io and supersede all prior and\n contemporaneous understandings between the parties regarding the Interface and the Site or the\n Interface.\n

    \n
  • \n
  • \n

    \n 13.7. In the event of any conflict between these Terms and any other agreement you may have with us,\n these Terms will control unless the other agreement specifically identifies these Terms and declares\n that the other agreement supersedes these Terms.\n

    \n
  • \n
  • \n

    \n 13.8. You agree that, except as otherwise expressly provided in these Terms, there shall be no\n third-party beneficiaries to the Terms other than the Indemnified Parties.\n

    \n
  • \n
\n
\n
\n

CONTACT INFORMATION

\n

\n If you have any questions about these Terms, the Site, or the Interface, please get in touch with GMX.io\n on any of our official channels.\n

\n
\n
\n
\n
\n
\n
\n );\n}\n","import \"./RedirectModal.css\";\nimport Modal from \"../Modal/Modal\";\nimport Checkbox from \"../Checkbox/Checkbox\";\nimport { t, Trans } from \"@lingui/macro\";\nimport ExternalLink from \"components/ExternalLink/ExternalLink\";\n\nexport function RedirectPopupModal({\n redirectModalVisible,\n setRedirectModalVisible,\n appRedirectUrl,\n setRedirectPopupTimestamp,\n setShouldHideRedirectModal,\n shouldHideRedirectModal,\n}) {\n const onClickAgree = () => {\n if (shouldHideRedirectModal) {\n setRedirectPopupTimestamp(Date.now());\n }\n };\n\n return (\n \n You are now being redirected to Meridian Leverage Trading platform.\n
\n
\n
\n \n Don't show this message again for 30 days.\n \n
\n \n Agree\n \n \n );\n}\n","import { i18n } from \"@lingui/core\";\nimport { en, es, zh, ko, ru, ja, fr, de } from \"make-plural/plurals\";\nimport { LANGUAGE_LOCALSTORAGE_KEY } from \"config/localStorage\";\nimport { isDevelopment } from \"config/env\";\n\n// uses BCP-47 codes from https://unicode-org.github.io/cldr-staging/charts/latest/supplemental/language_plural_rules.html\nexport const locales = {\n en: \"English\",\n es: \"Spanish\",\n zh: \"Chinese\",\n ko: \"Korean\",\n // ru: \"Russian\",\n ja: \"Japanese\",\n // fr: \"French\",\n // de: \"German\",\n ...(isDevelopment() && { pseudo: \"Test\" }),\n};\n\nexport const defaultLocale = \"en\";\n\ni18n.loadLocaleData({\n en: { plurals: en },\n es: { plurals: es },\n zh: { plurals: zh },\n ko: { plurals: ko },\n ru: { plurals: ru },\n ja: { plurals: ja },\n fr: { plurals: fr },\n de: { plurals: de },\n ...(isDevelopment() && { pseudo: { plurals: en } }),\n});\n\nexport function isTestLanguage(locale: string) {\n return locale === \"pseudo\";\n}\n\nexport async function dynamicActivate(locale: string) {\n const { messages } = await import(`@lingui/loader!locales/${locale}/messages.po`);\n if (!isTestLanguage(locale)) {\n localStorage.setItem(LANGUAGE_LOCALSTORAGE_KEY, locale);\n }\n i18n.load(locale, messages);\n i18n.activate(locale);\n}\n","import Davatar from \"@davatar/react\";\nimport { Menu } from \"@headlessui/react\";\nimport { Trans } from \"@lingui/macro\";\nimport { ETH_MAINNET } from \"config/chains\";\nimport copy from \"img/ic_copy_16.svg\";\nimport externalLink from \"img/ic_new_link_16.svg\";\nimport disconnect from \"img/ic_sign_out_16.svg\";\nimport { helperToast } from \"lib/helperToast\";\nimport { shortenAddress, useENS } from \"lib/legacy\";\nimport { useJsonRpcProvider } from \"lib/rpc\";\nimport { FaUserCircle } from \"react-icons/fa\";\nimport { createBreakpoint, useCopyToClipboard } from \"react-use\";\nimport \"./AddressDropdown.css\";\nimport ExternalLink from \"components/ExternalLink/ExternalLink\";\n\ntype Props = {\n account: string;\n accountUrl: string;\n disconnectAccountAndCloseSettings: () => void;\n};\n\nfunction AddressDropdown({ account, accountUrl, disconnectAccountAndCloseSettings }: Props) {\n const useBreakpoint = createBreakpoint({ L: 600, M: 550, S: 400 });\n const breakpoint = useBreakpoint();\n const [, copyToClipboard] = useCopyToClipboard();\n const { ensName } = useENS(account);\n const { provider: ethereumProvider } = useJsonRpcProvider(ETH_MAINNET);\n\n return (\n \n \n \n \n
\n \n \n {\n copyToClipboard(account);\n helperToast.success(\"Address copied to your clipboard\");\n }}\n >\n \"Copy\n

\n Copy Address\n

\n
\n \n \n \n \"Open\n

\n View in Explorer\n

\n
\n
\n \n
\n \"Disconnect\n

\n Disconnect\n

\n
\n
\n \n \n
\n );\n}\n\nexport default AddressDropdown;\n","import { ReactNode } from \"react\";\nimport \"./ConnectWalletButton.scss\";\n\ntype Props = {\n imgSrc: string;\n children: ReactNode;\n onClick: () => void;\n className?: string;\n};\n\nexport default function ConnectWalletButton({ imgSrc, children, onClick, className }: Props) {\n return (\n \n );\n}\n","import { useEffect, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport default function Portal({ children }) {\n const root = document.body;\n\n const el = useMemo(() => document.createElement(\"div\"), []);\n\n useEffect(() => {\n root.appendChild(el);\n return () => root.removeChild(el);\n }, [root, el]);\n\n return createPortal(children, el);\n}\n","import Portal from \"../Common/Portal\";\nimport Modal from \"./Modal\";\n\nexport default function ModalWithPortal(props) {\n return (\n \n \n \n );\n}\n","import { dynamicActivate, isTestLanguage, locales } from \"lib/i18n\";\nimport { importImage } from \"lib/legacy\";\nimport cx from \"classnames\";\nimport { LANGUAGE_LOCALSTORAGE_KEY } from \"config/localStorage\";\nimport checkedIcon from \"img/ic_checked.svg\";\n\nexport default function LanguageModalContent({ currentLanguage }) {\n return Object.keys(locales).map((item) => {\n const image = !isTestLanguage(item) && importImage(`flag_${item}.svg`);\n return (\n {\n if (!isTestLanguage(item)) {\n localStorage.setItem(LANGUAGE_LOCALSTORAGE_KEY, item);\n }\n dynamicActivate(item);\n }}\n >\n
\n
\n {isTestLanguage(item) ? \"🫐\" : {locales[item]}}\n
\n {locales[item]}\n
\n
\n {currentLanguage.current === item && {locales[item]}}\n
\n \n );\n });\n}\n","import React, { useRef, useState } from \"react\";\nimport { Menu } from \"@headlessui/react\";\nimport ModalWithPortal from \"../Modal/ModalWithPortal\";\nimport { t, Trans } from \"@lingui/macro\";\nimport cx from \"classnames\";\nimport { HiDotsVertical, HiChevronDown } from \"react-icons/hi\";\nimport \"./NetworkDropdown.css\";\nimport language24Icon from \"img/ic_language24.svg\";\nimport settingsIcon from \"img/ic_settings_16.svg\";\nimport { importImage } from \"lib/legacy\";\nimport { defaultLocale } from \"lib/i18n\";\nimport { LANGUAGE_LOCALSTORAGE_KEY } from \"config/localStorage\";\nimport LanguageModalContent from \"./LanguageModalContent\";\nimport { useChainId } from \"lib/chains\";\nimport { getChainIcon, getChainName } from \"config/chains\";\n\nconst LANGUAGE_MODAL_KEY: string = \"LANGUAGE\";\nconst NETWORK_MODAL_KEY: string = \"NETWORK\";\n\nexport default function NetworkDropdown(props) {\n const currentLanguage = useRef(localStorage.getItem(LANGUAGE_LOCALSTORAGE_KEY) || defaultLocale);\n const [activeModal, setActiveModal] = useState(null);\n\n function getModalContent(modalName) {\n switch (modalName) {\n case LANGUAGE_MODAL_KEY:\n return ;\n case NETWORK_MODAL_KEY:\n return (\n \n );\n default:\n return;\n }\n }\n function getModalProps(modalName) {\n switch (modalName) {\n case LANGUAGE_MODAL_KEY:\n return {\n className: \"language-popup\",\n isVisible: activeModal === LANGUAGE_MODAL_KEY,\n setIsVisible: () => setActiveModal(null),\n label: (\n \n {t`Select Language`}\n \n ),\n };\n case NETWORK_MODAL_KEY:\n return {\n className: \"network-popup\",\n isVisible: activeModal === NETWORK_MODAL_KEY,\n setIsVisible: () => setActiveModal(null),\n label: (\n \n {t`Networks and Settings`}\n \n ),\n };\n default:\n return {};\n }\n }\n return (\n <>\n {props.small ? (\n
setActiveModal(NETWORK_MODAL_KEY)}>\n
\n \n
\n
\n ) : (\n \n )}\n {getModalContent(activeModal)}\n \n );\n}\n\nfunction NavIcons({ selectorLabel }) {\n const { chainId } = useChainId();\n\n const icon = importImage(getChainIcon(chainId, 24));\n\n return (\n <>\n\n {selectorLabel}\n\n \n );\n}\n\nfunction NavItems({ selectorLabel }) {\n const { chainId } = useChainId();\n\n const chainName = getChainName(chainId).split(' ')[0];\n\n return (\n <>\n \n \n );\n}\n\nfunction DesktopDropdown({ setActiveModal, selectorLabel, networkOptions, onNetworkSelect, openSettings }) {\n return (\n
\n \n \n \n \n \n
\n \n
\n
\n {/* } \n setActiveModal(LANGUAGE_MODAL_KEY)}\n >\n
\n
\n \"\"\n
\n \n Language\n \n
\n
\n \n */}\n
\n
\n
\n );\n}\n\nfunction NetworkMenuItems({ networkOptions, selectorLabel, onNetworkSelect }) {\n async function handleNetworkSelect(option) {\n await onNetworkSelect(option);\n }\n return networkOptions.map((network) => {\n const networkIcon = importImage(network.icon);\n return (\n \n handleNetworkSelect({ value: network.value })}\n >\n
\n {network.label.split(' ')[0]}\n
\n
\n
\n
\n
\n
\n );\n });\n}\n\nfunction NetworkModalContent({ networkOptions, onNetworkSelect, selectorLabel, setActiveModal, openSettings }) {\n async function handleNetworkSelect(option) {\n await onNetworkSelect(option);\n }\n return (\n
\n
\n \n Networks\n \n\n {networkOptions.map((network) => {\n const networkIcon = importImage(network.icon);\n return (\n handleNetworkSelect({ value: network.value })}\n key={network.value}\n >\n
\n {network.label}\n {network.label}\n
\n
\n
\n );\n })}\n \n More Options\n \n {\n setActiveModal(LANGUAGE_MODAL_KEY);\n }}\n >\n
\n \"Select\n Language\n
\n
\n {\n openSettings();\n setActiveModal(null);\n }}\n >\n
\n \"\"\n \n Settings\n \n
\n
\n \n \n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport useSWR from \"swr\";\nimport { FaWallet } from \"react-icons/fa\";\nimport \"./WalletDisplay.css\";\nimport { PLACEHOLDER_ACCOUNT } from \"lib/legacy\";\nimport { useChainId } from \"lib/chains\";\nimport { NETWORK_METADATA } from \"config/chains\";\nimport { useWeb3React } from \"@web3-react/core\";\nimport { getContract } from \"config/contracts\";\nimport { contractFetcher } from \"lib/contracts\";\nimport Token from \"abis/Token.json\";\nimport { BigNumber } from \"ethers\";\nimport { formatAmount } from \"lib/numbers\";\n\nexport default function DisplayWalletBalances(props) {\n\n const [nativeBalance, setNativeBalance] = useState('')\n const { active, library, account } = useWeb3React();\n const { chainId } = useChainId();\n\n // get the user wallet native token balance\n useEffect(() => {\n const fetchNativeBalance = async () => {\n if (library && account) {\n try {\n const balance = await library.getBalance(account);\n setNativeBalance(balance);\n } catch (error) {\n console.error('Error fetching native token balance:', error);\n }\n }\n };\n fetchNativeBalance();\n }, [account, library]);\n\n //get user wallet balance of MST\n const { data: walletMSTBalance } = useSWR(\n [`StakeMST:walletMSTBalance:${active}`, chainId, getContract(chainId, \"MST\"), \"balanceOf\", account || PLACEHOLDER_ACCOUNT],\n {\n fetcher: contractFetcher(library, Token),\n }\n );\n //get user wallet balance of USDM\n const { data: walletUSDMBalance } = useSWR(\n [`StakeMST:walletUSDMBalance:${active}`, chainId, getContract(chainId, \"USDM\"), \"balanceOf\", account || PLACEHOLDER_ACCOUNT],\n {\n fetcher: contractFetcher(library, Token),\n }\n );\n const tokenBalances = [\n { header: NETWORK_METADATA[chainId].nativeCurrency.symbol, value: nativeBalance ? nativeBalance.toString() : \"0\" },\n { header: \"MST\", value: walletMSTBalance ? walletMSTBalance.toString() : \"0\" },\n { header: \"USDM\", value: walletUSDMBalance ? walletUSDMBalance.toString() : \"0\" }\n ];\n\n return (\n <>\n \n \n )\n}\n\nfunction WalletItem({ header, value }) { \n return (\n
\n
{header}
\n
{formatAmount(value,18,2,true)}
\n
\n );\n}\n\nconst DisplayWalletItems = ({ tokenBalances }) => {\n return (\n
\n \n {tokenBalances.map((balance, index) => (\n \n ))}\n
\n );\n};\n\n","import React, { useRef, useState } from \"react\";\nimport ModalWithPortal from \"../Modal/ModalWithPortal\";\nimport { t } from \"@lingui/macro\";\nimport cx from \"classnames\";\nimport \"./NetworkDropdown.css\";\nimport language24Icon from \"img/ic_language24.svg\";\nimport { isHomeSite } from \"lib/legacy\";\nimport { defaultLocale } from \"lib/i18n\";\nimport { LANGUAGE_LOCALSTORAGE_KEY } from \"config/localStorage\";\nimport LanguageModalContent from \"./LanguageModalContent\";\n\nexport default function LanguagePopupHome() {\n const currentLanguage = useRef(localStorage.getItem(LANGUAGE_LOCALSTORAGE_KEY) || defaultLocale);\n const [isLanguageModalOpen, setIsLanguageModalOpen] = useState(false);\n\n return (\n <>\n {/*\n
setIsLanguageModalOpen(true)}>\n
\n\n \n \n
\n
\n\n */}\n \n \n \n \n );\n}\n","import { useWeb3React } from \"@web3-react/core\";\nimport AddressDropdown from \"../AddressDropdown/AddressDropdown\";\nimport ConnectWalletButton from \"../Common/ConnectWalletButton\";\nimport React, { useCallback, useEffect } from \"react\";\nimport { HeaderLink } from \"./HeaderLink\";\nimport connectWalletImg from \"img/ic_wallet_24.svg\";\n\nimport \"./Header.css\";\nimport { isHomeSite, getAccountUrl } from \"lib/legacy\";\nimport cx from \"classnames\";\nimport { Trans } from \"@lingui/macro\";\nimport NetworkDropdown from \"../NetworkDropdown/NetworkDropdown\";\nimport DisplayWalletBalances from \"../WalletDisplay/WalletDisplay\"\nimport LanguagePopupHome from \"../NetworkDropdown/LanguagePopupHome\";\nimport { BASE_MAINNET, FUSE_MAINNET, TELOS_MAINNET, METER_MAINNET, TAIKO_MAINNET, getChainIcon, getChainName } from \"config/chains\";\nimport { switchNetwork } from \"lib/wallets\";\nimport { useChainId } from \"lib/chains\";\nimport { isDevelopment } from \"config/env\";\n\ntype Props = {\n openSettings: () => void;\n small?: boolean;\n setWalletModalVisible: (visible: boolean) => void;\n disconnectAccountAndCloseSettings: () => void;\n redirectPopupTimestamp: number;\n showRedirectModal: (to: string) => void;\n};\n\nconst NETWORK_OPTIONS = [\n\n {\n label: getChainName(BASE_MAINNET),\n value: BASE_MAINNET,\n icon: getChainIcon(BASE_MAINNET, 24),\n color: \"#264f79\",\n },\n {\n label: getChainName(FUSE_MAINNET),\n value: FUSE_MAINNET,\n icon: getChainIcon(FUSE_MAINNET, 24),\n color: \"#264f79\",\n },\n\n {\n label: getChainName(TELOS_MAINNET),\n value: TELOS_MAINNET,\n icon: getChainIcon(TELOS_MAINNET, 24),\n color: \"#E841424D\",\n },\n\n {\n label: getChainName(METER_MAINNET),\n value: METER_MAINNET,\n icon: getChainIcon(METER_MAINNET, 24),\n color: \"#E841424D\",\n },\n {\n label: getChainName(TAIKO_MAINNET),\n value: TAIKO_MAINNET,\n icon: getChainIcon(TAIKO_MAINNET, 24),\n color: \"#E841424D\",\n },\n];\n\nif (isDevelopment()) {\n {/*\n NETWORK_OPTIONS.push({\n label: getChainName(ARBITRUM_TESTNET),\n value: ARBITRUM_TESTNET,\n icon: getChainIcon(ARBITRUM_TESTNET, 24),\n color: \"#264f79\",\n });\n*/}\n\n}\n\nexport function AppHeaderUser({\n openSettings,\n small,\n setWalletModalVisible,\n disconnectAccountAndCloseSettings,\n redirectPopupTimestamp,\n showRedirectModal,\n}: Props) {\n const { chainId } = useChainId();\n const { active, account } = useWeb3React();\n const showConnectionOptions = !isHomeSite();\n\n useEffect(() => {\n if (active) {\n setWalletModalVisible(false);\n }\n }, [active, setWalletModalVisible]);\n\n const onNetworkSelect = useCallback(\n (option) => {\n if (option.value === chainId) {\n return;\n }\n return switchNetwork(option.value, active);\n },\n [chainId, active]\n );\n\n const selectorLabel = getChainName(chainId);\n\n if (!active || !account) {\n return (\n
\n {/*
\n \n {isHomeSite() ? Launch App : Trade}\n \n
*/}\n\n {showConnectionOptions ? (\n <>\n \n setWalletModalVisible(true)} imgSrc={connectWalletImg}>\n {small ? Connect : Connect Wallet}\n \n \n ) : (\n \n )}\n
\n );\n }\n\n const accountUrl = getAccountUrl(chainId, account);\n\n return (\n
\n {/*\n
\n \n Trade\n \n
\n */}\n {showConnectionOptions ? (\n <>\n \n
\n \n
\n \n \n ) : (\n \n )}\n
\n );\n}\n","import React, { ReactNode, useEffect, useState } from \"react\";\nimport cx from \"classnames\";\n\nimport { AppHeaderUser } from \"./AppHeaderUser\";\nimport { AppHeaderLinks } from \"./AppHeaderLinks\";\n\nimport logoImg from \"img/ic_omnidex_footer.svg\";\nimport logoSmallImg from \"img/logo_GMX_small.svg\";\nimport { RiMenuLine } from \"react-icons/ri\";\nimport { FaTimes } from \"react-icons/fa\";\nimport { AnimatePresence as FramerAnimatePresence, motion } from \"framer-motion\";\n\nimport \"./Header.css\";\nimport { Link } from \"react-router-dom\";\nimport { isHomeSite } from \"lib/legacy\";\nimport { HomeHeaderLinks } from \"./HomeHeaderLinks\";\n\n// Fix framer-motion old React FC type (solved in react 18)\nconst AnimatePresence = (props: React.ComponentProps & { children: ReactNode }) => (\n \n);\n\nconst fadeVariants = {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n};\n\nconst slideVariants = {\n hidden: { x: \"-100%\" },\n visible: { x: 0 },\n};\n\ntype Props = {\n disconnectAccountAndCloseSettings: () => void;\n openSettings: () => void;\n setWalletModalVisible: (visible: boolean) => void;\n redirectPopupTimestamp: number;\n showRedirectModal: (to: string) => void;\n};\n\nexport function Header({\n disconnectAccountAndCloseSettings,\n openSettings,\n setWalletModalVisible,\n redirectPopupTimestamp,\n showRedirectModal,\n}: Props) {\n const [isDrawerVisible, setIsDrawerVisible] = useState(false);\n const [isNativeSelectorModalVisible, setIsNativeSelectorModalVisible] = useState(false);\n\n useEffect(() => {\n if (isDrawerVisible) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n }\n\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [isDrawerVisible]);\n\n return (\n <>\n {isDrawerVisible && (\n \n {isDrawerVisible && (\n setIsDrawerVisible(!isDrawerVisible)}\n >\n )}\n \n )}\n {isNativeSelectorModalVisible && (\n \n {isNativeSelectorModalVisible && (\n setIsNativeSelectorModalVisible(!isNativeSelectorModalVisible)}\n >\n )}\n \n )}\n
\n
\n
\n \n \"MST\n \"MST\n \n {/* {isHomeSite() ? (\n \n ) : (\n \n )} */}\n
\n
\n \n
\n
\n
\n \n
\n {/*
setIsDrawerVisible(!isDrawerVisible)}>\n {!isDrawerVisible && }\n {isDrawerVisible && }\n
*/}\n
setIsDrawerVisible(!isDrawerVisible)}>\n \"MST\n \"MST\n
\n
\n
\n \n
\n
\n \n
\n {/* \n {isDrawerVisible && (\n setIsDrawerVisible(false)}\n className=\"App-header-links-container App-header-drawer\"\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"hidden\"\n variants={slideVariants}\n transition={{ duration: 0.2 }}\n >\n {isHomeSite() ? (\n setIsDrawerVisible(false)}\n redirectPopupTimestamp={redirectPopupTimestamp}\n showRedirectModal={showRedirectModal}\n />\n ) : (\n setIsDrawerVisible(false)}\n redirectPopupTimestamp={redirectPopupTimestamp}\n showRedirectModal={showRedirectModal}\n />\n )} \n \n )}\n */}\n \n );\n}\n","import { BASE_MAINNET, FUSE_MAINNET, METER_MAINNET, TELOS_MAINNET, TAIKO_MAINNET, TARAXA_MAINNET, ARTELA_MAINNET } from \"config/chains\";\nimport { IconType } from \"react-icons\";\nimport {\n FaRegChartBar,\n FaCoins,\n FaHandshake,\n FaChartLine,\n FaArchway,\n FaSeedling,\n FaDollarSign,\n FaArrowAltCircleUp,\n FaExchangeAlt,\n FaEllipsisH,\n} from \"react-icons/fa\";\n\nexport interface InAppPath {\n name: string;\n path: string;\n}\n\nexport interface SubMenuItemConfig {\n networkId: number;\n name: string;\n path: string;\n subSubMenu?: InAppPath[];\n imagePath?: string;\n}\n\nexport interface MenuItemConfig {\n icon: IconType;\n title: string;\n path: string;\n subMenu?: SubMenuItemConfig[];\n}\n\nexport type NetworkType = \"Base\" | \"Telos\" | \"Fuse\" | \"Meter\" | \"Taiko\" | \"Taraxa\" | \"Artela\";\n\nexport const NetworksTypes: NetworkType[] = [\"Base\", \"Fuse\", \"Meter\", \"Telos\", \"Taiko\", \"Taraxa\", \"Artela\"];\n\nconst menuConfig: MenuItemConfig[] = [\n {\n icon: FaCoins,\n title: \"Mint USDM\",\n path: \"https://mint.meridianfinance.net/\",\n subMenu: [\n {\n networkId: BASE_MAINNET,\n name: \"Base\",\n imagePath: \"/assets/yields/base.svg\",\n path: \"https://mint.meridianfinance.net/\",\n subSubMenu: [\n { name: \"Trove\", path: \"https://mint.meridianfinance.net/\" },\n { name: \"Stability Pool\", path: \"https://mint.meridianfinance.net/#/pool\" },\n { name: \"Staking\", path: \"https://mint.meridianfinance.net/#/staking\" },\n { name: \"Risky Troves\", path: \"https://mint.meridianfinance.net/#/risky-troves\" },\n { name: \"Redemptions\", path: \"https://mint.meridianfinance.net/#/redemption\" },\n ],\n },\n {\n networkId: FUSE_MAINNET,\n name: \"Fuse\",\n imagePath: \"/assets/yields/fuse.svg\",\n path: \"https://mint.meridianfinance.net/\",\n subSubMenu: [\n { name: \"Trove\", path: \"https://mint.meridianfinance.net/\" },\n { name: \"Stability Pool\", path: \"https://mint.meridianfinance.net/#/pool\" },\n { name: \"Staking\", path: \"https://mint.meridianfinance.net/#/staking\" },\n { name: \"Risky Troves\", path: \"https://mint.meridianfinance.net/#/risky-troves\" },\n { name: \"Redemptions\", path: \"https://mint.meridianfinance.net/#/redemption\" },\n ],\n },\n {\n networkId: TELOS_MAINNET,\n name: \"Telos\",\n path: \"https://mint.meridianfinance.net/\",\n imagePath: \"/assets/yields/telos-evm.svg\",\n subSubMenu: [\n { name: \"Trove\", path: \"https://mint.meridianfinance.net/\" },\n { name: \"Stability Pool\", path: \"https://mint.meridianfinance.net/#/pool\" },\n { name: \"Staking\", path: \"https://mint.meridianfinance.net/#/staking\" },\n { name: \"Risky Troves\", path: \"https://mint.meridianfinance.net/#/risky-troves\" },\n { name: \"Redemptions\", path: \"https://mint.meridianfinance.net/#/redemption\" },\n ],\n },\n {\n networkId: TARAXA_MAINNET,\n name: \"Taraxa\",\n imagePath: \"/assets/yields/taraxa.png\",\n path: \"https://mint.meridianfinance.net/\",\n subSubMenu: [\n { name: \"Trove\", path: \"https://mint.meridianfinance.net/\" },\n { name: \"Stability Pool\", path: \"https://mint.meridianfinance.net/#/pool\" },\n // { name: \"Staking\", path: \"https://mint.meridianfinance.net/#/staking\" },\n { name: \"Risky Troves\", path: \"https://mint.meridianfinance.net/#/risky-troves\" },\n { name: \"Redemptions\", path: \"https://mint.meridianfinance.net/#/redemption\" },\n ],\n },\n {\n networkId: ARTELA_MAINNET,\n name: \"Artela\",\n imagePath: \"/assets/yields/artela.png\",\n path: \"https://mint.meridianfinance.net/\",\n subSubMenu: [\n { name: \"Trove\", path: \"https://mint.meridianfinance.net/\" },\n { name: \"Stability Pool\", path: \"https://mint.meridianfinance.net/#/pool\" },\n // { name: \"Staking\", path: \"https://mint.meridianfinance.net/#/staking\" },\n { name: \"Risky Troves\", path: \"https://mint.meridianfinance.net/#/risky-troves\" },\n { name: \"Redemptions\", path: \"https://mint.meridianfinance.net/#/redemption\" },\n ],\n },\n ],\n },\n {\n icon: FaHandshake,\n title: \"Lend/Borrow\",\n path: \"https://lend.meridianfinance.net/\",\n subMenu: [\n {\n networkId: FUSE_MAINNET,\n name: \"Fuse\",\n path: \"https://lend.meridianfinance.net/\",\n imagePath: \"/assets/yields/fuse.svg\",\n },\n {\n networkId: METER_MAINNET,\n name: \"Meter\",\n path: \"https://lend.meridianfinance.net/\",\n imagePath: \"/assets/yields/meter-white.svg\",\n },\n {\n networkId: TELOS_MAINNET,\n name: \"Telos\",\n path: \"https://lend.meridianfinance.net/\",\n imagePath: \"/assets/yields/telos-evm.svg\",\n },\n {\n networkId: TAIKO_MAINNET,\n name: \"Taiko\",\n path: \"https://lend.meridianfinance.net/\",\n imagePath: \"/assets/yields/taiko.svg\",\n },\n {\n networkId: TARAXA_MAINNET,\n name: \"Taraxa\",\n path: \"https://lend.meridianfinance.net/\",\n imagePath: \"/assets/yields/taraxa.png\",\n },\n {\n networkId: ARTELA_MAINNET,\n name: \"Artela\",\n path: \"https://lend.meridianfinance.net/\",\n imagePath: \"/assets/yields/artela.png\",\n },\n ],\n },\n {\n icon: FaChartLine,\n title: \"Trade\",\n path: \"https://trade.meridianfinance.net/#/trade\",\n subMenu: [\n {\n networkId: BASE_MAINNET,\n name: \"Base\",\n path: \"https://trade.meridianfinance.net/#/trade\",\n imagePath: \"/assets/yields/base.svg\",\n },\n {\n networkId: METER_MAINNET,\n name: \"Meter\",\n path: \"https://trade.meridianfinance.net/#/trade\",\n imagePath: \"/assets/yields/meter-white.svg\",\n },\n ],\n },\n {\n icon: FaExchangeAlt,\n title: \"Swap\",\n path: \"https://swaps.meridianfinance.net\",\n subMenu: [\n {\n networkId: TELOS_MAINNET, name: \"Telos\", path: \"https://swaps.meridianfinance.net\", imagePath: \"/assets/yields/telos-evm.svg\",\n },\n ]\n },\n {\n icon: FaSeedling,\n title: \"Stake MST\",\n path: \"https://stake.meridianfinance.net/#/stakemst\",\n subMenu: [\n {\n networkId: BASE_MAINNET,\n name: \"Base\",\n path: \"https://stake.meridianfinance.net/#/stakemst\",\n imagePath: \"/assets/yields/base.svg\",\n },\n {\n networkId: FUSE_MAINNET,\n name: \"Fuse\",\n path: \"https://stake.meridianfinance.net/#/stakemst\",\n imagePath: \"/assets/yields/fuse.svg\",\n },\n {\n networkId: METER_MAINNET,\n name: \"Meter\",\n path: \"https://stake.meridianfinance.net/#/stakemst\",\n imagePath: \"/assets/yields/meter-white.svg\",\n },\n {\n networkId: TELOS_MAINNET,\n name: \"Telos\",\n path: \"https://stake.meridianfinance.net/#/stakemst\",\n imagePath: \"/assets/yields/telos-evm.svg\",\n },\n {\n networkId: TAIKO_MAINNET,\n name: \"Taiko\",\n path: \"https://stake.meridianfinance.net/#/stakemst\",\n imagePath: \"/assets/yields/taiko.svg\",\n },\n ],\n },\n { icon: FaArchway, title: \"Bridge MST\", path: \"https://bridge.meridianfinance.net/#/\" },\n { icon: FaArrowAltCircleUp, title: \"Buy MST\", path: \"https://stake.meridianfinance.net/#/tokens/\" },\n { icon: FaDollarSign, title: \"Buy USDM\", path: \"https://stake.meridianfinance.net/#/tokens/\" },\n { icon: FaRegChartBar, title: \"Analytics\", path: \"\",\n subMenu: [\n { networkId: 0, name: \"Swaps\", path: \"https://analytics.swaps.meridianfinance.net/\" },\n { networkId: 0, name: \"Yields\", path: \"https://stake.meridianfinance.net/#/yields\" },]\n },\n\n {\n icon: FaEllipsisH,\n title: \"More\",\n path: \"\",\n subMenu: [\n { networkId: 0, name: \"Tokens\", path: \"https://stake.meridianfinance.net/#/tokens/\" },\n { networkId: 0, name: \"Ecosystem\", path: \"https://stake.meridianfinance.net/#/ecosystem/\" },\n { networkId: 0, name: \"Docs\", path: \"https://docs.meridianfinance.net/\" },\n { networkId: 0, name: \"Github\", path: \"https://github.com/MeridianDollar\" },\n { networkId: 0, name: \"Governance\", path: \"https://snapshot.org/#/meridian-foundation.eth\" },\n\n {\n networkId: 0,\n name: \"Tools\",\n path: \"\",\n subSubMenu: [\n { name: \"Gas Top-up\", path: \"https://www.gas.zip/\" },\n { name: \"Base Explorer\", path: \"https://basescan.org/\" },\n { name: \"Base Bridge\", path: \"https://bridge.base.org/\" },\n { name: \"Fuse Explorer\", path: \"https://explorer.fuse.io/\" },\n { name: \"Fuse Bridge\", path: \"https://console.fuse.io/bridge\" },\n { name: \"Meter Explorer\", path: \"https://scan.meter.io/\" },\n { name: \"Meter Bridge\", path: \"https://passport.meter.io/\" },\n { name: \"Telos Explorer\", path: \"https://www.teloscan.io/\" },\n { name: \"Telos Bridge\", path: \"https://bridge.telos.net/bridge\" },\n { name: \"Taiko Explorer\", path: \"https://taikoscan.io\" },\n { name: \"Taiko Bridge\", path: \"https://bridge.taiko.xyz\" },\n ],\n },\n ],\n },\n];\n\nexport default menuConfig;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport \"./Sidebar.css\"; // Import CSS for styling\nimport menuConfig, { MenuItemConfig, NetworkType, NetworksTypes, SubMenuItemConfig } from \"./SidebarConfig\";\nimport { switchNetwork } from \"lib/wallets\";\nimport { getChainName } from \"config/chains\";\nimport { FaBars } from \"react-icons/fa\";\n\ninterface SidebarProps {\n chainId: number;\n}\n\nconst Sidebar: React.FC = (props) => {\n const { chainId } = props;\n const [isExpanded, setIsExpanded] = useState(false);\n const [activeSubMenu, setActiveSubMenu] = useState(null);\n const [activeSubSubMenu, setActiveSubSubMenu] = useState(null);\n const [sidebarVisible, setSidebarVisible] = useState(false);\n const [isLargeScreen, setIsLargeScreen] = useState(window.innerWidth > 600);\n const history = useHistory();\n const overlay = useRef(null);\n\n useEffect(() => {\n function handleResize() {\n setIsLargeScreen(window.innerWidth > 768);\n }\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, []);\n\n useEffect(() => {\n const handleOutsideClick = (event: MouseEvent) => {\n if (overlay.current && !overlay.current.contains(event.target as Node)) {\n setSidebarVisible(false);\n }\n };\n if (sidebarVisible) {\n document.addEventListener(\"click\", handleOutsideClick);\n }\n return () => {\n document.removeEventListener(\"click\", handleOutsideClick);\n };\n }, [sidebarVisible]);\n\n const sidebarVisibility = isLargeScreen || sidebarVisible;\n\n useEffect(() => {\n setIsExpanded(sidebarVisible);\n }, [sidebarVisible]);\n\n const toggleExpandOpen = () => {\n setIsExpanded(true);\n };\n const toggleExpandClose = () => {\n setIsExpanded(false);\n };\n\n useEffect(() => {\n // Function to determine initial expand state based on screen size\n const handleResize = () => {\n const isSmallScreen = window.innerWidth < 768; // Define \"small screen\" as less than 768px\n setIsExpanded(isSmallScreen);\n };\n handleResize();\n }, []);\n\n const handleItemClick = async (chainId: number, targetChainId: number, path: string, isInAppCall: boolean) => {\n if (chainId != targetChainId && targetChainId != 0) {\n // change networks if required\n let newPath = path;\n if (isInAppCall) {\n const hashPath = window.location.hash;\n const basePath = hashPath.split(\"/\")[0];\n newPath = `#${basePath.replace(/^#/, \"\")}${path.slice(1)}`;\n }\n try {\n const newChainName = await switchNetwork(targetChainId, true);\n if (newChainName === getChainName(targetChainId)) {\n window.location.href = newPath;\n }\n } catch (error) {\n console.error(\"Error switching network:\", error);\n }\n } else {\n if (targetChainId === 0) {\n window.open(path, \"_blank\");\n } else {\n if (isInAppCall) {\n history.push(path);\n } else {\n window.location.href = path;\n }\n }\n }\n };\n\n const handleMenuItemClick = async (\n isExpanded: boolean,\n chainId: number,\n targetChainId: number,\n item: MenuItemConfig\n ) => {\n const mediaQuery = window.matchMedia(\"(max-width: 768px)\");\n if (mediaQuery.matches && (item.subMenu || !isExpanded)) {\n // on small screen open submenus if available\n toggleExpandOpen();\n setActiveSubMenu(activeSubMenu === item.title ? null : item.title);\n } else {\n handleItemClick(chainId, targetChainId, item.path, false);\n }\n };\n\n const handleArrowClick = (item: MenuItemConfig) => {\n if (item.subMenu) {\n setActiveSubMenu(activeSubMenu === item.title ? null : item.title);\n }\n };\n\n const handleSubArrowClick = (subItem: SubMenuItemConfig) => {\n if (subItem.subSubMenu) {\n setActiveSubSubMenu(activeSubSubMenu === subItem.name ? null : subItem.name);\n }\n };\n\n return (\n <>\n
setSidebarVisible(true)}>\n \n
\n
\n \n
\n {menuConfig.map((item, index) => (\n
\n
\n
\n handleMenuItemClick(isExpanded, chainId, chainId, item)}\n />\n handleMenuItemClick(isExpanded, chainId, chainId, item)}\n >\n {item.title}\n \n {isExpanded && item.subMenu && (\n handleArrowClick(item)}>\n {activeSubMenu === item.title ? \"▼\" : \"▶\"}\n \n )}\n
\n
\n {isExpanded && activeSubMenu === item.title && item.subMenu && (\n
\n {item.subMenu.map((subItem, subIndex) => (\n
\n
\n handleItemClick(chainId, subItem.networkId, subItem.path, false)}\n >\n {NetworksTypes.includes(subItem.name as NetworkType) && (\n \"more\n )}{\" \"}\n {subItem.name}\n \n {subItem.subSubMenu && (\n handleSubArrowClick(subItem)}>\n {activeSubSubMenu === subItem.name ? \"▼\" : \"▶\"}\n \n )}\n
\n {activeSubSubMenu === subItem.name && subItem.subSubMenu && (\n
\n {subItem.subSubMenu.map((subSubItem, subSubIndex) => (\n handleItemClick(chainId, subItem.networkId, subSubItem.path, false)}\n >\n {subSubItem.name}\n \n ))}\n
\n )}\n
\n ))}\n
\n )}\n
\n ))}\n
\n
\n \n \n );\n};\n\nexport default Sidebar;\n","import { useLocalStorage } from \"react-use\";\nimport { useCallback } from \"react\";\n\nexport function useLocalStorageByChainId(\n chainId: number,\n key: string,\n defaultValue: T\n): [T | undefined, (value: T) => void] {\n const [internalValue, setInternalValue] = useLocalStorage(key, {});\n\n const setValue = useCallback(\n (value) => {\n setInternalValue((internalValue) => {\n if (typeof value === \"function\") {\n value = value(internalValue?.[chainId] || defaultValue);\n }\n\n const newInternalValue = {\n ...internalValue,\n [chainId]: value,\n };\n return newInternalValue;\n });\n },\n [chainId, setInternalValue, defaultValue]\n );\n\n let value;\n\n if (internalValue && chainId in internalValue) {\n value = internalValue[chainId];\n } else {\n value = defaultValue;\n }\n\n return [value, setValue];\n}\n\nexport function useLocalStorageSerializeKey(\n key: string,\n value: T,\n opts?: {\n raw: boolean;\n serializer: (val: T) => string;\n deserializer: (value: string) => T;\n }\n) {\n key = JSON.stringify(key);\n\n return useLocalStorage(key, value, opts);\n}\n","import React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { SWRConfig } from \"swr\";\nimport { ethers } from \"ethers\";\nimport { Web3ReactProvider, useWeb3React } from \"@web3-react/core\";\nimport { Web3Provider } from \"@ethersproject/providers\";\nimport useScrollToTop from \"lib/useScrollToTop\";\n\nimport { Switch, Route, HashRouter as Router, Redirect, useLocation, useHistory } from \"react-router-dom\";\n\nimport {\n DEFAULT_SLIPPAGE_AMOUNT,\n BASIS_POINTS_DIVISOR,\n getAppBaseUrl,\n isHomeSite,\n isMobileDevice,\n REFERRAL_CODE_QUERY_PARAM,\n} from \"lib/legacy\";\n\nimport Home from \"pages/Home/Home\";\nimport StakeMST from \"pages/StakeMST/StakeMstApp\"; \nimport Yields from \"pages/Yields/Yields\"; \nimport TradePage from \"pages/TokenSwaps/TradePage\"; \nimport Ecosystem from \"pages/Ecosystem/Ecosystem\"; \nimport { cssTransition, ToastContainer } from \"react-toastify\";\nimport \"react-toastify/dist/ReactToastify.css\";\nimport Modal from \"components/Modal/Modal\";\nimport Checkbox from \"components/Checkbox/Checkbox\";\n\nimport \"styles/Shared.css\";\nimport \"styles/Font.css\";\nimport \"./App.scss\";\nimport \"styles/Input.css\";\n\nimport metamaskImg from \"img/metamask.png\";\nimport coinbaseImg from \"img/coinbaseWallet.png\";\nimport walletConnectImg from \"img/walletconnect-circle-blue.svg\";\nimport useEventToast from \"components/EventToast/useEventToast\";\nimport EventToastContainer from \"components/EventToast/EventToastContainer\";\nimport SEO from \"components/Common/SEO\";\nimport useRouteQuery from \"lib/useRouteQuery\";\n\nimport { getContract } from \"config/contracts\";\nimport PageNotFound from \"pages/PageNotFound/PageNotFound\";\n// import ReferralTerms from \"pages/ReferralTerms/ReferralTerms\";\nimport TermsAndConditions from \"pages/TermsAndConditions/TermsAndConditions\";\nimport { useLocalStorage } from \"react-use\";\nimport { RedirectPopupModal } from \"components/ModalViews/RedirectModal\";\nimport { REDIRECT_POPUP_TIMESTAMP_KEY } from \"config/localStorage\";\n// import Jobs from \"pages/Jobs/Jobs\";\n\nimport { i18n } from \"@lingui/core\";\nimport { I18nProvider } from \"@lingui/react\";\nimport { Trans, t } from \"@lingui/macro\";\nimport { defaultLocale, dynamicActivate } from \"lib/i18n\";\nimport { Header } from \"components/Header/Header\";\nimport Sidebar from \"components/Sidebar/Sidebar\";\nimport { TELOS_TESTNET, TELOS_MAINNET, getAlchemyWsUrl, getExplorerUrl } from \"config/chains\";\nimport { useLocalStorageSerializeKey } from \"lib/localStorage\";\nimport { helperToast } from \"lib/helperToast\";\nimport {\n CURRENT_PROVIDER_LOCALSTORAGE_KEY,\n DISABLE_ORDER_VALIDATION_KEY,\n IS_PNL_IN_LEVERAGE_KEY,\n LANGUAGE_LOCALSTORAGE_KEY,\n REFERRAL_CODE_KEY,\n SHOULD_EAGER_CONNECT_LOCALSTORAGE_KEY,\n SHOULD_SHOW_POSITION_LINES_KEY,\n SHOW_PNL_AFTER_FEES_KEY,\n SLIPPAGE_BPS_KEY,\n} from \"config/localStorage\";\nimport {\n activateInjectedProvider,\n clearWalletConnectData,\n clearWalletLinkData,\n getInjectedHandler,\n getWalletConnectHandler,\n hasCoinBaseWalletExtension,\n hasMetaMaskWalletExtension,\n useEagerConnect,\n useHandleUnsupportedNetwork,\n useInactiveListener,\n} from \"lib/wallets\";\nimport { useChainId } from \"lib/chains\";\nimport ExternalLink from \"components/ExternalLink/ExternalLink\";\nimport { isDevelopment } from \"config/env\";\n\nif (\"ethereum\" in window) {\n window.ethereum.autoRefreshOnNetworkChange = false;\n}\n\nfunction getLibrary(provider) {\n const library = new Web3Provider(provider);\n return library;\n}\n\nconst Zoom = cssTransition({\n enter: \"zoomIn\",\n exit: \"zoomOut\",\n appendPosition: false,\n collapse: true,\n collapseDuration: 200,\n duration: 200,\n});\n\nconst arbWsProvider = new ethers.providers.WebSocketProvider(getAlchemyWsUrl());\n\nconst tlosTestnetWsProvider = new ethers.providers.JsonRpcProvider(\"https://testnet.telos.net/evm\");\ntlosTestnetWsProvider.pollingInterval = 2000;\n\nconst tlosMainnetWsProvider = new ethers.providers.JsonRpcProvider(\"https://mainnet.telos.net/evm\");\ntlosMainnetWsProvider.pollingInterval = 2000;\n\nfunction getWsProvider(active, chainId) {\n if (!active) {\n return;\n }\n\n if (chainId === TELOS_TESTNET) {\n return tlosTestnetWsProvider;\n }\n\n if (chainId === TELOS_MAINNET) {\n return tlosMainnetWsProvider;\n }\n}\n\nfunction FullApp() {\n const isHome = isHomeSite();\n const exchangeRef = useRef();\n const { connector, library, deactivate, activate, active } = useWeb3React();\n const { chainId } = useChainId();\n const location = useLocation();\n const history = useHistory();\n useEventToast();\n const [activatingConnector, setActivatingConnector] = useState();\n useEffect(() => {\n if (activatingConnector && activatingConnector === connector) {\n setActivatingConnector(undefined);\n }\n }, [activatingConnector, connector, chainId]);\n const triedEager = useEagerConnect(setActivatingConnector);\n useInactiveListener(!triedEager || !!activatingConnector);\n\n useHandleUnsupportedNetwork();\n\n const query = useRouteQuery();\n\n\n const disconnectAccount = useCallback(() => {\n // only works with WalletConnect\n clearWalletConnectData();\n // force clear localStorage connection for MM/CB Wallet (Brave legacy)\n clearWalletLinkData();\n deactivate();\n }, [deactivate]);\n\n const disconnectAccountAndCloseSettings = () => {\n disconnectAccount();\n localStorage.removeItem(SHOULD_EAGER_CONNECT_LOCALSTORAGE_KEY);\n localStorage.removeItem(CURRENT_PROVIDER_LOCALSTORAGE_KEY);\n setIsSettingsVisible(false);\n };\n\n const connectInjectedWallet = getInjectedHandler(activate, deactivate);\n const activateWalletConnect = () => {\n getWalletConnectHandler(activate, deactivate, setActivatingConnector)();\n };\n\n const userOnMobileDevice = \"navigator\" in window && isMobileDevice(window.navigator);\n\n const activateMetaMask = () => {\n if (!hasMetaMaskWalletExtension()) {\n helperToast.error(\n
\n MetaMask not detected.\n
\n
\n {userOnMobileDevice ? (\n \n Install MetaMask, and use Meridian with its built-in\n browser.\n \n ) : (\n \n Install MetaMask to start using Meridian.\n \n )}\n
\n );\n return false;\n }\n attemptActivateWallet(\"MetaMask\");\n };\n const activateCoinBase = () => {\n if (!hasCoinBaseWalletExtension()) {\n helperToast.error(\n
\n Coinbase Wallet not detected.\n
\n
\n {userOnMobileDevice ? (\n \n Install Coinbase Wallet, and use Meridian\n with its built-in browser.\n \n ) : (\n \n Install Coinbase Wallet to start using\n Meridian.\n \n )}\n
\n );\n return false;\n }\n attemptActivateWallet(\"CoinBase\");\n };\n\n const attemptActivateWallet = (providerName) => {\n localStorage.setItem(SHOULD_EAGER_CONNECT_LOCALSTORAGE_KEY, true);\n localStorage.setItem(CURRENT_PROVIDER_LOCALSTORAGE_KEY, providerName);\n activateInjectedProvider(providerName);\n connectInjectedWallet();\n };\n\n const [walletModalVisible, setWalletModalVisible] = useState(false);\n const [redirectModalVisible, setRedirectModalVisible] = useState(false);\n const [shouldHideRedirectModal, setShouldHideRedirectModal] = useState(false); // TJ\n // const shouldHideRedirectModal = useState(True); // TJ\n\n const [redirectPopupTimestamp, setRedirectPopupTimestamp] = useLocalStorage(REDIRECT_POPUP_TIMESTAMP_KEY);\n const [selectedToPage, setSelectedToPage] = useState(\"\");\n const connectWallet = () => setWalletModalVisible(true);\n\n const [isSettingsVisible, setIsSettingsVisible] = useState(false);\n const [savedSlippageAmount, setSavedSlippageAmount] = useLocalStorageSerializeKey(\n [chainId, SLIPPAGE_BPS_KEY],\n DEFAULT_SLIPPAGE_AMOUNT\n );\n const [slippageAmount, setSlippageAmount] = useState(0);\n const [isPnlInLeverage, setIsPnlInLeverage] = useState(false);\n const [shouldDisableValidationForTesting, setShouldDisableValidationForTesting] = useState(false);\n const [showPnlAfterFees, setShowPnlAfterFees] = useState(false);\n\n const [savedIsPnlInLeverage, setSavedIsPnlInLeverage] = useLocalStorageSerializeKey(\n [chainId, IS_PNL_IN_LEVERAGE_KEY],\n false\n );\n\n const [savedShowPnlAfterFees, setSavedShowPnlAfterFees] = useLocalStorageSerializeKey(\n [chainId, SHOW_PNL_AFTER_FEES_KEY],\n false\n );\n const [savedShouldDisableValidationForTesting, setSavedShouldDisableValidationForTesting] =\n useLocalStorageSerializeKey([chainId, DISABLE_ORDER_VALIDATION_KEY], false);\n\n const [savedShouldShowPositionLines, setSavedShouldShowPositionLines] = useLocalStorageSerializeKey(\n [chainId, SHOULD_SHOW_POSITION_LINES_KEY],\n false\n );\n\n const openSettings = () => {\n const slippage = parseInt(savedSlippageAmount);\n setSlippageAmount((slippage / BASIS_POINTS_DIVISOR) * 100);\n setIsPnlInLeverage(savedIsPnlInLeverage);\n setShowPnlAfterFees(savedShowPnlAfterFees);\n setShouldDisableValidationForTesting(savedShouldDisableValidationForTesting);\n setIsSettingsVisible(true);\n };\n\n const saveAndCloseSettings = () => {\n const slippage = parseFloat(slippageAmount);\n if (isNaN(slippage)) {\n helperToast.error(t`Invalid slippage value`);\n return;\n }\n if (slippage > 5) {\n helperToast.error(t`Slippage should be less than 5%`);\n return;\n }\n\n const basisPoints = (slippage * BASIS_POINTS_DIVISOR) / 100;\n if (parseInt(basisPoints) !== parseFloat(basisPoints)) {\n helperToast.error(t`Max slippage precision is 0.01%`);\n return;\n }\n\n setSavedIsPnlInLeverage(isPnlInLeverage);\n setSavedShowPnlAfterFees(showPnlAfterFees);\n setSavedShouldDisableValidationForTesting(shouldDisableValidationForTesting);\n setSavedSlippageAmount(basisPoints);\n setIsSettingsVisible(false);\n };\n\n const localStorageCode = window.localStorage.getItem(REFERRAL_CODE_KEY);\n const baseUrl = getAppBaseUrl();\n let appRedirectUrl = baseUrl + selectedToPage;\n\n\n const [pendingTxns, setPendingTxns] = useState([]);\n\n const showRedirectModal = (to) => {\n setRedirectModalVisible(true);\n setSelectedToPage(to);\n };\n\n useEffect(() => {\n const checkPendingTxns = async () => {\n const updatedPendingTxns = [];\n for (let i = 0; i < pendingTxns.length; i++) {\n const pendingTxn = pendingTxns[i];\n const receipt = await library.getTransactionReceipt(pendingTxn.hash);\n if (receipt) {\n if (receipt.status === 0) {\n const txUrl = getExplorerUrl(chainId) + \"tx/\" + pendingTxn.hash;\n helperToast.error(\n
\n \n Txn failed. View\n \n
\n
\n );\n }\n if (receipt.status === 1 && pendingTxn.message) {\n const txUrl = getExplorerUrl(chainId) + \"tx/\" + pendingTxn.hash;\n helperToast.success(\n
\n {pendingTxn.message}{\" \"}\n \n View\n \n
\n
\n );\n }\n continue;\n }\n updatedPendingTxns.push(pendingTxn);\n }\n\n if (updatedPendingTxns.length !== pendingTxns.length) {\n setPendingTxns(updatedPendingTxns);\n }\n };\n\n const interval = setInterval(() => {\n checkPendingTxns();\n }, 2 * 1000);\n return () => clearInterval(interval);\n }, [library, pendingTxns, chainId]);\n\n \n return (\n <>\n
\n
\n \n \n {isHome && (\n \n \n \n \n \n \n \n \n \n \n \n \n )}\n {!isHome && (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n \n \n \n \n )}\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n Allowed Slippage\n
\n
\n setSlippageAmount(e.target.value)}\n />\n
%
\n
\n
\n
\n \n Display PnL after fees\n \n
\n
\n \n Include PnL in leverage display\n \n
\n {isDevelopment() && (\n
\n \n Disable order validations\n \n
\n )}\n\n \n \n \n );\n}\n\nfunction App() {\n useScrollToTop();\n useEffect(() => {\n const defaultLanguage = localStorage.getItem(LANGUAGE_LOCALSTORAGE_KEY) || defaultLocale;\n dynamicActivate(defaultLanguage);\n }, []);\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","import React from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport default function useRouteQuery() {\n const { search } = useLocation();\n return React.useMemo(() => new URLSearchParams(search), [search]);\n}\n","import { useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nexport default function useScrollToTop() {\n const history = useHistory();\n useEffect(() => {\n const unlisten = history.listen(() => {\n window.scrollTo(0, 0);\n });\n return () => {\n unlisten();\n };\n }, [history]);\n}\n","const reportWebVitals = (onPerfEntry) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import(\"web-vitals\").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"regenerator-runtime/runtime\";\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport App from \"./App/App\";\nimport reportWebVitals from \"./reportWebVitals\";\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.info))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}