{"version":3,"sources":["components/icons/BackIcon.tsx","components/icons/Jazzicon.tsx","components/icons/RightArrow.tsx","components/icons/HelpIcon.tsx","components/icons/SettingsIcon.tsx","constants/abis.ts","constants/chainId.ts","constants/addresses.ts","model/Currency.ts","model/CurrencyValue.ts","helpers/formatValueString.ts","helpers/sqrtBigNumber.ts","helpers/toPercent.ts","helpers/isSufficientBalance.ts","helpers/formatRemainingTime.ts","model/tokenPrice/Fixed.ts","model/tokenPrice/Fraction.ts","model/tokenPrice/TokenPrice.ts","constants/currencies.ts","constants/liquidity.ts","constants/styles.ts","constants/math.ts","providers/blockNumber/context.ts","providers/blockNumber/reducer.ts","providers/ethers/ethersContext.ts","hooks/useEthers.ts","hooks/useTransactions.ts","providers/transactions/context.ts","providers/chainState/context.ts","hooks/useChainCalls.ts","hooks/useEthBalance.ts","hooks/useNumberInput.ts","hooks/useNaturalNumberInput.ts","hooks/useLocalStorage.ts","hooks/useTokenBalance.ts","hooks/useUrusBalance.ts","hooks/useLPTokenBalance.ts","hooks/useContracts.ts","hooks/useLiquidityDepositTotal.ts","hooks/useReserves.ts","hooks/useTokenPrice.ts","hooks/useStakesTotal.ts","hooks/useTokenSupply.ts","hooks/useLPTokenSupply.ts","hooks/useCurrentEpoch.ts","hooks/useInterestPercentage.ts","hooks/useLPAmountMinted.ts","hooks/useClaimableLiquidityReward.ts","hooks/useFirstDayOfEpoch.ts","hooks/usePoolReward.ts","hooks/useUsersProviderStakeExists.ts","hooks/usePoolRate.ts","providers/blockNumber/provider.tsx","hooks/useDebounce.ts","providers/chainState/chainStateReducer.ts","providers/chainState/callsReducer.ts","providers/chainState/multicall.ts","providers/chainState/provider.tsx","hooks/useDebouncePair.ts","constants/provider.ts","providers/ethers/ethersHelpers.ts","providers/ethers/ethersProvider.tsx","providers/GlobalStyle.tsx","providers/transactions/model.ts","providers/transactions/reducer.ts","providers/transactions/provider.tsx","providers/Providers.tsx","components/page/BlockNumber.tsx","components/common/Row.tsx","components/common/Tooltip.tsx","components/common/modal/ModalOverlay.tsx","components/common/modal/ModalTitle.tsx","components/common/modal/Modal.tsx","components/top/Spinner.tsx","components/top/HistoryModal.tsx","components/top/Account.tsx","utils.ts","components/common/buttons/ButtonPrimary.tsx","components/top/NetworkSelector.tsx","components/top/Connection.tsx","assets/logo.svg","components/top/Logo.tsx","components/top/Navigation.tsx","components/top/TopBar.tsx","components/common/buttons/ButtonTertiary.tsx","infrastructure/TransactionStatus.tsx","infrastructure/CurrentTransaction.ts","infrastructure/approve.ts","infrastructure/stake.ts","infrastructure/deposit.ts","infrastructure/withdraw.ts","infrastructure/claimLiquidityReward.ts","components/common/Button.tsx","components/common/offsetValue.ts","components/common/Section.tsx","components/common/CustomSpinnerInput.tsx","components/common/ButtonWrapper.tsx","components/common/WrappedConnectButton.tsx","components/common/Warning.tsx","components/common/FailMessage.tsx","components/common/Badge.tsx","components/common/text/TextRow.tsx","components/sidebar/ClaimAndStakeLiquidityRewardModal.tsx","constants/maxStake.ts","components/sidebar/ClaimLiquidityRewardModal.tsx","assets/icons/urus-coin@1x.png","assets/icons/urus-coin@2x.png","assets/icons/ether-logo@1x.png","assets/icons/ether-logo@2x.png","assets/icons/bnb-logo@1x.png","assets/icons/bnb-logo@2x.png","components/common/Symbols.tsx","components/common/form/Input.tsx","hooks/useSecondsToEpochEnd.ts","components/sidebar/PenaltyWarning.tsx","components/sidebar/WithdrawModal.tsx","components/sidebar/ConnectedBar.tsx","hooks/useMigrationContractBalance.ts","components/sidebar/SideBar.tsx","components/page/Wrapper.tsx","components/page/Page.tsx","components/page/Title.tsx","components/page/Version.tsx","assets/icons/graph.svg","assets/icons/star.svg","assets/icons/wallet.svg","components/page/HomeWidgets.tsx","components/common/text/PageTitle.tsx","components/common/text/PageSubtitle.tsx","components/common/TransactionInfo.tsx","helpers/shortenHash.ts","hooks/useTokenAllowance.ts","pages/LiquidityMining/PoolStats.tsx","pages/LiquidityMining/DepositModal.tsx","hooks/useLPAllowance.ts","pages/LiquidityMining/DepositTokens.tsx","hooks/useUrusAllowance.ts","components/icons/CloseIcon.tsx","assets/icons/ether@1x.png","assets/icons/ether@2x.png","assets/icons/bnb@1x.png","assets/icons/bnb@2x.png","infrastructure/addLiquidity.ts","hooks/useBlockTimestamp.ts","pages/LiquidityMining/ConfirmationModal.tsx","hooks/useEstimatedPoolShare.ts","pages/LiquidityMining/helpers.ts","pages/LiquidityMining/liquidityReducer.tsx","pages/LiquidityMining/AddLiquidityModal.tsx","hooks/useShareOfPool.ts","pages/LiquidityMining/AddLiquidityTokens.tsx","pages/LiquidityMining/LiquidityMining.tsx","pages/Staking/helpers.ts","pages/Staking/StakeModal.tsx","assets/icons/triangle.svg","hooks/useUsersStakes.ts","hooks/useOutsideClick.ts","model/Stake.ts","hooks/useStakeState.ts","hooks/useToggler.ts","hooks/useAmountForStakeCancel.ts","infrastructure/cancelStake.ts","pages/Staking/CancelStakeModal.tsx","pages/Staking/AmountOfRewards.tsx","hooks/useRewardAmount.ts","pages/Staking/RewardAmount.tsx","infrastructure/claimStake.ts","pages/Staking/ClaimStakeModal.tsx","pages/Staking/StakingTableRow.tsx","pages/Staking/StakingTable.tsx","pages/Staking/Staking.tsx","pages/HomePage/HomePage.tsx","App.tsx","index.tsx"],"names":["BackIcon","SvgIcon","viewBox","fill","fillRule","clipRule","d","id","maskUnits","x","y","width","height","mask","transform","styled","svg","JazzIcon","address","size","ref","useRef","element","useMemo","jazzicon","parseInt","slice","getSeed","useEffect","current","innerHTML","appendChild","style","HelpIcon","stroke","strokeWidth","strokeLinecap","strokeLinejoin","SettingsIcon","xmlns","cx","cy","r","rx","ry","ChainId","MULTICALL_ABI","Mainnet","Goerli","Binance","CHAIN_NAMES","CHAIN_METADATA","mainnet","chainId","chainName","chainFullName","binance","CHAIN_ID_TO_CHAIN_NAME_MAPPING","CHAIN_NAME_TO_CHAIN_ID_MAPPING","DEFAULT_CHAIN_ID","MULTICALL_ADDRESS","Hardhat","STAKING_MASTER_ADDRESS","PROVIDER_ADDRESS","UNISWAPV2ROUTER02","PROVIDER_MIGRATION_ADDRESS","Currency","name","symbol","decimals","Token","CurrencyValue","currency","value","result","formatUnits","this","endsWith","substring","length","formatCurrency","currencyValue","Error","lt","gt","eq","sub","NUMBER_REGEX","test","split","integer","decimal","padEnd","BigNumber","from","concat","stringified","toString","decimalPart","padStart","replace","stripEndZeroes","integerPart","commaCount","resultValue","i","splice","join","applyCommaSeparator","includes","digitsFound","separatorFound","leadingZero","cutToSignificantDigits","formatValueString","precision","decimalPoint","indexOf","ONE","TWO","toPercent","utils","isSufficientBalance","balance","undefined","gte","yearSeconds","daySeconds","formatRemainingTime","seconds","years","Math","floor","days","hours","minutes","time","Fixed","_value","_decimals","isZero","FixedNumber","fromValue","scale","divisor","pow","div","fractional","mod","suffix","toNumber","fixed","multiplier","mul","lhs","rhs","promoteDecimals","Fraction","_numerator","_denominator","numerator","denominator","toFixed","format","alignDecimals","n","numeratorDecimals","denominatorDecimals","numeratorAsFixed","denominatorAsFixed","fromFixed","TokenPrice","fraction","parseFloat","reverse","nominator","reserve0","reserve1","WRAPPED_NATIVE_CURRENCY","createFrom","Ether","BNB","GoerliEther","NATIVE_CURRENCY","createAuroxTokenInstance","network","Urus","GoerliUrus","HardhatUrus","BinanceUrus","URUS_CONTRACT","createWrappedEthTokenInstance","WrappedEth","GoerliWrappedEth","HardhatWrappedEth","BinanceWrappedEth","createLPTokenInstance","LPToken","GoerliLPToken","HardhatLPToken","BinanceLPToken","URUS_LP_TOKEN","LIQUIDITY_INFO","token","exchange","Colors","Fonts","DECIMAL_BASE","BlockNumberContext","createContext","useBlockNumber","useContext","blockNumberReducer","state","action","blockNumber","EthersContext","connectWallet","a","disconnectWallet","account","changeChain","ethersProvider","error","useEthers","useTransactions","TransactionsContext","addTransaction","transactions","filter","ChainStateContext","addCalls","removeCalls","useChainCall","call","calls","JSON","stringify","map","data","useChainCalls","multicallInterface","Interface","useEthBalance","encodeFunctionData","useNumberInput","useState","setValue","set","truncateDecimals","stripLeadingZeroes","leadingZeroes","match","startsWith","trimmed","NORMAL_REGEX","useNaturalNumberInput","maxValue","Number","getItem","key","item","window","localStorage","parse","e","useLocalStorage","toStore","setItem","removeItem","balanceInterface","ierc20","useTokenBalance","overrideAccountAddress","useUrusBalance","useLPTokenBalance","useContracts","signer","getSigner","auroxToken","Contract","AuroxToken","abi","lpToken","erc20abi","stakingMaster","StakingMaster","provider","Provider","uniswapRouter","IUniswapV2Router02","providerMigration","providerMigrationABI","investmentInterface","useLiquidityDepositTotal","reservesInterface","functionName","useReserves","decodeFunctionResult","useTokenPrice","price","setPrice","reserves","fromReserves","stakesInterface","tokenInterface","useLPTokenSupply","useTokenSupply","providerInterface","useCurrentEpoch","useInterestPercentage","duration","fromProvider","epoch","MIN_LIQUIDITY","useLPAmountMinted","amountUrus","amountEth","totalSupply","addressUrus","addressWeth","amounts","parseEther","lpMinted","z","add","isNegative","sqrt","amount0","amount1","lte","BlockNumberProvider","children","useReducer","dispatch","update","on","off","debouncedState","delay","debouncedValue","setDebouncedValue","handler","setTimeout","clearTimeout","useDebounce","chainStateReducer","type","callsReducer","finalState","index","findIndex","_","requests","contract","aggregate","blockTag","results","stateForAddress","ChainStateProvider","dispatchCalls","dispatchState","useCallback","first","second","useDebouncePair","debouncedCalls","uniqueCalls","unique","request","find","push","getUnique","multicall","then","catch","console","PROVIDER_OPTIONS","injected","display","description","package","walletconnect","WalletConnectProvider","options","infuraId","PROVIDER_OPTIONS_BY_CHAIN","pollingInterval","rpc","entries","round","random","sampleValue","cached","switchChain","isMetaMask","method","params","code","nativeCurrency","rpcUrls","blockExplorerUrls","EthersProvider","web3Provider","setWeb3Provider","setEthersProvider","setAccount","cachedNetwork","getWeb3Network","setChainId","setError","web3Modal","modal","document","getElementById","remove","cacheProvider","disableInjectedProvider","providerOptions","lightboxOpacity","Web3Modal","setAttribute","getWeb3Modal","getAccounts","accounts","bridge","send","handleAccountsChanged","addresses","handleChainChanged","chainHexString","_chainId","ethers","providers","Web3Provider","UnsupportedChainIdError","isWalletLink","removeAllListeners","setMaxListeners","Infinity","addListener","removeListener","connect","_web3Provider","_ethersProvider","getNetwork","newChainId","GlobalStyle","createGlobalStyle","DEFAULT_STORED_TRANSACTIONS","transactionReducer","hash","submittedAt","tx","lastCheckedBlockNumber","receipt","TransactionProvider","storage","setStorage","transaction","Date","now","blocksSinceCheck","minutesPending","shouldCheck","forEach","getTransactionReceipt","Providers","props","BlockNumber","chainState","fetchedBlockNumber","isDifferent","toDisplay","Text","Spinner","Dot","Wrapper","span","Row","Tooltip","tooltip","TooltipWrapper","TooltipBody","ModalOverlay","onClick","Overlay","target","currentTarget","ModalTitle","h2","Modal","isVisible","onClose","title","hint","listenKeyboard","event","addEventListener","removeEventListener","ModalWrapper","ModalBody","BackButton","ModalContent","Hint","button","HistoryModal","reversed","List","TransactionItem","getEtherscanLink","ListItem","href","rel","ol","li","Account","ethBalance","open","setOpen","pendingCount","Container","BalanceArea","formatWithSymbol","AccountArea","Address","BigSpinner","ButtonPrimary","isFullWidth","isLoading","disabled","className","Button","NetworkSelector","handleChange","Select","onChange","defaultValue","chainMetadata","select","Connection","NetworkError","Disconnect","Connect","Logo","Image","src","logo","img","Navigation","NavList","NavListItem","StyledLink","to","ul","NavLink","TopBar","Bar","header","TransactionStatus","CurrentTransaction","ButtonTertiary","approve","setStatus","setCurrentTransaction","setTransaction","Mining","Approve","wait","status","Success","Fail","stake","amount","months","StakeUrus","createStaking","deposit","Deposit","addLiquidity","withdraw","removeLiquidity","claimLiquidityReward","estimateGas","claimRewards","gasEstimate","gasLimit","claimAndStakeLiquidityReward","active","offsetValue","numberValue","offset","Section","SectionLabel","p","SectionLabelDanger","SectionRow","CustomSpinnerInput","SpinnerlessInput","min","max","input","ButtonWrapper","WrappedConnectButton","WarningSection","FailSection","WarningText","FailMessage","Badge","BadgeSmall","BadgeMax","TextRow","label","Label","Value","ClaimAndStakeLiquidityRewardModal","claimableReward","New","stakeTime","setStakeTime","isMined","isMining","apy","hasProviderStake","useUsersProviderStakeExists","InfoBox","MonthInput","MonthLabel","HintText","StyledBadge","InfoLink","ClaimButton","ClaimLiquidityRewardModal","SymbolsPair","SymbolsWrapper","URUSLogo1x","alt","srcSet","URUSLogo2x","BNBLogo1x","BNBLogo2x","ETHLogo1x","ETHLogo2x","BNBSymbol","ETHSymbol","URUSSymbol","NativeSymbol","Input","useSecondsToEpochEnd","currentEpoch","PenaltyWarning","WithdrawModal","setAmount","totalDeposited","isFirstDayOfEpoch","useFirstDayOfEpoch","TotalDeposited","Margin","ConnectedBar","UrusBalance","EtherBalance","LPTokenBalance","stakedTotal","useStakesTotal","depositedTotal","claimableLiquidityReward","rewardTotal","useClaimableLiquidityReward","interface","useMigrationContractBalance","claimModalOpen","setClaimModalOpen","claimAndStakeModalOpen","setClaimAndStakeModalOpen","isWithdrawModalVisible","setIsWithdrawModalVisible","DetailsBar","UrusAmountWrapper","CurrencyDisplay","UrusAmount","LabelUppercase","Amount","Block","WithdrawButton","ButtonsRow","SideBar","Title","h1","StyledWrapper","Page","PageLayout","HomeWidgets","WidgetsCascade","Widget","WidgetHeader","graphIcon","WidgetTitle","WidgetRow","WidgetDescription","WidgetText","walletIcon","starIcon","Link","PageTitle","PageSubtitle","blockExplorer","url","TransactionInfo","setHint","InfoSection","allowanceInterface","useTokenAllowance","spender","PoolStats","poolRate","usePoolRate","DepositModal","lpTokenBalance","currentTransaction","allowance","useLPAllowance","setCurrencyValue","fromString","DepositData","DepositButton","DepositTokens","isModalOpen","setIsModalOpen","View","BoxHeader","useUrusAllowance","CloseIcon","ethAmount","urusAmount","deadline","amountTokenDesired","amountTokenDesiredWei","ethAmountWei","addLiquidityETH","ConfirmationModal","ethPerUrus","urusPerEth","contracts","blockTimestamp","currentTime","setCurrentTime","getBlock","block","timestamp","useBlockTimestamp","transactionStatus","setTransactionStatus","estimatedShare","mintedEstimate","useEstimatedPoolShare","ModalTop","CloseButton","AmountWrapper","URUS1xIcon","URUS2xIcon","BNB1xIcon","BNB2xIcon","ETH1xIcon","ETH2xIcon","AmountLabel","ModalBottom","ValueRow","StyledTextRow","ConfirmButton","calculateValue","priceString","formatEther","calculateEthValue","calculateUrusValue","displayExchangeRate","toFormattedString","areValuesZero","values","initialState","constants","AddressZero","liquidityReducer","valueNumber","fieldChanged","AddLiquidityModal","isConfirmationVisible","setIsConfirmationVisible","approvalStatus","setApprovalStatus","prices","urusBalance","uniswapAllowance","insufficientBalance","insufficientAllowance","shareOfPool","lpBalance","lpTotalSupply","useShareOfPool","Plus","StyledSection","SectionHeader","SectionBody","SectionValue","AddLiquidityTokens","liquidityToken","BoxTitle","BoxText","BoxButton","LiquidityMining","Pools","PoolsHeader","PoolsTitle","RewardsTimer","h3","isStakingEnabled","isStakeReady","endTime","toMilliseconds","nowInSeconds","remainingTime","remaining","remainingSeconds","StakeModal","closeOnSuccess","amountValue","setAmountValue","amountOfRewards","tokensPerYear","InputLabels","InputFields","URUSCoin1x","URUSCoin2x","useStakeState","stakeAddress","asArray","currentStakeValue","stakeEndTime","interestRate","lastUpdate","compounding","rawInvestedAmount","stakeStartTime","decodeStake","cancelStake","closeStake","CancelStakeModal","useAmountForStakeCancel","TimeRow","Column","CancelModalSection","ButtonDanger","AmountOfRewards","RewardAmount","reward","useRewardAmount","claimStake","ClaimStakeModal","poolReward","usePoolReward","StakingTableRow","visible","setVisibility","toggle","useToggler","callback","deps","handleClick","contains","useOutsideClick","cancelVisible","setCancelVisible","claimModalVisible","setClaimModalVisible","Tr","Td","toLocaleDateString","RemainingTime","isReady","Settings","SettingsButton","SettingsList","SettingsOption","tr","td","StakingTable","stakes","setStakes","stakesArray","useUsersStakes","Table","Th","SortButton","table","th","triangleIcon","Staking","isStakingModal","setStakingModal","StakingBody","StakeButton","HomePage","path","App","exact","component","ReactDOM","render"],"mappings":"2km7BAGO,SAASA,IACd,OACE,eAACC,EAAD,CAASC,QAAQ,YAAYC,KAAK,OAAlC,UACE,sBACEC,SAAS,UACTC,SAAS,UACTC,EAAE,gxBACFH,KAAK,UAEP,sBACEI,GAAG,QACHC,UAAU,iBACVC,EAAE,IACFC,EAAE,IACFC,MAAM,KACNC,OAAO,KANT,SAQE,sBACER,SAAS,UACTC,SAAS,UACTC,EAAE,0sBACFH,KAAK,YAGT,mBAAGU,KAAK,cAAR,SACE,sBACEF,MAAM,KACNC,OAAO,KACPE,UAAU,wBACVX,KAAK,eAOf,I,EAAMF,EAAUc,IAAOC,IAAV,6D,kBC3BN,SAASC,EAAT,GAA6C,IAAzBC,EAAwB,EAAxBA,QAASC,EAAe,EAAfA,KAC5BC,EAAMC,iBAAuB,MAC7BC,EAAUC,mBAAQ,kBAAMC,IAASL,EAXzC,SAAiBD,GACf,OAAOO,SAASP,EAAQQ,MAAM,EAAG,IAAK,IAUOC,CAAQT,MAAW,CAC9DC,EACAD,IAUF,OAPAU,qBAAU,WACJR,EAAIS,UACNT,EAAIS,QAAQC,UAAY,GACxBV,EAAIS,QAAQE,YAAYT,MAEzB,CAACJ,IAEG,qBAAKc,MAAO,CAAErB,MAAOQ,EAAMP,OAAQO,GAAQC,IAAKA,ICRzD,I,EAAgBL,IAAOC,IAAV,qGCfN,SAASiB,IACd,OACE,eAAC,EAAD,CAAS/B,QAAQ,YAAYC,KAAK,OAAlC,UACE,sBACEG,EAAE,iNACF4B,OAAO,UACPC,YAAY,MACZC,cAAc,QACdC,eAAe,UAEjB,sBACE/B,EAAE,sBACF4B,OAAO,UACPC,YAAY,MACZC,cAAc,QACdC,eAAe,UAEjB,sBACE/B,EAAE,kQACF4B,OAAO,UACPC,YAAY,MACZC,cAAc,QACdC,eAAe,aAMvB,IAAMpC,EAAUc,IAAOC,IAAV,6DC7BN,SAASsB,IACd,OACE,sBACE3B,MAAM,KACNC,OAAO,KACPV,QAAQ,YACRC,KAAK,OACLoC,MAAM,6BALR,UAOE,wBAAQC,GAAG,UAAUC,GAAG,UAAUC,EAAE,UAAUvC,KAAK,YACnD,wBAAQqC,GAAG,UAAUC,GAAG,UAAUC,EAAE,UAAUvC,KAAK,YACnD,yBACEqC,GAAG,UACHC,GAAG,UACHE,GAAG,UACHC,GAAG,UACHzC,KAAK,eClBN,I,ECAK0C,EDMCC,EAAgB,CAC3B,2HACA,sEACA,8EACA,+DACA,uEACA,yEACA,qEACA,sE,kBCdUD,O,qBAAAA,I,mBAAAA,I,yBAAAA,I,uBAAAA,M,KAUVA,EAAQE,QACRF,EAAQG,OACRH,EAAQI,QAHH,I,UAMMC,EAA2B,CAAC,UAAW,WACvCC,EAIP,CACJC,QAAS,CACPC,QAASR,EAAQE,QACjBO,UAAW,UACXC,cAAe,YAEjBC,QAAS,CACPH,QAASR,EAAQI,QACjBK,UAAW,UACXC,cAAe,wBAINE,GAAmE,mBAC7EZ,EAAQE,QAAU,WAD2D,cAE7EF,EAAQI,QAAU,WAF2D,GAKnES,EAAsE,CACjFN,QAASP,EAAQE,QACjBS,QAASX,EAAQI,SAGNU,EAAmBd,EAAQE,QCzC3Ba,GAAiB,mBAC3Bf,EAAQE,QAAU,8CADS,cAE3BF,EAAQG,OAAS,8CAFU,cAG3BH,EAAQgB,QAAU,8CAHS,cAI3BhB,EAAQI,QAAU,8CAJS,GAOjBa,GAAsB,mBAChCjB,EAAQE,QAAU,8CADc,cAEhCF,EAAQG,OAAS,8CAFe,cAGhCH,EAAQgB,QAAU,8CAHc,cAIhChB,EAAQI,QAAU,8CAJc,GAOtBc,GAAgB,mBAC1BlB,EAAQE,QAAU,8CADQ,cAE1BF,EAAQG,OAAS,8CAFS,cAG1BH,EAAQgB,QAAU,8CAHQ,cAI1BhB,EAAQI,QAAU,8CAJQ,GAOhBe,GAAiB,mBAC3BnB,EAAQE,QAAU,8CADS,cAE3BF,EAAQG,OAAS,8CAFU,cAG3BH,EAAQgB,QAAU,8CAHS,cAI3BhB,EAAQI,QAAU,8CAJS,GAOjBgB,GAA0B,mBACpCpB,EAAQE,QAAU,8CADkB,cAEpCF,EAAQG,OAAS,8CAFmB,cAGpCH,EAAQgB,QAAU,8CAHkB,cAIpChB,EAAQI,QAAU,8CAJkB,G,8BC5B1BiB,EAAb,aACE,WACWb,EACAc,EACAC,EACAC,GACR,yBAJQhB,UAIT,KAHSc,OAGT,KAFSC,SAET,KADSC,cAIAC,EAAb,kDACE,WACWjB,EACAnC,EACAiD,EACAC,EACAC,GACR,IAAD,8BACA,cAAMhB,EAASc,EAAMC,EAAQC,IANpBhB,UAKT,EAJSnC,UAIT,EAHSiD,OAGT,EAFSC,SAET,EADSC,WACT,EAPJ,uBAA2BH,G,wBCNdK,EAAb,WACE,WAAqBC,EAA6BC,GAAmB,yBAAhDD,WAA+C,KAAlBC,QADpD,4CAoBE,WACE,IAAMC,EAASC,sBAAYC,KAAKH,MAAOG,KAAKJ,SAASH,UACrD,OAAIK,EAAOG,SAAS,MACXH,EAAOI,UAAU,EAAGJ,EAAOK,OAAS,GAEtCL,IAzBX,oBA4BE,WACE,OAAOM,EAAeJ,KAAKJ,SAASH,SAAUO,KAAKH,SA7BvD,8BAgCE,WACE,MAAM,GAAN,OAAUO,EAAeJ,KAAKJ,SAASH,SAAUO,KAAKH,OAAtD,YACEG,KAAKJ,SAASJ,UAlCpB,gBAsCE,SAAGa,GACD,IAAKA,EAAe,OAAO,EAC3B,GAAIL,KAAKJ,WAAaS,EAAcT,SAClC,MAAM,IAAIU,MAAM,uCAElB,OAAON,KAAKH,MAAMU,GAAGF,EAAcR,SA3CvC,gBA8CE,SAAGQ,GACD,IAAKA,EAAe,OAAO,EAE3B,GAAIL,KAAKJ,WAAaS,EAAcT,SAClC,MAAM,IAAIU,MAAM,uCAElB,OAAON,KAAKH,MAAMW,GAAGH,EAAcR,SApDvC,qBAuDE,SAAQA,GACN,OAAOG,KAAKH,MAAMW,GAAGX,KAxDzB,gBA2DE,SAAGQ,GACD,GAAIL,KAAKJ,WAAaS,EAAcT,SAClC,MAAM,IAAIU,MAAM,uCAElB,OAAON,KAAKH,MAAMY,GAAGJ,EAAcR,SA/DvC,iBAkEE,SAAIA,GACF,OAAOG,KAAKH,MAAMa,IAAIb,MAnE1B,yBAGE,SAAkBD,EAAoBC,GACpC,IAAKc,GAAaC,KAAKf,GACrB,MAAM,IAAIS,MAAM,0BAElB,MAAmCT,EAAMgB,MAAM,KAA/C,0BAAKC,OAAL,MAAe,GAAf,SAAmBC,OAAnB,MAA6B,GAA7B,EAIA,GAHgB,KAAZD,IACFA,EAAU,KAERC,EAAQZ,OAASP,EAASH,SAC5BsB,EAAUA,EAAQC,OAAOpB,EAASH,SAAU,UACvC,GAAIsB,EAAQZ,OAASP,EAASH,SACnC,MAAM,IAAIa,MAAM,qBAGlB,OAAO,IAAIX,EAAcC,EADPqB,IAAUC,KAAKJ,EAAQK,OAAOJ,SAhBpD,KAyEO,SAASX,EAAeX,EAAkBI,GAC/C,IAAMuB,EAAcvB,EAAMwB,WAEtBC,EACFF,EAAYjB,QAAUV,EAClB2B,EAAYG,SAAS9B,EAAU,KAC/B2B,EAAYlB,UAAUkB,EAAYjB,OAASV,GACjD6B,EAsBF,SAAwBzB,GACtB,OAAOA,EAAM2B,QAAQ,MAAO,IAvBdC,CAAeH,GAE7B,IAAII,EACFN,EAAYjB,QAAUV,EAClB,IACA2B,EAAYlB,UAAU,EAAGkB,EAAYjB,OAASV,GAKpD,OAJAiC,EAOF,SAA6B7B,GAG3B,IAFA,IAAM8B,EAAa9B,EAAMM,OAAS,EAC5ByB,EAAc/B,EAAMgB,MAAM,IACvBgB,EAAI,EAAGA,EAAIF,EAAYE,IAC9BD,EAAYE,QAAQ,EAAID,EAAI,EAAG,EAAG,KAEpC,OAAOD,EAAYG,KAAK,IAbVC,CAAoBN,GAoBpC,SAAgC7B,GAC9B,IAAKA,EAAMoC,SAAS,KAClB,OAAOpC,EAKT,IAHA,IAAIqC,EAAc,EACdC,GAAiB,EACjBC,GAAc,EACTP,EAAI,EAAGA,EAAIhC,EAAMM,OAAQ0B,IAChC,KAAkB,MAAbhC,EAAMgC,IAAcO,GAA6B,MAAbvC,EAAMgC,IAG/C,GAAiB,MAAbhC,EAAMgC,IAUV,GAHiB,MAAbhC,EAAMgC,KACRO,GAAc,IAEXA,IACHF,IACIC,GAAkBD,GA1DD,GA2DnB,OAAOrC,EAAMK,UAAU,EAAG2B,EAAI,QAXhC,GADAM,GAAiB,EACbD,GAhDiB,EAiDnB,OAAOrC,EAAMK,UAAU,EAAG2B,GAchC,OAAOhC,EA5CAwC,CADW,KAAhBf,EAAA,UAAwBI,EAAxB,YAAuCJ,GAAgBI,GC9FpD,SAASY,EAAkBzC,EAAe0C,GAC/C,IAAMC,EAAe3C,EAAM4C,QAAQ,KACnC,OAAID,EAAe,EACV3C,EAEL2C,GAAgBD,EACX1C,EAAMK,UAAU,EAAGsC,GAErB3C,EAAMK,UAAU,EAAGqC,EAAY,GCNxC,IAAMG,EAAMzB,IAAUC,KAAK,GACrByB,EAAM1B,IAAUC,KAAK,G,aCApB,SAAS0B,GAAU/C,GAAkC,IAAhBJ,EAAe,uDAAJ,GACrD,MAAM,GAAN,OAAU6C,EAAkBO,SAAM9C,YAAYF,EAAOJ,GAAW,GAAhE,KCFK,SAASqD,GACdC,EACAlD,GAEA,YAAmBmD,IAAZD,QAAmCC,IAAVnD,GAE5BkD,EAAQlD,MAAMoD,IAAIpD,EAAMA,OCR9B,IAAMqD,GAAc,QACdC,GAAa,MAIZ,SAASC,GAAoBC,GAClC,IAAMC,EAAQC,KAAKC,MAAMH,EAAUH,IAC7BO,EAAOF,KAAKC,OAAOH,EAAUC,EAAQJ,IAAeC,IACpDO,EAAQH,KAAKC,OAChBH,EAAUC,EAAQJ,GAAcO,EAAON,IAPxB,MASZQ,EAAUJ,KAAKC,OAClBH,EAAUC,EAAQJ,GAAcO,EAAON,GAVxB,KAUqCO,GATnC,IAYdE,EAAI,UAAMF,EAAQ,GAAR,WAAiBA,GAAUA,EAAjC,YACRC,EAAU,GAAV,WAAmBA,GAAYA,GAEjC,OAAQL,EAAK,UAAMA,EAAN,MAAkB,KAAOG,EAAI,UAAMA,EAAN,MAAiB,IAAMG,E,6BChBtDC,GAAb,WAKE,WAAYC,EAAsBC,GAA0B,yBAJ5DtE,cAI2D,OAF3DI,WAE2D,EACzDG,KAAKH,MAAQoB,IAAUC,KAAK4C,GAC5B9D,KAAKP,SAAWwB,IAAUC,KAAK6C,GAPnC,0CAUE,WACE,OAAO/D,KAAKH,MAAMmE,WAXtB,sBAcE,WACE,OAAOC,KAAYC,UAAUlE,KAAKH,MAAOG,KAAKP,UAAU4B,aAf5D,oBAkBE,SAAO8C,GACL,IAAMC,EAAUnD,IAAUC,KAAK,IAAImD,IAAIrE,KAAKP,UACtCqB,EAAUd,KAAKH,MAAMyE,IAAIF,GACzBG,EAAavE,KAAKH,MAAM2E,IAAIJ,GAC9BK,EAAS,GAQb,OAPc,IAAVN,IACFM,EAAM,WAAOF,EACVlD,WACAE,SAASvB,KAAKP,SAASiF,WAAY,KACnC1D,OAAOmD,EAAO,KACdrH,MAAM,EAAGqH,KAER,GAAN,OAAUrD,GAAV,OAAoB2D,MA9BxB,mBAiCE,SAAY5E,EAAqBkB,GAC/B,OAAO,IAAI8C,EAAM5C,IAAUC,KAAKrB,GAAQkB,KAlC5C,6BAqCE,SAAuB4D,EAAclF,GACnC,GAAIkF,EAAMlF,SAASgB,GAAGhB,GACpB,OAAOkF,EAET,GAAIA,EAAMlF,SAASe,GAAGf,GACpB,KAAK,mCAAL,OAAyCkF,EAAMlF,SAAS4B,WAAxD,eAAyE5B,EAAS4B,WAAlF,aAEF,IAAMuD,EAAa3D,IAAUC,KAAK,IAAImD,IACpCpD,IAAUC,KAAKzB,GAAUiB,IAAIiE,EAAMlF,WAErC,OAAO,IAAIoE,EAAMc,EAAM9E,MAAMgF,IAAID,GAAanF,KA/ClD,2BAkDE,SAAqBqF,EAAYC,GAC/B,OAAID,EAAIrF,SAASe,GAAGuE,EAAItF,UACf,CAACqF,EAAKjB,EAAMmB,gBAAgBD,EAAKD,EAAIrF,WAE1CqF,EAAIrF,SAASc,GAAGwE,EAAItF,UACf,CAACoE,EAAMmB,gBAAgBF,EAAKC,EAAItF,UAAWsF,GAE7C,CAACD,EAAKC,OAzDjB,KCCaE,GAAb,WAKE,WAAYC,EAA0BC,GAGpC,GAHiE,yBAJ1DC,eAIyD,OAFzDC,iBAEyD,EAChErF,KAAKoF,UAAYnE,IAAUC,KAAKgE,GAChClF,KAAKqF,YAAcpE,IAAUC,KAAKiE,GAC9BnF,KAAKqF,YAAY5E,GAAG,GACtB,KAAM,mBATZ,2CA6BE,SAAQ0D,GACN,IAAMS,EAAa3D,IAAUC,KAAK,IAAImD,IAAIF,GACpCrE,EAASE,KAAKoF,UAAUP,IAAID,GAAYN,IAAItE,KAAKqF,aACvD,OAAOxB,GAAM3C,KAAKpB,EAAQqE,KAhC9B,oBAmCE,SAAOA,GACL,OAAOnE,KAAKsF,QAAQnB,GAAOoB,OAAOpB,KApCtC,sBAuCE,WACE,OAAOnE,KAAKsF,QAAQ,IAAIjE,aAxC5B,mBA2CE,WACE,OAAOrB,KAAKoF,UAAU3E,GAAGT,KAAKqF,eA5ClC,qBA+CE,WACE,OAAO,IAAIJ,EAASjF,KAAKqF,YAAarF,KAAKoF,cAhD/C,wBAaE,SAAiBA,EAAkBC,GACjC,MAAexB,GAAM2B,cAAcJ,EAAWC,GAA9C,mBAAOI,EAAP,KAAU/J,EAAV,KACA,OAAO,IAAIuJ,EAASQ,EAAE5F,MAAOnE,EAAEmE,SAfnC,kBAkBE,SACEuF,EACAM,EACAL,EACAM,GAEA,IAAMC,EAAmB,IAAI/B,GAAMuB,EAAWM,GACxCG,EAAqB,IAAIhC,GAAMwB,EAAaM,GAClD,OAAOV,EAASa,UAAUF,EAAkBC,OA1BhD,KCEaE,GAAb,WAGE,WACWzJ,GAGR,IAFQmC,EAET,uDAFmBM,EACnBiH,EACA,gEAHS1J,UAGT,KAFSmC,UAET,KANOuH,cAMP,EACAhG,KAAKgG,SAAWA,EARpB,0CAsBE,SAAO7B,GACL,OAAOnE,KAAKgG,SAAST,OAAOpB,KAvBhC,sBA0BE,WACE,OAAOnE,KAAKgG,SAAS3E,aA3BzB,+BA8BE,SAAkBkB,GAEhB,OAAOD,EADUtC,KAAKqB,WACakB,KAhCvC,sBAmCE,WACE,OAAO0D,WAAWjG,KAAKqB,cApC3B,qBAqDE,WACE,OAAO,IAAI0E,EAAW/F,KAAK1D,QAAS0D,KAAKvB,QAASuB,KAAKgG,SAASE,cAtDpE,yBAWE,SACE5J,GAKC,IAJDmC,EAIA,uDAJUM,EACVoH,EAGA,uCAFAd,EAEA,uCADA5F,EACA,uDADW,GAELuG,EAAWf,GAAS/D,KAAKiF,EAAW,GAAId,EAAa5F,GAC3D,OAAO,IAAIsG,EAAWzJ,EAASmC,EAASuH,KAnB5C,0BAuCE,SACE1J,EACAmC,EACA2H,EACAC,GAEa,IADb5G,EACY,uDADD,GAEX,OAAOwB,IAAUC,KAAKoF,GAAwB7H,GAASnC,SAASiE,GAC9DU,IAAUC,KAAK5E,IAEbyJ,EAAWQ,WAAWjK,EAASmC,EAAS2H,EAAUC,EAAU5G,GAC5DsG,EAAWQ,WAAWjK,EAASmC,EAAS4H,EAAUD,EAAU3G,OAlDpE,KA0DaiD,GAAMzB,IAAUC,KAAK,GC3DrBsF,GAAQ,IAAIlH,EAASrB,EAAQE,QAAS,QAAS,MAAO,IACtDsI,GAAM,IAAInH,EAASrB,EAAQI,QAAS,MAAO,MAAO,IAClDqI,GAAc,IAAIpH,EAC7BrB,EAAQG,OACR,eACA,OACA,IAQWuI,IAAe,qBACzB1I,EAAQE,QAAUqI,IADO,eAEzBvI,EAAQG,OAASsI,IAFQ,eAGzBzI,EAAQgB,QAAUuH,IAHO,eAIzBvI,EAAQI,QAAUoI,IAJO,IAOtBG,GAA2B,SAACC,EAAkBvK,GAAnB,OAC/B,IAAIoD,EAAMmH,EAASvK,EAAS,cAAe,OAAQ,KAExCwK,GAAOF,GAClB3I,EAAQE,QACR,8CAGW4I,GAAaH,GACxB3I,EAAQG,OACR,8CAGW4I,GAAcJ,GACzB3I,EAAQgB,QACR,8CAGWgI,GAAcL,GACzB3I,EAAQI,QACR,8CAGW6I,IAAa,qBACvBjJ,EAAQE,QAAU2I,IADK,eAEvB7I,EAAQG,OAAS2I,IAFM,eAGvB9I,EAAQgB,QAAU+H,IAHK,eAIvB/I,EAAQI,QAAU4I,IAJK,IAOpBE,GAAgC,SAACN,EAAkBvK,GAAnB,OACpC,IAAIoD,EAAMmH,EAASvK,EAAnB,kBAAuCqK,GAAgBE,GAAStH,MAAhE,WAA4EoH,GAAgBE,GAASrH,QAAU,KAEpG4H,GAAaD,GACxBlJ,EAAQE,QACR,8CAGWkJ,GAAmBF,GAC9BlJ,EAAQG,OACR,8CAGWkJ,GAAoBH,GAC/BlJ,EAAQgB,QACR,8CAGWsI,GAAoBJ,GAC/BlJ,EAAQI,QACR,8CAGWiI,IAAuB,qBACjCrI,EAAQE,QAAUiJ,IADe,eAEjCnJ,EAAQG,OAASiJ,IAFgB,eAGjCpJ,EAAQgB,QAAUqI,IAHe,eAIjCrJ,EAAQI,QAAUkJ,IAJe,IAO9BC,GAAwB,SAACX,EAAkBvK,GAAnB,OAC5B,IAAIoD,EACFmH,EACAvK,EAFF,eAGUgK,GAAwBO,GAASrH,OAH3C,4CAIU8G,GAAwBO,GAASrH,OAJ3C,OAKE,KAGSiI,GAAUD,GACrBvJ,EAAQE,QACR,8CAGWuJ,GAAgBF,GAC3BvJ,EAAQG,OACR,8CAGWuJ,GAAiBH,GAC5BvJ,EAAQgB,QACR,8CAGW2I,GAAiBJ,GAC5BvJ,EAAQI,QACR,8CAGWwJ,IAAa,qBACvB5J,EAAQE,QAAUsJ,IADK,eAEvBxJ,EAAQG,OAASsJ,IAFM,eAGvBzJ,EAAQgB,QAAU0I,IAHK,eAIvB1J,EAAQI,QAAUuJ,IAJK,IChHbE,IAAc,qBACxB7J,EAAQE,QAAU,CAAE4J,MAAO,SAAUC,SAAU,YADvB,eAExB/J,EAAQG,OAAS,CAAE2J,MAAO,SAAUC,SAAU,YAFtB,eAGxB/J,EAAQgB,QAAU,CAAE8I,MAAO,SAAUC,SAAU,YAHvB,eAIxB/J,EAAQI,QAAU,CAAE0J,MAAO,UAAWC,SAAU,gBAJxB,ICFdC,GACJ,UADIA,GAEJ,UAFIA,GAGN,UAHMA,GAIJ,UAJIA,GAKC,UALDA,GAML,UANKA,GAOA,UAPAA,GAQL,UARKA,GASF,UATEA,GAYK,UAZLA,GAaQ,UAbRA,GAcU,wBAdVA,GAeO,UAfPA,GAgBS,UAhBTA,GAiBI,UAjBJA,GAkBM,UAlBNA,GAmBI,UAnBJA,GAoBF,UApBEA,GAqBH,UAGGC,GACL,+CADKA,GAEA,2BCxBAC,GAAelH,IAAUC,KAAK,MAC9BP,GAAe,gB,SCDfyH,GAAqBC,6BAAkCrF,GAE7D,SAASsF,KACd,OAAOC,qBAAWH,I,aCIb,SAASI,KAGb,IAFDC,EAEA,uDAF0B,GAC1BC,EACA,uCACMzL,EAAUwL,EAAMC,EAAOjK,SAC7B,OAAKxB,GAAWyL,EAAOC,YAAc1L,EAC5B,6BACFwL,GADL,kBAEGC,EAAOjK,QAAUiK,EAAOC,cAGtBF,E,gCCDIG,GAAgBP,wBAA8B,CACzDQ,cAAc,WAAD,8BAAE,uBAAAC,EAAA,0FAAF,kDAAC,GACdC,iBAAkB,aAClBC,aAAShG,EACTvE,QAASM,EACTkK,YAAa,aACbC,oBAAgBlG,EAChBmG,WAAOnG,ICvBF,SAASoG,KACd,OAAOb,qBAAWK,ICAb,SAASS,KACd,MAA6BD,KAArB3K,EAAR,EAAQA,QAASuK,EAAjB,EAAiBA,QACjB,ECWOT,qBAAWe,IDXVC,EAAR,EAAQA,eAAgBC,EAAxB,EAAwBA,aAWxB,MAAO,CACLA,aAVe7M,mBAAQ,WAAO,IAAD,EAC7B,YAAgBqG,IAAZvE,GAA0BuK,GAGvB,UAACQ,EAAa/K,UAAd,QAA0B,IAAIgL,QACnC,SAAC5N,GAAD,OAAOA,EAAEqF,OAAS8H,EAAQ1M,WAHnB,KAKR,CAACkN,EAAc/K,EAASuK,IAIzBO,kBEfG,IAAMG,GAAoBrB,wBAQ9B,CACDsB,SAAU,aAGVC,YAAa,eCDR,SAASC,GAAaC,GAC3B,MAZK,SAAuBC,GAC5B,MAAyCxB,qBAAWmB,IAA5CC,EAAR,EAAQA,SAAUC,EAAlB,EAAkBA,YAAa/J,EAA/B,EAA+BA,MAO/B,OALA7C,qBAAU,WAER,OADA2M,EAASI,GACF,kBAAMH,EAAYG,MACxB,CAACC,KAAKC,UAAUF,GAAQJ,EAAUC,IAE9BG,EAAMG,KAAI,oBAAG5N,EAAH,EAAGA,QAAS6N,EAAZ,EAAYA,KAAZ,cAAuBtK,QAAvB,IAAuBA,GAAvB,UAAuBA,EAAO4I,aAA9B,iBAAuB,EAAenM,UAAtC,aAAuB,EAA0B6N,MAIjDC,CAAcN,EAAO,CAACA,GAAQ,IAC/C,OADA,oB,cCJIO,GAAqB,IAAIC,KAAUpM,GAElC,SAASqM,KACd,MAAgDnB,KAAhD,IAAQ3K,eAAR,MAAkBM,EAAlB,EAAoCiK,EAApC,EAAoCA,QAE9BmB,EAAON,KACTb,GAAW,CACX1M,QAAS0C,EAAkBP,GAC3B0L,KAAME,GAAmBG,mBAAmB,gBAAiB,CAC3DxB,EAAQ1M,YAMd,YAAgB0G,IAATmH,EACH,IAAIxK,EAFSgH,GAAgBlI,GAEDwC,IAAUC,KAAKiJ,SAC3CnH,ECzBC,SAASyH,KAA8B,IAAfhL,EAAc,uDAAH,EACxC,EAA0BiL,mBAAS,IAAnC,mBAAO7K,EAAP,KAAc8K,EAAd,KAEA,SAASC,EAAI/K,GACPc,GAAaC,KAAKf,IACpB8K,EAASE,GAAiBC,GAAmBjL,GAAQJ,IAQzD,OAJAzC,qBAAU,WACR2N,EAASE,GAAiBhL,EAAOJ,MAChC,CAACA,IAEG,CAACI,EAAO+K,GAGV,SAASE,GAAmBjL,GAAgB,IAAD,EAChD,GAAc,KAAVA,EACF,OAAOA,EAET,IAAMkL,EAAa,UAAGlL,EAAMmL,MAAM,cAAf,aAAG,EAAqB,GAAG7K,OAO9C,OANI4K,IACFlL,EAAQA,EAAMK,UAAU6K,KAEtBlL,EAAMoL,WAAW,MAAkB,KAAVpL,KAC3BA,EAAK,WAAOA,IAEPA,EAGF,SAASgL,GAAiBhL,EAAeJ,GAC9C,GAAII,EAAMoC,SAAS,KAAM,CACvB,MAA2BpC,EAAMgB,MAAM,KAAvC,mBAAOC,EAAP,KACMoK,EADN,KACwBhL,UAAU,EAAGT,GACrC,OAAoB,IAAbA,EAAA,UAAoBqB,EAApB,YAA+BoK,GAAYpK,EAEpD,OAAOjB,ECtCT,IAAMsL,GAAe,cAEd,SAASC,GAAsBC,GACpC,MAA0BX,mBAAS,KAAnC,mBAAO7K,EAAP,KAAc8K,EAAd,KAcA,MAAO,CAAC9K,EAbR,SAAaA,GACU,IAAjBA,EAAMM,QACRwK,EAAS,KAEX,IAAMK,EAAQnL,EAAMmL,MAAMG,IACtBH,IACEM,OAAOzO,SAASmO,EAAM,GAAI,KAAOK,EACnCV,EAASK,EAAM,IAEfL,EAASU,EAAShK,eCb1B,SAASkK,GAAQC,GACf,IACI1L,EADE2L,EAAOC,OAAOC,aAAaJ,QAAQC,GAEzC,GAAa,OAATC,EACF,IACE3L,EAASkK,KAAK4B,MAAMH,GACpB,MAAOI,IAIX,OAAO/L,EAaF,SAASgM,GAAgBN,GAC9B,MAA0Bd,oBAAS,kBAAMa,GAAQC,MAAjD,mBAAO3L,EAAP,KAAc8K,EAAd,KAUA,OARA3N,qBAAU,WACR2N,EAASY,GAAQC,MAChB,CAACA,IAEJxO,qBAAU,YAjBZ,SAAiBwO,EAAa3L,GAC5B,QAAcmD,IAAVnD,EAEG,CACL,IAAMkM,EAAU/B,KAAKC,UAAUpK,GAE/B,OADA6L,OAAOC,aAAaK,QAAQR,EAAKO,GAC1B/B,KAAK4B,MAAMG,GAJlBL,OAAOC,aAAaM,WAAWT,GAgB/BQ,CAAQR,EAAK3L,KACZ,CAACA,EAAO2L,IAEJ,CAAC3L,EAAO8K,G,aC3BXuB,GAAmB,IAAI5B,KAAU6B,IAEhC,SAASC,GAAgBrE,EAAcsE,GAC5C,MAAgDjD,KAAhD,IAAQ3K,eAAR,MAAkBM,EAAlB,EAAoCiK,EAApC,EAAoCA,QAEpC,IACE,IAAMmB,EAAON,KACTb,GACAjB,EAAMtJ,UAAYA,GAAW,CAC3BnC,QAASyL,EAAMzL,QACf6N,KAAM+B,GAAiB1B,mBAAmB,YAAa,QACrD6B,QADqD,IACrDA,IAA0BrD,EAAQ1M,YAK1C,OAAOK,mBACL,uBACWqG,IAATmH,EACI,IAAIxK,EAAcoI,EAAO9G,IAAUC,KAAKiJ,SACxCnH,IACN,CAACmH,IAEH,MAAO0B,GACP,OAAO,IAAIlM,EAAcoI,EAAO9G,IAAUC,KAAK,OC7B5C,SAASoL,KACd,MAAuClD,KAA/B3K,QAER,OAAO2N,GAAgBlF,QAFvB,MAAkBnI,EAAlB,ICDK,SAASwN,GAAkBF,GAChC,MAAuCjD,KAA/B3K,QACR,OAAO2N,GAAgBvE,QADvB,MAAkB9I,EAAlB,GAC+CsN,G,6DCY1C,SAASG,KACd,MAAuDpD,KAAvD,IAAQ3K,eAAR,MAAkBM,EAAlB,EAAoCmK,EAApC,EAAoCA,eAC9BuD,EAAM,OAAGvD,QAAH,IAAGA,OAAH,EAAGA,EAAgBwD,YAE/B,MAAO,CACLC,WAAY,IAAIC,KACd1F,GAAczI,GAASnC,QACvBuQ,GAAWC,IACXL,GAEFM,QAAS,IAAIH,KAAS/E,GAAcpJ,GAASnC,QAAS0Q,GAAUP,GAChEQ,cAAe,IAAIL,KACjB1N,EAAuBT,GACvByO,GAAcJ,IACdL,GAEFU,SAAU,IAAIP,KAASzN,EAAiBV,GAAU2O,GAASN,IAAKL,GAChEY,cAAe,IAAIT,KACjBxN,EAAkBX,GAClB6O,GAAmBR,IACnBL,GAEFc,kBAAmB,IAAIX,KACrBvN,EAA2BZ,GAC3B+O,GAAqBV,IACrBL,IC/BN,IAAMgB,GAAsB,IAAInD,KAAU8C,GAASN,KAE5C,SAASY,KACd,MAAgDtE,KAAhD,IAAQ3K,eAAR,MAAkBM,EAAlB,EAAoCiK,EAApC,EAAoCA,QAC9B1M,EAAU6C,EAAiBV,GAC3BsJ,EAAQF,GAAcpJ,GAE5B,IACE,IAAM0L,EAAON,KACTb,GAAW,CACX1M,UACA6N,KAAMsD,GAAoBjD,mBACxB,6BACA,CAACxB,EAAQ1M,YAKf,YAAgB0G,IAATmH,EACH,IAAIxK,EAAcoI,EAAO9G,IAAUC,KAAKiJ,SACxCnH,EACJ,MAAO6I,GACP,OAAO,IAAIlM,EAAcoI,EAAO9G,IAAUC,KAAK,OC5BnD,IAAMyM,GAAoB,IAAIrD,KAAU,CACtC,iHAEIsD,GAAe,cAEd,SAASC,KACd,MAAuCzE,KAA/B3K,eAAR,MAAkBM,EAAlB,EACMgJ,EAAQF,GAAcpJ,GAEtB0L,EAAON,GACX9B,EAAMtJ,UAAYA,GAAW,CAC3BnC,QAASyL,EAAMzL,QACf6N,KAAMwD,GAAkBnD,mBAAmBoD,GAAc,MAI7D,OAAOjR,mBAAQ,WACb,QAAaqG,IAATmH,EAAoB,CACtB,MAA6BwD,GAAkBG,qBAC7CF,GACAzD,GAFF,mBAAO/D,EAAP,KAAiBC,EAAjB,KAIA,OAAID,GAAYC,EACP,CAACD,EAAUC,QAEpB,KAED,CAAC8D,IC3BC,SAAS4D,KACd,MAAuC3E,KAA/B3K,eAAR,MAAkBM,EAAlB,EAEA,EAA0B2L,qBAA1B,mBAAOsD,EAAP,KAAcC,EAAd,KACMC,EAAWL,KAmBjB,OAjBA7Q,qBAAU,WACR,QAAiBgG,IAAbkL,EAAwB,CAC1B,kBAA6BA,EAA7B,GAAO9H,EAAP,KAAiBC,EAAjB,KACID,GAAYC,GACd4H,EACElI,GAAWoI,aACTjH,GAAczI,GAASnC,QACvBmC,EACA2H,EACAC,EACA,QAKP,CAAC6H,IAEGF,E,aChBHI,GAAkB,IAAI9D,aAAU4C,GAAcJ,KCJpD,IAAMuB,GAAiB,IAAI/D,aAAU6B,ICL9B,SAASmC,KACd,MAAuClF,KAA/B3K,QACR,ODKK,SAAwBsJ,GAC7B,MAAuCqB,KAA/B3K,eAAR,MAAkBM,EAAlB,EACMoL,EAAON,GACX9B,EAAMtJ,UAAYA,GAAW,CAC3BnC,QAASyL,EAAMzL,QACf6N,KAAMkE,GAAe7D,mBAAmB,cAAe,MAG3D,OAAO7N,mBACL,uBACWqG,IAATmH,EACI,IAAIxK,EAAcoI,EAAO9G,IAAUC,KAAKiJ,SACxCnH,IACN,CAACmH,IClBIoE,CAAe1G,QADtB,MAAkB9I,EAAlB,ICGF,IAAMyP,GAAoB,IAAIlE,aAAU8C,GAASN,KAG1C,SAAS2B,KACd,MAAuCrF,KAA/B3K,QACF0L,EAAON,GAAa,CACxBvN,QAAS6C,OAFX,MAAkBJ,EAAlB,GAGEoL,KAAMqE,GAAkBhE,mBANP,qBAMwC,MAE3D,OAAO7N,mBAAQ,kBAAOwN,EAAOlJ,IAAUC,KAAKiJ,QAAQnH,IAAY,CAACmH,ICRnE,IAAMiE,GAAkB,IAAI9D,aAAU4C,GAAcJ,KAC9Cc,GAAe,2BAEd,SAASc,GAAsBC,GAAyC,IAAvBC,EAAsB,wDAC5E,EAAuCxF,KAAvC,IAAQ3K,eAAR,MAAkBM,EAAlB,EACM8P,EAAQJ,KACRtE,EAAON,GACXgF,GAAS,CACPvS,QAAS4C,EAAuBT,GAChC0L,KAAMiE,GAAgB5D,mBAAmBoD,GAAc,CACrD3M,IAAUC,KAAKyN,GACfE,EAAMpO,GAAG,IAAMmO,EACfA,MAIN,OAAOjS,mBAAQ,kBAAOwN,EAAOlJ,IAAUC,KAAKiJ,QAAQnH,IAAY,CAACmH,ICZnE,IAAM2E,GAAgB7N,IAAUC,KAAK,KAE9B,SAAS6N,GAAkBC,EAAoBC,GACpD,IAAMf,EAAWL,KACXqB,EAAcZ,KACpB,EAAuClF,KAA/B3K,eAAR,MAAkBM,EAAlB,EACMoQ,EAAcjI,GAAczI,GAASnC,QACrC8S,EAAc9I,GAAwB7H,GAASnC,QAC/C+S,EAAUpO,IAAUC,KAAKiO,GAAa5O,GAAGU,IAAUC,KAAKkO,IAC1D,CAACvM,SAAMyM,WAAWN,GAAanM,SAAMyM,WAAWL,IAChD,CAACpM,SAAMyM,WAAWL,GAAYpM,SAAMyM,WAAWN,IACnD,GAAId,GAAYgB,EAAa,CAC3B,IAAIK,EACJ,GAAIL,EAAYrP,MAAMY,GAAG,GACvB8O,EAAWtO,IAAUC,KnCtBpB,SAAcrB,GACnB,IAAMhE,EAAIoF,IAAUC,KAAKrB,GACzB,GAAIhE,EAAE0E,GAAG,KACP,MAAM,IAAID,MAAM,oCAIlB,IAFA,IAAIkP,EAAI3T,EAAE4T,IAAI/M,GAAK4B,IAAI3B,GACnB7G,EAAID,EACD2T,EAAE9O,IAAI5E,GAAG4T,cACd5T,EAAI0T,EACJA,EAAI3T,EAAEyI,IAAIkL,GAAGC,IAAID,GAAGlL,IAAI3B,GAE1B,OAAO7G,EmCYD6T,CAAKN,EAAQ,GAAGxK,IAAIwK,EAAQ,IAAI3K,aAChChE,IAAIoO,QACD,CACL,IAAMc,EAAUP,EAAQ,GAAGxK,IAAIqK,EAAYrP,OAAOyE,IAAI4J,EAAS,IACzD2B,EAAUR,EAAQ,GAAGxK,IAAIqK,EAAYrP,OAAOyE,IAAI4J,EAAS,IAC/DqB,EAAWK,EAAQE,IAAID,GAAWD,EAAUC,EAE9C,GAAIN,EAASO,IAAI,GACf,MAAM,IAAIxP,MAAM,6BAElB,OAAO,IAAIX,EAAckI,GAAcpJ,GAAU8Q,IC1BrD,IAAMf,GAAoB,IAAIlE,aAAU8C,GAASN,KAC3Cc,GAAe,kCCLrB,IAAMY,GAAoB,IAAIlE,aAAU8C,GAASN,KAC3Cc,GAAe,4BCIrB,IAAMQ,GAAkB,IAAI9D,aAAU4C,GAAcJ,KCLpD,IAAMsB,GAAkB,IAAI9D,aAAU4C,GAAcJ,KCMpD,IAAM0B,GAAoB,IAAIlE,aAAU8C,GAASN,KCL1C,SAASiD,GAAT,GAAmD,IAApBC,EAAmB,EAAnBA,SACpC,EAAoC5G,KAA5BF,EAAR,EAAQA,eAAgBzK,EAAxB,EAAwBA,QACxB,EAA0BwR,qBAAWzH,GAAoB,IAAzD,mBAAOC,EAAP,KAAcyH,EAAd,KAEAlT,qBAAU,WACR,GAAIkM,QAA8BlG,IAAZvE,EAAuB,CAC3C,IAAM0R,EAAS,SAACxH,GAAD,OACbuH,EAAS,CAAEzR,UAASkK,iBAEtB,OADAO,EAAekH,GAAG,QAASD,GACpB,WACLjH,EAAemH,IAAI,QAASF,OAG/B,CAACjH,EAAgBzK,IAEpB,IAAM6R,ECrBD,SAAwBzQ,EAAU0Q,GACvC,MAA4C7F,mBAAY7K,GAAxD,mBAAO2Q,EAAP,KAAuBC,EAAvB,KAgBA,OAdAzT,qBAAU,WAER,IAAM0T,EAAUC,YAAW,WACzBF,EAAkB5Q,KACjB0Q,GAKH,OAAO,WACLK,aAAaF,MAEd,CAAC7Q,EAAO0Q,IAEJC,EDIgBK,CAAYpI,EAAO,KACpCE,OACQ3F,IAAZvE,EAAwB6R,EAAe7R,QAAWuE,EAEpD,OACE,cAACoF,GAAmBgF,SAApB,CAA6BvN,MAAO8I,EAAaqH,SAAUA,I,cEDxD,SAASc,KAAsD,IAAD,EAAnCrI,EAAmC,uDAApB,GAAIC,EAAgB,uCAC7DzL,EAAO,UAAGwL,EAAMC,EAAOjK,gBAAhB,aAAG,EAAuBkK,YACvC,IAAK1L,GAAWyL,EAAOC,aAAe1L,EAAS,CAC7C,GAAoB,kBAAhByL,EAAOqI,KACT,OAAO,6BACFtI,GADL,kBAEGC,EAAOjK,QAAU,CAChBkK,YAAaD,EAAOC,YACpBF,MAAOC,EAAOD,SAIpB,GAAoB,gBAAhBC,EAAOqI,KACT,OAAO,6BACFtI,GADL,kBAEGC,EAAOjK,QAFV,6BAGOgK,EAAMC,EAAOjK,UAHpB,IAIIkK,YAAaD,EAAOC,YACpBQ,MAAOT,EAAOS,UAKtB,OAAOV,E,aClCF,SAASuI,KAAuD,IAA1CvI,EAAyC,uDAApB,GAAIC,EAAgB,uCACpE,GAAoB,cAAhBA,EAAOqI,KACT,MAAM,GAAN,oBAAWtI,GAAX,aAAqBC,EAAOqB,QAE9B,IAJoE,EAIhEkH,EAAaxI,EAJmD,eAKjDC,EAAOqB,OAL0C,yBAKzDD,EALyD,QAM5DoH,EAAQzI,EAAM0I,WAClB,SAACtV,GAAD,OAAOA,EAAES,UAAYwN,EAAKxN,SAAWT,EAAEsO,OAASL,EAAKK,SAExC,IAAX+G,IACFD,EAAaA,EAAWxH,QAAO,SAAC2H,EAAGvP,GAAJ,OAAUA,IAAMqP,OALnD,2BAAkC,IALkC,8BAapE,OAAOD,E,gDCvBF,WACL9D,EACA1O,EACAkK,EACA0I,GAJK,sCAAAvI,EAAA,yDAMmB,IAApBuI,EAASlR,OANR,yCAOI,IAPJ,cASCmR,EAAW,IAAI1E,KACnB5N,EAAkBP,GAClBP,EACAiP,GAZG,SAc4CmE,EAASC,UACxDF,EAASnH,KAAI,kBAAuB,CAAvB,EAAG5N,QAAH,EAAY6N,SACzB,CAAEqH,SAAU7I,IAhBT,OAmBL,IAnBK,4BAcI8I,EAdJ,KAkBChJ,EAAoB,GACjB5G,EAAI,EAAGA,EAAIwP,EAASlR,OAAQ0B,IAAM,EACfwP,EAASxP,GAA3BvF,EADgC,EAChCA,QAAS6N,EADuB,EACvBA,KACXrK,EAAS2R,EAAQ5P,IACjB6P,EAHkC,UAGhBjJ,EAAMnM,UAHU,QAGE,IAC1B6N,GAAQrK,EACxB2I,EAAMnM,GAAWoV,EAxBd,yBA0BEjJ,GA1BF,6C,sBCMA,SAASkJ,GAAT,GAAkD,IAApB3B,EAAmB,EAAnBA,SACnC,EAAuD5G,KAA/CF,EAAR,EAAQA,eAAR,IAAwBzK,eAAxB,MAAkCM,EAAlC,EACM4J,EAAcL,KACpB,EAA+B2H,qBAAWe,GAAc,IAAxD,mBAAOjH,EAAP,KAAc6H,EAAd,KACA,EAA+B3B,qBAAWa,GAAmB,IAA7D,mBAAOrI,EAAP,KAAcoJ,EAAd,KAEMlI,EAAWmI,uBACf,SAAC/H,GACC6H,EAAc,CAAEb,KAAM,YAAahH,YAErC,CAAC6H,IAGGhI,EAAckI,uBAClB,SAAC/H,GACC6H,EAAc,CAAEb,KAAM,eAAgBhH,YAExC,CAAC6H,IAGH,EC9BK,SACLG,EACAC,EACAzB,GAEA,MAA4C7F,mBAAiB,CAACqH,EAAOC,IAArE,mBAAOxB,EAAP,KAAuBC,EAAvB,KAgBA,OAdAzT,qBAAU,WAER,IAAM0T,EAAUC,YAAW,WACzBF,EAAkB,CAACsB,EAAOC,MACzBzB,GAKH,OAAO,WACLK,aAAaF,MAEd,CAACqB,EAAOC,EAAQzB,IAEZC,EDS+ByB,CAAgBlI,EAAOtL,EAAS,IAAtE,mBAAOyT,EAAP,KACMC,EADN,OACoC1T,EAkCtC,SAAmB4S,GACjB,IADwC,EAClCe,EAAsB,GADY,eAElBf,GAFkB,yBAE7BgB,EAF6B,QAInCD,EAAOE,MACN,SAACzW,GAAD,OAAOA,EAAES,UAAY+V,EAAQ/V,SAAWT,EAAEsO,OAASkI,EAAQlI,SAG7DiI,EAAOG,KAAKF,IANhB,2BAAiC,IAFO,8BAWxC,OAAOD,EA7CuCI,CAAUN,GAAkB,GAE1ElV,qBAAU,WACJkM,QAAkClG,IAAhB2F,QAAyC3F,IAAZvE,GD9BhD,SAAP,yCC+BMgU,CAAUvJ,EAAgBzK,EAASkK,EAAawJ,GAC7CO,MAAK,SAACjK,GAAD,OACJoJ,EAAc,CACZd,KAAM,gBACNpI,cACAlK,UACAgK,aAGHkK,OAAM,SAACxJ,GACNyJ,QAAQzJ,MAAMA,GACd0I,EAAc,CACZd,KAAM,cACNpI,cACAlK,UACA0K,eAIP,CAACD,EAAgBP,EAAalK,EAASuL,KAAKC,UAAUkI,KAEzD,IAAMtS,OAAoBmD,IAAZvE,EAAwBgK,EAAMhK,QAAWuE,EACvD,OACE,cAAC0G,GAAkB0D,SAAnB,CACEvN,MAAO,CAAEA,QAAO8J,WAAUC,eAC1BoG,SAAUA,I,+CE3DH6C,GAAmB,CAC9BC,SAAU,CACRC,QAAS,CACPxT,KAAM,WACNyT,YAAa,6CAEfC,QAAS,MAEXC,cAAe,CACbH,QAAS,CACPxT,KAAM,SACNyT,YAAa,uCAEfC,Q,OAASE,EACTC,QAAS,CACPC,SAAU,sCAWT,IAAMC,IAAwD,qBAClErV,EAAQE,QAAU,CACjB2U,SAAUD,GAAiBC,SAC3BI,cAAc,6BACTL,GAAiBK,eADT,IAEXE,QAAQ,6BACHP,GAAiBK,cAAcE,SAD7B,IAELG,gBAAiB,WAP4C,eAWlEtV,EAAQI,QAAU,CACjByU,SAAUD,GAAiBC,SAC3BI,cAAc,6BACTL,GAAiBK,eADT,IAEXE,QAAQ,6BACHP,GAAiBK,cAAcE,SAD7B,IAELG,gBAAiB,KACjB1M,QAAS,UACT2M,IAAI,eACDvV,EAAQI,QA1BnB,SAAqBoV,GACnB,IAAMlX,EAAOkX,EAAQtT,OAErB,OAAOsT,EAAQlQ,KAAKmQ,MAAMnQ,KAAKoQ,UAAYpX,EAAO,KAuBvBqX,CAAY,CAAC,oCAAqC,oCAAqC,4CApB/C,ICRrE,IAAIC,GAGO,KA4BJ,SAAeC,GAAtB,qC,gDAAO,WAA2B3G,EAAezO,GAA1C,kBAAAoK,EAAA,yDACGiL,EAAwB5G,EAAxB4G,WAAY1B,EAAYlF,EAAZkF,SAEhB0B,IAAc1B,EAHb,oBAIe,YAAd3T,EAJD,0CAMO2T,EAAQ,CACZ2B,OAAQ,6BACRC,OAAQ,CAAC,CAAExV,QAAQ,KAAD,OAAOR,EAAQI,QAAQgD,SAAS,SARrD,kEAWmC,OAA9B,KAAqB6S,KAX1B,4CAaW7B,EAAQ,CACZ2B,OAAQ,0BACRC,OAAQ,CACN,CACExV,QAAQ,KAAD,OAAOR,EAAQI,QAAQgD,SAAS,KACvC3C,UAAW,8BACXyV,eAAgB,CACd5U,KAAM,eACNC,OAAQ,MACRC,SAAU,IAEZ2U,QAAS,CAAC,oCAAqC,oCAAqC,oCACpFC,kBAAmB,CAAC,4BAzB/B,oFA8BY,MA9BZ,iCAiCU,MAjCV,2CAoCsB,YAAd3V,EApCR,4CAsCO2T,EAAQ,CACZ2B,OAAQ,6BACRC,OAAQ,CAAC,CAAExV,QAAQ,KAAD,OAAO6M,OAAOrN,EAAQE,SAASkD,SAAS,SAxC7D,4DA2CQ,MA3CR,iCAgDE8L,GAhDF,0E,sBCvCP,I,eAwHemH,GAxHQ,SAAC,GAA4C,IAA1CtE,EAAyC,EAAzCA,SACxB,EAAwCtF,qBAAxC,mBAAO6J,EAAP,KAAqBC,EAArB,KACA,EAA4C9J,qBAA5C,mBAAOxB,EAAP,KAAuBuL,EAAvB,KACA,EAA8B/J,qBAA9B,mBAAO1B,EAAP,KAAgB0L,EAAhB,KACA,EAA8BhK,oBAAkB,kBAAM5L,EDNjD,WACL,IAAM6V,EAAgBhJ,aAAaJ,QAAQ,eAE3C,OAAKoJ,GAAkBrW,EAAY2D,SAAS0S,GAIrCA,EtDyByB,UuD1BqDC,OAArF,mBAAOnW,EAAP,KAAgBoW,EAAhB,KACA,EAA0BnK,qBAA1B,mBAAOvB,EAAP,KAAc2L,EAAd,KAEMC,EAAYpY,mBAAQ,kBDMrB,SAAsB+B,GAC3B,GAAImV,IAAUA,GAAOnV,YAAcA,EACjC,OAAOmV,GAAOmB,MAGhB,GAAItW,EAAW,CAAC,IAAD,QACb,UAAAuW,SAASC,eAAe,gCAAxB,SAAkDC,SAElD,IAAM/B,EAAU,CACdvM,QAASnI,EACT0W,eAAe,EACfC,yBAAyB,EACzBC,gBAAiBhC,GAA0BxU,EAA+BJ,IAC1E6W,gBAAiB,KAGbP,EAAQ,IAAIQ,KAAUpC,GAM5B,OAJA,UAAA6B,SAASC,eAAe,gCAAxB,mBAAkDlF,gBAAlD,mBAA6D,UAA7D,SAAiEyF,aAAa,QAAS,iBAEvF5B,GAAS,CAAEnV,YAAWsW,UAERA,OC5BgBU,CAAa7W,EAA+BJ,MAAwB,CAACA,IAErGzB,qBAAU,WACR,IAAM2Y,EAAW,yCAAG,6BAAA7M,EAAA,yDACbyL,GAAiBrL,EADJ,oDAKd0M,EAAqB,GAEpBrB,EAAasB,OAPA,gCAQC3M,EAAe4M,KAAK,sBAAuB,IAR5C,OAQhBF,EARgB,8BAUhBA,EAAWrB,EAAaqB,SAVR,QAalBlB,EAAW,CAAEpY,QAASsZ,EAAS,KAbb,4CAAH,qDAgBjBD,MACC,CAACpB,EAAcrL,IAElBlM,qBAAU,WACR,IAAM+Y,EAAwB,SAACC,GAC7BtB,EAAW,CAAEpY,QAAS0Z,EAAU,MAE5BC,EAAqB,SAACC,GAC1B,IAAMC,EAAW7K,OAAOzO,SAASqZ,EAAgB,IAE7CjY,EAAQkY,IACVtB,EAAWsB,GACX1B,EAAkB,IAAI2B,KAAOC,UAAUC,aAAa/B,MAEpDxL,IACA+L,EAAS,IAAIyB,KAAwBJ,MAIzC,GAAI5B,IAAiBA,EAAaiC,aAOhC,OANAjC,EAAakC,qBACblC,EAAamC,gBAAgBC,KAE7BpC,EAAaqC,YAAY,kBAAmBb,GAC5CxB,EAAaqC,YAAY,eAAgBX,GAElC,WACL1B,EAAasC,eAAe,kBAAmBd,GAC/CxB,EAAasC,eAAe,eAAgBZ,GAE5C1B,EAAakC,wBAGhB,CAAClC,IAEJ,IAAM1L,EAAgBiJ,sBAAW,wBAAC,mCAAAhJ,EAAA,yDAC3BiM,EAD2B,sEAMDjB,GANC,SAMiBiB,EAAU+B,UAN3B,+BAMsCjY,EAA+BJ,GANrE,yCAMxBsY,EANwB,iEAYxBC,EAAkB,IAAIZ,KAAOC,UAAUC,aAAaS,GAZ5B,UAcMC,EAAgBC,aAdtB,oBAcbd,EAda,EActB1X,QAEHR,EAAQkY,GAhBiB,wBAiB5BrB,EAAS,IAAIyB,KAAwBJ,IAjBT,2BAqB9B3B,EAAgBuC,GAChBtC,EAAkBuC,GAtBY,kDAyB9BpE,QAAQzJ,MAAR,MAzB8B,0DA2B/B,CAAC4L,EAAWtW,IAETsK,EAAmB+I,uBAAY,WACrB,OAAd5I,QAAc,IAAdA,KAAgBuN,qBAChBhC,OAAkBzR,GAClB0R,OAAW1R,GACX8R,OAAS9R,KACR,IAEGiG,EAAc6I,uBAAY,SAACoF,GAAyB,IAAD,EACvDrC,EAAWqC,GACXvL,aAAaK,QAAQ,cAArB,UAAoCnN,EAA+BqY,UAAnE,QAA6F,IAC7FnO,MACC,IAEH,OACE,cAACH,GAAcwE,SAAf,CACEvN,MAAO,CACLgJ,gBACAE,mBACAC,UACAvK,UACAwK,cACAC,iBACAC,SARJ,SAWG6G,KC9HMmH,GAAcC,YAAH,q8CA8DNnP,GACCC,GAKAA,IChDNmP,GAAkD,GpCflD/N,GAAsBjB,wBAGhC,CACDmB,aAAc6N,GACd9N,eAAgB,eqCkBX,SAAS+N,GACd7O,EACAC,GACqB,IAAD,MACpB,OAAQA,EAAOqI,MACb,IAAK,oBACH,OAAO,6BACFtI,GADL,kBAEGC,EAAOjK,SAAU,UAACgK,EAAMC,EAAOjK,gBAAd,QAA0B,IAAI0C,OAAO,CACrDoW,KAAM7O,EAAO6O,KACbvE,YAAatK,EAAOsK,YACpB9R,KAAMwH,EAAOxH,KACbsW,YAAa9O,EAAO8O,gBAG1B,IAAK,sBACH,OAAO,6BACF/O,GADL,kBAEGC,EAAOjK,SAAU,UAACgK,EAAMC,EAAOjK,gBAAd,QAA0B,IAAIyL,KAAI,SAACuN,GACnD,OAAIA,EAAGF,OAAS7O,EAAO6O,KACd,6BAAKE,GAAZ,IAAgBC,uBAAwBhP,EAAOC,cAE1C8O,OAGb,IAAK,oBACH,OAAO,6BACFhP,GADL,kBAEGC,EAAOjK,SAAU,UAACgK,EAAMC,EAAOjK,gBAAd,QAA0B,IAAIyL,KAAI,SAACuN,GACnD,OAAIA,EAAGF,OAAS7O,EAAO6O,KACd,6BAAKE,GAAZ,IAAgBE,QAASjP,EAAOiP,UAE3BF,QC9CV,SAASG,GAAT,GAAmD,IAApB5H,EAAmB,EAAnBA,SACpC,EAAoC5G,KAA5B3K,EAAR,EAAQA,QAASyK,EAAjB,EAAiBA,eACXP,EAAcL,KACpB,EAA8BwD,GAAgB,gBAA9C,mBAAO+L,EAAP,KAAgBC,EAAhB,KACA,EAAiC7H,qBAC/BqH,GADyC,OAEzCO,QAFyC,IAEzCA,IAAWR,IAFb,mBAAO7N,EAAP,KAAqB0G,EAArB,KAKAlT,qBAAU,WACR8a,EAAWtO,KACV,CAACA,IAEJ,IAAMD,EAAiBuI,uBACrB,SAACiG,GACC7H,EAAS,CACPa,KAAM,oBACNtS,QAASsZ,EAAYtZ,QACrBuU,YAAa+E,EAAY/E,YACzB9R,KAAM6W,EAAY7W,KAClBqW,KAAMQ,EAAYR,KAClBC,YAAaQ,KAAKC,UAGtB,CAAC/H,IAoCH,OAjCAlT,qBAAU,WAAO,IAAD,EACTyB,GAAYyK,GAAmBP,IACpC,UAACa,EAAa/K,UAAd,QAA0B,IACvBgL,QAAO,SAACgO,GAAD,OAsCd,SAAqB9O,EAAqB8O,GACxC,GAAIA,EAAGE,QAAS,OAAO,EACvB,IAAKF,EAAGC,uBAAwB,OAAO,EACvC,IAAMQ,EAAmBvP,EAAc8O,EAAGC,uBAC1C,GAAIQ,EAAmB,EAAG,OAAO,EACjC,IAAMC,GAAkBH,KAAKC,MAAQR,EAAGD,aAAe,IAAO,GAC9D,GAAIW,EAAiB,GAEnB,OAAOD,EAAmB,EAE5B,GAAIC,EAAiB,EAEnB,OAAOD,EAAmB,EAG5B,OAAO,EArDaE,CAAYzP,EAAa8O,MACxCY,SAAQ,SAACZ,GACRvO,EACGoP,sBAAsBb,EAAGF,MACzB7E,MAAK,SAACiF,GAEHzH,EADEyH,EACO,CACP5G,KAAM,oBACNtS,UACA8Y,KAAME,EAAGF,KACTI,WAGO,CACP5G,KAAM,sBACNtS,UACA8Y,KAAME,EAAGF,KACT5O,mBAILgK,OAAM,SAACxJ,GACNyJ,QAAQzJ,MAAR,4CACuCsO,EAAGF,MACxCpO,WAIT,CAAC1K,EAASyK,EAAgBM,EAAcb,IAGzC,cAACW,GAAoB8D,SAArB,CACEvN,MAAO,CAAE2J,eAAcD,kBACvByG,SAAUA,IClET,SAASuI,GAAUC,GACxB,OACE,cAAC,GAAD,UAEE,cAACzI,GAAD,UACE,cAAC4B,GAAD,UACE,cAACiG,GAAD,UACE,eAAC,KAAD,WACE,cAACT,GAAD,IACCqB,EAAMxI,oBClBd,SAASyI,KAAe,IAAD,EACtB9P,EAAcL,KACdoQ,EvCeCnQ,qBAAWmB,IuCdZiP,EAAkB,OAAGD,QAAH,IAAGA,GAAH,UAAGA,EAAY7Y,aAAf,aAAG,EAAmB8I,YAExCiQ,EAAcD,IAAuBhQ,EACrCkQ,EAAYlQ,GAAegQ,GAAsB,EAEvD,OACE,eAAC,GAAD,WACE,cAACG,GAAD,UAAOD,IACND,EAAc,cAACG,GAAD,IAAc,cAACC,GAAD,OAKnC,I,GAAMC,GAAU9c,IAAOmI,IAAV,4JASPwU,GAAO3c,IAAO+c,KAAV,uFACOhR,GACND,IAIL8Q,GAAU5c,IAAOmI,IAAV,yVAMK2D,GAAeA,GAAeA,IAa1C+Q,GAAM7c,IAAOmI,IAAV,6GAIa2D,ICzDf,I,2BAAMkR,GAAMhd,IAAOmI,IAAV,oJCMH8U,GAAU,SAAC,GAA+B,IAA7BC,EAA4B,EAA5BA,QACxB,OAAIA,EAEA,eAACC,GAAD,WACE,cAACjc,EAAD,IACA,cAACkc,GAAD,UAAcF,OAIb,cAACC,GAAD,KAGHC,GAAcpd,IAAOmI,IAAV,ojBA8BXgV,GAAiBnd,IAAOmI,IAAV,sRAYRiV,ICtDCC,GAAe,SAAC,GAA8C,IAA5CC,EAA2C,EAA3CA,QAASzJ,EAAkC,EAAlCA,SAOtC,OAAO,cAAC0J,GAAD,CAASD,QANhB,SAA2B5N,GACrBA,EAAE8N,SAAW9N,EAAE+N,eACjBH,KAIG,SAAsCzJ,KAGzC0J,GAAUvd,IAAOmI,IAAV,4LCfAuV,GAAa1d,IAAO2d,GAAV,kIAKZ7R,ICSJ,SAAS8R,GAAT,GAOI,IANTC,EAMQ,EANRA,UACAC,EAKQ,EALRA,QACAC,EAIQ,EAJRA,MACAlK,EAGQ,EAHRA,SACAmK,EAEQ,EAFRA,KACAd,EACQ,EADRA,QAEMe,EAAiBtI,uBACrB,SAACuI,GACmB,WAAdA,EAAM7O,KACRyO,MAGJ,CAACA,IAYH,OATAjd,qBAAU,WACR,GAAIgd,EAEF,OADAtO,OAAO4O,iBAAiB,UAAWF,GAAgB,GAC5C,WACL1O,OAAO6O,oBAAoB,UAAWH,GAAgB,MAGzD,CAACJ,EAAWI,IAEXJ,EAEA,cAAC,GAAD,CAAcP,QAASQ,EAAvB,SACE,cAACO,GAAD,UACE,eAACC,GAAD,WACE,eAACtB,GAAD,WACE,cAACuB,GAAD,CAAYjB,QAASQ,EAArB,SACE,cAAC7e,EAAD,MAEF,cAACye,GAAD,UAAaK,IACb,cAAC,GAAD,CAASb,QAASA,OAEpB,cAACsB,GAAD,UAAe3K,IACdmK,GAAQ,cAACS,GAAD,UAAOT,WAMnB,KAGT,I,SAAMK,GAAere,IAAOmI,IAAV,6NAYZmW,GAAYte,IAAOmI,IAAV,qHAGC2D,IAIH2S,GAAOze,IAAOmI,IAAV,kJAMN2D,IAGL0S,GAAexe,IAAOmI,IAAV,mDAIZoW,GAAave,IAAO0e,OAAV,sFC/FH9B,GAAU5c,IAAO+c,KAAV,4aCab,SAAS4B,GAAT,GAAsD,IAA9Bb,EAA6B,EAA7BA,QAASD,EAAoB,EAApBA,UAC9BxQ,EAAiBH,KAAjBG,aACFuR,EAAWpe,mBAAQ,kBAAM,aAAI6M,GAActD,YAAW,CAACsD,IAE7D,OACE,eAACuQ,GAAD,CAAOC,UAAWA,EAAWE,MAAM,eAAeD,QAASA,EAA3D,UACuB,IAApBc,EAAS5a,QACR,+EAEF,cAAC6a,GAAD,UACGD,EAAS7Q,KAAI,SAACuN,GAAD,OACZ,cAACwD,GAAD,CAA+BxD,GAAIA,GAAbA,EAAGF,cAOnC,SAAS2D,GAAiBnD,EAAgCtZ,GACxD,OAAQA,GACN,KAAKR,EAAQE,QACX,MAAM,2BAAN,OAAkC4Z,EAAYR,MAChD,KAAKtZ,EAAQG,OACX,MAAM,kCAAN,OAAyC2Z,EAAYR,MACvD,KAAKtZ,EAAQI,QACX,MAAM,0BAAN,OAAiC0Z,EAAYR,MAC/C,QACE,MAAO,IAIb,SAAS0D,GAAT,GAA6D,IAAlCxD,EAAiC,EAAjCA,GACzB,EAAuCrO,KAA/B3K,eAAR,MAAkBM,EAAlB,EACA,OACE,eAACoc,GAAD,YACI1D,EAAGE,SAAW,cAAC,GAAD,IAAa,IAC7B,mBAAGyD,KAAMF,GAAiBzD,EAAIhZ,GAAUkb,OAAO,SAAS0B,IAAI,aAA5D,SACG5D,EAAGzE,iBAMZ,I,eAAMgI,GAAO7e,IAAOmf,GAAV,qFAMJH,GAAWhf,IAAOof,GAAV,oFAIDtT,ICrDN,SAASuT,GAAT,GAAsC,ICfdxS,EDeL1M,EAAkB,EAAlBA,QAClBmf,EAAalR,KACnB,EAAwBG,oBAAS,GAAjC,mBAAOgR,EAAP,KAAaC,EAAb,KAGMC,EAFmBvS,KAAjBG,aAE0BC,QAAO,SAAC5N,GAAD,OAAQA,EAAE8b,WAASxX,OAE5D,OACE,qCACE,eAAC0b,GAAD,WACGJ,GACC,cAACK,GAAD,UAAcL,EAAWM,qBAE3B,eAACC,GAAD,CAAavC,QAAS,kBAAMkC,GAAQ,IAApC,UACoB,IAAjBC,GACC,qCACE,cAACK,GAAD,WC/BiBjT,ED+BQ1M,EC9B/B,GAAN,OAAU0M,EAAQ9I,UAAU,EAAG,GAA/B,cAAuC8I,EAAQ9I,UAC7C8I,EAAQ7I,OAAS,OD8BP,cAAC9D,EAAD,CAAUC,QAASA,EAASC,KAAM,QAGrCqf,EAAe,GACd,qCACE,eAACK,GAAD,WAAUL,EAAV,cACA,cAACM,GAAD,aAKR,cAACpB,GAAD,CAAcd,UAAW0B,EAAMzB,QAAS,kBAAM0B,GAAQ,SAK5D,I,MAAME,GAAY1f,IAAOmI,IAAV,sMAUTwX,GAAc3f,IAAOmI,IAAV,kKAKN2D,IAIL+T,GAAc7f,IAAO0e,OAAV,0KAID5S,IAMVgU,GAAU9f,IAAO+c,KAAV,6GAIFjR,IAGLiU,GAAa/f,YAAO4c,GAAP5c,CAAH,8EAGL8L,I,+DE3EEkU,GAAgB,SAAC,GAAD,IAC3BC,EAD2B,EAC3BA,YACAC,EAF2B,EAE3BA,UACAC,EAH2B,EAG3BA,SACAtM,EAJ2B,EAI3BA,SACGwI,EALwB,0BAO3B,eAAC,GAAD,2BAAQ4D,YAAaA,EAAaE,SAAUA,GAAYD,GAAe7D,GAAvE,cACG6D,GAAa,qBAAKE,UAAU,WAC5BvM,OAIQwM,GAASrgB,IAAO0e,OAAV,sgDAIR,qBAAGuB,YAAiC,OAAS,UAC3C,qBAAGA,YAAiC,YAAc,MAIpDnU,GACKA,GAQHA,ICrCE,SAASwU,KACtB,MAAiCrT,KAAzB3K,EAAR,EAAQA,QAASwK,EAAjB,EAAiBA,YAEXyT,EAAe5K,uBAAY,SAACuI,GAChC,IAAMnD,EAAa5L,OAAO+O,EAAMV,OAAO9Z,OAEnCpB,IAAYyY,GACdjO,EAAYiO,KAEb,CAACzY,EAASwK,IAEb,OACE,cAAC0T,GAAD,CAAQC,SAAUF,EAAcG,aAAcpe,EAA9C,SACGH,EAAY4L,KAAI,SAACxL,GAChB,IAAMoe,EAAgBve,EAAeG,GAErC,GAAIoe,EAAe,CACjB,IAAQre,EAA2Bqe,EAA3Bre,QAASE,EAAkBme,EAAlBne,cAEjB,OACE,wBAAsBkB,MAAOpB,EAA7B,SAAuCE,GAA1BF,GAIjB,OAAO,UAMf,I,SAAMke,GAASxgB,IAAO4gB,OAAV,4QAQD9U,GACKA,IClCT,SAAS+U,KACd,MAA4D5T,KAApDP,EAAR,EAAQA,cAAeE,EAAvB,EAAuBA,iBAAkBC,EAAzC,EAAyCA,QAEzC,OAFA,EAAkDG,iBAE7BoN,KACZ,cAAC0G,GAAD,kCAGT,OAAIjU,QAAJ,IAAIA,KAAS1M,QAET,qCACE,cAACkf,GAAD,CAASlf,QAAS0M,EAAQ1M,UAC1B,cAAC4gB,GAAD,CAAYzD,QAAS1Q,EAArB,2BAMJ,qCACE,cAAC0T,GAAD,IACA,cAACU,GAAD,CAAS1D,QAAS5Q,EAAlB,oCAKN,I,GAAMsU,GAAUhhB,YAAOggB,GAAPhgB,CAAH,qEAKP+gB,GAAa/gB,YAAOggB,GAAPhgB,CAAH,qEAKV8gB,GAAe9gB,IAAOmI,IAAV,iQASI2D,ICtDP,OAA0B,iCCKlC,SAASmV,KACd,OAAO,cAACC,GAAD,CAAOC,IAAKC,KAGrB,I,SAAMF,GAAQlhB,IAAOqhB,IAAV,kDCDJ,SAASC,KACd,OACE,8BACE,eAACC,GAAD,WACE,cAACC,GAAD,UACE,cAACC,GAAD,CAAYC,GAAG,QAAf,SACE,cAACT,GAAD,QAGJ,cAACO,GAAD,UACE,cAACC,GAAD,CAAYC,GAAG,QAAf,oBAEF,cAACF,GAAD,UACE,cAACC,GAAD,CAAYC,GAAG,UAAf,gCAEF,cAACF,GAAD,UACE,cAACC,GAAD,CAAYC,GAAG,WAAf,4BAOV,I,GAAMH,GAAUvhB,IAAO2hB,GAAV,wEAKPH,GAAcxhB,IAAOof,GAAV,sEAMXqC,GAAazhB,YAAO4hB,KAAP5hB,CAAH,4HAGL8L,GAGEA,IC1CN,SAAS+V,KACd,OACE,eAACC,GAAD,WACE,cAACR,GAAD,IACA,cAACT,GAAD,OAKN,I,GAAMiB,GAAM9hB,IAAO+hB,OAAV,wJCZF,ICHKC,GCAAC,GFGCC,GAAiBliB,IAAO0e,OAAV,+RAIhB5S,K,SCPCkW,O,aAAAA,I,mBAAAA,I,qBAAAA,I,gBAAAA,Q,cCAAC,O,qBAAAA,I,yBAAAA,I,sBAAAA,Q,KCIL,I,eAAME,GAAO,yCAAG,WACrBvW,EACAzL,EACAuD,EACA0e,EACAC,EACAC,GANqB,kBAAA3V,EAAA,sEASnByV,EAAUJ,GAAkBO,QACP,OAArBF,QAAqB,IAArBA,KAAwBJ,GAAmBO,SAVxB,SAWO5W,EAAMuW,QAAQhiB,EAASuG,SAAMyM,WAAWzP,IAX/C,cAWbkY,EAXa,OAYnB0G,GAAkBA,EAAe1G,GAZd,SAaGA,EAAY6G,OAbf,OAabjH,EAba,OAcnB4G,EACE5G,EAAQkH,OAASV,GAAkBW,QAAUX,GAAkBY,MAEjEN,GAAkBA,OAAezb,GAjBd,kDAmBnB4P,QAAQzJ,MAAR,MACAoV,EAAUJ,GAAkBY,MAC5BN,GAAkBA,OAAezb,GArBd,0DAAH,gECAPgc,GAAK,yCAAG,WACnB/R,EACAgS,EACAC,EACA5iB,EACAiiB,EACAC,EACAC,GAPmB,kBAAA3V,EAAA,sEAUjByV,EAAUJ,GAAkBO,QAC5BF,EAAsBJ,GAAmBe,WAXxB,SAYSlS,EAAcmS,cACtCvc,SAAMyM,WAAW2P,GACjBC,EACA5iB,GAfe,cAYXyb,EAZW,OAiBjB0G,GAAkBA,EAAe1G,GAjBhB,SAkBKA,EAAY6G,OAlBjB,OAkBXjH,EAlBW,OAmBjB4G,EACE5G,EAAQkH,OAASV,GAAkBW,QAAUX,GAAkBY,MApBhD,kDAuBjBR,EAAUJ,GAAkBY,MAvBX,0DAAH,kECALM,GAAO,yCAAG,WACrBlS,EACA8R,EACAV,EACAC,EACAC,GALqB,kBAAA3V,EAAA,sEAQnByV,EAAUJ,GAAkBO,QAC5BF,EAAsBJ,GAAmBkB,SATtB,SAUOnS,EAASoS,aAAa1c,SAAMyM,WAAW2P,IAV9C,cAUblH,EAVa,OAWnB0G,GAAkBA,EAAe1G,GAXd,SAYGA,EAAY6G,OAZf,OAYbjH,EAZa,OAanB4G,EACE5G,EAAQkH,OAASV,GAAkBW,QAAUX,GAAkBY,MAd9C,kDAiBnBnM,QAAQzJ,MAAR,MACAoV,EAAUJ,GAAkBY,MAlBT,0DAAH,8DCDPS,GAAQ,yCAAG,WACtBrS,EACA8R,EACAV,GAHsB,kBAAAzV,EAAA,sEAMpByV,EAAUJ,GAAkBO,QANR,SAOMvR,EAASsS,gBACjC5c,SAAMyM,WAAW2P,IARC,cAOdlH,EAPc,gBAUEA,EAAY6G,OAVd,OAUdjH,EAVc,OAWpB4G,EACE5G,EAAQkH,OAASV,GAAkBW,QAAUX,GAAkBY,MAZ7C,kDAepBR,EAAUJ,GAAkBY,MAfR,0DAAH,0DCIRW,GAAoB,yCAAG,WAClCvS,EACAoR,GAFkC,oBAAAzV,EAAA,sEAKhCyV,EAAUJ,GAAkBO,QALI,SAMNvR,EAASwS,YAAYC,cAAa,EAAO,GANnC,cAM1BC,EAN0B,gBAON1S,EAASyS,cAAa,EAAO,EAAG,CACxDE,SAAUD,EAAYpQ,IAVO,OAEC,cAO1BsI,EAP0B,iBAUVA,EAAY6G,OAVF,QAU1BjH,EAV0B,OAWhC4G,EACE5G,EAAQkH,OAASV,GAAkBW,QAAUX,GAAkBY,MAZjC,kDAehCnM,QAAQzJ,MAAR,MACAoV,EAAUJ,GAAkBY,MAhBI,0DAAH,wDAoBpBgB,GAA4B,yCAAG,WAC1C5S,EACA+R,EACAX,GAH0C,kBAAAzV,EAAA,sEAMxCyV,EAAUJ,GAAkBO,QANY,SAOdvR,EAASyS,cAAa,EAAMV,EAAQ,CAC5DY,SAhCmC,MAwBG,cAOlC/H,EAPkC,gBAUlBA,EAAY6G,OAVM,OAUlCjH,EAVkC,OAWxC4G,EACE5G,EAAQkH,OAASV,GAAkBW,QAAUX,GAAkBY,MAZzB,kDAexCnM,QAAQzJ,MAAR,MACAoV,EAAUJ,GAAkBY,MAhBY,0DAAH,0DCTpB5iB,IAAOmI,IAAV,kDACF,SAACkU,GAAD,OAAYA,EAAMwH,OAAS,QAAU,UCnB9C,SAASC,GAAYC,EAAqBC,GAC/C,OAAQ7U,OAAOrF,WAAWia,GAAeC,GAAQ9e,WCE5C,I,qBAAM+e,GAAUjkB,IAAOmI,IAAV,iGAEE2D,IAIToY,GAAelkB,IAAOmkB,EAAV,sFAGdrY,IAGEsY,GAAqBpkB,YAAOkkB,GAAPlkB,CAAH,4CACpB8L,IAGEuY,GAAarkB,IAAOmI,IAAV,wECRVmc,GAA+C,SAAC,GAAD,IAC1D7V,EAD0D,EAC1DA,IACA/K,EAF0D,EAE1DA,MAF0D,OAI1D,eAAC,GAAD,WACE,cAAC,GAAD,CAAQkR,KAAK,SAAS0I,QAAS,kBAAM7O,EAAIqV,GAAYpgB,GAAQ,KAA7D,eAGA,cAAC6gB,GAAD,CACE3P,KAAK,SACL4P,IAAI,IACJC,IAAI,KACJ/gB,MAAOA,EACP+c,SAAU,SAAC/Q,GAAD,OAAOjB,EAAIiB,EAAE8N,OAAO9Z,UAEhC,cAAC,GAAD,CAAQkR,KAAK,SAAS0I,QAAS,kBAAM7O,EAAIqV,GAAYpgB,EAAO,KAA5D,mBAMEoZ,GAAU9c,YAAOikB,GAAPjkB,CAAH,oHAOPukB,GAAmBvkB,IAAO0kB,MAAV,oWAMX5Y,IAaLuU,GAASrgB,IAAO0e,OAAV,6KAID5S,IC5DE6Y,GAAgB3kB,IAAOmI,IAAV,+GCEnB,SAASyc,KACd,OACE,cAACD,GAAD,UACE,cAAC9D,GAAD,MCJC,I,SAAMgE,GAAiB7kB,IAAOmI,IAAV,mOAWd2c,GAAc9kB,YAAO6kB,GAAP7kB,CAAH,kDAIX+kB,GAAc/kB,IAAOmkB,EAAV,iIAKbrY,ICnBJ,SAASkZ,KACd,OACE,cAACF,GAAD,UACE,cAACV,GAAD,oCCJC,I,gDAAMa,GAAQjlB,IAAOmI,IAAV,0QAIZ2D,GAKKA,IAGEoZ,GAAallB,IAAOmI,IAAV,6QAYVgd,GAAWnlB,YAAOklB,GAAPllB,CAAH,mDChBRolB,GAAU,SAAC,GAAD,IAAGC,EAAH,EAAGA,MAAO3hB,EAAV,EAAUA,MAAO0c,EAAjB,EAAiBA,UAAjB,OACrB,eAACpD,GAAD,CAAKoD,UAAWA,EAAhB,UACE,cAACkF,GAAD,UAAQD,IACR,cAACE,GAAD,UAAQ7hB,QAIN4hB,GAAQtlB,IAAOmkB,EAAV,sFAGArY,IAGLyZ,GAAQvlB,IAAOmI,IAAV,iIAKA2D,ICFE0Z,GAAoC,SAAC,GAIH,IAH7C3H,EAG4C,EAH5CA,UACAC,EAE4C,EAF5CA,QACA2H,EAC4C,EAD5CA,gBAEQzU,EAAaX,KAAbW,SACR,EAA4BzC,mBAASyT,GAAkB0D,KAAvD,mBAAOhD,EAAP,KAAeN,EAAf,KACA,EAAkCnT,GClCF,IDkChC,mBAAO0W,EAAP,KAAkBC,EAAlB,KAEMC,EAAUnD,IAAWV,GAAkBW,QACvCmD,EAAWpD,IAAWV,GAAkBO,OACxCwD,EAAMxT,GAAsBoT,GAAW,GACvCK,EpD5BD,WACL,MAAgD/Y,KAAhD,IAAQ3K,eAAR,MAAkBM,EAAlB,EAAoCiK,EAApC,EAAoCA,QAC9BmB,EAAON,KACTb,GAAW,CACX1M,QAAS4C,EAAuBT,GAChC0L,KAAMiE,GAAgB5D,mBAPP,gCAOwC,CAACxB,EAAQ1M,YAGpE,OAAOK,mBAAQ,mBAAOwN,IAAQlJ,IAAUC,KAAKiJ,GAAM1J,GAAG,KAAa,CAAC0J,IoDoB3CiY,GAMzB,OALAplB,qBACE,kBAAO6hB,IAAWV,GAAkBW,QAAU7E,SAAYjX,IAC1D,CAAC6b,IAID,eAAC9E,GAAD,CACEC,UAAWA,EACXC,QAASA,EACTC,MAAM,mCAHR,UAKE,cAAC,GAAD,CAASsH,MAAM,cAAc3hB,MAAO,8BAAI+hB,EAAJ,aAElCO,EAwBA,cAACE,GAAD,gMAvBA,qCACE,eAACC,GAAD,WACE,cAAC,GAAD,CAAoBziB,MAAOiiB,EAAWlX,IAAKmX,IAC3C,cAACQ,GAAD,wBAEF,eAAC,GAAD,WACE,cAACllB,EAAD,IACA,cAACmlB,GAAD,uDAEF,eAACH,GAAD,WACE,eAACI,GAAD,WAAcP,EAAMtf,GAAUsf,GAAO,OAArC,UADF,qKAI8B,IAC5B,cAACQ,GAAD,CACEtH,KAAK,sFACLzB,OAAO,SAFT,8BAeN,cAACgJ,GAAD,CACEvG,aAAW,EACXE,SAAU6F,EAAmBH,EAAUA,GAAyB,MAAdF,EAClDzF,UAAW4F,EACXxI,QAAS,kBACPsG,GAA6B5S,EAAU2U,EAAWvD,IALtD,SAQGyD,EACG,QACAC,EACA,aACAE,EACA,eACA,UAELtD,IAAWV,GAAkBY,MAAQ,cAACoC,GAAD,QAKtCwB,GAAcxmB,YAAOggB,GAAPhgB,CAAH,mDAIXye,GAAOze,IAAOmI,IAAV,gGAMJke,GAAWrmB,IAAOmkB,EAAV,2GAIHrY,IAGLoa,GAAUlmB,YAAOikB,GAAPjkB,CAAH,wLAOF8L,IAGLwa,GAActmB,YAAOilB,GAAPjlB,CAAH,yIAQXmmB,GAAanmB,IAAOmI,IAAV,4IAQVie,GAAapmB,IAAOmkB,EAAV,iIAKLrY,IAGLya,GAAWvmB,IAAO2M,EAAV,6GAIHb,IE/IE2a,GAA4B,SAAC,GAIH,IAHrC5I,EAGoC,EAHpCA,UACAC,EAEoC,EAFpCA,QACA2H,EACoC,EADpCA,gBAEQzU,EAAaX,KAAbW,SACR,EAA4BzC,mBAASyT,GAAkB0D,KAAvD,mBAAOhD,EAAP,KAAeN,EAAf,KAEMyD,EAAUnD,IAAWV,GAAkBW,QACvCmD,EAAWpD,IAAWV,GAAkBO,OAE9C,OACE,eAAC3E,GAAD,CACEC,UAAWA,EACXC,QAASA,EACTC,MAAM,yBAHR,UAKE,cAAC,GAAD,CAASsH,MAAM,cAAc3hB,MAAO,8BAAI+hB,EAAJ,aACpC,cAAC,GAAD,CACExF,aAAW,EACXE,SAAU0F,EACV3F,UAAW4F,EACXxI,QAAS,kBAAMiG,GAAqBvS,EAAUoR,IAJhD,SAMGyD,EAAU,QAAUC,EAAW,cAAgB,UAEjDpD,IAAWV,GAAkBY,MAAQ,cAACoC,GAAD,QAKtCwB,GAAcxmB,YAAOggB,GAAPhgB,CAAH,mDC/CF,4kCCAA,4tFCAA,4qBCAA,w5CCAA,41BCAA,4vCCUF0mB,GAAc,SAAC,GAAD,IAAGpkB,EAAH,EAAGA,QAAH,OACzB,eAACqkB,GAAD,WACE,qBAAKxF,IAAKyF,GAAYC,IAAI,YAAYC,OAAQC,KAC7CzkB,IAAYR,EAAQI,QACnB,qBAAKif,IAAK6F,GAAWH,IAAI,WAAWC,OAAQG,KAE5C,qBAAK9F,IAAK+F,GAAWL,IAAI,WAAWC,OAAQK,KAG9C,eAAC,GAAD,mBAAYhd,GAAuB,OAAC7H,QAAD,IAACA,IAAWM,GAAkBS,cAIxD+jB,GAAY,kBACvB,eAACT,GAAD,WACE,qBAAKxF,IAAK6F,GAAWH,IAAI,WAAWC,OAAQG,KAC5C,cAAC,GAAD,uBAISI,GAAY,kBACvB,eAACV,GAAD,WACE,qBAAKxF,IAAK+F,GAAWL,IAAI,WAAWC,OAAQK,KAC5C,cAAC,GAAD,uBAISG,GAAa,kBACxB,eAACX,GAAD,WACE,qBAAKxF,IAAKyF,GAAYC,IAAI,YAAYC,OAAQC,KAC9C,cAAC,GAAD,uBAISQ,GAAe,SAAC,GAAD,SAAGjlB,UAAiDR,EAAQI,QAAU,cAAC,GAAD,IAAgB,cAAC,GAAD,KAE5GykB,GAAiB3mB,IAAOmI,IAAV,8GASdwU,GAAO3c,IAAOmkB,EAAV,8JAKCrY,ICzDE0b,GAAQxnB,IAAO0kB,MAAV,kPAYL5Y,ICNPuG,GAAoB,IAAIlE,aAAU8C,GAASN,KAG1C,SAAS8W,KACd,MAAuCxa,KAA/B3K,eAAR,MAAkBM,EAAlB,EACM8kB,EAAepV,KACftE,EAAON,KACTga,GAAgB,CAChBvnB,QAAS6C,EAAiBV,GAC1B0L,KAAMqE,GAAkBhE,mBART,wBAQ0C,CAACqZ,MAG9D,OAAOlnB,mBAAQ,kBAAOwN,EAAOlJ,IAAUC,KAAKiJ,QAAQnH,IAAY,CAACmH,ICf5D,SAAS2Z,KACd,IAAMzgB,EAAUugB,KAEhB,OACE,eAAC5C,GAAD,WACE,cAACT,GAAD,2CACA,cAACW,GAAD,qIAIA,eAACA,GAAD,iDACsC,IACnC7d,EAAUD,GAAoBC,EAAQqB,YAAc,UCWtD,I,iCAAMqf,GAAgB,SAAC,GAAgD,IAA9C/J,EAA6C,EAA7CA,UAAWC,EAAkC,EAAlCA,QACzC,EAAuC7Q,KAA/B3K,eAAR,MAAkBM,EAAlB,EACA,EAA4B0L,GAAe,IAA3C,mBAAOwU,EAAP,KAAe+E,EAAf,KACMnkB,EAAQlD,mBACZ,kBACEsiB,EACI,IAAItf,EAAcuH,GAAczI,GAAUoE,SAAMyM,WAAW2P,SAC3Djc,IACN,CAACic,IAEGgF,EAAiBvW,KACvB,EAA4BhD,mBAASyT,GAAkB0D,KAAvD,mBAAOhD,EAAP,KAAeN,EAAf,KACM0D,EAAWtlB,mBAAQ,kBAAMkiB,IAAWV,GAAkBO,SAAQ,CAACG,IAC7D1R,EAAaX,KAAbW,SACF+W,EnEhCD,WACL,MAAuC9a,KAA/B3K,eAAR,MAAkBM,EAAlB,EACM8kB,EAAepV,KACftE,EAAON,KACTga,GAAgB,CAChBvnB,QAAS6C,EAAiBV,GAC1B0L,KAAMqE,GAAkBhE,mBAAmBoD,GAAc,CAACiW,MAG9D,OAAOlnB,mBACL,kBACEwN,EACIqE,GAAkBV,qBAAqBF,GAAczD,GAAM,QAC3DnH,IACN,CAACmH,ImEkBuBga,GAM1B,OALAnnB,qBACE,kBAAO6hB,IAAWV,GAAkBW,QAAU7E,SAAYjX,IAC1D,CAAC6b,IAID,eAAC9E,GAAD,CAAOC,UAAWA,EAAWC,QAASA,EAASC,MAAM,aAArD,UACE,eAACkK,GAAD,+BACmB,sCAAOH,QAAP,IAAOA,OAAP,EAAOA,EAAgBlI,wBAE1C,eAACqE,GAAD,WACE,cAACjH,GAAD,UACE,eAACqH,GAAD,WACE,cAACH,GAAD,qBACA,cAACiB,GAAD,CACE7H,QACEwK,EACI,kBAAMD,EAAS,OAACC,QAAD,IAACA,OAAD,EAACA,EAAgB5iB,kBAChC2B,EAJR,sBAWJ,eAACmW,GAAD,WACE,cAACwK,GAAD,CACE5S,KAAK,OACLlR,MAAOof,GAAU,EACjBrC,SAAU,SAAC/Q,GAAD,OAAOmY,EAAUnY,EAAE8N,OAAO9Z,UAEtC,cAAC,GAAD,CAAapB,QAASA,UAGxBylB,EAAyC,cAACG,GAAD,IAArB,cAACP,GAAD,IACtB,cAAC,GAAD,CACE1H,aAAW,EACXC,UAAW4F,EACX3F,UACGhR,OAAOrF,WAAWgZ,IACnBgD,IACCnf,GAAoBmhB,EAAgBpkB,GAEvC4Z,QAAS,kBAAM+F,GAASrS,EAAU8R,EAAQV,IAR5C,SAUG0D,EAAW,6BAA+B,aAE5CpD,IAAWV,GAAkBY,MAAQ,cAACoC,GAAD,QAKtCiD,GAAiBjoB,IAAOmkB,EAAV,6KAYd+D,GAASloB,YAAOgd,GAAPhd,CAAH,sDC1FL,SAASmoB,KAAgB,IAAD,IACrB7lB,EAAY2K,KAAZ3K,QACF8lB,EAAcjY,KACdkY,EAAeja,KACfka,EAAiBlY,KACjBmY,E3ERD,WACL,MAAgDtb,KAAhD,IAAQ3K,eAAR,MAAkBM,EAAlB,EAAoCiK,EAApC,EAAoCA,QAC9BmB,EAAON,KACTb,GAAW,CACX1M,QAAS4C,EAAuBT,GAChC0L,KAAMiE,GAAgB5D,mBAAmB,6BAA8B,CACrExB,EAAQ1M,YAId,OAAOK,mBACL,uBACWqG,IAATmH,EACI,IAAIxK,EAAcuH,GAAczI,GAAUwC,IAAUC,KAAKiJ,SACzDnH,IACN,CAACmH,I2EPiBwa,GACdC,EAAiBlX,KACjBmX,ErEVD,WACL,MAAgDzb,KAAhD,IAAQ3K,eAAR,MAAkBM,EAAlB,EAAoCiK,EAApC,EAAoCA,QAC9BmB,EAAON,KACTb,GAAW,CACX1M,QAAS6C,EAAiBV,GAC1B0L,KAAMqE,GAAkBhE,mBAAmBoD,GAAc,CACvD5E,EAAQ1M,YAId,OAAOK,mBAAQ,WACb,QAAaqG,IAATmH,EAAoB,CACtB,MAAsBqE,GAAkBV,qBACtCF,GACAzD,GAFK2a,EAAP,oBAIA,OAAO,IAAInlB,EAAcuH,GAAczI,GAAUqmB,MAGlD,CAAC3a,IqET6B4a,GAGjC,GCnBa,WACb,MAAgD3b,KAAhD,IAAQ3K,eAAR,MAAkBM,EAAlB,EAAoCiK,EAApC,EAAoCA,QAC5BuE,EAAsBf,KAAtBe,kBAGR,IACE,IAAMpD,EAAON,KACTb,GAAW,CACX1M,QAASiR,EAAkBjR,QAC3B6N,KAAMoD,EAAkByX,UAAUxa,mBAAmB,WAAY,CAC/DxB,EAAQ1M,YAKPK,mBACL,uBACWqG,IAATmH,EACI,IAAIxK,EAAckI,GAAcpJ,GAAUwC,IAAUC,KAAKiJ,SACzDnH,IACN,CAACmH,IAEH,MAAO0B,GACP,OAAO,IAAIlM,EAAckI,GAAcpJ,GAAUwC,IAAUC,KAAK,ODNjC+jB,GAEWva,oBAAS,IAArD,mBAAOwa,EAAP,KAAuBC,EAAvB,KACA,EAA4Dza,oBAAS,GAArE,mBAAO0a,EAAP,KAA+BC,EAA/B,KACA,EAA4D3a,oBAAS,GAArE,mBAAO4a,EAAP,KAA+BC,EAA/B,KAEA,OACE,eAACC,GAAD,WACE,cAAC,GAAD,8BACA,cAACC,GAAD,UACE,eAACC,GAAD,WACE,cAACC,GAAD,iBAAapB,QAAb,IAAaA,OAAb,EAAaA,EAAahf,WAC1B,cAACqgB,GAAD,wBAGJ,eAACF,GAAD,WACE,cAACG,GAAD,iBAASrB,QAAT,IAASA,OAAT,EAASA,EAAcjf,WACvB,cAACqgB,GAAD,UAAiBtf,GAAuB,OAAC7H,QAAD,IAACA,IAAWM,GAAkBS,YAExE,eAACkmB,GAAD,WACE,cAACG,GAAD,iBAASpB,QAAT,IAASA,OAAT,EAASA,EAAgBlf,WACzB,eAACqgB,GAAD,mBAAsBtf,GAAuB,OAAC7H,QAAD,IAACA,IAAWM,GAAkBS,OAA3E,YAEF,cAACsmB,GAAD,UACE,eAAC,GAAD,WACE,eAACJ,GAAD,WACE,cAACG,GAAD,iBAASnB,QAAT,IAASA,OAAT,EAASA,EAAanf,WACtB,cAACqgB,GAAD,sBAEF,cAAC,GAAD,mCAGJ,eAACE,GAAD,WACE,eAAC,GAAD,WACE,eAACJ,GAAD,WACE,cAACG,GAAD,iBAASjB,QAAT,IAASA,OAAT,EAASA,EAAgBrf,WACzB,eAACqgB,GAAD,mBAAsBtf,GAAuB,OAAC7H,QAAD,IAACA,IAAWM,GAAkBS,OAA3E,YAEF,cAAC,GAAD,kCAEF,cAACumB,GAAD,CACEtM,QAAS,kBAAM8L,GAA0B,IACzCjJ,SAAQ,OAAEsI,QAAF,IAAEA,OAAF,EAAEA,EAAgB/kB,MAAMY,GAAG,GAFrC,sBAMA,cAAC,GAAD,CACEuZ,UAAWsL,EACXrL,QAAS,kBAAMsL,GAA0B,SAG7C,cAACO,GAAD,UACE,eAAC,GAAD,WACE,eAACJ,GAAD,WACE,cAACG,GAAD,iBAAShB,QAAT,IAASA,OAAT,EAASA,EAA0Btf,WACnC,cAACqgB,GAAD,sBAEF,cAAC,GAAD,oCAIJ,eAACI,GAAD,WACE,cAAC3H,GAAD,CACE5E,QAAS,kBAAM0L,GAAkB,IACjC7I,SAAQ,OAAEuI,QAAF,IAAEA,OAAF,EAAEA,EAA0BhlB,MAAMY,GAAG,GAF/C,mBAMA,cAAC4d,GAAD,CACE5E,QAAS,kBAAM4L,GAA0B,IACzC/I,SAAQ,OAAEuI,QAAF,IAAEA,OAAF,EAAEA,EAA0BhlB,MAAMY,GAAG,GAF/C,sBAOF,cAAC,GAAD,CACEuZ,UAAWkL,EACXjL,QAAS,kBAAMkL,GAAkB,IACjCvD,gBAAe,iBAAEiD,QAAF,IAAEA,OAAF,EAAEA,EAA0Btf,gBAA5B,QAAwC,KAEzD,cAAC,GAAD,CACEyU,UAAWoL,EACXnL,QAAS,kBAAMoL,GAA0B,IACzCzD,gBAAe,iBAAEiD,QAAF,IAAEA,OAAF,EAAEA,EAA0Btf,gBAA5B,QAAwC,QAM/D,I,GAAMigB,GAAarpB,IAAOmI,IAAV,oMAKA2D,IAKVwd,GAAoBtpB,IAAOmI,IAAV,sDAIjBohB,GAAkBvpB,IAAOmI,IAAV,iHASfmd,GAAQtlB,IAAOmkB,EAAV,uGAGArY,IAIL2d,GAAiBzpB,YAAOslB,GAAPtlB,CAAH,4DAIdwpB,GAAaxpB,IAAOmkB,EAAV,sIAQVuF,GAAS1pB,IAAOmkB,EAAV,iIAKDrY,IAGL6d,GAAQ3pB,IAAOmI,IAAV,mOAaLyhB,GAAiB5pB,YAAOkiB,GAAPliB,CAAH,6FAMdgd,GAAMhd,IAAOmI,IAAV,oJAUH0hB,GAAa7pB,IAAOmI,IAAV,iLE5LT,SAAS2hB,KAEd,OADoB7c,KAAZJ,QAID,cAACsb,GAAD,IAFE,cAAC4B,GAAD,gEAKX,I,SAAMA,GAAQ/pB,IAAOgqB,GAAV,0JAMAle,ICbEgR,GAAU,SAAC,GAAD,IAAGjJ,EAAH,EAAGA,SAAH,OACrB,cAACoW,GAAD,UACE,cAAC,GAAD,UAAYpW,OAIVoW,GAAgBjqB,IAAOmI,IAAV,2EAKbuX,GAAY1f,IAAOmI,IAAV,2FCNR,SAAS+hB,GAAT,GAAoC,IAApBrW,EAAmB,EAAnBA,SACrB,OACE,eAAC,GAAD,WACE,cAACgO,GAAD,IACA,eAACsI,GAAD,WACE,cAACL,GAAD,IACCjW,KAGH,cAACyI,GAAD,OAKN,I,MAAM6N,GAAanqB,IAAOmI,IAAV,+HCxBKnI,IAAOgqB,GAAV,kGCMLhqB,IAAOmI,IAAV,8LAOO4D,GACND,IARX,I,oCCRe,OAA0B,kCCA1B,OAA0B,iCCA1B,OAA0B,mCCSlC,SAASse,KACd,OACE,eAACC,GAAD,WACE,eAACC,GAAD,WACE,eAACC,GAAD,WACE,qBAAKpJ,IAAKqJ,GAAW3D,IAAI,UACzB,cAAC4D,GAAD,qCACA,8BACE,cAACxF,GAAD,8BAGJ,eAACyF,GAAD,WACE,eAACC,GAAD,WACE,cAACC,GAAD,8WAGA,eAAC,GAAD,WACE,cAAC,GAAD,4JAGA,cAAC,GAAD,oHAKJ,gCACE,cAAC,GAAD,CACE3L,KAAK,yFACLzB,OAAO,SAFT,2BAMA,cAAC,GAAD,CAAQkE,GAAG,UAAX,8BAIN,eAAC4I,GAAD,WACE,eAACC,GAAD,WACE,qBAAKpJ,IAAK0J,GAAYhE,IAAI,UAC1B,cAAC4D,GAAD,+BAEF,eAACC,GAAD,WACE,eAACC,GAAD,WACE,cAACC,GAAD,iEAGA,eAAC,GAAD,WACE,cAAC,GAAD,qFAGA,cAAC,GAAD,+DAKJ,gCACE,cAAC,GAAD,CACE3L,KAAK,sFACLzB,OAAO,SAFT,2BAMA,cAAC,GAAD,CAAQkE,GAAG,WAAX,+BAQZ,I,qBAAM2I,GAAiBrqB,IAAOmI,IAAV,oEAgBdmiB,IAXmBtqB,IAAOmI,IAAV,+KAWPnI,IAAOmI,IAAV,iIAQNoiB,GAAevqB,IAAOmI,IAAV,+FAMZsiB,GAAczqB,IAAO2d,GAAV,qIAKN7R,IAGL4e,GAAY1qB,IAAOmI,IAAV,6GAMTwiB,GAAoB3qB,IAAOmI,IAAV,0EAKjByiB,GAAa5qB,IAAOmkB,EAAV,uGAGLrY,IAIL+S,GAAO7e,IAAO2hB,GAAV,mDAIJ3C,GAAWhf,IAAOof,GAAV,iYAkBQ0L,IAKhBvE,GAAWvmB,IAAO2M,EAAV,wJAMHb,IAGLuU,GAASrgB,YAAO+qB,KAAP/qB,CAAH,4PASD8L,ICjLEkf,GAAYhrB,IAAOgqB,GAAV,kIAKXle,ICLEmf,GAAejrB,IAAOmkB,EAAV,uGAGdrY,ICKLof,IAAa,qBAChBppB,EAAQE,QAAU,CAAEmpB,IAAK,uBAAwB/nB,KAAM,cADvC,eAEhBtB,EAAQG,OAAS,CAAEkpB,IAAK,8BAA+B/nB,KAAM,eAF7C,eAGhBtB,EAAQgB,QAAU,CAAEqoB,IAAK,GAAI/nB,KAAM,KAHnB,eAIhBtB,EAAQI,QAAU,CAAEipB,IAAK,sBAAuB/nB,KAAM,YAJtC,IAOZ,SAASgoB,GAAT,GAAsD,IClBjCjrB,EDkBMyb,EAA0B,EAA1BA,YAC1BtZ,EACJsZ,EAAYtZ,WAAW4oB,GAAgBtP,EAAYtZ,QAAUR,EAAQE,QACvE,EAAwBuM,oBAAS,GAAjC,mBAAOyP,EAAP,KAAaqN,EAAb,KAKA,OAJAxqB,qBAAU,WACR,IAAM0T,EAAUC,YAAW,kBAAM6W,GAAQ,KAAO,MAChD,OAAO,kBAAM5W,aAAaF,MACzB,CAACqH,IAEF,eAAC0P,GAAD,WACE,eAAC,GAAD,0BACe1P,EAAYR,OC7BLjb,ED6ByByb,EAAYR,KC5BzD,GAAN,OAAUjb,EAAQ4D,UAAU,EAAG,GAA/B,cAAuC5D,EAAQ4D,UAC7C5D,EAAQ6D,OAAS,QD6Bf,eAAC,GAAD,CACEwZ,OAAO,SACPyB,KACErD,EAAYR,MAAZ,UACG8P,GAAc5oB,GAAS6oB,IAD1B,eACoCvP,EAAYR,MAJpD,qBAOW8P,GAAc5oB,GAASc,QAEjC4a,GACC,cAAC,GAAD,+GASR,I,MAAMsN,GAActrB,IAAOmI,IAAV,iOAWXmd,GAAQtlB,YAAOkkB,GAAPlkB,CAAH,iDAIL2c,GAAO3c,IAAOmkB,EAAV,gHAOJoC,GAAWvmB,IAAO2M,EAAV,6GAIHb,IEnELyf,GAAqB,IAAIpd,KAAU6B,IAElC,SAASwb,GAAkB5f,EAAc6f,GAC9C,MAAgDxe,KAAhD,IAAQ3K,eAAR,MAAkBM,EAAlB,EAAoCiK,EAApC,EAAoCA,QAEpC,IACE,IAAMmB,EAAON,KACTb,GACAjB,EAAMtJ,UAAYA,GAAW,CAC3BnC,QAASyL,EAAMzL,QACf6N,KAAMud,GAAmBld,mBAAmB,YAAa,CACvDxB,EAAQ1M,QACRsrB,MAKR,OAAOjrB,mBACL,uBACWqG,IAATmH,EACI,IAAIxK,EAAcoI,EAAO9G,IAAUC,KAAKiJ,SACxCnH,IACN,CAACmH,IAEH,MAAO0B,GACP,OAAO,IAAIlM,EAAcoI,EAAO9G,IAAUC,KAAK,OC7B5C,SAAS2mB,KACd,IAAMjD,EAAiBlX,KACjBoa,EjFSD,WACL,MAAuC1e,KAA/B3K,eAAR,MAAkBM,EAAlB,EACM8P,EAAQJ,KACRtE,EAAON,KACTgF,GAAS,CACTvS,QAAS6C,EAAiBV,GAC1B0L,KAAMqE,GAAkBhE,mBAAmB,4BAA6B,CACtEqE,MAIN,OAAOlS,mBACL,kBACEwN,GACA,IAAIxK,EAAcuH,GAAczI,GAAUwC,IAAUC,KAAKiJ,GAAM7F,IAAI,MACrE,CAAC6F,IiFxBc4d,GAEjB,OACE,qCACE,cAAC,GAAD,CACEvG,MAAM,kBACN3hB,OAAqB,OAAd+kB,QAAc,IAAdA,OAAA,EAAAA,EAAgB7I,qBAAsB,MAE/C,cAAC,GAAD,CACEyF,MAAM,eACN3hB,MAAOioB,GAAQ,UAAOA,EAAS/L,mBAAhB,gBCsBhB,I,SAAMiM,GAAe,SAAC,GAA+C,IAA7ChO,EAA4C,EAA5CA,UAAWC,EAAiC,EAAjCA,QACxC,EAA6B7Q,KAArBJ,EAAR,EAAQA,QAASvK,EAAjB,EAAiBA,QACjB,EAA0BgM,GAAe,IAAzC,mBAAO5K,EAAP,KAAc8K,EAAd,KACMsd,EAAiB1b,KACvB,EAA4B7B,mBAASyT,GAAkB0D,KAAvD,mBAAOhD,EAAP,KAAeN,EAAf,KACA,EAAoD7T,qBAApD,mBAAOwd,EAAP,KAA2B1J,EAA3B,KAGA,EAA8BhS,KAAtBO,EAAR,EAAQA,QAASI,EAAjB,EAAiBA,SACXgb,ECxCD,WACL,MAAuC/e,KAA/B3K,eAAR,MAAkBM,EAAlB,EAGA,OAAO4oB,GAFS9f,GAAcpJ,GACbU,EAAiBV,IDqChB2pB,GAClB,EAA0C1d,mBACxC,MADF,mBAAOrK,EAAP,KAAsBgoB,EAAtB,KAGArrB,qBACE,kBACEyB,GACA4pB,EAAiB1oB,EAAc2oB,WAAWzgB,GAAcpJ,GAAUoB,MACpE,CAACA,IAEH,IAAMoiB,EAAWpD,IAAWV,GAAkBO,OAC9C1hB,qBACE,kBACEkrB,GAAsB9J,GAAmBkB,SACzCT,GAAUV,GAAkBW,QACxB7E,SACAjX,IACN,CAAC6b,IAEH,MAAsCnU,qBAAtC,mBAAOqN,EAAP,KAAoB0G,EAApB,KAEA,OACE,eAAC1E,GAAD,CACEC,UAAWA,EACXC,QAASA,EACTC,MAAM,mBAHR,UAKE,eAACkG,GAAD,WACE,eAACjH,GAAD,WACE,eAACqH,GAAD,WACE,cAACH,GAAD,qBACA,cAACiB,GAAD,CACE7H,QAAS,kBAAM9O,GAAuB,OAAdsd,QAAc,IAAdA,OAAA,EAAAA,EAAgB5mB,aAAc,KADxD,oBAMF,eAACgf,GAAD,8BAAwB4H,QAAxB,IAAwBA,OAAxB,EAAwBA,EAAgB1iB,eAE1C,eAAC4T,GAAD,WACE,cAACwK,GAAD,CACE5S,KAAK,OACLlR,MAAOA,GAAS,EAChB+c,SAAU,SAAC/Q,GAAD,OAAOlB,EAASkB,EAAE8N,OAAO9Z,UAErC,cAAC,GAAD,CAAapB,QAASA,UAG1B,cAAC8pB,GAAD,UACE,cAACV,GAAD,MAED7e,EACC,cAACwf,GAAD,CACEpM,aAAW,EACXE,UACGhR,OAAOrF,WAAWpG,IACnBoiB,KACG5hB,IACAyC,GAAoBmlB,EAAgB5nB,GAEzCoZ,QACEpZ,GAAa,OAAI8nB,QAAJ,IAAIA,KAAW5nB,GAAGF,GAC3B,kBACEie,GACEvR,EACAI,EAAS7Q,QACTuD,EACA0e,EACAC,EACAC,IAEJ,kBACEY,GACElS,EACAtN,EACA0e,EACAC,EACAC,IAGV1N,KAAK,SACLsL,UAAW4F,EA7Bb,SA+BG5hB,GAAiByC,GAAoBmlB,EAAgB5nB,GACzC,OAAT8nB,QAAS,IAATA,KAAW5nB,GAAGF,GACZ4hB,EACE,oBADM,kBAEKpiB,EAFL,YAGRoiB,EACA,yBADQ,kBAEGna,GAAc,OAACrJ,QAAD,IAACA,IAAWM,GAAkBgJ,MAF/C,cAGV,yBAGN,cAACgZ,GAAD,MAEChJ,GAAe8G,IAAWV,GAAkBO,QAC7C,cAAC6I,GAAD,CAAiBxP,YAAaA,IAE/B8G,IAAWV,GAAkBY,MAAQ,cAACoC,GAAD,QAKtCoH,GAAcpsB,IAAOmI,IAAV,mDAIXkkB,GAAgBrsB,YAAOggB,GAAPhgB,CAAH,mDEnJNssB,GAAgB,WAC3B,IAAQhqB,EAAY2K,KAAZ3K,QAER,EAAsCiM,oBAAS,GAA/C,mBAAOge,EAAP,KAAoBC,EAApB,KAEA,OACE,eAACC,GAAD,WACE,eAACC,GAAD,WACE,cAAC,GAAD,CAAapqB,QAASA,IACtB,8BACE,cAAC,GAAD,CAAegb,QAAS,kBAAMkP,GAAe,IAA7C,uBAKF,cAAC,GAAD,CACE3O,UAAW0O,EACXzO,QAAS,kBAAM0O,GAAe,SAGlC,cAACd,GAAD,QAKAe,GAAOzsB,IAAOmI,IAAV,4HAEM2D,IAKV4gB,GAAY1sB,IAAOmI,IAAV,mIAOTkkB,GAAgBrsB,YAAOggB,GAAPhgB,CAAH,gEC5CZ,SAAS2sB,GAAiBxsB,GAC/B,MAAuC8M,KAA/B3K,QAER,OAAOkpB,GADMzgB,QADb,MAAkBnI,EAAlB,GAE+BzC,GCL1B,SAASysB,KACd,OACE,sBAAKhtB,MAAM,KAAKC,OAAO,KAAKV,QAAQ,YAAYC,KAAK,OAArD,UACE,sBACEG,EAAE,aACF4B,OAAO,QACPC,YAAY,IACZC,cAAc,QACdC,eAAe,UAEjB,sBACE/B,EAAE,aACF4B,OAAO,QACPC,YAAY,IACZC,cAAc,QACdC,eAAe,aCjBR,I,iCAAA,gzBCAA,okDCAA,ogCCAA,gyECGF8hB,GAAY,yCAAG,WAC1BlS,EACAV,EACAqc,EACAC,EACApL,EACAqL,EACA3K,EACAE,GAR0B,0BAAA3V,EAAA,sEAWxByV,EAAUJ,GAAkBO,QACtB3W,EAAQ4E,EAAWrQ,QACnB6sB,EAAqBF,EACJ,EACF,EAEfG,EAAwBvmB,SAAMyM,WAAW6Z,GACzCE,EAAexmB,SAAMyM,WAAW0Z,GAlBd,UAoBE3b,EAAcic,gBACtCvhB,EACAqhB,EARqB,EACF,EAUnBvL,EACAqL,EACA,CAAErpB,MAAOwpB,IA3Ba,eAoBlBtR,EApBkB,OA6BxB0G,GAAkBA,EAAe1G,GA7BT,UA+BFA,EAAY6G,OA/BV,QA+BlBjH,EA/BkB,OAgCxB4G,EACE5G,EAAQkH,OAASV,GAAkBW,QAAUX,GAAkBY,MAjCzC,kDAoCxBnM,QAAQzJ,MAAR,MACAoV,EAAUJ,GAAkBY,MArCJ,0DAAH,oECOnB1U,GAAqB,IAAIC,KAAUpM,GCwBlC,IAAMqrB,GAAoB,SAAC,GAOH,IAN7BvP,EAM4B,EAN5BA,UACAC,EAK4B,EAL5BA,QACA+O,EAI4B,EAJ5BA,UACAC,EAG4B,EAH5BA,WACAO,EAE4B,EAF5BA,WACAC,EAC4B,EAD5BA,WAEA,EAA6BrgB,KAArBJ,EAAR,EAAQA,QAASvK,EAAjB,EAAiBA,QACXirB,EAAYld,KACZmd,EDhCD,WACL,MAAuDvgB,KAAvD,IAAQ3K,eAAR,MAAkBM,EAAlB,EAAoCmK,EAApC,EAAoCA,eACpC,EAAsCwB,qBAAtC,mBAAOkf,EAAP,KAAoBC,EAApB,KAiBA,OAfA7sB,qBAAU,WAKR,OAJc,OAAdkM,QAAc,IAAdA,KAAgBkH,GAAG,QAAnB,yCAA4B,WAAOzH,GAAP,gBAAAG,EAAA,sEACNI,EAAe4gB,SAASnhB,GADlB,OACpBohB,EADoB,OAE1BF,EAAeE,EAAMC,WAFK,2CAA5B,uDAIO,WACS,OAAd9gB,QAAc,IAAdA,KAAgBmH,IAAI,YAErB,CAACnH,IAESW,GAAa,CACxBvN,QAAS0C,EAAkBP,GAC3B0L,KAAME,GAAmBG,mBAAmB,2BAA4B,MAGnEof,ECagBK,GACvB,EAAkDvf,mBAChDyT,GAAkB0D,KADpB,mBAAOqI,EAAP,KAA0BC,EAA1B,KAGM5a,EAAWR,GAAkBka,EAAYD,GACzCoB,EC7CD,SAA+Bpb,EAAoBC,GACxD,IAAMC,EAAcZ,KACd+b,EAAiBtb,GAAkBC,EAAYC,GACrD,YAAuBjM,IAAhBkM,QAAgDlM,IAAnBqnB,EAChCA,EAAexqB,MACZgF,IAAIsD,GAAa9D,IAAI,KACrBC,IAAI4K,EAAYrP,MAAM4P,IAAI4a,EAAexqB,aAC5CmD,EDsCmBsnB,CAAsBrB,EAAYD,GACzD,EAAsCte,qBAAtC,mBAAOqN,EAAP,KAAoB0G,EAApB,KACA,OAAKzE,EAGH,cAAC,GAAD,CAAcP,QAASQ,EAAvB,SACE,eAAC,GAAD,WACE,eAACsQ,GAAD,WACE,eAACpR,GAAD,WACE,cAACU,GAAD,+BACA,cAAC2Q,GAAD,CAAa/Q,QAASQ,EAAtB,SACE,cAAC8O,GAAD,SAGJ,eAAC0B,GAAD,WACE,cAAC,GAAD,UAASlb,EAAWA,EAAShK,SAAW,MACxC,qBAAK+X,IAAKoN,GAAY1H,IAAI,YAAYC,OAAQ0H,KAC7ClsB,IAAYR,EAAQI,QACnB,qBAAKif,IAAKsN,GAAW5H,IAAI,WAAWC,OAAQ4H,KAE5C,qBAAKvN,IAAKwN,GAAW9H,IAAI,WAAWC,OAAQ8H,QAGhD,eAACC,GAAD,mBAAmB1kB,GAAuB,OAAC7H,QAAD,IAACA,IAAWM,GAAkBS,OAAxE,kBACA,cAAC,GAAD,2GAKF,eAACyrB,GAAD,WACE,cAAC,GAAD,CACEzJ,MAAM,iBACN3hB,MACE,eAACqrB,GAAD,WACE,qBAAK5N,IAAKoN,GAAY1H,IAAI,YAAYC,OAAQ0H,KAC9C,+BAAO1B,SAIb,cAAC,GAAD,CACEzH,MAAK,UAAKlb,GAAuB,OAAC7H,QAAD,IAACA,IAAWM,GAAkBS,OAA1D,cACLK,MACE,eAACqrB,GAAD,WACGzsB,IAAYR,EAAQI,QACnB,qBAAKif,IAAKsN,GAAW5H,IAAI,WAAWC,OAAQ4H,KAE5C,qBAAKvN,IAAKwN,GAAW9H,IAAI,WAAWC,OAAQ8H,KAE9C,+BAAO/B,SAIb,cAACmC,GAAD,CACE3J,MAAM,QACN3hB,MACE,qCACE,0CAAKyG,GAAuB,OAAC7H,QAAD,IAACA,IAAWM,GAAkBS,OAA1D,MAAqEgqB,EAArE,WACA,iDAAYC,EAAZ,IAAyBnjB,GAAuB,OAAC7H,QAAD,IAACA,IAAWM,GAAkBS,eAIpF,cAAC,GAAD,CACEgiB,MAAM,gBACN3hB,MAAOuqB,EAAiBxnB,GAAUwnB,GAAkB,OAEtD,cAACgB,GAAD,CACEhP,aAAW,EACX3C,QACE,CAAC0E,GAAkBW,QAASX,GAAkBY,MAAM9c,SAClDioB,GAEEjQ,EACA,WACE,QAAuBjX,IAAnB2mB,EACF,MAAM,IAAIrpB,MAAM,kCAElB,IAAK0I,EACH,MAAM,IAAI1I,MAAM,0BAElB,IAAM4oB,EAAWS,EAAiB,IAClCpK,GACEmK,EAAUrc,cACVqc,EAAU/c,WACVqc,EACAC,EACAjgB,EAAQ1M,QACR4sB,EACAiB,EACA1L,IAIVpC,UAAW6N,IAAsB/L,GAAkBO,OA3BrD,SA6BG,CAACP,GAAkBW,QAASX,GAAkBY,MAAM9c,SACnDioB,GAEE,OACA,wBAELA,IAAsB/L,GAAkBY,MAAQ,cAACoC,GAAD,MAC9CpJ,GAAemS,IAAsB/L,GAAkBO,QACxD,cAAC6I,GAAD,CAAiBxP,YAAaA,YApGjB,MA4GnBgC,GAAQ5d,IAAOmI,IAAV,oMAWLimB,GAAWpuB,IAAOmI,IAAV,6EAEE2D,IAGVgjB,GAAc9uB,IAAOmI,IAAV,6EAKXkmB,GAAcruB,IAAO0e,OAAV,0LAWX4P,GAAgBtuB,IAAOmI,IAAV,iMAebuhB,GAAS1pB,IAAOmkB,EAAV,2KAODrY,IAGL+iB,GAAc7uB,IAAOmkB,EAAV,8GAINrY,IAGL2S,GAAOze,IAAOmkB,EAAV,gIAKCrY,IAGLmjB,GAAgBjvB,YAAOggB,GAAPhgB,CAAH,mDAIb+uB,GAAW/uB,IAAOmI,IAAV,qJAWR6mB,GAAgBhvB,YAAOolB,GAAPplB,CAAH,8HE/OZ,SAASkvB,GACdxrB,EACAmO,EACApO,GAEA,QAAcoD,IAAVgL,EACF,MAAO,IAET,IAAMsd,EACS,SAAb1rB,EACIiD,SAAMyM,WAAWtB,EAAM9H,UAAU7E,YACjCwB,SAAMyM,WAAWtB,EAAM3M,YACvBvB,EAASD,EAAMgF,IAAIymB,GAAahnB,IAAI6D,GAAa9D,IAAI,KAC3D,OAAOvE,EAAOW,GAAG,GAAK,IAAMoC,SAAM0oB,YAAYzrB,GAGzC,SAAS0rB,GACd3rB,EACAmO,GAEA,OAAOqd,GAAexrB,EAAOmO,EAAO,OAG/B,SAASyd,GACd5rB,EACAmO,GAEA,OAAOqd,GAAexrB,EAAOmO,EAAO,QAG/B,SAAS0d,GACd1d,EACApO,GAEA,MAAoB,SAAbA,EACHoO,EAAM9H,UAAUylB,kBAAkB,IAClC3d,EAAM2d,kBAAkB,IAGvB,SAASC,GAAcC,GAC5B,OACEhpB,SAAMyM,WAAWuc,EAAO7C,WAAWlZ,IAAI,IACvCjN,SAAMyM,WAAWuc,EAAO5C,YAAYnZ,IAAI,GCtCrC,I,eAAMgc,GAAgC,CAC3C9C,UAAW,IACXC,WAAY,IACZjb,MAAOjI,GAAWQ,WAChBwlB,aAAUC,YACVjtB,EACA2D,GACAA,GACA,KAOG,SAASupB,GACdxjB,EACAC,GAEA,GAAmB,gBAAfA,EAAOqI,KACT,MAAO,CACLiY,UAAWvgB,EAAMugB,UACjBC,WAAYxgB,EAAMwgB,WAClBjb,MAAOtF,EAAO7I,OAGlB,GAAIc,GAAaC,KAAK8H,EAAO7I,OAAQ,CACnC,IAAMA,EAmBV,SAAgBA,GACd,OAAOA,EAAMM,OAAS,EAClB0K,GAAiBC,GAAmBjL,GAAQ,IAC5C,IAtBY0F,CAAOmD,EAAO7I,OACtBqsB,EAAcrpB,SAAMyM,WAAWzP,GACrC,MAA2B,OAAvB6I,EAAOyjB,aACF,CACLne,MAAOvF,EAAMuF,MACbgb,UAAWnpB,EACXopB,WAAYwC,GAAmBS,EAAazjB,EAAMuF,QAG/C,CACLA,MAAOvF,EAAMuF,MACbib,WAAYppB,EACZmpB,UAAWwC,GAAkBU,EAAazjB,EAAMuF,QAIpD,OAAOvF,ECrBF,I,2BAAM2jB,GAAoB,SAAC,GAGH,IAF7BpS,EAE4B,EAF5BA,UACAC,EAC4B,EAD5BA,QAEA,EAA6B7Q,KAArBJ,EAAR,EAAQA,QAASvK,EAAjB,EAAiBA,QACjB,EAA2BwR,qBAAWgc,GAAkBH,IAAxD,mBAAOD,EAAP,KAAe3b,EAAf,KACA,EAA0DxF,oBAAS,GAAnE,mBAAO2hB,EAAP,KAA8BC,EAA9B,KACA,EAA4C5hB,mBAASyT,GAAkB0D,KAAvE,mBAAO0K,EAAP,KAAuBC,EAAvB,KACMxe,EAAQD,KAER0e,EAAS,CACbjD,WAAYxb,EAAQ0d,GAAoB1d,EAAO,OAAS,GACxDyb,WAAYzb,EAAQ0d,GAAoB1d,EAAO,QAAU,IAE3D,EAAsCxB,KAA9BG,EAAR,EAAQA,WAAYU,EAApB,EAAoBA,cACpBrQ,qBACE,kBACEgR,EAAQkC,EAAS,CAAEa,KAAM,eAAgBlR,MAAOmO,SAAWhL,IAC7D,CAACgL,IAEH,IAAMyN,EAAalR,KACbmiB,EAAcpgB,KACdqgB,EAAmB7D,GAAiBzb,EAAc/Q,SAElDswB,GACM,OAAVnR,QAAU,IAAVA,OAAA,EAAAA,EAAYlb,GACVZ,EAAc2oB,WAAW7M,EAAW7b,SAAUisB,EAAO7C,eADvD,OAGA0D,QAHA,IAGAA,OAHA,EAGAA,EAAansB,GACXZ,EAAc2oB,WAAWoE,EAAY9sB,SAAUisB,EAAO5C,cAGpD4D,OACY7pB,IAAhB0pB,QACqB1pB,IAArB2pB,GACAhtB,EAAc2oB,WAAWoE,EAAY9sB,SAAUisB,EAAO5C,YAAYzoB,GAChEmsB,GAGEG,EClED,WACL,IAAMC,EAAYxgB,KACZygB,EAAgB1e,KACtB,OAAO3R,mBACL,uBACgBqG,IAAd+pB,QAA6C/pB,IAAlBgqB,EACvBnqB,SAAM0oB,YACJwB,EAAUltB,MAAMgF,IAAIsD,GAAa9D,IAAI,KAAKC,IAAI0oB,EAAcntB,aAE9DmD,IACN,CAAC+pB,EAAWC,IDwDMC,GAEdhL,EAAWsK,IAAmBpO,GAAkBO,OAEtD,EAAsChU,qBAAtC,mBAAOqN,EAAP,KAAoB0G,EAApB,KAEA,OACE,qCACE,eAAC1E,GAAD,CACEC,UAAWA,EACXC,QAASA,EACTC,MAAM,gBAHR,UAKE,eAACkG,GAAD,WACE,eAACjH,GAAD,WACE,cAACkH,GAAD,qBACA,eAACA,GAAD,8BAAwBqM,QAAxB,IAAwBA,OAAxB,EAAwBA,EAAannB,eAEvC,eAAC4T,GAAD,WACE,cAACwK,GAAD,CACE5S,KAAK,OACLlR,MAAOgsB,EAAO5C,WACdrM,SAAU,SAAC/Q,GAAD,OACRqE,EAAS,CACPa,KAAM,gBACNob,aAAc,OACdtsB,MAAOgM,EAAE8N,OAAO9Z,WAItB,cAAC,GAAD,UAGJ,cAACqtB,GAAD,gBACA,eAAC9M,GAAD,WACE,eAACjH,GAAD,WACE,cAACkH,GAAD,qBACA,eAACA,GAAD,8BAAwB5E,QAAxB,IAAwBA,OAAxB,EAAwBA,EAAYlW,eAEtC,eAAC4T,GAAD,WACE,cAACwK,GAAD,CACE5S,KAAK,OACLlR,MAAOgsB,EAAO7C,UACdpM,SAAU,SAAC/Q,GAAD,OACRqE,EAAS,CACPa,KAAM,gBACNob,aAAc,MACdtsB,MAAOgM,EAAE8N,OAAO9Z,WAItB,cAAC,GAAD,CAAcpB,QAASA,UAG3B,eAAC0uB,GAAD,WACE,cAACC,GAAD,oCACA,eAACC,GAAD,WACE,gCACE,cAACC,GAAD,UAAeb,EAAOjD,aACtB,eAACnJ,GAAD,WAAe/Z,GAAuB,OAAC7H,QAAD,IAACA,IAAWM,GAAkBS,OAApE,kBAEF,gCACE,cAAC8tB,GAAD,UAAeb,EAAOhD,aACtB,eAACpJ,GAAD,uBAAwB/Z,GAAuB,OAAC7H,QAAD,IAACA,IAAWM,GAAkBS,aAE/E,gCACE,eAAC8tB,GAAD,WACGR,EAAcxqB,EAAkBwqB,EAAa,GAAK,IADrD,OAGA,cAACzM,GAAD,qCAILrX,EACC,cAAC,GAAD,CACEoT,aAAW,EACX3C,QACEoT,EACI,kBACEvO,GACE3R,EACAU,EAAc/Q,QACduvB,EAAO5C,WACPuD,GACA,kBAAM,OACN/N,IAEJ,kBAAM6N,GAAyB,IAErChQ,SAAUsQ,GAAuB3K,GAAY2J,GAAcC,GAC3DxP,UAAW4F,EAhBb,SAkBG2K,EACG,uBACAC,EACA,eACA,sBAGN,cAAC9L,GAAD,MAEChJ,GAAekK,GAChB,cAACsF,GAAD,CAAiBxP,YAAaA,OAGjCsU,EACC,cAAC,GAAD,cACErS,UAAWqS,EACXpS,QAAS,kBAAMqS,GAAyB,IACxCtD,UAAW6C,EAAO7C,UAClBC,WAAY4C,EAAO5C,YACfwD,SAEJzpB,MAKJkqB,GAAO/wB,IAAOmkB,EAAV,qJAMCrY,IAGLklB,GAAgBhxB,YAAOikB,GAAPjkB,CAAH,gEAKbixB,GAAgBjxB,IAAOmI,IAAV,wGAIR2D,IAGLolB,GAAclxB,YAAOikB,GAAPjkB,CAAH,+KASXmxB,GAAenxB,IAAOmkB,EAAV,kIAKPrY,IExNEslB,GAAqB,WAChC,IAAQ9uB,EAAY2K,KAAZ3K,QAER,EAAsCiM,oBAAS,GAA/C,mBAAOge,EAAP,KAAoBC,EAApB,KAEA,EAA4C7gB,GAAc,OAACrJ,QAAD,IAACA,IAAWM,GAAvDyuB,EAAf,EAAQzlB,MAAuBC,EAA/B,EAA+BA,SAE/B,OACE,eAAC,GAAD,WACE,eAACylB,GAAD,kBAAeD,EAAf,uBACA,eAACE,GAAD,WACGF,EADH,yDACyExlB,EAAU,IADnF,2EAE2E,IACxEA,EAHH,OAKA,eAAC2lB,GAAD,CAAWlU,QAAS,kBAAMkP,GAAe,IAAzC,sBACYriB,GAAuB,OAAC7H,QAAD,IAACA,IAAWM,GAAkBS,OADjE,gBAGA,cAAC,GAAD,CACEwa,UAAW0O,EACXzO,QAAS,kBAAM0O,GAAe,UAMhCC,GAAOzsB,IAAOmI,IAAV,oGAEM2D,IAIVwlB,GAAWtxB,IAAOmkB,EAAV,mIAKHrY,IAGLylB,GAAUvxB,IAAOmkB,EAAV,8GAIFrY,IAGL0lB,GAAYxxB,YAAOggB,GAAPhgB,CAAH,oDC7CR,SAASyxB,KACd,IAAQnvB,EAAY2K,KAAZ3K,QACF4E,EAAUugB,KAEhB,OACE,eAAC,GAAD,WACE,cAACuD,GAAD,qCACA,eAACC,GAAD,0DAC+Ctf,GAAc,OAACrJ,QAAD,IAACA,IAAWM,GAAkBiJ,SAD3F,qCAIA,cAAC6lB,GAAD,UACE,eAACC,GAAD,WACE,cAACC,GAAD,kCACA,eAACC,GAAD,kCACuB,IACpB3qB,EAAUD,GAAoBC,EAAQqB,YAAc,YAI3D,cAAC,GAAD,IACA,cAAC,GAAD,OAKN,I,iCAAMkkB,GAAOzsB,IAAOmI,IAAV,oDAIJupB,GAAQ1xB,IAAOmI,IAAV,mDAILwpB,GAAc3xB,IAAOmI,IAAV,mIAOXypB,GAAa5xB,IAAO8xB,GAAV,2GAILhmB,IAGL+lB,GAAe7xB,IAAOmkB,EAAV,2FCrDX,SAAS4N,GACdjP,EACA6C,EACAjD,EACA6N,GAEA,OACEzN,EAAOpf,MAAMW,GAAG,IAChB8K,OAAOrF,WAAW6b,GAAa,GAC/BjD,IAAWV,GAAkBO,QAC7B5b,GAAoB4pB,EAAazN,GAI9B,SAASkP,GAAaC,GAAuC,IAAnBnW,EAAkB,uDAAZD,KAAKC,MAC1D,OAAOA,EAAMoW,GAAeD,GAGvB,SAASC,GAAezqB,GAC7B,OAAOA,EAAKiB,IAAI,KAAMH,WAGjB,SAAS4pB,KAAgC,IAAnBrW,EAAkB,uDAAZD,KAAKC,MACtC,OAAO1U,KAAKC,MAAMyU,EAAM,KAGnB,SAASsW,GAAcH,GAAuC,IAAnBnW,EAAkB,uDAAZD,KAAKC,MACrDuW,EAAYC,GAAiBL,EAASnW,GAC5C,OAAIuW,GAAa,EACR,iBAEFprB,GAAoBorB,GAGtB,SAASC,GAAiBL,GAAuC,IAAnBnW,EAAkB,uDAAZD,KAAKC,MAC9D,OAAOmW,EAAQ1tB,IAAI4tB,GAAarW,IAAMvT,WCEjC,SAASgqB,GAAT,GAA0D,IAAD,EAAnCC,EAAmC,EAAnCA,eAC3B,EAAgDvlB,KAAxCJ,EAAR,EAAQA,QAAR,IAAiBvK,eAAjB,MAA2BM,EAA3B,EACM2tB,EAAcpgB,KACpB,EAA4B7B,GAAe,IAA3C,mBAAOwU,EAAP,KAAe+E,EAAf,KACA,EAA4BtZ,mBAASyT,GAAkB0D,KAAvD,mBAAOhD,EAAP,KAAeN,EAAf,KACA,EAAkCnT,GlDhDF,IkDgDhC,mBAAO0W,EAAP,KAAkBC,EAAlB,KACA,EACErX,qBADF,mBAAOwd,EAAP,KAA2B1J,EAA3B,KAEA,EAAsChS,KAA9BG,EAAR,EAAQA,WAAYM,EAApB,EAAoBA,cACdkb,EACJW,GAAiB5pB,EAAuBT,KACxCkB,EAAc2oB,WAAWphB,GAAczI,GAAU,KACnD,EAAsCiM,mBACpC/K,EAAc2oB,WAAWphB,GAAczI,GAAU,MADnD,mBAAOmwB,EAAP,KAAoBC,EAApB,KAIA7xB,qBACE,kBACE6xB,EAAelvB,EAAc2oB,WAAWphB,GAAczI,GAAUwgB,MAClE,CAACA,IAEHjiB,qBACE,kBACEkrB,IAAuB9J,GAAmBe,WAC1CN,IAAWV,GAAkBW,QACzB6P,SACA3rB,IACN,CAAC6b,IAEH,IAAMoD,EAAWpD,IAAWV,GAAkBO,OACxCwD,EAAMxT,GAAsBoT,GAClC,EAAsCpX,qBAAtC,mBAAOqN,EAAP,KAAoB0G,EAApB,KAEIqQ,EAAiC,KAErC,GAAI5M,GAAO0M,EAAa,CACtB,IAAMtrB,EAAQgI,OAAOwW,GAAa,GAC5BiN,EAAgBH,EAAY/uB,MAAMgF,IAAIqd,GAE5C4M,GAAmBvrB,KAAKmQ,MAAMpI,OAAOzI,SAAM0oB,YAAYwD,EAAczqB,IAAIzB,SAAMyM,WAAW,QAAUhM,EAAQ,KAAK,KAAKjC,WAGxH,OACE,iCACE,eAAC+e,GAAD,WACE,eAAC4O,GAAD,WACE,cAAC,GAAD,oBACA,eAAC,GAAD,8BAAiBtC,QAAjB,IAAiBA,OAAjB,EAAiBA,EAAa3Q,yBAEhC,eAACkT,GAAD,WACE,cAACtL,GAAD,CACEhoB,GAAG,aACHoV,KAAK,OACLlR,MAAOof,GAAU,IACjBrC,SAAU,SAAC/Q,GAAD,OAAOmY,EAAUnY,EAAE8N,OAAO9Z,UAEtC,eAAC,GAAD,WACE,qBAAKyd,IAAK4R,GAAYlM,IAAI,YAAYC,OAAQkM,KADhD,gBAMJ,eAAC,GAAD,WACE,cAAC,GAAD,CAAoBtvB,MAAOiiB,EAAWlX,IAAKmX,IAC3C,cAAC,GAAD,wBAEF,eAAC,GAAD,WACE,cAAC1kB,EAAD,IACA,cAAC,GAAD,uDAEF,eAAC,GAAD,WACE,eAAC,GAAD,qBAAcyxB,SAAd,QAAiC,EAAjC,WADF,gYAEgY,IAC9X,cAAC,GAAD,CACE1T,KAAK,sFACLzB,OAAO,SAFT,2BAOD3Q,EACC,cAAC,GAAD,CACEoT,aAAW,EACXE,UACG4R,GAAiBU,EAAa9M,EAAWjD,EAAQ6N,GAEpDrQ,UAAW4F,EACXxI,QACW,OAAT0O,QAAS,IAATA,KAAW5nB,GAAGquB,GACV,kBACEtQ,GACE3R,EACAM,EAAc3Q,QACd2iB,EACAV,EACAC,EACAC,IAEJ,kBACEO,GACE/R,EACAgS,EACA6C,EACA9Y,EAAQ1M,QACRiiB,EACAC,EACAC,IAGV1N,KAAK,SA5BP,SA8BGjO,GAAoB4pB,EAAakC,GACrB,OAATzG,QAAS,IAATA,KAAW5nB,GAAGquB,GACZ3M,EACE,oBADM,kBAEKhD,EAFL,SAGRgD,EACA,yBACA,QACF,yBAGN,cAAClB,GAAD,MAEChJ,GAAe8G,IAAWV,GAAkBO,QAC7C,cAAC6I,GAAD,CAAiBxP,YAAaA,IAE/B8G,IAAWV,GAAkBY,MAAQ,cAACoC,GAAD,OAK5C,IAAM6N,GAAc7yB,IAAOmI,IAAV,mFAKXmd,GAAQtlB,IAAOmkB,EAAV,sFAGArY,IAGLgnB,GAAc9yB,IAAOmI,IAAV,gIAOXge,GAAanmB,IAAOmI,IAAV,4IAQVie,GAAapmB,IAAOmkB,EAAV,iIAKLrY,IAGLvI,GAAQvD,IAAOmkB,EAAV,sRAOArY,IAUL2S,GAAOze,IAAOmI,IAAV,gGAMJke,GAAWrmB,IAAOmkB,EAAV,2GAIHrY,IAGLoa,GAAUlmB,YAAOikB,GAAPjkB,CAAH,wLAOF8L,IAGLwa,GAActmB,YAAOilB,GAAPjlB,CAAH,yIAQXumB,GAAWvmB,IAAO2M,EAAV,6GAIHb,ICrQI,OAA0B,qCCOnCmG,GAAkB,IAAI9D,KAAU4C,GAAcJ,KAC9Cc,GAAe,oBCNd,ICEDQ,GAAkB,IAAI9D,aAAU4C,GAAcJ,KCIpD,IAAMsB,GAAkB,IAAI9D,KAAU4C,GAAcJ,KAC9Cc,GAAe,mBAEd,SAASwhB,GAAcC,GAC5B,MAAuCjmB,KAA/B3K,QACF0L,EAAON,GAAa,CACxBvN,QAAS4C,OAFX,MAAkBH,EAAlB,GAGEoL,KAAMiE,GAAgB5D,mBAAmBoD,GAAc,CAACyhB,MAE1D,OAAO1yB,mBAAQ,kBDAV,SACLwN,EACAyD,EACAyhB,GAEA,GAAKllB,EAAL,CAGA,IAAMmlB,EAAUlhB,GAAgBN,qBAAqBF,EAAczD,GAEnE,MAAO,CACLolB,kBAAmBD,EAAQ,GAC3BE,aAAcF,EAAQ,GACtBG,aAAcH,EAAQ,GACtBI,WAAYJ,EAAQ,GACpBK,YAAaL,EAAQ,GACrBM,kBAAmBN,EAAQ,GAC3BO,eAAgBP,EAAQ,GACxBhzB,QAAS+yB,IClBUS,CAAY3lB,EAAMyD,GAAcyhB,KAAe,CAACllB,ICfhE,ICMDiE,GAAkB,IAAI9D,aAAU4C,GAAcJ,KCL7C,I,YAAMijB,GAAW,yCAAG,WACzB9iB,EACAoiB,EACA9Q,GAHyB,kBAAAzV,EAAA,sEAMvByV,EAAUJ,GAAkBO,QANL,SAOGzR,EAAc+iB,WAAWX,GAP5B,cAOjBtX,EAPiB,gBAQDA,EAAY6G,OARX,OAQjBjH,EARiB,OASvB4G,EACE5G,EAAQkH,OAASV,GAAkBW,QAAUX,GAAkBY,MAV1C,kDAavBR,EAAUJ,GAAkBY,MAbL,0DAAH,0DCsBjB,SAASkR,GAAT,GAIe,IAHpBjW,EAGmB,EAHnBA,UACAC,EAEmB,EAFnBA,QACA+E,EACmB,EADnBA,MAEMC,EFnBD,SAAiCoQ,GACtC,MAAgDjmB,KAAhD,IAAQ3K,eAAR,MAAkBM,EAAlB,EACMoL,EAAON,KADb,EAAoCb,SAErB,CACX1M,QAAS4C,EAAuBT,GAChC0L,KAAMiE,GAAgB5D,mBAPP,sCAOwC,CAAC6kB,MAG5D,OAAO1yB,mBAAQ,kBAAOwN,EAAOlJ,IAAUC,KAAKiJ,QAAQnH,IAAY,CAACmH,IEWlD+lB,CAAwBlR,EAAM1iB,SACrC2Q,EAAkBT,KAAlBS,cACR,EAA4BvC,mBAASyT,GAAkB0D,KAAvD,mBAAOhD,EAAP,KAAeN,EAAf,KACAvhB,qBACE,kBAAO6hB,GAAUV,GAAkBW,QAAU7E,SAAYjX,IACzD,CAAC6b,IAGH,IAAMoD,EAAWpD,GAAUV,GAAkBO,OAE7C,OACE,eAAC3E,GAAD,CAAOC,UAAWA,EAAWC,QAASA,EAASC,MAAM,eAArD,UACE,eAACiW,GAAD,WACE,cAAC9P,GAAD,+BACA,cAACE,GAAD,UACGgO,GAAcvP,EAAMwQ,mBAGzB,eAACY,GAAD,WACE,eAACC,GAAD,WACGpR,EAASpc,SAAM0oB,YAAYtM,QAAUjc,EADxC,IACmD,2CAEnD,cAACqd,GAAD,oCAEF,eAACW,GAAD,WACE,cAACT,GAAD,2CACA,cAACW,GAAD,qGAKF,cAACoP,GAAD,CACElU,aAAW,EACX3C,QAAS,kBAAMsW,GAAY9iB,EAAe+R,EAAM1iB,QAASiiB,IACzDlC,UAAW4F,EAHb,SAKIA,EAA4B,yBAAjB,oBAMrB,IAAMkO,GAAUh0B,IAAOmI,IAAV,iJAUP+rB,GAAqBl0B,YAAOikB,GAAPjkB,CAAH,uYAUb8L,GAOEA,IAKPmoB,GAASj0B,IAAOmI,IAAV,mGAMNgsB,GAAen0B,YAAOggB,GAAPhgB,CAAH,iDACF8L,IClGT,SAASsoB,GAAT,GAA2D,IAAhCvR,EAA+B,EAA/BA,MAChC,EAAsC5V,KAA9B3K,QAEFqwB,EAAkB,IAAInvB,EAAcuH,QAF1C,MAAkBnI,EAAlB,GAEkEigB,EAAM4Q,kBAAkBngB,IAAIuP,EAAMyQ,aAAa5qB,IAAIma,EAAM4Q,mBAAmBtrB,IAAIzB,SAAMyM,WAAW,QAEnK,OAAO,mCAAGwf,EAAkBA,EAAgBvpB,SAAW,OCJzD,IAAM6I,GAAkB,IAAI9D,aAAU4C,GAAcJ,KCN7C,SAAS0jB,GAAT,GAA+C,IAC9CC,EDQD,SAAyBzR,GAC9B,MAAuC5V,KAA/B3K,eAAR,MAAkBM,EAAlB,EACMoL,EAAON,GAAa,CACxBvN,QAAS4C,EAAuBT,GAChC0L,KAAMiE,GAAgB5D,mBANR,+BAMsC,CAACwU,EAAM1iB,YAE7D,OAAOK,mBACL,kBACEwN,EACI,IAAIxK,EAAcuH,GAAczI,GAAUwC,IAAUC,KAAKiJ,SACzDnH,IACN,CAACmH,ICnBYumB,CADoC,EAAtB1R,OAE7B,OAAO,4BAAIyR,EAASA,EAAOlrB,cAAWvC,ICPjC,I,gDAAM2tB,GAAU,yCAAG,WACxB1jB,EACAoiB,EACA9Q,GAHwB,kBAAAzV,EAAA,sEAMtByV,EAAUJ,GAAkBO,QANN,SAOIzR,EAAc2S,aAAayP,GAP/B,cAOhBtX,EAPgB,gBAQAA,EAAY6G,OARZ,OAQhBjH,EARgB,OAStB4G,EACE5G,EAAQkH,OAASV,GAAkBW,QAAUX,GAAkBY,MAV3C,kDAatBnM,QAAQzJ,MAAR,MACAoV,EAAUJ,GAAkBY,MAdN,0DAAH,0DCeV6R,GAAkB,SAAC,GAIR,IAHtB5W,EAGqB,EAHrBA,UACAC,EAEqB,EAFrBA,QACA+E,EACqB,EADrBA,MAEQ/R,EAAkBT,KAAlBS,cACR,EAA4BvC,mBAASyT,GAAkB0D,KAAvD,mBAAOhD,EAAP,KAAeN,EAAf,KACMsS,EtHTD,SAAuBxB,GAC5B,MAAuCjmB,KAA/B3K,eAAR,MAAkBM,EAAlB,EACMoL,EAAON,GAAa,CACxBvN,QAAS4C,EAAuBT,GAChC0L,KAAMiE,GAAgB5D,mBANL,mCAMsC,CAAC6kB,MAE1D,OAAO1yB,mBACL,kBACEwN,EACI,IAAIxK,EAAcuH,GAAczI,GAAUwC,IAAUC,KAAKiJ,SACzDnH,IACN,CAACmH,IsHFgB2mB,CAAc9R,EAAM1iB,SAEjC0lB,EAAUnD,IAAWV,GAAkBW,QACvCmD,EAAWpD,IAAWV,GAAkBO,OAE9C,OACE,eAAC3E,GAAD,CAAOC,UAAWA,EAAWC,QAASA,EAASC,MAAM,QAArD,UACE,cAAC,GAAD,CACEsH,MAAM,cACN3hB,MACE,qCACE,cAAC2wB,GAAD,CAAcxR,MAAOA,IADvB,aAMJ,cAAC,GAAD,CACEwC,MAAM,sBACN3hB,MAAK,iBAAKgxB,QAAL,IAAKA,OAAL,EAAKA,EAAYtrB,SAAjB,WAGP,cAAC,GAAD,CACE6W,aAAW,EACXE,SAAU0F,EACV3F,UAAW4F,EACXxI,QAAS,kBAAMkX,GAAW1jB,EAAe+R,EAAM1iB,QAASiiB,IAJ1D,SAMGyD,EAAU,QAAUC,EAAW,cAAgB,UAEjDpD,IAAWV,GAAkBY,MAAQ,cAACoC,GAAD,QAKtCwB,GAAcxmB,YAAOggB,GAAPhgB,CAAH,mDCxCJ40B,GAAkB,SAAC,GAAuC,IAArCz0B,EAAoC,EAApCA,QAChC,ETlBwB,WACxB,MAAiCoO,oBAAS,GAA1C,mBAAOsmB,EAAP,KAAgBC,EAAhB,KASA,MAAO,CAAED,UAASE,OARH,SAACrxB,GAEZoxB,OADYjuB,IAAVnD,EACY,SAACmxB,GAAD,OAAcA,GAEd,kBAAMnxB,MSYIsxB,GAApBH,EAAR,EAAQA,QAASE,EAAjB,EAAiBA,OACX10B,EAAMC,iBAAO,OZnBU,SAC7BD,EACA40B,EACAC,GAEA,IAAMC,EAAc,SAACzlB,GACfrP,EAAIS,UAAYT,EAAIS,QAAQs0B,SAAS1lB,EAAE8N,SACzCyX,KAIJp0B,qBAAU,WAGR,OAFAiY,SAASqF,iBAAiB,YAAagX,GAEhC,WACLrc,SAASsF,oBAAoB,YAAa+W,MAE3CD,GYGHG,CAAgBh1B,GAAK,kBAAM00B,GAAO,MAClC,IAAM/mB,EAAOilB,GAAc9yB,GAC3B,EAA0CoO,oBAAS,GAAnD,mBAAO+mB,EAAP,KAAsBC,EAAtB,KACA,EAAkDhnB,oBAAS,GAA3D,mBAAOinB,EAAP,KAA0BC,EAA1B,KAEA,OACE,eAACC,GAAD,WACE,cAACC,GAAD,UACG3nB,EACG,IAAI6N,KAAKqW,GAAelkB,EAAK0lB,iBAAiBkC,0BAC9C/uB,IAEN,eAAC8uB,GAAD,WACG3nB,EAAOtH,SAAM0oB,YAAYphB,EAAKylB,wBAAqB5sB,EACpD,2CAEF,eAAC8uB,GAAD,WACG3nB,EAAO,cAAComB,GAAD,CAAiBvR,MAAO7U,SAAWnH,EAD7C,IACwD,2CAExD,eAAC8uB,GAAD,WACG3nB,EAAO,cAACqmB,GAAD,CAAcxR,MAAO7U,SAAWnH,EAD1C,IACqD,2CAErD,cAAC8uB,GAAD,UACE,cAACE,GAAD,CAAeC,UAAS9nB,GAAOgkB,GAAahkB,EAAKqlB,cAAjD,SACGrlB,EAAOokB,GAAcpkB,EAAKqlB,mBAAgBxsB,MAG/C,eAAC8uB,GAAD,WACE,eAAC,GAAD,WACE,cAAC,GAAD,CACExV,UAAWnS,IAASgkB,GAAahkB,EAAKqlB,cACtC/V,QAAS,kBAAMmY,GAAqB,IAFtC,mBAMA,eAACM,GAAD,CAAU11B,IAAKA,EAAf,UACE,cAAC21B,GAAD,CAAgB1Y,QAAS,kBAAMyX,KAA/B,SACE,cAACxzB,EAAD,MAEDszB,GACC,cAACoB,GAAD,UACE,cAACC,GAAD,CAAgB5Y,QAAS,kBAAMiY,GAAiB,IAAhD,kCAOPD,GAAiBtnB,IAASgkB,GAAahkB,EAAKqlB,eAC3C,cAACS,GAAD,CACEjW,UAAWyX,EACXxX,QAAS,kBAAMyX,GAAiB,IAChC1S,MAAO7U,IAGVA,GACC,cAAC,GAAD,CACE6P,UAAW2X,EACX1X,QAAS,kBAAM2X,GAAqB,IACpC5S,MAAO7U,WAQb0nB,GAAK11B,IAAOm2B,GAAV,mhBAqBoBrqB,GAKGA,IAIzB6pB,GAAK31B,IAAOo2B,GAAV,4fAGGtqB,GAKKA,GAKaA,GAICA,IAmBxB+pB,GAAgB71B,IAAOmkB,EAAV,8GAIR,qBAAG2R,QAAyBhqB,GAAiBA,MAGlD+d,GAAa7pB,IAAOmI,IAAV,wEAKVqe,GAAcxmB,YAAOkiB,GAAPliB,CAAH,oDAIX+1B,GAAW/1B,IAAOmI,IAAV,2EAKR6tB,GAAiBh2B,IAAO0e,OAAV,iNAYduX,GAAej2B,IAAOmI,IAAV,qNAOI2D,IAIhBoqB,GAAiBl2B,IAAO0e,OAAV,8LAKT5S,ICtMEuqB,GAAe,WAC1B,IAAMC,EdGD,WACL,MAAgDrpB,KAAhD,IAAQ3K,eAAR,MAAkBM,EAAlB,EAAoCiK,EAApC,EAAoCA,QAC9BiE,EAAgB/N,EAAuBT,GAE7C,EAA4BiM,qBAA5B,mBAAO+nB,EAAP,KAAeC,EAAf,KAEMvoB,EAAON,KACTb,GAAW,CACX1M,QAAS2Q,EACT9C,KAAMiE,GAAgB5D,mBAAmBoD,GAAc,CAAC5E,EAAQ1M,YAgBpE,OAZAU,qBAAU,WACR,QAAagG,IAATmH,EAAoB,CACtB,IAAMwoB,EAAcvkB,GAAgBN,qBAClCF,GACAzD,GAEEwoB,GACFD,EAAU,aAAIC,EAAY,GAAG9G,cAGhC,CAAC1hB,IAEGsoB,Ec5BQG,GAEf,OACE,eAACC,GAAD,WACE,gCACE,+BACE,cAACC,GAAD,UACE,cAACC,GAAD,2BAEF,cAACD,GAAD,UACE,cAACC,GAAD,gCAEF,cAACD,GAAD,UACE,cAACC,GAAD,kCAEF,cAACD,GAAD,UACE,cAACC,GAAD,kCAEF,cAACD,GAAD,UACE,cAACC,GAAD,+BAEF,cAACD,GAAD,SAGJ,uCACGL,QADH,IACGA,OADH,EACGA,EAAQvoB,KAAI,SAAC5N,GAAD,OACX,cAAC,GAAD,CAAiBA,QAASA,GAAcA,YAO5Cu2B,GAAQ12B,IAAO62B,MAAV,4EAKLF,GAAK32B,IAAO82B,GAAV,uGAQFF,GAAa52B,IAAO0e,OAAV,4XAgBMqY,IC5Df,SAASC,KACd,MAA0CzoB,oBAAS,GAAnD,mBAAO0oB,EAAP,KAAuBC,EAAvB,KACA,OACE,qCACE,eAACC,GAAD,WACE,eAAC,GAAD,WACE,gCACE,cAACnM,GAAD,4BACA,cAACC,GAAD,sCAEF,cAACmM,GAAD,CAAa9Z,QAAS,kBAAM4Z,GAAgB,IAA5C,sBAEF,cAAC,GAAD,OAEF,cAACtZ,GAAD,CACEC,UAAWoZ,EACXlZ,MAAM,eACND,QAAS,kBAAMoZ,GAAgB,IAHjC,SAKE,cAAC3E,GAAD,CAAYC,eAAgB,kBAAM0E,GAAgB,WAM1D,IAAMC,GAAcn3B,IAAOmI,IAAV,+FAMXivB,GAAcp3B,YAAOggB,GAAPhgB,CAAH,qDAIXgd,GAAMhd,IAAOmI,IAAV,qICrCF,SAASkvB,KACd,OACE,cAACnN,GAAD,UACE,eAAC,IAAD,WACE,cAAC,IAAD,CAAOoN,KAAK,QAAZ,SACE,cAAClN,GAAD,MAEF,cAAC,IAAD,CAAOkN,KAAK,WAAZ,SACE,cAACN,GAAD,MAEF,cAAC,IAAD,CAAOM,KAAK,UAAZ,SACE,cAAC7F,GAAD,WCdH,SAAS8F,KACd,OACE,eAAC,IAAD,WACE,cAAC,IAAD,CAAOC,OAAK,EAACF,KAAK,QAAQG,UAAWJ,KACrC,cAAC,IAAD,CAAOG,OAAK,EAACF,KAAK,UAAUG,UAAWJ,KACvC,cAAC,IAAD,CAAOG,OAAK,EAACF,KAAK,WAAWG,UAAWJ,KACxC,cAAC,IAAD,CAAUtyB,KAAK,GAAG2c,GAAG,aCJ3BgW,IAASC,OACP,cAACvb,GAAD,UACE,cAACmb,GAAD,MAEFze,SAASC,eAAe,U","file":"static/js/main.ddac9ca4.chunk.js","sourcesContent":["import React from \"react\";\nimport styled from \"styled-components\";\n\nexport function BackIcon() {\n return (\n \n \n \n \n \n \n \n \n \n );\n}\n\nconst SvgIcon = styled.svg`\n width: 24px;\n height: 24px;\n`;\n","import React, { useRef, useMemo, useEffect } from \"react\";\nimport jazzicon from \"@metamask/jazzicon\";\n\nfunction getSeed(address: string) {\n return parseInt(address.slice(2, 10), 16);\n}\n\ninterface Props {\n address: string;\n size: number;\n}\n\nexport function JazzIcon({ address, size }: Props) {\n const ref = useRef(null);\n const element = useMemo(() => jazzicon(size, getSeed(address)), [\n size,\n address,\n ]);\n\n useEffect(() => {\n if (ref.current) {\n ref.current.innerHTML = \"\";\n ref.current.appendChild(element);\n }\n }, [address]);\n\n return
;\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nexport function RightArrow() {\n return (\n \n \n \n );\n}\n\nconst SvgIcon = styled.svg`\n width: 1em;\n height: 1em;\n position: relative;\n bottom: -0.1em;\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nexport function HelpIcon() {\n return (\n \n \n \n \n \n );\n}\n\nconst SvgIcon = styled.svg`\n width: 20px;\n height: 20px;\n`;\n","import React from \"react\";\n\nexport function SettingsIcon() {\n return (\n \n \n \n \n \n );\n}\n","export const ERC20_ABI = [\n \"function balanceOf(address) view returns(uint256)\",\n \"function totalSupply() view returns(uint256)\",\n \"function transfer(address to, uint256 value) returns(bool)\",\n];\n\nexport const MULTICALL_ABI = [\n \"function aggregate(tuple(address target, bytes callData)[] calls) view returns (uint256 blockNumber, bytes[] returnData)\",\n \"function getEthBalance(address addr) view returns (uint256 balance)\",\n \"function getBlockHash(uint256 blockNumber) view returns (bytes32 blockHash)\",\n \"function getLastBlockHash() view returns (bytes32 blockHash)\",\n \"function getCurrentBlockTimestamp() view returns (uint256 timestamp)\",\n \"function getCurrentBlockDifficulty() view returns (uint256 difficulty)\",\n \"function getCurrentBlockGasLimit() view returns (uint256 gaslimit)\",\n \"function getCurrentBlockCoinbase() view returns (address coinbase)\",\n];\n","export enum ChainId {\n Mainnet = 1,\n Goerli = 5,\n Hardhat = 31337,\n Binance = 56,\n}\n\nexport type ChainName = \"mainnet\" | \"binance\";\n\nexport const SUPPORTED_CHAINS = [\n ChainId.Mainnet,\n ChainId.Goerli,\n ChainId.Binance,\n];\n\nexport const CHAIN_NAMES: ChainName[] = [\"mainnet\", \"binance\"];\nexport const CHAIN_METADATA: Partial> = {\n mainnet: { \n chainId: ChainId.Mainnet,\n chainName: \"mainnet\",\n chainFullName: \"Ethereum\",\n },\n binance: { \n chainId: ChainId.Binance,\n chainName: \"binance\",\n chainFullName: \"Binance Smart Chain\",\n },\n}\n\nexport const CHAIN_ID_TO_CHAIN_NAME_MAPPING: Partial> = {\n [ChainId.Mainnet]: \"mainnet\",\n [ChainId.Binance]: \"binance\",\n}\n\nexport const CHAIN_NAME_TO_CHAIN_ID_MAPPING: Partial> = {\n mainnet: ChainId.Mainnet,\n binance: ChainId.Binance,\n}\n\nexport const DEFAULT_CHAIN_ID = ChainId.Mainnet;\nexport const DEFAULT_CHAIN_NAME = \"mainnet\";\n","import { ChainId } from \"./chainId\";\n\nexport const MULTICALL_ADDRESS = {\n [ChainId.Mainnet]: \"0xeefba1e63905ef1d7acba5a8513c70307c1ce441\",\n [ChainId.Goerli]: \"0x77dCa2C955b15e9dE4dbBCf1246B4B85b651e50e\",\n [ChainId.Hardhat]: \"0xeefba1e63905ef1d7acba5a8513c70307c1ce441\",\n [ChainId.Binance]: \"0xC50F4c1E81c873B2204D7eFf7069Ffec6Fbe136D\",\n};\n\nexport const STAKING_MASTER_ADDRESS = {\n [ChainId.Mainnet]: \"0xf0029F64eFBf97bEc5C3c217004513D80d70eC92\",\n [ChainId.Goerli]: \"0x6B18651e76c28C371EB4DF6134437A5306C507bE\",\n [ChainId.Hardhat]: \"0xf0029F64eFBf97bEc5C3c217004513D80d70eC92\",\n [ChainId.Binance]: \"0xf0029F64eFBf97bEc5C3c217004513D80d70eC92\",\n};\n\nexport const PROVIDER_ADDRESS = {\n [ChainId.Mainnet]: \"0x3311d37cd032E8c25C27C5A62AB185F9C60A00eC\",\n [ChainId.Goerli]: \"0x1C874086F9d733FA7fb33A3B8D3247A0c681Ea9A\",\n [ChainId.Hardhat]: \"0x3311d37cd032E8c25C27C5A62AB185F9C60A00eC\",\n [ChainId.Binance]: \"0x81b0777C3Dae9E52C10c0cCBD919B932E4245798\",\n};\n\nexport const UNISWAPV2ROUTER02 = {\n [ChainId.Mainnet]: \"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D\",\n [ChainId.Goerli]: \"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D\",\n [ChainId.Hardhat]: \"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D\",\n [ChainId.Binance]: \"0x10ED43C718714eb63d5aA57B78B54704E256024E\",\n};\n\nexport const PROVIDER_MIGRATION_ADDRESS = {\n [ChainId.Mainnet]: \"0xd300bf1c650679cc0c3be90b0134439d662b5b78\",\n [ChainId.Goerli]: \"0x656d825dcFEde288Eac469CaFA24456Ca6Bb07e0\",\n [ChainId.Hardhat]: \"0x367761085BF3C12e5DA2Df99AC6E1a824612b8fb\",\n [ChainId.Binance]: \"0xd300bf1c650679cc0c3be90b0134439d662b5b78\",\n};\n","import { ChainId } from \"../constants\";\n\nexport class Currency {\n constructor(\n readonly chainId: ChainId,\n readonly name: string,\n readonly symbol: string,\n readonly decimals: number\n ) {}\n}\n\nexport class Token extends Currency {\n constructor(\n readonly chainId: ChainId,\n readonly address: string,\n readonly name: string,\n readonly symbol: string,\n readonly decimals: number\n ) {\n super(chainId, name, symbol, decimals);\n }\n}\n","import { BigNumber } from \"@ethersproject/bignumber\";\nimport { formatUnits } from \"@ethersproject/units\";\nimport { Currency } from \"./Currency\";\nimport { NUMBER_REGEX } from \"../constants\";\n\nexport class CurrencyValue {\n constructor(readonly currency: Currency, readonly value: BigNumber) {}\n\n static fromString(currency: Currency, value: string) {\n if (!NUMBER_REGEX.test(value)) {\n throw new Error(\"Invalid value provided\");\n }\n let [integer = \"\", decimal = \"\"] = value.split(\".\");\n if (integer === \"\") {\n integer = \"0\";\n }\n if (decimal.length < currency.decimals) {\n decimal = decimal.padEnd(currency.decimals, \"0\");\n } else if (decimal.length > currency.decimals) {\n throw new Error(\"Invalid precision\");\n }\n const bigNumber = BigNumber.from(integer.concat(decimal));\n return new CurrencyValue(currency, bigNumber);\n }\n\n toString() {\n const result = formatUnits(this.value, this.currency.decimals);\n if (result.endsWith(\".0\")) {\n return result.substring(0, result.length - 2);\n }\n return result;\n }\n\n format() {\n return formatCurrency(this.currency.decimals, this.value);\n }\n\n formatWithSymbol() {\n return `${formatCurrency(this.currency.decimals, this.value)} ${\n this.currency.symbol\n }`;\n }\n\n lt(currencyValue: CurrencyValue | undefined) {\n if (!currencyValue) return false;\n if (this.currency !== currencyValue.currency) {\n throw new Error(\"Cannot compare different currencies\");\n }\n return this.value.lt(currencyValue.value);\n }\n\n gt(currencyValue: CurrencyValue | undefined) {\n if (!currencyValue) return false;\n\n if (this.currency !== currencyValue.currency) {\n throw new Error(\"Cannot compare different currencies\");\n }\n return this.value.gt(currencyValue.value);\n }\n\n gtValue(value: BigNumber) {\n return this.value.gt(value);\n }\n\n eq(currencyValue: CurrencyValue) {\n if (this.currency !== currencyValue.currency) {\n throw new Error(\"Cannot compare different currencies\");\n }\n return this.value.eq(currencyValue.value);\n }\n\n sub(value: BigNumber): BigNumber {\n return this.value.sub(value);\n }\n}\n\nconst SIGNIFICANT_DIGITS = 6;\n\nexport function formatCurrency(decimals: number, value: BigNumber): string {\n const stringified = value.toString();\n\n let decimalPart =\n stringified.length <= decimals\n ? stringified.padStart(decimals, \"0\")\n : stringified.substring(stringified.length - decimals);\n decimalPart = stripEndZeroes(decimalPart);\n\n let integerPart =\n stringified.length <= decimals\n ? \"0\"\n : stringified.substring(0, stringified.length - decimals);\n integerPart = applyCommaSeparator(integerPart);\n\n const uncut =\n decimalPart !== \"\" ? `${integerPart}.${decimalPart}` : integerPart;\n return cutToSignificantDigits(uncut);\n}\n\nfunction applyCommaSeparator(value: string) {\n const commaCount = value.length / 3;\n const resultValue = value.split(\"\");\n for (let i = 1; i < commaCount; i++) {\n resultValue.splice(-4 * i + 1, 0, \",\");\n }\n return resultValue.join(\"\");\n}\n\nfunction stripEndZeroes(value: string) {\n return value.replace(/0+$/, \"\");\n}\n\nfunction cutToSignificantDigits(value: string) {\n if (!value.includes(\".\")) {\n return value;\n }\n let digitsFound = 0;\n let separatorFound = false;\n let leadingZero = true;\n for (let i = 0; i < value.length; i++) {\n if ((value[i] === \"0\" && leadingZero) || value[i] === \",\") {\n continue;\n }\n if (value[i] === \".\") {\n separatorFound = true;\n if (digitsFound >= SIGNIFICANT_DIGITS) {\n return value.substring(0, i);\n }\n continue;\n }\n if (value[i] !== \"0\") {\n leadingZero = false;\n }\n if (!leadingZero) {\n digitsFound++;\n if (separatorFound && digitsFound >= SIGNIFICANT_DIGITS) {\n return value.substring(0, i + 1);\n }\n }\n }\n return value;\n}\n","export function formatValueString(value: string, precision: number) {\n const decimalPoint = value.indexOf(\".\");\n if (decimalPoint < 0) {\n return value;\n }\n if (decimalPoint >= precision) {\n return value.substring(0, decimalPoint);\n }\n return value.substring(0, precision + 1);\n}\n","import { BigNumber, BigNumberish } from \"ethers\";\n\nconst ONE = BigNumber.from(1);\nconst TWO = BigNumber.from(2);\n\nexport function sqrt(value: BigNumberish) {\n const x = BigNumber.from(value);\n if (x.lt(\"0\")) {\n throw new Error(\"Square root of a negative number\");\n }\n let z = x.add(ONE).div(TWO);\n let y = x;\n while (z.sub(y).isNegative()) {\n y = z;\n z = x.div(z).add(z).div(TWO);\n }\n return y;\n}\n","import { BigNumber, utils } from \"ethers\";\nimport { formatValueString } from \".\";\n\nexport function toPercent(value: BigNumber, decimals = 16) {\n return `${formatValueString(utils.formatUnits(value, decimals), 4)}%`;\n}\n","import { CurrencyValue } from \"../model\";\n\nexport function isSufficientBalance(\n balance: CurrencyValue | undefined,\n value: CurrencyValue | undefined\n) {\n return balance === undefined || value === undefined\n ? false\n : balance.value.gte(value.value);\n}\n","const yearSeconds = 365 * 24 * 60 * 60;\nconst daySeconds = 24 * 60 * 60;\nconst hourSeconds = 60 * 60;\nconst minuteSeconds = 60;\n\nexport function formatRemainingTime(seconds: number) {\n const years = Math.floor(seconds / yearSeconds);\n const days = Math.floor((seconds - years * yearSeconds) / daySeconds);\n const hours = Math.floor(\n (seconds - years * yearSeconds - days * daySeconds) / hourSeconds\n );\n const minutes = Math.floor(\n (seconds - years * yearSeconds - days * daySeconds - hours * hourSeconds) /\n minuteSeconds\n );\n const time = `${hours < 10 ? `0${hours}` : hours}:${\n minutes < 10 ? `0${minutes}` : minutes\n }`;\n return (years ? `${years}y ` : \"\") + (days ? `${days}d ` : \"\") + time;\n}\n","import { BigNumber, BigNumberish, FixedNumber } from \"ethers\";\n\nexport class Fixed {\n decimals: BigNumber;\n\n value: BigNumber;\n\n constructor(_value: BigNumberish, _decimals: BigNumberish) {\n this.value = BigNumber.from(_value);\n this.decimals = BigNumber.from(_decimals);\n }\n\n isZero() {\n return this.value.isZero();\n }\n\n toString() {\n return FixedNumber.fromValue(this.value, this.decimals).toString();\n }\n\n format(scale: number) {\n const divisor = BigNumber.from(10).pow(this.decimals);\n const integer = this.value.div(divisor);\n const fractional = this.value.mod(divisor);\n let suffix = \"\";\n if (scale !== 0) {\n suffix = `.${fractional\n .toString()\n .padStart(this.decimals.toNumber(), \"0\")\n .padEnd(scale, \"0\")\n .slice(0, scale)}`;\n }\n return `${integer}${suffix}`;\n }\n\n static from(value: BigNumberish, decimal: BigNumberish) {\n return new Fixed(BigNumber.from(value), decimal);\n }\n\n static promoteDecimals(fixed: Fixed, decimals: BigNumberish) {\n if (fixed.decimals.eq(decimals)) {\n return fixed;\n }\n if (fixed.decimals.gt(decimals)) {\n throw `Can't promote Fixed number from ${fixed.decimals.toString()} to ${decimals.toString()} decimals`;\n }\n const multiplier = BigNumber.from(10).pow(\n BigNumber.from(decimals).sub(fixed.decimals)\n );\n return new Fixed(fixed.value.mul(multiplier), decimals);\n }\n\n static alignDecimals(lhs: Fixed, rhs: Fixed) {\n if (lhs.decimals.gt(rhs.decimals)) {\n return [lhs, Fixed.promoteDecimals(rhs, lhs.decimals)];\n }\n if (lhs.decimals.lt(rhs.decimals)) {\n return [Fixed.promoteDecimals(lhs, rhs.decimals), rhs];\n }\n return [lhs, rhs];\n }\n}\n","import { BigNumber, BigNumberish } from \"ethers\";\nimport { Fixed } from \"./Fixed\";\n\nexport class Fraction {\n readonly numerator: BigNumber;\n\n readonly denominator: BigNumber;\n\n constructor(_numerator: BigNumberish, _denominator: BigNumberish) {\n this.numerator = BigNumber.from(_numerator);\n this.denominator = BigNumber.from(_denominator);\n if (this.denominator.eq(0)) {\n throw \"Division by zero\";\n }\n }\n\n static fromFixed(numerator: Fixed, denominator: Fixed) {\n const [n, d] = Fixed.alignDecimals(numerator, denominator);\n return new Fraction(n.value, d.value);\n }\n\n static from(\n numerator: BigNumberish,\n numeratorDecimals: BigNumberish,\n denominator: BigNumberish,\n denominatorDecimals: BigNumberish\n ) {\n const numeratorAsFixed = new Fixed(numerator, numeratorDecimals);\n const denominatorAsFixed = new Fixed(denominator, denominatorDecimals);\n return Fraction.fromFixed(numeratorAsFixed, denominatorAsFixed);\n }\n\n toFixed(scale: number) {\n const multiplier = BigNumber.from(10).pow(scale);\n const result = this.numerator.mul(multiplier).div(this.denominator);\n return Fixed.from(result, scale);\n }\n\n format(scale: number) {\n return this.toFixed(scale).format(scale);\n }\n\n toString() {\n return this.toFixed(18).toString();\n }\n\n isOne() {\n return this.numerator.eq(this.denominator);\n }\n\n reverse() {\n return new Fraction(this.denominator, this.numerator);\n }\n}\n","import { BigNumber } from \"ethers\";\nimport { ChainId, DEFAULT_CHAIN_ID, WRAPPED_NATIVE_CURRENCY } from \"../../constants\";\nimport { formatValueString } from \"../../helpers\";\nimport { Fraction } from \"./Fraction\";\n\nexport class TokenPrice {\n readonly fraction: Fraction;\n\n private constructor(\n readonly address: string,\n readonly chainId = DEFAULT_CHAIN_ID,\n fraction: Fraction\n ) {\n this.fraction = fraction;\n }\n\n static createFrom(\n address: string,\n chainId = DEFAULT_CHAIN_ID,\n nominator: BigNumber,\n denominator: BigNumber,\n decimals = 18\n ) {\n const fraction = Fraction.from(nominator, 18, denominator, decimals);\n return new TokenPrice(address, chainId, fraction);\n }\n\n format(scale: number) {\n return this.fraction.format(scale);\n }\n\n toString() {\n return this.fraction.toString();\n }\n\n toFormattedString(precision: number) {\n const asString = this.toString();\n return formatValueString(asString, precision);\n }\n\n toNumber() {\n return parseFloat(this.toString());\n }\n\n static fromReserves(\n address: string,\n chainId: ChainId,\n reserve0: BigNumber,\n reserve1: BigNumber,\n decimals = 18\n ): TokenPrice {\n return BigNumber.from(WRAPPED_NATIVE_CURRENCY[chainId].address).lt(\n BigNumber.from(address)\n )\n ? TokenPrice.createFrom(address, chainId, reserve0, reserve1, decimals)\n : TokenPrice.createFrom(address, chainId, reserve1, reserve0, decimals);\n }\n\n reverse() {\n return new TokenPrice(this.address, this.chainId, this.fraction.reverse());\n }\n}\n\nexport const ONE = BigNumber.from(1);\n","import cloneClass from \"../helpers/cloneClass\";\nimport { Currency, Token } from \"../model\";\nimport { ChainId } from \"./chainId\";\n\nexport const Ether = new Currency(ChainId.Mainnet, \"Ether\", \"ETH\", 18);\nexport const BNB = new Currency(ChainId.Binance, \"BNB\", \"BNB\", 18);\nexport const GoerliEther = new Currency(\n ChainId.Goerli,\n \"Goerli Ether\",\n \"GETH\",\n 18\n);\n\n// CurrentPrice * 150 * 52 -> Value released per year\n// Number of LP tokens in Provider contract\n// Value released per year / Value of 1 LP token * num tokens\n// APY = return / investment\n\nexport const NATIVE_CURRENCY = {\n [ChainId.Mainnet]: Ether,\n [ChainId.Goerli]: GoerliEther,\n [ChainId.Hardhat]: Ether,\n [ChainId.Binance]: BNB,\n};\n\nconst createAuroxTokenInstance = (network: ChainId, address: string) =>\n new Token(network, address, \"Aurox Token\", \"URUS\", 18);\n\nexport const Urus = createAuroxTokenInstance(\n ChainId.Mainnet,\n \"0xc6dddb5bc6e61e0841c54f3e723ae1f3a807260b\"\n);\n\nexport const GoerliUrus = createAuroxTokenInstance(\n ChainId.Goerli,\n \"0xedd2ce410b0ca704c2351c66382e475cb4e5fc10\"\n);\n\nexport const HardhatUrus = createAuroxTokenInstance(\n ChainId.Hardhat,\n \"0xc6dddb5bc6e61e0841c54f3e723ae1f3a807260b\"\n);\n\nexport const BinanceUrus = createAuroxTokenInstance(\n ChainId.Binance,\n \"0xc6dddb5bc6e61e0841c54f3e723ae1f3a807260b\"\n);\n\nexport const URUS_CONTRACT = {\n [ChainId.Mainnet]: Urus,\n [ChainId.Goerli]: GoerliUrus,\n [ChainId.Hardhat]: HardhatUrus,\n [ChainId.Binance]: BinanceUrus,\n};\n\nconst createWrappedEthTokenInstance = (network: ChainId, address: string) =>\n new Token(network, address, `Wrapped ${NATIVE_CURRENCY[network].name}`, `W${NATIVE_CURRENCY[network].symbol}`, 18);\n\nexport const WrappedEth = createWrappedEthTokenInstance(\n ChainId.Mainnet,\n \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n);\n\nexport const GoerliWrappedEth = createWrappedEthTokenInstance(\n ChainId.Goerli,\n \"0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6\"\n);\n\nexport const HardhatWrappedEth = createWrappedEthTokenInstance(\n ChainId.Hardhat,\n \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n);\n\nexport const BinanceWrappedEth = createWrappedEthTokenInstance(\n ChainId.Binance,\n \"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c\"\n);\n\nexport const WRAPPED_NATIVE_CURRENCY = {\n [ChainId.Mainnet]: WrappedEth,\n [ChainId.Goerli]: GoerliWrappedEth,\n [ChainId.Hardhat]: HardhatWrappedEth,\n [ChainId.Binance]: BinanceWrappedEth,\n};\n\nconst createLPTokenInstance = (network: ChainId, address: string) =>\n new Token(\n network,\n address,\n `URUS-${WRAPPED_NATIVE_CURRENCY[network].symbol} Liquidity Provider Token`,\n `URUS-${WRAPPED_NATIVE_CURRENCY[network].symbol} LP`,\n 18\n );\n\nexport const LPToken = createLPTokenInstance(\n ChainId.Mainnet,\n \"0xebD54ad6c1D4B079Bdc20Ecf36dd29d1D76c9977\"\n);\n\nexport const GoerliLPToken = createLPTokenInstance(\n ChainId.Goerli,\n \"0xd727e20ca57b0d41fad2f7909c6898ba1794ee0c\"\n);\n\nexport const HardhatLPToken = createLPTokenInstance(\n ChainId.Hardhat,\n \"0xebD54ad6c1D4B079Bdc20Ecf36dd29d1D76c9977\"\n);\n\nexport const BinanceLPToken = createLPTokenInstance(\n ChainId.Binance,\n \"0x6a78caed4c4bf0ee494dd80034935323512e794a\"\n);\n\nexport const URUS_LP_TOKEN = {\n [ChainId.Mainnet]: LPToken,\n [ChainId.Goerli]: GoerliLPToken,\n [ChainId.Hardhat]: HardhatLPToken,\n [ChainId.Binance]: BinanceLPToken,\n};\n","import { ChainId } from \"./chainId\";\n\nexport const LIQUIDITY_INFO = {\n [ChainId.Mainnet]: { token: \"UNI-V2\", exchange: \"Uniswap\" },\n [ChainId.Goerli]: { token: \"UNI-V2\", exchange: \"Uniswap\" },\n [ChainId.Hardhat]: { token: \"UNI-V2\", exchange: \"Uniswap\" },\n [ChainId.Binance]: { token: \"Cake-LP\", exchange: \"PancakeSwap\" },\n};","export const Colors = {\n White: \"#FFFFFF\",\n Black: \"#000000\",\n Red: \"#ff9090\",\n Green: \"#0ddf7d\",\n LightGreen: \"#89FFBA\",\n Blue: \"#247DFF\",\n LightBlue: \"#63A2FF\",\n Gray: \"#939393\",\n GrayAlt: \"#BCCBEC\",\n LightGray: \"#e8e8e8\",\n Shadow: \"0 2px 5px 0 rgba(0, 0, 0, 0.3)\",\n MainBackground: \"#070e1d\",\n BackgroundPrimary: \"#161D2D\",\n BackgroundSecondary: \"rgba(28, 39, 63, 0.2)\",\n PrimaryTextColor: \"#AAB4CF\",\n SecondaryTextColor: \"#f2f8ff\",\n BorderPrimary: \"#1e2739\",\n BorderSecondary: \"#272E3D\",\n DisabledColor: \"#66708C\",\n Success: \"#6FCF97\",\n Danger: \"#EB5757\",\n};\n\nexport const Fonts = {\n Body: \"Roboto, Ubuntu, Arial, Helvetica, sans-serif\",\n Monospace: \"'Ubuntu Mono', monospace\",\n};\n","import { BigNumber } from \"ethers\";\n\nexport const DECIMAL_BASE = BigNumber.from(\"10\");\nexport const NUMBER_REGEX = /^\\d*(\\.\\d*)?$/;\n","import { createContext, useContext } from \"react\";\n\nexport const BlockNumberContext = createContext(undefined);\n\nexport function useBlockNumber() {\n return useContext(BlockNumberContext);\n}\n","interface BlockNumberState {\n [chainId: number]: number | undefined;\n}\n\ninterface BlockNumberChanged {\n chainId: number;\n blockNumber: number;\n}\n\nexport function blockNumberReducer(\n state: BlockNumberState = {},\n action: BlockNumberChanged\n) {\n const current = state[action.chainId];\n if (!current || action.blockNumber > current) {\n return {\n ...state,\n [action.chainId]: action.blockNumber,\n };\n }\n return state;\n}\n","import { UnsupportedChainIdError } from \"@web3-react/core\";\nimport { ethers } from \"ethers\";\nimport { createContext } from \"react\";\nimport { ChainId, DEFAULT_CHAIN_ID } from \"../../constants\";\n\nexport interface Account {\n address: string;\n}\n\ninterface IEthersContext {\n connectWallet: () => Promise;\n disconnectWallet: () => void;\n account: Account | undefined;\n chainId: ChainId;\n changeChain: (chainId: ChainId) => void;\n ethersProvider: ethers.providers.Web3Provider | undefined;\n error: UnsupportedChainIdError | undefined;\n}\n\nexport const EthersContext = createContext({\n connectWallet: async () => {},\n disconnectWallet: () => {},\n account: undefined,\n chainId: DEFAULT_CHAIN_ID,\n changeChain: () => {},\n ethersProvider: undefined,\n error: undefined,\n});\n","import { useContext } from \"react\";\nimport { EthersContext } from \"../providers/ethers/ethersContext\";\n\nexport function useEthers() {\n return useContext(EthersContext);\n}\n","import { useMemo } from \"react\";\nimport { useTransactionsContext } from \"../providers\";\nimport { useEthers } from \"./useEthers\";\n\nexport function useTransactions() {\n const { chainId, account } = useEthers();\n const { addTransaction, transactions } = useTransactionsContext();\n\n const filtered = useMemo(() => {\n if (chainId === undefined || !account) {\n return [];\n }\n return (transactions[chainId] ?? []).filter(\n (x) => x.from === account.address\n );\n }, [transactions, chainId, account]);\n\n return {\n transactions: filtered,\n addTransaction,\n };\n}\n","import { createContext, useContext } from \"react\";\n\nimport {\n DEFAULT_STORED_TRANSACTIONS,\n TransactionToSave,\n StoredTransactions,\n} from \"./model\";\n\nexport const TransactionsContext = createContext<{\n transactions: StoredTransactions;\n addTransaction: (transaction: TransactionToSave) => void;\n}>({\n transactions: DEFAULT_STORED_TRANSACTIONS,\n addTransaction: () => undefined,\n});\n\nexport function useTransactionsContext() {\n return useContext(TransactionsContext);\n}\n","import { createContext, useContext } from \"react\";\nimport { ChainCall } from \"./callsReducer\";\nimport { ChainState } from \"./model\";\n\nexport const ChainStateContext = createContext<{\n value?: {\n blockNumber: number;\n state?: ChainState;\n error?: unknown;\n };\n addCalls(calls: ChainCall[]): void;\n removeCalls(calls: ChainCall[]): void;\n}>({\n addCalls: () => {\n // empty\n },\n removeCalls: () => {\n // empty\n },\n});\n\nexport function useChainState() {\n return useContext(ChainStateContext);\n}\n","import { useContext, useEffect } from \"react\";\nimport { ChainCall } from \"../providers/chainState/callsReducer\";\nimport { ChainStateContext } from \"../providers/chainState/context\";\n\nexport function useChainCalls(calls: ChainCall[]) {\n const { addCalls, removeCalls, value } = useContext(ChainStateContext);\n\n useEffect(() => {\n addCalls(calls);\n return () => removeCalls(calls);\n }, [JSON.stringify(calls), addCalls, removeCalls]);\n\n return calls.map(({ address, data }) => value?.state?.[address]?.[data]);\n}\n\nexport function useChainCall(call: ChainCall | false | undefined) {\n const [result] = useChainCalls(call ? [call] : []);\n return result;\n}\n","import {\n DEFAULT_CHAIN_ID,\n MULTICALL_ABI,\n MULTICALL_ADDRESS,\n NATIVE_CURRENCY,\n} from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { Interface } from \"@ethersproject/abi\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { useEthers } from \"./useEthers\";\nimport { CurrencyValue } from \"../model\";\n\nconst multicallInterface = new Interface(MULTICALL_ABI);\n\nexport function useEthBalance() {\n const { chainId = DEFAULT_CHAIN_ID, account } = useEthers();\n\n const data = useChainCall(\n !!account && {\n address: MULTICALL_ADDRESS[chainId],\n data: multicallInterface.encodeFunctionData(\"getEthBalance\", [\n account.address,\n ]),\n }\n );\n\n const currency = NATIVE_CURRENCY[chainId];\n return data !== undefined\n ? new CurrencyValue(currency, BigNumber.from(data))\n : undefined;\n}\n","/* eslint-disable no-param-reassign */\nimport { useEffect, useState } from \"react\";\nimport { NUMBER_REGEX } from \"../constants\";\n\nexport function useNumberInput(decimals = 6) {\n const [value, setValue] = useState(\"\");\n\n function set(value: string) {\n if (NUMBER_REGEX.test(value)) {\n setValue(truncateDecimals(stripLeadingZeroes(value), decimals));\n }\n }\n\n useEffect(() => {\n setValue(truncateDecimals(value, decimals));\n }, [decimals]);\n\n return [value, set] as const;\n}\n\nexport function stripLeadingZeroes(value: string) {\n if (value === \"\") {\n return value;\n }\n const leadingZeroes = value.match(/^0*/)?.[0].length;\n if (leadingZeroes) {\n value = value.substring(leadingZeroes);\n }\n if (value.startsWith(\".\") || value === \"\") {\n value = `0${value}`;\n }\n return value;\n}\n\nexport function truncateDecimals(value: string, decimals: number) {\n if (value.includes(\".\")) {\n const [integer, decimal] = value.split(\".\");\n const trimmed = decimal.substring(0, decimals);\n return decimals !== 0 ? `${integer}.${trimmed}` : integer;\n }\n return value;\n}\n","import { useState } from \"react\";\n\nconst NORMAL_REGEX = /^(0*)(\\d+)$/;\n\nexport function useNaturalNumberInput(maxValue: number) {\n const [value, setValue] = useState(\"0\");\n function set(value: string) {\n if (value.length === 0) {\n setValue(\"0\");\n }\n const match = value.match(NORMAL_REGEX);\n if (match) {\n if (Number.parseInt(match[2], 10) <= maxValue) {\n setValue(match[2]);\n } else {\n setValue(maxValue.toString());\n }\n }\n }\n return [value, set] as const;\n}\n","import { useEffect, useState } from \"react\";\n\nfunction getItem(key: string) {\n const item = window.localStorage.getItem(key);\n let result;\n if (item !== null) {\n try {\n result = JSON.parse(item);\n } catch (e) {\n // ignore error\n }\n }\n return result;\n}\n\nfunction setItem(key: string, value: any) {\n if (value === undefined) {\n window.localStorage.removeItem(key);\n } else {\n const toStore = JSON.stringify(value);\n window.localStorage.setItem(key, toStore);\n return JSON.parse(toStore);\n }\n}\n\nexport function useLocalStorage(key: string) {\n const [value, setValue] = useState(() => getItem(key));\n\n useEffect(() => {\n setValue(getItem(key));\n }, [key]);\n\n useEffect(() => {\n setItem(key, value);\n }, [value, key]);\n\n return [value, setValue] as const;\n}\n","import { useEthers } from \"./useEthers\";\nimport { CurrencyValue, Token } from \"../model\";\nimport { DEFAULT_CHAIN_ID } from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { Interface } from \"@ethersproject/abi\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport ierc20 from \"../abi/erc20.abi.json\";\nimport { useMemo } from \"react\";\n\nconst balanceInterface = new Interface(ierc20);\n\nexport function useTokenBalance(token: Token, overrideAccountAddress?: string) {\n const { chainId = DEFAULT_CHAIN_ID, account } = useEthers();\n\n try {\n const data = useChainCall(\n !!account &&\n token.chainId === chainId && {\n address: token.address,\n data: balanceInterface.encodeFunctionData(\"balanceOf\", [\n overrideAccountAddress ?? account.address,\n ]),\n }\n );\n\n return useMemo(\n () =>\n data !== undefined\n ? new CurrencyValue(token, BigNumber.from(data))\n : undefined,\n [data]\n );\n } catch (e) {\n return new CurrencyValue(token, BigNumber.from(\"0\"));\n }\n}\n","import { DEFAULT_CHAIN_ID, URUS_CONTRACT } from \"../constants\";\nimport { useEthers } from \"./useEthers\";\nimport { useTokenBalance } from \"./useTokenBalance\";\n\nexport function useUrusBalance() {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n\n return useTokenBalance(URUS_CONTRACT[chainId]);\n}\n","import { DEFAULT_CHAIN_ID, URUS_LP_TOKEN } from \"../constants\";\nimport { useEthers } from \"./useEthers\";\nimport { useTokenBalance } from \"./useTokenBalance\";\n\nexport function useLPTokenBalance(overrideAccountAddress?: string) {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n return useTokenBalance(URUS_LP_TOKEN[chainId], overrideAccountAddress);\n}\n","import { Contract } from \"ethers\";\nimport AuroxToken from \"../abi/AuroxToken.json\";\nimport StakingMaster from \"../abi/StakingMaster.json\";\nimport Provider from \"../abi/Provider.json\";\nimport erc20abi from \"../abi/erc20.abi.json\";\nimport providerMigrationABI from \"../abi/ProviderMigration.abi.json\";\nimport IUniswapV2Router02 from \"@uniswap/v2-periphery/build/IUniswapV2Router02.json\";\nimport {\n DEFAULT_CHAIN_ID,\n PROVIDER_ADDRESS,\n STAKING_MASTER_ADDRESS,\n URUS_CONTRACT,\n URUS_LP_TOKEN,\n UNISWAPV2ROUTER02,\n PROVIDER_MIGRATION_ADDRESS,\n} from \"../constants\";\nimport { useEthers } from \".\";\n\nexport function useContracts() {\n const { chainId = DEFAULT_CHAIN_ID, ethersProvider } = useEthers();\n const signer = ethersProvider?.getSigner();\n // TODO contracts here\n return {\n auroxToken: new Contract(\n URUS_CONTRACT[chainId].address,\n AuroxToken.abi,\n signer\n ),\n lpToken: new Contract(URUS_LP_TOKEN[chainId].address, erc20abi, signer),\n stakingMaster: new Contract(\n STAKING_MASTER_ADDRESS[chainId],\n StakingMaster.abi,\n signer\n ),\n provider: new Contract(PROVIDER_ADDRESS[chainId], Provider.abi, signer),\n uniswapRouter: new Contract(\n UNISWAPV2ROUTER02[chainId],\n IUniswapV2Router02.abi,\n signer\n ),\n providerMigration: new Contract(\n PROVIDER_MIGRATION_ADDRESS[chainId],\n providerMigrationABI.abi,\n signer\n ),\n };\n}\n","import { useEthers } from \"./useEthers\";\nimport { CurrencyValue } from \"../model\";\nimport {\n DEFAULT_CHAIN_ID,\n PROVIDER_ADDRESS,\n URUS_LP_TOKEN,\n} from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { Interface } from \"@ethersproject/abi\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport Provider from \"../abi/Provider.json\";\n\nconst investmentInterface = new Interface(Provider.abi);\n\nexport function useLiquidityDepositTotal() {\n const { chainId = DEFAULT_CHAIN_ID, account } = useEthers();\n const address = PROVIDER_ADDRESS[chainId];\n const token = URUS_LP_TOKEN[chainId];\n\n try {\n const data = useChainCall(\n !!account && {\n address,\n data: investmentInterface.encodeFunctionData(\n \"returnUsersInvestmentTotal\",\n [account.address]\n ),\n }\n );\n\n return data !== undefined\n ? new CurrencyValue(token, BigNumber.from(data))\n : undefined;\n } catch (e) {\n return new CurrencyValue(token, BigNumber.from(\"0\"));\n }\n}\n","import { Interface } from \"@ethersproject/abi\";\nimport { useMemo } from \"react\";\nimport { DEFAULT_CHAIN_ID, URUS_LP_TOKEN } from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useEthers } from \"./useEthers\";\n\nconst reservesInterface = new Interface([\n \"function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast)\",\n]);\nconst functionName = \"getReserves\";\n\nexport function useReserves() {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const token = URUS_LP_TOKEN[chainId];\n\n const data = useChainCall(\n token.chainId === chainId && {\n address: token.address,\n data: reservesInterface.encodeFunctionData(functionName, []),\n }\n );\n\n return useMemo(() => {\n if (data !== undefined) {\n const [reserve0, reserve1] = reservesInterface.decodeFunctionResult(\n functionName,\n data\n );\n if (reserve0 && reserve1) {\n return [reserve0, reserve1];\n }\n return undefined;\n }\n }, [data]);\n}\n","import { useEffect, useState } from \"react\";\nimport { DEFAULT_CHAIN_ID, URUS_CONTRACT } from \"../constants\";\nimport { TokenPrice } from \"../model\";\nimport { useEthers } from \"./useEthers\";\nimport { useReserves } from \"./useReserves\";\n\nexport function useTokenPrice() {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n\n const [price, setPrice] = useState();\n const reserves = useReserves();\n\n useEffect(() => {\n if (reserves !== undefined) {\n const [reserve0, reserve1] = reserves;\n if (reserve0 && reserve1) {\n setPrice(\n TokenPrice.fromReserves(\n URUS_CONTRACT[chainId].address,\n chainId,\n reserve0,\n reserve1,\n 18\n )\n );\n }\n }\n }, [reserves]);\n\n return price;\n}\n","import {\n DEFAULT_CHAIN_ID,\n STAKING_MASTER_ADDRESS,\n URUS_CONTRACT,\n} from \"../constants\";\nimport { useEthers } from \"./useEthers\";\nimport StakingMaster from \"../abi/StakingMaster.json\";\nimport { Interface } from \"ethers/lib/utils\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useMemo } from \"react\";\nimport { CurrencyValue } from \"../model\";\nimport { BigNumber } from \"ethers\";\n\nconst stakesInterface = new Interface(StakingMaster.abi);\n\nexport function useStakesTotal() {\n const { chainId = DEFAULT_CHAIN_ID, account } = useEthers();\n const data = useChainCall(\n !!account && {\n address: STAKING_MASTER_ADDRESS[chainId],\n data: stakesInterface.encodeFunctionData(\"returnUsersTotalStakeValue\", [\n account.address,\n ]),\n }\n );\n return useMemo(\n () =>\n data !== undefined\n ? new CurrencyValue(URUS_CONTRACT[chainId], BigNumber.from(data))\n : undefined,\n [data]\n );\n}\n","import { BigNumber } from \"ethers\";\nimport { Interface } from \"ethers/lib/utils\";\nimport { useMemo } from \"react\";\nimport { useEthers } from \".\";\nimport { DEFAULT_CHAIN_ID } from \"../constants\";\nimport { CurrencyValue, Token } from \"../model\";\nimport { useChainCall } from \"./useChainCalls\";\nimport ierc20 from \"../abi/erc20.abi.json\";\n\nconst tokenInterface = new Interface(ierc20);\n\nexport function useTokenSupply(token: Token) {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const data = useChainCall(\n token.chainId === chainId && {\n address: token.address,\n data: tokenInterface.encodeFunctionData(\"totalSupply\", []),\n }\n );\n return useMemo(\n () =>\n data !== undefined\n ? new CurrencyValue(token, BigNumber.from(data))\n : undefined,\n [data]\n );\n}\n","import { useTokenSupply } from \".\";\nimport { DEFAULT_CHAIN_ID, URUS_LP_TOKEN } from \"../constants\";\nimport { useEthers } from \"./useEthers\";\n\nexport function useLPTokenSupply() {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n return useTokenSupply(URUS_LP_TOKEN[chainId]);\n}\n","import { BigNumber } from \"ethers\";\nimport { Interface } from \"ethers/lib/utils\";\nimport { useMemo } from \"react\";\nimport Provider from \"../abi/Provider.json\";\nimport { DEFAULT_CHAIN_ID, PROVIDER_ADDRESS } from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useEthers } from \"./useEthers\";\n\nconst providerInterface = new Interface(Provider.abi);\nconst functionName = \"returnCurrentEpoch\";\n\nexport function useCurrentEpoch() {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const data = useChainCall({\n address: PROVIDER_ADDRESS[chainId],\n data: providerInterface.encodeFunctionData(functionName, []),\n });\n return useMemo(() => (data ? BigNumber.from(data) : undefined), [data]);\n}\n","import { BigNumber } from \"ethers\";\nimport { Interface } from \"ethers/lib/utils\";\nimport { useMemo } from \"react\";\nimport StakingMaster from \"../abi/StakingMaster.json\";\nimport { DEFAULT_CHAIN_ID, STAKING_MASTER_ADDRESS } from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useCurrentEpoch } from \"./useCurrentEpoch\";\nimport { useEthers } from \"./useEthers\";\n\nconst stakesInterface = new Interface(StakingMaster.abi);\nconst functionName = \"returnInterestPercentage\";\n\nexport function useInterestPercentage(duration: string, fromProvider = false) {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const epoch = useCurrentEpoch();\n const data = useChainCall(\n epoch && {\n address: STAKING_MASTER_ADDRESS[chainId],\n data: stakesInterface.encodeFunctionData(functionName, [\n BigNumber.from(duration),\n epoch.eq(1) && fromProvider,\n fromProvider,\n ]),\n }\n );\n return useMemo(() => (data ? BigNumber.from(data) : undefined), [data]);\n}\n","import { BigNumber, utils } from \"ethers\";\nimport { useEthers } from \".\";\nimport {\n DEFAULT_CHAIN_ID,\n URUS_CONTRACT,\n URUS_LP_TOKEN,\n WRAPPED_NATIVE_CURRENCY,\n} from \"../constants\";\nimport { sqrt } from \"../helpers\";\nimport { CurrencyValue } from \"../model\";\nimport { useLPTokenSupply } from \"./useLPTokenSupply\";\nimport { useReserves } from \"./useReserves\";\n\nconst MIN_LIQUIDITY = BigNumber.from(1000);\n\nexport function useLPAmountMinted(amountUrus: string, amountEth: string) {\n const reserves = useReserves();\n const totalSupply = useLPTokenSupply();\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const addressUrus = URUS_CONTRACT[chainId].address;\n const addressWeth = WRAPPED_NATIVE_CURRENCY[chainId].address;\n const amounts = BigNumber.from(addressUrus).lt(BigNumber.from(addressWeth))\n ? [utils.parseEther(amountUrus), utils.parseEther(amountEth)]\n : [utils.parseEther(amountEth), utils.parseEther(amountUrus)];\n if (reserves && totalSupply) {\n let lpMinted: BigNumber;\n if (totalSupply.value.eq(0)) {\n lpMinted = BigNumber.from(\n sqrt(amounts[0].mul(amounts[1]).toNumber())\n ).sub(MIN_LIQUIDITY);\n } else {\n const amount0 = amounts[0].mul(totalSupply.value).div(reserves[0]);\n const amount1 = amounts[1].mul(totalSupply.value).div(reserves[1]);\n lpMinted = amount0.lte(amount1) ? amount0 : amount1;\n }\n if (lpMinted.lte(0)) {\n throw new Error(\"Insufficient input amount\");\n }\n return new CurrencyValue(URUS_LP_TOKEN[chainId], lpMinted);\n }\n return undefined;\n}\n","import { Interface } from \"ethers/lib/utils\";\nimport { useMemo } from \"react\";\nimport Provider from \"../abi/Provider.json\";\nimport {\n DEFAULT_CHAIN_ID,\n PROVIDER_ADDRESS,\n URUS_CONTRACT,\n} from \"../constants\";\nimport { CurrencyValue } from \"../model\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useEthers } from \"./useEthers\";\n\nconst providerInterface = new Interface(Provider.abi);\nconst functionName = \"returnAllClaimableRewardAmounts\";\n\nexport function useClaimableLiquidityReward() {\n const { chainId = DEFAULT_CHAIN_ID, account } = useEthers();\n const data = useChainCall(\n !!account && {\n address: PROVIDER_ADDRESS[chainId],\n data: providerInterface.encodeFunctionData(functionName, [\n account.address,\n ]),\n }\n );\n return useMemo(() => {\n if (data !== undefined) {\n const [rewardTotal] = providerInterface.decodeFunctionResult(\n functionName,\n data\n );\n return new CurrencyValue(URUS_CONTRACT[chainId], rewardTotal);\n }\n return undefined;\n }, [data]);\n}\n","import { Interface } from \"ethers/lib/utils\";\nimport { useMemo } from \"react\";\nimport Provider from \"../abi/Provider.json\";\nimport { DEFAULT_CHAIN_ID, PROVIDER_ADDRESS } from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useCurrentEpoch } from \"./useCurrentEpoch\";\nimport { useEthers } from \"./useEthers\";\n\nconst providerInterface = new Interface(Provider.abi);\nconst functionName = \"returnIfInFirstDayOfEpoch\";\n\nexport function useFirstDayOfEpoch() {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const currentEpoch = useCurrentEpoch();\n const data = useChainCall(\n !!currentEpoch && {\n address: PROVIDER_ADDRESS[chainId],\n data: providerInterface.encodeFunctionData(functionName, [currentEpoch]),\n }\n );\n return useMemo(\n () =>\n data\n ? providerInterface.decodeFunctionResult(functionName, data)[0]\n : undefined,\n [data]\n );\n}\n","import { BigNumber } from \"ethers\";\nimport { Interface } from \"ethers/lib/utils\";\nimport { useMemo } from \"react\";\nimport StakingMaster from \"../abi/StakingMaster.json\";\nimport {\n DEFAULT_CHAIN_ID,\n STAKING_MASTER_ADDRESS,\n URUS_CONTRACT,\n} from \"../constants\";\nimport { CurrencyValue } from \"../model\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useEthers } from \"./useEthers\";\n\nconst stakesInterface = new Interface(StakingMaster.abi);\nconst functionName = \"returnStakesClaimablePoolRewards\";\n\nexport function usePoolReward(stakeAddress: string) {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const data = useChainCall({\n address: STAKING_MASTER_ADDRESS[chainId],\n data: stakesInterface.encodeFunctionData(functionName, [stakeAddress]),\n });\n return useMemo(\n () =>\n data\n ? new CurrencyValue(URUS_CONTRACT[chainId], BigNumber.from(data))\n : undefined,\n [data]\n );\n}\n","import { BigNumber } from \"ethers\";\nimport { Interface } from \"ethers/lib/utils\";\nimport { useMemo } from \"react\";\nimport { useEthers } from \".\";\nimport StakingMaster from \"../abi/StakingMaster.json\";\nimport { DEFAULT_CHAIN_ID, STAKING_MASTER_ADDRESS } from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\n\nconst stakesInterface = new Interface(StakingMaster.abi);\nconst functionName = \"returnValidUsersProviderStake\";\n\nexport function useUsersProviderStakeExists() {\n const { chainId = DEFAULT_CHAIN_ID, account } = useEthers();\n const data = useChainCall(\n !!account && {\n address: STAKING_MASTER_ADDRESS[chainId],\n data: stakesInterface.encodeFunctionData(functionName, [account.address]),\n }\n );\n return useMemo(() => (data ? !BigNumber.from(data).eq(0) : false), [data]);\n}\n","import { Interface } from \"ethers/lib/utils\";\nimport { useEthers } from \".\";\nimport {\n DEFAULT_CHAIN_ID,\n PROVIDER_ADDRESS,\n URUS_CONTRACT,\n} from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useCurrentEpoch } from \"./useCurrentEpoch\";\nimport Provider from \"../abi/Provider.json\";\nimport { useMemo } from \"react\";\nimport { CurrencyValue } from \"../model\";\nimport { BigNumber } from \"ethers\";\n\nconst providerInterface = new Interface(Provider.abi);\n\nexport function usePoolRate() {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const epoch = useCurrentEpoch();\n const data = useChainCall(\n !!epoch && {\n address: PROVIDER_ADDRESS[chainId],\n data: providerInterface.encodeFunctionData(\"returnTotalRewardForEpoch\", [\n epoch,\n ]),\n }\n );\n return useMemo(\n () =>\n data &&\n new CurrencyValue(URUS_CONTRACT[chainId], BigNumber.from(data).div(2)),\n [data]\n );\n}\n","import React, { useEffect, useReducer, ReactNode } from \"react\";\nimport { BlockNumberContext } from \"./context\";\nimport { blockNumberReducer } from \"./reducer\";\nimport { useEthers, useDebounce } from \"../../hooks\";\n\ninterface Props {\n children: ReactNode;\n}\n\nexport function BlockNumberProvider({ children }: Props) {\n const { ethersProvider, chainId } = useEthers();\n const [state, dispatch] = useReducer(blockNumberReducer, {});\n\n useEffect(() => {\n if (ethersProvider && chainId !== undefined) {\n const update = (blockNumber: number) =>\n dispatch({ chainId, blockNumber });\n ethersProvider.on(\"block\", update);\n return () => {\n ethersProvider.off(\"block\", update);\n };\n }\n }, [ethersProvider, chainId]);\n\n const debouncedState = useDebounce(state, 100);\n const blockNumber =\n chainId !== undefined ? debouncedState[chainId] : undefined;\n\n return (\n \n );\n}\n","import { useEffect, useState } from \"react\";\n\n// modified from https://usehooks.com/useDebounce/\nexport function useDebounce(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import { ChainState } from \"./model\";\n\ninterface State {\n [chainId: number]:\n | {\n blockNumber: number;\n state?: ChainState;\n error?: unknown;\n }\n | undefined;\n}\n\ntype Action = FetchSuccess | FetchError;\n\ninterface FetchSuccess {\n type: \"FETCH_SUCCESS\";\n chainId: number;\n blockNumber: number;\n state: ChainState;\n}\n\ninterface FetchError {\n type: \"FETCH_ERROR\";\n chainId: number;\n blockNumber: number;\n error: unknown;\n}\n\nexport function chainStateReducer(state: State = {}, action: Action) {\n const current = state[action.chainId]?.blockNumber;\n if (!current || action.blockNumber >= current) {\n if (action.type === \"FETCH_SUCCESS\") {\n return {\n ...state,\n [action.chainId]: {\n blockNumber: action.blockNumber,\n state: action.state,\n },\n };\n }\n if (action.type === \"FETCH_ERROR\") {\n return {\n ...state,\n [action.chainId]: {\n ...state[action.chainId],\n blockNumber: action.blockNumber,\n error: action.error,\n },\n };\n }\n }\n return state;\n}\n","type Action = AddCall | RemoveCall;\n\nexport interface ChainCall {\n address: string;\n data: string;\n}\n\ninterface AddCall {\n type: \"ADD_CALLS\";\n calls: ChainCall[];\n}\n\ninterface RemoveCall {\n type: \"REMOVE_CALLS\";\n calls: ChainCall[];\n}\n\nexport function callsReducer(state: ChainCall[] = [], action: Action) {\n if (action.type === \"ADD_CALLS\") {\n return [...state, ...action.calls];\n }\n let finalState = state;\n for (const call of action.calls) {\n const index = state.findIndex(\n (x) => x.address === call.address && x.data === call.data\n );\n if (index !== -1) {\n finalState = finalState.filter((_, i) => i !== index);\n }\n }\n return finalState;\n}\n","import { BigNumber } from \"@ethersproject/bignumber\";\nimport { Contract } from \"@ethersproject/contracts\";\nimport { Provider } from \"@ethersproject/providers\";\nimport { ChainId, MULTICALL_ABI, MULTICALL_ADDRESS } from \"../../constants\";\nimport { ChainCall } from \"./callsReducer\";\nimport { ChainState } from \"./model\";\n\nexport async function multicall(\n provider: Provider,\n chainId: ChainId,\n blockNumber: number,\n requests: ChainCall[]\n): Promise {\n if (requests.length === 0) {\n return {};\n }\n const contract = new Contract(\n MULTICALL_ADDRESS[chainId],\n MULTICALL_ABI,\n provider\n );\n const [, results]: [BigNumber, string[]] = await contract.aggregate(\n requests.map(({ address, data }) => [address, data]),\n { blockTag: blockNumber }\n );\n const state: ChainState = {};\n for (let i = 0; i < requests.length; i++) {\n const { address, data } = requests[i];\n const result = results[i];\n const stateForAddress = state[address] ?? {};\n stateForAddress[data] = result;\n state[address] = stateForAddress;\n }\n return state;\n}\n","import React, { ReactNode, useCallback, useEffect, useReducer } from \"react\";\nimport { useDebouncePair, useEthers } from \"../../hooks\";\nimport { useBlockNumber } from \"../blockNumber/context\";\nimport { ChainStateContext } from \"./context\";\nimport { chainStateReducer } from \"./chainStateReducer\";\nimport { callsReducer, ChainCall } from \"./callsReducer\";\nimport { multicall } from \"./multicall\";\nimport { DEFAULT_CHAIN_ID } from \"../../constants\";\n\ninterface Props {\n children: ReactNode;\n}\n\nexport function ChainStateProvider({ children }: Props) {\n const { ethersProvider, chainId = DEFAULT_CHAIN_ID } = useEthers();\n const blockNumber = useBlockNumber();\n const [calls, dispatchCalls] = useReducer(callsReducer, []);\n const [state, dispatchState] = useReducer(chainStateReducer, {});\n\n const addCalls = useCallback(\n (calls: ChainCall[]) => {\n dispatchCalls({ type: \"ADD_CALLS\", calls });\n },\n [dispatchCalls]\n );\n\n const removeCalls = useCallback(\n (calls: ChainCall[]) => {\n dispatchCalls({ type: \"REMOVE_CALLS\", calls });\n },\n [dispatchCalls]\n );\n\n const [debouncedCalls, debouncedId] = useDebouncePair(calls, chainId, 50);\n const uniqueCalls = debouncedId === chainId ? getUnique(debouncedCalls) : [];\n\n useEffect(() => {\n if (ethersProvider && blockNumber !== undefined && chainId !== undefined) {\n multicall(ethersProvider, chainId, blockNumber, uniqueCalls)\n .then((state) =>\n dispatchState({\n type: \"FETCH_SUCCESS\",\n blockNumber,\n chainId,\n state,\n })\n )\n .catch((error) => {\n console.error(error);\n dispatchState({\n type: \"FETCH_ERROR\",\n blockNumber,\n chainId,\n error,\n });\n });\n }\n }, [ethersProvider, blockNumber, chainId, JSON.stringify(uniqueCalls)]);\n\n const value = chainId !== undefined ? state[chainId] : undefined;\n return (\n \n );\n}\n\nfunction getUnique(requests: ChainCall[]) {\n const unique: ChainCall[] = [];\n for (const request of requests) {\n if (\n !unique.find(\n (x) => x.address === request.address && x.data === request.data\n )\n ) {\n unique.push(request);\n }\n }\n return unique;\n}\n","import { useEffect, useState } from \"react\";\n\n// modified from https://usehooks.com/useDebounce/\nexport function useDebouncePair(\n first: T,\n second: U,\n delay: number\n): [T, U] {\n const [debouncedValue, setDebouncedValue] = useState<[T, U]>([first, second]);\n\n useEffect(() => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue([first, second]);\n }, delay);\n\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler);\n };\n }, [first, second, delay]);\n\n return debouncedValue;\n}\n","import WalletConnectProvider from \"@walletconnect/web3-provider\";\n\nimport { ChainId } from \"./chainId\";\n\nexport const PROVIDER_OPTIONS = {\n injected: {\n display: {\n name: \"Injected\",\n description: \"Connect with the provider in your Browser\",\n },\n package: null,\n },\n walletconnect: {\n display: {\n name: \"Mobile\",\n description: \"Scan qrcode with your mobile wallet\",\n },\n package: WalletConnectProvider,\n options: {\n infuraId: \"8242075e0b5845699fc97575aef9385c\",\n },\n },\n};\n\nfunction sampleValue(entries: string[]): string {\n const size = entries.length;\n\n return entries[Math.round(Math.random() * (size - 1))];\n}\n\nexport const PROVIDER_OPTIONS_BY_CHAIN: Partial> = {\n [ChainId.Mainnet]: {\n injected: PROVIDER_OPTIONS.injected,\n walletconnect: {\n ...PROVIDER_OPTIONS.walletconnect,\n options: {\n ...PROVIDER_OPTIONS.walletconnect.options,\n pollingInterval: 12e5,\n },\n },\n },\n [ChainId.Binance]: {\n injected: PROVIDER_OPTIONS.injected,\n walletconnect: {\n ...PROVIDER_OPTIONS.walletconnect,\n options: {\n ...PROVIDER_OPTIONS.walletconnect.options,\n pollingInterval: 12e5,\n network: \"binance\",\n rpc: {\n [ChainId.Binance]: sampleValue([\"https://bsc-dataseed1.binance.org\", \"https://bsc-dataseed1.ninicoin.io\", \"https://bsc-dataseed1.defibit.io\"]),\n },\n },\n },\n },\n}","import Web3Modal from \"web3modal\";\n\nimport {\n ChainId,\n ChainName,\n CHAIN_NAMES,\n CHAIN_NAME_TO_CHAIN_ID_MAPPING,\n DEFAULT_CHAIN_NAME,\n} from \"../../constants\";\n\nimport { PROVIDER_OPTIONS_BY_CHAIN } from \"../../constants/provider\";\n\nexport function getWeb3Network() {\n const cachedNetwork = localStorage.getItem(\"web3network\");\n\n if (!cachedNetwork || !CHAIN_NAMES.includes(cachedNetwork as ChainName)) {\n return DEFAULT_CHAIN_NAME;\n }\n\n return cachedNetwork as ChainName;\n}\n\nlet cached: {\n chainName: ChainName;\n modal: Web3Modal;\n} | null = null;\n\nexport function getWeb3Modal(chainName?: ChainName) {\n if (cached && cached.chainName === chainName) {\n return cached.modal;\n }\n\n if (chainName) {\n document.getElementById(\"WEB3_CONNECT_MODAL_ID\")?.remove();\n\n const options = {\n network: chainName,\n cacheProvider: false,\n disableInjectedProvider: false,\n providerOptions: PROVIDER_OPTIONS_BY_CHAIN[CHAIN_NAME_TO_CHAIN_ID_MAPPING[chainName] as ChainId],\n lightboxOpacity: 0.75,\n };\n\n const modal = new Web3Modal(options);\n\n document.getElementById(\"WEB3_CONNECT_MODAL_ID\")?.children?.[0]?.setAttribute(\"style\", \"z-index:2000\");\n\n cached = { chainName, modal };\n\n return cached.modal;\n }\n}\n\nexport async function switchChain(provider: any, chainName: ChainName) {\n const { isMetaMask, request } = provider;\n\n if (isMetaMask && request) {\n if (chainName === \"binance\") {\n try {\n await request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: `0x${ChainId.Binance.toString(16)}` }],\n });\n } catch (switchError) {\n if ((switchError as any).code === 4902) {\n try {\n await request({\n method: \"wallet_addEthereumChain\",\n params: [\n {\n chainId: `0x${ChainId.Binance.toString(16)}`,\n chainName: \"Binance Smart Chain Mainnet\",\n nativeCurrency: {\n name: \"Binance Coin\",\n symbol: \"BNB\",\n decimals: 18,\n },\n rpcUrls: [\"https://bsc-dataseed1.binance.org\", \"https://bsc-dataseed1.ninicoin.io\", \"https://bsc-dataseed1.defibit.io\"],\n blockExplorerUrls: [\"https://bscscan.com/\"],\n }\n ],\n });\n } catch (addError) {\n return null;\n }\n } else {\n return null;\n }\n }\n } else if (chainName === \"mainnet\") {\n try {\n await request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: `0x${Number(ChainId.Mainnet).toString(16)}` }],\n });\n } catch (switchError) {\n return null;\n }\n }\n }\n\n return provider;\n}\n","import { UnsupportedChainIdError } from \"@web3-react/core\";\nimport { ethers } from \"ethers\";\nimport React, { ReactChild, useEffect, useMemo, useCallback, useState } from \"react\";\n\nimport {\n ChainId,\n ChainName,\n CHAIN_ID_TO_CHAIN_NAME_MAPPING,\n CHAIN_NAME_TO_CHAIN_ID_MAPPING,\n} from \"../../constants\";\n\nimport { Account, EthersContext } from \"./ethersContext\";\nimport { getWeb3Network, getWeb3Modal, switchChain } from \"./ethersHelpers\";\n\nconst EthersProvider = ({ children }: { children: ReactChild }) => {\n const [web3Provider, setWeb3Provider] = useState();\n const [ethersProvider, setEthersProvider] = useState();\n const [account, setAccount] = useState();\n const [chainId, setChainId] = useState(() => CHAIN_NAME_TO_CHAIN_ID_MAPPING[getWeb3Network()] as ChainId);\n const [error, setError] = useState();\n\n const web3Modal = useMemo(() => getWeb3Modal(CHAIN_ID_TO_CHAIN_NAME_MAPPING[chainId] as ChainName), [chainId]);\n\n useEffect(() => {\n const getAccounts = async () => {\n if (!web3Provider || !ethersProvider) {\n return;\n }\n\n let accounts: string[] = [];\n\n if (!web3Provider.bridge) {\n accounts = await ethersProvider.send(\"eth_requestAccounts\", []);\n } else {\n accounts = web3Provider.accounts; \n }\n\n setAccount({ address: accounts[0] });\n };\n\n getAccounts();\n }, [web3Provider, ethersProvider]);\n\n useEffect(() => {\n const handleAccountsChanged = (addresses: string[]) => {\n setAccount({ address: addresses[0] });\n };\n const handleChainChanged = (chainHexString: string) => {\n const _chainId = Number.parseInt(chainHexString, 16);\n\n if (ChainId[_chainId]) {\n setChainId(_chainId);\n setEthersProvider(new ethers.providers.Web3Provider(web3Provider))\n } else {\n disconnectWallet();\n setError(new UnsupportedChainIdError(_chainId));\n }\n };\n\n if (web3Provider && !web3Provider.isWalletLink) {\n web3Provider.removeAllListeners();\n web3Provider.setMaxListeners(Infinity);\n\n web3Provider.addListener(\"accountsChanged\", handleAccountsChanged);\n web3Provider.addListener(\"chainChanged\", handleChainChanged);\n\n return () => {\n web3Provider.removeListener(\"accountsChanged\", handleAccountsChanged);\n web3Provider.removeListener(\"chainChanged\", handleChainChanged);\n\n web3Provider.removeAllListeners();\n }\n }\n }, [web3Provider]);\n\n const connectWallet = useCallback(async () => {\n if (!web3Modal) {\n return;\n }\n\n try {\n const _web3Provider = await switchChain(await web3Modal.connect(), CHAIN_ID_TO_CHAIN_NAME_MAPPING[chainId] as ChainName);\n \n if (!_web3Provider) {\n return;\n }\n\n const _ethersProvider = new ethers.providers.Web3Provider(_web3Provider);\n\n const { chainId: _chainId } = await _ethersProvider.getNetwork();\n\n if (!ChainId[_chainId]) {\n setError(new UnsupportedChainIdError(_chainId));\n return;\n }\n\n setWeb3Provider(_web3Provider);\n setEthersProvider(_ethersProvider);\n\n } catch (error) {\n console.error(error);\n }\n }, [web3Modal, chainId]);\n\n const disconnectWallet = useCallback(() => {\n ethersProvider?.removeAllListeners();\n setEthersProvider(undefined);\n setAccount(undefined);\n setError(undefined);\n }, []);\n\n const changeChain = useCallback((newChainId: ChainId) => {\n setChainId(newChainId);\n localStorage.setItem(\"web3network\", CHAIN_ID_TO_CHAIN_NAME_MAPPING[newChainId as ChainId] ?? \"\");\n disconnectWallet();\n }, []);\n\n return (\n \n {children}\n \n );\n};\n\nexport default EthersProvider;\n","import { createGlobalStyle } from \"styled-components\";\nimport { Colors, Fonts } from \"../constants\";\n\nexport const GlobalStyle = createGlobalStyle`\n * {\n box-sizing: border-box;\n }\n\n html, body, div, span, applet, object, iframe,\n h1, h2, h3, h4, h5, h6, p, blockquote, pre,\n a, abbr, acronym, address, big, cite, code,\n del, dfn, em, img, ins, kbd, q, s, samp,\n small, strike, strong, sub, sup, tt, var,\n b, u, i, center,\n dl, dt, dd, ol, ul, li,\n fieldset, form, label, legend,\n table, caption, tbody, tfoot, thead, tr, th, td,\n article, aside, canvas, details, embed, \n figure, figcaption, footer, header, hgroup, \n menu, nav, output, ruby, section, summary,\n time, mark, audio, video {\n margin: 0;\n padding: 0;\n border: 0;\n font-size: 100%;\n font: inherit;\n vertical-align: baseline;\n }\n\n article, aside, details, figcaption, figure, \n footer, header, hgroup, menu, nav, section {\n display: block;\n }\n\n body {\n line-height: 1;\n }\n\n ol, ul {\n list-style: none;\n }\n\n blockquote, q {\n quotes: none;\n }\n\n blockquote:before, blockquote:after,\n q:before, q:after {\n content: '';\n content: none;\n }\n\n table {\n border-collapse: collapse;\n border-spacing: 0;\n }\n\n a {\n text-decoration: none;\n }\n\n body, html {\n margin: 0;\n width: 100%;\n height: 100%;\n background: ${Colors.MainBackground};\n font-family: ${Fonts.Body};\n font-size: 16px;\n }\n\n button {\n font-family: ${Fonts.Body};\n font-size: 1rem;\n cursor: pointer;\n }\n\n #app {\n min-height: 100vh;\n }\n`;\n","import { TransactionReceipt } from \"@ethersproject/providers\";\nimport { ChainId } from \"../../constants\";\n\nexport interface TransactionToSave {\n hash: string;\n from: string;\n description: string;\n chainId: ChainId;\n}\n\nexport interface StoredTransaction {\n from: string;\n hash: string;\n description: string;\n submittedAt: number;\n lastCheckedBlockNumber?: number;\n receipt?: TransactionReceipt;\n}\n\nexport type StoredTransactions = {\n [T in ChainId]?: StoredTransaction[];\n};\n\nexport const DEFAULT_STORED_TRANSACTIONS: StoredTransactions = {};\n","import { TransactionReceipt } from \"@ethersproject/providers\";\n\nimport { ChainId } from \"../../constants\";\n\nimport { StoredTransactions } from \"./model\";\n\ntype Action = TransactionAdded | TransactionChecked | TransactionMined;\n\ninterface TransactionAdded {\n type: \"TRANSACTION_ADDED\";\n chainId: ChainId;\n hash: string;\n from: string;\n description: string;\n submittedAt: number;\n}\n\ninterface TransactionChecked {\n type: \"TRANSACTION_CHECKED\";\n chainId: ChainId;\n hash: string;\n blockNumber: number;\n}\n\ninterface TransactionMined {\n type: \"TRANSACTION_MINED\";\n chainId: ChainId;\n hash: string;\n receipt: TransactionReceipt;\n}\n\nexport function transactionReducer(\n state: StoredTransactions,\n action: Action\n): StoredTransactions {\n switch (action.type) {\n case \"TRANSACTION_ADDED\":\n return {\n ...state,\n [action.chainId]: (state[action.chainId] ?? []).concat({\n hash: action.hash,\n description: action.description,\n from: action.from,\n submittedAt: action.submittedAt,\n }),\n };\n case \"TRANSACTION_CHECKED\":\n return {\n ...state,\n [action.chainId]: (state[action.chainId] ?? []).map((tx) => {\n if (tx.hash === action.hash) {\n return { ...tx, lastCheckedBlockNumber: action.blockNumber };\n }\n return tx;\n }),\n };\n case \"TRANSACTION_MINED\":\n return {\n ...state,\n [action.chainId]: (state[action.chainId] ?? []).map((tx) => {\n if (tx.hash === action.hash) {\n return { ...tx, receipt: action.receipt };\n }\n return tx;\n }),\n };\n }\n}\n","import React, { ReactNode, useCallback, useEffect, useReducer } from \"react\";\n\nimport { useEthers, useLocalStorage } from \"../../hooks\";\nimport { useBlockNumber } from \"../blockNumber/context\";\n\nimport { TransactionsContext } from \"./context\";\nimport {\n DEFAULT_STORED_TRANSACTIONS,\n StoredTransaction,\n TransactionToSave,\n} from \"./model\";\nimport { transactionReducer } from \"./reducer\";\n\ninterface Props {\n children: ReactNode;\n}\n\nexport function TransactionProvider({ children }: Props) {\n const { chainId, ethersProvider } = useEthers();\n const blockNumber = useBlockNumber();\n const [storage, setStorage] = useLocalStorage(\"transactions\");\n const [transactions, dispatch] = useReducer(\n transactionReducer,\n storage ?? DEFAULT_STORED_TRANSACTIONS\n );\n\n useEffect(() => {\n setStorage(transactions);\n }, [transactions]);\n\n const addTransaction = useCallback(\n (transaction: TransactionToSave) => {\n dispatch({\n type: \"TRANSACTION_ADDED\",\n chainId: transaction.chainId,\n description: transaction.description,\n from: transaction.from,\n hash: transaction.hash,\n submittedAt: Date.now(),\n });\n },\n [dispatch]\n );\n\n useEffect(() => {\n if (!chainId || !ethersProvider || !blockNumber) return;\n (transactions[chainId] ?? [])\n .filter((tx) => shouldCheck(blockNumber, tx))\n .forEach((tx) => {\n ethersProvider\n .getTransactionReceipt(tx.hash)\n .then((receipt) => {\n if (receipt) {\n dispatch({\n type: \"TRANSACTION_MINED\",\n chainId,\n hash: tx.hash,\n receipt,\n });\n } else {\n dispatch({\n type: \"TRANSACTION_CHECKED\",\n chainId,\n hash: tx.hash,\n blockNumber,\n });\n }\n })\n .catch((error) => {\n console.error(\n `failed to check transaction hash: ${tx.hash}`,\n error\n );\n });\n });\n }, [chainId, ethersProvider, transactions, blockNumber]);\n\n return (\n \n );\n}\n\nfunction shouldCheck(blockNumber: number, tx: StoredTransaction): boolean {\n if (tx.receipt) return false;\n if (!tx.lastCheckedBlockNumber) return true;\n const blocksSinceCheck = blockNumber - tx.lastCheckedBlockNumber;\n if (blocksSinceCheck < 1) return false;\n const minutesPending = (Date.now() - tx.submittedAt) / 1000 / 60;\n if (minutesPending > 60) {\n // every 10 blocks if pending for longer than an hour\n return blocksSinceCheck > 9;\n }\n if (minutesPending > 5) {\n // every 3 blocks if pending more than 5 minutes\n return blocksSinceCheck > 2;\n }\n // otherwise every block\n return true;\n}\n","import { Web3Provider } from \"@ethersproject/providers\";\nimport { Web3ReactProvider } from \"@web3-react/core\";\nimport React, { ReactNode } from \"react\";\nimport { BrowserRouter } from \"react-router-dom\";\n\nimport { BlockNumberProvider } from \"./blockNumber/provider\";\nimport { ChainStateProvider } from \"./chainState/provider\";\nimport EthersProvider from \"./ethers/ethersProvider\";\nimport { GlobalStyle } from \"./GlobalStyle\";\nimport { TransactionProvider } from \"./transactions/provider\";\n\ninterface Props {\n children: ReactNode;\n}\nexport function Providers(props: Props) {\n return (\n \n {/* */}\n \n \n \n \n \n {props.children}\n \n \n \n \n {/* */}\n \n );\n}\n\n// function getLibrary(provider: any): Web3Provider {\n// const library = new Web3Provider(provider, \"any\");\n// library.pollingInterval = 15000;\n// return library;\n// }\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Colors, Fonts } from \"../../constants\";\nimport { useBlockNumber, useChainState } from \"../../providers\";\n\nexport function BlockNumber() {\n const blockNumber = useBlockNumber();\n const chainState = useChainState();\n const fetchedBlockNumber = chainState?.value?.blockNumber;\n\n const isDifferent = fetchedBlockNumber !== blockNumber;\n const toDisplay = blockNumber || fetchedBlockNumber || 0;\n\n return (\n \n {toDisplay}\n {isDifferent ? : }\n \n );\n}\n\nconst Wrapper = styled.div`\n position: absolute;\n bottom: 12px;\n right: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst Text = styled.span`\n font-family: ${Fonts.Monospace};\n color: ${Colors.Gray};\n margin-right: 8px;\n`;\n\nconst Spinner = styled.div`\n position: relative;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n border: 2px solid;\n border-color: ${Colors.Gray} ${Colors.Gray} ${Colors.Gray} transparent;\n animation: spinner-spin 1s infinite;\n\n @keyframes spinner-spin {\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nconst Dot = styled.div`\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: ${Colors.Green};\n`;\n","import styled from \"styled-components\";\n\nexport const Row = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n & + & {\n margin-top: 16px;\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { HelpIcon } from \"../icons\";\n\nexport interface TooltipProps {\n tooltip?: string;\n}\n\nexport const Tooltip = ({ tooltip }: TooltipProps) => {\n if (tooltip) {\n return (\n \n \n {tooltip}\n \n );\n }\n return ;\n};\n\nconst TooltipBody = styled.div`\n display: none;\n position: absolute;\n bottom: -17px;\n right: -10px;\n transform: translate(0, 100%);\n width: 240px;\n padding: 16px;\n text-align: left;\n font-weight: 400;\n font-size: 14px;\n line-height: 20px;\n color: #ffffff;\n background: #66708c;\n border-radius: 8px;\n z-index: 2;\n\n &:after {\n content: \"\";\n display: block;\n position: absolute;\n right: 12px;\n bottom: 100%;\n width: 0;\n height: 0;\n border: 10px solid transparent;\n border-bottom-color: #66708c;\n }\n`;\n\nconst TooltipWrapper = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0;\n background: none;\n border: none;\n outline: none;\n\n &:hover ${TooltipBody} {\n display: inline-block;\n }\n`;\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\n\ninterface ModalOverlayProps {\n onClick: () => void;\n children: ReactNode;\n}\n\nexport const ModalOverlay = ({ onClick, children }: ModalOverlayProps) => {\n function onBackgroundClick(e: React.MouseEvent) {\n if (e.target === e.currentTarget) {\n onClick();\n }\n }\n\n return {children};\n};\n\nconst Overlay = styled.div`\n position: fixed;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.2);\n z-index: 100000;\n overflow-y: auto;\n`;\n","import styled from \"styled-components\";\nimport { Colors } from \"../../../constants\";\n\nexport const ModalTitle = styled.h2`\n text-align: center;\n font-weight: 500;\n font-size: 20px;\n line-height: 23px;\n color: ${Colors.White};\n`;\n","import React, { ReactNode, useCallback, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { Colors } from \"../../../constants\";\nimport { BackIcon } from \"../../icons\";\nimport { Row } from \"../Row\";\nimport { Tooltip, TooltipProps } from \"../Tooltip\";\nimport { ModalOverlay } from \"./ModalOverlay\";\nimport { ModalTitle } from \"./ModalTitle\";\n\ninterface Props extends TooltipProps {\n onClose: () => void;\n title: string;\n children: ReactNode;\n isVisible: boolean;\n hint?: string;\n}\n\nexport function Modal({\n isVisible,\n onClose,\n title,\n children,\n hint,\n tooltip,\n}: Props) {\n const listenKeyboard = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose();\n }\n },\n [onClose]\n );\n\n useEffect(() => {\n if (isVisible) {\n window.addEventListener(\"keydown\", listenKeyboard, true);\n return () => {\n window.removeEventListener(\"keydown\", listenKeyboard, true);\n };\n }\n }, [isVisible, listenKeyboard]);\n\n if (isVisible) {\n return (\n \n \n \n \n \n \n \n {title}\n \n \n {children}\n {hint && {hint}}\n \n \n \n );\n }\n return null;\n}\n\nconst ModalWrapper = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n margin-top: 30px;\n max-width: 420px;\n width: 100%;\n overflow-y: auto;\n padding-bottom: 15px;\n`;\n\nconst ModalBody = styled.div`\n width: 100%;\n padding: 32px 16px 24px;\n background: ${Colors.BackgroundPrimary};\n border-radius: 12px;\n`;\n\nexport const Hint = styled.div`\n width: 100%;\n margin-top: 16px;\n font-size: 14px;\n line-height: 16px;\n text-align: center;\n color: ${Colors.White};\n`;\n\nconst ModalContent = styled.div`\n margin-top: 24px;\n`;\n\nconst BackButton = styled.button`\n background: none;\n border: none;\n outline: none;\n`;\n","import styled from \"styled-components\";\n\nexport const Spinner = styled.span`\n position: relative;\n display: inline-block;\n bottom: -0.1em;\n height: 1em;\n width: 1em;\n border-radius: 50%;\n border: 0.15em solid;\n border-color: currentColor currentColor currentColor transparent;\n animation: spinner-spin 1s infinite linear;\n\n @keyframes spinner-spin {\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n","import React, { useMemo } from \"react\";\nimport styled from \"styled-components\";\n\nimport { ChainId, Colors, DEFAULT_CHAIN_ID } from \"../../constants\";\nimport { useEthers, useTransactions } from \"../../hooks\";\nimport { StoredTransaction } from \"../../providers\";\nimport { Modal } from \"../common/modal/Modal\";\n\nimport { Spinner } from \"./Spinner\";\n\ninterface Props {\n onClose: () => void;\n isVisible: boolean;\n}\n\nexport function HistoryModal({ onClose, isVisible }: Props) {\n const { transactions } = useTransactions();\n const reversed = useMemo(() => [...transactions].reverse(), [transactions]);\n\n return (\n \n {reversed.length === 0 && (\n

The list of your transactions will appear here

\n )}\n \n {reversed.map((tx) => (\n \n ))}\n \n
\n );\n}\n\nfunction getEtherscanLink(transaction: StoredTransaction, chainId: ChainId) {\n switch (chainId) {\n case ChainId.Mainnet:\n return `https://etherscan.io/tx/${transaction.hash}`;\n case ChainId.Goerli:\n return `https://goerli.etherscan.io/tx/${transaction.hash}`;\n case ChainId.Binance:\n return `https://bscscan.com/tx/${transaction.hash}`;\n default:\n return \"\";\n }\n}\n\nfunction TransactionItem({ tx }: { tx: StoredTransaction }) {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n return (\n \n {!tx.receipt && }{\" \"}\n \n {tx.description}\n \n \n );\n}\n\nconst List = styled.ol`\n list-style-type: none;\n margin: 0;\n padding: 0;\n`;\n\nconst ListItem = styled.li`\n margin-bottom: 12px;\n\n a {\n color: ${Colors.Black};\n }\n`;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport { Colors } from \"../../constants\";\nimport { useEthBalance, useTransactions } from \"../../hooks\";\nimport { shortenAddress } from \"../../utils\";\nimport { JazzIcon } from \"../icons\";\n\nimport { HistoryModal } from \"./HistoryModal\";\nimport { Spinner } from \"./Spinner\";\n\ninterface Props {\n address: string;\n}\n\nexport function Account({ address }: Props) {\n const ethBalance = useEthBalance();\n const [open, setOpen] = useState(false);\n const { transactions } = useTransactions();\n\n const pendingCount = transactions.filter((x) => !x.receipt).length;\n\n return (\n <>\n \n {ethBalance && (\n {ethBalance.formatWithSymbol()}\n )}\n setOpen(true)}>\n {pendingCount === 0 && (\n <>\n
{shortenAddress(address)}
\n \n \n )}\n {pendingCount > 0 && (\n <>\n
{pendingCount} Pending
\n \n \n )}\n
\n
\n setOpen(false)} />\n \n );\n}\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n margin-left: auto;\n margin-right: 6px;\n padding: 1px;\n background: rgba(255, 255, 255, 0.15);\n border-radius: 8px;\n`;\n\nconst BalanceArea = styled.div`\n padding: 9px 7px 7px;\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n color: ${Colors.White};\n text-transform: uppercase;\n`;\n\nconst AccountArea = styled.button`\n display: flex;\n align-items: center;\n padding: 9px 8px;\n background: ${Colors.MainBackground};\n border-radius: 8px;\n border: none;\n outline: none;\n`;\n\nconst Address = styled.span`\n margin-right: 10px;\n font-size: 14px;\n line-height: 16px;\n color: ${Colors.White};\n`;\n\nconst BigSpinner = styled(Spinner)`\n font-size: 16px;\n bottom: 0;\n color: ${Colors.White};\n`;\n","export function shortenAddress(account: string) {\n return `${account.substring(0, 6)}...${account.substring(\n account.length - 4\n )}`;\n}\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { Colors } from \"../../../constants\";\n\ninterface ButtonPrimaryProps\n extends React.ButtonHTMLAttributes {\n isFullWidth?: boolean;\n disabled?: boolean;\n isLoading?: boolean;\n children: ReactNode;\n}\n\nexport const ButtonPrimary = ({\n isFullWidth,\n isLoading,\n disabled,\n children,\n ...props\n}: ButtonPrimaryProps) => (\n \n);\n\nexport const Button = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${({ isFullWidth }) => (isFullWidth ? \"100%\" : \"auto\")};\n padding: ${({ isFullWidth }) => (isFullWidth ? \"19px 16px\" : \"0\")};\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n color: ${Colors.White};\n background: ${Colors.Blue};\n border: none;\n border-radius: 8px;\n outline: none;\n\n &:disabled,\n &[disabled] {\n background: #41444e;\n color: ${Colors.DisabledColor};\n cursor: not-allowed;\n }\n\n &.invalid {\n color: #c68a8e;\n background: #874b4f;\n cursor: not-allowed;\n }\n\n .loader,\n .loader:after {\n border-radius: 50%;\n width: 16px;\n height: 16px;\n }\n .loader {\n position: relative;\n margin: 0 8px 0 0;\n font-size: 2px;\n text-indent: -9999em;\n border-top: 1.1em solid rgba(255, 255, 255, 0.2);\n border-right: 1.1em solid rgba(255, 255, 255, 0.2);\n border-bottom: 1.1em solid rgba(255, 255, 255, 0.2);\n border-left: 1.1em solid #ffffff;\n -webkit-transform: translateZ(0);\n -ms-transform: translateZ(0);\n transform: translateZ(0);\n -webkit-animation: spin 1.1s infinite linear;\n animation: spin 1.1s infinite linear;\n }\n @-webkit-keyframes spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n @keyframes spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n`;\n","import React, { useCallback, ChangeEvent } from \"react\";\nimport styled from \"styled-components\";\n\nimport { CHAIN_NAMES, CHAIN_METADATA, Colors } from \"../../constants\";\nimport { useEthers } from \"../../hooks\";\n\nexport default function NetworkSelector() {\n const { chainId, changeChain } = useEthers();\n\n const handleChange = useCallback((event: ChangeEvent) => {\n const newChainId = Number(event.target.value);\n\n if (chainId !== newChainId) { \n changeChain(newChainId);\n }\n }, [chainId, changeChain]);\n\n return (\n \n )\n}\n\nconst Select = styled.select`\n height: 36px;\n margin-left: auto;\n margin-right: 6px;\n padding: 6px 12px;\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n color: ${Colors.White};\n background: ${Colors.Blue};\n border: none;\n border-radius: 8px;\n outline: none;\n`;","import { UnsupportedChainIdError } from \"@web3-react/core\";\nimport React, { useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport { Colors } from \"../../constants\";\nimport { useEthers } from \"../../hooks\";\nimport { ButtonPrimary } from \"../common/buttons/ButtonPrimary\";\n\nimport { Account } from \"./Account\";\nimport NetworkSelector from \"./NetworkSelector\";\n\nexport function Connection() {\n const { connectWallet, disconnectWallet, account, error } = useEthers();\n\n if (error instanceof UnsupportedChainIdError) {\n return Unsupported network;\n }\n\n if (account?.address) {\n return (\n <>\n \n Disconnect\n \n );\n }\n\n return (\n <>\n \n Connect to a wallet\n \n );\n}\n\nconst Connect = styled(ButtonPrimary)`\n height: 36px;\n padding: 6px 18px;\n`;\n\nconst Disconnect = styled(ButtonPrimary)`\n height: 36px;\n padding: 6px 18px;\n`;\n\nconst NetworkError = styled.div`\n display: inline-flex;\n justify-content: center;\n align-items: center;\n height: 36px;\n padding: 6px 18px;\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n background-color: ${Colors.Red};\n border-radius: 8px;\n`;\n","export default __webpack_public_path__ + \"static/media/logo.8e0d8025.svg\";","import React from \"react\";\nimport styled from \"styled-components\";\n\nimport logo from \"../../assets/logo.svg\";\n\nexport function Logo() {\n return ;\n}\n\nconst Image = styled.img`\n max-width: 40px;\n`;\n","import React from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nimport { Colors } from \"../../constants\";\n\nimport { Logo } from \"./Logo\";\n\nexport function Navigation() {\n return (\n \n );\n}\n\nconst NavList = styled.ul`\n display: flex;\n align-items: center;\n`;\n\nconst NavListItem = styled.li`\n & + & {\n margin-left: 40px;\n }\n`;\n\nconst StyledLink = styled(NavLink)`\n font-size: 16px;\n line-height: 19px;\n color: ${Colors.White};\n\n &.active {\n color: ${Colors.LightBlue};\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nimport { Connection } from \"./Connection\";\nimport { Navigation } from \"./Navigation\";\n\nexport function TopBar() {\n return (\n \n \n \n \n );\n}\n\nconst Bar = styled.header`\n position: relative;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 15px 0 0;\n`;\n","import styled from \"styled-components\";\nimport { Colors } from \"../../../constants\";\n\nexport const ButtonTertiary = styled.button`\n padding: 10px 15px;\n font-size: 14px;\n line-height: 16px;\n color: ${Colors.White};\n background: rgba(255, 255, 255, 0.15);\n border-radius: 8px;\n border: none;\n\n &:disabled {\n background: #161e2e;\n color: #545a66;\n cursor: not-allowed;\n }\n`;\n","export enum TransactionStatus {\n New,\n Mining,\n Success,\n Fail,\n}\n","export enum CurrentTransaction {\n Approve,\n StakeUrus,\n Deposit,\n}\n","import { Contract, Transaction, utils } from \"ethers\";\nimport { CurrentTransaction } from \"./CurrentTransaction\";\nimport { TransactionStatus } from \"./TransactionStatus\";\n\nexport const approve = async (\n token: Contract,\n address: string,\n value: string,\n setStatus: (value: TransactionStatus) => void,\n setCurrentTransaction?: (value: CurrentTransaction) => void,\n setTransaction?: (value: Transaction | undefined) => void\n) => {\n try {\n setStatus(TransactionStatus.Mining);\n setCurrentTransaction?.(CurrentTransaction.Approve);\n const transaction = await token.approve(address, utils.parseEther(value));\n setTransaction && setTransaction(transaction);\n const receipt = await transaction.wait();\n setStatus(\n receipt.status ? TransactionStatus.Success : TransactionStatus.Fail\n );\n setTransaction && setTransaction(undefined);\n } catch (exception) {\n console.error(exception);\n setStatus(TransactionStatus.Fail);\n setTransaction && setTransaction(undefined);\n }\n};\n","import { Contract, Transaction, utils } from \"ethers\";\nimport { CurrentTransaction } from \".\";\nimport { TransactionStatus } from \"./TransactionStatus\";\n\nexport const stake = async (\n stakingMaster: Contract,\n amount: string,\n months: string,\n address: string,\n setStatus: (value: TransactionStatus) => void,\n setCurrentTransaction: (value: CurrentTransaction) => void,\n setTransaction?: (value: Transaction) => void\n) => {\n try {\n setStatus(TransactionStatus.Mining);\n setCurrentTransaction(CurrentTransaction.StakeUrus);\n const transaction = await stakingMaster.createStaking(\n utils.parseEther(amount),\n months,\n address\n );\n setTransaction && setTransaction(transaction);\n const receipt = await transaction.wait();\n setStatus(\n receipt.status ? TransactionStatus.Success : TransactionStatus.Fail\n );\n } catch (exception) {\n setStatus(TransactionStatus.Fail);\n }\n};\n","import { Contract, Transaction, utils } from \"ethers\";\nimport { CurrentTransaction } from \"./CurrentTransaction\";\nimport { TransactionStatus } from \"./TransactionStatus\";\n\nexport const deposit = async (\n provider: Contract,\n amount: string,\n setStatus: (value: TransactionStatus) => void,\n setCurrentTransaction: (value: CurrentTransaction) => void,\n setTransaction?: (value: Transaction) => void\n) => {\n try {\n setStatus(TransactionStatus.Mining);\n setCurrentTransaction(CurrentTransaction.Deposit);\n const transaction = await provider.addLiquidity(utils.parseEther(amount));\n setTransaction && setTransaction(transaction);\n const receipt = await transaction.wait();\n setStatus(\n receipt.status ? TransactionStatus.Success : TransactionStatus.Fail\n );\n } catch (exception) {\n console.error(exception);\n setStatus(TransactionStatus.Fail);\n }\n};\n","import { Contract, utils } from \"ethers\";\nimport { TransactionStatus } from \"./TransactionStatus\";\n\nexport const withdraw = async (\n provider: Contract,\n amount: string,\n setStatus: (value: TransactionStatus) => void\n) => {\n try {\n setStatus(TransactionStatus.Mining);\n const transaction = await provider.removeLiquidity(\n utils.parseEther(amount)\n );\n const receipt = await transaction.wait();\n setStatus(\n receipt.status ? TransactionStatus.Success : TransactionStatus.Fail\n );\n } catch (exception) {\n setStatus(TransactionStatus.Fail);\n }\n};\n","import { Contract } from \"ethers\";\nimport { TransactionStatus } from \"./TransactionStatus\";\n\nconst CLAIM_LIQUIDITY_REWARD_GAS_LIMIT = 2000000;\n\nconst CLAIM_LIQUIDITY_GAS_BUFFER = 100000;\n\nexport const claimLiquidityReward = async (\n provider: Contract,\n setStatus: (value: TransactionStatus) => void\n) => {\n try {\n setStatus(TransactionStatus.Mining);\n const gasEstimate = await provider.estimateGas.claimRewards(false, 0);\n const transaction = await provider.claimRewards(false, 0, {\n gasLimit: gasEstimate.add(CLAIM_LIQUIDITY_GAS_BUFFER),\n });\n const receipt = await transaction.wait();\n setStatus(\n receipt.status ? TransactionStatus.Success : TransactionStatus.Fail\n );\n } catch (error) {\n console.error(error);\n setStatus(TransactionStatus.Fail);\n }\n};\n\nexport const claimAndStakeLiquidityReward = async (\n provider: Contract,\n months: string,\n setStatus: (value: TransactionStatus) => void\n) => {\n try {\n setStatus(TransactionStatus.Mining);\n const transaction = await provider.claimRewards(true, months, {\n gasLimit: CLAIM_LIQUIDITY_REWARD_GAS_LIMIT,\n });\n const receipt = await transaction.wait();\n setStatus(\n receipt.status ? TransactionStatus.Success : TransactionStatus.Fail\n );\n } catch (error) {\n console.error(error);\n setStatus(TransactionStatus.Fail);\n }\n};\n","import React, { FunctionComponent } from \"react\";\nimport styled from \"styled-components\";\n\ntype ButtonProps = {\n active: boolean;\n onClick: () => void;\n};\n\nexport const Button: FunctionComponent = ({\n active,\n children,\n onClick,\n}) => (\n \n {children}\n \n);\n\nconst ActualButton = styled.div`\n background: ${(props) => (props.active ? \"white\" : \"grey\")};\n`;\n","export function offsetValue(numberValue: string, offset: number) {\n return (Number.parseFloat(numberValue) + offset).toString();\n}\n","import styled from \"styled-components\";\nimport { Colors } from \"../../constants\";\n\nexport const Section = styled.div`\n padding: 16px;\n border: 1px solid ${Colors.BorderSecondary};\n border-radius: 12px;\n`;\n\nexport const SectionLabel = styled.p`\n font-size: 14px;\n line-height: 16px;\n color: ${Colors.PrimaryTextColor};\n`;\n\nexport const SectionLabelDanger = styled(SectionLabel)`\n color: ${Colors.Danger};\n`;\n\nexport const SectionRow = styled.div`\n display: flex;\n align-items: center;\n`;\n","import styled from \"styled-components\";\nimport React, { FunctionComponent } from \"react\";\nimport { offsetValue } from \"./offsetValue\";\nimport { Section } from \"./Section\";\nimport { Colors } from \"../../constants\";\n\ntype Props = {\n set: (s: string) => void;\n value: string;\n};\n\nexport const CustomSpinnerInput: FunctionComponent = ({\n set,\n value,\n}) => (\n \n \n set(e.target.value)}\n />\n \n \n);\n\nconst Wrapper = styled(Section)`\n display: flex;\n align-items: center;\n max-width: 95px;\n margin: 24px 0 16px;\n`;\n\nconst SpinnerlessInput = styled.input`\n margin: 0 8px;\n font-weight: 500;\n font-size: 20px;\n line-height: 23px;\n text-align: center;\n color: ${Colors.White};\n -moz-appearance: textfield;\n background: none;\n border: none;\n outline: none;\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n`;\n\nconst Button = styled.button`\n width: 12px;\n font-size: 20px;\n line-height: 23px;\n color: ${Colors.PrimaryTextColor};\n padding: 0;\n background: none;\n border: none;\n outline: none;\n`;\n","import styled from \"styled-components\";\n\nexport const ButtonWrapper = styled.div`\n & button {\n height: auto;\n padding: 19px 16px;\n width: 100%;\n }\n`;\n","import React from \"react\";\nimport { ButtonWrapper } from \".\";\nimport { Connection } from \"..\";\n\nexport function WrappedConnectButton() {\n return (\n \n \n \n );\n}\n","import styled from \"styled-components\";\nimport { Colors } from \"../../constants\";\n\nexport const WarningSection = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 56px 0 16px;\n padding: 16px;\n background: rgba(235, 87, 87, 0.2);\n border-radius: 12px;\n text-align: center;\n`;\n\nexport const FailSection = styled(WarningSection)`\n margin: 8px 0 0;\n`;\n\nexport const WarningText = styled.p`\n margin-top: 8px;\n font-size: 14px;\n line-height: 16px;\n text-align: center;\n color: ${Colors.White};\n`;\n","import React from \"react\";\nimport { FailSection } from \".\";\nimport { SectionLabelDanger } from \"./Section\";\n\nexport function FailMessage() {\n return (\n \n Transaction failed.\n \n );\n}\n","import styled from \"styled-components\";\nimport { Colors } from \"../../constants\";\n\nexport const Badge = styled.div`\n display: inline-block;\n padding: 8px;\n background: linear-gradient(0deg, rgba(7, 14, 29, 0.8), rgba(7, 14, 29, 0.8)),\n ${Colors.LightGreen};\n border-radius: 8px;\n font-weight: bold;\n font-size: 18px;\n line-height: 20px;\n color: ${Colors.LightGreen};\n`;\n\nexport const BadgeSmall = styled.div`\n padding: 4px 8px;\n font-weight: 500;\n font-size: 14px;\n line-height: 16px;\n text-align: center;\n color: #78a8f8;\n background: rgba(36, 125, 255, 0.15);\n border: 1px solid rgba(120, 168, 248, 0.15);\n border-radius: 12px;\n`;\n\nexport const BadgeMax = styled(BadgeSmall)`\n margin-left: 8px;\n`;\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { Colors } from \"../../../constants\";\nimport { Row } from \"../Row\";\n\ninterface TextRowProps {\n label: string;\n value: ReactNode;\n className?: string;\n}\n\nexport const TextRow = ({ label, value, className }: TextRowProps) => (\n \n \n {value}\n \n);\n\nconst Label = styled.p`\n font-size: 16px;\n line-height: 19px;\n color: ${Colors.GrayAlt};\n`;\n\nconst Value = styled.div`\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n text-align: right;\n color: ${Colors.SecondaryTextColor};\n`;\n","import React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport { Colors, MAX_STAKE_DURATION } from \"../../constants\";\nimport { toPercent } from \"../../helpers\";\nimport {\n useContracts,\n useInterestPercentage,\n useNaturalNumberInput,\n useUsersProviderStakeExists,\n} from \"../../hooks\";\nimport { TransactionStatus } from \"../../infrastructure\";\nimport { claimAndStakeLiquidityReward } from \"../../infrastructure/claimLiquidityReward\";\nimport { CustomSpinnerInput, FailMessage } from \"../common\";\nimport { Badge } from \"../common/Badge\";\nimport { ButtonPrimary } from \"../common/buttons/ButtonPrimary\";\nimport { Modal } from \"../common/modal/Modal\";\nimport { Section } from \"../common/Section\";\nimport { TextRow } from \"../common/text/TextRow\";\nimport { HelpIcon } from \"../icons\";\n\ninterface ClaimAndStakeLiquidityRewardModalProps {\n isVisible: boolean;\n onClose: () => void;\n claimableReward: string;\n}\n\nexport const ClaimAndStakeLiquidityRewardModal = ({\n isVisible,\n onClose,\n claimableReward,\n}: ClaimAndStakeLiquidityRewardModalProps) => {\n const { provider } = useContracts();\n const [status, setStatus] = useState(TransactionStatus.New);\n const [stakeTime, setStakeTime] = useNaturalNumberInput(MAX_STAKE_DURATION);\n\n const isMined = status === TransactionStatus.Success;\n const isMining = status === TransactionStatus.Mining;\n const apy = useInterestPercentage(stakeTime, true);\n const hasProviderStake = useUsersProviderStakeExists();\n useEffect(\n () => (status === TransactionStatus.Success ? onClose() : undefined),\n [status]\n );\n\n return (\n \n {claimableReward} URUS} />\n\n {!hasProviderStake ? (\n <>\n \n \n months\n \n \n \n You can stake from 1 month to 7 years\n \n \n {apy ? toPercent(apy) : \"...%\"} APY\n By staking your rewards directly, you will receive a 50% increase in\n APY to your stake APY during Epoch 1 and 25% increase in Epoch 2.\n Refer to our documentation:{\" \"}\n \n Click Here\n \n \n \n ) : (\n \n You have already staked your Liquidity Mining rewards and that stake\n is in progress. Instead of creating a new stake, you can add your\n reward to the stake that you already have.\n \n )}\n \n claimAndStakeLiquidityReward(provider, stakeTime, setStatus)\n }\n >\n {isMined\n ? \"Done!\"\n : isMining\n ? \"Staking...\"\n : hasProviderStake\n ? \"Add to stake\"\n : \"Stake\"}\n \n {status === TransactionStatus.Fail && }\n \n );\n};\n\nconst ClaimButton = styled(ButtonPrimary)`\n margin-top: 41px;\n`;\n\nconst Hint = styled.div`\n display: flex;\n align-items: center;\n margin-bottom: 54px;\n`;\n\nconst HintText = styled.p`\n margin-left: 8px;\n font-size: 12px;\n line-height: 14px;\n color: ${Colors.PrimaryTextColor};\n`;\n\nconst InfoBox = styled(Section)`\n position: relative;\n margin-bottom: 32px;\n padding: 32px 32px 16px;\n font-size: 14px;\n line-height: 16px;\n text-align: center;\n color: ${Colors.White};\n`;\n\nconst StyledBadge = styled(Badge)`\n position: absolute;\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n padding: 8px 28px;\n`;\n\nconst MonthInput = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: left;\n margin-top: 0;\n`;\n\nconst MonthLabel = styled.p`\n font-size: 16px;\n line-height: 18px;\n margin-left: 10px;\n margin-top: 10px;\n color: ${Colors.PrimaryTextColor};\n`;\n\nconst InfoLink = styled.a`\n text-align: center;\n font-size: 14px;\n line-height: 16px;\n color: ${Colors.Blue};\n`;\n","export const MAX_STAKE_DURATION = 7 * 12;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { ButtonPrimary } from \"../common/buttons/ButtonPrimary\";\nimport { Modal } from \"../common/modal/Modal\";\nimport { useContracts } from \"../../hooks\";\nimport { TransactionStatus } from \"../../infrastructure\";\nimport { claimLiquidityReward } from \"../../infrastructure/claimLiquidityReward\";\nimport { TextRow } from \"../common/text/TextRow\";\nimport { FailMessage } from \"../common\";\n\ninterface ClaimLiquidityRewardModalProps {\n isVisible: boolean;\n onClose: () => void;\n claimableReward: string;\n}\n\nexport const ClaimLiquidityRewardModal = ({\n isVisible,\n onClose,\n claimableReward,\n}: ClaimLiquidityRewardModalProps) => {\n const { provider } = useContracts();\n const [status, setStatus] = useState(TransactionStatus.New);\n\n const isMined = status === TransactionStatus.Success;\n const isMining = status === TransactionStatus.Mining;\n\n return (\n \n {claimableReward} URUS} />\n claimLiquidityReward(provider, setStatus)}\n >\n {isMined ? \"Done!\" : isMining ? \"Claiming...\" : \"Claim\"}\n \n {status === TransactionStatus.Fail && }\n \n );\n};\n\nconst ClaimButton = styled(ButtonPrimary)`\n margin-top: 41px;\n`;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAC6UlEQVR4AY2Ug5KkSxCFa+yZto0fbeufvrZt2/YNXKwZmvDuC6xt73OszUc4Wyd2x8yIHHRXfYmTWWIme+CBB0zNZvPLUqm0RdeUc4lEAqFQCA6H42J/f//Wtra2D+SxdrEQUxTlvXw+f7tcLiOdSkFVVdA1TUMkEkE0GoXdbkdXZ+dpeZzg2c3r9Y5ks1kUCgXk8znkcjmk02nouk4oZDACEQgEEIvFMDQ0hO7u7v9mhAWDwUWE1et11Go1VKtVEJhMJgkjgGWPuTwPv98PZiuvj0yCuVyuDwkzDAPDw8OgEyp7CH7OHk6AEsQsCeX/zJTQDwVNHupSFeV0pVIBgVIMOv+eF0onlG3o7e29LXEmIXv0AS/RWS6dGc4HDYfDY1AGsNlszPJ7IQXYxsZLZZErGdAfeG8SdK7y3aohgUHCOQHo6+vbJzKZzHWqKH9TACiFRxF6Zjn8Ty2D59kRqE/8AvXJ36E88QeU+z+C+ZHlGDL+hMX4FV69yewIZAAMDgxcFqMzRudYEEp1OYfuJ1eg95UD6Hv1IExvH4P57eNwP758WqbMLh6Pw+1yQbAH8XiMjWW0SdDwk/9i8M2j96CHCEXg2TXTyucdJhSUygur1XrF5/NRLXg8nknQdNGA7a0D49DnNqFy/zPTejpanRKP3xCykQdH58rpdE6DBh/5HZZ3TxKKyGN/TxMqJdeTovJ3Qtd2itbW1h8GBwfhdru5/JR/ElRPF2F6aSMcr29HpVqbNlKc32KxyNK5stxtYero6Lg9WrLZbJ4GVZMFpAt1CjVppJhho9EgkOdPy3UdJJD2hSyde8lMuUoTodPUJ5SZMUMC43cfik/FFFs3MDDAstlL+oxQziuXgCCCM7J/8i1YLWayViHWyucIFIkg/qZzpDhnVJMwOsuVbwBh68U89rkU6rSceo7SKHD0TaSizIqzy75/LRZoFj7z7e3t+8wm022WT7jP672R1LUjRr3+g+ynaaaLdwDYu+G0qR4rAQAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAABsklEQVR4AcTUA6zdUBgA4C32GE+xhjiLZttG8d61bVvFbIZjMXuLMYdD4xkxb89Ok/Xl2qj5Hf7/uKEvaYo5iCjy23uKhnJPpqYpVsBVxFfEREzsGZyhmMMZmhUxFQEgnu4Jmjx2YxZEgQzDXcSU+Xnd9y3NvqiApVo/6QqFGCKhpbC8o0piW0doIvFwCsSEejDW6UBmqJuHS1Fn4EJx5/64VNOSLsmnOxqwJHEDOPwXwKiWFlE4aMvX2MHqDS6wY2+seHAk2/5AxvJX31s950VcTY3VToblfcVau7hpexAcwLPPWkKlfsPU5GkZrA2XFmDLtlzjLMnMRVTELAi+qwcvW2t7smy1Yz6iKMxpHaY5Q4bmzyWP3ZFwBO5CCfxj2Wqn+oD28BT4/DKqIpXtzYpDzPXMIfZbmmSsKJqfjimJ/IrVDmLlSvNkXEk64f0fCF9se7oVTt+dXDKPhVTh+kZUXVgm1f5/9wgHFKkZneWJQ+wSWGuxVoCMqumFXYV1imILNeBQV2hJf7+SYVRJfgQAjO8JnCSkSGT+Yv+W3vcFlAwZqAk6Jm/KTcroq2AYaAAAGH1ZR1lrDg0AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAD40lEQVR4Ae3YBYzjRhQAUJeZmZmZmTFQ7jEZsrGdYwiUlw5CHgiXmSl2CqIycysqMzNz7M7CuL45iKILONJ+6S8m8dNo9P+f4f6PkVipY6RxXJ4rqCjYEdhs9t5NElj/QJTBN2osv5HrwUlkXEvApqgAS1Rhwd1bIfPAoQRrUbCkgn/4EDzMldju7u6VCfQpJ3gQrYBHR426c3XXgVNIDw5hnWCacK6rsIuQsX0yo3/Dgh2r/DE/C2zoGjABFm0sC6Ypw2tdgU0XjQMolAWzyavace0vY7j8Vm2wnc+0tQOmcGUuA60FttrWATXtzm2S2Pi8XjDpgD8EZ6Lt29XRrLrBQw0l39oyBnQPxdUJpvlPQAEntqyjxbHxxvLAi8D9Jt+VroGGr7SkA8adHY3J/vS95tyLr60GQrB6mjdsnj+muzo5kFw2WgVzmopdWLhvxwTSf2Wh3QvvsGZFryYrCgdXVVCAScAWzbMvvMKcICRMFiwp2i+BmXCLJq5uueSEXt5/mzltbsmG0qRgNv3nX2aOm7KwuthrZe3aJs0L9x89gCRbwox132SqM3PsitUE0/Sec5E5emKfSbBD7wni0xu/HcB974Uvu94MhDALrRtM03N2zLpgXE9VCKZfbmgHjHVfvasUQh9QUKPANM/wR9/y+WI7c40OQYWLCOirxoHn/XSaPxwZNWrUKg2FWpa1ko0OpbcTFO36FQT/c6onfPPJnvAuHIkBMM93r9kwcKn00mrJjNEbz1X2on8TQ/h0gnuvfnDkrTP9kVPo53RNze4jKeAquigNHHYqO5Ma/HsCGVDTHt6Y/l2StZkE+Xst8Kne8M9neKNTTzyxe1WOxMAJRFJgjrz+N15GuzWrDk8ZrMEZ48MEKkfo3ycH0fYDR/qlg+dVT/dGbzjllIs2oa1dVGAXed23Q6+F05o7pWXKt9HGESfDexwbh9vbRE4fQBCvO8DPnXFW+GD7/0F0rKSCVx3zxN3Nn4OvfnjjJNbfd3a8ODKuX1h4aEd7myhAPN0Ttgf1gfYrKOAaZi7+RJqa2qE14yWu+Aj0T2am+CCe1aPd3cbazupCcFdICvhmifOdDM5vOpTZz+nFwXSb6O+QI//JZEVJwpcYKB16NK7V8eijj65KgM/XfaZTwNscLWGtjjio7JXI6L/VBtuT2V8TJW3XNh/zjRl1rPBlbUGybZvU5ftqgQcuBV10437Ptoll362R1L7mFbCjuy4EMw96lgMezbkxyCpjFiwoIM+5NU7sJqUuq79ug2XwgSjG1+PcHIu0+/eLk5O1KGt/CHJqb64TgoAvEWSth+ucsDvZSPwHJOoFkIMlXVEAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAACNUlEQVR4Aa2U1XrbQBCFZWZ2mBMzfV/l1ykzX5eZGZ+gzLdh5lyHmfMKxekeJRPmeMQazz+r47MrbSYencp58eRMzispFXF+T8YVapIJx8W9mdd2BAOAWmT6XbtLOahVpsv7M2/uGPavXlaOXzWLoNuFUbNMve8joz3vIiO43xJUp1Xpbh7OurcYNvg5OlaSY/AVZ+tL+j9FR5EDFNfbR7IfoGZNoMmgNpU99tVSR3IeFiowRjgfzDeGAUWO2pNU9czfYDaqzavC3DaNB1e7RWOvfOarH/8Rm2GY1aS22sxqG0PHvsema176G51WjWOu1r0EduVA5q2+T9Eh/BjPLpvGVZSlL8Y9QFXP/fU1L/yNaIZ3yLntWgUSyDMEez9FB68dzLozb1pqlIXQSRr5FpuKFRnjeM/gqme+BmpLEg4BbWIQIlJojA1/jU6iFozHp3NeSpgBDBSfMhMrNiXmZbBr3IAwsPalv9lj13o4HxXNR7/FplEL4z89m/taSYjh3h74Eh1mzYQ2zsJMfRFris+te+VvdlhmNSvI1Bdi9PN/1Ofo8A3hDmlxiM5eBWDW2Mqf+mpF5ynW1Cbeifd21kxIM1n9wt8gGti5dm3bPFmwDSzCUIb1fRQGb5m1TcVTXz3bZk1j3z6a/WCxeQGFqQuz9EUM49ly91j2Izb2uoFphQIUYqTd7yLDXW8jQ4un3lWh++KarUHrZaKGHcCWQ3n5YtiO10ReYEWDG1IqAjOATbtR/AcWnmqd6errMQAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAADbUlEQVR4AWKgJujOku7vz5WZzDAYQVm0eNXfw4b//wFxVZxEHaD5slBuGwjCsByHmRNDmVszlZkeoszcDoeZmfMSZRwoMz9DmZm51/vH1TSwl15Io52xWNpP3vv/W+kKLmdVRgG74mFfz7gYftguWJtZoju4T6ec+OkHkoKjIHUGR0PqDk57SAm4z/hpDykJd9rJfl1w44dtDSEl4L6c5smveljZRlNV0TpTGbZxTAJSO7iabZZG9fqKzeYaTSDDwwzhhWszS9llebj+QJZuMFVGhBkiBgxoSgnLfHjQ9hIPk4eTg8RLPz9qfzMiPdyqDCbcE6Lc9w/YnrBLbjk4CUjM10+O2J9PnxrjV4YinOOjXA+CkDyRUxqOggTcUw4XmBI9MLhFnrjFIkhe7qfstk8I55kU7fFPjvYJIW/52LOj9heAE+Re1Cdc7qrMQnbDyyq3mOuo87wkM7j6igQv4OT/zMsXxxyvvRyUuobfWzjPGTuXOle60VSJ3BBln1by7WxwfPE3rlUkA3B8CDxmf/vBR4dsT2lIOko2mCqQE7lJC0Kz2dXnVBEAUhqui4iwDUiUXBYOubtaUB6aXrVNx1vjRC8bueZh9TssLcYQg1Ehwj8l2sfV+IJd/AfXVanPjtlfzZgWM0MhwhiihFRvNdcjR08bAgtesmGnpVVp2mVpY0JAL2vabW03GgFIjsnA82P2178FgC9PON7OssfMogENxrodlmaeg+cicl/ysJY91k4FgW8IqsQ128wNyn8CZUQ5u5U46HNQa0DCgmq7+iQYsI85vafCSlSRSMERkL8hElk4AlLNzcdlJXkhJM5uelktH5fUed/kaD9Xe54IEuV+xcsqgstemZEzW1ByWBvPjfm5Sukrlvnjl1PHbWOjHPf22x7DqGG61DUwYIhCpFYY9ePD9mciC1oWoHPL+Jzj7j7bI4yzLhZU00+fC957UdaC5JsF+NyjriKgIeV8rqtP8iHjHRScOTXM9Oig7QXdbtGQNBzZbqFpeG1ND7MMGBDNJOZI1YIkIWk4omGt5OqNDDdEDoSNsCAJSEk4nMM10gBDBVm4LrOUz6FFuE4WTktI9bMT21JwWkPiexg/eTjtIXUAR0DqDI6G1BkcDakzOBoSCtYXnBrwP8yx7BKazcwyRY+Bbwi1TR+q+APBIIxqL068kAAAAABJRU5ErkJggg==\"","import React from \"react\";\nimport styled from \"styled-components\";\nimport { ChainId, Colors, DEFAULT_CHAIN_ID, WRAPPED_NATIVE_CURRENCY } from \"../../constants\";\nimport URUSLogo1x from \"../../assets/icons/urus-coin@1x.png\";\nimport URUSLogo2x from \"../../assets/icons/urus-coin@2x.png\";\nimport ETHLogo1x from \"../../assets/icons/ether-logo@1x.png\";\nimport ETHLogo2x from \"../../assets/icons/ether-logo@2x.png\";\nimport BNBLogo1x from \"../../assets/icons/bnb-logo@1x.png\";\nimport BNBLogo2x from \"../../assets/icons/bnb-logo@2x.png\";\n\nexport const SymbolsPair = ({ chainId }: {chainId?: ChainId}) => (\n \n \"URUS\n {chainId === ChainId.Binance ? (\n \"BNB\n ) : (\n \"ETH\n )}\n \n URUS-{WRAPPED_NATIVE_CURRENCY[chainId ?? DEFAULT_CHAIN_ID].symbol}\n \n);\n\nexport const BNBSymbol = () => (\n \n \"BNB\n WBNB\n \n);\n\nexport const ETHSymbol = () => (\n \n \"ETH\n WETH\n \n);\n\nexport const URUSSymbol = () => (\n \n \"URUS\n URUS\n \n);\n\nexport const NativeSymbol = ({ chainId }: { chainId?: ChainId }) => chainId === ChainId.Binance ? : ;\n\nconst SymbolsWrapper = styled.div`\n display: flex;\n align-items: center;\n\n img {\n max-width: 22px;\n }\n`;\n\nconst Text = styled.p`\n margin-left: 8px;\n font-weight: 500;\n font-size: 24px;\n line-height: 28px;\n color: ${Colors.SecondaryTextColor};\n text-transform: uppercase;\n`;\n","import styled from \"styled-components\";\nimport { Colors } from \"../../../constants\";\n\nexport const Input = styled.input`\n max-width: 170px;\n padding: 0;\n font-weight: 500;\n font-size: 24px;\n line-height: 28px;\n color: #fff;\n border: none;\n background: none;\n outline: none;\n\n &[value=\"0\"] {\n color: ${Colors.DisabledColor};\n }\n`;\n","import { BigNumber } from \"ethers\";\nimport { Interface } from \"ethers/lib/utils\";\nimport { useMemo } from \"react\";\nimport Provider from \"../abi/Provider.json\";\nimport { DEFAULT_CHAIN_ID, PROVIDER_ADDRESS } from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useCurrentEpoch } from \"./useCurrentEpoch\";\nimport { useEthers } from \"./useEthers\";\n\nconst providerInterface = new Interface(Provider.abi);\nconst functionName = \"_getSecondsToEpochEnd\";\n\nexport function useSecondsToEpochEnd() {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const currentEpoch = useCurrentEpoch();\n const data = useChainCall(\n !!currentEpoch && {\n address: PROVIDER_ADDRESS[chainId],\n data: providerInterface.encodeFunctionData(functionName, [currentEpoch]),\n }\n );\n return useMemo(() => (data ? BigNumber.from(data) : undefined), [data]);\n}\n","import React from \"react\";\nimport { formatRemainingTime } from \"../../helpers\";\nimport { useSecondsToEpochEnd } from \"../../hooks/useSecondsToEpochEnd\";\nimport { WarningSection, WarningText } from \"../common\";\nimport { SectionLabelDanger } from \"../common/Section\";\n\nexport function PenaltyWarning() {\n const seconds = useSecondsToEpochEnd();\n\n return (\n \n Warning! Penalty information\n \n 10% of the amount entered will be burnt. You can receive the amount\n specified in full on the first day of given epoch.\n \n \n Time until the start of next epoch:{\" \"}\n {seconds ? formatRemainingTime(seconds.toNumber()) : \"?\"}\n \n \n );\n}\n","import { utils } from \"ethers\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { SymbolsPair } from \"../common/Symbols\";\nimport { DEFAULT_CHAIN_ID, URUS_CONTRACT } from \"../../constants\";\nimport { isSufficientBalance } from \"../../helpers\";\nimport {\n useContracts,\n useEthers,\n useFirstDayOfEpoch,\n useLiquidityDepositTotal,\n useNumberInput,\n} from \"../../hooks\";\nimport { TransactionStatus, withdraw } from \"../../infrastructure\";\nimport { CurrencyValue } from \"../../model\";\nimport { FailMessage } from \"../common\";\nimport { BadgeMax } from \"../common/Badge\";\nimport { ButtonPrimary } from \"../common/buttons/ButtonPrimary\";\nimport { Input } from \"../common/form/Input\";\nimport { Modal } from \"../common/modal/Modal\";\nimport { Row } from \"../common/Row\";\nimport { Section, SectionLabel, SectionRow } from \"../common/Section\";\nimport { PenaltyWarning } from \"./PenaltyWarning\";\n\ninterface WithdrawModalProps {\n isVisible: boolean;\n onClose: () => void;\n}\n\nexport const WithdrawModal = ({ isVisible, onClose }: WithdrawModalProps) => {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const [amount, setAmount] = useNumberInput(18);\n const value = useMemo(\n () =>\n amount\n ? new CurrencyValue(URUS_CONTRACT[chainId], utils.parseEther(amount))\n : undefined,\n [amount]\n );\n const totalDeposited = useLiquidityDepositTotal();\n const [status, setStatus] = useState(TransactionStatus.New);\n const isMining = useMemo(() => status === TransactionStatus.Mining, [status]);\n const { provider } = useContracts();\n const isFirstDayOfEpoch = useFirstDayOfEpoch();\n useEffect(\n () => (status === TransactionStatus.Success ? onClose() : undefined),\n [status]\n );\n\n return (\n \n \n Total deposited: {totalDeposited?.formatWithSymbol()}\n \n
\n \n \n Input \n setAmount(totalDeposited?.toString())\n : undefined\n }\n >\n MAX\n \n \n \n \n setAmount(e.target.value)}\n />\n \n \n
\n {!isFirstDayOfEpoch ? : }\n withdraw(provider, amount, setStatus)}\n >\n {isMining ? \"Transaction in progress...\" : \"Withdraw\"}\n \n {status === TransactionStatus.Fail && }\n
\n );\n};\n\nconst TotalDeposited = styled.p`\n margin-bottom: 24px;\n font-size: 20px;\n line-height: 23px;\n text-align: center;\n color: #aab4cf;\n\n span {\n color: #fff;\n }\n`;\n\nconst Margin = styled(Row)`\n margin: 24px 0 30px;\n`;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { Colors, DEFAULT_CHAIN_ID, WRAPPED_NATIVE_CURRENCY } from \"../../constants\";\nimport {\n useEthers,\n useEthBalance,\n useUrusBalance,\n useLPTokenBalance,\n useStakesTotal,\n useLiquidityDepositTotal,\n useClaimableLiquidityReward,\n} from \"../../hooks\";\nimport useMigrationContractBalance from \"../../hooks/useMigrationContractBalance\";\nimport { ButtonTertiary } from \"../common/buttons/ButtonTertiary\";\nimport { ClaimAndStakeLiquidityRewardModal } from \"./ClaimAndStakeLiquidityRewardModal\";\nimport { ClaimLiquidityRewardModal } from \"./ClaimLiquidityRewardModal\";\nimport { WithdrawModal } from \"./WithdrawModal\";\n\nexport function ConnectedBar() {\n const { chainId } = useEthers();\n const UrusBalance = useUrusBalance();\n const EtherBalance = useEthBalance();\n const LPTokenBalance = useLPTokenBalance();\n const stakedTotal = useStakesTotal();\n const depositedTotal = useLiquidityDepositTotal();\n const claimableLiquidityReward = useClaimableLiquidityReward();\n const migrationContractBalance = useMigrationContractBalance();\n\n const [claimModalOpen, setClaimModalOpen] = useState(false);\n const [claimAndStakeModalOpen, setClaimAndStakeModalOpen] = useState(false);\n const [isWithdrawModalVisible, setIsWithdrawModalVisible] = useState(false);\n\n return (\n \n \n \n \n {UrusBalance?.format()}\n URUS\n \n \n \n {EtherBalance?.format()}\n {WRAPPED_NATIVE_CURRENCY[chainId ?? DEFAULT_CHAIN_ID].symbol}\n \n \n {LPTokenBalance?.format()}\n URUS-{WRAPPED_NATIVE_CURRENCY[chainId ?? DEFAULT_CHAIN_ID].symbol} LP\n \n \n \n \n {stakedTotal?.format()}\n URUS\n \n \n \n \n \n \n \n {depositedTotal?.format()}\n URUS-{WRAPPED_NATIVE_CURRENCY[chainId ?? DEFAULT_CHAIN_ID].symbol} LP\n \n \n \n setIsWithdrawModalVisible(true)}\n disabled={depositedTotal?.value.eq(0)}\n >\n Withdraw\n \n setIsWithdrawModalVisible(false)}\n />\n \n \n \n \n {claimableLiquidityReward?.format()}\n URUS\n \n \n \n \n\n \n setClaimModalOpen(true)}\n disabled={claimableLiquidityReward?.value.eq(0)}\n >\n Claim\n \n setClaimAndStakeModalOpen(true)}\n disabled={claimableLiquidityReward?.value.eq(0)}\n >\n Stake\n \n \n setClaimModalOpen(false)}\n claimableReward={claimableLiquidityReward?.format() ?? \"\"}\n />\n setClaimAndStakeModalOpen(false)}\n claimableReward={claimableLiquidityReward?.format() ?? \"\"}\n />\n \n );\n}\n\nconst DetailsBar = styled.div`\n align-self: flex-start;\n max-width: 350px;\n width: 100%;\n padding: 32px 30.5px 43px;\n background: ${Colors.BackgroundSecondary};\n border: 1px solid #1e2739;\n border-radius: 8px;\n`;\n\nconst UrusAmountWrapper = styled.div`\n margin: 21px 0 11px;\n`;\n\nconst CurrencyDisplay = styled.div`\n display: flex;\n align-items: center;\n\n & + & {\n margin-top: 16px;\n }\n`;\n\nconst Label = styled.p`\n font-size: 12px;\n line-height: 20px;\n color: ${Colors.GrayAlt};\n opacity: 0.7;\n`;\n\nconst LabelUppercase = styled(Label)`\n text-transform: uppercase;\n`;\n\nconst UrusAmount = styled.p`\n margin-right: 8px;\n font-weight: 500;\n font-size: 40px;\n line-height: 48px;\n color: #3799fe;\n`;\n\nconst Amount = styled.p`\n margin-right: 4px;\n font-weight: 500;\n font-size: 17px;\n line-height: 20px;\n color: ${Colors.White};\n`;\n\nconst Block = styled.div`\n padding: 16px 0;\n margin: 30px 0 16px;\n border-top: 1px solid #222b3e;\n border-bottom: 1px solid #222b3e;\n\n & + & {\n border-top: none;\n margin-top: 0;\n padding-top: 0;\n }\n`;\n\nconst WithdrawButton = styled(ButtonTertiary)`\n margin: 16px auto 0;\n display: block;\n max-width: 90px;\n`;\n\nconst Row = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n & + & {\n margin-top: 16px;\n }\n`;\n\nconst ButtonsRow = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: 46px;\n\n & > button + button {\n margin-left: 24px;\n }\n`;\n","import { useEthers } from \"./useEthers\";\nimport { Currency, CurrencyValue, Token } from \"../model\";\nimport { DEFAULT_CHAIN_ID, URUS_LP_TOKEN } from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { Interface } from \"@ethersproject/abi\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { useMemo } from \"react\";\nimport { useContracts } from \".\";\n\nexport default function useMigrationContractBalance() {\n const { chainId = DEFAULT_CHAIN_ID, account } = useEthers();\n const { providerMigration } = useContracts();\n\n // return undefined as any;\n try {\n const data = useChainCall(\n !!account && {\n address: providerMigration.address,\n data: providerMigration.interface.encodeFunctionData(\"balances\", [\n account.address,\n ]),\n }\n );\n\n return useMemo(\n () =>\n data !== undefined\n ? new CurrencyValue(URUS_LP_TOKEN[chainId], BigNumber.from(data))\n : undefined,\n [data]\n );\n } catch (e) {\n return new CurrencyValue(URUS_LP_TOKEN[chainId], BigNumber.from(\"0\"));\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Colors } from \"../../constants\";\nimport { useEthers } from \"../../hooks\";\nimport { ConnectedBar } from \"./ConnectedBar\";\n\nexport function SideBar() {\n const { account } = useEthers();\n if (!account) {\n return The Aurox Token powers the entire Aurox Ecosystem;\n }\n return ;\n}\n\nconst Title = styled.h1`\n max-width: 350px;\n margin-right: 32px;\n font-weight: normal;\n font-size: 56px;\n line-height: 72px;\n color: ${Colors.White};\n`;\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\n\ninterface WrapperProps {\n children: ReactNode;\n}\n\nexport const Wrapper = ({ children }: WrapperProps) => (\n \n {children}\n \n);\n\nconst StyledWrapper = styled.div`\n position: relative;\n min-height: 100vh;\n`;\n\nconst Container = styled.div`\n max-width: 1170px;\n margin: 0 auto;\n padding: 0 30px;\n`;\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { TopBar } from \"../top\";\nimport { SideBar } from \"../sidebar\";\nimport { BlockNumber } from \"./BlockNumber\";\nimport { Version } from \"./Version\";\nimport { Wrapper } from \"./Wrapper\";\n\ninterface Props {\n children: ReactNode;\n}\n\nexport function Page({ children }: Props) {\n return (\n \n \n \n \n {children}\n \n {/* */}\n \n \n );\n}\n\nconst PageLayout = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 82px 0;\n`;\n","import styled from \"styled-components\";\n\nexport const Title = styled.h1`\n text-align: center;\n margin: 0 0 12px 0;\n font-size: 1.5rem;\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Colors, Fonts } from \"../../constants\";\n\nexport function Version() {\n return Version GIT_VERSION;\n}\n\nconst Text = styled.div`\n position: absolute;\n bottom: 12px;\n left: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-family: ${Fonts.Monospace};\n color: ${Colors.Gray};\n`;\n","export default __webpack_public_path__ + \"static/media/graph.93e2e52d.svg\";","export default __webpack_public_path__ + \"static/media/star.59d856e3.svg\";","export default __webpack_public_path__ + \"static/media/wallet.443b42e0.svg\";","import React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { Colors } from \"../../constants\";\nimport { Badge } from \"../common/Badge\";\nimport graphIcon from \"../../assets/icons/graph.svg\";\nimport starIcon from \"../../assets/icons/star.svg\";\nimport walletIcon from \"../../assets/icons/wallet.svg\";\n\nexport function HomeWidgets() {\n return (\n \n \n \n \"graph\"\n Aurox Liquidity Mining\n
\n 150 / Week\n
\n
\n \n \n \n The liquidity mining rewards are distributed to users that help us create a liquid decentralized market. Rewards are distributed evenly based on contribution. Liquidity mining is ran in 2 week epochs. You will have 24 hours to withdraw your LP tokens after the epoch has ended, otherwise, they will be automatically transferred to the subsequent epoch\n \n \n \n Provide liquidity to the Aurox Token listing on either Uniswap or PancakeSwap. By completing subsequent epochs, receive an additional reward.\n \n \n Stake your rewards earned via liquidity mining for 1 year and earn increase in staking rewards!\n \n \n \n
\n \n How to start?\n \n \n
\n
\n
\n \n \n \"graph\"\n Aurox Staking\n \n \n \n \n Stake your Aurox Tokens to earn more Aurox Tokens!\n \n \n \n Stake your tokens for more than 1 year to receive increase in rewards.\n \n \n Stake up to 7 years in 1 month increments.\n \n \n \n
\n \n How to start?\n \n \n
\n
\n
\n
\n );\n}\n\nconst WidgetsCascade = styled.div`\n width: 100%;\n margin-left: 70px;\n`;\n\nconst WidgetWithBorder = styled.div`\n padding: 24px 40px 32px;\n background: #0e1930;\n border-radius: 8px;\n border: 2px solid orange;\n\n & + & {\n margin-top: 40px;\n }\n`;\n\nconst Widget = styled.div`\n padding: 24px 40px 32px;\n background: #0e1930;\n border-radius: 8px;\n\n margin-top: 40px;\n`;\n\nconst WidgetHeader = styled.div`\n display: flex;\n align-items: center;\n margin-bottom: 6px;\n`;\n\nconst WidgetTitle = styled.h2`\n margin: 0 auto 0 16px;\n font-weight: 500;\n font-size: 24px;\n line-height: 28px;\n color: ${Colors.White};\n`;\n\nconst WidgetRow = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n`;\n\nconst WidgetDescription = styled.div`\n max-width: 454px;\n margin-right: 40px;\n`;\n\nconst WidgetText = styled.p`\n font-size: 16px;\n line-height: 20px;\n color: ${Colors.White};\n opacity: 0.8;\n`;\n\nconst List = styled.ul`\n margin-top: 24px;\n`;\n\nconst ListItem = styled.li`\n position: relative;\n padding-left: 20px;\n font-size: 12px;\n line-height: 16px;\n color: #99a7c6;\n\n & + & {\n margin-top: 16px;\n }\n\n &::before {\n content: \"\";\n position: absolute;\n top: 1.5px;\n left: 0;\n width: 14px;\n height: 14px;\n background: url(${starIcon}) center no-repeat;\n background-size: contain;\n }\n`;\n\nconst InfoLink = styled.a`\n display: block;\n margin-bottom: 16px;\n text-align: center;\n font-size: 16px;\n line-height: 19px;\n color: ${Colors.Blue};\n`;\n\nconst Button = styled(Link)`\n display: inline-block;\n margin-top: 16px;\n padding: 12px 50px;\n border: 2px solid #ffffff;\n border-radius: 8px;\n font-weight: bold;\n font-size: 16px;\n line-height: 19px;\n color: ${Colors.White};\n background: none;\n`;\n","import styled from \"styled-components\";\nimport { Colors } from \"../../../constants\";\n\nexport const PageTitle = styled.h1`\n margin-bottom: 8px;\n font-weight: 500;\n font-size: 24px;\n line-height: 28px;\n color: ${Colors.White};\n`;\n","import styled from \"styled-components\";\nimport { Colors } from \"../../../constants\";\n\nexport const PageSubtitle = styled.p`\n font-size: 16px;\n line-height: 20px;\n color: ${Colors.White};\n opacity: 0.8;\n`;\n","import { Transaction } from \"ethers\";\nimport React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { ChainId, Colors } from \"../../constants\";\nimport { shortenHash } from \"../../helpers\";\nimport { SectionLabel } from \"./Section\";\n\ntype InfoProps = {\n transaction: Transaction;\n};\n\nconst blockExplorer = {\n [ChainId.Mainnet]: { url: \"https://etherscan.io\", name: \"Etherscan\" },\n [ChainId.Goerli]: { url: \"https://goerli.etherscan.io\", name: \"Goerliscan\" },\n [ChainId.Hardhat]: { url: \"\", name: \"\" },\n [ChainId.Binance]: { url: \"https://bscscan.com\", name: \"BSCScan\" },\n};\n\nexport function TransactionInfo({ transaction }: InfoProps) {\n const chainId: ChainId =\n transaction.chainId in blockExplorer ? transaction.chainId : ChainId.Mainnet;\n const [hint, setHint] = useState(false);\n useEffect(() => {\n const handler = setTimeout(() => setHint(true), 45000);\n return () => clearTimeout(handler);\n }, [transaction]);\n return (\n \n \n \n View on {blockExplorer[chainId].name}\n \n {hint && (\n \n Transaction is taking longer than expected. Consider speeding it up in\n your wallet extension.\n \n )}\n \n );\n}\n\nconst InfoSection = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 8px 0 0;\n padding: 16px;\n background: rgba(36, 125, 255, 0.15);\n border-radius: 12px;\n text-align: center;\n`;\n\nconst Label = styled(SectionLabel)`\n color: #78a8f8;\n`;\n\nconst Text = styled.p`\n color: #78a8f8;\n text-align: center;\n font-size: 12px;\n margin-top: 4px;\n`;\n\nconst InfoLink = styled.a`\n text-align: center;\n font-size: 14px;\n line-height: 16px;\n color: ${Colors.Blue};\n`;\n","export function shortenHash(address: string) {\n return `${address.substring(0, 6)}...${address.substring(\n address.length - 4\n )}`;\n}\n","import { useEthers } from \"./useEthers\";\nimport { CurrencyValue, Token } from \"../model\";\nimport { DEFAULT_CHAIN_ID } from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { Interface } from \"@ethersproject/abi\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport ierc20 from \"../abi/erc20.abi.json\";\nimport { useMemo } from \"react\";\n\nconst allowanceInterface = new Interface(ierc20);\n\nexport function useTokenAllowance(token: Token, spender: string) {\n const { chainId = DEFAULT_CHAIN_ID, account } = useEthers();\n\n try {\n const data = useChainCall(\n !!account &&\n token.chainId === chainId && {\n address: token.address,\n data: allowanceInterface.encodeFunctionData(\"allowance\", [\n account.address,\n spender,\n ]),\n }\n );\n\n return useMemo(\n () =>\n data !== undefined\n ? new CurrencyValue(token, BigNumber.from(data))\n : undefined,\n [data]\n );\n } catch (e) {\n return new CurrencyValue(token, BigNumber.from(\"0\"));\n }\n}\n","import React from \"react\";\nimport { TextRow } from \"../../components/common/text/TextRow\";\nimport { usePoolRate } from \"../../hooks\";\nimport { useLiquidityDepositTotal } from \"../../hooks/useLiquidityDepositTotal\";\n\nexport function PoolStats() {\n const depositedTotal = useLiquidityDepositTotal();\n const poolRate = usePoolRate();\n\n return (\n <>\n \n \n \n );\n}\n","import { Transaction } from \"ethers\";\nimport React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { FailMessage, WrappedConnectButton } from \"../../components/common\";\nimport { BadgeMax } from \"../../components/common/Badge\";\nimport { ButtonPrimary } from \"../../components/common/buttons/ButtonPrimary\";\nimport { Input } from \"../../components/common/form/Input\";\nimport { Modal } from \"../../components/common/modal/Modal\";\nimport { Row } from \"../../components/common/Row\";\nimport {\n Section,\n SectionLabel,\n SectionRow,\n} from \"../../components/common/Section\";\nimport { SymbolsPair } from \"../../components/common/Symbols\";\nimport { TransactionInfo } from \"../../components/common/TransactionInfo\";\nimport { URUS_LP_TOKEN, LIQUIDITY_INFO, DEFAULT_CHAIN_ID } from \"../../constants\";\nimport { isSufficientBalance } from \"../../helpers\";\nimport {\n useContracts,\n useEthers,\n useLPTokenBalance,\n useNumberInput,\n} from \"../../hooks\";\nimport { useLPAllowance } from \"../../hooks/useLPAllowance\";\nimport {\n approve,\n CurrentTransaction,\n deposit,\n TransactionStatus,\n} from \"../../infrastructure\";\nimport { CurrencyValue } from \"../../model\";\nimport { PoolStats } from \"./PoolStats\";\n\ninterface DepositModalProps {\n onClose: () => void;\n isVisible: boolean;\n}\n\nexport const DepositModal = ({ isVisible, onClose }: DepositModalProps) => {\n const { account, chainId } = useEthers();\n const [value, setValue] = useNumberInput(18);\n const lpTokenBalance = useLPTokenBalance();\n const [status, setStatus] = useState(TransactionStatus.New);\n const [currentTransaction, setCurrentTransaction] = useState<\n CurrentTransaction\n >();\n const { lpToken, provider } = useContracts();\n const allowance = useLPAllowance();\n const [currencyValue, setCurrencyValue] = useState(\n null\n );\n useEffect(\n () =>\n chainId &&\n setCurrencyValue(CurrencyValue.fromString(URUS_LP_TOKEN[chainId], value)),\n [value]\n );\n const isMining = status === TransactionStatus.Mining;\n useEffect(\n () =>\n currentTransaction == CurrentTransaction.Deposit &&\n status == TransactionStatus.Success\n ? onClose()\n : undefined,\n [status]\n );\n const [transaction, setTransaction] = useState();\n\n return (\n \n
\n \n \n Input \n setValue(lpTokenBalance?.toString() || \"\")}\n >\n MAX\n \n \n Balance: {lpTokenBalance?.format()}\n \n \n setValue(e.target.value)}\n />\n \n \n
\n \n \n \n {account ? (\n \n approve(\n lpToken,\n provider.address,\n value,\n setStatus,\n setCurrentTransaction,\n setTransaction\n )\n : () =>\n deposit(\n provider,\n value,\n setStatus,\n setCurrentTransaction,\n setTransaction\n )\n }\n type=\"button\"\n isLoading={isMining}\n >\n {currencyValue && isSufficientBalance(lpTokenBalance, currencyValue)\n ? allowance?.lt(currencyValue)\n ? isMining\n ? \"Awaiting approval\"\n : `Approve ${value} URUS-LP`\n : isMining\n ? \"Processing transaction\"\n : `Deposit ${LIQUIDITY_INFO[chainId ?? DEFAULT_CHAIN_ID].token} LP Tokens`\n : \"Insufficient balance\"}\n \n ) : (\n \n )}\n {!!transaction && status === TransactionStatus.Mining && (\n \n )}\n {status === TransactionStatus.Fail && }\n \n );\n};\n\nconst DepositData = styled.div`\n margin-top: 30px;\n`;\n\nconst DepositButton = styled(ButtonPrimary)`\n margin-top: 51px;\n`;\n","import {\n DEFAULT_CHAIN_ID,\n PROVIDER_ADDRESS,\n URUS_LP_TOKEN,\n} from \"../constants\";\nimport { useEthers } from \"./useEthers\";\nimport { useTokenAllowance } from \"./useTokenAllowance\";\n\nexport function useLPAllowance() {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const lpToken = URUS_LP_TOKEN[chainId];\n const provider = PROVIDER_ADDRESS[chainId];\n return useTokenAllowance(lpToken, provider);\n}\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { useEthers } from \"../../hooks\";\nimport { Colors } from \"../../constants\";\nimport { ButtonPrimary } from \"../../components/common/buttons/ButtonPrimary\";\nimport { DepositModal } from \"./DepositModal\";\nimport { SymbolsPair } from \"../../components/common/Symbols\";\nimport { PoolStats } from \"./PoolStats\";\n\nexport const DepositTokens = () => {\n const { chainId } = useEthers();\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n return (\n \n \n \n
\n setIsModalOpen(true)}>\n Deposit\n \n
\n\n setIsModalOpen(false)}\n />\n
\n \n
\n );\n};\n\nconst View = styled.div`\n padding: 16px 24px 24px;\n background: ${Colors.BackgroundPrimary};\n border-radius: 8px;\n margin-bottom: 24px;\n`;\n\nconst BoxHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n`;\n\nconst DepositButton = styled(ButtonPrimary)`\n width: 124px;\n height: 36px;\n`;\n","import { DEFAULT_CHAIN_ID, URUS_CONTRACT } from \"../constants\";\nimport { useEthers } from \"./useEthers\";\nimport { useTokenAllowance } from \"./useTokenAllowance\";\n\nexport function useUrusAllowance(address: string) {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const urus = URUS_CONTRACT[chainId];\n return useTokenAllowance(urus, address);\n}\n","import React from \"react\";\n\nexport function CloseIcon() {\n return (\n \n \n \n \n );\n}\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAACFUlEQVR4AWLABtYDGikLpLeBGArnCP+hyszMzMzMDGFmZo6hzNxunR4gR+gRXleZxuOu120984Lyt5KerBabUjTjkKIPW/x9NNAM/Baj3wbqcJPrf6+eMlw00I2fFgjylbfwBPv02arRP8GKNnwo3IR27ysehhTsOuhHq/tFhELVf1yUwlTduCgGk2LpZ7jj7WLLroe4cbcOWQxvw8M/YJS6LLDBMyLYBEhK519IodQqEyg03pQ7pNqAJ8+l0Fe/26G872SmY3a5ylsC2YAkd6AvL10xDnGg0XYwwoRdvl3Fxm13TeCuA340Op9l0LaLZsvJiEs3K9h3NDyGTJ9zHAuXX8DaTbfG36/fqcmAI5f4Y631EReulyYg0gRoat7is1i5/rrUIBswW3qN/UdCBJEBTW3cdgfp3HM7kBwW+9fuf4U3OLCCLdmdwZUbJZRqb5EvvxGdZlJTwqknSBde8pve4fKN8hg4Y+4JHD8dR6n6FvfcbVy9VZGbomjskJPLpAIHlOvvEEk8Qiz1dJz1Pq5q86MdqLJNrtZzNiUsAxKHvDfHJsxBNNCT8oNRXe6wuWF0tkgSgDhvujjYN+/Jn2fKTlhbhlsM6ioMnrBqAqnURts+0D3VuCTfhSq7JAbXW59wz9/H1j1uVOrvbTBK5K87kVIXRylbfI277rZtGfQUtsiZJAHTurc+mnQQ/UaTMd4skusXbbfceF5D9aEAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAEZUlEQVR4AWIgF2zfftlh246LBdt2XloPpO9v3Xnx/dYdF/+DMJQN6M0ssNxIYjA8R8gR9ibLzMzMOMzMbGZm5jaGmRPDHiBH0ZbGW+3n6dSzKjD93h8cd38tlX6pyk38v0qtvVKrNZ8bOokrn2+eqjX+XeYwx1WutUGpNvHPWuFL1Dt+BvvMUwGr1jt6/jCRAtHLcGgswqCfe6Kg9dPt4V7ExCoo90Bvq8Jv/1ggkblOgGQRrXW+eyw4HjWKrJ4zsGcqwQ+/6WFmwQ/Uz7F1qn/UlF6gPiSZvYlwKiAqELlIhUQ18ZlkwHKt1aLevFhmqbVXNYDDk07IK/fIkBgQ+bQS5I9cQjANIGpPX6Dcg55uXLQyN8TC2DcrQsCf/zSy9N+Qg6y2Rx4Kh2WPhitzM1fgPEIJAVErGzEpQHSMh65HZrIBmRtFktcQaCAgyuZsPF6qMXoyN2BFhIVBBvx7zM6K6b4UJEaRED1CYRAAUfsGuYLBHq4Cyqw9tA6drSIN+OvfZoglr0mtRZ7e52TezOxqIIg0IGpq3i8VRQWnIAwl9QPx9A0h2JYuD1OLQfjoi3X49qd9IaQ/fFHKchCwQPK8Yx2Da2U7CSPTHvjxd8MRwMtvTB7pvY+X4avvdzWA/4yzDlO6S4UsDGEfpPywN3xRAzY86eJgXBywD/SL73b6fmb3MEcFfDBEHaUQasdQhJmVEPw5ahelkINp9MZ7c/Dp15vw/a86+OkPA8RT12mFQnkTu/cMzCyH4PcRGweRBuR6/Z3ZI9D5lRApigMB0WCXN2IcgAJI0i9/GiBbuEMAJKQYZbJVsCM8NuC7Hy3C+nYcuxEtxYNMGjdBpcr9/036LuwcZuHXfyzSgG+9Pwfzy0HIFbsVnMjcQGcYBNgk2Uw4fpXpCnvr7o4txSbo8VkPGfC7n/bAFzqv2pWOFZzRWqbZTLXeHKF2EPTBaKrXrlz+s5h2IeDHzLTt7oa6JXX5zsIfrNBGJt30fqwQW122eBsO2Vuj3Tj959T0pPO3YE+Xgx//6Bk1VuoCq9Js4XY34rmbMLcUxP9ngFZIZm7QWx1e1EKJpq+rRo2TtCd4oQeauwWrWwkYHrerQwF2jK39NE7WvdnQVaebdG/Ub5L7sa27veTSpJ3L4WnA8ISzL/1U7+ObexUwf6F5ivpB9EWDvabpyRa21lIs3YHIJZxaNMXz15gdo0wG1Jw8KNW2gfrhVO6WcKr56Q+ezn75QhceKXr9UeRrkT48kObBXR15OEA9EJ7blKs0y0GVqk20noGAI5Mu3tJoqjXF5zWyqcbx/8BSFgLimJ+SWHf47CHKJXMuE4iJTxYOJDZKeNxCQOur6iZ9A39OA7i+k5Q6l5E6PJJNN5r1oa2b6q6l2AipJaSVcuGipWxL45nr2F1wC8BM+jRplMKilCcSnNtQNvee8EW0FFLU5FMqASqKqFJt4UgmjJjCWioR7PEvnDRwHMKvGrCgjn8NgS+B/4fjnPIYX0P8B0W/Is89NFNoAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAACtElEQVR4AYySA5DdXBTH3+73tYvgGXHuS2Z2VNu2bdu2PaqtcW13UNsa17bN0/Pu3ezrzjIzcfK75w9XdltiYiIvCEJ3SZIOGobxgpDoH9zBNM3XsiwfFkVxIH7jd+Vn4ziuuaqqNyzLAtu2gBC2R6MIJOxZ7J2u67dw0a65wnw+3xwGsgHPFKBoFqydGIStcwJgmBbuDOh8FwgEViYkJPyfBeb1emc6IAcmqxYsHxMCOJcKcCEVNs4MgG5kC12VCZaUlFQHX2aBLYvBziLsFMf286mwYUb2UJ7nOzmTJaH5V52XJMpkLh2dDjuTCo92inBni8jucdr10xnUJHGopmkPMCiPCwNoiunRh9F02OKRISoxBnixT4A6lXQoV8KEu1sZ1JFvmFE6gAPF9Pu50tLSNhBCMmAhyYKhHWSAkxy8PiBAw6o6+MLoU8SGyqUNuLcdoRdTYcGIMLVFwt2BotKjrsKFC98yDEJhC4aHYUAbBQS/Df1aKdCytkavZ/WPwJJRIfCGbKiL007uLYEPrxtX12EJWkMIqxR29r2raNFiH1SNwDJ8EVv553EOerVQwI9ThSQbZvSLUB8xEOqrpFj0Xd3KOrUDLrOgEEr3OHAMA345zEPnxmo60GLAs1mBtXHSp3sQeCWF+ukAMySrugXzhoWhezM1JpP66EiePSCCMCqZBjStb4RCG6C/i0dllpwllLBswbjuEsrk4NV+gf7khFIpFso2EeBSKvU0m1COZamN6nTwPKvN870C1K6oQ9niJtz5pzabZgXAzFqb/lmLTbIv9u14sWkIfyevgDVhC8KyngdMAjMfo2a9FS34sx7hwqECUTisbMFZ4szCVXx1YCu+5gGLr7Ud4KyG1TBQ8YWvgA0GRtQVIgrYu8ACNhFdP64qgBcIknFUAfv5+flxVgEAVjAoERmTsiUAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,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\"","import { Contract, Transaction, utils } from \"ethers\";\nimport { TransactionStatus } from \"./TransactionStatus\";\n\nexport const addLiquidity = async (\n uniswapRouter: Contract,\n auroxToken: Contract,\n ethAmount: string,\n urusAmount: string,\n to: string,\n deadline: number,\n setStatus: (value: TransactionStatus) => void,\n setTransaction?: (value: Transaction) => void\n) => {\n try {\n setStatus(TransactionStatus.Mining);\n const token = auroxToken.address;\n const amountTokenDesired = urusAmount;\n const amountTokenMin = 0;\n const amountETHMin = 0;\n\n const amountTokenDesiredWei = utils.parseEther(amountTokenDesired);\n const ethAmountWei = utils.parseEther(ethAmount);\n\n const transaction = await uniswapRouter.addLiquidityETH(\n token,\n amountTokenDesiredWei,\n amountTokenMin,\n amountETHMin,\n to,\n deadline,\n { value: ethAmountWei }\n );\n setTransaction && setTransaction(transaction);\n\n const receipt = await transaction.wait();\n setStatus(\n receipt.status ? TransactionStatus.Success : TransactionStatus.Fail\n );\n } catch (exception) {\n console.error(exception);\n setStatus(TransactionStatus.Fail);\n }\n};\n","import { Interface } from \"@ethersproject/abi\";\nimport { useEffect, useState } from \"react\";\nimport {\n DEFAULT_CHAIN_ID,\n MULTICALL_ABI,\n MULTICALL_ADDRESS,\n} from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useEthers } from \"./useEthers\";\n\nconst multicallInterface = new Interface(MULTICALL_ABI);\n\nexport function useBlockTimestamp() {\n const { chainId = DEFAULT_CHAIN_ID, ethersProvider } = useEthers();\n const [currentTime, setCurrentTime] = useState();\n\n useEffect(() => {\n ethersProvider?.on(\"block\", async (blockNumber: number) => {\n const block = await ethersProvider.getBlock(blockNumber);\n setCurrentTime(block.timestamp);\n });\n return () => {\n ethersProvider?.off(\"block\");\n };\n }, [ethersProvider]);\n\n const data = useChainCall({\n address: MULTICALL_ADDRESS[chainId],\n data: multicallInterface.encodeFunctionData(\"getCurrentBlockTimestamp\", []),\n });\n\n return currentTime;\n}\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { ButtonPrimary } from \"../../components/common/buttons/ButtonPrimary\";\nimport { ModalOverlay } from \"../../components/common/modal/ModalOverlay\";\nimport { ModalTitle } from \"../../components/common/modal/ModalTitle\";\nimport { Row } from \"../../components/common/Row\";\nimport { CloseIcon } from \"../../components/icons/CloseIcon\";\nimport ETH1xIcon from \"../../assets/icons/ether@1x.png\";\nimport ETH2xIcon from \"../../assets/icons/ether@2x.png\";\nimport BNB1xIcon from \"../../assets/icons/bnb@1x.png\";\nimport BNB2xIcon from \"../../assets/icons/bnb@2x.png\";\nimport URUS1xIcon from \"../../assets/icons/urus-coin@1x.png\";\nimport URUS2xIcon from \"../../assets/icons/urus-coin@2x.png\";\nimport { TextRow } from \"../../components/common/text/TextRow\";\nimport { ChainId, Colors, DEFAULT_CHAIN_ID, WRAPPED_NATIVE_CURRENCY } from \"../../constants\";\nimport { TransactionStatus } from \"../../infrastructure\";\nimport { addLiquidity } from \"../../infrastructure/addLiquidity\";\nimport { useContracts, useEstimatedPoolShare, useEthers } from \"../../hooks\";\nimport { useBlockTimestamp } from \"../../hooks/useBlockTimestamp\";\nimport { useLPAmountMinted } from \"../../hooks/useLPAmountMinted\";\nimport { toPercent } from \"../../helpers\";\nimport { FailMessage } from \"../../components/common\";\nimport { Transaction } from \"ethers\";\nimport { TransactionInfo } from \"../../components/common/TransactionInfo\";\n\ninterface ConfirmationModalProps {\n isVisible: boolean;\n onClose: () => void;\n ethAmount: string;\n urusAmount: string;\n ethPerUrus: string;\n urusPerEth: string;\n}\n\nexport const ConfirmationModal = ({\n isVisible,\n onClose,\n ethAmount,\n urusAmount,\n ethPerUrus,\n urusPerEth,\n}: ConfirmationModalProps) => {\n const { account, chainId } = useEthers();\n const contracts = useContracts();\n const blockTimestamp = useBlockTimestamp();\n const [transactionStatus, setTransactionStatus] = useState(\n TransactionStatus.New\n );\n const lpMinted = useLPAmountMinted(urusAmount, ethAmount);\n const estimatedShare = useEstimatedPoolShare(urusAmount, ethAmount);\n const [transaction, setTransaction] = useState();\n if (!isVisible) return null;\n\n return (\n \n \n \n \n You will receive\n \n \n \n \n \n {lpMinted ? lpMinted.format() : \"?\"}\n \"URUS\n {chainId === ChainId.Binance ? (\n \"BNB\n ) : (\n \"ETH\n )}\n \n URUS/{WRAPPED_NATIVE_CURRENCY[chainId ?? DEFAULT_CHAIN_ID].symbol} Pool Tokens\n \n Output is estimated. If the price changes by more than 0.5% your\n transaction will revert.\n \n \n \n \n \"URUS\n {urusAmount}\n \n }\n />\n \n {chainId === ChainId.Binance ? (\n \"BNB\n ) : (\n \"ETH\n )}\n {ethAmount}\n \n }\n />\n \n <>1 {WRAPPED_NATIVE_CURRENCY[chainId ?? DEFAULT_CHAIN_ID].symbol} = {ethPerUrus} URUS\n <>1 URUS = {urusPerEth} {WRAPPED_NATIVE_CURRENCY[chainId ?? DEFAULT_CHAIN_ID].symbol}\n \n }\n />\n \n {\n if (blockTimestamp === undefined) {\n throw new Error(\"Block timestamp not yet known.\");\n }\n if (!account) {\n throw new Error(\"Account not connected.\");\n }\n const deadline = blockTimestamp + 1000;\n addLiquidity(\n contracts.uniswapRouter,\n contracts.auroxToken,\n ethAmount,\n urusAmount,\n account.address,\n deadline,\n setTransactionStatus,\n setTransaction\n );\n }\n }\n isLoading={transactionStatus === TransactionStatus.Mining}\n >\n {[TransactionStatus.Success, TransactionStatus.Fail].includes(\n transactionStatus\n )\n ? \"Done\"\n : \"Confirm Transaction\"}\n \n {transactionStatus === TransactionStatus.Fail && }\n {!!transaction && transactionStatus === TransactionStatus.Mining && (\n \n )}\n \n \n \n );\n};\n\nconst Modal = styled.div`\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n max-width: 400px;\n width: 100%;\n border-radius: 12px;\n overflow: hidden;\n`;\n\nconst ModalTop = styled.div`\n padding: 24px 16px 16px;\n background: ${Colors.BackgroundPrimary};\n`;\n\nconst ModalBottom = styled.div`\n padding: 24px 16px;\n background: #1c273f;\n`;\n\nconst CloseButton = styled.button`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 16px;\n height: 16px;\n padding: 0;\n border: none;\n background: none;\n`;\n\nconst AmountWrapper = styled.div`\n display: flex;\n align-items: baseline;\n margin-top: 16px;\n\n img {\n width: 20px;\n height: 20px;\n }\n\n img + img {\n margin-left: 2px;\n }\n`;\n\nconst Amount = styled.p`\n margin-right: 8px;\n font-weight: 500;\n font-size: 40px;\n line-height: 47px;\n display: flex;\n align-items: center;\n color: ${Colors.White};\n`;\n\nconst AmountLabel = styled.p`\n margin: 16px 0 24px;\n font-size: 20px;\n line-height: 23px;\n color: ${Colors.White};\n`;\n\nconst Hint = styled.p`\n font-size: 14px;\n line-height: 16px;\n display: flex;\n align-items: center;\n color: ${Colors.PrimaryTextColor};\n`;\n\nconst ConfirmButton = styled(ButtonPrimary)`\n margin-top: 32px;\n`;\n\nconst ValueRow = styled.div`\n display: flex;\n align-items: center;\n\n img {\n width: 16px;\n height: 16px;\n margin-right: 4px;\n }\n`;\n\nconst StyledTextRow = styled(TextRow)`\n align-items: flex-start;\n\n span + span {\n display: block;\n margin-top: 16px;\n }\n`;\n","import { DECIMAL_BASE } from \"../constants\";\nimport { useLPAmountMinted } from \"./useLPAmountMinted\";\nimport { useLPTokenSupply } from \"./useLPTokenSupply\";\n\nexport function useEstimatedPoolShare(amountUrus: string, amountEth: string) {\n const totalSupply = useLPTokenSupply();\n const mintedEstimate = useLPAmountMinted(amountUrus, amountEth);\n return totalSupply !== undefined && mintedEstimate !== undefined\n ? mintedEstimate.value\n .mul(DECIMAL_BASE.pow(18))\n .div(totalSupply.value.add(mintedEstimate.value))\n : undefined;\n}\n","import { BigNumber, utils } from \"ethers\";\nimport { DECIMAL_BASE } from \"../../constants\";\nimport { TokenPrice } from \"../../model\";\nimport { LiquidityValues } from \"./liquidityReducer\";\n\ntype currencySymbol = \"eth\" | \"urus\";\n\nexport function calculateValue(\n value: BigNumber,\n price: TokenPrice | undefined,\n currency: currencySymbol\n): string {\n if (price === undefined) {\n return \"0\";\n }\n const priceString =\n currency === \"urus\"\n ? utils.parseEther(price.reverse().toString())\n : utils.parseEther(price.toString());\n const result = value.mul(priceString).div(DECIMAL_BASE.pow(18));\n return result.eq(0) ? \"0\" : utils.formatEther(result);\n}\n\nexport function calculateEthValue(\n value: BigNumber,\n price: TokenPrice | undefined\n): string {\n return calculateValue(value, price, \"eth\");\n}\n\nexport function calculateUrusValue(\n value: BigNumber,\n price: TokenPrice | undefined\n): string {\n return calculateValue(value, price, \"urus\");\n}\n\nexport function displayExchangeRate(\n price: TokenPrice,\n currency: currencySymbol\n) {\n return currency === \"urus\"\n ? price.reverse().toFormattedString(10)\n : price.toFormattedString(10);\n}\n\nexport function areValuesZero(values: LiquidityValues) {\n return (\n utils.parseEther(values.ethAmount).lte(0) ||\n utils.parseEther(values.urusAmount).lte(0)\n );\n}\n","import { constants, utils } from \"ethers\";\nimport { DEFAULT_CHAIN_ID, NUMBER_REGEX } from \"../../constants\";\nimport { stripLeadingZeroes, truncateDecimals } from \"../../hooks\";\nimport { ONE, TokenPrice } from \"../../model\";\nimport { calculateEthValue, calculateUrusValue } from \"./helpers\";\n\nexport type LiquidityValues = {\n ethAmount: string;\n urusAmount: string;\n price: TokenPrice;\n};\nexport const initialState: LiquidityValues = {\n ethAmount: \"0\",\n urusAmount: \"0\",\n price: TokenPrice.createFrom(\n constants.AddressZero,\n DEFAULT_CHAIN_ID,\n ONE,\n ONE,\n 18\n ),\n};\nexport type LiquidityModalAction =\n | { type: \"amountChanged\"; fieldChanged: \"eth\" | \"urus\"; value: string }\n | { type: \"priceChanged\"; value: TokenPrice };\n\nexport function liquidityReducer(\n state: LiquidityValues,\n action: LiquidityModalAction\n) {\n if (action.type == \"priceChanged\") {\n return {\n ethAmount: state.ethAmount,\n urusAmount: state.urusAmount,\n price: action.value,\n };\n }\n if (NUMBER_REGEX.test(action.value)) {\n const value = format(action.value);\n const valueNumber = utils.parseEther(value);\n if (action.fieldChanged == \"eth\") {\n return {\n price: state.price,\n ethAmount: value,\n urusAmount: calculateUrusValue(valueNumber, state.price),\n };\n }\n return {\n price: state.price,\n urusAmount: value,\n ethAmount: calculateEthValue(valueNumber, state.price),\n };\n }\n\n return state;\n}\n\nfunction format(value: string) {\n return value.length > 0\n ? truncateDecimals(stripLeadingZeroes(value), 18)\n : \"0\";\n}\n","import React, { useEffect, useReducer, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { ButtonPrimary } from \"../../components/common/buttons/ButtonPrimary\";\nimport { Input } from \"../../components/common/form/Input\";\nimport { Modal } from \"../../components/common/modal/Modal\";\nimport { Row } from \"../../components/common/Row\";\nimport { Section, SectionLabel } from \"../../components/common/Section\";\nimport { NativeSymbol, URUSSymbol } from \"../../components/common/Symbols\";\nimport { WrappedConnectButton } from \"../../components/common\";\nimport { Colors, DEFAULT_CHAIN_ID, WRAPPED_NATIVE_CURRENCY } from \"../../constants\";\nimport {\n useContracts,\n useEthBalance,\n useEthers,\n useShareOfPool,\n useTokenPrice,\n useUrusBalance,\n} from \"../../hooks\";\nimport { useUrusAllowance } from \"../../hooks/useUrusAllowance\";\nimport { approve, TransactionStatus } from \"../../infrastructure\";\nimport { CurrencyValue } from \"../../model\";\nimport { ConfirmationModal } from \"./ConfirmationModal\";\nimport { areValuesZero, displayExchangeRate } from \"./helpers\";\nimport { initialState, liquidityReducer } from \"./liquidityReducer\";\nimport { formatValueString } from \"../../helpers\";\nimport { Transaction } from \"ethers\";\nimport { TransactionInfo } from \"../../components/common/TransactionInfo\";\n\ninterface AddLiquidityModalProps {\n onClose: () => void;\n isVisible: boolean;\n}\n\nexport const AddLiquidityModal = ({\n isVisible,\n onClose,\n}: AddLiquidityModalProps) => {\n const { account, chainId } = useEthers();\n const [values, dispatch] = useReducer(liquidityReducer, initialState);\n const [isConfirmationVisible, setIsConfirmationVisible] = useState(false);\n const [approvalStatus, setApprovalStatus] = useState(TransactionStatus.New);\n const price = useTokenPrice();\n\n const prices = {\n ethPerUrus: price ? displayExchangeRate(price, \"eth\") : \"\",\n urusPerEth: price ? displayExchangeRate(price, \"urus\") : \"\",\n };\n const { auroxToken, uniswapRouter } = useContracts();\n useEffect(\n () =>\n price ? dispatch({ type: \"priceChanged\", value: price }) : undefined,\n [price]\n );\n const ethBalance = useEthBalance();\n const urusBalance = useUrusBalance();\n const uniswapAllowance = useUrusAllowance(uniswapRouter.address);\n\n const insufficientBalance =\n ethBalance?.lt(\n CurrencyValue.fromString(ethBalance.currency, values.ethAmount)\n ) ||\n urusBalance?.lt(\n CurrencyValue.fromString(urusBalance.currency, values.urusAmount)\n );\n\n const insufficientAllowance =\n urusBalance !== undefined &&\n uniswapAllowance !== undefined &&\n CurrencyValue.fromString(urusBalance.currency, values.urusAmount).gt(\n uniswapAllowance\n );\n\n const shareOfPool = useShareOfPool();\n\n const isMining = approvalStatus === TransactionStatus.Mining;\n\n const [transaction, setTransaction] = useState();\n\n return (\n <>\n \n
\n \n Input \n Balance: {urusBalance?.format()}\n \n \n \n dispatch({\n type: \"amountChanged\",\n fieldChanged: \"urus\",\n value: e.target.value,\n })\n }\n />\n \n \n
\n +\n
\n \n Input \n Balance: {ethBalance?.format()}\n \n \n \n dispatch({\n type: \"amountChanged\",\n fieldChanged: \"eth\",\n value: e.target.value,\n })\n }\n />\n \n \n
\n \n Prices and pool share\n \n
\n {prices.ethPerUrus}\n {WRAPPED_NATIVE_CURRENCY[chainId ?? DEFAULT_CHAIN_ID].symbol} per URUS\n
\n
\n {prices.urusPerEth}\n URUS per {WRAPPED_NATIVE_CURRENCY[chainId ?? DEFAULT_CHAIN_ID].symbol}\n
\n
\n \n {shareOfPool ? formatValueString(shareOfPool, 8) : \"0\"}%\n \n Share of Pool\n
\n
\n
\n {account ? (\n \n approve(\n auroxToken,\n uniswapRouter.address,\n values.urusAmount,\n setApprovalStatus,\n () => null,\n setTransaction\n )\n : () => setIsConfirmationVisible(true)\n }\n disabled={insufficientBalance || isMining || areValuesZero(values)}\n isLoading={isMining}\n >\n {insufficientBalance\n ? \"Insufficient balance\"\n : insufficientAllowance\n ? \"Approve URUS\"\n : \"Confirm Liquidity\"}\n \n ) : (\n \n )}\n {!!transaction && isMining && (\n \n )}\n \n {isConfirmationVisible ? (\n setIsConfirmationVisible(false)}\n ethAmount={values.ethAmount}\n urusAmount={values.urusAmount}\n {...prices}\n />\n ) : undefined}\n \n );\n};\n\nconst Plus = styled.p`\n margin: 16px 0;\n font-weight: 500;\n font-size: 20px;\n line-height: 23px;\n text-align: center;\n color: ${Colors.White};\n`;\n\nconst StyledSection = styled(Section)`\n padding: 0;\n margin: 24px 0;\n`;\n\nconst SectionHeader = styled.div`\n padding: 16px;\n font-size: 14px;\n line-height: 16px;\n color: ${Colors.White};\n`;\n\nconst SectionBody = styled(Section)`\n display: flex;\n justify-content: space-between;\n text-align: center;\n border-left: none;\n border-bottom: none;\n border-right: none;\n`;\n\nconst SectionValue = styled.p`\n margin-bottom: 8px;\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n color: ${Colors.White};\n`;\n","import { utils } from \"ethers\";\nimport { useMemo } from \"react\";\nimport { DECIMAL_BASE } from \"../constants\";\nimport { useLPTokenBalance } from \"./useLPTokenBalance\";\nimport { useLPTokenSupply } from \"./useLPTokenSupply\";\n\nexport function useShareOfPool() {\n const lpBalance = useLPTokenBalance();\n const lpTotalSupply = useLPTokenSupply();\n return useMemo(\n () =>\n lpBalance !== undefined && lpTotalSupply !== undefined\n ? utils.formatEther(\n lpBalance.value.mul(DECIMAL_BASE.pow(20)).div(lpTotalSupply.value)\n )\n : undefined,\n [lpBalance, lpTotalSupply]\n );\n}\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport { ButtonPrimary } from \"../../components/common/buttons/ButtonPrimary\";\nimport { useEthers } from \"../../hooks\";\nimport { Colors, DEFAULT_CHAIN_ID, WRAPPED_NATIVE_CURRENCY, LIQUIDITY_INFO } from \"../../constants\";\n\nimport { AddLiquidityModal } from \"./AddLiquidityModal\";\n\nexport const AddLiquidityTokens = () => {\n const { chainId } = useEthers();\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const { token: liquidityToken, exchange } = LIQUIDITY_INFO[chainId ?? DEFAULT_CHAIN_ID];\n\n return (\n \n Get {liquidityToken} Liquidity tokens\n \n {liquidityToken} LP tokens are required. You can add liquidity to our {exchange}{\" \"}\n listing using the button below or by providing the liquidity directly on{\" \"}\n {exchange}.\n \n setIsModalOpen(true)}>\n Add URUS-{WRAPPED_NATIVE_CURRENCY[chainId ?? DEFAULT_CHAIN_ID].symbol} liquidity\n \n setIsModalOpen(false)}\n />\n \n );\n};\n\nconst View = styled.div`\n padding: 16px 24px 24px;\n background: ${Colors.BackgroundPrimary};\n border-radius: 8px;\n`;\n\nconst BoxTitle = styled.p`\n margin-bottom: 16px;\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n color: ${Colors.SecondaryTextColor};\n`;\n\nconst BoxText = styled.p`\n margin-bottom: 24px;\n font-size: 14px;\n line-height: 16px;\n color: ${Colors.SecondaryTextColor};\n`;\n\nconst BoxButton = styled(ButtonPrimary)`\n padding: 9px 16px;\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Colors, LIQUIDITY_INFO, DEFAULT_CHAIN_ID } from \"../../constants\";\nimport { PageTitle } from \"../../components/common/text/PageTitle\";\nimport { PageSubtitle } from \"../../components/common/text/PageSubtitle\";\nimport { DepositTokens } from \"./DepositTokens\";\nimport { AddLiquidityTokens } from \"./AddLiquidityTokens\";\nimport { useEthers } from \"../../hooks\";\nimport { useSecondsToEpochEnd } from \"../../hooks/useSecondsToEpochEnd\";\nimport { formatRemainingTime } from \"../../helpers\";\n\nexport function LiquidityMining() {\n const { chainId } = useEthers();\n const seconds = useSecondsToEpochEnd();\n\n return (\n \n Aurox Liquidity Mining\n \n Deposit your Liquidity Provider tokens from {LIQUIDITY_INFO[chainId ?? DEFAULT_CHAIN_ID].exchange} to receive URUS\n token rewards.\n \n \n \n Participating Pools\n \n Next epoch starts in{\" \"}\n {seconds ? formatRemainingTime(seconds.toNumber()) : \"?\"}\n \n \n \n \n \n \n );\n}\n\nconst View = styled.div`\n margin-left: 30px;\n`;\n\nconst Pools = styled.div`\n margin-top: 65px;\n`;\n\nconst PoolsHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n`;\n\nconst PoolsTitle = styled.h3`\n font-weight: 500;\n font-size: 17px;\n line-height: 20px;\n color: ${Colors.White};\n`;\n\nconst RewardsTimer = styled.p`\n font-size: 16px;\n line-height: 19px;\n color: #6fcf97;\n`;\n","import { BigNumber } from \"ethers\";\nimport { TransactionStatus } from \"../../infrastructure\";\nimport { CurrencyValue } from \"../../model\";\nimport { isSufficientBalance } from \"../../helpers\";\nimport { formatRemainingTime } from \"../../helpers\";\n\nexport function isStakingEnabled(\n amount: CurrencyValue,\n stakeTime: string,\n status: TransactionStatus,\n urusBalance: CurrencyValue | undefined\n) {\n return (\n amount.value.gt(0) &&\n Number.parseFloat(stakeTime) > 0 &&\n status !== TransactionStatus.Mining &&\n isSufficientBalance(urusBalance, amount)\n );\n}\n\nexport function isStakeReady(endTime: BigNumber, now = Date.now()) {\n return now > toMilliseconds(endTime);\n}\n\nexport function toMilliseconds(time: BigNumber) {\n return time.mul(1000).toNumber();\n}\n\nexport function nowInSeconds(now = Date.now()) {\n return Math.floor(now / 1000);\n}\n\nexport function remainingTime(endTime: BigNumber, now = Date.now()) {\n const remaining = remainingSeconds(endTime, now);\n if (remaining <= 0) {\n return \"Ready to claim\";\n }\n return formatRemainingTime(remaining);\n}\n\nexport function remainingSeconds(endTime: BigNumber, now = Date.now()) {\n return endTime.sub(nowInSeconds(now)).toNumber();\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Transaction, utils } from \"ethers\";\nimport styled from \"styled-components\";\nimport URUSCoin1x from \"../../assets/icons/urus-coin@1x.png\";\nimport URUSCoin2x from \"../../assets/icons/urus-coin@2x.png\";\nimport { HelpIcon } from \"../../components\";\nimport { Badge } from \"../../components/common/Badge\";\nimport { ButtonPrimary } from \"../../components/common/buttons/ButtonPrimary\";\nimport { CustomSpinnerInput } from \"../../components/common/CustomSpinnerInput\";\nimport { Input } from \"../../components/common/form/Input\";\nimport { Section } from \"../../components/common/Section\";\nimport { FailMessage, WrappedConnectButton } from \"../../components/common\";\nimport {\n Colors,\n DEFAULT_CHAIN_ID,\n MAX_STAKE_DURATION,\n STAKING_MASTER_ADDRESS,\n URUS_CONTRACT,\n} from \"../../constants\";\nimport {\n useContracts,\n useEthers,\n useInterestPercentage,\n useNaturalNumberInput,\n useNumberInput,\n useUrusBalance,\n} from \"../../hooks\";\nimport { useUrusAllowance } from \"../../hooks/useUrusAllowance\";\nimport {\n approve,\n CurrentTransaction,\n stake,\n TransactionStatus,\n} from \"../../infrastructure\";\nimport { CurrencyValue } from \"../../model\";\nimport { isSufficientBalance, toPercent } from \"../../helpers\";\nimport { isStakingEnabled } from \"./helpers\";\nimport { TransactionInfo } from \"../../components/common/TransactionInfo\";\n\ntype StakeModalProps = {\n closeOnSuccess: () => void;\n};\n\nexport function StakeModal({ closeOnSuccess }: StakeModalProps) {\n const { account, chainId = DEFAULT_CHAIN_ID } = useEthers();\n const urusBalance = useUrusBalance();\n const [amount, setAmount] = useNumberInput(18);\n const [status, setStatus] = useState(TransactionStatus.New);\n const [stakeTime, setStakeTime] = useNaturalNumberInput(MAX_STAKE_DURATION);\n const [currentTransaction, setCurrentTransaction] =\n useState();\n const { auroxToken, stakingMaster } = useContracts();\n const allowance =\n useUrusAllowance(STAKING_MASTER_ADDRESS[chainId]) ||\n CurrencyValue.fromString(URUS_CONTRACT[chainId], \"0\");\n const [amountValue, setAmountValue] = useState(\n CurrencyValue.fromString(URUS_CONTRACT[chainId], \"0\")\n );\n\n useEffect(\n () =>\n setAmountValue(CurrencyValue.fromString(URUS_CONTRACT[chainId], amount)),\n [amount]\n );\n useEffect(\n () =>\n currentTransaction === CurrentTransaction.StakeUrus &&\n status === TransactionStatus.Success\n ? closeOnSuccess()\n : undefined,\n [status]\n );\n const isMining = status === TransactionStatus.Mining;\n const apy = useInterestPercentage(stakeTime);\n const [transaction, setTransaction] = useState();\n\n let amountOfRewards: string | null = null;\n\n if (apy && amountValue) {\n const years = Number(stakeTime) / 12;\n const tokensPerYear = amountValue.value.mul(apy);\n\n amountOfRewards = (Math.round(Number(utils.formatEther(tokensPerYear.div(utils.parseEther(\"1\")))) * years * 100)/100).toString();\n }\n\n return (\n
\n
\n \n \n \n \n \n setAmount(e.target.value)}\n />\n \n \"URUS\n URUS\n \n \n
\n \n \n months\n \n \n \n You can stake from 1 month to 7 years\n \n \n {amountOfRewards ?? 0} URUS\n The amount of rewards you receive is calculated by multiplying (months staked * amount of tokens staked * 0.5) where months staked is less than 40. You will still continue to earn the same amount of rewards overall but the amount per year will not increase for staking more than 40 months. Please note that cancelling the stake early will penalize you. Refer to our documentation:{\" \"}\n \n Click Here\n \n \n {account ? (\n \n approve(\n auroxToken,\n stakingMaster.address,\n amount,\n setStatus,\n setCurrentTransaction,\n setTransaction\n )\n : () =>\n stake(\n stakingMaster,\n amount,\n stakeTime,\n account.address,\n setStatus,\n setCurrentTransaction,\n setTransaction\n )\n }\n type=\"button\"\n >\n {isSufficientBalance(urusBalance, amountValue)\n ? allowance?.lt(amountValue)\n ? isMining\n ? \"Awaiting approval\"\n : `Approve ${amount} URUS`\n : isMining\n ? \"Processing transaction\"\n : \"Stake\"\n : \"Insufficient balance\"}\n \n ) : (\n \n )}\n {!!transaction && status === TransactionStatus.Mining && (\n \n )}\n {status === TransactionStatus.Fail && }\n \n );\n}\n\nconst InputLabels = styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nconst Label = styled.p`\n font-size: 14px;\n line-height: 16px;\n color: ${Colors.PrimaryTextColor};\n`;\n\nconst InputFields = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 24px;\n`;\n\nconst MonthInput = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: left;\n margin-top: 0;\n`;\n\nconst MonthLabel = styled.p`\n font-size: 16px;\n line-height: 18px;\n margin-left: 10px;\n margin-top: 10px;\n color: ${Colors.PrimaryTextColor};\n`;\n\nconst Token = styled.p`\n font-weight: 500;\n font-size: 20px;\n line-height: 23px;\n display: flex;\n align-items: center;\n text-align: right;\n color: ${Colors.White};\n text-transform: uppercase;\n\n img {\n margin-right: 8px;\n width: 20px;\n height: 20px;\n }\n`;\n\nconst Hint = styled.div`\n display: flex;\n align-items: center;\n margin-bottom: 54px;\n`;\n\nconst HintText = styled.p`\n margin-left: 8px;\n font-size: 12px;\n line-height: 14px;\n color: ${Colors.PrimaryTextColor};\n`;\n\nconst InfoBox = styled(Section)`\n position: relative;\n margin-bottom: 32px;\n padding: 32px 32px 16px;\n font-size: 14px;\n line-height: 16px;\n text-align: center;\n color: ${Colors.White};\n`;\n\nconst StyledBadge = styled(Badge)`\n position: absolute;\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n padding: 8px 28px;\n`;\n\nconst InfoLink = styled.a`\n text-align: center;\n font-size: 14px;\n line-height: 16px;\n color: ${Colors.Blue};\n`;\n","export default __webpack_public_path__ + \"static/media/triangle.deabfeca.svg\";","import { Interface } from \"@ethersproject/abi\";\nimport { useEffect, useState } from \"react\";\nimport { DEFAULT_CHAIN_ID, STAKING_MASTER_ADDRESS } from \"../constants\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useEthers } from \"./useEthers\";\nimport StakingMaster from \"../abi/StakingMaster.json\";\n\nconst stakesInterface = new Interface(StakingMaster.abi);\nconst functionName = \"returnUsersStakes\";\n\nexport function useUsersStakes() {\n const { chainId = DEFAULT_CHAIN_ID, account } = useEthers();\n const stakingMaster = STAKING_MASTER_ADDRESS[chainId];\n\n const [stakes, setStakes] = useState();\n\n const data = useChainCall(\n !!account && {\n address: stakingMaster,\n data: stakesInterface.encodeFunctionData(functionName, [account.address]),\n }\n );\n\n useEffect(() => {\n if (data !== undefined) {\n const stakesArray = stakesInterface.decodeFunctionResult(\n functionName,\n data\n );\n if (stakesArray) {\n setStakes([...stakesArray[0].values()]);\n }\n }\n }, [data]);\n\n return stakes;\n}\n","import { useEffect, RefObject } from \"react\";\n\nexport const useOutsideClick = (\n ref: RefObject,\n callback: () => void,\n deps?: any[]\n) => {\n const handleClick = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as HTMLInputElement)) {\n callback();\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClick);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n };\n }, deps);\n};\n","import { BigNumber } from \"ethers\";\nimport { Interface } from \"ethers/lib/utils\";\nimport StakingMaster from \"../abi/StakingMaster.json\";\n\nconst stakesInterface = new Interface(StakingMaster.abi);\n\nexport type Stake = {\n currentStakeValue: BigNumber;\n stakeEndTime: BigNumber;\n interestRate: BigNumber;\n lastUpdate: BigNumber;\n compounding: boolean;\n rawInvestedAmount: BigNumber;\n stakeStartTime: BigNumber;\n address: string;\n};\n\nexport function decodeStake(\n data: string | undefined,\n functionName: string,\n stakeAddress: string\n): Stake | undefined {\n if (!data) {\n return undefined;\n }\n const asArray = stakesInterface.decodeFunctionResult(functionName, data);\n\n return {\n currentStakeValue: asArray[0],\n stakeEndTime: asArray[1],\n interestRate: asArray[2],\n lastUpdate: asArray[3],\n compounding: asArray[4],\n rawInvestedAmount: asArray[5],\n stakeStartTime: asArray[6],\n address: stakeAddress,\n };\n}\n","import { Interface } from \"@ethersproject/abi\";\nimport { useMemo } from \"react\";\nimport StakingMaster from \"../abi/StakingMaster.json\";\nimport { DEFAULT_CHAIN_ID, STAKING_MASTER_ADDRESS } from \"../constants\";\nimport { decodeStake } from \"../model/Stake\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useEthers } from \"./useEthers\";\n\nconst stakesInterface = new Interface(StakingMaster.abi);\nconst functionName = \"returnStakeState\";\n\nexport function useStakeState(stakeAddress: string) {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const data = useChainCall({\n address: STAKING_MASTER_ADDRESS[chainId],\n data: stakesInterface.encodeFunctionData(functionName, [stakeAddress]),\n });\n return useMemo(() => decodeStake(data, functionName, stakeAddress), [data]);\n}\n","import { useState } from \"react\";\n\nexport const useToggler = () => {\n const [visible, setVisibility] = useState(false);\n const toggle = (value?: boolean) => {\n if (value === undefined) {\n setVisibility((visible) => !visible);\n } else {\n setVisibility(() => value);\n }\n };\n\n return { visible, toggle };\n};\n","import { Interface } from \"ethers/lib/utils\";\nimport { DEFAULT_CHAIN_ID, STAKING_MASTER_ADDRESS } from \"../constants\";\nimport { useEthers } from \"./useEthers\";\nimport StakingMaster from \"../abi/StakingMaster.json\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useMemo } from \"react\";\nimport { BigNumber } from \"ethers\";\n\nconst stakesInterface = new Interface(StakingMaster.abi);\nconst functionName = \"returnClaimAmountForEarlyStakeClose\";\n\nexport function useAmountForStakeCancel(stakeAddress: string) {\n const { chainId = DEFAULT_CHAIN_ID, account } = useEthers();\n const data = useChainCall(\n !!account && {\n address: STAKING_MASTER_ADDRESS[chainId],\n data: stakesInterface.encodeFunctionData(functionName, [stakeAddress]),\n }\n );\n return useMemo(() => (data ? BigNumber.from(data) : undefined), [data]);\n}\n","import { Contract } from \"ethers\";\nimport { TransactionStatus } from \"./TransactionStatus\";\n\nexport const cancelStake = async (\n stakingMaster: Contract,\n stakeAddress: string,\n setStatus: (value: TransactionStatus) => void\n) => {\n try {\n setStatus(TransactionStatus.Mining);\n const transaction = await stakingMaster.closeStake(stakeAddress);\n const receipt = await transaction.wait();\n setStatus(\n receipt.status ? TransactionStatus.Success : TransactionStatus.Fail\n );\n } catch (error) {\n setStatus(TransactionStatus.Fail);\n }\n};\n","import { utils } from \"ethers\";\nimport React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { WarningSection, WarningText } from \"../../components/common\";\nimport { ButtonPrimary } from \"../../components/common/buttons/ButtonPrimary\";\nimport { Modal } from \"../../components/common/modal/Modal\";\nimport {\n Section,\n SectionLabel,\n SectionLabelDanger,\n} from \"../../components/common/Section\";\nimport { Colors } from \"../../constants\";\nimport { useContracts } from \"../../hooks\";\nimport { useAmountForStakeCancel } from \"../../hooks/useAmountForStakeCancel\";\nimport { TransactionStatus } from \"../../infrastructure\";\nimport { cancelStake } from \"../../infrastructure/cancelStake\";\nimport { Stake } from \"../../model/Stake\";\nimport { remainingTime } from \"./helpers\";\n\ntype CancelModalProps = {\n isVisible: boolean;\n onClose: () => void;\n stake: Stake;\n};\n\nexport function CancelStakeModal({\n isVisible,\n onClose,\n stake,\n}: CancelModalProps) {\n const amount = useAmountForStakeCancel(stake.address);\n const { stakingMaster } = useContracts();\n const [status, setStatus] = useState(TransactionStatus.New);\n useEffect(\n () => (status == TransactionStatus.Success ? onClose() : undefined),\n [status]\n );\n\n const isMining = status == TransactionStatus.Mining;\n\n return (\n \n \n Remaining time: \n \n {remainingTime(stake.stakeEndTime)}\n \n \n \n \n {amount ? utils.formatEther(amount) : undefined} URUS\n \n Your return amount\n \n \n Warning! Penalty information\n \n Canceling the stake before it's over will only refund a portion\n of the staked URUS.\n \n \n cancelStake(stakingMaster, stake.address, setStatus)}\n isLoading={isMining}\n >\n {!isMining ? \"Cancel stake\" : \"Processing transaction\"}\n \n \n );\n}\n\nconst TimeRow = styled.div`\n display: flex;\n justify-content: center;\n margin-bottom: 40px;\n\n & > * + * {\n margin-left: 2px;\n }\n`;\n\nconst CancelModalSection = styled(Section)`\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto 8px;\n padding: 16px 34px;\n font-weight: 500;\n font-size: 32px;\n line-height: 32px;\n text-align: center;\n color: ${Colors.White};\n\n span {\n font-weight: 400;\n margin-left: 8px;\n font-size: 12px;\n line-height: 20px;\n color: ${Colors.GrayAlt};\n opacity: 0.6;\n }\n`;\n\nconst Column = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nconst ButtonDanger = styled(ButtonPrimary)`\n background: ${Colors.Danger};\n`;\n","import React from \"react\";\n\nimport { utils } from \"ethers\";\n\nimport { Stake } from \"../../model/Stake\";\nimport { CurrencyValue } from \"../../model\";\nimport { DEFAULT_CHAIN_ID, URUS_CONTRACT } from \"../../constants\";\nimport { useEthers } from \"../../hooks\";\n\ntype AmountOfRewardsProps = {\n stake: Stake;\n};\n\nexport function AmountOfRewards({ stake }: AmountOfRewardsProps) {\n const { chainId = DEFAULT_CHAIN_ID} = useEthers();\n\n const amountOfRewards = new CurrencyValue(URUS_CONTRACT[chainId], stake.rawInvestedAmount.add(stake.interestRate.mul(stake.rawInvestedAmount).div(utils.parseEther(\"1\"))));\n\n return <>{amountOfRewards ? amountOfRewards.format() : null};\n}\n","import { BigNumber } from \"ethers\";\nimport { Interface } from \"ethers/lib/utils\";\nimport { useMemo } from \"react\";\nimport StakingMaster from \"../abi/StakingMaster.json\";\nimport {\n DEFAULT_CHAIN_ID,\n STAKING_MASTER_ADDRESS,\n URUS_CONTRACT,\n} from \"../constants\";\nimport { CurrencyValue } from \"../model\";\nimport { Stake } from \"../model/Stake\";\nimport { useChainCall } from \"./useChainCalls\";\nimport { useEthers } from \"./useEthers\";\n\nconst stakesInterface = new Interface(StakingMaster.abi);\nconst signature = \"returnStakesClaimableRewards\";\n\nexport function useRewardAmount(stake: Stake) {\n const { chainId = DEFAULT_CHAIN_ID } = useEthers();\n const data = useChainCall({\n address: STAKING_MASTER_ADDRESS[chainId],\n data: stakesInterface.encodeFunctionData(signature, [stake.address]),\n });\n return useMemo(\n () =>\n data\n ? new CurrencyValue(URUS_CONTRACT[chainId], BigNumber.from(data))\n : undefined,\n [data]\n );\n}\n","import React from \"react\";\nimport { useRewardAmount } from \"../../hooks/useRewardAmount\";\nimport { Stake } from \"../../model/Stake\";\n\ntype RewardProps = {\n stake: Stake;\n};\n\nexport function RewardAmount({ stake }: RewardProps) {\n const reward = useRewardAmount(stake);\n return {reward ? reward.format() : undefined};\n}\n","import { Contract } from \"ethers\";\nimport { TransactionStatus } from \"./TransactionStatus\";\n\nexport const claimStake = async (\n stakingMaster: Contract,\n stakeAddress: string,\n setStatus: (value: TransactionStatus) => void\n) => {\n try {\n setStatus(TransactionStatus.Mining);\n const transaction = await stakingMaster.claimRewards(stakeAddress);\n const receipt = await transaction.wait();\n setStatus(\n receipt.status ? TransactionStatus.Success : TransactionStatus.Fail\n );\n } catch (error) {\n console.error(error);\n setStatus(TransactionStatus.Fail);\n }\n};\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { FailMessage } from \"../../components/common\";\nimport { ButtonPrimary } from \"../../components/common/buttons/ButtonPrimary\";\nimport { Modal } from \"../../components/common/modal/Modal\";\nimport { TextRow } from \"../../components/common/text/TextRow\";\nimport { useContracts, usePoolReward } from \"../../hooks\";\nimport { TransactionStatus } from \"../../infrastructure\";\nimport { claimStake } from \"../../infrastructure/claimStake\";\nimport { Stake } from \"../../model/Stake\";\nimport { RewardAmount } from \"./RewardAmount\";\n\ninterface ClaimModalProps {\n isVisible: boolean;\n onClose: () => void;\n stake: Stake;\n}\n\nexport const ClaimStakeModal = ({\n isVisible,\n onClose,\n stake,\n}: ClaimModalProps) => {\n const { stakingMaster } = useContracts();\n const [status, setStatus] = useState(TransactionStatus.New);\n const poolReward = usePoolReward(stake.address);\n\n const isMined = status === TransactionStatus.Success;\n const isMining = status === TransactionStatus.Mining;\n\n return (\n \n \n URUS\n \n }\n />\n\n \n\n claimStake(stakingMaster, stake.address, setStatus)}\n >\n {isMined ? \"Done!\" : isMining ? \"Claiming...\" : \"Claim\"}\n \n {status === TransactionStatus.Fail && }\n \n );\n};\n\nconst ClaimButton = styled(ButtonPrimary)`\n margin-top: 41px;\n`;\n","import { utils } from \"ethers\";\nimport React, { useRef, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { SettingsIcon } from \"../../components\";\nimport { ButtonTertiary } from \"../../components/common/buttons/ButtonTertiary\";\nimport { Colors } from \"../../constants\";\nimport { useOutsideClick } from \"../../hooks/useOutsideClick\";\nimport { useStakeState } from \"../../hooks/useStakeState\";\nimport { useToggler } from \"../../hooks/useToggler\";\nimport { CancelStakeModal } from \"./CancelStakeModal\";\nimport { isStakeReady, remainingTime, toMilliseconds } from \"./helpers\";\nimport { AmountOfRewards } from \"./AmountOfRewards\";\nimport { RewardAmount } from \"./RewardAmount\";\nimport { ClaimStakeModal } from \"./ClaimStakeModal\";\n\ninterface StakingTableRowProps {\n address: string;\n}\n\nexport const StakingTableRow = ({ address }: StakingTableRowProps) => {\n const { visible, toggle } = useToggler();\n const ref = useRef(null);\n useOutsideClick(ref, () => toggle(false));\n const data = useStakeState(address);\n const [cancelVisible, setCancelVisible] = useState(false);\n const [claimModalVisible, setClaimModalVisible] = useState(false);\n\n return (\n \n \n {data\n ? new Date(toMilliseconds(data.stakeStartTime)).toLocaleDateString()\n : undefined}\n \n \n {data ? utils.formatEther(data.rawInvestedAmount) : undefined}\n URUS\n \n \n {data ? : undefined} URUS\n \n \n {data ? : undefined} URUS\n \n \n \n {data ? remainingTime(data.stakeEndTime) : undefined}\n \n \n \n \n setClaimModalVisible(true)}\n >\n Claim\n \n \n toggle()}>\n \n \n {visible && (\n \n setCancelVisible(true)}>\n Cancel stake\n \n \n )}\n \n \n {cancelVisible && data && !isStakeReady(data.stakeEndTime) && (\n setCancelVisible(false)}\n stake={data}\n />\n )}\n {data && (\n setClaimModalVisible(false)}\n stake={data}\n />\n )}\n \n \n );\n};\n\nconst Tr = styled.tr`\n border-radius: 8px;\n\n &:first-child td:first-child {\n border-top-left-radius: 8px;\n }\n\n &:first-child td:last-child {\n border-top-right-radius: 8px;\n }\n\n &:last-child td:first-child {\n border-bottom-left-radius: 8px;\n }\n\n &:last-child td:last-child {\n border-bottom-right-radius: 8px;\n }\n\n &:first-child td {\n padding-top: 24px;\n border-top: 1px solid ${Colors.BorderPrimary};\n }\n\n &:last-child td {\n padding-bottom: 24px;\n border-bottom: 1px solid ${Colors.BorderPrimary};\n }\n`;\n\nconst Td = styled.td`\n font-size: 12px;\n line-height: 20px;\n color: ${Colors.White};\n padding-top: 12px;\n padding-bottom: 12px;\n padding-left: 16px;\n padding-right: 16px;\n background: ${Colors.BackgroundSecondary};\n text-align: center;\n\n &:first-child {\n text-align: left;\n border-left: 1px solid ${Colors.BorderPrimary};\n }\n\n &:last-child {\n border-right: 1px solid ${Colors.BorderPrimary};\n }\n\n span {\n margin-left: 6px;\n color: #75819c;\n font-size: 12px;\n line-height: 20px;\n }\n\n b {\n font-weight: 900;\n }\n`;\n\ninterface RemainingTimeProps {\n isReady: boolean;\n}\n\nconst RemainingTime = styled.p`\n font-size: 12px;\n line-height: 14px;\n text-align: center;\n color: ${({ isReady }) => (isReady ? Colors.Success : Colors.Danger)};\n`;\n\nconst ButtonsRow = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst ClaimButton = styled(ButtonTertiary)`\n padding: 8px 14px;\n`;\n\nconst Settings = styled.div`\n position: relative;\n margin-left: 24px;\n`;\n\nconst SettingsButton = styled.button`\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 16px;\n height: 16px;\n padding: 0;\n background: none;\n border: none;\n`;\n\nconst SettingsList = styled.div`\n position: absolute;\n left: 8px;\n bottom: 0;\n transform: translate(-100%, 100%);\n padding: 8px 16px;\n background: #070e1d;\n border: 1px solid ${Colors.BorderPrimary};\n border-radius: 8px;\n`;\n\nconst SettingsOption = styled.button`\n padding: 8px 0;\n font-size: 12px;\n line-height: 14px;\n text-align: center;\n color: ${Colors.Danger};\n background: none;\n border: none;\n white-space: nowrap;\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport triangleIcon from \"../../assets/icons/triangle.svg\";\nimport { useUsersStakes } from \"../../hooks/useUsersStakes\";\nimport { StakingTableRow } from \"./StakingTableRow\";\n\nexport const StakingTable = () => {\n const stakes = useUsersStakes();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {stakes?.map((address) => (\n \n ))}\n \n
\n Start date\n \n Amount of stake\n \n Amount of Rewards\n \n Claimable Rewards\n \n Remaining time\n \n
\n );\n};\n\nconst Table = styled.table`\n width: 100%;\n border-collapse: separate;\n`;\n\nconst Th = styled.th`\n padding: 0 16px 8px;\n\n &:first-child {\n text-align: left;\n }\n`;\n\nconst SortButton = styled.button`\n position: relative;\n padding: 0 15px 0 0;\n font-size: 10px;\n line-height: 20px;\n color: #737f99;\n background: none;\n border: none;\n\n &::after {\n content: \"\";\n position: absolute;\n top: 6px;\n right: 0;\n width: 10px;\n height: 8px;\n background: url(${triangleIcon}) center no-repeat;\n background-size: contain;\n }\n`;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { ButtonPrimary } from \"../../components/common/buttons/ButtonPrimary\";\nimport { PageSubtitle } from \"../../components/common/text/PageSubtitle\";\nimport { PageTitle } from \"../../components/common/text/PageTitle\";\nimport { StakeModal } from \"./StakeModal\";\nimport { Modal } from \"../../components/common/modal/Modal\";\nimport { StakingTable } from \"./StakingTable\";\n\nexport function Staking() {\n const [isStakingModal, setStakingModal] = useState(false);\n return (\n <>\n \n \n
\n Aurox Staking\n List of stakes below\n
\n setStakingModal(true)}>Stake\n
\n \n
\n setStakingModal(false)}\n >\n setStakingModal(false)} />\n \n \n );\n}\n\nconst StakingBody = styled.div`\n align-self: flex-start;\n width: 100%;\n margin-left: 30px;\n`;\n\nconst StakeButton = styled(ButtonPrimary)`\n padding: 10px 36px;\n`;\n\nconst Row = styled.div`\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n margin-bottom: 24px;\n`;\n","import React from \"react\";\nimport { Route, Switch } from \"react-router-dom\";\nimport { Page } from \"../../components\";\nimport { HomeWidgets } from \"../../components/page\";\nimport { LiquidityMining } from \"../LiquidityMining\";\nimport { Staking } from \"../Staking\";\n\nexport function HomePage() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Switch, Route, Redirect } from \"react-router-dom\";\nimport { HomePage } from \"./pages/HomePage/HomePage\";\n\nexport function App() {\n return (\n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport { App } from \"./App\";\nimport { Providers } from \"./providers\";\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\")\n);\n"],"sourceRoot":""}