{"version":3,"sources":["../../bzx-common/src/domain/fulcrum/PositionEventsGroup.ts","../../bzx-common/src/domain/fulcrum/PositionHistoryData.ts","../../bzx-common/src/config/loansWithOldOpenPriceFormat.js","../../bzx-common/src/lib/tradeUtils.ts","../../../../node_modules/regenerator-runtime/runtime.js","../../src/index.ts","../../bzx-common/src/services/AirdropService.ts","../../bzx-common/src/lib/apis/oracleApi.ts","../../bzx-common/src/lib/apis/bzxApi.ts","../../bzx-common/src/services/Web3ConnectionFactory.ts","../../bzx-common/src/lib/mobx/AsyncData.ts","../../bzx-common/src/config/chains/chainCommon.ts","../../bzx-common/src/config/chains/arbitrumConfig.ts","../../bzx-common/src/config/chains/bscConfig.ts","../../bzx-common/src/config/chains/optimismConfig.ts","../../bzx-common/src/config/chains/polygonConfig.ts","../../bzx-common/src/config/chains/index.ts","../../bzx-common/src/lib/web3ReactUtils.ts","../../bzx-common/src/config/appConfig.ts","../../bzx-common/src/config/gasConfig.ts","../../bzx-common/src/config/links.ts","../../bzx-common/src/lib/dateUtils.ts","../../bzx-common/src/assets/svg-sprite sync /.svg$","../../bzx-common/src/assets/svg-sprite/About-OOKI.svg","../../bzx-common/src/assets/svg-sprite/Add-OOKI.svg","../../bzx-common/src/assets/svg-sprite/Arrow-drop-down.svg","../../bzx-common/src/assets/svg-sprite/Arrow.svg","../../bzx-common/src/assets/svg-sprite/Blog.svg","../../bzx-common/src/assets/svg-sprite/Borrow.svg","../../bzx-common/src/assets/svg-sprite/Burger-menu.svg","../../bzx-common/src/assets/svg-sprite/DAO.svg","../../bzx-common/src/assets/svg-sprite/Dark.svg","../../bzx-common/src/assets/svg-sprite/Dashboard.svg","../../bzx-common/src/assets/svg-sprite/Down.svg","../../bzx-common/src/assets/svg-sprite/Drawer-close.svg","../../bzx-common/src/assets/svg-sprite/Drawer-open.svg","../../bzx-common/src/assets/svg-sprite/FAQ.svg","../../bzx-common/src/assets/svg-sprite/Facebook.svg","../../bzx-common/src/assets/svg-sprite/Favourite.svg","../../bzx-common/src/assets/svg-sprite/Filled.svg","../../bzx-common/src/assets/svg-sprite/Friends.svg","../../bzx-common/src/assets/svg-sprite/GreenFaceProfit.svg","../../bzx-common/src/assets/svg-sprite/HelpChat.svg","../../bzx-common/src/assets/svg-sprite/Hide.svg","../../bzx-common/src/assets/svg-sprite/History.svg","../../bzx-common/src/assets/svg-sprite/Inactive.svg","../../bzx-common/src/assets/svg-sprite/Instagram.svg","../../bzx-common/src/assets/svg-sprite/Learn.svg","../../bzx-common/src/assets/svg-sprite/Left.svg","../../bzx-common/src/assets/svg-sprite/Lend.svg","../../bzx-common/src/assets/svg-sprite/Light.svg","../../bzx-common/src/assets/svg-sprite/Link.svg","../../bzx-common/src/assets/svg-sprite/List.svg","../../bzx-common/src/assets/svg-sprite/Logo.svg","../../bzx-common/src/assets/svg-sprite/NFT.svg","../../bzx-common/src/assets/svg-sprite/Normal.svg","../../bzx-common/src/assets/svg-sprite/Opened.svg","../../bzx-common/src/assets/svg-sprite/Options.svg","../../bzx-common/src/assets/svg-sprite/Outline.svg","../../bzx-common/src/assets/svg-sprite/Pencil.svg","../../bzx-common/src/assets/svg-sprite/Photo.svg","../../bzx-common/src/assets/svg-sprite/Refresh.svg","../../bzx-common/src/assets/svg-sprite/Right.svg","../../bzx-common/src/assets/svg-sprite/Sandclock.svg","../../bzx-common/src/assets/svg-sprite/Select.svg","../../bzx-common/src/assets/svg-sprite/Selected.svg","../../bzx-common/src/assets/svg-sprite/Settings.svg","../../bzx-common/src/assets/svg-sprite/Share.svg","../../bzx-common/src/assets/svg-sprite/Shop.svg","../../bzx-common/src/assets/svg-sprite/Show.svg","../../bzx-common/src/assets/svg-sprite/Stake-OOKI.svg","../../bzx-common/src/assets/svg-sprite/Stake.svg","../../bzx-common/src/assets/svg-sprite/Stats.svg","../../bzx-common/src/assets/svg-sprite/Swap.svg","../../bzx-common/src/assets/svg-sprite/Time.svg","../../bzx-common/src/assets/svg-sprite/Trade.svg","../../bzx-common/src/assets/svg-sprite/Tutorial.svg","../../bzx-common/src/assets/svg-sprite/Up.svg","../../bzx-common/src/assets/svg-sprite/User.svg","../../bzx-common/src/assets/svg-sprite/Walkthrough.svg","../../bzx-common/src/assets/svg-sprite/Wallet.svg","../../bzx-common/src/assets/svg-sprite/Youtube.svg","../../bzx-common/src/assets/svg-sprite/announcement.svg","../../bzx-common/src/assets/svg-sprite/arbitrum-logo.svg","../../bzx-common/src/assets/svg-sprite/arrow-down.svg","../../bzx-common/src/assets/svg-sprite/arrow-right.svg","../../bzx-common/src/assets/svg-sprite/arrow-up.svg","../../bzx-common/src/assets/svg-sprite/binance-logo.svg","../../bzx-common/src/assets/svg-sprite/cOOKI.svg","../../bzx-common/src/assets/svg-sprite/caret-down.svg","../../bzx-common/src/assets/svg-sprite/caret-left.svg","../../bzx-common/src/assets/svg-sprite/caret-right.svg","../../bzx-common/src/assets/svg-sprite/chain-optimism.svg","../../bzx-common/src/assets/svg-sprite/check-circle.svg","../../bzx-common/src/assets/svg-sprite/close.svg","../../bzx-common/src/assets/svg-sprite/coinbase.svg","../../bzx-common/src/assets/svg-sprite/coincarp.svg","../../bzx-common/src/assets/svg-sprite/coingecko.svg","../../bzx-common/src/assets/svg-sprite/coinmarketcap.svg","../../bzx-common/src/assets/svg-sprite/coinpaprika.svg","../../bzx-common/src/assets/svg-sprite/copy.svg","../../bzx-common/src/assets/svg-sprite/cross.svg","../../bzx-common/src/assets/svg-sprite/crypto-com.svg","../../bzx-common/src/assets/svg-sprite/discord.svg","../../bzx-common/src/assets/svg-sprite/ethereum-logo.svg","../../bzx-common/src/assets/svg-sprite/filter.svg","../../bzx-common/src/shared-components/ExternalLink/ExternalLink.tsx","../../bzx-common/src/assets/svg-sprite/gateio.svg","../../bzx-common/src/assets/svg-sprite/github.svg","../../bzx-common/src/assets/svg-sprite/ic_token_aave.svg","../../bzx-common/src/assets/svg-sprite/ic_token_auto.svg","../../bzx-common/src/assets/svg-sprite/ic_token_bnb.svg","../../bzx-common/src/assets/svg-sprite/ic_token_bpt.svg","../../bzx-common/src/assets/svg-sprite/ic_token_btc.svg","../../bzx-common/src/assets/svg-sprite/ic_token_busd.svg","../../bzx-common/src/assets/svg-sprite/ic_token_bzrx.svg","../../bzx-common/src/assets/svg-sprite/ic_token_bzrx_bnb.svg","../../bzx-common/src/domain/borrow/BorrowRequest.ts","../../bzx-common/src/assets/svg-sprite/ic_token_cake.svg","../../bzx-common/src/assets/svg-sprite/ic_token_chi.svg","../../bzx-common/src/assets/svg-sprite/ic_token_comp.svg","../../bzx-common/src/assets/svg-sprite/ic_token_crv.svg","../../bzx-common/src/assets/svg-sprite/ic_token_dai.svg","../../bzx-common/src/assets/svg-sprite/ic_token_doge.svg","../../bzx-common/src/assets/svg-sprite/ic_token_eth.svg","../../bzx-common/src/assets/svg-sprite/ic_token_iaave.svg","../../bzx-common/src/assets/svg-sprite/ic_token_iauto.svg","../../bzx-common/src/assets/svg-sprite/ic_token_ibnb.svg","../../bzx-common/src/assets/images/fulcrum/icon_pagination.svg","../../bzx-common/src/assets/svg-sprite/ic_token_ibtc.svg","../../bzx-common/src/assets/svg-sprite/ic_token_ibusd.svg","../../bzx-common/src/assets/svg-sprite/ic_token_ibzrx.svg","../../bzx-common/src/assets/svg-sprite/ic_token_icake.svg","../../bzx-common/src/assets/svg-sprite/ic_token_idoge.svg","../../bzx-common/src/assets/svg-sprite/ic_token_ieth.svg","../../bzx-common/src/assets/svg-sprite/ic_token_ilink.svg","../../bzx-common/src/assets/svg-sprite/ic_token_imatic.svg","../../bzx-common/src/assets/svg-sprite/ic_token_ipolygon-matic.svg","../../bzx-common/src/assets/svg-sprite/ic_token_iusdt.svg","../../bzx-common/src/assets/svg-sprite/ic_token_knc.svg","../../bzx-common/src/assets/svg-sprite/ic_token_kncl.svg","../../bzx-common/src/assets/svg-sprite/ic_token_link.svg","../../bzx-common/src/assets/svg-sprite/ic_token_lrc.svg","../../bzx-common/src/assets/svg-sprite/ic_token_matic.svg","../../bzx-common/src/assets/svg-sprite/ic_token_mkr.svg","../../bzx-common/src/assets/svg-sprite/ic_token_ooki.svg","../../bzx-common/src/assets/svg-sprite/ic_token_quick.svg","../../bzx-common/src/assets/svg-sprite/ic_token_slp.svg","../../bzx-common/src/assets/svg-sprite/ic_token_susd.svg","../../bzx-common/src/assets/svg-sprite/ic_token_sushi.svg","../../bzx-common/src/assets/svg-sprite/ic_token_uni.svg","../../bzx-common/src/assets/svg-sprite/ic_token_usdc.svg","../../bzx-common/src/assets/svg-sprite/ic_token_usdt.svg","../../bzx-common/src/assets/svg-sprite/ic_token_vbzrx.svg","../../bzx-common/src/assets/svg-sprite/ic_token_wbtc.svg","../../bzx-common/src/assets/svg-sprite/ic_token_weth.svg","../../bzx-common/src/assets/svg-sprite/ic_token_yfi.svg","../../bzx-common/src/assets/svg-sprite/info.svg","../../bzx-common/src/assets/svg-sprite/kovan-logo.svg","../../bzx-common/src/assets/svg-sprite/kucoin.svg","../../bzx-common/src/assets/svg-sprite/lock.svg","../../bzx-common/src/assets/svg-sprite/medium.svg","../../bzx-common/src/assets/svg-sprite/menu-close.svg","../../bzx-common/src/assets/svg-sprite/menu-open.svg","../../bzx-common/src/assets/svg-sprite/mexcglobal.svg","../../bzx-common/src/assets/svg-sprite/ooki-black-white.svg","../../bzx-common/src/assets/svg-sprite/our-tokens.svg","../../bzx-common/src/assets/svg-sprite/polygon-logo.svg","../../bzx-common/src/assets/svg-sprite/save.svg","../../bzx-common/src/assets/svg-sprite/search.svg","../../bzx-common/src/assets/svg-sprite/sushiswap.svg","../../bzx-common/src/assets/svg-sprite/switch.svg","../../bzx-common/src/assets/svg-sprite/telegram.svg","../../bzx-common/src/assets/svg-sprite/token-ape.svg","../../bzx-common/src/assets/svg-sprite/token-bpt.svg","../../bzx-common/src/assets/svg-sprite/token-bzrx.svg","../../bzx-common/src/assets/svg-sprite/token-cooki.svg","../../bzx-common/src/assets/svg-sprite/token-crv.svg","../../bzx-common/src/assets/svg-sprite/token-frax.svg","../../bzx-common/src/assets/svg-sprite/token-ibzrx.svg","../../bzx-common/src/assets/svg-sprite/token-iooki.svg","../../bzx-common/src/assets/svg-sprite/token-mim.svg","../../bzx-common/src/assets/svg-sprite/token-ooki.svg","../../bzx-common/src/assets/svg-sprite/token-p125.svg","../../bzx-common/src/assets/svg-sprite/token-slp-ooki.svg","../../bzx-common/src/assets/svg-sprite/token-slp.svg","../../bzx-common/src/assets/svg-sprite/token-spell.svg","../../bzx-common/src/assets/svg-sprite/token-stmatic.svg","../../bzx-common/src/assets/svg-sprite/token-sushi.svg","../../bzx-common/src/assets/svg-sprite/token-vbzrx.svg","../../bzx-common/src/assets/svg-sprite/token-wsteth.svg","../../bzx-common/src/assets/svg-sprite/tools.svg","../../bzx-common/src/assets/svg-sprite/twitter.svg","../../bzx-common/src/assets/svg-sprite/uniswap.svg","../../bzx-common/src/assets/svg-sprite/wallet-balance.svg","../../bzx-common/src/assets/svg-sprite/wallet-connect.svg","../../bzx-common/src/assets/svg-sprite/wazirx.svg","../../bzx-common/src/shared-components/CircleLoader/CircleLoader.tsx","../../bzx-common/src/shared-components/AssetDropdown/AssetDropdownBalance.tsx","../../bzx-common/src/shared-components/AssetDropdown/AssetDropdownSimple.tsx","../../bzx-common/src/shared-components/AssetDropdown/AssetDropdown.tsx","../../bzx-common/src/shared-components/ExpectedResult/ExpectedResult.tsx","../../bzx-common/src/domain/lendTypes.ts","../../bzx-common/src/lib/web3/approvalUtils.ts","../../bzx-common/src/config/chains/ethereumConfig.ts","../../bzx-common/src/lib/swapRateUtils.ts","../../bzx-common/src/domain/borrow/RepayLoanRequest.ts","../../bzx-common/src/domain/ManageCollateralRequest.ts","../../bzx-common/src/domain/txTypes.ts","../../bzx-common/src/domain/fulcrum/ReserveDetails.ts","../../bzx-common/src/lib/protocolStatsUtils.ts","../../bzx-common/src/domain/events/providerEvents.ts","../../bzx-common/src/ui-framework/components/Loader/Loader.tsx","../../bzx-common/src/services/MigrateService.ts","../../bzx-common/src/lib/subgraphHistoryUtils.ts","../../bzx-common/src/contracts/typescript-wrappers/BZRXVestingToken.ts","../../bzx-common/src/contracts/typescript-wrappers/bzxContract.ts","../../bzx-common/src/contracts/typescript-wrappers/erc20.ts","../../bzx-common/src/contracts/typescript-wrappers/FixedSwapTokenConverter.ts","../../bzx-common/src/contracts/typescript-wrappers/helper.ts","../../bzx-common/src/contracts/typescript-wrappers/iTokenContract.ts","../../bzx-common/src/contracts/typescript-wrappers/MasterChefSushi.ts","../../bzx-common/src/contracts/typescript-wrappers/MerkleDistributor.ts","../../bzx-common/src/contracts/typescript-wrappers/oracle.ts","../../bzx-common/src/contracts/typescript-wrappers/staking.ts","../../bzx-common/src/contracts/typescript-wrappers/ThreePool.ts","../../bzx-common/src/contracts/typescript-wrappers/voteDelegator.ts","../../bzx-common/src/contracts/typescript-wrappers/WrappedNative.ts","../../bzx-common/src/contracts/ContractsSource.ts","../../bzx-common/src/lib/web3ProviderUtils.ts","../../bzx-common/src/lib/numberUtils.ts","../../bzx-common/src/shared-components/Placeholder/Placeholder.tsx","../../bzx-common/src/domain/events/blockchain/StakeEvent.ts","../../bzx-common/src/lib/dexSelector/sushi.ts","../../bzx-common/src/lib/dexSelector/univ3.ts","../../bzx-common/src/lib/dexSelector/dexSelector.ts","../../bzx-common/src/lib/swapPayloadUtils.ts","../../bzx-common/src/lib/lendUtils.ts","../../bzx-common/src/domain/staking/stakingTypes.ts","../../bzx-common/src/lib/svgSpriteUtils.ts","../../bzx-common/src/lib/providerUtils.ts","../../bzx-common/src/shared-components/ExternalLink/index.ts","../../bzx-common/src/lib/assetUtils/Asset.ts","../../bzx-common/src/shared-components/WhyNoSir/WhyNoSir.tsx","../../bzx-common/src/shared-components/PriceSwitch/PriceSwitch.tsx","../../bzx-common/src/domain/events/blockchain/EarnRewardEventNew.ts","../../bzx-common/src/domain/events/blockchain/PayTradingFeeEvent.ts","../../bzx-common/src/domain/events/blockchain/UnstakeEvent.ts","../../bzx-common/src/shared-components/TokenLoader/TokenLoader.tsx","../../bzx-common/src/config/routeConfig.ts","../../bzx-common/src/lib/collectionUtils.ts","../../bzx-common/src/stores/TradeStore/OpenPosition.ts","../../bzx-common/src/lib/regexUtils.ts","../../bzx-common/src/lib/assetUtils/assetUtils.ts","services/FulcrumProvider.ts","../../bzx-common/src/lib/assetUtils/assetsCommon.ts","../../bzx-common/src/shared-components/ThemeSwitch/ThemeSwitch.tsx","../../web3-react-6/packages/types/dist/index.js","../../bzx-common/src/lib/LocalStorage.ts","../../bzx-common/src/lib/apis/tallyApi.ts","../../bzx-common/src/services/DaoService.ts","../../bzx-common/src/services/LendService.ts","../../bzx-common/src/services/LoanService.ts","../../bzx-common/src/services/sentryService.ts","services/debugService.ts","services/services.ts","../../bzx-common/src/shared-components/Preloader/Preloader.tsx","../../bzx-common/src/ui-framework/viewModels/DialogVM.ts","../../bzx-common/src/lib/errorUtils.ts","../../bzx-common/src/lib/dexSelector/types.ts","../../bzx-common/src/domain/events/blockchain/BorrowEvent.ts","../../bzx-common/src/domain/events/blockchain/BurnEvent.ts","../../bzx-common/src/domain/events/blockchain/CloseWithDepositEvent.ts","../../bzx-common/src/domain/events/blockchain/CloseWithSwapEvent.ts","../../bzx-common/src/domain/events/blockchain/DepositCollateralEvent.ts","../../bzx-common/src/domain/events/blockchain/LiquidationEvent.ts","../../bzx-common/src/domain/events/blockchain/MintEvent.ts","../../bzx-common/src/domain/events/blockchain/RolloverEvent.ts","../../bzx-common/src/domain/events/blockchain/TradeEvent.ts","../../bzx-common/src/domain/events/blockchain/WithdrawCollateralEvent.ts","../../bzx-common/src/assets/images/providers/logo_short___binance.svg","../../bzx-common/src/assets/images/providers/logo_short___coinbase.svg","../../bzx-common/src/assets/images/providers/logo_short___genericwallet.svg","../../bzx-common/src/assets/images/providers/logo_short___metamask.svg","../../bzx-common/src/assets/images/providers/logo_short___trustwallet.svg","../../bzx-common/src/assets/images/providers/logo_short___walletconnect.svg","../../bzx-common/src/domain/ProviderTypeDictionary.ts","../../bzx-common/src/domain/trade.types.ts","../../bzx-common/src/lib/withVM.tsx","../../bzx-common/src/shared-components/ManageCollateralForm/ManageCollateralForm.tsx","../../bzx-common/src/shared-components/ChartLoader/chart-placeholder.svg","../../bzx-common/src/shared-components/ChartLoader/chart-placeholder-area.svg","../../bzx-common/src/shared-components/ChartLoader/ChartLoader.tsx","../../web3-react-6/packages/bsc-connector/dist/index.js","../../bzx-common/src/lib/iTokensUtils.ts","../../bzx-common/src/lib/loanUtils.ts","../../bzx-common/src/lib/reactHooks.ts","../../bzx-common/src/assets/images/ooki-worker.svg","../../bzx-common/src/shared-components/AppError/AppError.tsx","../../bzx-common/src/shared-components/InfoBlock/InfoBlock.tsx","../../bzx-common/src/shared-components/FeatureNetworkSwitch/FeatureNetworkSwitch.tsx","../../bzx-common/src/shared-components/NetworkError/NetworkError.tsx","../../bzx-common/src/shared-components/PreloaderContent/PreloaderContent.tsx","../../bzx-common/src/shared-components/TransactionTracker/TransactionTracker.tsx","../../src/normalizers.ts","../../src/manager.ts","../../src/provider.tsx","../../bzx-common/src/shared-components/Web3ReactExporter.tsx","components/Borrow/BorrowForm/BorrowForm.tsx","components/Borrow/BorrowAsset/borrow-nerd.svg","components/Borrow/BorrowAsset/borrow-ooki.svg","../../bzx-common/src/shared-components/TokenTip/TokenTip.tsx","components/Borrow/BorrowAsset/BorrowAssetItem.tsx","components/Borrow/BorrowAsset/BorrowAsset.tsx","components/Borrow/BorrowAsset/BorrowAssetVM.ts","components/Borrow/BorrowAsset/index.ts","../../bzx-common/src/shared-components/InputAmount/InputAmount.tsx","components/Borrow/BorrowMoreForm/BorrowMoreForm.tsx","components/Borrow/RepayLoanForm/RepayLoanForm.tsx","components/Borrow/UserLoans/Loan.tsx","../public/gif/GreenFace.gif","../public/gif/RedFace.gif","../public/gif/YellowFace.gif","components/Borrow/UserLoans/UserLoans.tsx","components/Borrow/Borrow.tsx","components/Borrow/BorrowVM.ts","components/Borrow/index.ts","../../bzx-common/src/shared-components/ButtonChainSwitch/ButtonChainSwitch.tsx","components/Compensation/CompensationClaim.tsx","components/Compensation/BZRXCommonCompensation/ApprovalCheck.tsx","components/Compensation/BZRXCommonCompensation/BZRXCommonCompensation.tsx","components/Compensation/BZRXCompensation.tsx","components/Compensation/BZRXCompensationBSC/BZRXCompensationBSCInfo.tsx","components/Compensation/BZRXCompensationBSC/BZRXCompensationBSCStep1.tsx","components/Compensation/BZRXCompensationBSC/BZRXCompensationBSCStep2.tsx","components/Compensation/BZRXCompensationBSC/BZRXCompensationBSC.tsx","components/Compensation/CompensationDetails.tsx","components/Compensation/P125Compensation.tsx","components/Compensation/Compensation.tsx","components/Dashboard/icons/borrow.svg","components/Compensation/CompensationVM.ts","components/Compensation/index.ts","components/Dashboard/icons/lend.svg","components/Dashboard/icons/trade.svg","components/Dashboard/DashboardFooter.tsx","components/Dashboard/icons/learn.svg","components/Dashboard/icons/lobby.svg","components/Dashboard/icons/nfts.svg","components/Dashboard/icons/our-tokens.svg","components/Dashboard/icons/shop.svg","components/Dashboard/icons/socials.svg","components/Dashboard/DashboardNav.tsx","components/Dashboard/Learn/OokiversityPost.tsx","components/Dashboard/Learn/OokiversityPosts.tsx","components/Dashboard/Learn/ookiversity-banner.jpeg","components/Dashboard/Learn/Learn.tsx","components/Dashboard/Lobby/AppUpdates.tsx","components/Dashboard/Lobby/BestAPR.tsx","components/Dashboard/Lobby/BlogPosts/BlogPostPlaceholder.tsx","components/Dashboard/Lobby/BlogPosts/BlogPosts.tsx","components/Dashboard/Lobby/LobbyDao.tsx","../public/ooki-web-preview.png","components/Dashboard/Lobby/Twitter.tsx","components/Dashboard/Lobby/Lobby.tsx","components/Dashboard/Nfts/NftCollection/NftCollection.tsx","components/Dashboard/OurToken/coin-gecco.svg","components/Dashboard/Nfts/nfts-banner.jpeg","components/Dashboard/Nfts/Nfts.tsx","components/Dashboard/OurToken/govern.svg","components/Dashboard/OurToken/ooki-flowchart.svg","components/Dashboard/OurToken/stake.svg","components/Dashboard/OurToken/OurToken.tsx","components/Dashboard/Shop/shop-banner.jpeg","components/Dashboard/Shop/Shop.tsx","components/Dashboard/Socials/Socials.tsx","components/Dashboard/Dashboard.tsx","components/Dashboard/DashboardVM.ts","components/Dashboard/index.ts","components/Debug/SpendingApprovals.tsx","components/Debug/Debug.tsx","../../bzx-common/src/assets/images/ooki-logo.svg","components/Debug/DebugVM.ts","components/Debug/index.ts","components/Header/headerConfig.ts","components/Header/HeaderMoreDropdown.tsx","components/Header/HeaderMenu.tsx","components/Header/MainHelp/MainHelp.tsx","../../bzx-common/src/shared-components/Picture/Picture.tsx","components/Header/OnChainIndicator/ChainInfo/ChainInfo.tsx","components/Header/OnChainIndicator/ChainInfo/ChainInfoVM.ts","components/Header/OnChainIndicator/ChainInfo/index.ts","components/Header/OnChainIndicator/ProviderInfo/ProviderInfo.tsx","components/Header/OnChainIndicator/ProviderInfo/ProviderInfoVM.ts","components/Header/OnChainIndicator/ProviderInfo/index.ts","components/Header/OnChainIndicator/OnChainIndicator.tsx","components/Header/OokiDetails/OokiDetails.tsx","../../bzx-common/src/lib/apis/coingeckoApi.ts","components/Header/OokiDetails/OokiDetailsVM.ts","components/Header/OokiDetails/index.ts","components/Header/Header.tsx","components/Header/HeaderVM.ts","components/Header/index.ts","components/Lend/LendForm/WrapNativeForm.tsx","components/Lend/LendForm/LendForm.tsx","components/Lend/LendList/lend-bean.svg","components/Lend/LendList/lend-ooki.svg","components/Lend/LendList/LendListItem.tsx","components/Lend/LendList/LendList.tsx","components/Lend/UserYields/UserYieldsItem.tsx","components/Lend/UserYields/UserYields.tsx","components/Lend/Lend.tsx","components/Lend/LendForm/WrapNativeFormVM.ts","components/Lend/LendForm/LendFormVM.ts","components/Lend/LendVM.ts","components/Lend/index.ts","components/MigrateTokens/MigrationItem.tsx","components/MigrateTokens/OokiBalance.tsx","components/MigrateTokens/OokiMigrationInfo.tsx","components/MigrateTokens/MigrateTokens.tsx","components/MigrateTokens/MigrateTokensVM.ts","components/MigrateTokens/index.ts","components/Staking/exit-old-staking.png","components/Staking/AboutStaking.tsx","../../bzx-common/src/shared-components/AssetBalance/AssetBalance.tsx","components/Staking/Rewards/StakingRewards.tsx","components/Staking/Rewards/SushiRewards.tsx","components/Staking/Rewards/VestedBZRX.tsx","components/Staking/Rewards/VestingRewards.tsx","components/Staking/Rewards/Rewards.tsx","components/Staking/Dao/dao-govern.svg","components/Staking/Rewards/RewardsVM.ts","components/Staking/Rewards/index.ts","components/Staking/Dao/OnChainProposals.tsx","components/Staking/Dao/Proposals.tsx","components/Staking/Dao/Dao.tsx","components/Staking/Dao/DaoVM.ts","components/Staking/Dao/index.ts","components/Staking/StakingForm/AddToBalance/SpendingAllowance.tsx","components/Staking/StakingForm/AddToBalance/InputStake.tsx","components/Staking/StakingForm/AddToBalance/Stake.tsx","components/Staking/StakingForm/AddToBalance/Unstake.tsx","components/Staking/StakingForm/AddToBalance/AddToBalance.tsx","components/Staking/StakingForm/UserBalances/Balances.tsx","components/Staking/StakingForm/UserBalances/UserBalances.tsx","components/Staking/StakingForm/StakingForm.tsx","components/Staking/StakingForm/StakingFormVM.ts","components/Staking/StakingForm/index.ts","components/Staking/WalletUpdate/WalletUpdate.tsx","components/Staking/staking-coins-left.svg","components/Staking/staking-coins-right.svg","components/Staking/Staking.tsx","components/Staking/StakingVM.ts","components/Staking/index.ts","../../bzx-common/src/shared-components/EventInfo/EventInfo.tsx","components/Stats/Activity/Activity.tsx","components/Stats/Reserve/ReserveDesktopItem.tsx","components/Stats/Reserve/ReserveDesktop.tsx","components/Stats/Reserve/ReserveMobileItem.tsx","components/Stats/Reserve/Tvl.tsx","components/Stats/Reserve/Reserve.tsx","components/Stats/Treasury/treasury.svg","components/Stats/Treasury/Treasury.tsx","components/Stats/Reserve/StatsChart/StatsChart.tsx","components/Stats/Stats.tsx","components/Stats/Reserve/StatsChart/StatsChartConfig.ts","components/Stats/StatsVM.ts","components/Stats/index.ts","components/ToastNotification/ToastNotification.tsx","components/Tools/WrapNative.tsx","components/Tools/Tools.tsx","components/Tools/ToolsVM.ts","components/Tools/index.ts","components/UserProfile/AvatarSelector.tsx","components/UserProfile/UserProfile.tsx","components/UserProfile/UserProfileVM.ts","components/UserProfile/index.ts","components/App.tsx","../../bzx-common/src/lib/geoLocation.ts","../../bzx-common/src/stores/AirdropStore.ts","../../bzx-common/src/lib/apis/ghostApi.ts","../../bzx-common/src/stores/BlogStore.ts","../../bzx-common/src/stores/BorrowStore/Loan.ts","../../bzx-common/src/stores/BorrowStore/BorrowStore.ts","../../bzx-common/src/stores/LendStore/LendStore.ts","../../bzx-common/src/stores/MigrationStore.ts","../../bzx-common/src/stores/SettingsStore/SettingsStore.ts","../../bzx-common/src/stores/SettingsStore/SettingsStorage.ts","../../bzx-common/src/stores/SpendingApprovals.ts","../../bzx-common/src/lib/apis/snapshotApi.ts","../../bzx-common/src/stores/StakingStore/Dao.ts","../../bzx-common/src/stores/StakingStore/Rewards.ts","../../bzx-common/src/stores/StakingStore/SpendingAllowance.ts","../../bzx-common/src/stores/StakingStore/StakingAllowances.ts","../../bzx-common/src/stores/StakingStore/UserBalances.ts","../../bzx-common/src/stores/StakingStore/WalletUpdate.ts","../../bzx-common/src/stores/StakingStore/StakingStore.ts","../../bzx-common/src/stores/StatsStore/StatsStore.ts","../../bzx-common/src/stores/TradeStore/HistoryToken.ts","../../bzx-common/src/stores/TradeStore/NewPositionSetup.ts","../../bzx-common/src/stores/TradeStore/TradeStore.ts","../../bzx-common/src/stores/TransactionStore.ts","../../bzx-common/src/stores/UIStore/MediaQuery.ts","../../bzx-common/src/stores/UIStore/ObservableViewport.ts","../../bzx-common/src/stores/UIStore/UIStore.ts","../../bzx-common/src/stores/UserWallet.ts","../../bzx-common/src/stores/Web3Connection.ts","../../bzx-common/src/stores/RootStore.ts","index.tsx","../../bzx-common/src/ui-framework/components/ButtonBasic/ButtonBasic.js","../../bzx-common/src/ui-framework/components/Button/Button.js","../../bzx-common/src/ui-framework/components/ButtonClose/ButtonClose.tsx","../../bzx-common/src/ui-framework/components/Icon/Icon.js","../../bzx-common/src/ui-framework/components/ButtonClipboard/ButtonClipboard.tsx","../../bzx-common/src/ui-framework/components/ButtonTH/ButtonTH.tsx","../../bzx-common/src/ui-framework/components/Form/Form.js","../../bzx-common/src/ui-framework/components/InfoTip/InfoTip.tsx","../../bzx-common/src/ui-framework/components/InputBasic/InputBasic.js","../../bzx-common/src/ui-framework/components/Input/Input.js","../../bzx-common/src/ui-framework/components/Modal/Modal.tsx","../../bzx-common/src/ui-framework/components/Slider/Slider.tsx","../../bzx-common/src/ui-framework/components/SliderPercent/SliderPercent.tsx","../../bzx-common/src/ui-framework/components/Switch/Switch.jsx","../../bzx-common/src/ui-framework/hooks/useElementSizeQuery.ts","../../bzx-common/src/lib/hashUtils.ts","../../bzx-common/src/lib/asyncUtils.ts","../../bzx-common/src/lib/stakingUtils.ts"],"names":["PositionEventsGroup","loanId","baseToken","quoteToken","positionType","leverage","events","this","PositionHistoryData","date","action","positionValue","tradePrice","value","profit","txHash","payTradingFeeEvent","earnRewardEvent","getDependenciesStrict","provider","deps","providerUtils","bzxContract","contractsSource","getiBZxContract","getMaxTradeValueToOpenPosition","params","a","depositToken","getDependenciesStrictRead","helperContract","userAddress","chainId","maxTradeValue","BigNumber","marketLiquidity","loanToken","PositionType","LONG","iToken","getITokenContract","precision","assetUtils","getDecimals","address","callAsync","div","oracleApi","getSwapRate","swapPrice","times","getTokenBalanceOfUser","depositTokenBalance","min","getMaxTradeValueToClosePosition","result","loan","loanAssetDecimals","loanAsset","collateralAssetDecimals","collateralAsset","loanData","collateral","principal","getMaxTradeValue","tradeType","TradeType","OPEN_POSITION","Error","request","opts","isLong","collateralToken","itokenContract","decimals","collateralTokenDecimals","loanTokenDecimals","amountInBaseUnits","amount","toFixed","collateralTokenSent","loanTokenSent","getSwapRateNew","collateralToLoanRate","collateralInLoanToken","plus","nextBorrowInterestRate","interestRate","swapRateUtils","getSwapExpectedReturn","srcToken","destToken","srcAmount","loanDataBytes","swappedAmount","exposureValue","getUserLoans","forEach","e","getAssetFromAddress","Asset","UNKNOWN","loanPrecision","collateralPrecision","amountOwned","minus","interestDepositRemaining","lte","dividedBy","dp","ROUND_CEIL","push","accountAddress","amountOwed","collateralAmount","collateralizedPercent","currentMargin","interestOwedPerDay","multipliedBy","hasManagementContract","isInProgress","getLoanCloseAmount","returnToken","returnTokenIsCollateral","inBaseUnits","CLOSE_POSITION","maxAmountInBaseUnits","gt","abs","closeWithSwap","from","gas","appConfig","gasLimitFallback","errorUtils","getErrorStackMessages","console","error","getManageCollateralExcessAmount","borrowedFundsState","bZxContract","tx","withdrawCollateral","MAX_UINT","guessLongShort","chainConfigs","trading","baseQuote","baseTokens","base","quoteTokens","quote","possiblePairs","pairs","filter","pair","length","SHORT","isLoanTokenOnlyInQuoteTokens","includes","baseAsset","quoteAsset","getOpenPrice","loanAssetPrecision","collateralAssetPrecision","openPrice","NaN","startRate","newOpenPrice","loansWithOldOpenPriceFormat","getLoanMarketRate","currentCollateralToPrincipalRate","pow","currentChainId","maintenanceMargin","currentPrice","startMargin","ROUND_HALF_UP","profitCollateralToken","profitLoanToken","profitUSD","collateralAssetAmount","loanAssetAmount","depositValueAsLoanToken","depositValueAsCollateralToken","liquidationPrice","dex","dexes","tradeRequestCollateral","native","wrapped","toNumber","tradeRequestLoan","DEX","UNISWAPV3","swapPayloadUtils","getSwapDataForClosingPosition","eq","estimatedCollateralReceived","estimatedLoanReceived","estimatedReceivedCollateralToken","estimatedReceivedLoanToken","shortsDiff","getHistoryEvents","web3Wrapper","canWrite","account","currentAccount","subgraphHistoryUtils","getTradeHistory","historyEvents","payTradingFeeEvents","earnRewardEvents","reduce","PayTradingFeeEvent","EarnRewardEventNew","groupedEvents","collectionUtils","groupBy","sort","b","blockNumber","Object","keys","eventsById","some","TradeEvent","blockNumberWhenPricePrecisionWasChanged","historyRowsData","loanIds","tradeEvent","entryLeverage","loanAssetDecimalsFirstEvent","collateralAssetDecimalsFirstEvent","isLegacyPrecision","entryPrice","positionEventsGroup","event","timeStamp","timestamp","Date","getBlockTimestampAsync","find","positionSize","borrowedAmount","CloseWithSwapEvent","positionCloseSize","exitPrice","loanCloseAmount","LiquidationEvent","asset","repayAmount","collateralWithdrawAmount","DepositCollateralEvent","depositTokenDecimals","WithdrawCollateralEvent","withdrawTokenDecimals","RolloverEvent","eventsGroup","isHidden","getTradeTokens","isClosingTrade","getTokensInfo","deposit","src","dest","loaned","collateralToPrincipalRate","loanParams","initialMargin","loanUtils","getLoanParams","liquidationPriceBeforeTrade","getPairConfig","chain","baseConfig","pairConfigs","pairSettings","undefined","isStablePair","initialPositionType","disabledPosition","depositTokens","leverageMax","maxLeverage","stablePair","others","leverageInitial","defaultLeverage","selectedMarket","getEstimatedMarginDetails","getHistoryRowsData","getLiquidationPrice","getLoanDetails","getUserMarginTradeLoans","runtime","exports","Op","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","key","defineProperty","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","generator","create","Generator","context","Context","_invoke","state","method","arg","done","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","fn","call","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","resolve","reject","invoke","__await","then","unwrapped","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","i","doneResult","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","globalThis","Function","parseSendReturn","sendReturn","NoBscProviderError","_this","message","UserRejectedRequestError","_this2","kwargs","handleNetworkChanged","_this3","bind","handleChainChanged","handleAccountsChanged","handleClose","emitUpdate","window","BinanceChain","accounts","emitDeactivate","code","reason","networkId","activate","on","isMetaMask","autoRefreshOnNetworkChange","send","_context","enable","getProvider","getChainId","isDapper","cachedResults","net_version","netVersion","networkVersion","_chainId","getAccount","deactivate","removeListener","isAuthorized","AbstractConnector","Airdrop","airdropPolygonCfg","index","airdropChainId","contract","airdrops","BAL","BZRX_COMPENSATION1","P125_COMPENSATION1","BZRX_COMPENSATION2","BZRX_LOCKED","Infinity","AirdropService","fulcrumProvider","airdrop","airdropInfo","merkle","getMerkelDistributorContract","airdropIndex","localStorage","setItem","getLocalAirdropId","getItem","bzxApi","getUserAirdropInfo","res","token","userIndex","isClaimed","getBzrxLockedAirdrops","airdropsFromApi","userAirdrops","userClaimed","userInfo","hasAirdrop","setChecked","proof","claim","runTx","srcAsset","destAsset","srcAddress","getAddress","destAddress","oracleContract","getOracleContract","queryRate","rate","swapPriceData","getGoodSourceAmountOfAsset","WBTC","USDC","USDT","assets","usdToken","usdTokenAddress","underlyings","map","amounts","assetRates","acc","item","destAmount","stablecoinForUsdRates","getSwapToUsdRate","getSwapToUsdRateBatch","BZX_API_URL","process","axios","_axios","baseURL","timeout","normalizeRequestError","response","data","errorData","errorCode","apiNetworkNames","getTreasuryBalances","get","vOOKI","vBZRX","amountUSD","platform","wrapNativeAsset","networks","toLowerCase","fetch","json","loanParam","param","subgraphFetch","query","network","oldGraph","body","JSON","stringify","headers","success","symbol","toUpperCase","erc20Address","url","stats","Array","isArray","stat","chainDetails","tokenName","WETH","getItokenAddressInfo","iTokenAddress","iTokenExplorerUrl","assetsCommon","getCommon","logo","spriteLogo","post","getAssetStatsHistory","assetStats","pointsNumber","startData","setDate","getDate","endData","getTime","requestUrl","responseJson","getChainStats","getUserItokenPrice","postFingerPrint","Web3ConnectionFactory","connector","providerType","web3ReactAccount","toString","parseInt","Web3Wrapper","userAccount","providerEngine","getNetworkIdAsync","etherProvider","providers","JsonRpcProvider","rpcUrlDefault","setReadonlyProvider","RPCSubprovider","Web3ProviderEngine","pollingInterval","addProvider","getRPCSubprovider","start","update","rpcSubprovider","currentConnector","AsyncData","initialValue","fetchHandler","pending","loaded","lastUpdated","lastAttempt","debounce","onError","defaultErrorHandler","mobx","deep","autoBind","prop","props","assign","now","set","UdfFeed","udfFeeds","BINANCE","id","symbolSeparator","KYBER","getBaseQuote","list","indexedBase","indexedQuote","ETH","ARB","FRAX","LINK","SPELL","MIM","tradePairs","route1","topN","topNDirectSwaps","topNTokenInOut","topNSecondHop","topNWithEachBaseToken","topNWithBaseToken","route2","route3","uniRouteSettings","FRAXUSDC","FRAXUSDT","FRAXWETH","FRAXWBTC","USDCWETH","USDTWETH","WBTCWETH","LINKUSDC","LINKUSDT","FRAXLINK","LINKWBTC","USDCUSDT","USDCWBTC","USDTWBTC","collateralAssets","concat","config","blockExplorer","chainName","shortName","nativeCurrency","rpcUrls","blocksPerYear","borrowing","comingSoon","tokens","contracts","bzx","helperProxy","priceFeed","sweepFees","tokenRegistry","SUSHI","dexesDetails","features","dexSelector","priceDefault","coefficient","fallback","lending","protocol","version","defaultPair","nativeTokenSupported","compromisedContracts","icon","color","chartUDF","stableCoins","twitterHandle","uiDisabled","uiDisabledReason","wallets","ProviderType","MetaMask","BNB","BUSD","BTCB","WBNB","Binance","TrustWallet","WalletConnect","DAI","OP","MATIC","STMATIC","WMATIC","WalletLink","ethereumConfig","optimismConfig","bscConfig","polygonConfig","arbitrumConfig","protoGenerator","makeInvokeMethod","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","NoEthereumProviderError","InjectedConnector","ethereum","WalletConnectConnector","rpc","bridge","qrcode","supportedChainIds","Number","handleDisconnect","m","WalletConnectProvider","WalletLinkConnector","appName","appLogoUrl","darkMode","injected","supportedChains","useWalletConnect","rpcUrl","useWalletLink","binance","BscConnector","switchNetwork","blockExplorerUrls","ConnectorEvent","ZERO_ADDRESS","INFINITE_ALLOWANCE","links","loanCollateralTable","ookiCoingecko","buyOoki","sushiswapEthereum","title","sushiswapPolygon","mexcGlobal","gateIO","wazirX","videos","ookiPromo","docs","daoGovernance","staking","voteDelegation","articles","ookiMigration","ookiv2","itokens","dexSelectorRelease","socials","discord","external","facebook","instagram","twitter","telegram","telegramAnnouncement","youtube","cryptoPlatforms","daoTreasury","daoSnapshot","tally","blog","shop","gitbook","ookiversity","forum","nfts","github","daoProposalsGithub","compensationChannel","acceptNoTradeKey","INITIAL_TORQUE_LOAN_DURATION","gasConfig","ookiToken","slp","blockExplorerUrl","sushiPoolLink","iooki","_chainConfigs","bscCompensationContract","routes","routeConfig","dexDetails","appLink","AUTO","isChainSupported","getBlockExplorerAddressLink","themes","light","bgDefault","dark","delay","vestingDurationAfterCliff","hideYear","localeDate","toLocaleDateString","day","month","year","getDateTime","currentYear","getFullYear","toLocaleTimeString","hour","minute","getTimestamp","monthCount","seconds","Math","floor","webpackContext","req","webpackContextResolve","__webpack_require__","o","add","ExternalLink","children","showIcon","className","otherProps","cssClass","target","rel","React","memo","BorrowRequest","borrowAsset","borrowAmount","depositAmount","moment","unix","random","_path","_excluded","_extends","arguments","source","apply","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgIconPagination","_ref","svgRef","titleId","width","height","viewBox","fill","xmlns","ref","d","stroke","strokeWidth","strokeLinejoin","ForwardRef","CircleLoader","size","style","styles","defaultProps","AssetDropdownBalance","useState","hideBalanceZero","checkboxId","setState","assetList","assetsWithBalance","selectedAsset","onClick","onSelect","abbreviate","onChange","htmlFor","AssetDropdownSimple","iconName","emptyIcon","emptyLabel","AssetDropdown","tipId","useRef","current","useCallback","onAssetChange","hasOnlyOneChoice","btnClassName","triggerButton","place","clickable","effect","isCapture","globalEventOff","delayHide","ExpectedResult","getDefaultActiveToken","activeTokenLiquidation","setActiveTokenLiquidation","useEffect","liquidationPriceText","isFinite","formatPrecision","collaterizationPercents","formatPercent","href","loanStatus","PriceSwitch","textTooltip","LendType","spender","tokenAddress","web3Utils","isAddress","spenderAddress","allowance","assetAddress","spendersAddresses","erc20Contract","getErc20Contract","sleep","getSpendingApprovals","tokenAddresses","approvals","approval","args","erc20Token","approve","setSpendingApprovalUnsafe","getDependenciesStrictAsset","ethersProvider","ethers","Web3Provider","erc20","abi","getSigner","waitForTransaction","hash","status","setSpendingApproval","sendTransactionAsync","awaitTransactionSuccessAsync","getSpendingApproval","getSpendingApprovalMultipleSpenders","getSpendingApprovalsOfAssets","setSpendingApprovalErc20","setSpendingApprovalInfinite","AAVE","APE","COMP","LRC","MKR","OOKI","UNI","YFI","borrowable","WSTETH","stakingConfig","stakeableAssets","IOOKI","SLP_OOKI_ETH","stakingContract","voteDelegatorContract","voteDelegatorUrl","masterChefSushiV2Contract","sushiPoolIdSLP","emit","emitError","traderAddress","destDecimals","isAmountIn","destTokenAmount","getOneEthWorthTokenAmount","srcDecimals","getActualSwapRate","getInfo","srcSwapAmount","receivedAmount","sentAmount","getTradeSlippageRate","swapPriceOneTokenWorth","swapPriceTradeAmount","slippage","RepayLoanRequest","repayPercent","ManageCollateralRequest","isWithdrawal","round","Operation","ReserveDetails","addressErc20","price","liquidity","liquidityReserved","totalSupply","totalBorrow","supplyInterestRate","borrowInterestRate","torqueBorrowInterestRate","avgBorrowInterestRate","lockedAssets","swapToUSDPrice","usdSupply","usdTotalLocked","getStakedTokensFromCRV","daiReserveDetails","usdcReserveDetails","usdtReserveDetails","daiReserve","usdcReserve","usdtReserve","stakingV1Address","crvAddress","CRV","getThreePoolContract","threePoolContract","crvErc20Contract","balanceOf","crvStakedLockedAmount","crvTotalSupply","shareOfCrvLockedInStaking","balances","underlyingDaiInCRV","shareOfDaiInStakedCrv","stakingDaiUsdLocked","underlyingUsdtInCRV","shareOfUsdtInStakedCrv","stakingUsdtUsdLocked","underlyingUsdcInCRV","shareOfUsdcInStakedCrv","stakingUsdcUsdLocked","getChainStakedTokenReserve","tokenInfo","getErc20Balance","balance","swapRate","reserve","getReserveDetails","getITokenAddresses","swapRates","reserveDetails","reserveData","usdSupplyAll","usdTotalLockedAll","getUnderlyingAssetFromItokenAddress","totalAssetSupply","totalAssetBorrow","vaultBalance","stMaticReserve","wstEthReserve","allTokensStats","getStatsOnChain","lendingAssets","chainStats","availableLiquidity","borrowApr","supplyApr","tokenUsdPrice","onChain","fromApi","getTradeEventInfo","tradeUtils","currentLeverage","getChainDetails","operation","Trade","getBorrowEventInfo","BorrowEvent","Borrow","newPrincipal","getLendEventInfo","getAssetByIToken","assetAmount","Lend","MintEvent","getLiquidationEventInfo","getCollateralEventInfo","tradeOrBorrow","user","getStakeEventInfo","StakeEvent","Stake","getActivityInfo","activity","CloseWithDepositEvent","BurnEvent","UnstakeEvent","getChainHistory","activityInfo","loans","getTradeLoans","tradeLoans","getLatestProtocolEvents","getUserProtocolEvents","openInpersonate","link","setLocalstorageItem","open","setTimeout","ProviderEvents","ProviderChangedEvent","web3","Loader","renderDots","animationDuration","quantityDots","wrapperDots","sizeDots","textPosition","isWarningTitle","PureComponent","Migration","migrationList","BZRX_TO_OOKI","fromAsset","BZRX","toAsset","conversionRatio","chainsAvailable","chains","converterAddress","limitedLiquidity","MigrateService","migration","migrationContractAddress","swapConverter","getFixedSwapConverter","convert2","activityEvents","tradeHistoryEvents","baseEventQuery","eventFields","protocolTradeEvent","protocolCloseWithSwapEvent","protocolCloseWithDepositEvent","protocolBorrowEvent","mintEvent","burnEvent","protocolRolloverEvent","protocolLiquidateEvent","protocolDepositCollateralEvent","protocolWithdrawCollateralEvent","protocolEarnRewardEvent","protocolPayTradingFeeEvent","stakingStakeEvent","stakingUnstakeEvent","getEventsQuery","fields","accountFilter","timeFilter","getLoanEventsQuery","ids","loanFilter","getTradeEvents","evnts","lender","settlementDate","transaction","getLiquidationEvents","liquidator","getCloseWithSwapEvents","closer","getDepositCollateralEvents","getWithdrawCollateralEvents","withdrawToken","withdrawAmount","getActivityEvents","getCloseWithDepositEvents","newCollateral","interestDuration","getBorrowEvents","minter","tokenAmount","getMintEvents","burner","getBurnEvents","getStakeEvents","getUnstakeEvents","getTradeHistoryEvents","caller","collateralAmountUsed","interestAmountAdded","loanEndTimestamp","gasRebate","getRolloverEvents","receiver","feeType","getEarnRewardEvents","getPayTradingFeeEvents","history","resp","BZRXVestingTokenEvents","BzxEvents","BZRXVestingTokenContract","supportedProvider","txDefaults","logDecodeDependencies","deployedBytecode","encoderOverrides","ABI","_methodABIIndex","_subscriptionManager","classUtils","bindAll","SubscriptionManager","_web3Wrapper","methodAbi","methodName","methodAbiToFunctionSignature","callData","functionSignature","getFunctionSignature","_lookupAbiEncoder","strictDecode","_encoderOverrides","decodeOutput","strictDecodeReturnValue","getSelector","selector","defaultBlock","BaseContract","_assertCallParams","_performCallAsync","getABIEncodedTransactionData","rawCallResult","abiEncoder","_throwIfUnexpectedEmptyCallResult","_strictEncodeArguments","_owner","_spender","assert","isString","_value","isBigNumber","txData","shouldValidate","_applyDefaultsToTxDataAsync","estimateGasAsync","txDataWithDefaults","_promiseWithTransactionHash","createAccessListAsync","_blockNumber","_receiver","_amount","_to","_from","newOwner","eventName","indexFilterValues","callback","isVerbose","blockPollingIntervalMs","doesBelongToStringEnum","doesConformToSchema","schemas","indexFilterValuesSchema","isFunction","subscriptionToken","subscribe","unsubscribe","unsubscribeAll","blockRange","blockRangeSchema","getLogsAsync","logs","artifact","txDataSchema","compilerOutput","standardizeOrThrow","bytecode","evm","logDecodeDependenciesAbiOnly","deployAsync","libraryArtifacts","_deployLibrariesAsync","libraryAddresses","linkLibrariesInBytecode","isHexString","constructorAbi","_lookupConstructorAbi","_formatABIDataItemList","inputs","_bigNumberToString","iface","Interface","deployInfo","deployFunction","encode","_applyDefaultsToContractTxDataAsync","logUtils","log","txReceipt","contractAddress","contractInstance","constructorArgs","anonymous","indexed","outputs","constant","payable","stateMutability","linkReferences","libraryName","libraryArtifact","linkedLibraryBytecode","contractName","erc20Events","BzxContract","isTorqueLoan","isBoolean","swapAmount","count","unsafeOnly","trader","sourceToken","payload","loanType","isLender","isNumberOrBigNumber","closeAmount","index_0","components","_who","HelperEvents","FixedSwapTokenConverterContract","_tokens","_amounts","_tokenAmount","iTokenEvents","HelperContract","owner","wallet","sourceAmounts","loanTokenAddress","collateralTokenAddress","iTokenContract","initialLoanDuration","borrower","index_7","burnAmount","leverageAmount","supplyAmount","MerkleDistributorEvents","MasterChefSushiContract","index_1","MerkleDistributorContract","merkleProof","token_","merkleRoot_","airdropSource_","amount_","spender_","value_","loanAmount","StakingContract","restake","arg0","VoteDelegatorContract","delegatee","delegator","WrappedNativeContract","threeCurveAddresses","Map","vbzrxAddresses","wrappedNativeAddresses","addresses","ContractsSource","getStakingContract","memoize","getVoteDelegatorContract","getBzrxVestingContract","getHelperContract","addressOrAsset","underlyingAsset","getITokenAddress","getITokenContractUsingIToken","iTokenAsset","getMasterChefSushiContract","getWrappedNativeContract","setWeb3ProviderFinalize","chainSupported","getAvailableAddressesAsync","web3EngineAccounts","None","String","setWeb3Provider","getProviderTypeByConnector","setWalletProvider","removeItem","onConnectorUpdated","updateConnector","listeners","Update","getLibrary","setReadonlyWeb3Provider","EXPONENTIAL_AT","formatWithSeparator","decimalSeparator","groupSeparator","groupSize","autoFormat","numbr","maxDecimals","num","isZero","lt","exponential","toExponential","decimalPlaces","integerValue","str","noSeparator","toFormat","replace","endsWith","sign","isLessThan","isGreaterThan","numbrString","match","output","outputNumber","n","LN10","x","val","roundWithSign","Placeholder","small","topic0","getSushiRouteIn","amountUsed","sushiAddress","swapContract","Contract","abiCoder","AbiCoder","payloadMarking","callStatic","dexAmountInFormatted","resultant","_hex","getSushiRouteOut","dexAmountOutFormatted","direction","EXACT_INPUT","getUniswapV3RouteOut","nProvider","router","AlphaRouter","tempAssetChange","USDValue","SRC","Token","DEST","amountInFinal","CurrencyAmount","fromRawAmount","JSBI","BigInt","localeCompare","join","v3PoolSelectionSettings","recipient","slippageTolerance","Percent","deadline","getBlockNumber","Protocol","V3","protocols","v3PoolSelection","maxSwapsPerPath","maxSplits","route","swapRoute","finalSwapList","finalSwapOut","set1","y","pools","tokenPath","fee","unshift","solidityPack","percent","rawQuote","getUniswapV3RouteIn","amountsInMax","EXACT_OUTPUT","finalSwapIn","amountsIn","toBigInt","routeHandlers","sushi","univ3","getAutoRoute","dataSet","tradePayload","getTradePayload","payloadInputData","TradeT","amountOutNeeded","getSwapDataForNewPosition","itokenAddresses","interestRates","getMaxLendValue","lendType","maxLendAmount","maxTokenAmount","userLentBalance","freeSupply","tokenPrice","LEND","assetContract","itokenAddress","getITokenBalanceOfUser","userItokens","yields","yieldFromApi","yyield","iTokenBalance","equity","iTokenPrice","userItokenPrice","nextSupplyInterestRate","getLendProfits","getLendTokenInterestRates","stakeableToken","unstakeableToken","stakingWalletToken","sanitizeStyles","sanitize","node","nodeType","Node","ELEMENT_NODE","isNodeElement","tagName","remove","attributes","attr","startsWith","removeAttribute","textContent","getAttribute","sanitizedStyles","setAttribute","childNodes","waitForTransactionSuccess","getGasEstimate","task","gasAmount","gasAmountBN","ROUND_UP","nativeAmountInBaseUnit","debugTx","debugInfo","encodedTxData","receipt","getEthBalance","getBalanceInWeiAsync","holderAddress","isNativeTokenForNetwork","assetErc20Address","waitForTransactionMined","walletBalances","nativeAmount","addToken","assetInfo","svgLogo","document","getElementById","svg","createElementNS","symbolAttributes","child","appendChild","cloneNode","outerHTML","getIconSvg","image","escape","options","getCurrentAccount","impersonateAddress","getLocalstorageItem","getWalletBalances","sendErc20","to","tokenContract","amountInBaseUnit","transfer","unwrapNativeToken","wrappedNative","withdraw","wrapNativeToken","WhyNoSir","text","buttonText","variant","onClose","isOpened","prevProps","prevState","querySelector","PriceSwitchSelector","boundingClient","getBoundingClientRect","left","unselectedAsset","Component","FeeType","reciever","payer","TokenLoader","isLoading","cloneElement","trade","tradeChart","openPositions","tradingHistory","lend","lendAsset","lendYields","treasury","arr","storage","objKey","OpenPosition","rootStore","position","IETH","activeTokenProfit","loanApr","pairConfig","pendingTx","tradeStore","valueChange","setActiveTokenProfit","onManageClick","manageCollateralRequest","requestManageCollateral","init","fp","web3Connection","tradeRequest","requestClosePosition","getBorrowInterestRate","openValue","syncData","escapeString","regexFromStrings","strings","RegExp","matchAlias","matchUserName","getWordListCheck","regex","word","test","common","assetsChainDetails","assetDetails","_","getAssetStrict","underlying","substring","getItokenInfo","assetsMapForChart","checkWethToken","udfFeed","getAddresses","activeToken","mainTokens","unwrapNativeAsset","wethToEth","FulcrumProvider","setMaxListeners","TypedEmitter","commons","BPT","BZRX_BNB","CAKE","CRV3","DOGE","IAAVE","IAPE","IARB","IAUTO","IBNB","IBTCB","IBUSD","IBZRX","ICAKE","ICOMP","IDAI","IDOGE","IFRAX","IKNC","IKNCL","ILINK","ILRC","IMATIC","IMIM","IMKR","IOP","ISPELL","IUNI","IUSDC","IUSDT","IWBTC","IWETH","IYFI","KNC","KNCL","P125","SLP","inject","theme","setTheme","documentElement","applyTheme","uiStore","require","LocalStorage","storeKey","store","localforage","defaultValue","variables","pagination","limit","offset","field","order","governanceId","governanceIds","getOokiProposals","DaoService","tallyApi","proposals","description","proposer","eta","startBlock","endBlock","votes","for","voteStats","vote","support","weight","against","abstain","canceled","statusChanges","executed","LendService","isNative","mintWithEther","mint","burnToEther","burn","LoanService","borrowDetails","collateralAssetErc20Address","borrowAmountInBaseUnits","depositAmountInBaseUnits","borrow","manageCollateralDetails","collateralAmountInBaseUnits","depositCollateral","repayDetails","closeAmountInBaseUnits","closeAmountInBaseUnitsValue","gte","closeWithDeposit","getDependenciesRead","liquidities","tradeDetails","sendAmountForValue","marginTrade","checkEventFilter","regexUtils","Sentry","dsn","release","beforeSend","hint","originalException","scope","setUser","clear","secret","addEventListener","airdropService","daoService","lendService","migrateService","createBrowserHistory","loanService","sentryService","debugService","Preloader","DialogVM","transitionDelay","visible","bound","show","hide","toggle","cb","stringified","exec","decorateError","noError","stackMessages","_path2","_path3","_path4","_path5","_path6","_path7","_path8","_path9","_path10","_path11","SvgLogoShortBinance","SvgLogoShortCoinbase","fillRule","clipRule","SvgLogoShortGenericwallet","_path12","_path13","_path14","_path15","_path16","_path17","_path18","_path19","_path20","_path21","_path22","_path23","_path24","_path25","_path26","_path27","_path28","_path29","SvgLogoShortMetamask","strokeLinecap","SvgLogoShortTrustwallet","SvgLogoShortWalletconnect","connectorsByType","providersDetails","label","ProviderLogo","MetamaskLogoShort","TrustWalletLogoShort","WalletConnectLogoShort","WalletLinkLogoShort","BinanceLogoShort","GenericWalletShort","isWalletConnect","isWalletLink","getConnectorByProviderType","withVM","VM","VMProvider","vm","destroyVM","getComponentDisplayName","mobxReact","ManageCollateralForm","_onInputUpdate","getExpectedData","_collateralPrecision","approveSpending","preventDefault","spendingApprovals","setInfiniteApprovalForToken","needsApproval","onSubmitClick","isBorrow","borrowStore","loanValue","selectedValue","onLoanConfirmed","manageCollateral","getCollateralAmount","numberUtils","inputAmountText","inputAmount","onAfterChange","onCollateralChange","bnValue","roundedValue","absoluteValue","maxCollateralForZeroMarginLoan","collateralExcess","maxValue","getEstimateDataChangeEstimate","collateralTooLow","minValue","assetBalance","collateralState","currentValue","minCollateral","maxCollateral","currentCollateral","currentCollateralNormalizedBN","isUsingUniV3","checkApprovals","warningMessage","canSubmit","submiTitle","onCancel","closeModal","onSubmit","top","onChangeEmit","withLoader","step","max","disabled","_path30","_path31","_path32","_path33","_path34","_path35","_path36","_path37","_path38","SvgChartPlaceholder","xmlSpace","chartTypes","candle","placeholder","area","chartPlaceholderArea","ChartLoader","showLoader","getAvailableLiquidity","getLoanParamsOnChain","getDefaultLoanParams","formatLoan","getLoanById","getLoan","zero","getLoansList","loansData","gasEstimate","getDepositAmountForBorrow","borrowEstimate","getCollateralExcessAmount","getLoanCollateralChangeEstimate","newAmount","getCurrentMargin","newCurrentMargin","getBorrowAmountEstimate","collaterizationPercent","minInitialMargin","liquidityAvailable","exceedsLiquidity","iTokensUtils","getBorrowAmountForDeposit","realBorrowAmount","liquidationCollateralToLoanRate","changeAmount","getBorrowMoreChangeEstimate","borrowMoreLoan","getRepayChangeEstimate","borrowLessloan","getDepositAmountEstimate","getLoanExtendEstimate","daysToAdd","getPositionSafetyText","liquidationZone","dangerZone","ScrollToTop","pathname","useLocation","scrollTo","_g","_ellipse","_circle","_circle2","_g2","_g3","_polygon","_polygon2","_rect","_rect2","_path39","_g4","_rect3","_rect4","_rect5","_rect6","_path40","_path41","_defs","_clipPath","_g5","_g6","SvgOokiWorker","xmlnsXlink","opacity","cx","cy","rx","ry","r","points","transform","xlinkHref","overflow","clipPath","observer","appError","clearError","detailsVisible","setDetailsVisible","readOnly","bgPadding","InfoBlock","onAccept","storageKey","hasAccepted","localStorageItem","featureMap","available","slogan","feature","allChainsSwitches","featureDetails","details","connectedNetworkDetails","networkDetails","PreloaderContent","chevronDown","bgCircle","bgColor","closeIcon","logos","formatDate","transactionStore","transactions","collapsed","onClickEmit","statusClass","hashContent","scannerLink","hashUtils","shortHash","Fragment","time","removeTx","colSpan","normalizeChainId","parsedChainId","normalizeAccount","_address","chars","charsArray","Uint8Array","hashed","arrayify","keccak256","addressChecksum","StaleConnectorError","UnsupportedChainIdError","reducer","ActionType","augmentConnectorUpdate","_account","PRIMARY_KEY","CONTEXTS","createWeb3ReactRoot","createContext","setError","active","Provider","useReducer","dispatch","updateBusterRef","throwErrors","updateBusterInitial","activated","augmentedUpdate","DEACTIVATE_CONNECTOR","handleUpdate","handleError","handleDeactivate","useWeb3ReactManager","library","useMemo","web3ReactContext","Web3ReactProvider","useWeb3React","useContext","getWeb3ReactContext","Web3ReactExporter","BorrowForm","_borrowAmountChange","borrowAmountChange","_depositAmountChange","depositAmountChange","_sliderChange","depositAmountValue","gasAmountNeeded","_borrowDecimals","setLiquidationPrice","setNeedsApproval","borrowRequest","onChangeCollateralAsset","userBalance","userBalances","balanceValue","setInputDefaults","setMaxBorrow","onBorrowAmountChange","borrowAmountValue","isValid","stateUpdate","sliderValue","inverseCurve","setDepositEstimate","precisionDigits","sliderCurve","onChangeDeposit","amountBN","refreshBorrowRate","maxAvailableLiquidity","services","getLiquidityFromBlockchain","userWallet","getBalances","exp","balanceTooLow","minSliderValue","maxSliderValue","submitTitle","cursor","TokenTip","rateFreeTipContent","isConnected","borrowInfo","isComingSoon","rateText","delayShow","onOpen","notifyConnect","media","filteredBorrowItems","searchQuery","sortList","sortBy","sortOrder","currentSortBy","isMobileMedia","borrowOoki","borrowNerd","isOpen","isBorrowOpen","overlayClassName","onRequestClose","submit","BorrowAssetVM","BorrowAsset","InputAmount","setButtonValue","buttonElement","currentTarget","dataset","parseFloat","onInsertMaxValue","prevInputAmount","ratio","isGrouped","wrapperClass","onAmountChange","readonly","selectorAssets","withSlider","percentSlider","buttonValue","onAfterSliderChange","noButtonOrSlider","BorrowMoreForm","loanCollateralizedPercent","onTradeAmountChange","setAmountFromPercentage","percentage","maxBorrow","borrowMoreCollaterizationMin","collateralizationTooLow","borrowAmountEstimate","titile","RepayLoanForm","leading","onRepayAmountChange","isEqualTo","percentRatio","setAmountByPercentage","balanceVSOwedRatio","warnEntireRepay","iconColor","ookiFace","safe","danger","unsafe","getTweetLink","moneyAdjective","encodeURIComponent","positionSafetyText","collateralizedStateSelector","selectedLiquidationPrice","alt","isUnhealthyLoan","setActive","smScreen","filteredLoans","loansChecked","loansCount","path","render","BorrowVM","autoSync","onlyIcon","compensation","badBoyMode","isBadBoy","canClaim","approvalsAreSafe","inputAddressEqualConnected","isBzrxLocked","canCheck","airdropStore","airdropPending","claimLockedBZRXCompensation","claimBZRXCompensation","approvalsChecked","approvalsPending","canCheckApprovals","checkDangerousApprovals","approvalsError","inputAddress","inputWrapper","maxWidth","compensations","chainIdNeeded","entitledCompensations","isEntitledToCompensation","hasClaimableCompensations","compensationListVisible","needToConnectRightWallet","checkAirdrop","airdropInfoPending","airdropsInfoLoaded","CompensationClaim","airdropsInfo","bscAirdrop","BZRXCompensationBSCInfo","bzrxBalance","indexedByAsset","bzrxSentToBscCompensationContract","sendBZRXtoBscCompensationContract","lockedBzrxAirdrops","tabs","chainIcon","bscTab","tab","changeBscTab","instructions","CompensationDetails","assetName","airdropContract","airdropContractLink","p125Info","p125Link","priceReference","priceRefDialog","addP125Token","walletAddress","canCheckP125","canClaimP125","claimP125Compensation1","instructionsDialog","changeTab","hackerWalletsRug2","CompensationVM","stopSyncBalance","every","checkBscBalance","clearData","checkBzrxLockedAirdrops","BZRXAddress","approvalUtils","findTokenBalance","sendToken","Compensation","SvgBorrow","strokeMiterlimit","SvgLend","_rect7","_rect8","_rect9","_rect10","_rect11","_rect12","_rect13","_rect14","SvgTrade","DashboardFooter","SvgLearn","SvgLobby","SvgNfts","SvgOurTokens","enableBackground","SvgShop","_ellipse2","SvgSocials","isLobby","OokiversityPost","prefix","postTitle","excerpt","replaceAll","blogStore","posts","ookiversityPosts","banner","updateTypesIcon","improvement","fix","appUpdates","updates","updatesShown","appUpdatesViewMore","appUpdate","loader","mediaQueries","minWidth","statsStore","hasAPR","bestLendAprs","apr","useElementSizeQuery","setRef","img","backgroundColor","border","BlogPostsPlaceholder","BlogPostPlaceholder","latestPosts","loading","stakingStore","dao","snapshotProposals","proposal","viewPort","mdPlusScreen","twitterHeight","xlScreen","dataSource","sourceType","screenName","ookiIcon","bzrxIcon","webPreview","collection","linkPath","filePath","nftTokens","tokenId","grid","gridTemplateColumns","frameBorder","allow","allowFullScreen","Nfts","nftsBanner","SvgCoinGecco","SvgGovern","_path42","_path43","_path44","_path45","_path46","_path47","_path48","_path49","_path50","_path51","_path52","_path53","_path54","_path55","_path56","_path57","_path58","_path59","_path60","_path61","_path62","_path63","_path64","_path65","_path66","_path67","_path68","_path69","_path70","_path71","_path72","_path73","_path74","_path75","_path76","_path77","_path78","_path79","_path80","_path81","_path82","_path83","_path84","_path85","_path86","_path87","_path88","_path89","_path90","_path91","_path92","_path93","_path94","_defs2","_clipPath2","SvgOokiFlowchart","_ellipse3","_defs3","_clipPath3","SvgStake","ookiInfo","ookiExplorerLink","Shop","shopBanner","Socials","social","exact","ookiChains","DashboardVM","getSnapshotProposals","Dashboard","knownAddresses","viewZeroApprovals","spenderLabel","removeApproval","settings","setImpersonate","inputImpersonate","inputImpersonateValid","shortWalletAddress","nativeBalance","fetchRatesOnChain","devMode","protocolVersionOverride","setProtocolVersion","DebugVM","getNativeTokenBalance","ProviderChanged","fetchImpersonatedBalances","checkApprovalsOfAllItokens","Debug","SvgOokiLogo","gradientUnits","x1","y1","x2","y2","gradientTransform","stopColor","stopOpacity","showIntercom","Intercom","linksSocials","allLinks","linksMore","featuresLinks","linksHelp","HeaderMoreDropdown","menuItems","marginTop","HeaderMenu","items","onMenuToggle","activeClassName","hideDialogs","Picture","retina","webp","webpRetina","webpImg","srcSet","tooltip","ChainInfoVM","setReadOnlyProvider","ChainInfo","providerTypes","supportedWalletProviders","ProviderLogoIcon","providerTypeDetails","connect","disconnect","ProviderInfoVM","ProviderInfo","genericWalletLogo","isDisconnecting","isLoadingWallet","hasProvider","users","connectedAddress","alias","unsupportedNetwork","chainLogo","avatar","paddingTop","display","addOokiToken","canAddToken","marketData","ookiBalance","getData","priceChange","getBalancesPending","coingeckoUrl","getMarketData","toCurrency","marketRequest","marketResponse","marketCap","marketCapChange","OokiDetailsVM","chainsWithOokiToken","OokiDetails","ookiLogoLink","sideMenu","ThemeSwitch","helpDialog","right","tooltipRef","ReactTooltip","HeaderVM","Header","form","fromTo","directionAllowed","setToMax","toggleReceive","borderColor","nativeBalancePending","swapPending","noop","assetSelected","lendForm","assetSelectedInfo","isLending","nextSupplyRate","lendItem","profitEstimates","inputLendAsset","numPrefix","lendAmountAsBN","yearly","lendDialog","insufficientLiquidityToUnlend","wrapNativeFormVisible","inputLendAmount","selectableAssets","ratioMaxLendAmount","setAmountFromMaxPercent","changeCollateral","setMax","weekly","monthly","spendingApprovalPending","isExpired","wrapNativeForm","useWrappedNative","lendItemDetails","hasPendingTx","lendStore","pendingAssetTx","txAsset","ratePrefix","rateTip","showLendForm","filteredLendItems","lendOoki","lendBean","getTweetLinkBorrow","userYield","userYearlyProfit","iTokenSymbol","hasProfit","balanceShown","balanceShownAsset","balanceDescription","showUnlendForm","userYields","filteredYieldList","fetchingData","onAfterClose","WrapNativeFormVM","autoSyncData","wrappedBalance","wrappedBalancePending","stopAutoSync","useWrapped","getNativeBalance","getWrappedBalance","txSteps","run","enabled","LendForm","lendedAmountEstimate","refreshSupplyRateDebounced","stopAutoUpdate","refreshSupplyRate","searchAsset","lendItems","yearlyProfit","UNLEND","unlend","setInfiniteApprovalForIToken","checkApproval","lendUtils","maxLendValue","LendVM","LendFormVM","filtered","orderBy","by","formAsset","showForm","fromInfo","toInfo","connectedChainId","toIcon","walletBalanceFrom","setMaxAmount","amountToConvert","balancesPending","canConvert","conversionAmount","approvalPending","conversionPending","convert","liquidityLoaded","tweetOptions","username","converterExplorerLink","migrationStore","migrations","MigrationItem","MigrateTokensVM","migrationDetails","MigrateTokens","contractUrl","migrationDetailsDialog","imgExitOldStaking","customFunctionRender","toPrecision","AssetBalance","ease","rewards","ooki","vestedOokiInRewards","actualBzrxStakingRewards","stableCoin","inputRestake","pendingStakingRewards","canClaimStakingRewards","claimStakingRewards","userShouldVote","pendingSushiRewards","canClaimSushiRewards","claimSushiRewards","vestedVbzrx","pendingVbzrxClaim","canClaimVestedBZRX","claimVestedBzrx","ookiVesting","stableCoinVesting","VestedBZRX","RewardsVM","Rewards","SvgDaoGovern","onchainProposals","onchainProposalsPending","onchainProposalsError","proposalsPending","proposalsError","dialogVM","votingPower","votingPowerTotal","votingPowerStaked","votingPowerPending","votingPowerFromDelegators","hasDelegate","getDelegatePending","delegateAddress","stopDelegating","setDelegate","inputDelegate","canDelegate","setDelegatePending","daoSection","setSection","globalStaked","staked","DaoVM","stopAutoSyncData","section","getOnchainProposals","Dao","needApprovalList","stakingAllowances","spendingAllowanceDetails","setSpendingAllowance","InputStake","onChangeNameValue","hasEnoughToStake","changeTokenBalance","ookiInput","vbzrx","vbzrxInput","iookiInput","slp_ooki_eth","slp_ooki_ethInput","stakingPending","block","canStake","stake","canUnstake","unstake","isWorthEnough","unstakeSelected","allowanceChecked","pendingWalletBalance","pendingStakedBalance","isEmpty","StakingFormVM","stakingUtils","verifyStake","inputsAsBN","totalBalance","valueBN","newInputValue","tokenAmounts","inputValue","needApprovals","stopInputSync","StakingForm","walletUpdate","walletUpdatePopup","lines","ceil","change","notify","coinsLeftImg","coinsRightImg","StakingVM","Staking","currentUser","protocolStatsUtils","latestProtocolEvents","selectedUserEvents","findByUser","searchUser","showAllActivity","allActivity","latestActivity","quantityGrids","numberPagination","prevPagination","paginations","isLastEventsPagination","nextPagination","ReserveDesktopItem","statsItem","ReserveDesktop","statsItems","cellSpacing","ReserveMobileItem","currentChainAllTokensStats","selectedChainAllTokensStats","Tvl","chartStatus","selectedChainStats","vbzrxTip","treasuryBalances","treasuryTotalUsd","treasuryImg","empty","selectedLine","secondLine","onAssetSwitch","firstAssets","secondAsset","onSecondAssetSwitch","secondAssets","onDataSwitch","selectedData","dataLabel","chartContainer","updateChain","selectedChain","rightPriceScale","borderVisible","timeScale","themeConfig","chart","layout","lineColor","textColor","watermark","vertLines","horzLines","fixLeftEdge","fixRightEdge","series","topColor","bottomColor","secondSeries","StatsVM","paginationSize","stopSyncTheme","stopSyncChartData","areaSeries","secondAreaSeries","defaultQuantityEvents","startIndex","endIndex","assetStatsData","tvlData","reserveChain","point","prevTime","toISOString","split","container","applyOptions","offsetHeight","offsetWidth","setData","loadCharData","secondChartData","chartData","localization","priceFormatter","p","newData","getDefaults","setChartData","fitContent","setSecondChartData","createRef","createChart","addAreaSeries","lineWidth","syncToTheme","Stats","toastDialog","toastMessage","tokenIcon","ToolsVM","Tools","AvatarSelector","closeDialog","currentAvatars","updateAvatar","heigth","avatarPagination","avatarPaginations","isLastAvatarPagination","explorerWalletLink","latestUserTransactions","avatarDialog","warning","inputAlias","ediAlias","canSave","saveAlias","restoreDefaults","errorMessage","currentTransactions","quantityTxPagination","txPagination","prevTxPagination","txPaginations","isLastTxPagination","nextTxPagination","UserProfileVM","avatars","desktopVisible","mobileVisible","avatarsCount","defaultQuantityVisible","txInfo","quantityAvatarPagination","ava","storedEvents","setAlias","setAvatar","saveAvatar","storedUser","getAvatars","UserProfile","lazy","Trading","UIFramework","App","errors","setLogLevel","web3ProviderUtils","chainDisabledMsg","onGetLibrary","appID","alignment","hide_default_launcher","custom_launcher_selector","userNotAllowedToTrade","activatingProvider","head","isFromUS","getInitialAirdropState","initAirdropsState","AirdropStore","balAirdropInfo","shallow","checkUserAirdrop","wasChecked","claimAirdrop","getBlogPosts","blogRequest","blogResponse","tags","tag","slug","BlogStore","Loan","sliderMax","sliderMin","updateLiquidationPrice","BorrowStore","aprs","errorBorrow","errorLoan","errorTask","isBorrowCompleted","loansPending","loansError","recentLiquidationsNumber","daysNumberForLoanActionNotification","currentChainStats","borrowItems","updatedLoan","setLoanPendingTx","repay","syncLoans","refreshForCurrentChain","updateLoan","isFinished","createRequest","LendStore","profitError","lendAssets","isPending","assetTx","without","setPendingAssetTx","migrationInfo","conversionError","spendingApproval","walletBalanceTo","amountAsBigNumber","migrationChainDetails","getLiquidityAvailable","migrate","refreshTokensAmounts","MigrationStore","errorConversion","migrateAssets","defaultActivePairs","defaultProtocolVersion","SettingsStore","defaultSettings","favoritePairs","activePairs","panelsLayout","positionsLayout","SettingsAutoStorage","settingsStore","stopAutoSaveSettings","save","getSettings","storedSettings","saveSettings","SpendingApprovals","isApproving","getSpenderAddress","findApproval","newApprovals","unionWith","updateApprovalList","asyncRetry","newApprowal","operationName","getProposals","getDelegateError","setDelegateError","votingPowerError","onchainProposalOngoing","getVotingPower","getDelegate","snapshotApi","trim","end","getGlobalStaked","getGlobalStake","isNegative","getStakingRewards","getVestedOokiInRewards","getVestedBzrxBalance","vestedBzrx","shouldRestake","claimedAmounts","claimVestedBZRX","bzrxAmount","sushiAmount","SpendingAllowance","checked","setStakingAllowance","StakingAllowances","checkError","toLocaleLowerCase","initState","getStakeableAllowances","TokenBalances","crv3","UserBalances","getStakeableBalances","walletAmounts","getStakedBalances","stakedAmounts","refreshWalletbalances","refreshStakedBalances","clearBalances","getCopy","WalletUpdate","diffs","StakingStore","stakingError","fromEntries","substract","diff","tokenDiff","getUserBalances","check","getAllRewards","checkBalAirdrop","StatsStore","errorStatsInfo","tokenRowsData","totalsRowData","refreshLatestActivityDebounced","periodChart","newEvents","selectedUser","newStats","tvl","coin","stables","best","HistoryToken","latestEvent","NewPositionSetup","balancesError","baseTokenBalance","baseTokenPrice","inputTradeAmount","marketPair","maxTradeValuePercent","oraclePrice","priceImpact","quoteTokenBalance","syncDataDebounced","tradeAmount","txStatuses","txTypes","lowLiquidity","explorerAddress","minLeverage","resetData","getOraclePrice","setPair","loanIToken","getSwapData","actualSwapRate","input","dexSelectorFailed","rest","swapData","TradeStore","activePositionType","allOpenPositions","getPositionsFromLoans","positions","defaultQuantityVisibleRow","errorHistory","errorPosition","historyFromOldGraph","historyPending","historyTokens","isHistoryLoaded","isTradeCompleted","isTradeModalOpen","isTxCompleted","openPositionsPending","pendingPositions","tradeHistoryFetchFailed","newPositionSetup","positionToClose","onTransactionsCompleted","changeGridPositionType","datafeedUrl","marketSymbol","tvBaseToken","tvQuoteToken","positionDetails","setPositionPendingTx","openPosition","pos","updatedPosition","newPositions","clearHistory","tradeClose","updatePosition","removePosition","pendingPosition","getPendingPositionFromRequest","tradeOpen","historyTokenGrid","breakPoints","Transaction","finished","TransactionStore","ObservableViewport","throttledUpdateViewportSize","getViewPortSize","throttle","updateViewportSize","passive","removeEventListener","clientWidth","clientHeight","MediaQuery","medium","xl","UIStore","switchAmounts","UserWallet","keyBy","tokenBalance","newBalances","unionBy","newBalance","updateBalances","Web3Connection","supportedNetwork","providerIsChanging","pendingProvider","storedProvider","web3React","storedConnector","syncConnection","checkAndStartStoredProvider","RootStore","_settingsStorage","SettingsStorage","location","FP_KEY","KNOWN_FINGERPRINTS","BAD_BOY_WALLETS","fingerPrint","lastFp","client","ClientJS","getFingerprint","startTrackingBadBoy","geoLocation","listen","contextModule","ReactModal","setAppElement","global","llog","ReactDOM","ButtonBasic","btnRef","focusOnMount","btnElement","focus","scrollToOnMount","scrollIntoView","behavior","disabledMock","isOverlay","notificationMarker","variantsWithoutSize","Button","focused","variantClass","sizeClass","cssClasses","visibility","positionProps","getPositionStyle","ButtonClose","Icon","white","verticalAlign","rendering","omit","expectedProps","wrapperStyle","fontSize","padding","renderMode","svgStyle","classNames","successIcon","failIcon","ClipboardButton","_clipboard","_element","elRef","copied","destroy","Clipboard","successful","element","notifyCopy","isSupported","ButtonTH","Form","InfoTip","InputBasic","inputRef","inputField","convertedValue","select","selectOnFocus","onFocus","selectContent","Input","isFocused","setIsFocused","discreet","extraClass","inputText","onBlur","Modal","Slider","valueOnHandle","withPercentMarks","cssClassMark","rcSliderProps","marks","SliderPercent","_input","setMaxPercent","Switch","newValue","onchange","elementRef","setMedia","mediaRef","ResizeObserver","entries","contentBoxSize","inlineSize","contentRect","newWidthValue","mqs","matchingIndex","findIndex","getMqValue","unobserve","observe","checkedChildren","unCheckedChildren","charsAtBeginning","charsAtEnd","shortenedHash","ms","attempts","interval","shouldRetry","vbzrxContract","vestedBalanceOf","earned","vbzrxStaked","vestingLastSync","vestingLastSyncTime","lastBlockTime","balanceOfByAssets","getStakeableAddresses","votingFromStakedBalanceOf","votingBalanceOfNow","masterChefSushi","inSushi","claimSushi","delegates","stakeableAddresses","tokensToStake"],"mappings":"uPAIqBA,EAQnB,WACEC,EACAC,EACAC,EACAC,EACAC,GACC,yBAbIC,OAAgC,GAarC,KAZcL,YAYd,OAXcC,eAWd,OAVcC,gBAUd,OATcC,kBASd,OARcC,cAQd,EACAE,KAAKN,OAASA,EACdM,KAAKL,UAAYA,EACjBK,KAAKJ,WAAaA,EAClBI,KAAKH,aAAeA,EACpBG,KAAKF,SAAWA,GCnBCG,EAanB,WACEP,EACAQ,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAZ,EACAa,EACAC,GACC,yBAxBahB,YAwBd,OAvBcQ,UAuBd,OAtBcC,YAsBd,OArBcC,mBAqBd,OApBcC,gBAoBd,OAnBcC,WAmBd,OAlBcC,YAkBd,OAjBcX,gBAiBd,OAhBcY,YAgBd,OAfcC,wBAed,OAdcC,qBAcd,EACAV,KAAKN,OAASA,EACdM,KAAKE,KAAOA,EACZF,KAAKG,OAASA,EACdH,KAAKI,cAAgBA,EACrBJ,KAAKK,WAAaA,EAClBL,KAAKM,MAAQA,EACbN,KAAKO,OAASA,EACdP,KAAKQ,OAASA,EACdR,KAAKJ,WAAaA,EAClBI,KAAKS,mBAAqBA,EAC1BT,KAAKU,gBAAkBA,G,eCxCZ,GACb,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEAC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IpG,EAC3BkG,EAAUC,gBACV5yC,EACA2sC,EACAC,IAEekG,gBAAkB,GArCrC,kBAsCSD,GAtCT,4CA1EF,gFAsHE,WAskBE,MArkBY,CACV,CACEE,WAAW,EACXd,OAAQ,CACN,CACE96B,KAAM,QACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,UACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,QACNhD,KAAM,UACN6+B,SAAS,IAGb77B,KAAM,WACN87B,QAAS,GACT9+B,KAAM,SAER,CACE4+B,WAAW,EACXd,OAAQ,CACN,CACE96B,KAAM,QACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,QACNhD,KAAM,UACN6+B,SAAS,IAGb77B,KAAM,QACN87B,QAAS,GACT9+B,KAAM,SAER,CACE4+B,WAAW,EACXd,OAAQ,CACN,CACE96B,KAAM,gBACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,WACNhD,KAAM,UACN6+B,SAAS,IAGb77B,KAAM,uBACN87B,QAAS,GACT9+B,KAAM,SAER,CACE4+B,WAAW,EACXd,OAAQ,CACN,CACE96B,KAAM,OACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,KACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,QACNhD,KAAM,UACN6+B,SAAS,IAGb77B,KAAM,WACN87B,QAAS,GACT9+B,KAAM,SAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,OACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,WACNhD,KAAM,YAGVgD,KAAM,YACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,WACNhD,KAAM,WAER,CACEgD,KAAM,SACNhD,KAAM,YAGVgD,KAAM,UACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,SAGVg/B,SAAS,EACTC,gBAAiB,aACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,YAGVgD,KAAM,YACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,eACNhD,KAAM,YAGVgD,KAAM,cACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,OACN87B,QAAS,GACTE,SAAS,EACTC,gBAAiB,aACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,QACN87B,QAAS,GACTE,SAAS,EACTC,gBAAiB,aACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,YAGVgD,KAAM,mBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,gBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,WACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,UAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,aACN87B,QAAS,GACTE,SAAS,EACTC,gBAAiB,aACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,UACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,SAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,OACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,WAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,QACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,UACNhD,KAAM,YAGVgD,KAAM,SACN87B,QAAS,GACTE,SAAS,EACTC,gBAAiB,aACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,SACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,WAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,eACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,cACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,eACNhD,KAAM,YAGVgD,KAAM,gBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,iBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,cACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,MACNhD,KAAM,WAER,CACEgD,KAAM,SACNhD,KAAM,YAGVgD,KAAM,WACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,SAGVg/B,SAAS,EACTC,gBAAiB,aACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,QACNhD,KAAM,WAER,CACEgD,KAAM,MACNhD,KAAM,WAER,CACEgD,KAAM,SACNhD,KAAM,YAGVgD,KAAM,eACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,SAGVg/B,SAAS,EACTC,gBAAiB,aACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,WACNhD,KAAM,YAGVgD,KAAM,oBACN87B,QAAS,GACTE,SAAS,EACTC,gBAAiB,aACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,YAGVgD,KAAM,kBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,YAGVgD,KAAM,mBACN87B,QAAS,CACP,CACE97B,KAAM,UACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,wBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,kBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,sBACN87B,QAAS,CACP,CACE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AM,gBACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,eACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,mBACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,uBACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,gBACNhD,KAAM,UACN6+B,SAAS,IAGb77B,KAAM,SACN87B,QAAS,GACT9+B,KAAM,SAER,CACE4+B,WAAW,EACXd,OAAQ,CACN,CACE96B,KAAM,OACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,SACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,SACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,SACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,YACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,kBACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,cACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,2BACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,uBACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,gBACNhD,KAAM,UACN6+B,SAAS,IAGb77B,KAAM,mBACN87B,QAAS,GACT9+B,KAAM,SAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,WACNhD,KAAM,WAER,CACEgD,KAAM,gBACNhD,KAAM,WAER,CACEgD,KAAM,gBACNhD,KAAM,UAGVgD,KAAM,mBACN87B,QAAS,CACP,CACE97B,KAAM,kBACNhD,KAAM,WAER,CACEgD,KAAM,iBACNhD,KAAM,WAER,CACEgD,KAAM,gBACNhD,KAAM,YAGVi/B,gBAAiB,UACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,WACNhD,KAAM,WAER,CACEgD,KAAM,aACNhD,KAAM,WAER,CACEgD,KAAM,0BACNhD,KAAM,QAER,CACEgD,KAAM,gBACNhD,KAAM,UAGVgD,KAAM,gBACN87B,QAAS,CACP,CACE97B,KAAM,kBACNhD,KAAM,WAER,CACEgD,KAAM,iBACNhD,KAAM,WAER,CACEgD,KAAM,gBACNhD,KAAM,YAGVi/B,gBAAiB,aACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,gBACNhD,KAAM,YAGVgD,KAAM,oBACN87B,QAAS,GACTG,gBAAiB,UACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,QACNhD,KAAM,WAER,CACEgD,KAAM,QACNhD,KAAM,WAER,CACEgD,KAAM,aACNhD,KAAM,SAGVgD,KAAM,iBACN87B,QAAS,CACP,CACE97B,KAAM,YACNhD,KAAM,UACNsgC,WAAY,CACV,CACEt9B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,eACNhD,KAAM,UAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,kBACNhD,KAAM,WAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,aACNhD,KAAM,WAER,CACEgD,KAAM,qBACNhD,KAAM,WAER,CACEgD,KAAM,2BACNhD,KAAM,WAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,WAER,CACEgD,KAAM,oBACNhD,KAAM,WAER,CACEgD,KAAM,gBACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,WAER,CACEgD,KAAM,kBACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,WAER,CACEgD,KAAM,0BACNhD,KAAM,WAER,CACEgD,KAAM,gCACNhD,KAAM,cAKdi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,YAGVgD,KAAM,UACN87B,QAAS,CACP,CACE97B,KAAM,WACNhD,KAAM,QACNsgC,WAAY,CACV,CACEt9B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,eACNhD,KAAM,UAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,kBACNhD,KAAM,WAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,aACNhD,KAAM,WAER,CACEgD,KAAM,qBACNhD,KAAM,WAER,CACEgD,KAAM,2BACNhD,KAAM,WAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,WAER,CACEgD,KAAM,oBACNhD,KAAM,WAER,CACEgD,KAAM,gBACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,WAER,CACEgD,KAAM,kBACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,WAER,CACEgD,KAAM,0BACNhD,KAAM,WAER,CACEgD,KAAM,gCACNhD,KAAM,cAKdi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,WAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,WAER,CACEgD,KAAM,UACNhD,KAAM,SAER,CACEgD,KAAM,aACNhD,KAAM,SAGVgD,KAAM,wBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,aACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,OACNhD,KAAM,WAER,CACEgD,KAAM,QACNhD,KAAM,WAER,CACEgD,KAAM,QACNhD,KAAM,WAER,CACEgD,KAAM,WACNhD,KAAM,SAER,CACEgD,KAAM,WACNhD,KAAM,QAER,CACEgD,KAAM,aACNhD,KAAM,SAGVgD,KAAM,eACN87B,QAAS,CACP,CACE97B,KAAM,YACNhD,KAAM,UACNsgC,WAAY,CACV,CACEt9B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,eACNhD,KAAM,UAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,kBACNhD,KAAM,WAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,aACNhD,KAAM,WAER,CACEgD,KAAM,qBACNhD,KAAM,WAER,CACEgD,KAAM,2BACNhD,KAAM,WAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,WAER,CACEgD,KAAM,oBACNhD,KAAM,WAER,CACEgD,KAAM,gBACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,WAER,CACEgD,KAAM,kBACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,WAER,CACEgD,KAAM,0BACNhD,KAAM,WAER,CACEgD,KAAM,gCACNhD,KAAM,cAKdi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,WACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,YAGVgD,KAAM,YACN87B,QAAS,CACP,CACE97B,KAAM,kBACNhD,KAAM,WAER,CACEgD,KAAM,eACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,YAGVi/B,gBAAiB,UACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,UACNhD,KAAM,YAGVgD,KAAM,aACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,QACNsgC,WAAY,CACV,CACEt9B,KAAM,KACNhD,KAAM,WAER,CACEgD,KAAM,SACNhD,KAAM,QAER,CACEgD,KAAM,QACNhD,KAAM,WAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,kBACNhD,KAAM,WAER,CACEgD,KAAM,mBACNhD,KAAM,WAER,CACEgD,KAAM,oBACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,cAKdi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,WACNhD,KAAM,WAER,CACEgD,KAAM,iBACNhD,KAAM,YAGVgD,KAAM,qBACN87B,QAAS,CACP,CACE97B,KAAM,uBACNhD,KAAM,YAGVi/B,gBAAiB,aACjBj/B,KAAM,eA5zBd,0EAk0BE,WACE88B,EACAQ,EACAhmC,EACAkhC,GAJF,6GAKEgF,EALF,+BAKwD,GAEhDxiB,EAAQ8hB,EAASE,eAAeG,IAAID,SAASgC,gBAAkB,GAPvE,MASqB1mC,OAAOiI,OAAOua,GATnC,yCASaoX,EATb,WAU8B55B,OAAOC,KAAK25B,GAV1C,4CAUe+M,EAVf,KAWW3B,EAAiB2B,GAX5B,oBAacC,EAAkB9B,EAAiB6B,GAbjD,uBAegB,IAAIrwC,MAAJ,+CAAkDqwC,EAAlD,MAfhB,yBAkBcK,EAAYjC,sBAChB6B,EACA9B,EACAhmC,EACAkhC,EACAgF,GAvBV,eA0Bc6B,EAAwB5B,kCAAwB2B,EAAiB5B,GA1B/E,UA2ByCvD,eAAaoE,oCAAb,aAE7B/xB,KAAM+yB,GACH7G,GAELlhC,EAAY4jC,iBAAiBt1B,KAAKtO,IAhC5C,eA2Bc6jC,EA3Bd,iBAkC6B7jC,EAAYmxB,qBAAqB0S,GAlC9D,eAkCc1vC,EAlCd,OAmCQ6yC,WAASC,IAAT,2BAAiC9yC,IAnCzC,UAoC0C6L,EAAYoxB,6BAA6Bj9B,GApCnF,iBAoCgBgzC,EApChB,EAoCgBA,gBACRH,WAASC,IAAT,UACKa,EAAgBE,aADrB,qCAC8Db,IAE9DjB,EAAiB4B,EAAgBE,cAAgBb,EAxCzD,uFA4CSjB,GA5CT,4CAl0BF,kEAAiCvD,gBAApBuF,EAIG9G,sB,EAJH8G,EAKGF,aAAe,M,SCzCnBC,K,oBAAAA,E,qBAAAA,M,KAqBL,IAAMpY,EAAb,kDA40BE,WACE75B,EACAirC,EACAC,EACAC,GAGC,IAAD,EAFAC,EAEA,uDAFuCvR,EAAcuR,iBACrDC,EACA,mEACA,cACE,QACAxR,EAAcyR,MACdtrC,EACAirC,EACAC,EACAC,EACAC,EACAC,IAt1BaE,gBAA8C,GA60B7D,EA50BeC,0BA40Bf,EAWAC,aAAWC,QAAX,eAAyB,CAAC,iCAAkC,UAAW,iBACvE,EAAKF,qBAAuB,IAAIG,sBAC9B9R,EAAcyR,MACd,EAAKM,cAEP/R,EAAcyR,MAAMjoC,SAAQ,SAAC8a,EAAM3D,GACjC,GAAkB,aAAd2D,EAAKzL,KAAqB,CAC5B,IAAMm5B,EAAY1tB,EAClB,EAAKotB,gBAAgBM,EAAUn2B,MAAQ8E,MAnB3C,EAn1BJ,wDAiYE,SAA4BsxB,GAC1B,IAAMtxB,EAAQ7c,KAAK4tC,gBAAgBO,GAC7BD,EAAYhS,EAAcyR,MAAM9wB,GAEtC,OAD0BuxB,uCAA6BF,KApY3D,0CAwYE,SAAuCC,EAAoBE,GACzD,IAAMC,EAAoBtuC,KAAKuuC,qBAAqBJ,GAIpD,OAHanuC,KACWwuC,kBAAkBF,GACJG,aAAgBJ,KA5Y1D,qCAgZE,SAAkCF,EAAoBE,GACpD,GAAIruC,KAAK0uC,kBAAkBC,aACzB,OAAO3uC,KAAK0uC,kBAAkBC,aAAaR,EAAYE,GAEzD,IAAMC,EAAoBtuC,KAAKuuC,qBAAqBJ,GAIpD,OAHanuC,KACWwuC,kBAAkBF,GACJM,wBAA2BP,KAvZrE,yBA2ZE,SAAmBF,GACjB,IAAMG,EAAoBtuC,KAAKuuC,qBAAqBJ,GAGpD,OAFanuC,KACWwuC,kBAAkBF,GACxBO,gBA/ZtB,uBAkaE,SAAiBW,EAAgBC,GAC/B,IAAMh8B,EAAOzT,KACb0vC,SAAOC,SAAS,SAAUH,GAC1BE,SAAOC,SAAS,WAAYF,GAC5B,IAAMnB,EAAoB,6BAE1B,MAAO,CACLQ,SAAUr7B,EAAK+6B,kBAAkBF,GAAmBO,cAC9CvsC,UAFD,WAKkB,IAAD,iJAFpB+rC,EAEoB,+BAFU,GAC9BU,EACoB,uBACpBC,eAAaC,kBAAkBZ,EAAUU,GADrB,SAEQt7B,EAAKy7B,kBAAL,aACxB7tB,KAAM,EAAK8tB,gCAAmCd,GAChDU,GAJkB,cAEdK,EAFc,OAMdC,EAAa57B,EAAK+6B,kBAAkBF,GAC1CU,eAAaM,kCAAkCF,EAAeC,GAP1C,kBAQbA,EAAWT,wBAAmCQ,IARjC,8CAUtBD,6BAfK,WAgBH,OAAO17B,EAAK87B,uBAAuBjB,EAAmB,CACpDkB,EAAOvtB,cACPwtB,EAASxtB,oBA1bnB,qBA+bE,SAAewtB,EAAkBG,GAC/B,IAAMn8B,EAAOzT,KACb0vC,SAAOC,SAAS,WAAYF,GAC5BC,SAAOG,YAAY,SAAUD,GAC7B,IAAMtB,EAAoB,2BAE1B,MAAO,CACLQ,SAAUr7B,EAAK+6B,kBAAkBF,GAAmBO,cAC9CrR,qBAFD,SAGHsS,GAEkB,IAAD,6IADjB/rC,EACiB,+BADW,CAAEgsC,gBAAgB,GAC7B,SACgBt8B,EAAKu8B,4BAAL,aAC7B3uB,KAAM,EAAK8tB,gCAAmCW,GAChD,EAAKG,iBAAiBt1B,KAAK,IAHZ,UACXu1B,EADW,QAKW,IAAxBnsC,EAAKgsC,eALQ,gCAMT,EAAKztC,UAAU4tC,GANN,gCAQVz8B,EAAKw6B,aAAazQ,qBAAqB0S,IAR7B,8CAUnBzS,6BAfK,SAgBHqS,GAEgE,IADhE/rC,EAC+D,uDAD3B,CAAEgsC,gBAAgB,GAEtD,OAAOt8B,EAAK08B,4BAA4BnwC,KAAKw9B,qBAAqBsS,EAAQ/rC,GAAOA,IAE7EksC,iBArBD,SAqBkBH,GAAwD,IAAD,wIAC3Cr8B,EAAKu8B,4BAAL,aAC/B3uB,KAAM,EAAK8tB,gCACRW,IAHuE,cACtEI,EADsE,yBAKrEz8B,EAAKw6B,aAAagC,iBAAiBC,IALkC,8CAOxEE,sBA5BD,SA6BHN,EACAf,GAC+B,IAAD,wIACGt7B,EAAKu8B,4BAAL,aAC/B3uB,KAAM,EAAK8tB,gCACRW,IAHyB,cACxBI,EADwB,yBAKvBz8B,EAAKw6B,aAAamC,sBAAsBF,EAAoBnB,IALrC,8CAO1BzsC,UAtCD,WAyCgB,IAAD,iJAFlB+rC,EAEkB,+BAFY,GAC9BU,EACkB,uBAClBC,eAAaC,kBAAkBZ,EAAUU,GADvB,SAEUt7B,EAAKy7B,kBAAL,aACxB7tB,KAAM,EAAK8tB,gCAAmCd,GAChDU,GAJgB,cAEZK,EAFY,OAMZC,EAAa57B,EAAK+6B,kBAAkBF,GAC1CU,eAAaM,kCAAkCF,EAAeC,GAP5C,kBAQXA,EAAWT,wBAAiCQ,IARjC,8CAUpBD,6BAnDK,WAoDH,OAAO17B,EAAK87B,uBAAuBjB,EAAmB,CAACmB,EAASxtB,cAAe2tB,QAzfvF,uBA6fE,SAAiB0F,GACf,IAAM7hC,EAAOzT,KACb0vC,SAAOC,SAAS,OAAQ2F,GACxB,IAAMhH,EAAoB,qBAE1B,MAAO,CACLQ,SAAUr7B,EAAK+6B,kBAAkBF,GAAmBO,cAC9CvsC,UAFD,WAKkB,IAAD,iJAFpB+rC,EAEoB,+BAFU,GAC9BU,EACoB,uBACpBC,eAAaC,kBAAkBZ,EAAUU,GADrB,SAEQt7B,EAAKy7B,kBAAL,aACxB7tB,KAAM,EAAK8tB,gCAAmCd,GAChDU,GAJkB,cAEdK,EAFc,OAMdC,EAAa57B,EAAK+6B,kBAAkBF,GAC1CU,eAAaM,kCAAkCF,EAAeC,GAP1C,kBAQbA,EAAWT,wBAAmCQ,IARjC,8CAUtBD,6BAfK,WAgBH,OAAO17B,EAAK87B,uBAAuBjB,EAAmB,CAACgH,EAAKrzB,oBAlhBpE,sBAshBE,WACE,IAAMxO,EAAOzT,KACPsuC,EAAoB,aAE1B,MAAO,CACLQ,SAAUr7B,EAAK+6B,kBAAkBF,GAAmBO,cAC9CvsC,UAFD,WAKkB,IAAD,iJAFpB+rC,EAEoB,+BAFU,GAC9BU,EACoB,uBACpBC,eAAaC,kBAAkBZ,EAAUU,GADrB,SAEQt7B,EAAKy7B,kBAAL,aACxB7tB,KAAM,EAAK8tB,gCAAmCd,GAChDU,GAJkB,cAEdK,EAFc,OAMdC,EAAa57B,EAAK+6B,kBAAkBF,GAC1CU,eAAaM,kCAAkCF,EAAeC,GAP1C,kBAQbA,EAAWT,wBAAmCQ,IARjC,8CAUtBD,6BAfK,WAgBH,OAAO17B,EAAK87B,uBAAuBjB,EAAmB,QA1iB9D,kBA8iBE,WACE,IAAM76B,EAAOzT,KACPsuC,EAAoB,SAE1B,MAAO,CACLQ,SAAUr7B,EAAK+6B,kBAAkBF,GAAmBO,cAC9CvsC,UAFD,WAKe,IAAD,iJAFjB+rC,EAEiB,+BAFa,GAC9BU,EACiB,uBACjBC,eAAaC,kBAAkBZ,EAAUU,GADxB,SAEWt7B,EAAKy7B,kBAAL,aACxB7tB,KAAM,EAAK8tB,gCAAmCd,GAChDU,GAJe,cAEXK,EAFW,OAMXC,EAAa57B,EAAK+6B,kBAAkBF,GAC1CU,eAAaM,kCAAkCF,EAAeC,GAP7C,kBAQVA,EAAWT,wBAAgCQ,IARjC,8CAUnBD,6BAfK,WAgBH,OAAO17B,EAAK87B,uBAAuBjB,EAAmB,QAlkB9D,oBAskBE,WACE,IAAM76B,EAAOzT,KACPsuC,EAAoB,WAE1B,MAAO,CACLQ,SAAUr7B,EAAK+6B,kBAAkBF,GAAmBO,cAC9CvsC,UAFD,WAKe,IAAD,iJAFjB+rC,EAEiB,+BAFa,GAC9BU,EACiB,uBACjBC,eAAaC,kBAAkBZ,EAAUU,GADxB,SAEWt7B,EAAKy7B,kBAAL,aACxB7tB,KAAM,EAAK8tB,gCAAmCd,GAChDU,GAJe,cAEXK,EAFW,OAMXC,EAAa57B,EAAK+6B,kBAAkBF,GAC1CU,eAAaM,kCAAkCF,EAAeC,GAP7C,kBAQVA,EAAWT,wBAAgCQ,IARjC,8CAUnBD,6BAfK,WAgBH,OAAO17B,EAAK87B,uBAAuBjB,EAAmB,QA1lB9D,yBA8lBE,WACE,IAAM76B,EAAOzT,KACPsuC,EAAoB,gBAE1B,MAAO,CACLQ,SAAUr7B,EAAK+6B,kBAAkBF,GAAmBO,cAC9CvsC,UAFD,WAKkB,IAAD,iJAFpB+rC,EAEoB,+BAFU,GAC9BU,EACoB,uBACpBC,eAAaC,kBAAkBZ,EAAUU,GADrB,SAEQt7B,EAAKy7B,kBAAL,aACxB7tB,KAAM,EAAK8tB,gCAAmCd,GAChDU,GAJkB,cAEdK,EAFc,OAMdC,EAAa57B,EAAK+6B,kBAAkBF,GAC1CU,eAAaM,kCAAkCF,EAAeC,GAP1C,kBAQbA,EAAWT,wBAAmCQ,IARjC,8CAUtBD,6BAfK,WAgBH,OAAO17B,EAAK87B,uBAAuBjB,EAAmB,QAlnB9D,sBAsnBE,SAAgBkC,EAAaZ,GAC3B,IAAMn8B,EAAOzT,KACb0vC,SAAOC,SAAS,MAAOa,GACvBd,SAAOG,YAAY,SAAUD,GAC7B,IAAMtB,EAAoB,4BAE1B,MAAO,CACLQ,SAAUr7B,EAAK+6B,kBAAkBF,GAAmBO,cAC9CrR,qBAFD,SAGHsS,GAEkB,IAAD,6IADjB/rC,EACiB,+BADW,CAAEgsC,gBAAgB,GAC7B,SACgBt8B,EAAKu8B,4BAAL,aAC7B3uB,KAAM,EAAK8tB,gCAAmCW,GAChD,EAAKG,iBAAiBt1B,KAAK,IAHZ,UACXu1B,EADW,QAKW,IAAxBnsC,EAAKgsC,eALQ,gCAMT,EAAKztC,UAAU4tC,GANN,gCAQVz8B,EAAKw6B,aAAazQ,qBAAqB0S,IAR7B,8CAUnBzS,6BAfK,SAgBHqS,GAEgE,IADhE/rC,EAC+D,uDAD3B,CAAEgsC,gBAAgB,GAEtD,OAAOt8B,EAAK08B,4BAA4BnwC,KAAKw9B,qBAAqBsS,EAAQ/rC,GAAOA,IAE7EksC,iBArBD,SAqBkBH,GAAwD,IAAD,wIAC3Cr8B,EAAKu8B,4BAAL,aAC/B3uB,KAAM,EAAK8tB,gCACRW,IAHuE,cACtEI,EADsE,yBAKrEz8B,EAAKw6B,aAAagC,iBAAiBC,IALkC,8CAOxEE,sBA5BD,SA6BHN,EACAf,GAC+B,IAAD,wIACGt7B,EAAKu8B,4BAAL,aAC/B3uB,KAAM,EAAK8tB,gCACRW,IAHyB,cACxBI,EADwB,yBAKvBz8B,EAAKw6B,aAAamC,sBAAsBF,EAAoBnB,IALrC,8CAO1BzsC,UAtCD,WAyCgB,IAAD,iJAFlB+rC,EAEkB,+BAFY,GAC9BU,EACkB,uBAClBC,eAAaC,kBAAkBZ,EAAUU,GADvB,SAEUt7B,EAAKy7B,kBAAL,aACxB7tB,KAAM,EAAK8tB,gCAAmCd,GAChDU,GAJgB,cAEZK,EAFY,OAMZC,EAAa57B,EAAK+6B,kBAAkBF,GAC1CU,eAAaM,kCAAkCF,EAAeC,GAP5C,kBAQXA,EAAWT,wBAAiCQ,IARjC,8CAUpBD,6BAnDK,WAoDH,OAAO17B,EAAK87B,uBAAuBjB,EAAmB,CAACkC,EAAIvuB,cAAe2tB,QAhrBlF,0BAorBE,SACEa,EACAD,EACAZ,GAEA,IAAMn8B,EAAOzT,KACb0vC,SAAOC,SAAS,QAASc,GACzBf,SAAOC,SAAS,MAAOa,GACvBd,SAAOG,YAAY,SAAUD,GAC7B,IAAMtB,EAAoB,wCAE1B,MAAO,CACLQ,SAAUr7B,EAAK+6B,kBAAkBF,GAAmBO,cAC9CrR,qBAFD,SAGHsS,GAEkB,IAAD,6IADjB/rC,EACiB,+BADW,CAAEgsC,gBAAgB,GAC7B,SACgBt8B,EAAKu8B,4BAAL,aAC7B3uB,KAAM,EAAK8tB,gCAAmCW,GAChD,EAAKG,iBAAiBt1B,KAAK,IAHZ,UACXu1B,EADW,QAKW,IAAxBnsC,EAAKgsC,eALQ,gCAMT,EAAKztC,UAAU4tC,GANN,gCAQVz8B,EAAKw6B,aAAazQ,qBAAqB0S,IAR7B,8CAUnBzS,6BAfK,SAgBHqS,GAEgE,IADhE/rC,EAC+D,uDAD3B,CAAEgsC,gBAAgB,GAEtD,OAAOt8B,EAAK08B,4BAA4BnwC,KAAKw9B,qBAAqBsS,EAAQ/rC,GAAOA,IAE7EksC,iBArBD,SAqBkBH,GAAwD,IAAD,wIAC3Cr8B,EAAKu8B,4BAAL,aAC/B3uB,KAAM,EAAK8tB,gCACRW,IAHuE,cACtEI,EADsE,yBAKrEz8B,EAAKw6B,aAAagC,iBAAiBC,IALkC,8CAOxEE,sBA5BD,SA6BHN,EACAf,GAC+B,IAAD,wIACGt7B,EAAKu8B,4BAAL,aAC/B3uB,KAAM,EAAK8tB,gCACRW,IAHyB,cACxBI,EADwB,yBAKvBz8B,EAAKw6B,aAAamC,sBAAsBF,EAAoBnB,IALrC,8CAO1BzsC,UAtCD,WAyCgB,IAAD,iJAFlB+rC,EAEkB,+BAFY,GAC9BU,EACkB,uBAClBC,eAAaC,kBAAkBZ,EAAUU,GADvB,SAEUt7B,EAAKy7B,kBAAL,aACxB7tB,KAAM,EAAK8tB,gCAAmCd,GAChDU,GAJgB,cAEZK,EAFY,OAMZC,EAAa57B,EAAK+6B,kBAAkBF,GAC1CU,eAAaM,kCAAkCF,EAAeC,GAP5C,kBAQXA,EAAWT,wBAAiCQ,IARjC,8CAUpBD,6BAnDK,WAoDH,OAAO17B,EAAK87B,uBAAuBjB,EAAmB,CACpDmC,EAAMxuB,cACNuuB,EAAIvuB,cACJ2tB,QAtvBV,uBAqwBE,SACEe,EACAC,EACAC,GAGS,IAFTC,EAEQ,wDADRC,EACQ,uCACRrB,SAAOsB,uBAAuB,YAAaL,EAAW2D,GACtD5E,SAAOuB,oBACL,oBACAL,EACAM,UAAQC,yBAEVzB,SAAO0B,WAAW,WAAYP,GAC9B,IAAMQ,EAAoBrxC,KAAK6tC,qBAAqByD,UAClDtxC,KAAKqC,QACLsuC,EACAC,EACA1U,EAAcyR,MACdkD,EACAC,EACAC,GAEF,OAAOM,IA5xBX,yBAmyBE,SAAmBA,GACjBrxC,KAAK6tC,qBAAqB0D,YAAYF,KApyB1C,4BA0yBE,WACErxC,KAAK6tC,qBAAqB2D,mBA3yB9B,iEAszBE,WACEb,EACAc,EACAb,GAHF,8EAKElB,SAAOsB,uBAAuB,YAAaL,EAAW2D,GACtD5E,SAAOuB,oBAAoB,aAAcQ,EAAYP,UAAQQ,kBAC7DhC,SAAOuB,oBACL,oBACAL,EACAM,UAAQC,yBAVZ,SAYqBnxC,KAAK6tC,qBAAqB8D,aAC3C3xC,KAAKqC,QACLsuC,EACAc,EACAb,EACA1U,EAAcyR,OAjBlB,cAYQiE,EAZR,yBAmBSA,GAnBT,gDAtzBF,2IAQE,WACEC,EACAvE,EACAC,EACAC,GAJF,sFAMEkC,SAAOuB,oBAAoB,aAAc1D,EAAY2D,UAAQY,mBAC7B/gC,IAA5B8gC,EAASE,eAPf,sBAQU,IAAIluC,MAAM,kDARpB,OAcE,GAJMjD,EAAWE,gBAAckxC,mBAAmB1E,GAC5C2E,EAAWJ,EAASE,eAAeG,IAAID,SAAS15B,OAChD2kB,EAAM2U,EAASE,eAAe7U,IAC9BiV,EAAwE,QACnCphC,IAAvCxD,OAAOC,KAAKggC,GACd,UAAkBjgC,OAAOC,KAAKggC,GAA9B,eAAWx6B,EAA2C,KACpDm/B,EAA6Bn/B,GAAOw6B,EAAsBx6B,GAAK++B,eAAe7U,IAhBpF,yBAmBShB,EAAckW,YACnBH,EACA/U,EACAt8B,EACA2sC,EACA4E,IAxBJ,2CARF,wJAoCE,WACEN,EACAQ,EACA/E,EACAC,EACAC,GALF,wFAOEkC,SAAOuB,oBAAoB,aAAc1D,EAAY2D,UAAQY,mBAC7B/gC,IAA5B8gC,EAASE,eARf,sBASU,IAAIluC,MAAM,kDATpB,OAcE,GAHMjD,EAAWE,gBAAckxC,mBAAmB1E,GAC5CpQ,EAAM2U,EAASE,eAAe7U,IAC9BiV,EAAwE,QACnCphC,IAAvCxD,OAAOC,KAAKggC,GACd,UAAkBjgC,OAAOC,KAAKggC,GAA9B,eAAWx6B,EAA2C,KACpDm/B,EAA6Bn/B,GAAOw6B,EAAsBx6B,GAAK++B,eAAe7U,IAhBpF,gBAmBiChB,EAAcoW,sBAC3CT,EACAQ,EACA,IAAIhtB,cAAYzkB,GAChB2sC,GAvBJ,cAmBQgF,EAnBR,OAyBQN,EAAWO,kCAAwBX,EAAUU,GAzBrD,kBA0BSrW,EAAckW,YACnBH,EACA/U,EACAt8B,EACA2sC,EACA4E,IA/BJ,4CApCF,+HAuEE,WACEF,EACA/U,EACAoQ,EACAC,EACAC,GALF,kGAOEkC,SAAO+C,YAAY,WAAYR,GAC/BvC,SAAOuB,oBAAoB,aAAc1D,EAAY2D,UAAQY,cACvDlxC,EAAWE,gBAAckxC,mBAAmB1E,GAC5CoF,EAAiB1D,eAAa2D,sBAAsBzV,GAV5D,EAWQ8R,eAAa4D,uBACjBF,EAAeG,OACf,GACA7D,eAAa8D,oBAdjB,eAgBQC,EAAQ,IAAIhW,QAAaiW,UAAU9V,GACnC+V,EAAaF,EAAMG,eACnBpD,EAASmD,EAAWE,OAAOlB,EAAU,IACrC5lC,EAAc,IAAIgZ,cAAYzkB,GAnBtC,UAoBmCouC,eAAaoE,oCAAb,aAE7B/xB,KAAMyuB,GACHvC,GAELlhC,EAAY4jC,iBAAiBt1B,KAAKtO,IAzBtC,eAoBQ6jC,EApBR,iBA2BuB7jC,EAAYmxB,qBAAqB0S,GA3BxD,eA2BQ1vC,EA3BR,OA4BE6yC,WAASC,IAAT,2BAAiC9yC,IA5BnC,UA6B0B6L,EAAYoxB,6BAA6Bj9B,GA7BnE,eA6BQ+yC,EA7BR,OA8BEF,WAASC,IAAT,yCAA+CC,EAAUC,mBACnDC,EAAmB,IAAIvX,EAC3BqX,EAAUC,gBACV5yC,EACA2sC,EACAC,IAEekG,gBAAkB,GArCrC,kBAsCSD,GAtCT,4CAvEF,gFAmHE,WA4NE,MA3NY,CACV,CACEE,WAAW,EACXd,OAAQ,CACN,CACE96B,KAAM,QACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,UACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,QACNhD,KAAM,UACN6+B,SAAS,IAGb77B,KAAM,WACN87B,QAAS,GACT9+B,KAAM,SAER,CACE4+B,WAAW,EACXd,OAAQ,CACN,CACE96B,KAAM,OACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,KACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,QACNhD,KAAM,UACN6+B,SAAS,IAGb77B,KAAM,WACN87B,QAAS,GACT9+B,KAAM,SAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,WACNhD,KAAM,YAGVgD,KAAM,YACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,WACNhD,KAAM,WAER,CACEgD,KAAM,SACNhD,KAAM,YAGVgD,KAAM,UACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,SAGVg/B,SAAS,EACTC,gBAAiB,aACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,OACNhD,KAAM,YAGVgD,KAAM,YACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,WACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,UAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,OACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,WAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,SACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,WAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,GACR96B,KAAM,cACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,MACNhD,KAAM,WAER,CACEgD,KAAM,SACNhD,KAAM,YAGVgD,KAAM,WACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,SAGVg/B,SAAS,EACTC,gBAAiB,aACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,QACNhD,KAAM,WAER,C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AAQ,CACN,CACE96B,KAAM,kBACNhD,KAAM,WAER,CACEgD,KAAM,SACNhD,KAAM,aAER,CACEgD,KAAM,gBACNhD,KAAM,cAGVgD,KAAM,aACN87B,QAAS,CACP,CACE97B,KAAM,aACNhD,KAAM,UACNsgC,WAAY,CACV,CACEt9B,KAAM,OACNhD,KAAM,WAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,aACNhD,KAAM,cAKdi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,GACR96B,KAAM,cACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,aAER,CACEgD,KAAM,SACNhD,KAAM,YAGVgD,KAAM,YACN87B,QAAS,CACP,CACE97B,KAAM,WACNhD,KAAM,cAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,cAGVgD,KAAM,qBACN87B,QAAS,CACP,CACE97B,KAAM,QACNhD,KAAM,cAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,gBACNhD,KAAM,WAER,CACEgD,KAAM,mBACNhD,KAAM,WAER,CACEgD,KAAM,yBACNhD,KAAM,YAGVgD,KAAM,4BACN87B,QAAS,CACP,CACE97B,KAAM,eACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,eACNhD,KAAM,WAER,CACEgD,KAAM,mBACNhD,KAAM,WAER,CACEgD,KAAM,yBACNhD,KAAM,YAGVgD,KAAM,4BACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,cAGVgD,KAAM,kBACN87B,QAAS,CACP,CACE97B,KAAM,YACNhD,KAAM,cAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,GACR96B,KAAM,QACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,aAER,CACEgD,KAAM,SACNhD,KAAM,YAGVgD,KAAM,WACN87B,QAAS,CACP,CACE97B,KAAM,UACNhD,KAAM,aAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,GACR96B,KAAM,oBACN87B,QAAS,GACTG,gBAAiB,aACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,cAGVgD,KAAM,iBACN87B,QAAS,CACP,CACE97B,KAAM,iBACNhD,KAAM,UACNsgC,WAAY,CACV,CACEt9B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,mBACNhD,KAAM,WAER,CACEgD,KAAM,mBACNhD,KAAM,WAER,CACEgD,KAAM,qBACNhD,KAAM,WAER,CACEgD,KAAM,qBACNhD,KAAM,WAER,CACEgD,KAAM,2BACNhD,KAAM,WAER,CACEgD,KAAM,eACNhD,KAAM,cAKdi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,cAGVgD,KAAM,qBACN87B,QAAS,CACP,CACE97B,KAAM,QACNhD,KAAM,cAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,cAGVgD,KAAM,aACN87B,QAAS,CACP,CACE97B,KAAM,SACNhD,KAAM,cAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,cAGVgD,KAAM,cACN87B,QAAS,CACP,CACE97B,KAAM,cACNhD,KAAM,cAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,WACNhD,KAAM,YAGVgD,KAAM,oBACN87B,QAAS,GACTG,gBAAiB,aACjBj/B,KAAM,eAred,0EA2eE,W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GAEX,CACE77B,KAAM,cACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,cACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,QACNhD,KAAM,UACN6+B,SAAS,IAGb77B,KAAM,OACN87B,QAAS,GACT9+B,KAAM,SAER,CACE4+B,WAAW,EACXd,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,cACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,cACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,QACNhD,KAAM,UACN6+B,SAAS,IAGb77B,KAAM,OACN87B,QAAS,GACT9+B,KAAM,SAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,iBACNhD,KAAM,WAER,CACEgD,KAAM,sBACNhD,KAAM,WAER,CACEgD,KAAM,sBACNhD,KAAM,WAER,CACEgD,KAAM,yBACNhD,KAAM,WAER,CACEgD,KAAM,WACNhD,KAAM,WAER,CACEgD,KAAM,WACNhD,KAAM,WAER,CACEgD,KAAM,UACNhD,KAAM,UAGVgD,KAAM,SACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,QACNsgC,WAAY,CACV,CACEt9B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,aACNhD,KAAM,cAKdi/B,gBAAiB,UACjBj/B,KAAM,YAER,CACE89B,OAAQ,GACR96B,KAAM,qBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,WACNhD,KAAM,WAER,CACEgD,KAAM,aACNhD,KAAM,YAGVgD,KAAM,OACN87B,QAAS,CACP,CACE97B,KAAM,iBACNhD,KAAM,YAGVi/B,gBAAiB,aACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,gBACNhD,KAAM,WAER,CACEgD,KAAM,sBACNhD,KAAM,WAER,CACEgD,KAAM,yBACNhD,KAAM,YAGVgD,KAAM,4BACN87B,QAAS,CACP,CACE97B,KAAM,eACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,eACNhD,KAAM,WAER,CACEgD,KAAM,sBACNhD,KAAM,WAER,CACEgD,KAAM,yBACNhD,KAAM,YAGVgD,KAAM,4BACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,iBACNhD,KAAM,WAER,CACEgD,KAAM,gBACNhD,KAAM,WAER,CACEgD,KAAM,sBACNhD,KAAM,WAER,CACEgD,KAAM,yBACNhD,KAAM,YAGVgD,KAAM,4BACN87B,QAAS,CACP,CACE97B,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,aACNhD,KAAM,WAER,CACEgD,KAAM,eACNhD,KAAM,WAER,CACEgD,KAAM,uBACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,UACNhD,KAAM,YAGVgD,KAAM,gBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,iBACNhD,KAAM,WAER,CACEgD,KAAM,gBACNhD,KAAM,WAER,CACEgD,KAAM,sBACNhD,KAAM,WAER,CACEgD,KAAM,yBACNhD,KAAM,WAER,CACEgD,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,gBACNhD,KAAM,UAGVgD,KAAM,cACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,QACNsgC,WAAY,CACV,CACEt9B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,YACNhD,KAAM,WAER,CACEgD,KAAM,aACNhD,KAAM,cAKdi/B,gBAAiB,UACjBj/B,KAAM,YAER,CACE89B,OAAQ,GACR96B,KAAM,kBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,WACNhD,KAAM,WAER,CACEgD,KAAM,gBACNhD,KAAM,YAGVgD,KAAM,OACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,aACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,eACNhD,KAAM,YAGVgD,KAAM,yBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,eACNhD,KAAM,WAGVgD,KAAM,yBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,GACR96B,KAAM,qBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,GACR96B,KAAM,aACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,GACR96B,KAAM,mBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,GACR96B,KAAM,mBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,WACNhD,KAAM,WAER,CACEgD,KAAM,aACNhD,KAAM,YAGVgD,KAAM,cACN87B,QAAS,CACP,CACE97B,KAAM,iBACNhD,KAAM,YAGVg/B,SAAS,EACTC,gBAAiB,aACjBj/B,KAAM,YAER,CACE++B,UAAU,EACVjB,OAAQ,CACN,CACE96B,KAAM,WACNhD,KAAM,YAGVgD,KAAM,gBACN87B,QAAS,C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M,UACN6+B,SAAS,IAGb77B,KAAM,UACN87B,QAAS,GACT9+B,KAAM,SAER,CACE4+B,WAAW,EACXd,OAAQ,CACN,CACE96B,KAAM,gBACNhD,KAAM,UACN6+B,SAAS,GAEX,CACE77B,KAAM,WACNhD,KAAM,UACN6+B,SAAS,IAGb77B,KAAM,uBACN87B,QAAS,GACT9+B,KAAM,SAER,CACE89B,OAAQ,GACR96B,KAAM,UACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,GACR96B,KAAM,eACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,UACNhD,KAAM,YAGVgD,KAAM,gBACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,YAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,eACNhD,KAAM,WAER,CACEgD,KAAM,QACNhD,KAAM,WAER,CACEgD,KAAM,UACNhD,KAAM,WAER,CACEgD,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,cAGVgD,KAAM,QACN87B,QAAS,GACTG,gBAAiB,aACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,SACNhD,KAAM,WAER,CACEgD,KAAM,cACNhD,KAAM,WAER,CACEgD,KAAM,iBACNhD,KAAM,WAER,CACEgD,KAAM,UACNhD,KAAM,YAGVgD,KAAM,gBACN87B,QAAS,GACTG,gBAAiB,aACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,eACNhD,KAAM,WAER,CACEgD,KAAM,QACNhD,KAAM,YAGVgD,KAAM,YACN87B,QAAS,CACP,CACE97B,KAAM,GACNhD,KAAM,SAGVi/B,gBAAiB,OACjBj/B,KAAM,YAER,CACE89B,OAAQ,CACN,CACE96B,KAAM,UACNhD,KAAM,YAGVgD,KAAM,aACN87B,QAAS,CACP,CACE97B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3xC,KAAM,cACNitD,QAAS,sBACTtb,KAAM,+JAIZ,CACExmD,KAAM,cACN80E,QAAS,CACP,CACEjgE,KAAM,cACNitD,QAAS,gBACTtb,KAAM,yCAER,CACE3xC,KAAM,cACNitD,QAAS,QACTtb,KACE,gEAEE,gCACE,gCACE,wCADF,oGAIA,gCACE,6CADF,yFAUZ,CACExmD,KAAM,cACN80E,QAAS,CACP,CACEjgE,KAAM,UACN4zB,OAAQ,CAAC,IACTq5B,QAAS,mBACTtb,KAAM,qDAER,CACE3xC,KAAM,UACNitD,QAAS,iBACTtb,KACE,gGACyD,IACvD,eAAC,KAAD,CAAM/wB,UAAU,iBAAiBswB,GAAG,kBAApC,oCAFF,QASJ,CACElxC,KAAM,cACNitD,QAAS,MACTtb,KACE,iGAC0D,IACxD,gBAAC,KAAD,CAAMT,GAAG,uBAAuBtwB,UAAU,iBAA1C,UACG,cADH,cAFF,2JAMyE,eANzE,YAaR,CACEz1B,KAAM,cACN80E,QAAS,CACP,CACEjgE,KAAM,UACN4zB,OAAQ,CAAC,EAAG,IAAK,OACjBq5B,QAAS,eACTtb,KACE,8GACuE,IACrE,eAAClxB,GAAA,EAAD,CAAc6F,KAAMtL,KAAMgB,SAASI,mBAAoBwE,UAAU,iBAAjE,8BAFF,QASJ,CACE5gB,KAAM,MACNitD,QAAS,YACTtb,KAAM,+FAER,CACE3xC,KAAM,cACNitD,QAAS,UACTtb,KAAM,oGAER,CACE3xC,KAAM,cACNitD,QAAS,SACTtb,KAAM,mFAIZ,CACExmD,KAAM,cACN80E,QAAS,CACP,CACEjgE,KAAM,MACNitD,QAAS,MACTtb,KAAM,gDAER,CACE3xC,KAAM,cACNitD,QAAS,UACTtb,KAAM,wDAER,CACE3xC,KAAM,cACNitD,QAAS,UACTtb,KAAM,4EAIZ,CACExmD,KAAM,cACN80E,QAAS,CACP,CACEjgE,KAAM,UACNitD,QAAS,SACTtb,KAAM,yEAER,CACE3xC,KAAM,cACNitD,QAAS,iBACTtb,KAAM,oOAER,CACE3xC,KAAM,cACNitD,QAAS,cACTr5B,OAAQ,CAAC,GACT+d,KAAM,4DAER,CA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","file":"static/js/main.8ecd6719.chunk.js","sourcesContent":["import { Asset } from 'app-lib/assetUtils'\nimport PositionHistoryData from 'bzx-common/src/domain/fulcrum/PositionHistoryData'\nimport { PositionType } from 'bzx-common/src/domain/trade.types'\n\nexport default class PositionEventsGroup {\n public events: PositionHistoryData[] = []\n public readonly loanId: string\n public readonly baseToken: Asset\n public readonly quoteToken: Asset\n public readonly positionType: PositionType\n public readonly leverage: number\n\n constructor(\n loanId: string,\n baseToken: Asset,\n quoteToken: Asset,\n positionType: PositionType,\n leverage: number\n ) {\n this.loanId = loanId\n this.baseToken = baseToken\n this.quoteToken = quoteToken\n this.positionType = positionType\n this.leverage = leverage\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport { EarnRewardEventNew, PayTradingFeeEvent } from 'bzx-common/src/domain/events'\n\nexport default class PositionHistoryData {\n public readonly loanId: string\n public readonly date: Date\n public readonly action: string\n public readonly positionValue: BigNumber\n public readonly tradePrice: BigNumber\n public readonly value: BigNumber\n public readonly profit: BigNumber | string\n public readonly quoteToken: Asset\n public readonly txHash: string\n public readonly payTradingFeeEvent: PayTradingFeeEvent | undefined\n public readonly earnRewardEvent: EarnRewardEventNew | undefined\n\n constructor(\n loanId: string,\n date: Date,\n action: string,\n positionValue: BigNumber,\n tradePrice: BigNumber,\n value: BigNumber,\n profit: BigNumber | string,\n txHash: string,\n quoteToken: Asset,\n payTradingFeeEvent: PayTradingFeeEvent | undefined,\n earnRewardEvent: EarnRewardEventNew | undefined\n ) {\n this.loanId = loanId\n this.date = date\n this.action = action\n this.positionValue = positionValue\n this.tradePrice = tradePrice\n this.value = value\n this.profit = profit\n this.txHash = txHash\n this.quoteToken = quoteToken\n this.payTradingFeeEvent = payTradingFeeEvent\n this.earnRewardEvent = earnRewardEvent\n }\n}\n","export default [\n '0x3500af8b0254046b06b5bb7397725646b9f2250b5109cb04febba939c84a5eb7',\n '0x9f81ff1ff0ddb3504d06e22a8443dfdb41c81cf6d55b4e93ff6c22e5f8f8bb35',\n '0xe93ac44aa76a8b4c9a913fb00abf395875974add365c53e7d0b2b17b0dcfbc9e',\n '0x4b3aa05a9937d59518dddced7a273a651ff1a9682bd5a1254abf51fc2b6fb50a',\n '0x96f7febbc410025c23093fd0e5881b01add5a1588f25881da22d1f236bbe7bc4',\n '0x7e12ef3fac8f5f68c2d4538f0b1f6677c2b1beaa0deb25ab6cf2592091142de2',\n '0xab5e72cb02543cb803ac0844480b352f2702bd799f47873afcabed38def4783f',\n '0xebbe1a30dd5c2d7933472eb23ff8abbbb4ed81d62fec2f9a01bee447978ed591',\n '0x372cb80093a2d39916559b39f41ec4253f6677e581653ade6b4dc8744f8d2d0e',\n '0x2f1ca0b4ac7c736626b0b1551cadbdcbeb34771427671c18680f82c4d203384d',\n '0x4e20d7580c62c5edad9826b5f6ecc01db1fccbec03b8749d31576d38eb788897',\n '0x4f08ce207d3e0adc366bcd8e3b5fbbf4dbe1b0640528ea14accfacb599d7b525',\n '0xc916adda78ee4a7e98d773cc8785afc7859a25e1449959d5683a08b8c954866d',\n '0xffad164275cecdc7b49b8b32d70679828fa59d61e5c57ddedc84b26ebdf1c91e',\n '0x4b56a77fd8b6afdcccca985926d22ecd4121a872804dd7cc5c94199b35741a17',\n '0x8982c0751192a1fbcc8d0b33a3b1dac9963deac8285846aeb39d1adc50f365e8',\n '0x3962a2bdc7ff6dad88b100da0477f975dbcc006bdd088c9c0620e8ecedfc710d',\n '0x52cabf79ecc79c52fb66c931834d5ba9abf1dc1e50a3c848a43d3d228afcc8c8',\n '0x8a2d7bdca48cd3bee4bfd890f699d458d9e8e45d80c100b39c6f8783281b1060',\n '0x4ee2a86ea20625aed290cbfb3f87628dc8b5201bad3520906149fe7735ff7af5',\n '0x4f1da5b32ab4b28f2bf8d0c171349415055263c5dc3f1774fc41c2bc86bfe066',\n '0xfed6084bf8a77a58dc9ea969888f94bbbc4392935b30dcbf5053263b16ce2f10',\n '0x780d23f7c70b1b604ae6c62625c4e48308a638d423683206b3824f364348d023',\n '0x90637bf7edc236324ede276a96c5d399aede5ff449f0ba8720f29009db25ffd4',\n '0xed7cdc7279d6ba62aa4d1b4ed6195b47a2aa73d53459fd7d76cfe01ea84730f2',\n '0x2f5eb456871eff9274b7f8d92070332d40ae3a714a8ccb8e0b6710223da38d72',\n '0xc8e8227088070425717546cb28d2a8935f3e29aa823d18dc55b33af08d145d27',\n '0xffaa723e830ccb9d8e9a0bd7728a1f5a116ba4b091172f82fba7c2f5fc6e460a',\n '0xfc14ae9219c9e0b5ae04bf8fd52f74cfa449588b3edc72be88b567286da09887',\n '0x25684bd87eb45ce89173df93c93cf21a8ab6fe69c773b3b4f427f5aee59e67df',\n '0xff95fec812bd7de48a2aa132ba746d61857b9b90bece00069c4831cfd0e6328a',\n '0x19f55ba4f316d45d714f41519a9cf71c55cb78c05cb00d6ddcc60e88a39f3e52',\n '0xa997e1c8a7ca5bcaf1778443c3b2cf3bef84cd949fa851149ef16651f6c7b1c2',\n '0x91add7005581a1805530ce8673e97c8d3ec2c54823895c526300b36ac5299877',\n '0xc3cf8aa69e5428405e77c8f57ce3cfea6eb432b8de26a001ff33ab0c38b8289b',\n '0x86b93770095f943ae89ae6705d506a0ef33d5ea8eb979d952016e00bad4fd287',\n '0xb5f4bcad572992ee0b86302b8db29c1c2c98b1a482e0663ce35934c2459dcb41',\n '0xa42063ce546bbaa0c521c08408060c211f68d9c5dd412f25186e43bc4fd87f9d',\n '0x6ab361fdc8c8c4d15903fac31dfb42eb8c5a87de87379f7e5b0cf5db0726012e',\n '0xee86db014e1ac52ff14debef228cbedb485615a35c839c9170cdf28e751cd6af',\n '0x980a73c752722d83417470483f9badc176ea723b7535cfecbff5b734aeca890d',\n '0x596e4c76af31313ef7f5f5b1e868dc453a619cb9c70870ec91b24c6a05751436',\n '0x0674ffe98bf57f94fdcc00d36c28bbf2c15463cd1390b0de4811331320ff455e',\n '0x2eaf382b6853fa01b9487762e8a1e571b563785455b2a57455b87b6f2e1a670b',\n '0xe5e882c7277b32a62423f70582e070967ca148e2ea5151d1801bccb3e7703d47',\n '0x06896283dc03d0252e9c7c796a765f65fa761a9ae6a9f693c246fe63673ff3c1',\n '0xc0f89f91b7a29230cb86d19e4e28c156f33acf456349ca97f4a0ceb2843535c4',\n '0x6502ffdff9bced76fafd1187261a1995cca8a002daeb71b60ad3fc6c7251f945',\n '0xd460d8959630733abb017a97a54f638f9ed56cded3bcac8ea3125c11725e4ab3',\n '0xedbf1d20caafa0659313d0dfe276db681dd17d64937a3af3235b4280e7b1bddd',\n '0xd1f5f51691721167778d0e620112ce3f522d7cb35fa3fc27b79420765f4ef4d9',\n '0xcf10ec70feccecb681996dd3088129f23bbd48f175d486f88528fae5c8a41e81',\n '0xa28069d4bc7d7c54fefac365b6496ba18045e33664d97308e397074bd7ea006f',\n '0x974bb89407c6fec5f334d1956d62bf900a63928fd7936f32b1cb0c14343af5cb',\n '0xde0c419ce4c368e3f593ff30a7f4001d20e4f83d4aa219983ba18510bb59aa86',\n '0xe7910c565431160a3d6cdac821dc78ae069c9901907004fb3d4deec30f4fcbad',\n '0x4a3e373f6edbc3ad7e34489198b4a0cb4647f699b3635007a4ef78be79fda491',\n '0xc68f01aa003cac2e6d264985cb0f573c77e54feb9d802c57e0baf5b58f982656',\n '0x21b9a79eb21dc7bee3ccd4c12d71aec0ccf0ddfc8aebc3eb6b68c0877d4f0b89',\n '0xbca23edc01430068e7abc1c6d0582f3535e0f248a1d97c317b2bf352dcbc79ed',\n '0xaadd3ced8e2a8703a6b680ed3237cf578a384853f52eadfad566822834f92800',\n '0x1ab2b66b796d31b4754544966cb5855c79485b5e0e45fe1d8a826597a38877f6',\n '0x4c3be8b9bd02a8874bb522e7305c660c48726ac8234631463cc7bd8270d63a1a',\n '0x449e03564611dbb31d37d3af363d9a37310d1687915a76461f7ca79b950dcdb5',\n '0x64e2840894aed52f7b31ea84e1c991fde692d2c1057be570a49655817aa52072',\n '0x09b120b4b901ac8c5a85c638c9fb2e4728abfc5d51212642227d2cd715d9d491',\n '0xd3b48ea3e74efa49dd1813d4cdac5fd8f2c2f28695e61cac043785b62498a82b',\n '0x922134f0f5ef351fa224402be7f6eb2217d81fed2f2043c6f3e826b77902aae9',\n '0xc7fb7abf0b809fffcc2541682fbfca6f792da4dca110ac284cffdf1268617636',\n '0x09ee3564999db8d93e01e3c1149d9f5627cbc9f133420a444b0218ba3104ecff',\n '0xc0e4551a286cfea2d67c7044e7f3cc633639d4d638da75188ed4136be079865e',\n '0x4b1d987fc973a6e06b26abaae408dbf4bdc7e60b017dde2a902d222208d2d571',\n '0x95b9f2b508a202d17bead09490505aea6244bd60f7f42409585476d26aead4e4',\n '0xc395dd87438f9ebfcb367400f5458e007f88b9ae2c7f480762783d6eda264cf1',\n '0x4ceddd7f7a4b45c28480afffdd193d6e35929ca285591e3808c8d7123f8abe51',\n '0xb9460c972b769caa30db23d1790f306c775678fb8b18df24e465fd474cf9020c',\n '0x2d58db442f791e4315def2869df3bf816d8e7755eef6034fe11ea8b148b34e20',\n '0x60ffe56699aba9931d4805c9c6b9582e95022c485a7cb684d4c670137451f6b3',\n '0xa45b0862556fd1e394a782fce61152ef23ffe1b149642560541373486cdd6c54',\n '0x1d3d281e75fd0852511776033776f92d37bf9cb84b5f251c913c77b2ea4a5f1b',\n '0x4b1dd61ec671f2fc64453655fafdb19aa34c2eeb36e505a08b3ee303c6d4bc39',\n '0xb0ab0d15a9a092ed2b14ca049bff2555b1703849cc2b7b7af2322aabf51e6de9',\n '0x79da7467d4d6d08e46a7f604773c5357e99957856463dae6b5bacf4b45ab3ce1',\n '0x15b63bcf5d2ea744f733dd42140f8d60af549adfb75f61ae5e083f87d86ec96c',\n '0x4b88f039893d9d1fbfc49e451866ca17d48d75df4499c61b9fdc1427c2b62603',\n '0x4c2e79edbafc06c6f7f2f77e2aede35bbc8cf5810c55d4a527114718e219dc60',\n '0xc7835ebaf91f75a1b122109049219046442eadc3cdb008918065b2927b528901',\n '0xc807830a5fd7d1ca4d10928316d29e3cbc37de416a80a73286f01fa727bb3daf',\n '0x7e966cef1326a99e6e3eea725b1552f58d4870cf7515bc4edeb1186b66b7495c',\n '0x90dc68489762d805f6068ec4b53909173c7e99568ad81b6bf26f5a0fd53ad4df',\n '0xd42153baf489c66854accbbdc534ee0fa87483167fb58e12574e06e2ec526af3',\n '0x7fdbaa1fd0fd7071b327030e3ddc80436019a6cb5094ab9cb8dbc350364233d9',\n '0xd84231c4016fed0262487bcd0e565099c492e28a9ad9231aa26399394fcc933f',\n '0xe57b9bf793833205db92092e8b2b7da5f92ebceccd5c6a2858ad3a32d2ca9625',\n '0x06af09f1704b0b34d4979e04b234320bb4098c8be14145206ce8a9cda8acac86',\n '0x85744e101cec7a5e90f9df0cc08b6b6f14af45132df7059d0af67e319534c030',\n '0x5d3e183efe88cc5d06f950afbd345b6130cb6cb947ddf86d8eede44727ed6093',\n '0x8c2c9da530f134cb0985031541783f780a5fa627ac153d317ac9ad84b99d1ef2',\n '0x7e371048d42a9ada4ba0ada7a409791504960e55d02105a9e780cccd1eee7be0',\n '0xfd4cf0cd55ecec34452b93c101a3e504d28d183c817fc13761e0a99a86e854a5',\n '0x94e5299e0344d3f2c57658defe12f35e815e4969f51a1009bb7a1701712e988a',\n '0x9025c4cd762179916e16d66c8b96eb0bd5d2e8991a6381345f7a1fcdc7584804',\n '0xc5b9c70833630730c42e209491bfc8f0a1476af77e1c8922aceedf9b06d80cd2',\n '0x2a799677193e63fbd9eefad77424ad4fc4625b8528f3a384c1a0f79d1b09b180',\n '0x6fcadb5d38942ce4db2bf67533311ddad21eb2fcdbeb10660f1e15039488b708',\n '0x4c93c4242a8056021b5920012c799ce29efae39a66794c1efd771934ec6cd307',\n '0x8750ef5314b77cf75ef42b002950444c1e599cbe65471ff5e3cb39fddd4be012',\n '0x8b73cb0ed5da8874222bcf98c2518582a8d2653820046a38d1ccfdff0e8489f2',\n '0x3bba0ccbdcb293c465868dbf1d5ae4784f712313e058a7f5d500b364cb35bed1',\n '0xd2f500e337ee1a0aab6ae454d255fc873b2d6ac82787425f92a7323362ff19f0',\n '0x4015d2b9abd79481d61f3f19e68e55b96ef7db49e544d576cf189f2311f202b5',\n '0x3c74cd00b0a962b2f01eedcd5561dc79bc213242ac9c8fc35dd6a3ad874e8084',\n '0xf492902c6f74c3081b5080be8ebe77d1e94dfe12c54809c984b820471b0fe02a',\n '0x7e4a32c69fb70f323b2e7ef80801309607d7228de8d8027874afb693a99cc212',\n '0xeb5aae3d6f39888a7f3e79953f9273e046c49f2baba039a56eccdf8b1c4c9aa5',\n '0xb41d80ace688fac16ee40cb656d85b9164e999bb41cdcb1a332b7a3c7f4250b6',\n '0xd6d2c703ea4ce5701627f85c921db0475369ab2781a4ed90a8277c0142dc1f68',\n '0x319717fecdb6196eb93fd6c1e9bba6ee7e1f621108e3a34925706927da9ee7ab',\n '0x2d2e879bc717bae127b3c2ad5ca762322dbca3f20702f3024f6bce0f4fdeeb45',\n '0x6ed98af0b7916ee0592aa2991cd5bc06df1807810409d1c15119e80978d8fab7',\n '0x1962f0290da043d8ae7bdee5dea087fdaa73517540045f7e13f88cb8e90e9f28',\n '0xa4a6983526e2c32191a60d6f2d257bd089d8c842547662b710708129d1200640',\n '0x2af4050e2f42f96217565af2276cdacdb55f2e751f355a665ad8a3903e393e29',\n '0x71bbd63d3b840c8335db5ac0bcda8036003b9a232439822ce1c441c4a6f0c9f1',\n '0x6b8fcf9b4a29726c41539d46dde413d28da76e4e4e033a2df24da9f28c0a8920',\n '0x8c3986aad53233102180d84c4a0b29d5a0c172920a0de6d17ff6773af0853af4',\n '0xffc4ecd9e1cb794c8aab265125caf1995d034c5d4b5e85ecf6e46f334f440b66',\n '0x48a726986fa7d6ecd596196b5f5dcf449e571789b5476fccaaea2925322d283a',\n '0x7cfa186fe4ceef8fe2d7bf2f5f7146c7e9930eebc99b427f10abfb264f11151f',\n '0x91055c25a631174f877f93cd95036ca542b4708256a67f33ea91345dbff9b2bd',\n '0x80643de6d42a7a14c99541aea86b32fabb38e7a0a2ba79bd1ab496f0c7fe0800',\n '0x03928356ad6a5155d607b20b9f22c163caa6967fa0bd0778f3e6be16504ff075',\n '0xf25b3f1158849548fd5d44d55cea87f6b5d50333fe5844e86dcccb0ef24fce32',\n '0xd17109fd9f868d8fdff5a96455b2d686b5683053d8b2bfca2026a785c1c07304',\n '0x94cfb61734af8c338409fa2b85943cf2403f94e24d92cc248398bcbf7cfd08e7',\n '0xe36b23f27d55045ea93ee7a96cd0d86db46d64f8d2b5a0ac979941d9bac0f414',\n '0x6e04a64412f99be040f46f92a3e4a116af84cd54ee5ab4452848c35b936cb37e',\n '0x151c6e070874403f3817116b5f7e4f647dbfaba9af7c6f65ab04ff407e4b44b9',\n '0x9ef7f90865517959012e2dd5e658ec566f6744554c5030993de3a26b3afc98e0',\n '0xd2059287d9ac4f7c3c3fa6110efab1c91841991bfe355d2c7ded4ccccaee1b43',\n '0xb8e59e15effbf8cac2653efabe682c2a978a92f044d0f8cbe4ff11dcd5e867a3',\n '0x9aa659691c73d386e7330e6ea5b98548ec9a849598f395e4e65546c4a07f8bed',\n '0xd4cc8135d5c79fa8c827c51fa48b7abe0b14953df06d05f211de68299aae1715',\n '0x5290214b53d1a844fd40ef7ab0d6802904cdc84e0a7cc4bc72d060f97a3384a6',\n '0x8f03c66152778834046c0e3b5f1ff3ac42e0c65d48f71a16e0800bc379573349',\n '0x8d696f7d88bcded44dd32d26b4050fb382e632967d6ca47a2210db1db6b70dd4',\n '0x6d6953ecfcfc6ced0ac9e91c104ce4a2d642843a5d2ac30f517e2b619fdcdf2f',\n '0x5dbf3bdb42858b2db4ee0486fa88b3d41063dfe58409bc8b9449ad10691f52ce',\n '0x6aef85fe9f69fa8d28af5d7e213ca1b78a83a9f4aa027df3e5168a413deb801f',\n '0x7e05f2c3dd2dac9909f5a0ed6ae7bf1d2d42f440755fc61134a8c4c49e1c8226',\n '0x1384a73d7cad0414d33d4f3f27001316801ab4b590171eef9137115746c4f72e',\n '0xaf4632241c025a53d6116a42c1dc1473058ab95260c2f5d912511727139cf52d',\n '0x37e760e25f72751630fc4c44c7fefaba09137a2e8ea04b51afb7f3523274a716',\n '0xa708e5ade244d5bf1de467fd228ae094e94c7fa2645cc2ecc8dbbc5f29a8c95c',\n '0x04bfb81dc095d12558a71a14bd9337b9fc327e43b42b947895f894222bc7a0ed',\n '0x4f4164191ae2380949854d73a9b69ba1facfc9d39ee02ccb8f1a81f2cca9dc72',\n '0x0c652f289164e405d6b216d9b956eed5f09dbfa32111dd109c62ec275d3c0ddb',\n '0xe8e1b2247c1282b20b4a4b7190467d0f3012361a0d6a748386494a26cc9f3e2d',\n '0x358bb8f6e10abc3cb0c777edf3fe4501e096220807560ca88c9200805e960b01',\n '0x178ccb860e711abe7981a19ef483335bf4d302e6d466db3640b28d18c9c36dca',\n '0x7eae506abbbf373a418d1127111c45d9c223bb53ff677049594ee61161568ff9',\n '0x8fc18bb6567631cb4ba5214f14cd034de8d444e4e62bed1fc3cb6c77a401e3b0',\n '0x5f2dabb822c0a97a28a1f43c33906c751b4baa7191d8cef2b30511aa7afbc64a',\n '0xcec7aa146faa42ea00381fd7f1d9ec93261553f0ac17688082d9922cf15e6e79',\n '0x79b2f5c3f9d6bf3001ec399d7f30e9b3b2b89a372c31d6e3dbcf9c53b80fb1f9',\n '0x9671f37cb3b219b825809af2752ba6eb45a6796059c3927d213de107467a1f6f',\n '0x0bb48b8be33ad22b164f0038e9f93c7d4087f07d3b2998a2b0e04fdcb6acff79',\n '0xaed129f179233eb4b787653b7b47808825802549dbae0ed55f10569540e96fe2',\n '0x2683650503ffa7314a39b615da656727169e63fcaead38a3eadcaff20f51c241',\n '0xadd24722224f663b3ddfb12eabfab4c4a230086587982da9e36b2393f4bfabcc',\n '0x08b8e5b3c37f08ee7bbbd643481e9e68f2e96d96ea634546f0ca9e3398fab571',\n '0x5374a56b568b0c19ea82fb96416a4bfb0edcc7cded05a965b6de5d8116cd16d1',\n '0x32878c7d6db3986790abc3cb84e62213b8effaa304ecd5f1bb8cb20a61bb38a1',\n '0x9c30ceaf9ed59e9a5909dd6a666e3c906914227765ada2e33273043dc1c762bf',\n '0x31d4f86c9c96e271dde28df1450519e127a8ee3ac493e3b7fcfe3dee81232480',\n '0x98b93a880406109f142b9a70931c58191e97ba5ed202e7d5672518b3e979e8e2',\n '0xe7d02e8095614ab3a56d012150c6c587de64ce0778dd2107b07f2a64b4365e3c',\n '0x91b440a218ab64380ddf254b0082be8f2d480d9c41d517ae8cc34d6720a3033e',\n '0xaeba36fcbf4b03146fa31ad84781f21fcf7a437bbb0020e0f5fae10a3ffb0da4',\n '0x0f04c39f83a590449565ad9c26acb416a6c23a364d2a8d46d9491dbd6835bed2',\n '0xb1c7bdbad1a95a61b95da1f21788cef36ec201a523a764f71fb9c0127e8015bd',\n '0x8bef7bf41e0aecd24baa05c4603b1f737b4ccf8301dca925fd2d520d63d6df08',\n '0x0a2e3525f325369d9db0ec08a35e2d09f17f7597155c641446570b04f6d70f86',\n '0xbb0068fb8604f11a9d8aa20dc919b832d94b3813ccfe9168be8bf4005b906aeb',\n '0xbe037b41ec0c609bc70c60a279d65bf2ff6b310425466f95bdd0ac0cc4f99e72',\n '0x96609f6ffa70e35b694d20341c42cf12c038b357bdebb1885e0645eb77bf3ca8',\n '0x22ed776cfd13c3ea28cfbd3bc972493e94fa43d72a3a249119357ec44365564e',\n '0x67dc1facf4549125016eb71d05c82b63d516fd8549dd70eecb0a8c90dbd750d3',\n '0x73578c89b4e09e7c636ecd00e7832007bf05cb0d726b66de4f9a86a52c2fd270',\n '0x98b63add25dddebb7ec5dbbd793c17ecd8c99d95a9b3338cc367f8385d78cee8',\n '0x72add3c57cafd7255a6f538431b03cdbb610c7dced7a846c730a0bc5f4b33152',\n '0x86442afff14743f42ad0b0f33cadf4b2dee8dab4826f6a93d3d80b170306a9a1',\n '0x2cf2afd6638b3fca4fb7c6627db5cc8b13196704e9b011a9cdd6ed6c6e2ca68d',\n '0xadd0bdd4a1a2c1c30669938b99db360fa57f794843329fc3df5310018c331cd2',\n '0xa4bcd37a897bca4e9d2b58b56951b07aae12192f95c73c3d9a4e61e933a01c2e',\n '0xc0fd1db2f134a032c6545648373768b9d9ff13005178113a23e00fca6ad85d99',\n '0xd2ec96bf1af2836ce5a9001ced59b1871d5f30c152b0703468aeaf3c94f25464',\n '0x1856da5d2e29fed255b962637dafbf75bf70e60fb1dbac57833d066b4687badf',\n '0xa8affbe9adf813c161071579db827608e1966a0313050b7b006349cceb95190f',\n '0xdd46dc7c036383abbe9a982b18ad9ab82fafb447dd74332643c5b59e2df61480',\n '0xef3f9f0de6d5c7db0d45ca1a75b425a6a4d5cc4176cff962d14f35a7e8b06b84',\n '0x339d32414f28bbcd68b9dd0bed80a3016f8976c60ee31bf4702ad2d72de37172',\n '0xea3ab1eb3150061d1b90dfc7e3836d4e69bce3818e1758a667390ced645ec7c9',\n '0x6002e125d495ec733ac6f40dc38d719dbf229fb08e652caa8c8bea73753f8171',\n '0x26b32e8bc12b8bc96632324e145728cc16e676f5a4588d83a6e59c28f7db113e',\n '0x0bffc04d02d9a85bad428e662f6632f4becd8659aea7ae08ddd52fc26436e200',\n '0xd6d2a1e109d6ba981411a8d51532ffb03fff42ac86476f955940e27327ecdc98',\n '0x1be4dc3eecdafb85342cd024ed85170c845e1cf9c7022f259fe14bc0c83406ff',\n '0xaf67974041f5d250a0f919dc3820a675eff9ee41dfeed3465f4247aab4d71f64',\n '0x4b47e1d3bc7f4119d14114695dafc27d052ae8f4cfae9c891f8f174254efaea5',\n '0x5e17a6898ac71d233dbfdf0d46f04745412e1a0e32722e8948fa547cf59bd6dc',\n '0x649773313d10abbc794c83dbfa6f8651b764c696b860d12888000ea18a3bd89a',\n '0xddd5789d533c99a269138f6cf08db4d0ae20f86dda580e0f4bb083b2dfe43e5b',\n '0x57792fe65ead043892987e4c03094c9ca1fd371b4342e27b86ace639cb09ba11',\n '0x08314905fa7d664d745d951a784428fa4897de42957f387a2d52c1952552afe1',\n '0x2338c5d05b0c50d17a71068ede4c15b1b35dfbf5d989dd2f7f55de582473cc0f',\n '0x0e45dd19f3ef817de8f289ea48ba0301371c61f920212de38b1422fdeeb07cd5',\n '0x3efc18290f86c44e90483524453bcbb5b40e19f8da5bbe3b8f6ec61bf0c16f3e',\n '0x6b9413c10bbaf8389437a0a2ad021aba4c0e3c11a6ff525eb03a531d08a6c429',\n '0x1fe8a8aad912240c265435d470ed21838d966dddb5dcf85ab706ace9ba687fc8',\n '0x273854d94e5dce8f19c8d6d595533bb5bd6107b52816e718dc2a55e825addca5',\n '0x5aaee02424e7f808cb6fbf6f82465dfff0bfed2071040ef592c13e925de482bc',\n '0x1a91f059685d8cccae8fb8af406ad1429b8049fc20cfec713811562a02cfc29b',\n '0x7475ef29370109b3ff02a2f6f344837316698c91262ee3259cdda7610b0b8260',\n '0xc170f7dfb818969db3a045ec855c9fe54d3ef2b0bb8fd374679a8ad605be6538',\n '0x2557ef8632d5f6acf5690f123e669557cf35affc65aa2eb05f29c44304d92ced',\n '0xb3f175cd2e702caa4495000cf03e8616fbb0de2f80e44533680c63bcf450fad0',\n '0x1098f7fd1f7095c51f7e3e67a333190c33b2967f3f098ef3317883853aefc1b2',\n '0x2914cbae828b5275e715a3298694a1e16ada0033d41e652855fdb8e5827e315b',\n '0x82ac41727ebcca3bc8502149ec24e9d718dd4310152f4b92df06c2f91106c3e9',\n '0xca611b2a05d513e1271b09fdcba40c7ebfd7b189793c14e35864fdfec30ef997',\n '0x4f6aeb7c48cfc41ba46efc9ce3d2230eb8f1d6095996994203e64f3f484ab616',\n '0xbba349bbb07c210291258d62ab731de682db43e432716075a2d229533cfa0bb9',\n '0x82fa59974e96f0954205c513eb46236fc371ca14c0398abed5c66ee3a37bd089',\n '0xfbb0ba4267b4f21f5c81c2c6795604d91f92bf9a5029e85d5f500279b48c3aad',\n '0x3c4a898984aa2f181094a8916dfa2f20cd2f8eb91f253302ee6d111d30d1c5ea',\n '0xb816c98a8b71dfd9af044305a0ba067f5ff72cb81e03c9775eaed6c79c176c31',\n '0x9d2aca600309d8fb1e6ccf77180e08035d79d36e759b79f9738dc0542ac602e1',\n '0x638d746616c4916702c1638bbcd10f607cf2c0b8d066d5444e2a2f3ef0f879ed',\n '0x1f2624311f0b0c8d15d5d80348392a7914e96977ce2ca306e08a6d6d6ec21129',\n '0x34f6c86bb84fd4c02da536e40736f041576f62fc193ee0accc7c80a9065bd3ec',\n '0xabc312f20f1515fb5f45ac30fea78414ee00bf74fdcd774853a306fd5cbebe57',\n '0x5894d5c0679fef0b5a6b0ce60eda12b88c98f8386269b1c54c802a8e52130c0a',\n '0x76697c6804f10255d5973782e39834e464272b7220e62089a417e359adf7f86d',\n '0x78db3a2133b9a4e0f143836d2a004b5eb861f5ebedafcadeaecc168104896bf9',\n '0x37864c6b9783943750051ae49f8cfd3c18318a5d6000f28a7f71ee190ff1df60',\n '0x047a086e3552ffd6891bc54e877f39f109ca93846f9e14eef82323387358b977',\n '0x452524f9fd64494e9ac02b1b4f72276479af4bb928b98b1e1d5f0640b95828e2',\n '0xaa60fef87200f1a5cc98f78552a2edd6a37e4f18c48ad4967d0e24b1a89a30a8',\n '0xe98da86523fbc1095ca2482d4c7cabed91f09cf2c3b854b3b72af0abdee57af9',\n '0x98ba4a824a9bbf46e6114457749189c7858b6f4993710aaa71cf4f6aa1676f46',\n '0xef5b5fa8044de0beb3b37258ee07b0bfab822d14e275e8f913d4d95bf4dc0514',\n '0xee687733b7ec57a315b92aeee2a26e9149cc9de9884b61481e0fceb041e5ecd8',\n '0x1fc2f9fc12f479198a86be3604de1a4ddf3ece078b921d6f94770a5bae8e6d33',\n '0x83cbfbf22ebedeb6426129e747bdaa430046405243ae180735a9c03eb1cc6d8a',\n '0xe60bba02e149644fa18c6d34343366c0db1147a880e2776f42b998cf863fbe61',\n '0x85fdf96ef105a2175345eca0fa87c409072aafc00d66576761f5ae556d5955d4',\n '0xaf49e502493393e58d60f0e35e8134609500d70bc735b199921e1bec1b0243c4',\n '0x32f8c9105b6a9db5fb87684769309394729d80ba3d55cee3922d001a29380f81',\n '0x007431b612c084868c7552bfc6888a6013e30d0ea288db30ec2bbe7356e0f874',\n '0x461c04740ad8848c40869b2b880ef396689092a84d94aa92ec6e0d667508a9be',\n '0x55e68e193aa1ce52449ea41683b9b0ebf5aa4399fe6eb6f55cf4624db83493bc',\n '0xb5c1fc9fd4efcea5a50befff3074a8ff57ebe2e75c1250ad3b46fa6b51f8dc78',\n '0x7fb8a6c46cdd8154f20f773618ef2bb52e4fee1e0af6fb567ab872c8d6e9e573',\n '0xf1f0b1b90634244d58fc84cfc83893f74e8b219626f349570e101cc76192c4ae',\n '0xdf17b49bf408675b1fb704e460ae90733acac962a6af6f41d2e7ab7c3b58d26e',\n '0xb3bf76db95f7561bd0d6984896d11805daa908740e8f08f8a29733d918e0a0fe',\n '0xdd3d2c308729be1e2a013b936f2df7fce92668cc2003544a04f7bf02f14562c7',\n '0x3649f60c361936ea36280937cf10df6f21f48c3bbd202b5d30f13040582d7f92',\n '0xaf2a08510d47ebc5f4b1595aee128cfd7fed22952c5a76af7a06f8e781bd5e5e',\n '0x9c3621f717663e7983d858b694f332a2117c9452f9e97f1d00e15d236e5a4e67',\n '0x5d09e1c1591c69721d0bdaed230633f0e135e31842272ad6c4056fdece5fb6ca',\n '0x3f0e9bc4fe0113f9f9e76b55de95f8233dd5ba12462aa3ab63512b1e4cdff744',\n '0xd39a8fea72663015fc33f5adce94e0ecac1bb0873ef8dc0aca42c358899a918d',\n '0xb88321ab73056edf232b559817a39d68f8cd867a54a29978e0e7460d6a3ab4b5',\n '0xcfdc4ca0e937bf1cb20affafa47551ebbb5ad4d3db4125b41425fbc4cba8670d',\n '0x87865017ade7363ace5a8eda728cc923e2098cd16eddbf60734e5f0035f589d4',\n '0x01390dc8b8c23ec56caf2ff29948c194c15d7b3285582a9647d502e241ba9fe6',\n '0xb0e2107fe58c29bac893bc0aba90482ffdd24ea16549d20c9377a9980e9cb347',\n '0x5eaf746327cddd54244545185e387dca6ef1dd8e73ac1f3beaff77bbcefc5a5c',\n '0xee07f92da323b134a5ddb6c29447a855fc4bd9ec6697e25212597a7ec9280055',\n '0xad714a1d2ca1711d7697aabc4011b14f8573a5ac529a5510e853b1c06707ead3',\n '0x6e4e4cf70f9d5144cdb73c271efbe1fb155839261cfe00e8213b8f1c6b1949c3',\n '0xa325333fa1371a415522b9454fa4e024f8213cbd7a3ec61e961239a532d8e394',\n '0xfb79234b3f8a357960dbcc6c4a5e4c2cfd8ee7446d50e0fa300b9c5843df6e5e',\n '0xe6c9b41cd4514cb4e95f80f40a4e30c988ab93d09f699631830913b3d81d73fc',\n '0x63c3e2cb621350cd7c7280620a931669a940d2b9e7936fc899753f2f77de1ef4',\n '0xa9a2fb26288151d598d57a65ad90e062287d68123382b377bea24c659eb69a9a',\n '0xfc9886a160542b08b450a364337a64231603ac1fca31875029febc88e4a693c6',\n '0x7e28b34f6bf438409d303d2e197b4a8800c6797e4c403a028738a147cd263bdf',\n '0xf6d038dd523105b630fa5af3ed5ff85df8c45ca0abf4e6c00031a5f6998ab65f',\n '0x0de87563677354fedd4db4e8cc6906dc77100f5eb9f64d85e9a59a43b2e47cdb',\n '0x8a701797704c7b74f8b02cdd01b2714ff55a18617b00238fb867f2fed0400a46',\n '0xb25a9743cc96d7598f3131ddc087ab13be8af4f23021f22c66b619d08f2cecce',\n '0xf52a2b5807f54ab7866c4486aca64654e7f6d2772913078e79367afe2bc80916',\n '0xa317ab01a14a779a68d3ed5b2f2146c74d8202669441103b92c6eb29db25eb1e',\n '0x15727f1c8b31bbe6fa40c10c95be803e553bd2bae42934529ba40103c257ccda',\n '0x52d09269b9112cb1f68dba2c311a9e0ab3b20f47278946076a3076b09a6bef25',\n '0xafd3b1226636994fc9ff7f07d585d89cc0f01422319f9840111ccfd4a0048085',\n '0x6653d5544470ada098816c30d2f504b206be6bfbf108a6339a4b0b10a5631cfd',\n '0xbe3d9e33289e794e42ea2b66e18b54714da7c82511232f24f049c73711a06afc',\n '0xcab5d13f85b523496f4d5f40c2c37740935b8e59c747966d321d871c6103e819',\n '0x9062b1580d90d5d3dce8819e28f6dd4d5d8cdaadc8cd51c3ec22df0deb1d04f4',\n '0x1851ac46bd1eea24edf4ad0c144bf50c66d30fe5eee1ec7c6dea72e48b6c7ec5',\n '0x11abb0493e49e0b7799ea97df0064d2c6847e5c3b62f121005168366bf9d31bd',\n '0x5be5545e5d8b1a567a53a9402db7d68d5c96766c52595dddcde8ed4be20e297d',\n '0xe219c43c60733e3ec2a63f4f9d1bb797103166d44f738f1f582cb5737d50e3c5',\n '0xf17dea10c3c0473a88382fbcae721252855e2617df5f6193e266bd1c3b3265da',\n '0xf90093998c89ae5556c1e128c939fc40d527004173ecfb3493190a5a521b6ecf',\n '0xde48a44fb8e1b798ad6717f6e3d0a5fdefb326ac0c7b9bafa9f910ce1d9a56ca',\n '0x9de0b21a0315c136d681650bdd323acb5f4dbee1fa0a35be4839129fee7d093b',\n '0x63d8b84c70c4bc8a90136bd1fedf9ae73c29d5ff1c88ee3a5637686586bc8a8c',\n '0xed46819775e2c5648435e56cfe3272bebac835e646de08d092537e1b9c0159e1',\n '0x696fbe87d7c9036c2a64a22731e87cdd4b83e98ffe7ca5a30eb85e7332005fef',\n '0xaba1dc9b8fecf192b1310566788f13278aa6a97c78a8416e3768144d06933495',\n '0x32a403a06c453c1384396c86f04f2df00c94ccc0257662e484d469f9daf492e6',\n '0xd0a8bc49a2addac8b42a155b91cb0a1c999854cf8d32a89c2275c8aecbe00a3e',\n '0x38495f78bec8154643ca60b9825b7b03825e4a61d84b6f3f0f3e646cd406f329',\n '0xeaadbe6883b6b27ee491a76f304b3f151606b5117aff40efceaa088490a6fff0',\n '0x73599375bcbd094230265e62ecd9ca2c220046312b92768a4b02cfeeb547b902',\n '0xf0cf924936e79eb3d3e570a941730d54a6de48087c2324c123fc2ed0cf273a94',\n '0x45101831a60d7f8eea43ff772bd4af2cba37a02b4a97fe3a3995204d12c4a7a6',\n '0x8d1b20d50350efc088ceb4704bb9b4d3be1aae3cdd979cacfaecd22d357cd175',\n '0x533c369c7578b14bd8b193db8252bcd6d2f7366765741316d432879ed00fcfc4',\n '0x566e286053efdbf73b9f4aecddb2d6d338bfb343b36c721492fd021ed72992a1',\n '0x944344fe277f90344326b0ee43500e26622dd8e5660adcbb70df32a0e022e5d8',\n '0xbfbf1c5b7efbbbe6594bae2d8981942b8acab22fe9c1c04daea53f62c6f7e1f3',\n '0x5e91d278b0f02739750cf7f1e5d92b5038793de382ee7576e7c78f7d73734da2',\n '0x391396b96a618c8107170a2f4284d6127c49f8d3b66e554324f210f8915865d7',\n '0x7eb6421de74f9b72972b9d4e17cb3f909eff925438a68ac453d3d8d43f5e4891',\n '0x8635b5d013f6fd968699bd5beacced3d0baf1290475c7c76fd029370b5aac41e',\n '0xb1d7915f353f70a16b933641499765dfad02e2b5a565492735c9648bd20f605f',\n '0x2e1e7fc7af671e2560f0479eb92ce30965968b937d57021007954e0c4907ae65',\n '0xb644d0fc74e9590917946f90aaee22e1f89484f0551abf58ab9a1c1261bde33c',\n '0xe2686e50df033b47793f30cfdd2b125d6ce32f771ec4e751bf08b0cd0b8b7f2b',\n '0x4edd8292bf37ae19c03eafb5ddbaedfbe6cce46cce69ebf27a2b3fec89d03414',\n '0xb682e9b5693ccb003cdfc135f5f2dbf1ffde452ad20bd14c781dbac491ceba89',\n '0xb514dd5f8fa3f7fe3d32ce2b68c2f755b90ecbc0e0f78d6a395f7ec4938681b6',\n '0x045b8c7b3e3a9cc64fc4ccc1775b0a40da79b570268b8327b07eeda0e73040b5',\n '0xe5198f692ccf546cdaaef6c8d27fc36cb610abd3f4a99e77fd76fff3c42e4433',\n '0xa6f01d4d6406ab553ac1f9fb8c67ac5c358739b95a88665d6bbdbc3c806ed23c',\n '0x74426aa80532069761cc6f549909f6dcccd36ea95697a7a0dbbe34c93ae7d8c1',\n '0xd82f3e9a9f06cb810f9b8b8aac8c5fdbe25a378b7bfc838bb4b75864aaec6255',\n '0x5cd648b9727473b5cb1995f21d072eab785f24a8778625a15c11848051da47a4',\n '0xeeceaa0fc0faa95d9c82ffe451377a4c37e4f31f6d694de7665a09ff19aa1435',\n '0x3941799946369629e2fb2bf6301daba69e18bedd9f879cb8b6bfa31c40d3c28e',\n '0xede720f615c4d635c60032fac21e681573d779f4d30e75779d258f6dc3cb1e85',\n '0x5646e6d3389010a74e5fd94353e6e954548d3c51285678e9865870805fa0aecf',\n '0x98be63dc79367d9236c9ba29e3a2bbf6fb31e4b2195f82dc412af20a3319398d',\n '0xe809cae18b1115ffa94ae90541fd0f241e811571731a2af279a5097b0bbbbbc8',\n '0xb928b958daf964041203d55d0850cc4bed8cba0a1644a20abc3e8c423b7d0e59',\n '0x9bb426e9113a481a5018f4bce2cc18d5f6eee526e226a88e246ad0ce80cacefd',\n '0xe0467c49f7dc4890e88266c0dfc0ca0204a2404271618bcf2737e4d179146be7',\n '0x7af37732d2a015b4cd816c86f688e4236e6728f7e79e6dcd0e227f110ce1036b',\n '0x8fa98b435209822ae1de125343961b57e8e5cb9b9fe9da27ad5c41cb3ec53b3e',\n '0xcb401a8ef290aaaa120cea41ebb4f99e06c5e22976aa3567e64c2d66f95e3fc9',\n '0x266dc9016b25fc352d90822138cc1849d61352697f09a894d20abe596ca3d68d',\n '0xea99b5d6c1a3e14030582a9c01f60553f99370e814a6e0d915ccac5139e1981b',\n '0xf81185732281b4cfba11f1ba83e4962c83c8aefea0543d38ca0800b78ec795c3',\n '0x43d9f95ead1c890da096da3e03cada47b194d2371d1a9497635cd84eadc87cc6',\n]\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport errorUtils from 'app-lib/errorUtils'\nimport providerUtils, { AnyProvider } from 'app-lib/providerUtils'\nimport swapRateUtils from 'app-lib/swapRateUtils'\nimport EarnRewardEventNew from 'bzx-common/src/domain/events/blockchain/EarnRewardEventNew'\nimport PayTradingFeeEvent from 'bzx-common/src/domain/events/blockchain/PayTradingFeeEvent'\nimport PositionEventsGroup from 'bzx-common/src/domain/fulcrum/PositionEventsGroup'\nimport PositionHistoryData from 'bzx-common/src/domain/fulcrum/PositionHistoryData'\nimport IBorrowedFundsState, { LoanReturnData } from 'bzx-common/src/domain/IBorrowedFundsState'\nimport { BigNumber } from '@0x/utils'\nimport { FulcrumProvider } from '../../../fulcrum/src/services/FulcrumProvider'\nimport appConfig, { chainConfigs, defaultLeverage } from '../config/appConfig'\nimport { ChainId, IChainConfig, IPairSettings } from '../config/chains/chainCommon'\nimport loansWithOldOpenPriceFormat from '../config/loansWithOldOpenPriceFormat'\nimport {\n CloseWithSwapEvent,\n DepositCollateralEvent,\n LiquidationEvent,\n RolloverEvent,\n TradeEvent,\n WithdrawCollateralEvent,\n} from '../domain/events'\nimport { ITradeRequest, PositionType, TradeType, IOpenPositionProps } from '../domain/trade.types'\nimport oracleApi from './apis/oracleApi'\nimport collectionUtils from './collectionUtils'\nimport loanUtils from './loanUtils'\nimport subgraphHistoryUtils from './subgraphHistoryUtils'\nimport swapPayloadUtils from './swapPayloadUtils'\nimport { DEX } from './dexSelector/types'\n\nfunction getDependenciesStrict(provider: AnyProvider) {\n const deps = providerUtils.getDependenciesStrict(provider)\n const bzxContract = deps.contractsSource.getiBZxContract()\n return { ...deps, bzxContract }\n}\n\n/**\n * Returns the wallet balance of the user of deposit token and from it, the maximum that can be\n * send to open the trade depending on the liquidity and gas buffer if it's the native token\n * The liquidity returned is in deposit token\n */\nasync function getMaxTradeValueToOpenPosition(\n provider: AnyProvider,\n params: {\n baseToken: Asset\n quoteToken: Asset\n depositToken: Asset\n positionType: PositionType\n }\n): Promise<{\n maxTradeValue: BigNumber\n marketLiquidity: BigNumber\n depositTokenBalance: BigNumber\n}> {\n const { baseToken, quoteToken, depositToken, positionType } = params\n const { contractsSource, helperContract, userAddress, chainId } =\n providerUtils.getDependenciesStrictRead(provider)\n let maxTradeValue = new BigNumber(0)\n let marketLiquidity = new BigNumber(0)\n\n const loanToken = positionType === PositionType.LONG ? quoteToken : baseToken\n const iToken = contractsSource.getITokenContract(loanToken)\n const precision = assetUtils.getDecimals(chainId, loanToken)\n\n marketLiquidity = (await helperContract.marketLiquidity([iToken.address]).callAsync())[0].div(\n 10 ** precision\n )\n\n if (depositToken !== loanToken) {\n const swapPrice = await oracleApi.getSwapRate(provider, loanToken, depositToken)\n marketLiquidity = marketLiquidity.times(swapPrice)\n }\n\n const depositTokenBalance = userAddress\n ? await providerUtils.getTokenBalanceOfUser(provider, depositToken)\n : new BigNumber(0)\n\n maxTradeValue = BigNumber.min(marketLiquidity, depositTokenBalance)\n\n return {\n maxTradeValue,\n marketLiquidity,\n depositTokenBalance,\n }\n}\n\nasync function getMaxTradeValueToClosePosition(\n provider: AnyProvider,\n params: {\n positionType: PositionType\n loan: IBorrowedFundsState\n }\n) {\n // TODO: THIS IS NOT TAKING INTO ACCOUNT THE LIQUIDITY\n const { chainId } = providerUtils.getDependenciesStrictRead(provider)\n const result = { maxTradeValue: new BigNumber(0), marketLiquidity: new BigNumber(0) }\n const { loan, positionType } = params\n const loanAssetDecimals = assetUtils.getDecimals(chainId, loan.loanAsset)\n const collateralAssetDecimals = assetUtils.getDecimals(chainId, loan.collateralAsset)\n result.maxTradeValue =\n positionType === PositionType.LONG\n ? loan.loanData.collateral.div(10 ** collateralAssetDecimals)\n : loan.loanData.principal.div(10 ** loanAssetDecimals)\n return result\n}\n\nconst getMaxTradeValue = async (\n provider: AnyProvider,\n params: {\n tradeType: TradeType\n baseToken: Asset\n quoteToken: Asset\n depositToken: Asset\n positionType: PositionType\n loan?: IBorrowedFundsState\n }\n): Promise<{\n maxTradeValue: BigNumber\n marketLiquidity: BigNumber\n depositTokenBalance: BigNumber\n}> => {\n if (params.tradeType === TradeType.OPEN_POSITION) {\n return getMaxTradeValueToOpenPosition(provider, params)\n }\n const { loan } = params\n if (!loan) {\n throw new Error('Missing loan in getMaxTradeValue')\n }\n const maxTradeValue = await getMaxTradeValueToClosePosition(provider, { ...params, loan })\n return { ...maxTradeValue, depositTokenBalance: new BigNumber(0) }\n}\n\nasync function getEstimatedMarginDetails(\n provider: AnyProvider,\n request: ITradeRequest,\n opts: { loanDataBytes: string }\n): Promise<{\n principal: BigNumber\n collateral: BigNumber\n exposureValue: BigNumber\n interestRate: BigNumber\n collateralToLoanRate: BigNumber\n}> {\n const isLong = request.positionType === PositionType.LONG\n const { contractsSource, chainId } = providerUtils.getDependenciesStrict(provider)\n\n const collateralToken = isLong ? request.baseToken : request.quoteToken\n const loanToken = isLong ? request.quoteToken : request.baseToken\n const leverage = isLong ? request.leverage - 1 : request.leverage\n const itokenContract = contractsSource.getITokenContract(loanToken)\n const depositToken = request.depositToken\n const decimals = assetUtils.getDecimals(chainId, depositToken)\n const collateralTokenDecimals = assetUtils.getDecimals(chainId, collateralToken)\n const loanTokenDecimals = assetUtils.getDecimals(chainId, loanToken)\n const amountInBaseUnits = new BigNumber(request.amount.times(10 ** decimals).toFixed(0, 1))\n const collateralTokenSent =\n depositToken === collateralToken ? amountInBaseUnits : new BigNumber(0)\n const loanTokenSent = depositToken === loanToken ? amountInBaseUnits : new BigNumber(0)\n\n const collateralToLoanRate = await oracleApi.getSwapRateNew(provider, collateralToken, loanToken)\n const collateralInLoanToken = collateralToLoanRate.times(collateralTokenSent)\n const principal = loanTokenSent.plus(collateralInLoanToken).times(leverage)\n\n const interestRate = await itokenContract.nextBorrowInterestRate(principal).callAsync()\n\n const swappedAmount = await swapRateUtils.getSwapExpectedReturn(provider, {\n srcToken: loanToken,\n destToken: collateralToken,\n srcAmount: principal.plus(loanTokenSent),\n loanDataBytes: opts.loanDataBytes,\n })\n\n const collateral = swappedAmount.plus(collateralTokenSent.div(10 ** collateralTokenDecimals))\n const exposureValue = isLong ? collateral : principal.div(10 ** loanTokenDecimals)\n\n return {\n principal: principal.div(10 ** loanTokenDecimals),\n collateral,\n exposureValue, // some amount somewhere close position or something\n interestRate: interestRate.div(10 ** 18), // how much user is paying\n collateralToLoanRate,\n }\n}\n\n/**\n * Get all open positions (loans) of the user\n */\nasync function getUserMarginTradeLoans(provider: AnyProvider): Promise {\n const { bzxContract, userAddress, chainId } = getDependenciesStrict(provider)\n const result: IBorrowedFundsState[] = []\n const loansData = await bzxContract\n .getUserLoans(\n userAddress,\n new BigNumber(0),\n new BigNumber(50),\n 1, // margin trade loans\n false,\n false\n )\n .callAsync()\n\n loansData.forEach((e: LoanReturnData) => {\n const loanAsset = assetUtils.getAssetFromAddress(chainId, e.loanToken)\n const collateralAsset = assetUtils.getAssetFromAddress(chainId, e.collateralToken)\n if (loanAsset === Asset.UNKNOWN || collateralAsset === Asset.UNKNOWN) {\n return\n }\n const loanPrecision = assetUtils.getDecimals(chainId, loanAsset)\n const collateralPrecision = assetUtils.getDecimals(chainId, collateralAsset)\n let amountOwned = e.principal.minus(e.interestDepositRemaining)\n if (amountOwned.lte(0)) {\n amountOwned = new BigNumber(0)\n } else {\n amountOwned = amountOwned.dividedBy(10 ** loanPrecision).dp(5, BigNumber.ROUND_CEIL)\n }\n result.push({\n accountAddress: userAddress,\n loanId: e.loanId,\n loanAsset: loanAsset,\n collateralAsset: collateralAsset,\n amount: e.principal.dividedBy(10 ** loanPrecision).dp(5, BigNumber.ROUND_CEIL),\n amountOwed: amountOwned,\n collateralAmount: e.collateral.dividedBy(10 ** collateralPrecision),\n collateralizedPercent: e.currentMargin.dividedBy(10 ** 20),\n interestRate: e.interestOwedPerDay.dividedBy(e.principal).multipliedBy(365),\n interestOwedPerDay: e.interestOwedPerDay.dividedBy(10 ** loanPrecision),\n hasManagementContract: true,\n isInProgress: false,\n loanData: e,\n } as IBorrowedFundsState)\n })\n\n return result\n}\n\nasync function getLoanCloseAmount(\n provider: AnyProvider,\n request: ITradeRequest,\n loan: IBorrowedFundsState\n): Promise<[BigNumber, BigNumber, string | Error]> {\n const { userAddress, bzxContract, chainId } = getDependenciesStrict(provider)\n let result: [BigNumber, BigNumber, string | Error] = [new BigNumber(0), new BigNumber(0), '']\n let amountInBaseUnits = new BigNumber(0)\n const returnToken = request.returnTokenIsCollateral ? loan.collateralAsset : loan.loanAsset\n\n if (request.positionType === PositionType.LONG) {\n amountInBaseUnits = providerUtils.inBaseUnits(chainId, loan.collateralAsset, request.amount)\n } else {\n const { maxTradeValue } = await getMaxTradeValue(provider, {\n tradeType: TradeType.CLOSE_POSITION,\n baseToken: loan.loanAsset,\n quoteToken: loan.collateralAsset,\n depositToken: returnToken,\n positionType: request.positionType,\n loan,\n })\n amountInBaseUnits = new BigNumber(\n loan.loanData.collateral.times(request.amount.div(maxTradeValue)).toFixed(0, 1)\n )\n }\n\n const maxAmountInBaseUnits = loan.loanData.collateral\n\n if (\n maxAmountInBaseUnits.gt(0) &&\n maxAmountInBaseUnits.minus(amountInBaseUnits).abs().div(maxAmountInBaseUnits).lte(0.01)\n ) {\n amountInBaseUnits = new BigNumber(maxAmountInBaseUnits.times(10 ** 50).toFixed(0, 1))\n }\n\n try {\n result = await bzxContract\n .closeWithSwap(\n loan.loanId,\n userAddress,\n amountInBaseUnits,\n request.returnTokenIsCollateral,\n request.loanDataBytes\n )\n .callAsync({\n from: userAddress,\n gas: appConfig.gas.gasLimitFallback,\n })\n } catch (err) {\n result[2] = new Error('Could not get LoanCloseAmount. ' + errorUtils.getErrorStackMessages(err)) //send error message\n console.error(result[2])\n return result\n }\n const decimals = assetUtils.getDecimals(chainId, returnToken)\n\n result[1] = result[1].div(10 ** decimals)\n\n return result\n}\n\nconst getManageCollateralExcessAmount = async (\n provider: AnyProvider,\n borrowedFundsState: IBorrowedFundsState\n): Promise => {\n const { contractsSource, userAddress, chainId } = providerUtils.getDependenciesStrict(provider)\n const { loanId, collateralAsset } = borrowedFundsState\n const bZxContract = contractsSource.getiBZxContract()\n const precision = assetUtils.getDecimals(chainId, collateralAsset)\n const tx = bZxContract.withdrawCollateral(loanId, userAddress, appConfig.MAX_UINT)\n const result = await tx.callAsync({ from: userAddress, gas: appConfig.gas.gasLimitFallback })\n return result.dividedBy(10 ** precision)\n}\n\n/**\n * Try to guess if it was a long or a short based on our list of tokens and the loan data\n * Reminder: from the protocol point of view, there are no long / short, just loans.\n */\nfunction guessLongShort(chainId: ChainId, loanAsset: Asset, collateralAsset: Asset) {\n let positionType\n const { base: baseTokens, quote: quoteTokens } = chainConfigs[chainId].trading.baseQuote\n const tradePairs = chainConfigs[chainId].trading.pairs\n\n const possiblePairs = tradePairs.filter(\n (pair: Asset[]) =>\n (pair[0] === loanAsset && pair[1] === collateralAsset) ||\n (pair[0] === collateralAsset && pair[1] === loanAsset)\n )\n if (possiblePairs && possiblePairs.length > 0) {\n if (possiblePairs.length > 1) {\n console.error(\n \"The position fits to more than one pair. Couldn't treat it exactly as LONG/SHORT\"\n )\n }\n positionType = possiblePairs[0][0] === collateralAsset ? PositionType.LONG : PositionType.SHORT\n } else {\n const isLoanTokenOnlyInQuoteTokens =\n !baseTokens.includes(loanAsset) && quoteTokens.includes(loanAsset)\n const isCollateralTokenNotInQuoteTokens =\n baseTokens.includes(collateralAsset) && !quoteTokens.includes(collateralAsset)\n positionType =\n isCollateralTokenNotInQuoteTokens || isLoanTokenOnlyInQuoteTokens\n ? PositionType.LONG\n : PositionType.SHORT\n }\n const isLong = positionType === PositionType.LONG\n const baseAsset = isLong ? collateralAsset : loanAsset\n const quoteAsset = isLong ? loanAsset : collateralAsset\n\n return { baseAsset, quoteAsset, positionType, isLong }\n}\n\n/**\n * Get the open price from a loan while handling legacy loans format\n */\nfunction getOpenPrice(chainId: ChainId, loan: IBorrowedFundsState): BigNumber {\n const { isLong } = guessLongShort(chainId, loan.loanAsset, loan.collateralAsset)\n const loanAssetDecimals = assetUtils.getDecimals(chainId, loan.loanAsset)\n const collateralAssetDecimals = assetUtils.getDecimals(chainId, loan.collateralAsset)\n const loanAssetPrecision = new BigNumber(10 ** (18 - loanAssetDecimals))\n const collateralAssetPrecision = new BigNumber(10 ** (18 - collateralAssetDecimals))\n\n let openPrice = new BigNumber(NaN)\n if (isLong) {\n // earlier startRate was stored from Chainlink and had this format\n openPrice = loan.loanData.startRate\n .div(10 ** 18)\n .times(loanAssetPrecision)\n .div(collateralAssetPrecision)\n // https://github.com/OokiTrade/contractsV2/commit/2afdeb8c6b9951456d835fbd90a6bc38c699de89\n // but then we started to store startRate as a price from Kyber (the real swap rate from trade event)\n // that has another format and should be handled in the following way:\n const newOpenPrice = new BigNumber(10 ** 18)\n .div(loan.loanData.startRate)\n .times(10 ** (collateralAssetDecimals - loanAssetDecimals))\n\n // the wrong price will be much larger.\n // For example 307854115598597579198986971899 and 0.03263155. The latest is the correct price\n openPrice = !loansWithOldOpenPriceFormat.includes(loan.loanId) ? newOpenPrice : openPrice\n } else {\n // earlier startRate was stored from Chainlink and had this format\n openPrice = new BigNumber(10 ** 18).div(\n loan.loanData.startRate.times(loanAssetPrecision).div(collateralAssetPrecision)\n )\n\n // https://github.com/OokiTrade/contractsV2/commit/2afdeb8c6b9951456d835fbd90a6bc38c699de89\n // but then we started to store startRate as a price from Kyber (the real swap rate from trade event)\n // that has another format and should be handled in the following way:\n const newOpenPrice = loan.loanData.startRate\n .div(10 ** 18)\n .times(10 ** (loanAssetDecimals - collateralAssetDecimals))\n\n // the wrong price will be much larger.\n // For example 307854115598597579198986971899 and 0.03263155. The latest is the correct price\n openPrice = !loansWithOldOpenPriceFormat.includes(loan.loanId) ? newOpenPrice : openPrice\n }\n return openPrice\n}\n\n/** For a loan, returns the oracle price of collateral / principal */\nasync function getLoanMarketRate(\n provider: AnyProvider,\n loan: IBorrowedFundsState,\n isLong: boolean\n) {\n const currentCollateralToPrincipalRate = await oracleApi.getSwapRate(\n provider,\n loan.collateralAsset,\n loan.loanAsset\n )\n\n return isLong ? currentCollateralToPrincipalRate : currentCollateralToPrincipalRate.pow(-1)\n}\n\n// TODO: REFACTOR: THIS IS CALLING TOO MANY THINGS, they should be split and handled separately.\nasync function getLoanDetails(\n provider: AnyProvider,\n loan: IBorrowedFundsState\n): Promise> {\n // approx date when Open Price precision update was deployed\n // https://github.com/OokiTrade/contractsV2/commit/2afdeb8c6b9951456d835fbd90a6bc38c699de89\n // https://etherscan.io/tx/0xd69e0d550a665975ce963b4069206257c279223bf3fda4cbe019efff2b70bf61\n const { currentChainId: chainId } = provider\n // maintenanceMargin = margin * 100% * (10 ** 18)\n const maintenanceMargin = loan.loanData.maintenanceMargin.div(10 ** 20)\n\n const { positionType, baseAsset, quoteAsset, isLong } = guessLongShort(\n chainId,\n loan.loanAsset,\n loan.collateralAsset\n )\n\n const currentCollateralToPrincipalRate = await getLoanMarketRate(provider, loan, isLong)\n\n const currentPrice = isLong\n ? currentCollateralToPrincipalRate\n : currentCollateralToPrincipalRate.pow(-1)\n\n // startMargin = value * 100% * (10 ** 18)\n let leverage = new BigNumber(10 ** 20)\n .div(loan.loanData.startMargin)\n .dp(0, BigNumber.ROUND_HALF_UP)\n if (isLong) {\n leverage = leverage.plus(1)\n }\n\n let positionValue = new BigNumber(0)\n let value = new BigNumber(0)\n let collateral = new BigNumber(0)\n let profitCollateralToken = new BigNumber(NaN)\n let profitLoanToken = new BigNumber(NaN)\n let profitUSD = new BigNumber(0)\n\n const loanAssetDecimals = assetUtils.getDecimals(chainId, loan.loanAsset)\n const collateralAssetDecimals = assetUtils.getDecimals(chainId, loan.collateralAsset)\n const collateralAssetAmount = loan.loanData.collateral.div(10 ** collateralAssetDecimals)\n const loanAssetAmount = loan.loanData.principal.div(10 ** loanAssetDecimals)\n const depositValueAsLoanToken = loan.loanData.depositValueAsLoanToken.div(10 ** loanAssetDecimals)\n const depositValueAsCollateralToken = loan.loanData.depositValueAsCollateralToken.div(\n 10 ** collateralAssetDecimals\n )\n\n // liquidationPrice = ((maintenance_margin * principal / 10 ** 20) + principal) / collateral\n const liquidationPrice = maintenanceMargin\n .times(loanAssetAmount)\n .plus(loanAssetAmount)\n .div(collateralAssetAmount)\n\n const { maxTradeValue } = await getMaxTradeValue(provider, {\n tradeType: TradeType.CLOSE_POSITION,\n baseToken: loan.loanAsset,\n quoteToken: loan.collateralAsset,\n depositToken: Asset.UNKNOWN,\n positionType,\n loan,\n })\n\n /** We use the first dex available for the chain to get the current profit */\n const dex = chainConfigs[chainId].dexes[0]\n\n const tradeRequestCollateral: ITradeRequest = {\n amount: maxTradeValue,\n baseToken: baseAsset,\n // Using wrapped to avoids a problem with getting deposit token info until open and close requests are split\n // Because \"closePosition\" does not have a depositToken but it's forced on ITradeRequest interface\n depositToken: chainConfigs[chainId].native.wrapped,\n leverage: leverage.toNumber(),\n loanDataBytes: '0x',\n loanId: loan.loanId,\n positionType,\n quoteToken: quoteAsset,\n returnTokenIsCollateral: true,\n tradeType: TradeType.CLOSE_POSITION,\n dex,\n }\n\n const tradeRequestLoan: ITradeRequest = {\n ...tradeRequestCollateral,\n returnTokenIsCollateral: false,\n }\n\n const openPrice = getOpenPrice(chainId, loan)\n\n if (dex === DEX.UNISWAPV3) {\n tradeRequestCollateral.loanDataBytes = (\n await swapPayloadUtils.getSwapDataForClosingPosition(provider, tradeRequestCollateral, loan)\n )[0]\n tradeRequestLoan.loanDataBytes = (\n await swapPayloadUtils.getSwapDataForClosingPosition(provider, tradeRequestLoan, loan)\n )[0]\n }\n\n if (isLong) {\n positionValue = collateralAssetAmount\n value = collateralAssetAmount.times(currentCollateralToPrincipalRate)\n collateral = loanAssetAmount\n\n if (depositValueAsCollateralToken.eq(0) || depositValueAsLoanToken.eq(0)) {\n profitUSD = currentCollateralToPrincipalRate.minus(openPrice).times(positionValue)\n } else {\n const estimatedCollateralReceived = await getLoanCloseAmount(\n provider,\n tradeRequestCollateral,\n loan\n )\n const estimatedLoanReceived = await getLoanCloseAmount(provider, tradeRequestLoan, loan)\n const estimatedReceivedCollateralToken = estimatedCollateralReceived[1]\n const estimatedReceivedLoanToken = estimatedLoanReceived[1]\n profitCollateralToken = estimatedReceivedCollateralToken.gt(0)\n ? estimatedReceivedCollateralToken.minus(depositValueAsCollateralToken)\n : new BigNumber(NaN)\n profitLoanToken = estimatedReceivedLoanToken.gt(0)\n ? estimatedReceivedLoanToken.minus(depositValueAsLoanToken)\n : new BigNumber(NaN)\n }\n } else {\n collateral = collateralAssetAmount.times(currentCollateralToPrincipalRate)\n\n const shortsDiff = collateralAssetAmount\n .times(currentCollateralToPrincipalRate)\n .minus(loanAssetAmount)\n\n positionValue = collateralAssetAmount.times(currentCollateralToPrincipalRate).minus(shortsDiff)\n value = positionValue.div(currentCollateralToPrincipalRate)\n\n if (depositValueAsCollateralToken.eq(0) || depositValueAsLoanToken.eq(0)) {\n profitUSD = openPrice\n .minus(new BigNumber(1).div(currentCollateralToPrincipalRate))\n .times(positionValue)\n } else {\n const estimatedReceivedCollateralToken = (\n await getLoanCloseAmount(provider, tradeRequestCollateral, loan)\n )[1]\n const estimatedReceivedLoanToken = (\n await getLoanCloseAmount(provider, tradeRequestLoan, loan)\n )[1]\n profitCollateralToken = estimatedReceivedCollateralToken.gt(0)\n ? estimatedReceivedCollateralToken.minus(depositValueAsCollateralToken)\n : new BigNumber(NaN)\n profitLoanToken = estimatedReceivedLoanToken.gt(0)\n ? estimatedReceivedLoanToken.minus(depositValueAsLoanToken)\n : new BigNumber(NaN)\n }\n }\n\n return {\n chainId,\n loan,\n baseToken: baseAsset,\n quoteToken: quoteAsset,\n leverage: leverage.toNumber(),\n positionType,\n positionValue,\n value,\n collateral: depositValueAsCollateralToken.gt(0) ? depositValueAsCollateralToken : collateral,\n openPrice,\n currentPrice,\n liquidationPrice,\n profitCollateralToken,\n profitLoanToken,\n profitUSD,\n maintenanceMargin,\n } as Partial\n}\n\nconst getHistoryEvents = async (\n provider: FulcrumProvider,\n opts?: { oldGraph: boolean; allNetworks: boolean }\n) => {\n if (\n !provider.web3Wrapper ||\n !provider.contractsSource ||\n !provider.currentChainId ||\n !provider.contractsSource.canWrite\n ) {\n return null\n }\n\n const account = provider.currentAccount\n const historyEvents = await subgraphHistoryUtils.getTradeHistory(\n provider.currentChainId,\n account,\n opts\n )\n const payTradingFeeEvents: PayTradingFeeEvent[] = []\n const earnRewardEvents: EarnRewardEventNew[] = []\n const events = historyEvents.reduce((result, e) => {\n if (e instanceof PayTradingFeeEvent) {\n payTradingFeeEvents.push(e)\n return result\n }\n if (e instanceof EarnRewardEventNew) {\n earnRewardEvents.push(e)\n return result\n }\n result.push(e)\n return result\n }, [] as Array)\n\n // Group array of events by loanId\n const groupedEvents = collectionUtils.groupBy<\n | TradeEvent\n | LiquidationEvent\n | CloseWithSwapEvent\n | DepositCollateralEvent\n | WithdrawCollateralEvent\n | RolloverEvent\n >(\n events.sort((a, b) => b.blockNumber.minus(a.blockNumber).toNumber()),\n ['loanId']\n )\n for (const loanId of Object.keys(groupedEvents)) {\n const eventsById = groupedEvents[loanId]\n const isContainTradeEvent = eventsById.some(\n (\n e:\n | TradeEvent\n | LiquidationEvent\n | RolloverEvent\n | CloseWithSwapEvent\n | DepositCollateralEvent\n | WithdrawCollateralEvent\n ) => e instanceof TradeEvent\n )\n if (!isContainTradeEvent) {\n delete groupedEvents[loanId]\n }\n }\n\n return { groupedEvents, earnRewardEvents, payTradingFeeEvents }\n}\n\ninterface IHistoryEvents {\n groupedEvents: {\n [key: string]: (\n | TradeEvent\n | LiquidationEvent\n | RolloverEvent\n | CloseWithSwapEvent\n | DepositCollateralEvent\n | WithdrawCollateralEvent\n )[]\n }\n earnRewardEvents: EarnRewardEventNew[]\n payTradingFeeEvents: PayTradingFeeEvent[]\n}\n\nexport async function getHistoryRowsData(provider: AnyProvider, historyEvents: IHistoryEvents) {\n const chainId = provider.currentChainId\n // https://etherscan.io/tx/0x4c4e621687b18ffd9a7884f58ed8e656cec0fc06e6a6563b63fe5f0c46e0292a\n const blockNumberWhenPricePrecisionWasChanged = 11270966\n const historyRowsData = []\n const loanIds = Object.keys(historyEvents.groupedEvents)\n\n for (const loanId of loanIds) {\n // @ts-ignore\n const events = historyEvents.groupedEvents[loanId].sort((a: any, b: any) =>\n a.blockNumber.minus(b.blockNumber).toNumber()\n )\n const tradeEvent = events[0] as TradeEvent\n\n const { positionType, baseAsset, quoteAsset, isLong } = guessLongShort(\n chainId,\n tradeEvent.loanToken,\n tradeEvent.collateralToken\n )\n\n if (!tradeEvent.entryLeverage) {\n continue\n }\n let leverage = new BigNumber(tradeEvent.entryLeverage.div(10 ** 18))\n\n if (isLong) {\n leverage = leverage.plus(1)\n }\n\n const loanAssetDecimalsFirstEvent = assetUtils.getDecimals(chainId, tradeEvent.loanToken)\n const collateralAssetDecimalsFirstEvent = assetUtils.getDecimals(\n chainId,\n tradeEvent.collateralToken\n )\n\n const isLegacyPrecision =\n chainId === 1 && tradeEvent.blockNumber.lte(blockNumberWhenPricePrecisionWasChanged)\n\n const openPrice = isLong\n ? !isLegacyPrecision\n ? new BigNumber(10 ** 36)\n .div(tradeEvent.entryPrice)\n .div(10 ** 18)\n .times(10 ** (collateralAssetDecimalsFirstEvent - loanAssetDecimalsFirstEvent))\n : new BigNumber(10 ** 36).div(tradeEvent.entryPrice).div(10 ** 18)\n : !isLegacyPrecision\n ? tradeEvent.entryPrice\n .div(10 ** 18)\n .times(10 ** (loanAssetDecimalsFirstEvent - collateralAssetDecimalsFirstEvent))\n : tradeEvent.entryPrice.div(10 ** 18)\n\n const positionEventsGroup = new PositionEventsGroup(\n loanId,\n baseAsset,\n quoteAsset,\n positionType,\n leverage.toNumber()\n )\n for (const event of events) {\n let positionValue = new BigNumber(0)\n let tradePrice = new BigNumber(0)\n let value = new BigNumber(0)\n let profit: BigNumber | string = '-'\n let timeStamp: Date\n try {\n timeStamp =\n // @ts-ignore\n event.timestamp ||\n new Date(\n (await provider.web3Wrapper!.getBlockTimestampAsync(event.blockNumber.toNumber())) *\n 1000\n )\n } catch (e) {\n console.error(e)\n timeStamp = new Date()\n // continue\n }\n const txHash = event.txHash\n const payTradingFeeEvent = historyEvents.payTradingFeeEvents.find((e) =>\n e.blockNumber.eq(event.blockNumber)\n )\n\n const earnRewardEvent = historyEvents.earnRewardEvents.find((e) =>\n e.blockNumber.eq(event.blockNumber)\n )\n if (event instanceof TradeEvent) {\n const action = 'Opened'\n const loanAssetDecimals = assetUtils.getDecimals(chainId, event.loanToken)\n const collateralAssetDecimals = assetUtils.getDecimals(chainId, event.collateralToken)\n\n if (isLong) {\n positionValue = event.positionSize.div(10 ** collateralAssetDecimals)\n tradePrice = !isLegacyPrecision\n ? new BigNumber(10 ** 36)\n .div(event.entryPrice)\n .div(10 ** 18)\n .times(10 ** (collateralAssetDecimals - loanAssetDecimals))\n : new BigNumber(10 ** 36).div(event.entryPrice).div(10 ** 18)\n value = positionValue.times(tradePrice)\n } else {\n positionValue = event.borrowedAmount.div(10 ** loanAssetDecimals)\n tradePrice = !isLegacyPrecision\n ? event.entryPrice\n .div(10 ** 18)\n .times(10 ** (loanAssetDecimals - collateralAssetDecimals))\n : event.entryPrice.div(10 ** 18)\n value = positionValue.times(tradePrice)\n }\n\n positionEventsGroup.events.push(\n new PositionHistoryData(\n loanId,\n timeStamp,\n action,\n positionValue,\n tradePrice,\n value,\n profit,\n txHash,\n quoteAsset,\n payTradingFeeEvent,\n earnRewardEvent\n )\n )\n } else if (event instanceof CloseWithSwapEvent) {\n const action = 'Closed'\n const loanAssetDecimals = assetUtils.getDecimals(chainId, event.loanToken)\n const collateralAssetDecimals = assetUtils.getDecimals(chainId, event.collateralToken)\n\n if (isLong) {\n positionValue = event.positionCloseSize.div(10 ** collateralAssetDecimals)\n tradePrice = !isLegacyPrecision\n ? new BigNumber(10 ** 36)\n .div(event.exitPrice)\n .div(10 ** 18)\n .times(10 ** (collateralAssetDecimals - loanAssetDecimals))\n : new BigNumber(10 ** 36).div(event.exitPrice).div(10 ** 18)\n value = positionValue.times(tradePrice)\n profit = tradePrice.minus(openPrice).times(positionValue)\n } else {\n positionValue = event.loanCloseAmount.div(10 ** loanAssetDecimals)\n tradePrice = !isLegacyPrecision\n ? event.exitPrice\n .div(10 ** 18)\n .times(10 ** (loanAssetDecimals - collateralAssetDecimals))\n : event.exitPrice.div(10 ** 18)\n value = positionValue.times(tradePrice)\n profit = openPrice.minus(tradePrice).times(positionValue)\n }\n\n positionEventsGroup.events.push(\n new PositionHistoryData(\n loanId,\n timeStamp,\n action,\n positionValue,\n tradePrice,\n value,\n profit,\n txHash,\n quoteAsset,\n payTradingFeeEvent,\n earnRewardEvent\n )\n )\n } else if (event instanceof LiquidationEvent) {\n // loanToken in LiquidationEvent is a quoteAsset in TradeEvent\n // collateralToken in LiquidationEvent is a baseAsset in TradeEvent\n const action = 'Liquidated'\n const loanAssetDecimals = assetUtils.getDecimals(chainId, event.asset)\n const collateralAssetDecimals = assetUtils.getDecimals(chainId, event.collateralToken)\n\n if (isLong) {\n tradePrice = event.collateralToLoanRate\n .div(10 ** 18)\n .times(10 ** (collateralAssetDecimals - loanAssetDecimals))\n positionValue = event.repayAmount.div(10 ** loanAssetDecimals).div(tradePrice)\n value = positionValue.times(tradePrice)\n profit = value.minus(\n event.collateralWithdrawAmount.div(10 ** collateralAssetDecimals).times(tradePrice)\n )\n } else {\n positionValue = event.repayAmount.div(10 ** loanAssetDecimals)\n tradePrice = new BigNumber(10 ** 36)\n .div(event.collateralToLoanRate)\n .div(10 ** 18)\n .times(10 ** (loanAssetDecimals - collateralAssetDecimals))\n value = positionValue.times(tradePrice)\n profit = value.minus(event.collateralWithdrawAmount.div(10 ** collateralAssetDecimals))\n }\n\n positionEventsGroup.events.push(\n new PositionHistoryData(\n loanId,\n timeStamp,\n action,\n positionValue,\n tradePrice,\n value,\n profit,\n txHash,\n quoteAsset,\n payTradingFeeEvent,\n earnRewardEvent\n )\n )\n } else if (event instanceof DepositCollateralEvent) {\n const action = 'Deposited'\n const depositTokenDecimals = assetUtils.getDecimals(chainId, event.asset)\n\n if (isLong) {\n positionValue = event.amount.div(10 ** depositTokenDecimals)\n tradePrice = new BigNumber(0)\n } else {\n tradePrice = new BigNumber(0)\n positionValue = event.amount.div(10 ** depositTokenDecimals).times(tradePrice)\n }\n\n positionEventsGroup.events.push(\n new PositionHistoryData(\n loanId,\n timeStamp,\n action,\n positionValue,\n tradePrice,\n value,\n profit,\n txHash,\n quoteAsset,\n payTradingFeeEvent,\n earnRewardEvent\n )\n )\n } else if (event instanceof WithdrawCollateralEvent) {\n const action = 'Withdrew'\n const withdrawTokenDecimals = assetUtils.getDecimals(chainId, event.asset)\n\n if (isLong) {\n positionValue = event.amount.div(10 ** withdrawTokenDecimals)\n tradePrice = new BigNumber(0)\n } else {\n tradePrice = new BigNumber(0)\n positionValue = event.amount.div(10 ** withdrawTokenDecimals).times(tradePrice)\n }\n\n positionEventsGroup.events.push(\n new PositionHistoryData(\n loanId,\n timeStamp,\n action,\n positionValue,\n tradePrice,\n value,\n profit,\n txHash,\n quoteAsset,\n payTradingFeeEvent,\n earnRewardEvent\n )\n )\n } else if (event instanceof RolloverEvent) {\n const action = 'Rollovered'\n\n tradePrice = new BigNumber(0)\n\n positionEventsGroup.events.push(\n new PositionHistoryData(\n loanId,\n timeStamp,\n action,\n positionValue,\n tradePrice,\n value,\n profit,\n txHash,\n quoteAsset,\n payTradingFeeEvent,\n earnRewardEvent\n )\n )\n } else {\n // do nothing\n }\n }\n historyRowsData.push({\n eventsGroup: positionEventsGroup,\n isHidden: false,\n })\n }\n return historyRowsData\n}\n\n/**\n * Helper for repetitive trade request assets data gathering\n * Determines loaned and collateral assets, leverage param to be passed based on long / short\n * src and dest are used to calculate swaps\n */\nfunction getTradeTokens(\n chainId: ChainId,\n params: {\n baseToken: Asset\n depositToken: Asset\n positionType: PositionType\n quoteToken: Asset\n tradeType: TradeType\n leverage: number\n }\n) {\n const isLong = params.positionType === PositionType.LONG\n const isClosingTrade = params.tradeType === TradeType.CLOSE_POSITION\n const leverage = isLong ? params.leverage - 1 : params.leverage\n const [base, quote, deposit] = assetUtils.getTokensInfo(chainId, [\n params.baseToken,\n params.quoteToken,\n params.depositToken,\n ])\n\n const src = (isLong && !isClosingTrade) || (!isLong && isClosingTrade) ? quote : base\n const dest = src.asset === params.baseToken ? quote : base\n const loaned = isLong ? quote : base\n const collateral = isLong ? base : quote\n\n return { src, dest, loaned, collateral, deposit, leverage }\n}\n\nasync function getLiquidationPrice(\n provider: AnyProvider,\n request: ITradeRequest,\n collateralToPrincipalRate: BigNumber,\n loanParams?: { maintenanceMargin: BigNumber }\n) {\n const { chainId } = providerUtils.getDependenciesStrictRead(provider)\n const { src, dest, leverage } = getTradeTokens(chainId, request)\n const initialMargin = new BigNumber(100).div(leverage)\n\n const maintenanceMargin =\n loanParams?.maintenanceMargin ||\n (await loanUtils.getLoanParams(provider, src.asset, dest.asset, false)).maintenanceMargin\n\n // liq_price_before_trade = (maintenance_margin / 10^20 * collateralToLoanRate) + collateralToLoanRate) / ((100 + current_margin) / 100\n // if it's a SHORT then -> 1/ above\n\n const liquidationPriceBeforeTrade = maintenanceMargin\n .div(10 ** 20)\n .times(collateralToPrincipalRate)\n .plus(collateralToPrincipalRate)\n .div(new BigNumber(100).plus(initialMargin).div(100))\n\n return request.positionType === PositionType.LONG\n ? liquidationPriceBeforeTrade\n : liquidationPriceBeforeTrade.pow(-1)\n}\n\n/** See tradeUtils.getPairConfig */\nexport interface IPairConfigDetails {\n chain: IChainConfig\n depositTokens: Asset[]\n dexes: DEX[]\n initialPositionType: PositionType\n isStablePair: boolean\n leverageInitial: number\n leverageMax: number\n pairSettings?: IPairSettings\n selectedMarket: { baseToken: Asset; quoteToken: Asset }\n}\n\n/**\n * Helper to know whether a user can long/short, which token he can deposit, etc for a pair\n * See chainCommon for how pair specific configs can be created\n */\nexport function getPairConfig(\n pair: { baseToken: Asset; quoteToken: Asset },\n chainId: ChainId\n): IPairConfigDetails {\n const chain = chainConfigs[chainId]\n const { baseToken, quoteToken } = pair\n const baseConfig = chainConfigs[chainId].trading.pairConfigs[baseToken]\n const pairSettings = baseConfig ? baseConfig[quoteToken] : undefined\n const isStablePair = assetUtils.isStablePair(pair)\n const dexes = pairSettings?.dexes || chain.dexes\n const initialPositionType = pairSettings?.disabledPosition.LONG\n ? PositionType.SHORT\n : PositionType.LONG\n const depositTokens = (pairSettings?.depositTokens &&\n pairSettings?.depositTokens[initialPositionType]) || [baseToken, quoteToken]\n const leverageMax =\n pairSettings?.maxLeverage ||\n (isStablePair ? appConfig.maxLeverage.stablePair : appConfig.maxLeverage.others)\n\n const leverageInitial = isStablePair ? defaultLeverage.stablePair : defaultLeverage.others\n\n return {\n chain,\n depositTokens,\n dexes,\n initialPositionType,\n isStablePair,\n leverageInitial,\n leverageMax,\n pairSettings,\n selectedMarket: pair,\n }\n}\n\nexport default {\n getLoanMarketRate,\n getEstimatedMarginDetails,\n getHistoryEvents,\n getHistoryRowsData,\n getLiquidationPrice,\n getLoanCloseAmount,\n getLoanDetails,\n getManageCollateralExcessAmount,\n getMaxTradeValue,\n getMaxTradeValueToOpenPosition,\n getMaxTradeValueToClosePosition,\n getTradeTokens,\n getUserMarginTradeLoans,\n guessLongShort,\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","import { EventEmitter } from 'events'\r\nimport { AbstractConnectorArguments, ConnectorUpdate, ConnectorEvent } from '@web3-react/types'\r\n\r\nexport abstract class AbstractConnector extends EventEmitter {\r\n public readonly supportedChainIds?: number[]\r\n\r\n constructor({ supportedChainIds }: AbstractConnectorArguments = {}) {\r\n super()\r\n this.supportedChainIds = supportedChainIds\r\n }\r\n\r\n public abstract async activate(): Promise\r\n public abstract async getProvider(): Promise\r\n public abstract async getChainId(): Promise\r\n public abstract async getAccount(): Promise\r\n public abstract deactivate(): void\r\n\r\n protected emitUpdate(update: ConnectorUpdate): void {\r\n if (__DEV__) {\r\n console.log(`Emitting '${ConnectorEvent.Update}' with payload`, update)\r\n }\r\n this.emit(ConnectorEvent.Update, update)\r\n }\r\n\r\n protected emitError(error: Error): void {\r\n if (__DEV__) {\r\n console.log(`Emitting '${ConnectorEvent.Error}' with payload`, error)\r\n }\r\n this.emit(ConnectorEvent.Error, error)\r\n }\r\n\r\n protected emitDeactivate(): void {\r\n if (__DEV__) {\r\n console.log(`Emitting '${ConnectorEvent.Deactivate}'`)\r\n }\r\n this.emit(ConnectorEvent.Deactivate)\r\n }\r\n}\r\n","import bzxApi, { IApiAirdrop } from 'app-lib/apis/bzxApi'\nimport providerUtils from 'app-lib/providerUtils'\nimport { BigNumber } from '@0x/utils'\nimport { FulcrumProvider } from '../../../fulcrum/src/services/FulcrumProvider'\nimport { ChainId } from '../config/chains/chainCommon'\n\nexport enum Airdrop {\n BAL = 'BAL',\n BZRX_COMPENSATION1 = 'BZRX_COMPENSATION1',\n BZRX_COMPENSATION2 = 'BZRX_COMPENSATION2',\n BZRX_LOCKED = 'BZRX_LOCKED',\n P125_COMPENSATION1 = 'P125_COMPENSATION1',\n}\n\n/**\n ```\n airdrop: Airdrop\n airdropIndex: number\n amount: BigNumber\n index: BigNumber\n proof: string[]\n token: {\n symbol: string\n address: string\n decimals: number\n }\n userClaimed: boolean\n ```\n Note: `index` is the user index in the airdrop;\n */\nexport interface IAirdropInfo extends IApiAirdrop {\n airdrop: Airdrop\n airdropIndex: number\n userClaimed: boolean\n}\n\nfunction airdropPolygonCfg(index: number): {\n index: number\n airdropChainId: ChainId\n contract: string\n} {\n return { index, airdropChainId: 137, contract: '0x59a6579C039F84A758665Ca416394BdF6A05985d' }\n}\n\n/**\n * Airdrops are identified via an index + chainId + contract address.\n * They all use the interface provided by MerkleDistributor.\n *\n * * BAL: is for users having staked BPT in our staking contract\n * * BZRX_COMPENSATION: is for the november 2021 hack\n * * P125_COMPENSATION1: is for the november 2021 hack; first airdrop of debt token\n */\nexport const airdrops: Record<\n Airdrop,\n { index: number; airdropChainId: ChainId; contract: string }\n> = {\n BAL: {\n index: 0,\n airdropChainId: 1,\n contract: '0xbAa522162728e3F31E1837E4cbd81687D309767B',\n },\n BZRX_COMPENSATION1: {\n index: 0,\n airdropChainId: 137,\n contract: '0xFA079100e297253a1eb9783aa93646ecF2d5615e',\n },\n P125_COMPENSATION1: airdropPolygonCfg(1),\n BZRX_COMPENSATION2: airdropPolygonCfg(2),\n BZRX_LOCKED: airdropPolygonCfg(Infinity), // this airdrop ID is actually used for multiple airdrops\n}\n\nexport default class AirdropService {\n public fulcrumProvider: FulcrumProvider\n\n getDependenciesStrict(airdrop: Airdrop) {\n const deps = providerUtils.getDependenciesStrict(this.fulcrumProvider)\n const airdropInfo = airdrops[airdrop]\n const merkle = deps.contractsSource.getMerkelDistributorContract(airdropInfo.contract)\n return { ...deps, merkle }\n }\n\n getLocalAirdropId(chainId: ChainId, airdropIndex: number, address: string) {\n return `airdrop-${chainId}-${airdropIndex}-${address}`\n }\n\n /**\n * Set a flag in localstorage to avoid rechecking a claimed airdrop\n */\n setChecked(chainId: ChainId, airdropIndex: number, address: string) {\n localStorage.setItem(this.getLocalAirdropId(chainId, airdropIndex, address), 'true')\n }\n\n /**\n * True if the user has already checked on the current device if he's entitled to an airdrop.\n * This is to avoid checking for airdrop everytime the user user visits the page.\n */\n wasChecked(chainId: ChainId, airdropIndex: number, address: string) {\n return !!localStorage.getItem(this.getLocalAirdropId(chainId, airdropIndex, address))\n }\n\n /**\n * This checks in our backend API if the user is entitled to an airdrop.\n * We store the list of airdrops in our DB using merkle tree, not onchain.\n */\n async getUserAirdropInfo(\n chainId: ChainId,\n airdropIndex: number,\n address: string\n ): Promise {\n const res = await bzxApi.getUserAirdropInfo(chainId, airdropIndex, address)\n res.amount = res.amount.div(10 ** res.token.decimals)\n return res\n }\n\n /**\n * Check onChain if the airdrop was claimed\n */\n async isClaimed(airdrop: Airdrop, userIndex: number) {\n const { contractsSource } = providerUtils.getDependenciesStrictRead(this.fulcrumProvider)\n const airdropInfo = airdrops[airdrop]\n const merkle = contractsSource.getMerkelDistributorContract(airdropInfo.contract)\n return merkle.isClaimed(new BigNumber(airdropInfo.index), new BigNumber(userIndex)).callAsync()\n }\n\n /**\n * Checks in our api for any bzrx locked airdrop and check if it was claimed onchain\n */\n async checkBzrxLockedAirdrops(address: string): Promise {\n const { contractsSource } = providerUtils.getDependenciesStrictRead(this.fulcrumProvider)\n const airdropsFromApi = await bzxApi.getBzrxLockedAirdrops(address)\n const merkle = contractsSource.getMerkelDistributorContract(airdrops.BZRX_LOCKED.contract)\n const userAirdrops: IAirdropInfo[] = []\n for (const airdrop of airdropsFromApi) {\n const userClaimed = await merkle\n .isClaimed(new BigNumber(airdrop.airdropIndex), new BigNumber(airdrop.index))\n .callAsync()\n userAirdrops.push({ ...airdrop, userClaimed, airdrop: Airdrop.BZRX_LOCKED })\n }\n return userAirdrops\n }\n\n /**\n * Check if the user has an airdrop and if it was claimed.\n * Sets a localstorage flag to avoid checking again if user has no airdrop or already claimed.\n * Returns the airdrop info.\n */\n async checkUserAirdrop(airdrop: Airdrop, address: string): Promise {\n const { index, airdropChainId } = airdrops[airdrop]\n const userInfo = await this.getUserAirdropInfo(airdropChainId, index, address)\n const hasAirdrop = userInfo.amount.gt(0)\n let userClaimed = false\n if (hasAirdrop) {\n userClaimed = await this.isClaimed(airdrop, userInfo.index.toNumber())\n }\n if (!hasAirdrop || userClaimed) {\n this.setChecked(airdropChainId, index, address)\n }\n return { ...userInfo, ...{ airdrop, userClaimed, airdropIndex: index } }\n }\n\n /**\n * Note param merkleInfo.amount has to be already divided by its precision\n */\n claimAirdrop(airdropInfo: IAirdropInfo, address: string) {\n const { merkle } = this.getDependenciesStrict(airdropInfo.airdrop)\n const { index, amount, proof } = airdropInfo\n\n const tx = merkle.claim(\n new BigNumber(airdropInfo.airdropIndex),\n index,\n address,\n amount.times(10 ** 18),\n proof\n )\n\n return providerUtils.runTx(this.fulcrumProvider, tx, merkle)\n }\n\n constructor(fulcrumProvider: FulcrumProvider) {\n this.fulcrumProvider = fulcrumProvider\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { chainConfigs } from '../../config/appConfig'\nimport providerUtils, { AnyProvider } from '../providerUtils'\n\n// Returns swap rate from Chainlink Oracle\n/** Note that the rate is divided by the precision difference of both token precision */\nasync function getSwapRateNew(\n provider: AnyProvider,\n srcAsset: Asset,\n destAsset: Asset\n): Promise {\n const { contractsSource, chainId } = providerUtils.getDependenciesStrictRead(provider)\n const srcAddress = assetUtils.getAddress(chainId, srcAsset)\n const destAddress = assetUtils.getAddress(chainId, destAsset)\n const oracleContract = contractsSource.getOracleContract()\n\n const [rate, precision] = await oracleContract.queryRate(srcAddress, destAddress).callAsync()\n return rate.div(precision)\n}\n\n// Returns swap rate from Chainlink Oracle\nasync function getSwapRate(\n provider: AnyProvider,\n srcAsset: Asset,\n destAsset: Asset\n): Promise {\n const { contractsSource, chainId } = providerUtils.getDependenciesStrictRead(provider)\n let result: BigNumber = new BigNumber(0)\n const [srcToken, destToken] = assetUtils.getTokensInfo(chainId, [srcAsset, destAsset])\n const oracleContract = contractsSource.getOracleContract()\n\n const swapPriceData: BigNumber[] = await oracleContract\n .queryRate(srcToken.address, destToken.address)\n .callAsync()\n\n result = swapPriceData[0]\n .times(10 ** (18 - srcToken.decimals))\n .div(10 ** (18 - destToken.decimals))\n .dividedBy(10 ** 18)\n .multipliedBy(swapPriceData[1].dividedBy(10 ** 18)) // swapPriceData[0].dividedBy(10 ** 18);\n\n return result\n}\n\nfunction getGoodSourceAmountOfAsset(asset: Asset): BigNumber {\n switch (asset) {\n case Asset.WBTC:\n return new BigNumber(10 ** 6)\n case Asset.USDC:\n case Asset.USDT:\n return new BigNumber(10 ** 4)\n default:\n return new BigNumber(10 ** 16)\n }\n}\n\nasync function getSwapToUsdRateBatch(\n provider: AnyProvider,\n assets: Asset[],\n usdToken: Asset\n): Promise<[BigNumber[], BigNumber[], BigNumber[]]> {\n const { helperContract } = providerUtils.getDependenciesStrictRead(provider)\n let result: [BigNumber[], BigNumber[], BigNumber[]] = [[], [], []]\n\n const usdTokenAddress = assetUtils.getAddress(provider.currentChainId, usdToken)\n const underlyings = assets.map((e) =>\n assetUtils.getAddress(provider.currentChainId, e)\n ) as string[]\n const amounts = assets.map((e) => getGoodSourceAmountOfAsset(e)) as BigNumber[]\n\n const res = await helperContract.assetRates(usdTokenAddress, underlyings, amounts).callAsync()\n\n // TODO: This is reformatted to support legacy code, but can probably be avoided\n result = res.reduce((acc, item) => {\n acc[0].push(item.rate)\n acc[1].push(item.precision)\n acc[2].push(item.destAmount)\n return acc\n }, result)\n\n return result\n}\n\nasync function getSwapToUsdRate(provider: AnyProvider, asset: Asset): Promise {\n return getSwapRate(provider, asset, chainConfigs[provider.currentChainId].stablecoinForUsdRates)\n}\n\nexport default { getSwapRate, getSwapToUsdRate, getSwapToUsdRateBatch, getSwapRateNew }\n","import assetUtils, { Asset, getItokenAddressInfo } from 'app-lib/assetUtils'\nimport _axios from 'axios'\nimport { chainConfigs, ChainId } from 'bzx-common/src/config/appConfig'\nimport { BigNumber } from '@0x/utils'\nimport { TreasuryBalance } from 'bzx-common/src/stores/StatsStore/StatsStore'\n\nconst BZX_API_URL = process.env.BZX_API_URL\n\nconst axios = _axios.create({\n baseURL: BZX_API_URL,\n timeout: 15000,\n})\n\n/**\n * Try to get the original error message from server.\n * @param {Error} error Error from a request\n */\nfunction normalizeRequestError(error: any) {\n if (error && error.response && error.response.data) {\n const errorData = error.response.data\n if (errorData.message) {\n error.message = errorData.message\n }\n if (errorData.errorCode) {\n error.code = errorData.errorCode\n }\n }\n return error\n}\n\nexport interface IInterestRates {\n lendApr: number\n lendApy: number\n borrowApr: number\n borrowApy: number\n yieldFarmingAPR: number\n}\n\nexport interface IAssetsStatsHistory {\n token: Asset\n timestamp: string\n tvlUsd: number\n tvlUsdChange: number\n tvl?: number\n tvlChange?: number\n apr?: number\n aprChange?: number\n}\n\nexport type ApiNetworkName = 'eth' | 'bsc' | 'polygon' | 'arb' | 'optimism'\n\n/** This is the current mapping we have in the web api; should replace by chainId on api side. */\nexport const apiNetworkNames: Record = {\n 1: 'eth',\n 10: 'optimism',\n 56: 'bsc',\n 137: 'polygon',\n 42161: 'arb',\n}\n\nexport const apiNetworkToChainId: Record = {\n eth: 1,\n optimism: 10,\n bsc: 56,\n polygon: 137,\n arb: 42161,\n}\n\nexport interface IInterestRatesFromApi {\n lendApr: number\n lendApy: number\n borrowApr: number\n borrowApy: number\n yieldFarmingAPR: number\n}\n\nexport const getTreasuryBalances = async (): Promise => {\n const response = await axios.get<{ data: { asset: Asset; amount: string; amountUSD: string }[] }>(\n '/treasury/balances'\n )\n return response.data.data.map((a) => ({\n // we have decided to show vbzrx as is, like in staking, so we map vooki to vbzrx\n asset: a.asset === Asset.vOOKI ? Asset.vBZRX : a.asset,\n amount: new BigNumber(a.amount),\n amountUSD: new BigNumber(a.amountUSD),\n }))\n}\n\nexport type LoanParamsData = {\n loanId: string // \"0xac6653ed4f664f3e17e9a2a945bf9551102539ab392e4a23b410843d5356aa45\",\n principal: Asset //\"CAKE\",\n collateral: Asset //\"AUTO\",\n platform: string // \"Fulcrum\",\n initialMargin: number // 20,\n maintenanceMargin: number // 15,\n liquidationPenalty: number // 7\n}\n\nconst getLoanParams = async (\n chainId: ChainId,\n platform: string,\n loanAsset: Asset,\n collateralAsset: Asset\n): Promise => {\n const principal = assetUtils.wrapNativeAsset(chainId, loanAsset)\n const collateral = assetUtils.wrapNativeAsset(chainId, collateralAsset)\n const networks = chainId\n const type = platform.toLowerCase() === 'fulcrum' ? 'trade' : 'borrow'\n const loanParams = await fetch(\n `${BZX_API_URL}/loan-params?networks=${networks}&principal=${principal}&collateral=${collateral}&type=${type}`\n )\n const data: LoanParamsData[] = (await loanParams.json()).data[apiNetworkNames[chainId]]\n const loanParam = data.find(\n (param) =>\n param.platform.toLowerCase() === platform.toLowerCase() &&\n param.principal === principal &&\n param.collateral === collateral\n )\n return loanParam\n}\n\nconst subgraphFetch = async (\n query: string,\n chainId: ChainId,\n opts?: { oldGraph: boolean }\n): Promise => {\n // We have graph for old contracts. Some users wanted their old trade history\n const network = apiNetworkNames[chainId] + (opts?.oldGraph ? '_old' : '')\n const res = await fetch(`${process.env.BZX_API_URL}/graph/stats/${network}/proxy`, {\n method: 'post',\n body: JSON.stringify({ query }),\n headers: { 'Content-Type': 'application/json' },\n })\n const data = await res.json()\n if (data.success === false) {\n throw new Error(`Failed ${BZX_API_URL}/graph/stats/${network}/proxy`)\n }\n return data\n}\n\nexport interface IApiAirdrop {\n airdropIndex: number\n amount: BigNumber\n index: BigNumber\n proof: string[]\n token: {\n symbol: string\n address: string\n decimals: number\n }\n}\n\n/**\n * https://api.ooki.com/v1/airdrops?index=0&networks=eth&address=0xad65de4d66ba3381f4C244c238aed5012cd53d3b\n * Note: the API is fu**, sometimes sent \"empty response\" or 0 amounts if the user has no airdrop\n * until it's fixed, need to check if the data is actually there.\n */\nconst getUserAirdropInfo = async (\n chainId: ChainId,\n airdropIndex: number,\n address: string\n): Promise => {\n try {\n const network = apiNetworkNames[chainId]\n const params = {\n networks: network,\n index: airdropIndex,\n address,\n }\n const { data } = await axios.get('/airdrops', { params })\n const info = data.data[network][airdropIndex]\n return {\n airdropIndex,\n amount: new BigNumber(info && info.amount ? info.amount : 0),\n index: new BigNumber(info && typeof info.index === 'number' ? info.index : -1), // set to -1 to indicate the user has no airdrop\n proof: info && info.proof ? info.proof : [],\n token: {\n symbol: info.token.name.toUpperCase(), // API is sending \"name\" instead of \"symbol\"\n address: info.token.erc20Address,\n decimals: info.token.decimals,\n },\n }\n } catch (error) {\n throw normalizeRequestError(error)\n }\n}\n\n/**\n * This is the airdrop where users have to send locked bzrx to our contract on BSC and get it back on Polygon\n */\nasync function getBzrxLockedAirdrops(address: string): Promise {\n try {\n const params = {\n address,\n }\n const { data } = await axios.get('/airdrops/locked-bzrx', { params })\n data.data.forEach((airdrop: any) => {\n airdrop.token.symbol = airdrop.token.name.toUpperCase()\n airdrop.token.address = airdrop.token.erc20Address\n airdrop.amount = new BigNumber(airdrop.amount || 0).div(10 ** airdrop.token.decimals)\n airdrop.index = new BigNumber(airdrop.index)\n delete airdrop.token.name\n delete airdrop.token.erc20Address\n })\n return data.data\n } catch (error) {\n throw normalizeRequestError(error)\n }\n}\n\nexport interface IChainTokenStat {\n address: string\n availableLiquidity: string\n borrowApr: string\n supplyApr: string\n tokenName: Asset\n tokenUsdPrice: string\n totalBorrow: string\n totalSupply: string\n usdTotalLocked: string\n usdSupply: string\n vaultBalance: string\n decimals: number\n iTokenAddress: string\n iTokenExplorerUrl: string\n logo: string\n}\n\nexport interface IAllTokensStats {\n usdSupply: string\n usdTotalLocked: string\n}\n\nexport interface IChainStat {\n chainId: ChainId\n stats: IChainTokenStat[]\n allTokensStats: IAllTokensStats\n}\n\n/**\n * Returns an array of chainId with their corresponding tokens reserve and rates\n * chainId can be passed optionally to get stats for a single chain\n *\n * `[{chainId: 1, stats: IChainTokenStat[], allTokensStats:{}}, {chainId: 137, stats: ...}, ...]`\n */\nasync function getChainStats(chainId?: ChainId): Promise {\n const url = chainId ? `/stats/chain/${chainId}` : `/stats`\n try {\n const { data } = await axios.get<{ data: IChainStat[] | IChainStat }>(url)\n const stats = Array.isArray(data.data) ? data.data : [data.data]\n stats.forEach((stat) => {\n const chain = chainConfigs[stat.chainId]\n if (!chain) {\n return\n }\n stat.chainId = chain.chainDetails.chainId\n stat.stats.forEach((token) => {\n if (chain.native.asset === token.tokenName) {\n // We want to use the wrapped asset everywhere\n token.tokenName = chain.native.wrapped\n }\n if (token.tokenName === 'ETH' && chainId === 137) {\n // fixes a problem with polygon, the api sends ETH instead of WETH\n token.tokenName = Asset.WETH\n }\n const { decimals, iTokenAddress, iTokenExplorerUrl } = getItokenAddressInfo(\n stat.chainId,\n token.tokenName\n )\n const assetsCommon = assetUtils.getCommon(token.tokenName)\n token.iTokenAddress = iTokenAddress\n token.iTokenExplorerUrl = iTokenExplorerUrl\n token.decimals = decimals\n token.logo = assetsCommon ? assetsCommon.spriteLogo : ''\n })\n })\n // always return an array for a consistent response\n return stats\n } catch (err) {\n throw normalizeRequestError(err)\n }\n}\n\nexport interface IUserYieldApi {\n iTokenAddress: string\n iTokenPrice: string // price in asset\n userItokenPrice: string\n usdPrice: number\n}\n\nasync function getUserItokenPrice(params: {\n chainId: ChainId\n address: string\n}): Promise {\n try {\n const { data } = await axios.get('/user-itoken-price', { params })\n return data\n } catch (err) {\n throw normalizeRequestError(err)\n }\n}\n\nasync function postFingerPrint(info: { fp: any; wallet: string }) {\n return axios.post('/fpr', info)\n}\n\n/**\n * Returns an array with history prepared for chart\n * asset can be passed optionally to get assets stats history or tvl history data\n */\nconst getAssetStatsHistory = async (chainId: ChainId, assetStats = false, pointsNumber = 30) => {\n try {\n const startData = new Date().setDate(new Date().getDate() - pointsNumber)\n const endData = new Date().getTime()\n const requestUrl = assetStats\n ? `${BZX_API_URL}/asset-stats-history?start_date=${startData}&end_date=${endData}&points_number=${pointsNumber}&chainId=${chainId}`\n : `${BZX_API_URL}/tvl-history?start_date=${startData}&end_date=${endData}&points_number=${pointsNumber}&chainId=${chainId}`\n const response = await fetch(requestUrl)\n const responseJson = await response.json()\n return responseJson.data\n } catch (err) {\n throw normalizeRequestError(err)\n }\n}\n\nexport default {\n getBzrxLockedAirdrops,\n getChainStats,\n getLoanParams,\n getUserAirdropInfo,\n getUserItokenPrice,\n postFingerPrint,\n subgraphFetch,\n getAssetStatsHistory,\n}\n","import { chainConfigs, ChainId } from 'bzx-common/src/config/appConfig'\nimport { ProviderType } from 'bzx-common/src/domain/ProviderTypeDictionary'\nimport { providers } from 'ethers5'\nimport { RPCSubprovider, Web3ProviderEngine } from '@0x/subproviders'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { AbstractConnector } from '@web3-react/abstract-connector'\nimport { ConnectorUpdate } from '@web3-react/types'\n\nexport default class Web3ConnectionFactory {\n public static rpcSubprovider: RPCSubprovider\n public static networkId: number\n public static canWrite: boolean\n public static userAccount: string | undefined\n public static providerEngine: any\n public static web3Wrapper: Web3Wrapper\n public static currentConnector: AbstractConnector | undefined\n static etherProvider: providers.JsonRpcProvider\n\n public static async setWalletProvider(\n connector: AbstractConnector,\n providerType: ProviderType,\n web3ReactAccount?: string\n ) {\n try {\n const provider = await connector.getProvider()\n const account = await connector.getAccount()\n const chainId = (await connector.getChainId()).toString()\n const networkId = chainId.includes('0x') ? parseInt(chainId, 16) : parseInt(chainId, 10)\n const web3Wrapper = new Web3Wrapper(provider)\n\n const canWrite = true\n Web3ConnectionFactory.userAccount = account\n ? account\n : web3ReactAccount\n ? web3ReactAccount\n : undefined\n\n Web3ConnectionFactory.providerEngine = provider\n Web3ConnectionFactory.networkId = networkId\n ? networkId\n : await web3Wrapper.getNetworkIdAsync()\n Web3ConnectionFactory.web3Wrapper = web3Wrapper\n Web3ConnectionFactory.canWrite = canWrite\n Web3ConnectionFactory.etherProvider = new providers.JsonRpcProvider(\n chainConfigs[networkId as ChainId].rpcUrlDefault\n )\n } catch (e) {\n console.error(e)\n const chainId = (localStorage.getItem('userChainId') || 1) as ChainId\n return Web3ConnectionFactory.setReadonlyProvider(chainId)\n }\n }\n\n public static getRPCSubprovider(chainId: ChainId): RPCSubprovider {\n return new RPCSubprovider(chainConfigs[chainId].rpcUrlDefault)\n }\n\n public static getEthersProvider(chainId: ChainId): providers.BaseProvider {\n return new providers.JsonRpcProvider(chainConfigs[chainId].rpcUrlDefault)\n }\n\n public static async setReadonlyProvider(chainId: ChainId) {\n const providerEngine: Web3ProviderEngine = new Web3ProviderEngine({ pollingInterval: 3600000 }) // 1 hour polling\n providerEngine.addProvider(this.getRPCSubprovider(chainId))\n\n return new Promise((resolve) => {\n providerEngine.start(async () => {\n Web3ConnectionFactory.providerEngine = providerEngine\n Web3ConnectionFactory.web3Wrapper = new Web3Wrapper(providerEngine)\n Web3ConnectionFactory.networkId =\n await Web3ConnectionFactory.web3Wrapper.getNetworkIdAsync()\n Web3ConnectionFactory.canWrite = false\n Web3ConnectionFactory.userAccount = undefined\n Web3ConnectionFactory.etherProvider = new providers.JsonRpcProvider(\n chainConfigs[Web3ConnectionFactory.networkId as ChainId].rpcUrlDefault\n )\n resolve(true)\n })\n })\n }\n\n public static updateConnector(update: ConnectorUpdate) {\n const { chainId, account } = update\n if (chainId) {\n const networkId = chainId.toString()\n Web3ConnectionFactory.networkId = networkId.includes('0x')\n ? parseInt(networkId, 16)\n : parseInt(networkId, 10)\n }\n if (account) {\n Web3ConnectionFactory.userAccount = account\n }\n }\n}\n","import * as mobx from 'mobx'\n\nexport interface IAsyncDataProps {\n pending: boolean\n loaded: boolean\n value: T\n lastUpdated: number\n lastAttempt: number\n error: Error | null\n /** milliseconds - skip fetching if the last update was successful within debounce time */\n debounce: number\n}\n\n/**\n * Observable model of typical asynchronous data state\n *\n * Observable properties: `pending`, `loaded`, `value`, `lastUpdated`, `lastAttempt` `error`\n *\n * ### Usage example\n * Provide your model to a view, like a React component and manage the model in a store.\n *\n ```\n // NewsStore.js (pseudo code)\n import myNewsApi from 'myNewsApi'\n\n class NewsStore {\n news = new AsyncData(\n [],\n () => myNewsApi.fetchNews()\n )\n }\n\n // React component (pseudo code)\n function NewsComponent (props) {\n const {news} = props\n return (\n
\n \n {news.pending &&

Loading...

}\n {news.error &&

Error

}\n {news.value.map((item) =>

{item.title}

)}\n
\n )\n }\n ```\n */\n\nexport default class AsyncData implements IAsyncDataProps {\n pending = false\n loaded = false\n value: T\n lastUpdated = 0\n lastAttempt = 0\n error: Error | null = null\n debounce: number\n\n private readonly initialValue: T\n private readonly fetchHandler: (...args: any) => Promise\n private readonly onError: (err: Error) => void\n static defaultErrorHandler(error: Error) {\n console.error(error)\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: keyof IAsyncDataProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n public assign(props: Partial>) {\n Object.assign(this, props)\n }\n\n /**\n * Update async data\n */\n async fetch(...args: any) {\n const now = Date.now()\n if (!isNaN(this.debounce) && Date.now() - this.lastUpdated < this.debounce) {\n return\n }\n this.assign({ pending: true, error: null })\n try {\n const value = await this.fetchHandler(...args)\n this.assign({ value, lastUpdated: now })\n return value\n } catch (error) {\n this.onError?.(error)\n this.set('error', error)\n } finally {\n this.assign({ pending: false, lastAttempt: now })\n this.set('loaded', true)\n }\n }\n\n /**\n * Reset observable state to initial state\n */\n reset() {\n this.assign({\n error: null,\n loaded: false,\n value: this.initialValue,\n pending: false,\n lastAttempt: 0,\n lastUpdated: 0,\n })\n }\n\n constructor(\n initialValue: T,\n fetchHandler: (...args: any) => Promise,\n opts?: { onError?: (error: Error) => void; debounce?: number }\n ) {\n this.fetchHandler = fetchHandler\n this.value = initialValue\n this.initialValue = initialValue\n this.onError = opts?.onError ?? AsyncData.defaultErrorHandler\n this.debounce = opts?.debounce ?? NaN\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n }\n}\n","import { Asset } from 'app-lib/assetUtils'\nimport { DEX, IUniRoute } from 'app-lib/dexSelector/types'\nimport { BigNumber } from '@0x/utils'\nimport { ProviderType } from '../../domain/ProviderTypeDictionary'\nimport { PositionType } from 'bzx-common/src/domain/trade.types'\n\nexport enum UdfFeed {\n BINANCE = 'BINANCE',\n KYBER = 'KYBER',\n}\n\nexport const udfFeeds: Record = {\n BINANCE: { id: UdfFeed.BINANCE, url: 'https://api.ooki.com/udf/56', symbolSeparator: '' },\n KYBER: { id: UdfFeed.KYBER, url: 'https://api.kyber.network/chart', symbolSeparator: '_' },\n}\n\nexport type ChainId = 1 | 10 | 56 | 137 | 42161\n\n/**\n * Pairconfig example pseudo code for the WSTETH/ETH pair\n * ```\n * {\n * WSTETH: {\n * ETH:\n * {dexes: [CURVE], disablePosition: {SHORT: true}, depositTokens: {LONG: [WSTETH]}}\n * }\n * }\n * }\n * ```\n */\n\nexport interface IPairSettings {\n dexes: DEX[]\n disabledPosition: Partial>\n depositTokens?: Partial>\n maxLeverage?: number // assuming long and short have same max for now\n}\n\nexport type PairConfigs = Partial>>>\n\ntype NativeCurrency = {\n name: string\n symbol: string\n decimals: number\n}\n\nexport interface NetworkDetails {\n blockExplorer: string\n blocksPerYear: number\n chainId: ChainId\n chainName: string\n shortName: string\n nativeCurrency: NativeCurrency\n rpcUrls?: Array\n}\n\nexport interface IChainConfig {\n /**\n * * `assets` are the ones that can be borrowed\n * * `collateralAssets` are the ones that can be used as collateral for a loan (borrow feature)\n */\n borrowing: { assets: Asset[]; collateralAssets: Asset[] }\n chainDetails: NetworkDetails\n chartUDF: { id: UdfFeed; url: string; symbolSeparator: string }\n comingSoon: {\n /** Allows to promote tokens that are going to be released but currently disabled in UI */\n tokens: Partial>\n }\n compromisedContracts: string[]\n contracts: {\n bzx: string\n helperProxy: string\n priceFeed: string\n sweepFees: string\n tokenRegistry: string\n }\n dexes: DEX[]\n /** Each chain swap implementation uses different dexes which are identified in dex records */\n dexesDetails: Partial>\n features: { dexSelector: boolean }\n gas: { priceDefault: BigNumber; amount: { fallback: number; coefficient: number } }\n icon: { name: string; color: string }\n lending: { assets: Asset[] }\n native: { asset: Asset; wrapped: Asset }\n /** Some blockchains work only with wrapped native token (WETH). eg: Arbitrum */\n nativeTokenSupported: boolean\n /**\n * Here are the different protocol versions with noticeable or breaking changes\n * * 2: first version of new interest rates\n * * 3: pay with ooki (getSwapExpectedReturn breaking change)\n * * 4: itoken as collateral (break in closeWithDeposit, closeWithSwap,\n * getSwapExpectedReturn, getDepositAmountForBorrow, getBorrowAmountForDeposit)\n * * The frontend can currently run version 4 only.\n */\n protocol: { version: number }\n /** For blockchain read calls when user is not connected with his wallet */\n rpcUrlDefault: string\n stableCoins: Asset[]\n stablecoinForUsdRates: Asset\n stats: { assets: Asset[] }\n trading: {\n defaultPair: { baseToken: Asset; quoteToken: Asset }\n pairs: [Asset, Asset][]\n baseQuote: { base: Asset[]; quote: Asset[] }\n pairConfigs: PairConfigs\n }\n twitterHandle: string\n /** Disables UI for maintenance period, etc. */\n uiDisabled: boolean\n uiDisabledReason: string\n wallets: ProviderType[]\n uniRouteSettings: Record\n}\n\n/**\n * Get list of base and quote from the trade pairs list\n */\nexport function getBaseQuote(list: [Asset, Asset][]) {\n const indexedBase: Partial> = {}\n const indexedQuote: Partial> = {}\n return list.reduce(\n (acc, [base, quote]) => {\n if (!indexedBase[base]) {\n indexedBase[base] = true\n acc.base.push(base)\n }\n if (!indexedQuote[quote]) {\n indexedQuote[quote] = true\n acc.quote.push(quote)\n }\n return acc\n },\n { base: [], quote: [] } as { base: Asset[]; quote: Asset[] }\n )\n}\n","import { Asset } from 'app-lib/assetUtils'\nimport { DEX, IUniRoute } from 'app-lib/dexSelector/types'\nimport { ProviderType } from 'bzx-common/src/domain/ProviderTypeDictionary'\nimport { BigNumber } from '@0x/utils'\nimport { getBaseQuote, IChainConfig, udfFeeds } from './chainCommon'\n\nconst assets = [\n Asset.ETH,\n Asset.ARB,\n Asset.FRAX,\n Asset.LINK,\n Asset.USDC,\n Asset.USDT,\n Asset.WBTC,\n Asset.SPELL,\n Asset.MIM,\n]\n\nconst tradePairs: [Asset, Asset][] = [\n [Asset.ARB, Asset.USDT],\n [Asset.ARB, Asset.USDC],\n [Asset.ARB, Asset.WBTC],\n [Asset.ARB, Asset.ETH],\n [Asset.ETH, Asset.USDT],\n [Asset.ETH, Asset.FRAX],\n [Asset.ETH, Asset.MIM],\n [Asset.ETH, Asset.USDC],\n [Asset.FRAX, Asset.MIM],\n [Asset.LINK, Asset.ETH],\n [Asset.LINK, Asset.FRAX],\n [Asset.LINK, Asset.MIM],\n [Asset.LINK, Asset.SPELL],\n [Asset.LINK, Asset.USDC],\n [Asset.LINK, Asset.USDT],\n [Asset.LINK, Asset.WBTC],\n [Asset.SPELL, Asset.ETH],\n [Asset.SPELL, Asset.FRAX],\n [Asset.SPELL, Asset.MIM],\n [Asset.SPELL, Asset.USDC],\n [Asset.SPELL, Asset.USDT],\n [Asset.SPELL, Asset.WBTC],\n [Asset.USDC, Asset.FRAX],\n [Asset.USDC, Asset.MIM],\n [Asset.USDC, Asset.USDT],\n [Asset.USDT, Asset.FRAX],\n [Asset.USDT, Asset.MIM],\n [Asset.WBTC, Asset.ETH],\n [Asset.WBTC, Asset.FRAX],\n [Asset.WBTC, Asset.MIM],\n [Asset.WBTC, Asset.USDC],\n [Asset.WBTC, Asset.USDT],\n]\n\nconst route1: IUniRoute = {\n topN: 0,\n topNDirectSwaps: 2,\n topNTokenInOut: 0,\n topNSecondHop: 0,\n topNWithEachBaseToken: 0,\n topNWithBaseToken: 0,\n}\n\nconst route2: IUniRoute = {\n topN: 0,\n topNDirectSwaps: 2,\n topNTokenInOut: 2,\n topNSecondHop: 0,\n topNWithEachBaseToken: 0,\n topNWithBaseToken: 0,\n}\n\nconst route3: IUniRoute = {\n topN: 0,\n topNDirectSwaps: 0,\n topNTokenInOut: 2,\n topNSecondHop: 0,\n topNWithEachBaseToken: 0,\n topNWithBaseToken: 0,\n}\n\nconst uniRouteSettings: Record = {\n FRAXUSDC: [route1, route1, route1],\n FRAXUSDT: [route1, route1, route1],\n FRAXWETH: [route1, route1, route1],\n FRAXWBTC: [route1, route1, route1],\n USDCWETH: [route1, route1, route1],\n USDTWETH: [route2, route2, route2],\n WBTCWETH: [route1, route1, route1],\n LINKUSDC: [route3, route3, route3],\n LINKUSDT: [route3, route3, route3],\n FRAXLINK: [route1, route1, route1],\n LINKWBTC: [route3, route3, route3],\n USDCUSDT: [route1, route1, route1],\n USDCWBTC: [route3, route3, route3],\n USDTWBTC: [route3, route3, route3],\n}\n\n// add iTokens as collateral\nconst collateralAssets: Asset[] = assets.concat(assets.map((asset) => ('I' + asset) as Asset))\n\nconst config: IChainConfig = {\n chainDetails: {\n chainId: 42161,\n blockExplorer: 'https://arbiscan.io',\n chainName: 'Arbitrum One',\n shortName: 'Arbitrum',\n nativeCurrency: {\n name: 'ETH',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: ['https://arb1.arbitrum.io/rpc'],\n blocksPerYear: 0,\n },\n borrowing: { assets, collateralAssets },\n comingSoon: {\n tokens: {},\n },\n contracts: {\n bzx: '0x37407f3178ffe07a6cf5c847f8f680fecf319fab',\n helperProxy: '0xB8329B5458B1E493EFd8D9DA8C3B5E6D68e67C21',\n priceFeed: '0x392b7Baf9dBf56a0AcA52f0Ba8bC1D7451Ef8A4A',\n sweepFees: '0xcbDE8C5603D4bA855a162A450B1d054A02D8448f',\n tokenRegistry: '0x86003099131d83944d826F8016E09CC678789A30',\n },\n dexes: [DEX.SUSHI, DEX.UNISWAPV3],\n dexesDetails: {\n [DEX.SUSHI]: {\n id: 1,\n address: '0x8D13F73973ac2Ec980DB01A5FB781636cD4cDF8A',\n },\n [DEX.UNISWAPV3]: {\n id: 2,\n address: '0xF924981CFD341Fe3f3417f77696e35b68CC6d1Fa',\n },\n },\n features: { dexSelector: true },\n gas: {\n priceDefault: new BigNumber(2).times(10 ** 9),\n amount: { coefficient: 1.2, fallback: 450000 },\n },\n lending: { assets },\n protocol: { version: 4 },\n trading: {\n defaultPair: { baseToken: Asset.ETH, quoteToken: Asset.USDT },\n pairs: tradePairs,\n baseQuote: getBaseQuote(tradePairs),\n pairConfigs: {},\n },\n native: { asset: Asset.ETH, wrapped: Asset.WETH },\n nativeTokenSupported: true,\n compromisedContracts: [],\n icon: { name: 'arbitrum-logo', color: '#96BEDC' },\n chartUDF: udfFeeds.BINANCE,\n rpcUrlDefault: process.env.RPC_URL_ARBITRUM,\n stableCoins: [Asset.USDC, Asset.USDT, Asset.FRAX, Asset.MIM],\n stablecoinForUsdRates: Asset.USDC,\n stats: { assets },\n twitterHandle: '@arbitrum',\n uiDisabled: false,\n uiDisabledReason: '',\n wallets: [ProviderType.MetaMask],\n uniRouteSettings,\n}\n\nexport default config\n","import { Asset } from 'app-lib/assetUtils'\nimport { DEX } from 'app-lib/dexSelector/types'\nimport { ProviderType } from 'bzx-common/src/domain/ProviderTypeDictionary'\nimport { BigNumber } from '@0x/utils'\nimport { getBaseQuote, IChainConfig, udfFeeds } from './chainCommon'\n\nconst assets = [Asset.BNB, Asset.ETH, Asset.BUSD, Asset.BTCB, Asset.USDT, Asset.LINK]\n\nconst tradePairs: [Asset, Asset][] = [\n [Asset.BNB, Asset.BUSD],\n [Asset.BNB, Asset.USDT],\n [Asset.BTCB, Asset.BUSD],\n [Asset.BTCB, Asset.USDT],\n [Asset.BUSD, Asset.USDT],\n [Asset.ETH, Asset.BUSD],\n [Asset.ETH, Asset.USDT],\n [Asset.LINK, Asset.BUSD],\n [Asset.LINK, Asset.USDT],\n]\n\n// add iTokens as collateral\nconst collateralAssets: Asset[] = assets.concat(assets.map((asset) => ('I' + asset) as Asset))\n\nconst config: IChainConfig = {\n chainDetails: {\n chainId: 56,\n blocksPerYear: (60 * 60 * 24 * 365) / 3,\n blockExplorer: 'https://bscscan.com',\n chainName: 'BNB Smart Chain',\n shortName: 'BSC',\n nativeCurrency: {\n name: 'BNB',\n symbol: 'BNB',\n decimals: 18,\n },\n rpcUrls: [\n 'https://bsc-dataseed.binance.org/',\n 'https://bsc-dataseed1.defibit.io/',\n 'https://bsc-dataseed1.ninicoin.io/',\n 'https://bsc-dataseed3.binance.org/',\n ],\n },\n borrowing: { assets, collateralAssets },\n comingSoon: {\n tokens: {},\n },\n contracts: {\n bzx: '0xD154eE4982b83a87b0649E5a7DDA1514812aFE1f',\n helperProxy: '0x81B91c9a68b94F88f3DFC4F375f101223dDd5007',\n priceFeed: '0x7038600CE4E4059436E32DA4a2fc6476fCfD7A2A',\n sweepFees: '0xC9726942C732fa048dC56f0DeBea7fB2c596bA8C',\n tokenRegistry: '0x1BE70f29D30bB1D325E5D76Ee73109de3e50A57d',\n },\n dexes: [DEX.SUSHI],\n dexesDetails: { [DEX.SUSHI]: { id: 1, address: '0x3D87106A93F56ceE890769A808Af62Abc67ECBD3' } },\n features: { dexSelector: false },\n gas: {\n priceDefault: new BigNumber(10).times(10 ** 9),\n amount: { coefficient: 1.2, fallback: 450000 },\n },\n lending: { assets },\n protocol: { version: 4 },\n trading: {\n defaultPair: { baseToken: Asset.ETH, quoteToken: Asset.USDT },\n pairs: tradePairs,\n baseQuote: getBaseQuote(tradePairs),\n pairConfigs: {},\n },\n native: { asset: Asset.BNB, wrapped: Asset.WBNB },\n nativeTokenSupported: true,\n compromisedContracts: [],\n icon: { name: 'binance-logo', color: '#f3ba2e' },\n chartUDF: udfFeeds.BINANCE,\n stableCoins: [Asset.USDT, Asset.BUSD],\n rpcUrlDefault: process.env.RPC_URL_BSC,\n stablecoinForUsdRates: Asset.BUSD,\n stats: { assets },\n twitterHandle: '@BinanceChain',\n uiDisabled: false,\n uiDisabledReason: '',\n wallets: [\n ProviderType.MetaMask,\n ProviderType.Binance,\n ProviderType.TrustWallet,\n ProviderType.WalletConnect,\n ],\n uniRouteSettings: {},\n}\n\nexport default config\n","import { Asset } from 'app-lib/assetUtils'\nimport { DEX } from 'app-lib/dexSelector/types'\nimport { ProviderType } from 'bzx-common/src/domain/ProviderTypeDictionary'\nimport { BigNumber } from '@0x/utils'\nimport { getBaseQuote, IChainConfig, udfFeeds } from './chainCommon'\n\nconst assets = [Asset.DAI, Asset.USDT, Asset.USDC, Asset.ETH, Asset.OP, Asset.WBTC, Asset.FRAX]\n\nconst tradePairs: [Asset, Asset][] = [\n [Asset.DAI, Asset.ETH],\n [Asset.DAI, Asset.FRAX],\n [Asset.DAI, Asset.OP],\n [Asset.DAI, Asset.USDC],\n [Asset.DAI, Asset.USDT],\n [Asset.DAI, Asset.WBTC],\n [Asset.ETH, Asset.FRAX],\n [Asset.ETH, Asset.USDC],\n [Asset.ETH, Asset.USDT],\n [Asset.ETH, Asset.WBTC],\n [Asset.OP, Asset.FRAX],\n [Asset.OP, Asset.USDC],\n [Asset.OP, Asset.USDT],\n [Asset.OP, Asset.WBTC],\n [Asset.OP, Asset.WETH],\n [Asset.USDC, Asset.FRAX],\n [Asset.USDC, Asset.USDT],\n [Asset.USDT, Asset.FRAX],\n [Asset.WBTC, Asset.FRAX],\n [Asset.WBTC, Asset.USDC],\n [Asset.WBTC, Asset.USDT],\n]\n\n// add iTokens as collateral\nconst collateralAssets: Asset[] = assets.concat(assets.map((asset) => ('I' + asset) as Asset))\n\nconst config: IChainConfig = {\n chainDetails: {\n chainId: 10,\n blockExplorer: 'https://optimistic.etherscan.io',\n chainName: 'Optimism Mainnet',\n shortName: 'Optimism',\n nativeCurrency: {\n name: 'ETH',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: ['https://rpc.ankr.com/optimism'],\n blocksPerYear: (60 * 60 * 24 * 365) / 15,\n },\n borrowing: { assets, collateralAssets },\n comingSoon: {\n tokens: {},\n },\n contracts: {\n bzx: '0xAcedbFd5Bc1fb0dDC948579d4195616c05E74Fd1',\n helperProxy: '0x3920993FEca46AF170d296466d8bdb47A4b4e152',\n priceFeed: '0x37A3fC76105c51D54a9c1c3167e30601EdeE8782',\n sweepFees: '', // TODO\n tokenRegistry: '0x22a2208EeEDeb1E2156370Fd1c1c081355c68f2B',\n },\n dexes: [DEX.UNISWAPV3],\n dexesDetails: {\n [DEX.UNISWAPV3]: { id: 2, address: '0x65F869921BB4256dAe84e24Dead1177ab43D6845' },\n },\n features: { dexSelector: false },\n gas: {\n priceDefault: new BigNumber(5).times(10 ** 9), // TODO\n amount: { coefficient: 2, fallback: 450000 }, // TODO\n },\n lending: { assets },\n protocol: { version: 4 },\n trading: {\n defaultPair: { baseToken: Asset.ETH, quoteToken: Asset.USDT },\n pairs: tradePairs,\n baseQuote: getBaseQuote(tradePairs),\n pairConfigs: {},\n },\n native: { asset: Asset.ETH, wrapped: Asset.WETH },\n nativeTokenSupported: true,\n compromisedContracts: [],\n icon: { name: 'chain-optimism', color: '' },\n chartUDF: udfFeeds.BINANCE,\n rpcUrlDefault: process.env.RPC_URL_OPTIMISM,\n stableCoins: [Asset.USDC, Asset.USDT, Asset.DAI, Asset.FRAX],\n stablecoinForUsdRates: Asset.USDC,\n stats: { assets },\n twitterHandle: '@optimismPBC',\n uiDisabled: false,\n uiDisabledReason: '',\n wallets: [ProviderType.MetaMask],\n uniRouteSettings: {},\n}\n\nexport default config\n","import { Asset } from 'app-lib/assetUtils'\nimport { DEX } from 'app-lib/dexSelector/types'\nimport { ProviderType } from 'bzx-common/src/domain/ProviderTypeDictionary'\nimport { BigNumber } from '@0x/utils'\nimport { getBaseQuote, IChainConfig, udfFeeds } from './chainCommon'\n\nconst assets = [Asset.MATIC, Asset.WETH, Asset.WBTC, Asset.USDC, Asset.USDT, Asset.LINK]\n\nconst tradePairs: [Asset, Asset][] = [\n [Asset.MATIC, Asset.USDT],\n [Asset.MATIC, Asset.USDC],\n [Asset.WETH, Asset.USDT],\n [Asset.WETH, Asset.USDC],\n [Asset.WBTC, Asset.USDT],\n [Asset.WBTC, Asset.USDC],\n [Asset.USDC, Asset.USDT],\n [Asset.LINK, Asset.USDT],\n [Asset.LINK, Asset.USDC],\n]\n\n// add iTokens as collateral\nconst collateralAssets: Asset[] = assets.concat(assets.map((asset) => ('I' + asset) as Asset))\ncollateralAssets.push(Asset.STMATIC)\n\nconst config: IChainConfig = {\n chainDetails: {\n chainId: 137,\n blockExplorer: 'https://polygonscan.com',\n chainName: 'Polygon Mainnet',\n shortName: 'Polygon',\n nativeCurrency: {\n name: 'MATIC',\n symbol: 'MATIC',\n decimals: 18,\n },\n rpcUrls: [\n 'https://polygon-rpc.com',\n 'https://rpc-mainnet.maticvigil.com',\n 'https://rpc-mainnet.matic.quiknode.pro',\n ],\n blocksPerYear: (60 * 60 * 24 * 365) / 15,\n },\n borrowing: { assets, collateralAssets },\n comingSoon: {\n tokens: {},\n },\n contracts: {\n bzx: '0x059D60a9CEfBc70b9Ea9FFBb9a041581B1dFA6a8',\n helperProxy: '0xdb2800b894FDa88F6c49c38379398b257062dF80',\n priceFeed: '0xDB0f02A68e5b52A853d01c5e1d935645FF5c01D4',\n sweepFees: '0x8c02eDeE0c759df83e31861d11E6918Dd93427d2',\n tokenRegistry: '0x4B234781Af34E9fD756C27a47675cbba19DC8765',\n },\n dexes: [DEX.SUSHI, DEX.UNISWAPV3],\n dexesDetails: {\n [DEX.SUSHI]: {\n id: 1,\n address: '0x3D87106A93F56ceE890769A808Af62Abc67ECBD3',\n },\n [DEX.UNISWAPV3]: {\n id: 2,\n address: '0x3d41a177F3cd7907f8f8fFaeb136428B69C585Eb',\n },\n },\n features: { dexSelector: true },\n gas: {\n priceDefault: new BigNumber(5).times(10 ** 9),\n amount: { coefficient: 2, fallback: 450000 },\n },\n lending: { assets },\n protocol: { version: 4 },\n trading: {\n defaultPair: { baseToken: Asset.WETH, quoteToken: Asset.USDT },\n pairs: tradePairs,\n baseQuote: getBaseQuote(tradePairs),\n pairConfigs: {},\n },\n native: { asset: Asset.MATIC, wrapped: Asset.WMATIC },\n nativeTokenSupported: true,\n compromisedContracts: [\n '0xfe4F0eb0A1Ad109185c9AaDE64C48ff8e928e54B', // bzx\n '0xCc0fD6AA1F92e18D103A7294238Fdf558008725a', // helper\n '0x57c7FABb080af5933BfaB2d9ad37374f832A41Bd', // dappHelper\n '0xf326b42a237086f1de4e7d68f2d2456fc787bc01', // iETH\n '0x500c3877650c6c08a59d425d27441eae847ecfda', // iLINK\n '0x949cc03e43c24a954baa963a00bfc5ab146c6ce7', // iMATIC\n '0x2e1a74a16e3a9f8e3d825902ab9fb87c606cb13f', // iUSDC\n '0x18d755c981a550b0b8919f1de2cdf882f489c155', // iUSDT\n '0x97ebf27d40d306ad00bb2922e02c58264b295a95', // iWBTC\n '0xf009c28b2d9e13886105714b895f013e2e43ee12', // iAAVE\n '0x97dfbef4ed5a7f63781472dbc69ab8e5d7357cb9', // iBZRX\n ],\n icon: { name: 'polygon-logo', color: '#863FF8' },\n chartUDF: udfFeeds.BINANCE,\n rpcUrlDefault: process.env.RPC_URL_POLYGON,\n stableCoins: [Asset.USDC, Asset.USDT],\n stablecoinForUsdRates: Asset.USDC,\n stats: { assets },\n twitterHandle: '@0xPolygon',\n uiDisabled: false,\n uiDisabledReason: '',\n wallets: [\n ProviderType.MetaMask,\n ProviderType.TrustWallet,\n ProviderType.WalletConnect,\n ProviderType.WalletLink,\n ],\n uniRouteSettings: {},\n}\n\nexport default config\n","import arbitrumConfig from './arbitrumConfig'\nimport bscConfig from './bscConfig'\nimport { ChainId, IChainConfig } from './chainCommon'\nimport ethereumConfig from './ethereumConfig'\nimport optimismConfig from './optimismConfig'\nimport polygonConfig from './polygonConfig'\n\nconst chainConfigs: Record = {\n 1: ethereumConfig,\n 10: optimismConfig,\n 56: bscConfig,\n 137: polygonConfig,\n 42161: arbitrumConfig,\n}\n\nexport default chainConfigs\n","import { BscConnector } from '@binance-chain/bsc-connector'\nimport { InjectedConnector } from '@web3-react/injected-connector'\nimport { WalletConnectConnector } from '@web3-react/walletconnect-connector'\nimport { WalletLinkConnector } from '@web3-react/walletlink-connector'\nimport { chainConfigs, ChainId, supportedChains } from '../config/appConfig'\n\nconst POLLING_INTERVAL = 3600000\n\nexport const injected = new InjectedConnector({ supportedChainIds: supportedChains })\n\ndeclare global {\n interface Window {\n ethereum: any\n }\n}\n\nexport function useWalletConnect(chainId: ChainId) {\n const rpcUrl = chainConfigs[chainId].rpcUrlDefault\n return new WalletConnectConnector({\n rpc: { [chainId]: rpcUrl },\n bridge: 'https://bridge.walletconnect.org',\n qrcode: true,\n pollingInterval: POLLING_INTERVAL,\n })\n}\n\n// supported networks: https://help.coinbase.com/en/more/coinbase-wallet/getting-started/what-types-of-crypto-does-wallet-support\nexport function useWalletLink(chainId: ChainId) {\n const rpcUrl = chainConfigs[chainId].rpcUrlDefault\n return new WalletLinkConnector({\n url: rpcUrl,\n appName: 'bZx',\n })\n}\n\nexport const binance = new BscConnector({ supportedChainIds: [56] })\n\n/**\n * Prompt the user to add network on Metamask, or switch if the wallet is on a different network\n * @returns true if the setup succeeded, false otherwise\n */\nexport const switchNetwork = async (chainId: ChainId): Promise => {\n const provider = window.ethereum\n if (provider) {\n const network = chainConfigs[chainId].chainDetails\n try {\n await provider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: `0x${network.chainId.toString(16)}` }],\n })\n return true\n } catch (switchError) {\n console.error(switchError)\n // This error code indicates that the chain has not been added to MetaMask.\n const _switchError = switchError as { code: number }\n if (_switchError.code === 4902) {\n try {\n await provider.request({\n method: 'wallet_addEthereumChain',\n params: [\n {\n chainId: `0x${network.chainId.toString(16)}`,\n chainName: network.chainName,\n nativeCurrency: network.nativeCurrency,\n rpcUrls: network.rpcUrls,\n blockExplorerUrls: [network.blockExplorer],\n },\n ],\n })\n return true\n } catch (error) {\n console.error(error)\n return false\n }\n } else {\n return false\n }\n }\n } else {\n console.error(\"Can't setup the BSC network on metamask because window.ethereum is undefined\")\n return false\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport _chainConfigs from './chains'\nimport * as gasConfig from './gasConfig'\nimport _links from './links'\nimport routeConfig from './routeConfig'\nimport { DEX } from 'app-lib/dexSelector/types'\nimport { ChainId as _ChainId } from './chains/chainCommon'\nexport { stakingConfig, daoConfig } from './chains/ethereumConfig'\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\nexport const MAX_UINT = new BigNumber(2).pow(256).minus(1)\nexport const INFINITE_ALLOWANCE = MAX_UINT\nexport const links = _links\n\nexport const supportedChains: ChainId[] = [1, 10, 56, 137, 42161]\nexport type ChainId = _ChainId\n\n/**\n * The localstorage key used to store whether the user has seen that he is not allowed to trade\n * see InfoBlock in \n */\nexport const acceptNoTradeKey = 'notAllowedToTrade'\n\n/**\n * Amount of time that needs to have passed for all vbzrx to have vested (after cliff)\n * @see https://github.com/OokiTrade/contractsV2/blob/2ee66ab40eff103441cad040452f6ed06f197520/contracts/staking/StakingConstants.sol#L33\n */\nconst vestingDurationAfterCliff = 110376000\nconst INITIAL_TORQUE_LOAN_DURATION = new BigNumber(7884000) // initialLoanDuration (approximately 3 months)\n\nexport enum UdfFeed {\n BINANCE = 'BINANCE',\n KYBER = 'KYBER',\n}\n\nconst udfFeeds: Record = {\n BINANCE: { id: UdfFeed.BINANCE, url: 'https://api.ooki.com/udf/56', symbolSeparator: '' },\n KYBER: { id: UdfFeed.KYBER, url: 'https://api.kyber.network/chart', symbolSeparator: '_' },\n}\n\n/**\n * default delay for a debounced function 250ms\n */\nconst delay = 250\n\nexport const gas = gasConfig\n\nexport const ookiToken = {\n address: {\n 1: '0x0de05f6447ab4d22c8827449ee4ba2d5c288379b',\n 137: '0xcd150b1f528f326f5194c012f32eb30135c7c2c9',\n },\n slp: {\n address: '0xeaadde1e14c587a7fb4ba78ea78109bb32975f1e',\n blockExplorerUrl: 'https://etherscan.io/token/0xeaadde1e14c587a7fb4ba78ea78109bb32975f1e',\n sushiPoolLink: 'https://app.sushi.com/add/ETH/0x0de05f6447ab4d22c8827449ee4ba2d5c288379b',\n },\n iooki: {\n address: '0x05d5160cbc6714533ef44ced6dd32112d56ad7da',\n blockExplorerUrl: 'https://etherscan.io/token/0x05d5160cbc6714533ef44ced6dd32112d56ad7da',\n },\n}\n\nexport const chainConfigs = _chainConfigs\nexport const bscCompensationContract = '0xcd5788E81821500cc306378E079B34b964876E55'\nexport const defaultLeverage = { stablePair: 7, others: 3 }\nexport const routes = routeConfig\nexport const maxLeverage = { stablePair: 15, others: 5 }\nexport const leverageSliderMarks = {\n stablePair: [1, 3, 5, 7, 9, 11, 13, 15],\n others: [1, 2, 3, 4, 5],\n}\n\ninterface IDexDetails {\n name: string\n spriteLogo: string\n appLink?: string\n}\n\nexport const dexDetails: Record = {\n [DEX.SUSHI]: {\n name: 'Sushi',\n spriteLogo: 'token-sushi',\n appLink: 'https://app.sushi.com/',\n },\n [DEX.AUTO]: {\n name: 'Auto',\n spriteLogo: '',\n },\n [DEX.UNISWAPV3]: {\n name: 'Uni v3',\n spriteLogo: 'uniswap',\n appLink: 'https://app.uniswap.org/',\n },\n}\n\nexport const isChainSupported = (chain: number | ChainId) => {\n return supportedChains.includes(chain as ChainId)\n}\n\nexport function getBlockExplorerAddressLink(chainId: ChainId, address: string) {\n const { blockExplorer } = chainConfigs[chainId].chainDetails\n return `${blockExplorer}/address/${address}`\n}\n\nexport const themes = {\n light: { bgDefault: '#fff' },\n dark: { bgDefault: '#1e2024' },\n}\n\nexport default {\n maxLeverage,\n bscCompensationContract,\n chainConfigs,\n defaultLeverage,\n delay,\n dexDetails,\n gas,\n INFINITE_ALLOWANCE,\n INITIAL_TORQUE_LOAN_DURATION,\n links,\n MAX_UINT,\n routes,\n udfFeeds,\n vestingDurationAfterCliff,\n ZERO_ADDRESS,\n}\n","// legacy vars - TODO need cleanup\nexport const gasLimitFallback = '4500000'\n","export default {\n loanCollateralTable: 'https://docs.ooki.com/protocol/borrow/liquidation',\n ookiCoingecko: 'https://www.coingecko.com/en/coins/ooki',\n buyOoki: {\n sushiswapEthereum: {\n title: 'Sushiswap Ethereum',\n icon: 'sushiswap',\n url: 'https://app.sushi.com/swap?inputCurrency=USDT&outputCurrency=0x0de05f6447ab4d22c8827449ee4ba2d5c288379b',\n color: '',\n },\n sushiswapPolygon: {\n title: 'Sushiswap Polygon',\n icon: 'sushiswap',\n url: 'https://app.sushi.com/swap?inputCurrency=MATIC&outputCurrency=0xCd150B1F528F326f5194c012f32Eb30135C7C2c9',\n color: '',\n },\n mexcGlobal: {\n title: 'MEXC Global',\n icon: 'mexcglobal',\n url: 'https://www.mexc.com/exchange/OOKI_USDT',\n color: '',\n },\n gateIO: {\n title: 'Gate.io',\n icon: 'gateio',\n url: 'https://www.gate.io/trade/OOKI_USDT',\n color: '',\n },\n binance: {\n title: 'Binance',\n icon: 'binance-logo',\n url: 'https://www.binance.com/en/price/ooki-protocol?ref=368715348',\n color: '#f3ba2e',\n },\n wazirX: {\n title: 'WazirX',\n icon: 'wazirx',\n url: 'https://wazirx.com/exchange/OOKI-USDT',\n color: '',\n },\n },\n videos: {\n // shown in the lobby; playlist updated by marketing - broken until replacement in the new channel\n ookiPromo: 'https://www.youtube.com/embed/videoseries?list=PL1EtznDVa1f37c96CFpaVxjV1pGmJnbu0',\n },\n docs: {\n daoGovernance: 'https://docs.ooki.com/governance/dao-governance',\n staking: 'https://docs.ooki.com/protocol/stake',\n voteDelegation: 'https://docs.ooki.com/governance/delegating',\n },\n articles: {\n ookiMigration: 'https://blog.ooki.com/ooki-launch-stage-three-ooki-token',\n ookiv2: 'https://blog.ooki.com/ooki-version-2-0/',\n itokens: 'https://blog.ooki.com/ookiversity-what-are-itokens/',\n dexSelectorRelease: 'https://blog.ooki.com/ooki-updates-dex-selector-optimism-and-more/',\n },\n socials: {\n discord: {\n title: 'Discord',\n icon: 'discord',\n url: 'https://discord.gg/4wPVA6a',\n external: true,\n },\n\n facebook: {\n title: 'Facebook',\n icon: 'Facebook',\n url: 'https://facebook.com/ookitrade',\n external: true,\n },\n\n instagram: {\n title: 'Instagram',\n icon: 'Instagram',\n url: 'https://www.instagram.com/ookitrade/',\n external: true,\n },\n\n twitter: {\n title: 'Twitter',\n icon: 'twitter',\n url: 'https://twitter.com/intent/follow?screen_name=OokiTrade',\n external: true,\n },\n\n telegram: {\n title: 'Telegram Talk',\n icon: 'telegram',\n url: 'https://t.me/OokiTrade',\n external: true,\n },\n\n telegramAnnouncement: {\n title: 'Announcements',\n icon: 'ooki-black-white',\n url: 'https://t.me/OokiAnnouncements',\n external: true,\n },\n\n youtube: {\n title: 'Youtube',\n icon: 'Youtube',\n url: 'https://www.youtube.com/@ookidex',\n external: true,\n },\n },\n\n cryptoPlatforms: [\n {\n title: 'Coingecko',\n icon: 'coingecko',\n url: 'https://www.coingecko.com/en/coins/ooki',\n external: true,\n },\n {\n title: 'Coinmarketcap',\n icon: 'coinmarketcap',\n url: 'https://coinmarketcap.com/currencies/ooki-protocol/',\n external: true,\n },\n {\n title: 'Coinbase',\n icon: 'coinbase',\n url: 'https://www.coinbase.com/price/ooki-protocol',\n external: true,\n },\n {\n title: 'Crypto.com',\n icon: 'crypto-com',\n url: 'https://crypto.com/price/ooki-protocol',\n external: true,\n },\n {\n title: 'Coinpaprika',\n icon: 'coinpaprika',\n url: 'https://coinpaprika.com/coin/ooki-ooki/',\n external: true,\n },\n {\n title: 'Coincarp',\n icon: 'coincarp',\n url: 'https://www.coincarp.com/currencies/ooki-token/',\n external: true,\n },\n ],\n daoTreasury: 'https://etherscan.io/address/0xfedc4dd5247b93feb41e899a09c44cfabec29cbc',\n daoSnapshot: 'https://snapshot.org/#/ooki.eth',\n tally: 'https://www.tally.xyz/governance/eip155:1:0x3133b4F4dcffc083724435784fEFAD510FA659c6',\n blog: {\n title: 'OOKI Blog',\n icon: 'token-ooki',\n url: 'https://blog.ooki.com',\n external: true,\n },\n shop: 'https://shop.ooki.com',\n gitbook: 'https://docs.ooki.com',\n ookiversity: 'https://blog.ooki.com/tag/ookiversity/',\n forum: 'https://forum.ooki.com/',\n nfts: 'https://opensea.io/collection/ooki',\n github: {\n title: 'Github',\n icon: 'github',\n url: 'https://github.com/OokiTrade',\n external: true,\n },\n daoProposalsGithub:\n 'https://github.com/OokiTrade/contractsV2/tree/development/scripts/dao-proposals',\n compensationChannel: 'https://t.me/bzxcompensation',\n}\n","/**\n * Helper to Get date by using the current locale.\n */\nexport function getDate(date: number | string | Date, hideYear = false) {\n const localeDate = new Date(date).toLocaleDateString(undefined, {\n day: 'numeric',\n month: 'short',\n year: hideYear ? undefined : 'numeric',\n })\n\n return localeDate\n}\n\n/**\n * Helper to Get time by using the current locale.\n */\nexport function getTime(date: number | string | Date) {\n const localeTime = new Date(date).toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n })\n\n return localeTime\n}\n\n/**\n * Helper to Get time for today or date by using the current locale.\n */\nexport function getDateTime(date: number | string | Date) {\n const currentYear = new Date().getFullYear() === new Date(date).getFullYear()\n const localeDate = getDate(date, currentYear)\n const localeTodayDate = getDate(new Date(), currentYear)\n\n if (localeDate === localeTodayDate) {\n return getTime(date)\n } else {\n return localeDate\n }\n}\n\n/**\n * Helper to Get timestamp since the selected month.\n */\nexport function getTimestamp(monthCount: number) {\n const seconds = 2628000 * monthCount\n\n return Math.floor(Date.now() / 1000) - seconds\n}\n","var map = {\n\t\"./About-OOKI.svg\": 1727,\n\t\"./Add-OOKI.svg\": 1728,\n\t\"./Arrow-drop-down.svg\": 1729,\n\t\"./Arrow.svg\": 1730,\n\t\"./Blog.svg\": 1731,\n\t\"./Borrow.svg\": 1732,\n\t\"./Burger-menu.svg\": 1733,\n\t\"./DAO.svg\": 1734,\n\t\"./Dark.svg\": 1735,\n\t\"./Dashboard.svg\": 1736,\n\t\"./Down.svg\": 1737,\n\t\"./Drawer-close.svg\": 1738,\n\t\"./Drawer-open.svg\": 1739,\n\t\"./FAQ.svg\": 1740,\n\t\"./Facebook.svg\": 1741,\n\t\"./Favourite.svg\": 1742,\n\t\"./Filled.svg\": 1743,\n\t\"./Friends.svg\": 1744,\n\t\"./GreenFaceProfit.svg\": 1745,\n\t\"./HelpChat.svg\": 1746,\n\t\"./Hide.svg\": 1747,\n\t\"./History.svg\": 1748,\n\t\"./Inactive.svg\": 1749,\n\t\"./Instagram.svg\": 1750,\n\t\"./Learn.svg\": 1751,\n\t\"./Left.svg\": 1752,\n\t\"./Lend.svg\": 1753,\n\t\"./Light.svg\": 1754,\n\t\"./Link.svg\": 1755,\n\t\"./List.svg\": 1756,\n\t\"./Logo.svg\": 1757,\n\t\"./NFT.svg\": 1758,\n\t\"./Normal.svg\": 1759,\n\t\"./Opened.svg\": 1760,\n\t\"./Options.svg\": 1761,\n\t\"./Outline.svg\": 1762,\n\t\"./Pencil.svg\": 1763,\n\t\"./Photo.svg\": 1764,\n\t\"./Refresh.svg\": 1765,\n\t\"./Right.svg\": 1766,\n\t\"./Sandclock.svg\": 1767,\n\t\"./Select.svg\": 1768,\n\t\"./Selected.svg\": 1769,\n\t\"./Settings.svg\": 1770,\n\t\"./Share.svg\": 1771,\n\t\"./Shop.svg\": 1772,\n\t\"./Show.svg\": 1773,\n\t\"./Stake-OOKI.svg\": 1774,\n\t\"./Stake.svg\": 1775,\n\t\"./Stats.svg\": 1776,\n\t\"./Swap.svg\": 1777,\n\t\"./Time.svg\": 1778,\n\t\"./Trade.svg\": 1779,\n\t\"./Tutorial.svg\": 1780,\n\t\"./Up.svg\": 1781,\n\t\"./User.svg\": 1782,\n\t\"./Walkthrough.svg\": 1783,\n\t\"./Wallet.svg\": 1784,\n\t\"./Youtube.svg\": 1785,\n\t\"./announcement.svg\": 1786,\n\t\"./arbitrum-logo.svg\": 1787,\n\t\"./arrow-down.svg\": 1788,\n\t\"./arrow-right.svg\": 1789,\n\t\"./arrow-up.svg\": 1790,\n\t\"./binance-logo.svg\": 1791,\n\t\"./cOOKI.svg\": 1792,\n\t\"./caret-down.svg\": 1793,\n\t\"./caret-left.svg\": 1794,\n\t\"./caret-right.svg\": 1795,\n\t\"./chain-optimism.svg\": 1796,\n\t\"./check-circle.svg\": 1797,\n\t\"./close.svg\": 1798,\n\t\"./coinbase.svg\": 1799,\n\t\"./coincarp.svg\": 1800,\n\t\"./coingecko.svg\": 1801,\n\t\"./coinmarketcap.svg\": 1802,\n\t\"./coinpaprika.svg\": 1803,\n\t\"./copy.svg\": 1804,\n\t\"./cross.svg\": 1805,\n\t\"./crypto-com.svg\": 1806,\n\t\"./discord.svg\": 1807,\n\t\"./ethereum-logo.svg\": 1808,\n\t\"./filter.svg\": 1809,\n\t\"./gateio.svg\": 1810,\n\t\"./github.svg\": 1811,\n\t\"./ic_token_aave.svg\": 1812,\n\t\"./ic_token_auto.svg\": 1813,\n\t\"./ic_token_bnb.svg\": 1814,\n\t\"./ic_token_bpt.svg\": 1815,\n\t\"./ic_token_btc.svg\": 1816,\n\t\"./ic_token_busd.svg\": 1817,\n\t\"./ic_token_bzrx.svg\": 1818,\n\t\"./ic_token_bzrx_bnb.svg\": 1819,\n\t\"./ic_token_cake.svg\": 1820,\n\t\"./ic_token_chi.svg\": 1821,\n\t\"./ic_token_comp.svg\": 1822,\n\t\"./ic_token_crv.svg\": 1823,\n\t\"./ic_token_dai.svg\": 1824,\n\t\"./ic_token_doge.svg\": 1825,\n\t\"./ic_token_eth.svg\": 1826,\n\t\"./ic_token_iaave.svg\": 1827,\n\t\"./ic_token_iauto.svg\": 1828,\n\t\"./ic_token_ibnb.svg\": 1829,\n\t\"./ic_token_ibtc.svg\": 1830,\n\t\"./ic_token_ibusd.svg\": 1831,\n\t\"./ic_token_ibzrx.svg\": 1832,\n\t\"./ic_token_icake.svg\": 1833,\n\t\"./ic_token_idoge.svg\": 1834,\n\t\"./ic_token_ieth.svg\": 1835,\n\t\"./ic_token_ilink.svg\": 1836,\n\t\"./ic_token_imatic.svg\": 1837,\n\t\"./ic_token_ipolygon-matic.svg\": 1838,\n\t\"./ic_token_iusdt.svg\": 1839,\n\t\"./ic_token_knc.svg\": 1840,\n\t\"./ic_token_kncl.svg\": 1841,\n\t\"./ic_token_link.svg\": 1842,\n\t\"./ic_token_lrc.svg\": 1843,\n\t\"./ic_token_matic.svg\": 1844,\n\t\"./ic_token_mkr.svg\": 1845,\n\t\"./ic_token_ooki.svg\": 1846,\n\t\"./ic_token_quick.svg\": 1847,\n\t\"./ic_token_slp.svg\": 1848,\n\t\"./ic_token_susd.svg\": 1849,\n\t\"./ic_token_sushi.svg\": 1850,\n\t\"./ic_token_uni.svg\": 1851,\n\t\"./ic_token_usdc.svg\": 1852,\n\t\"./ic_token_usdt.svg\": 1853,\n\t\"./ic_token_vbzrx.svg\": 1854,\n\t\"./ic_token_wbtc.svg\": 1855,\n\t\"./ic_token_weth.svg\": 1856,\n\t\"./ic_token_yfi.svg\": 1857,\n\t\"./info.svg\": 1858,\n\t\"./kovan-logo.svg\": 1859,\n\t\"./kucoin.svg\": 1860,\n\t\"./lock.svg\": 1861,\n\t\"./medium.svg\": 1862,\n\t\"./menu-close.svg\": 1863,\n\t\"./menu-open.svg\": 1864,\n\t\"./mexcglobal.svg\": 1865,\n\t\"./ooki-black-white.svg\": 1866,\n\t\"./our-tokens.svg\": 1867,\n\t\"./polygon-logo.svg\": 1868,\n\t\"./save.svg\": 1869,\n\t\"./search.svg\": 1870,\n\t\"./sushiswap.svg\": 1871,\n\t\"./switch.svg\": 1872,\n\t\"./telegram.svg\": 1873,\n\t\"./token-ape.svg\": 1874,\n\t\"./token-bpt.svg\": 1875,\n\t\"./token-bzrx.svg\": 1876,\n\t\"./token-cooki.svg\": 1877,\n\t\"./token-crv.svg\": 1878,\n\t\"./token-frax.svg\": 1879,\n\t\"./token-ibzrx.svg\": 1880,\n\t\"./token-iooki.svg\": 1881,\n\t\"./token-mim.svg\": 1882,\n\t\"./token-ooki.svg\": 1883,\n\t\"./token-p125.svg\": 1884,\n\t\"./token-slp-ooki.svg\": 1885,\n\t\"./token-slp.svg\": 1886,\n\t\"./token-spell.svg\": 1887,\n\t\"./token-stmatic.svg\": 1888,\n\t\"./token-sushi.svg\": 1889,\n\t\"./token-vbzrx.svg\": 1890,\n\t\"./token-wsteth.svg\": 1891,\n\t\"./tools.svg\": 1892,\n\t\"./twitter.svg\": 1893,\n\t\"./uniswap.svg\": 1894,\n\t\"./wallet-balance.svg\": 1895,\n\t\"./wallet-connect.svg\": 1896,\n\t\"./wazirx.svg\": 1897\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1726;","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"About-OOKI\",\n \"use\": \"About-OOKI-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Add-OOKI\",\n \"use\": \"Add-OOKI-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Arrow-drop-down\",\n \"use\": \"Arrow-drop-down-usage\",\n \"viewBox\": \"0 0 32 16\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Arrow\",\n \"use\": \"Arrow-usage\",\n \"viewBox\": \"0 0 26 32\",\n \"content\": \"\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Blog\",\n \"use\": \"Blog-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Borrow\",\n \"use\": \"Borrow-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Burger-menu\",\n \"use\": \"Burger-menu-usage\",\n \"viewBox\": \"0 0 32 22\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"DAO\",\n \"use\": \"DAO-usage\",\n \"viewBox\": \"0 0 32 31\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Dark\",\n \"use\": \"Dark-usage\",\n \"viewBox\": \"0 0 58 44\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Dashboard\",\n \"use\": \"Dashboard-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Down\",\n \"use\": \"Down-usage\",\n \"viewBox\": \"0 0 45 45\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Drawer-close\",\n \"use\": \"Drawer-close-usage\",\n \"viewBox\": \"0 0 32 20\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Drawer-open\",\n \"use\": \"Drawer-open-usage\",\n \"viewBox\": \"0 0 32 20\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"FAQ\",\n \"use\": \"FAQ-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Facebook\",\n \"use\": \"Facebook-usage\",\n \"viewBox\": \"0 0 33 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Favourite\",\n \"use\": \"Favourite-usage\",\n \"viewBox\": \"0 0 22 20\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Filled\",\n \"use\": \"Filled-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Friends\",\n \"use\": \"Friends-usage\",\n \"viewBox\": \"0 0 33 27\",\n \"content\": \"\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"GreenFaceProfit\",\n \"use\": \"GreenFaceProfit-usage\",\n \"viewBox\": \"0 0 20 20\",\n \"content\": \"\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"HelpChat\",\n \"use\": \"HelpChat-usage\",\n \"viewBox\": \"0 0 32 30\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Hide\",\n \"use\": \"Hide-usage\",\n \"viewBox\": \"0 0 32 28\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"History\",\n \"use\": \"History-usage\",\n \"viewBox\": \"0 0 80 70\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Inactive\",\n \"use\": \"Inactive-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Instagram\",\n \"use\": \"Instagram-usage\",\n \"viewBox\": \"0 0 33 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Learn\",\n \"use\": \"Learn-usage\",\n \"viewBox\": \"0 0 32 22\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Left\",\n \"use\": \"Left-usage\",\n \"viewBox\": \"0 0 45 45\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Lend\",\n \"use\": \"Lend-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Light\",\n \"use\": \"Light-usage\",\n \"viewBox\": \"0 0 58 44\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Link\",\n \"use\": \"Link-usage\",\n \"viewBox\": \"0 0 45 45\",\n \"content\": \"\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"List\",\n \"use\": \"List-usage\",\n \"viewBox\": \"0 0 32 27\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Logo\",\n \"use\": \"Logo-usage\",\n \"viewBox\": \"0 0 155 68\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"NFT\",\n \"use\": \"NFT-usage\",\n \"viewBox\": \"0 0 32 30\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Normal\",\n \"use\": \"Normal-usage\",\n \"viewBox\": \"0 0 28 27\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Opened\",\n \"use\": \"Opened-usage\",\n \"viewBox\": \"0 0 28 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Options\",\n \"use\": \"Options-usage\",\n \"viewBox\": \"0 0 45 45\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Outline\",\n \"use\": \"Outline-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Pencil\",\n \"use\": \"Pencil-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Photo\",\n \"use\": \"Photo-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Refresh\",\n \"use\": \"Refresh-usage\",\n \"viewBox\": \"0 0 28 32\",\n \"content\": \"\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Right\",\n \"use\": \"Right-usage\",\n \"viewBox\": \"0 0 45 45\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Sandclock\",\n \"use\": \"Sandclock-usage\",\n \"viewBox\": \"0 0 21 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Select\",\n \"use\": \"Select-usage\",\n \"viewBox\": \"0 0 32 25\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Selected\",\n \"use\": \"Selected-usage\",\n \"viewBox\": \"0 0 45 45\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Settings\",\n \"use\": \"Settings-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Share\",\n \"use\": \"Share-usage\",\n \"viewBox\": \"0 0 29 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Shop\",\n \"use\": \"Shop-usage\",\n \"viewBox\": \"0 0 29 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Show\",\n \"use\": \"Show-usage\",\n \"viewBox\": \"0 0 32 22\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Stake-OOKI\",\n \"use\": \"Stake-OOKI-usage\",\n \"viewBox\": \"0 0 140.01 140.01\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Stake\",\n \"use\": \"Stake-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Stats\",\n \"use\": \"Stats-usage\",\n \"viewBox\": \"0 0 24 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Swap\",\n \"use\": \"Swap-usage\",\n \"viewBox\": \"0 0 41 44\",\n \"content\": \"\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Time\",\n \"use\": \"Time-usage\",\n \"viewBox\": \"0 0 33 32\",\n \"content\": \"\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Trade\",\n \"use\": \"Trade-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"Trade\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Tutorial\",\n \"use\": \"Tutorial-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Up\",\n \"use\": \"Up-usage\",\n \"viewBox\": \"0 0 45 45\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"User\",\n \"use\": \"User-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Walkthrough\",\n \"use\": \"Walkthrough-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Wallet\",\n \"use\": \"Wallet-usage\",\n \"viewBox\": \"0 0 32 29\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"Youtube\",\n \"use\": \"Youtube-usage\",\n \"viewBox\": \"0 0 33 22\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"announcement\",\n \"use\": \"announcement-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\n\\t\\n\\t\\n\\t\\t\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\n\\t\\n\\t\\t\\n\\t\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"arbitrum-logo\",\n \"use\": \"arbitrum-logo-usage\",\n \"viewBox\": \"0 0 28 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"arrow-down\",\n \"use\": \"arrow-down-usage\",\n \"viewBox\": \"0 0 24 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"arrow-right\",\n \"use\": \"arrow-right-usage\",\n \"viewBox\": \"0 0 13 10\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"arrow-up\",\n \"use\": \"arrow-up-usage\",\n \"viewBox\": \"0 0 10 13\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"binance-logo\",\n \"use\": \"binance-logo-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"cOOKI\",\n \"use\": \"cOOKI-usage\",\n \"viewBox\": \"0 0 70 70\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"caret-down\",\n \"use\": \"caret-down-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"caret-left\",\n \"use\": \"caret-left-usage\",\n \"viewBox\": \"0 0 18 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"caret-right\",\n \"use\": \"caret-right-usage\",\n \"viewBox\": \"0 0 18 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"chain-optimism\",\n \"use\": \"chain-optimism-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"check-circle\",\n \"use\": \"check-circle-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"close\",\n \"use\": \"close-usage\",\n \"viewBox\": \"0 0 46 46\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"coinbase\",\n \"use\": \"coinbase-usage\",\n \"viewBox\": \"0 0 292 292\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"coincarp\",\n \"use\": \"coincarp-usage\",\n \"viewBox\": \"0 0 34 34\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"coingecko\",\n \"use\": \"coingecko-usage\",\n \"viewBox\": \"0 0 30 31\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"coinmarketcap\",\n \"use\": \"coinmarketcap-usage\",\n \"viewBox\": \"0 0 76.52 77.67\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"coinpaprika\",\n \"use\": \"coinpaprika-usage\",\n \"viewBox\": \"0 0 240 254\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"copy\",\n \"use\": \"copy-usage\",\n \"viewBox\": \"0 0 27 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"cross\",\n \"use\": \"cross-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"crypto-com\",\n \"use\": \"crypto-com-usage\",\n \"viewBox\": \"0 0 100 116\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"discord\",\n \"use\": \"discord-usage\",\n \"viewBox\": \"0 0 33 25\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ethereum-logo\",\n \"use\": \"ethereum-logo-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"filter\",\n \"use\": \"filter-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import React from 'react'\n\ninterface IExternalLinkProps\n extends React.DetailedHTMLProps<\n React.AnchorHTMLAttributes,\n HTMLAnchorElement\n > {\n showIcon?: boolean\n onClick?: (event: any) => void\n}\n\n/**\n * This component simply sets to open in a new tab + noreferrer noopener\n */\nexport function ExternalLink(props: IExternalLinkProps) {\n const { children, showIcon, className, ...otherProps } = props\n let cssClass = showIcon ? 'link--external' : ''\n if (className) {\n cssClass += ` ${props.className}`\n }\n return (\n \n {children}\n \n )\n}\n\nexport default React.memo(ExternalLink)\n","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"gateio\",\n \"use\": \"gateio-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"github\",\n \"use\": \"github-usage\",\n \"viewBox\": \"0 0 32 31\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_aave\",\n \"use\": \"ic_token_aave-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_auto\",\n \"use\": \"ic_token_auto-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_bnb\",\n \"use\": \"ic_token_bnb-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_bpt\",\n \"use\": \"ic_token_bpt-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_btc\",\n \"use\": \"ic_token_btc-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_busd\",\n \"use\": \"ic_token_busd-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_bzrx\",\n \"use\": \"ic_token_bzrx-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_bzrx_bnb\",\n \"use\": \"ic_token_bzrx_bnb-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport moment from 'moment'\n\nexport default class BorrowRequest {\n public id: number\n public loanId: string\n public borrowAsset: Asset\n public borrowAmount: BigNumber\n public collateralAsset: Asset\n public depositAmount: BigNumber\n\n constructor(\n loanId: string,\n borrowAsset: Asset,\n borrowAmount: BigNumber,\n collateralAsset: Asset,\n depositAmount: BigNumber\n ) {\n this.id = moment().unix() + Math.floor(Math.random() * 10)\n this.loanId = loanId\n this.borrowAsset = borrowAsset\n this.borrowAmount = borrowAmount\n this.collateralAsset = collateralAsset\n this.depositAmount = depositAmount\n }\n}\n","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_cake\",\n \"use\": \"ic_token_cake-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_chi\",\n \"use\": \"ic_token_chi-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_comp\",\n \"use\": \"ic_token_comp-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_crv\",\n \"use\": \"ic_token_crv-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_dai\",\n \"use\": \"ic_token_dai-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_doge\",\n \"use\": \"ic_token_doge-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_eth\",\n \"use\": \"ic_token_eth-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_iaave\",\n \"use\": \"ic_token_iaave-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_iauto\",\n \"use\": \"ic_token_iauto-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_ibnb\",\n \"use\": \"ic_token_ibnb-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgIconPagination(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 12,\n viewBox: \"0 0 24 12\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 6H23M23 6L18 11M23 6L18 1\",\n stroke: \"#ffffff\",\n strokeWidth: 2,\n strokeLinejoin: \"round\",\n className: \"pagination-stroke\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIconPagination);\nexport default __webpack_public_path__ + \"static/media/icon_pagination.59ac207d.svg\";\nexport { ForwardRef as ReactComponent };","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_ibtc\",\n \"use\": \"ic_token_ibtc-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_ibusd\",\n \"use\": \"ic_token_ibusd-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_ibzrx\",\n \"use\": \"ic_token_ibzrx-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_icake\",\n \"use\": \"ic_token_icake-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_idoge\",\n \"use\": \"ic_token_idoge-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_ieth\",\n \"use\": \"ic_token_ieth-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_ilink\",\n \"use\": \"ic_token_ilink-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_imatic\",\n \"use\": \"ic_token_imatic-usage\",\n \"viewBox\": \"0 0 256 256\",\n \"content\": \"\\n\\n\\t\\n\\t\\n\\n\\n\\n\\n\\t\\n\\t\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_ipolygon-matic\",\n \"use\": \"ic_token_ipolygon-matic-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_iusdt\",\n \"use\": \"ic_token_iusdt-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_knc\",\n \"use\": \"ic_token_knc-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_kncl\",\n \"use\": \"ic_token_kncl-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_link\",\n \"use\": \"ic_token_link-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_lrc\",\n \"use\": \"ic_token_lrc-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_matic\",\n \"use\": \"ic_token_matic-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_mkr\",\n \"use\": \"ic_token_mkr-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_ooki\",\n \"use\": \"ic_token_ooki-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\t\\n\\t\\n\\t\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_quick\",\n \"use\": \"ic_token_quick-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_slp\",\n \"use\": \"ic_token_slp-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_susd\",\n \"use\": \"ic_token_susd-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_sushi\",\n \"use\": \"ic_token_sushi-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_uni\",\n \"use\": \"ic_token_uni-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_usdc\",\n \"use\": \"ic_token_usdc-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_usdt\",\n \"use\": \"ic_token_usdt-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_vbzrx\",\n \"use\": \"ic_token_vbzrx-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_wbtc\",\n \"use\": \"ic_token_wbtc-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_weth\",\n \"use\": \"ic_token_weth-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ic_token_yfi\",\n \"use\": \"ic_token_yfi-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"info\",\n \"use\": \"info-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"kovan-logo\",\n \"use\": \"kovan-logo-usage\",\n \"viewBox\": \"0 0 70 70\",\n \"content\": \"\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"kucoin\",\n \"use\": \"kucoin-usage\",\n \"viewBox\": \"0 0 29 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"lock\",\n \"use\": \"lock-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n \\n \\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"medium\",\n \"use\": \"medium-usage\",\n \"viewBox\": \"0 0 33 24\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"menu-close\",\n \"use\": \"menu-close-usage\",\n \"viewBox\": \"0 0 22 22\",\n \"content\": \"\\n \\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"menu-open\",\n \"use\": \"menu-open-usage\",\n \"viewBox\": \"0 0 27 22\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"mexcglobal\",\n \"use\": \"mexcglobal-usage\",\n \"viewBox\": \"0 0 32 20\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"ooki-black-white\",\n \"use\": \"ooki-black-white-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"our-tokens\",\n \"use\": \"our-tokens-usage\",\n \"viewBox\": \"0 0 33 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"polygon-logo\",\n \"use\": \"polygon-logo-usage\",\n \"viewBox\": \"0 0 32 30\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"save\",\n \"use\": \"save-usage\",\n \"viewBox\": \"0 0 24 24\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"search\",\n \"use\": \"search-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"sushiswap\",\n \"use\": \"sushiswap-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"switch\",\n \"use\": \"switch-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"telegram\",\n \"use\": \"telegram-usage\",\n \"viewBox\": \"0 0 33 28\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-ape\",\n \"use\": \"token-ape-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-bpt\",\n \"use\": \"token-bpt-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-bzrx\",\n \"use\": \"token-bzrx-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-cooki\",\n \"use\": \"token-cooki-usage\",\n \"viewBox\": \"0 0 70 70\",\n \"content\": \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-crv\",\n \"use\": \"token-crv-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-frax\",\n \"use\": \"token-frax-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-ibzrx\",\n \"use\": \"token-ibzrx-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-iooki\",\n \"use\": \"token-iooki-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-mim\",\n \"use\": \"token-mim-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-ooki\",\n \"use\": \"token-ooki-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\n\\t\\n\\t\\n\\t\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-p125\",\n \"use\": \"token-p125-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-slp-ooki\",\n \"use\": \"token-slp-ooki-usage\",\n \"viewBox\": \"0 0 90 90\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-slp\",\n \"use\": \"token-slp-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-spell\",\n \"use\": \"token-spell-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-stmatic\",\n \"use\": \"token-stmatic-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-sushi\",\n \"use\": \"token-sushi-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-vbzrx\",\n \"use\": \"token-vbzrx-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"token-wsteth\",\n \"use\": \"token-wsteth-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"tools\",\n \"use\": \"tools-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\\n\\n\\n\\t\\n\\t\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"twitter\",\n \"use\": \"twitter-usage\",\n \"viewBox\": \"0 0 33 27\",\n \"content\": \"\\n\\n\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"uniswap\",\n \"use\": \"uniswap-usage\",\n \"viewBox\": \"0 0 14 15\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"wallet-balance\",\n \"use\": \"wallet-balance-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"wallet-connect\",\n \"use\": \"wallet-connect-usage\",\n \"viewBox\": \"0 0 32 32\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"wazirx\",\n \"use\": \"wazirx-usage\",\n \"viewBox\": \"0 0 1024 1024\",\n \"content\": \"\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import React, { CSSProperties } from 'react'\n\ninterface ICircleLoaderProps {\n [key: string]: any\n children?: React.ReactNode\n size?: number\n style?: CSSProperties\n className?: string\n}\n\nconst CircleLoader = (props: ICircleLoaderProps) => {\n const { children, size, style = {}, className = '', ...otherProps } = props\n const styles = { ...style }\n let cssClass = className\n\n if (size) {\n styles.width = size + 'px'\n styles.height = size + 'px'\n }\n if (typeof children !== 'undefined') {\n cssClass += ' flex-center'\n }\n return (\n
\n
\n
\n {children}\n
\n )\n}\n\nCircleLoader.defaultProps = {\n className: '',\n}\n\nexport default React.memo(CircleLoader)\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { abbreviate } from 'app-lib/numberUtils'\nimport React, { useState } from 'react'\nimport { Icon, InputBasic } from 'ui-framework'\nimport { BigNumber } from '@0x/utils'\n\ninterface IAssetDropdownBalanceProps {\n assetsWithBalance: { token: Asset; amount: BigNumber }[]\n selectedAsset: Asset\n onSelect: (asset: Asset) => void\n}\n\nexport function AssetDropdownBalance(props: IAssetDropdownBalanceProps) {\n const [state, setState] = useState({\n hideBalanceZero: true,\n checkboxId: 'input-hide-zero-balance' + Math.random(), // avoid id collision if there are multiple assetDropdown in the page\n })\n const { hideBalanceZero, checkboxId } = state\n const assetList = props.assetsWithBalance.filter(\n (asset) => asset.token !== props.selectedAsset && (hideBalanceZero ? asset.amount.gt(0) : true)\n )\n\n return (\n
\n {assetList.length === 0 && (\n
\n No other token available as collateral in your wallet.\n
\n )}\n {assetList.map((asset) => {\n const { displayName, spriteLogo } = assetUtils.getCommon(asset.token)\n return (\n props.onSelect(asset.token)}>\n \n \n {displayName}\n \n {abbreviate(asset.amount)}\n
\n )\n })}\n\n
\n\n
\n setState({ ...state, hideBalanceZero: !hideBalanceZero })}\n value={hideBalanceZero}\n />\n \n
\n \n )\n}\n\nexport default React.memo(AssetDropdownBalance)\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport React from 'react'\nimport { Icon } from 'ui-framework'\n\ninterface IAssetDropdownSimpleProps {\n assets: Asset[]\n selectedAsset: Asset\n onSelect: (asset: Asset) => void\n emptyLabel?: string\n emptyIcon?: string\n}\n\nexport function AssetDropdownSimple(props: IAssetDropdownSimpleProps) {\n return (\n <>\n {props.assets\n .filter((asset) => asset !== props.selectedAsset)\n .map((asset) => {\n const { displayName, spriteLogo } = assetUtils.getCommon(asset)\n const iconName = spriteLogo || props.emptyIcon\n return (\n
props.onSelect(asset)}>\n \n {iconName ? displayName || props.emptyLabel : 'None'}\n
\n )\n })}\n \n )\n}\n\nexport default React.memo(AssetDropdownSimple)\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport React, { useRef, useCallback } from 'react'\nimport { Icon, Tooltip } from 'ui-framework'\nimport { BigNumber } from '@0x/utils'\nimport AssetDropdownBalance from './AssetDropdownBalance'\nimport AssetDropdownSimple from './AssetDropdownSimple'\n\nexport interface IAssetDropdownProps {\n className?: string\n assets?: Asset[]\n assetsWithBalance?: { token: Asset; amount: BigNumber }[]\n selectedAsset: Asset\n onAssetChange?: (asset: Asset) => void\n emptyLabel?: string\n emptyIcon?: string\n}\n\n/**\n * AssetDropdown can work in 2 ways\n * - simple asset list (use props.assets)\n * - asset list that includes balance (user props.assetsWithBalance)\n */\nexport default function AssetDropdown(props: IAssetDropdownProps) {\n const { current: tipId } = useRef('assetdropdown' + Math.random())\n const onSelect = useCallback(\n (asset: Asset) => {\n if (props.onAssetChange) {\n props.onAssetChange(asset)\n }\n },\n [props.onAssetChange]\n )\n const { displayName, spriteLogo } = assetUtils.getCommon(props.selectedAsset)\n const { assets, assetsWithBalance } = props\n\n const hasOnlyOneChoice =\n (!!assets && assets.length <= 1) || (!!assetsWithBalance && assetsWithBalance.length <= 1)\n const iconName = spriteLogo || props.emptyIcon\n const btnClassName = props.className || ''\n\n const triggerButton = (\n \n {iconName && }\n {displayName || props.emptyLabel}\n \n )\n\n if (hasOnlyOneChoice) {\n return triggerButton\n }\n\n return (\n <>\n {triggerButton}\n \n \n
\n {Array.isArray(props.assets) && (\n \n )}\n {Array.isArray(props.assetsWithBalance) && (\n \n )}\n
\n \n \n \n )\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { formatPercent, formatPrecision } from 'bzx-common/src/lib/numberUtils'\nimport PriceSwitch from 'bzx-common/src/shared-components/PriceSwitch'\nimport React, { useEffect, useState } from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { InfoTip } from 'ui-framework'\nimport { BigNumber } from '@0x/utils'\nimport { ChainId, links } from '../../config/appConfig'\n\nexport interface IExpectedResultProps {\n collaterizationPercents: BigNumber\n liquidationPrice: BigNumber\n collateralToken: Asset\n loanToken: Asset\n loanStatus: string\n chainId: ChainId\n}\n\nfunction ExpectedResult(props: IExpectedResultProps) {\n const { chainId } = props\n\n const [activeTokenLiquidation, setActiveTokenLiquidation] = useState(\n assetUtils.getDefaultActiveToken(chainId, props.loanToken, props.collateralToken)\n )\n\n useEffect(() => {\n // sbp - need to take this piece out with borrow more form, otherwise liq price doesn't load\n // if other forms break need to revaluate\n // setLiquidationPriceLoaded(false)\n setActiveTokenLiquidation(\n assetUtils.getDefaultActiveToken(chainId, props.loanToken, props.collateralToken)\n )\n }, [chainId, props.collateralToken])\n\n const liquidationPrice =\n activeTokenLiquidation === props.collateralToken\n ? props.liquidationPrice\n : new BigNumber(1).div(props.liquidationPrice)\n\n const liquidationPriceText =\n !liquidationPrice.isNaN() && liquidationPrice.isFinite()\n ? formatPrecision(liquidationPrice)\n : '-'\n\n const collaterizationPercents = props.collaterizationPercents.isNaN()\n ? '-'\n : formatPercent(props.collaterizationPercents) + '%'\n return (\n
\n
\n
\n Collateralized{' '}\n \n Each asset pairing has unique collateral requirements for position maintenance.{' '}\n \n Learn More\n \n .\n \n
\n
\n {collaterizationPercents}\n
\n
\n
\n
Liq. Price
\n setActiveTokenLiquidation(asset)}\n loanAsset={props.loanToken}\n collateralAsset={props.collateralToken}\n textTooltip=\"Liq is the price at which your position is liquidated.\"\n />\n\n
\n
\n {liquidationPriceText}\n
\n
\n
\n
\n )\n}\nexport default React.memo(ExpectedResult)\n","export enum LendType {\n LEND = 'LEND',\n UNLEND = 'UNLEND',\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { sleep } from 'app-lib/asyncUtils'\nimport web3Utils from 'web3-utils'\nimport * as ethers from 'ethers5'\nimport { BigNumber } from '@0x/utils'\nimport {\n AnyProvider,\n getDependenciesStrict,\n getDependenciesStrictRead,\n getDependenciesStrictAsset,\n runTx,\n} from '../providerUtils'\n\nexport const INFINITE_ALLOWANCE = new BigNumber(2).pow(256).minus(1) // MAX_UINT\n\n/**\n * Get spending approvals amount for a spender for a single **token (addresses)**\n */\nasync function getSpendingApproval(\n provider: AnyProvider,\n token: string | Asset,\n spender: string | Asset\n) {\n const { helperContract, chainId, userAddress } = getDependenciesStrict(provider)\n const tokenAddress = web3Utils.isAddress(token)\n ? token\n : assetUtils.getAddress(chainId, token as Asset)\n const spenderAddress = web3Utils.isAddress(spender)\n ? spender\n : assetUtils.getAddress(chainId, spender as Asset)\n\n const result = await helperContract\n .allowance([tokenAddress], userAddress, spenderAddress)\n .callAsync()\n\n return {\n amount: result[0],\n spender: spenderAddress,\n assetAddress: tokenAddress,\n token: web3Utils.isAddress(token)\n ? assetUtils.getAssetFromAddress(chainId, tokenAddress)\n : token,\n }\n}\n\n/**\n * Get the spending approvals of one token for multiple spender contracts\n * eg: `getSpendingApprovalMultipleSpenders(USDCAdd, [bzxContractAdd, SushiContractAdd])`\n */\nasync function getSpendingApprovalMultipleSpenders(\n provider: AnyProvider,\n userAddress: string,\n tokenAddress: string,\n spendersAddresses: string[]\n) {\n const { contractsSource } = getDependenciesStrictRead(provider)\n const erc20Contract = contractsSource.getErc20Contract(tokenAddress)\n const result: { amount: BigNumber; spender: string; assetAddress: string }[] = []\n for (const spender of spendersAddresses) {\n await sleep(100) // avoid issue with RPC throttling\n const amount = await erc20Contract.allowance(userAddress, spender).callAsync()\n result.push({\n amount,\n spender,\n assetAddress: tokenAddress,\n })\n }\n return result\n}\n\n/**\n * Get spending approvals amount for a spender for multiple **token (addresses)**\n */\nasync function getSpendingApprovals(\n provider: AnyProvider,\n tokenAddresses: string[],\n spenderAddress: string\n) {\n const { helperContract, userAddress } = getDependenciesStrict(provider)\n const result = await helperContract\n .allowance(tokenAddresses, userAddress, spenderAddress)\n .callAsync()\n\n return result.map((item, index) => ({\n amount: item,\n spender: spenderAddress,\n tokenAddress: tokenAddresses[index],\n }))\n}\n\n/**\n * Get spending approvals amount for a spender for multiple **assets**\n * Useful if we want to use our Asset list as argument\n */\nasync function getSpendingApprovalsOfAssets(\n provider: AnyProvider,\n assets: Asset[],\n spenderAddress: string\n) {\n const tokenAddresses = assets.map((asset) =>\n assetUtils.getAddress(provider.currentChainId, asset)\n )\n const approvals = await getSpendingApprovals(provider, tokenAddresses, spenderAddress)\n return approvals.map((approval, index) => ({\n amount: approval.amount,\n token: assets[index],\n assetAddress: approval.tokenAddress,\n spender: spenderAddress,\n }))\n}\n\n/**\n * Amount should be in base unit\n * Uses the async generator flow.\n */\nasync function setSpendingApprovalErc20(\n provider: AnyProvider,\n args: { erc20Token: string | Asset; spender: string | Asset; amount: BigNumber }\n) {\n const { contractsSource, chainId } = getDependenciesStrict(provider)\n const erc20Contract = contractsSource.getErc20Contract(args.erc20Token)\n const spenderAddress = web3Utils.isAddress(args.spender)\n ? args.spender\n : assetUtils.getAddress(chainId, args.spender as Asset)\n\n const tx = erc20Contract.approve(spenderAddress, args.amount)\n return runTx(provider, tx, erc20Contract)\n}\n\n/**\n * Does not use 0x web3wrapper; fix because of USDT approval failing on ethereum\n */\nasync function setSpendingApprovalUnsafe(\n provider: AnyProvider,\n asset: Asset,\n spenderAddress: string,\n amount: BigNumber\n) {\n const { web3Wrapper, erc20Contract } = getDependenciesStrictAsset(provider, asset)\n // @ts-ignore\n const ethersProvider = new ethers.providers.Web3Provider(web3Wrapper.getProvider())\n const erc20 = new ethers.Contract(\n erc20Contract.address,\n erc20Contract.abi,\n ethersProvider.getSigner()\n )\n const tx = await erc20.approve(spenderAddress, amount.toFixed())\n const mined = await ethersProvider.waitForTransaction(tx.hash, 1)\n if (mined.status !== 1) {\n throw new Error('Spending approval failed')\n }\n return {\n amount,\n token: asset,\n assetAddress: assetUtils.getAddress(provider.currentChainId, asset),\n spender: spenderAddress,\n }\n}\n\n/**\n * Set the spending allowance of a token for a specific spender (contract)\n */\nasync function setSpendingApproval(\n provider: AnyProvider,\n asset: Asset,\n spenderAddress: string,\n amount: BigNumber\n) {\n const { erc20Contract, userAddress, web3Wrapper, chainId } = getDependenciesStrictAsset(\n provider,\n asset\n )\n if (chainId === 1 && asset === Asset.USDT) {\n return setSpendingApprovalUnsafe(provider, asset, spenderAddress, amount)\n }\n const txHash = await erc20Contract.approve(spenderAddress, amount).sendTransactionAsync({\n from: userAddress,\n })\n await web3Wrapper.awaitTransactionSuccessAsync(txHash, 5000)\n\n return {\n amount,\n token: asset,\n assetAddress: assetUtils.getAddress(provider.currentChainId, asset),\n spender: spenderAddress,\n }\n}\n\n/**\n * Set infinite spending allowance of a token for a specific spender (contract)\n */\nasync function setSpendingApprovalInfinite(\n provider: AnyProvider,\n asset: Asset,\n spenderAddress: string\n) {\n return setSpendingApproval(provider, asset, spenderAddress, INFINITE_ALLOWANCE)\n}\n\nexport default {\n getSpendingApproval,\n getSpendingApprovalMultipleSpenders,\n getSpendingApprovals,\n getSpendingApprovalsOfAssets,\n setSpendingApprovalErc20,\n setSpendingApproval,\n setSpendingApprovalInfinite,\n}\n","import { Asset } from 'app-lib/assetUtils'\nimport { DEX } from 'app-lib/dexSelector/types'\nimport { ProviderType } from 'bzx-common/src/domain/ProviderTypeDictionary'\nimport { BigNumber } from '@0x/utils'\nimport { getBaseQuote, IChainConfig, udfFeeds } from './chainCommon'\n\nconst assets = [\n Asset.AAVE,\n Asset.APE,\n Asset.COMP,\n Asset.DAI,\n Asset.ETH,\n Asset.LINK,\n Asset.LRC,\n Asset.MKR,\n Asset.OOKI,\n Asset.UNI,\n Asset.USDC,\n Asset.USDT,\n Asset.WBTC,\n Asset.YFI,\n]\n\n/**\n * Pairs and tokens that shouldnt be listed, even if they appear in the protocol:\n * * KNC (due to an upgrade)\n * * OOKI (no price feed)\n * * BZRX\n */\nconst tradePairs: [Asset, Asset][] = [\n [Asset.AAVE, Asset.APE],\n [Asset.AAVE, Asset.DAI],\n [Asset.AAVE, Asset.ETH],\n [Asset.AAVE, Asset.LINK],\n [Asset.AAVE, Asset.UNI],\n [Asset.AAVE, Asset.USDC],\n [Asset.AAVE, Asset.USDT],\n [Asset.AAVE, Asset.WBTC],\n [Asset.APE, Asset.DAI],\n [Asset.APE, Asset.ETH],\n [Asset.APE, Asset.LINK],\n [Asset.APE, Asset.UNI],\n [Asset.APE, Asset.USDC],\n [Asset.APE, Asset.USDT],\n [Asset.APE, Asset.WBTC],\n [Asset.COMP, Asset.DAI],\n [Asset.COMP, Asset.ETH],\n [Asset.COMP, Asset.LINK],\n [Asset.COMP, Asset.UNI],\n [Asset.COMP, Asset.USDC],\n [Asset.COMP, Asset.USDT],\n [Asset.COMP, Asset.WBTC],\n [Asset.ETH, Asset.DAI],\n [Asset.ETH, Asset.USDC],\n [Asset.ETH, Asset.USDT],\n [Asset.ETH, Asset.WBTC],\n [Asset.LINK, Asset.DAI],\n [Asset.LINK, Asset.ETH],\n [Asset.LINK, Asset.UNI],\n [Asset.LINK, Asset.USDC],\n [Asset.LINK, Asset.USDT],\n [Asset.LINK, Asset.WBTC],\n [Asset.LRC, Asset.DAI],\n [Asset.LRC, Asset.ETH],\n [Asset.LRC, Asset.UNI],\n [Asset.LRC, Asset.USDC],\n [Asset.LRC, Asset.USDT],\n [Asset.LRC, Asset.WBTC],\n [Asset.MKR, Asset.DAI],\n [Asset.MKR, Asset.ETH],\n [Asset.MKR, Asset.UNI],\n [Asset.MKR, Asset.USDC],\n [Asset.MKR, Asset.USDT],\n [Asset.MKR, Asset.WBTC],\n [Asset.UNI, Asset.DAI],\n [Asset.UNI, Asset.ETH],\n [Asset.UNI, Asset.USDC],\n [Asset.UNI, Asset.USDT],\n [Asset.UNI, Asset.WBTC],\n [Asset.USDC, Asset.DAI],\n [Asset.USDC, Asset.USDT],\n [Asset.USDT, Asset.DAI],\n [Asset.WBTC, Asset.DAI],\n [Asset.WBTC, Asset.USDC],\n [Asset.WBTC, Asset.USDT],\n [Asset.YFI, Asset.DAI],\n [Asset.YFI, Asset.ETH],\n [Asset.YFI, Asset.USDC],\n [Asset.YFI, Asset.USDT],\n [Asset.YFI, Asset.WBTC],\n]\n\n// OOKI can not be borrowed or used as collateral (no price feed)\nconst borrowable = assets.filter((asset) => asset !== Asset.OOKI)\n// iETH can not be used as collateral because there is an issue with pricefeed. Ask solidity devs.\nconst collateralAssets = borrowable.concat(borrowable.map((asset) => ('I' + asset) as Asset))\n// wstETH can be used as collateral\ncollateralAssets.push(Asset.WSTETH)\n\nconst config: IChainConfig = {\n chainDetails: {\n chainId: 1,\n chainName: 'Ethereum Mainnet',\n shortName: 'Ethereum',\n blockExplorer: 'https://etherscan.io',\n blocksPerYear: 0, // TODO\n nativeCurrency: {\n name: 'ETH',\n symbol: 'ETH',\n decimals: 18,\n },\n },\n borrowing: { assets: borrowable, collateralAssets },\n comingSoon: {\n tokens: {},\n },\n contracts: {\n bzx: '0xD8Ee69652E4e4838f2531732a46d1f7F584F0b7f',\n helperProxy: '0xb887f5b81deec1e271b06257f138e5a9d422bc8c',\n priceFeed: '0x09Ef93750C5F33ab469851F022C1C42056a8BAda',\n sweepFees: '0xfFB328AD3b727830F9482845A4737AfDDDe85554',\n tokenRegistry: '0xf0E474592B455579Fe580D610b846BdBb529C6F7',\n },\n dexes: [DEX.SUSHI, DEX.UNISWAPV3],\n dexesDetails: {\n [DEX.SUSHI]: { id: 1, address: '0x2f9bBB09032aE0957d5d575Fdf8dd2c5c7C2A721' },\n [DEX.UNISWAPV3]: { id: 2, address: '0x1bffc51F229C6C51f9593F24728DC2271BB21d91' },\n },\n features: { dexSelector: true },\n gas: {\n priceDefault: new BigNumber(2).times(10 ** 9),\n amount: { coefficient: 1.2, fallback: 450000 },\n },\n lending: { assets },\n trading: {\n defaultPair: { baseToken: Asset.ETH, quoteToken: Asset.USDT },\n pairs: tradePairs,\n baseQuote: getBaseQuote(tradePairs),\n pairConfigs: {},\n },\n native: { asset: Asset.ETH, wrapped: Asset.WETH },\n nativeTokenSupported: true,\n compromisedContracts: [],\n icon: { name: 'ethereum-logo', color: '#607bff' },\n chartUDF: udfFeeds.BINANCE,\n protocol: { version: 4 },\n stableCoins: [Asset.USDC, Asset.USDT, Asset.DAI],\n rpcUrlDefault: process.env.RPC_URL_ETH,\n stablecoinForUsdRates: Asset.DAI,\n stats: { assets: assets.filter((asset) => asset !== Asset.OOKI) },\n twitterHandle: '#ethereum',\n uiDisabled: false,\n uiDisabledReason: '',\n wallets: [\n ProviderType.MetaMask,\n ProviderType.TrustWallet,\n ProviderType.WalletConnect,\n ProviderType.WalletLink,\n ],\n uniRouteSettings: {},\n}\n\nexport const stakingConfig = {\n stakeableAssets: [Asset.OOKI, Asset.IOOKI, Asset.vBZRX, Asset.SLP_OOKI_ETH],\n stakingContract: '0x16f179f5c344cc29672a58ea327a26f64b941a63',\n voteDelegatorContract: '0xEA936212fE4f3A69d0E8eCF9a2a35D6c1f8D2c89',\n voteDelegatorUrl: 'https://etherscan.io/address/0xEA936212fE4f3A69d0E8eCF9a2a35D6c1f8D2c89',\n masterChefSushiV2Contract: '0xef0881ec094552b2e128cf945ef17a6752b4ec5d',\n sushiPoolIdSLP: 50,\n}\n\nexport const treasuryAddress = '0xfedc4dd5247b93feb41e899a09c44cfabec29cbc'\nexport const feesReceiver = '0xcbDE8C5603D4bA855a162A450B1d054A02D8448f'\nexport const daoConfig = {\n daoContract: '0x3133b4f4dcffc083724435784fefad510fa659c6',\n}\n\nexport default config\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport providerUtils from 'app-lib/providerUtils'\nimport BigNumber from 'bignumber.js'\nimport { chainConfigs, ZERO_ADDRESS } from '../config/appConfig'\nimport { AnyProvider } from './providerUtils'\n\n/**\n * getSwapExpectedReturn\n * * params.isAmountIn = true: srcAmount is the amount we want to swap\n * * params.isAmountIn = false: srcAmount is the amount we want to obtain after swap\n */\nexport async function getSwapExpectedReturn(\n provider: AnyProvider,\n params: {\n srcToken: Asset\n destToken: Asset\n srcAmount: BigNumber\n loanDataBytes: string\n isAmountIn?: boolean\n }\n) {\n const { contractsSource, chainId } = providerUtils.getDependenciesStrictRead(provider)\n const traderAddress = provider.currentAccount || ZERO_ADDRESS\n const srcAddress = assetUtils.getAddress(chainId, params.srcToken)\n const destAddress = assetUtils.getAddress(chainId, params.destToken)\n const destDecimals = assetUtils.getDecimals(chainId, params.destToken)\n const bzxContract = contractsSource.getiBZxContract()\n const tx = bzxContract.getSwapExpectedReturn(\n traderAddress,\n srcAddress,\n destAddress,\n params.srcAmount,\n params.loanDataBytes,\n params.isAmountIn || true\n )\n\n const destTokenAmount = await tx.callAsync()\n return destTokenAmount.div(10 ** destDecimals)\n}\n\n/**\n * Get swap rate for trade of 1 Native Token (ETH/BNB/MATIC etc.) worth volume\n */\nexport const getOneEthWorthTokenAmount = async (\n provider: AnyProvider,\n destToken: Asset,\n opts: { loanDataBytes: string }\n) => {\n const { contractsSource, chainId } = providerUtils.getDependenciesStrictRead(provider)\n const traderAddress = provider.currentAccount || ZERO_ADDRESS\n const srcToken = chainConfigs[chainId].native.wrapped\n const srcAddress = assetUtils.getAddress(chainId, srcToken)\n const destAddress = assetUtils.getAddress(chainId, destToken)\n const srcDecimals = assetUtils.getDecimals(chainId, srcToken)\n const srcAmount = new BigNumber(10 ** srcDecimals)\n\n if (srcToken === destToken) {\n return srcAmount\n }\n const bzxContract = contractsSource.getiBZxContract()\n const tx = bzxContract.getSwapExpectedReturn(\n traderAddress,\n srcAddress,\n destAddress,\n srcAmount,\n opts.loanDataBytes,\n false\n )\n\n const destTokenAmount = await tx.callAsync()\n return destTokenAmount\n}\n\n/**\n * This function should be used to get real swap rate price.\n * For reference swap rate, use oracle api\n */\nexport async function getActualSwapRate(\n provider: AnyProvider,\n params: {\n srcToken: Asset\n destToken: Asset\n leverage?: number\n srcAmount?: BigNumber\n loanDataBytes: string\n isAmountIn?: boolean\n }\n) {\n const { contractsSource, chainId } = providerUtils.getDependenciesStrictRead(provider)\n const { srcToken, destToken } = params\n const traderAddress = provider.currentAccount || ZERO_ADDRESS\n const { address: srcAddress, decimals: srcDecimals } = assetUtils.getInfo(chainId, srcToken)\n const { address: destAddress, decimals: destDecimals } = assetUtils.getInfo(chainId, destToken)\n\n const srcAmount =\n params.srcAmount || (await getOneEthWorthTokenAmount(provider, srcToken, params))\n\n if (srcToken === destToken) {\n // Note: This wasnt returning a rate before,\n // but the srcAmount which isnt what the function was supposed to return\n // now making it throw an error to find if that case actually happens\n throw new Error('srcToken is same as destToken')\n }\n\n const srcSwapAmount = srcAmount.times(params.leverage || 1)\n const bzxContract = contractsSource.getiBZxContract()\n\n const tx = bzxContract.getSwapExpectedReturn(\n traderAddress,\n srcAddress,\n destAddress,\n srcSwapAmount,\n params.loanDataBytes,\n params.isAmountIn || true\n )\n\n const destTokenAmount = await tx.callAsync()\n const receivedAmount = destTokenAmount.div(10 ** destDecimals)\n const sentAmount = srcSwapAmount.div(10 ** srcDecimals)\n const rate = receivedAmount.div(sentAmount).dp(18)\n return { srcToken, receivedAmount, destToken, sentAmount, rate }\n}\n\n/**\n * Get slippage rates by following Kyber's guide https://developer.kyber.network/docs/Integrations-SlippageRateProtection/\n * TODO: Kyber docs dont exist nor is it clear if it's the right way to do it. NEED to confirm it's good or rewrite it.\n * @returns\n */\nexport const getTradeSlippageRate = async (\n provider: AnyProvider,\n params: {\n srcToken: Asset\n destToken: Asset\n amount: BigNumber\n loanDataBytes: string\n /** swapRateForAmount rate or price of the srcToken for destToken for a certain amount */\n swapPriceTradeAmount?: BigNumber\n isAmountIn: boolean\n }\n): Promise => {\n const { chainId } = providerUtils.getDependenciesStrictRead(provider)\n\n const { amount, srcToken, destToken } = params\n if (amount.eq(0) || srcToken === destToken) {\n return new BigNumber(0)\n }\n\n const srcDecimals = assetUtils.getDecimals(chainId, srcToken)\n const srcAmount = amount.dp(0, BigNumber.ROUND_HALF_UP)\n if (amount.lte(10 ** srcDecimals)) {\n return new BigNumber(0)\n }\n try {\n const { rate: swapPriceOneTokenWorth } = await getActualSwapRate(provider, {\n ...params,\n srcAmount: new BigNumber(10 ** assetUtils.getDecimals(chainId, srcToken)),\n })\n\n const swapPriceTradeAmount =\n params.swapPriceTradeAmount ||\n (\n await getActualSwapRate(provider, {\n ...params,\n srcAmount,\n })\n ).rate\n\n const slippage = swapPriceOneTokenWorth\n .minus(swapPriceTradeAmount)\n .abs()\n .div(swapPriceTradeAmount)\n .times(100)\n return slippage.dp(6)\n } catch (e) {\n return new BigNumber(0)\n }\n}\n\nexport default {\n getSwapExpectedReturn,\n getActualSwapRate,\n getTradeSlippageRate,\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport moment from 'moment'\n\nexport default class RepayLoanRequest {\n public id: number\n public borrowAsset: Asset\n public collateralAsset: Asset\n public accountAddress: string\n public loanId: string\n public repayAmount: BigNumber\n public repayPercent: BigNumber\n public amountOwed: BigNumber\n\n constructor(\n borrowAsset: Asset,\n collateralAsset: Asset,\n accountAddress: string,\n loanId: string,\n repayAmount: BigNumber,\n repayPercent: BigNumber,\n amountOwed: BigNumber\n ) {\n this.id = moment().unix() + Math.floor(Math.random() * 10)\n this.borrowAsset = borrowAsset\n this.collateralAsset = collateralAsset\n this.accountAddress = accountAddress\n this.loanId = loanId\n this.repayAmount = repayAmount\n this.repayPercent = repayPercent\n this.amountOwed = amountOwed\n }\n}\n","import { Asset } from 'app-lib/assetUtils'\nimport { PositionType } from 'bzx-common/src/domain/trade.types'\nimport { BigNumber } from '@0x/utils'\n\nexport default class ManageCollateralRequest {\n public id: number\n public loanId: string\n public collateralAsset: Asset\n public collateralAmount: BigNumber\n public isWithdrawal: boolean\n public asset: Asset\n public positionType: PositionType\n\n constructor(\n loanId: string,\n collateralAsset: Asset,\n collateralAmount: BigNumber,\n isWithdrawal: boolean,\n asset = Asset.UNKNOWN,\n positionType = PositionType.LONG\n ) {\n this.id = Math.round(new Date().getTime() / 1000)\n this.loanId = loanId\n this.collateralAsset = collateralAsset\n this.collateralAmount = collateralAmount\n this.isWithdrawal = isWithdrawal\n this.asset = asset\n this.positionType = positionType\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { ChainId } from '../config/appConfig'\nimport { Asset } from '../lib/assetUtils'\n\nexport type TransactionType =\n | 'approval'\n | 'approve-spending'\n | 'borrow'\n | 'claim-vbzrx'\n | 'borrow-collateral'\n | 'trade-collateral'\n | 'delegate'\n | 'deposit'\n | 'extend'\n | 'get-airdrop'\n | 'lend'\n | 'migrate-token'\n | 'repay'\n | 'staking-claim'\n | 'staking'\n | 'swap'\n | 'trade-close-long'\n | 'trade-open-long'\n | 'trade-close-short'\n | 'trade-open-short'\n | 'transfer'\n | 'unlend'\n | 'unstake'\n | 'withdraw'\n | 'mint-nft'\n\nexport enum Operation {\n Trade = 'Trade',\n Borrow = 'Borrow',\n Lend = 'Lend',\n Stake = 'Stake',\n}\n\nexport interface IActivityInfo {\n chainId: ChainId\n user: string\n timestamp: Date\n txHash: string\n asset: Asset\n type: string\n value: BigNumber\n operation?: Operation\n pair?: string\n leverage?: BigNumber\n collateral?: Asset\n loanId?: string\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\n\nexport default class ReserveDetails {\n public asset: Asset\n public addressErc20 = ''\n public symbol = ''\n public name = ''\n public decimals: number\n public price: BigNumber | null\n public liquidity: BigNumber | null\n public liquidityReserved: BigNumber | null\n public totalSupply: BigNumber | null\n public totalBorrow: BigNumber | null\n public supplyInterestRate: BigNumber | null\n public borrowInterestRate: BigNumber | null\n public torqueBorrowInterestRate: BigNumber | null\n public avgBorrowInterestRate: BigNumber | null\n public lockedAssets: BigNumber | null\n public swapToUSDPrice: BigNumber | null\n public usdSupply: BigNumber | null\n public usdTotalLocked: BigNumber | null\n\n constructor(\n asset: Asset,\n addressErc20 = '',\n symbol = '',\n name = '',\n decimals: number,\n price: BigNumber | null,\n liquidity: BigNumber | null,\n liquidityReserved: BigNumber | null,\n totalSupply: BigNumber | null,\n totalBorrow: BigNumber | null,\n supplyInterestRate: BigNumber | null,\n borrowInterestRate: BigNumber | null,\n torqueBorrowInterestRate: BigNumber | null,\n avgBorrowInterestRate: BigNumber | null,\n lockedAssets: BigNumber | null,\n swapToUSDPrice: BigNumber | null,\n usdSupply: BigNumber | null,\n usdTotalLocked: BigNumber | null\n ) {\n this.asset = asset\n this.addressErc20 = addressErc20\n this.symbol = symbol\n this.name = name\n this.decimals = decimals\n this.price = price\n this.liquidity = liquidity\n this.liquidityReserved = liquidityReserved\n this.totalSupply = totalSupply\n this.totalBorrow = totalBorrow\n this.supplyInterestRate = supplyInterestRate\n this.borrowInterestRate = borrowInterestRate\n this.torqueBorrowInterestRate = torqueBorrowInterestRate\n this.avgBorrowInterestRate = avgBorrowInterestRate\n this.lockedAssets = lockedAssets\n this.swapToUSDPrice = swapToUSDPrice\n this.usdSupply = usdSupply\n this.usdTotalLocked = usdTotalLocked\n }\n}\n","import assetUtils, { Asset, getItokenAddressInfo } from 'app-lib/assetUtils'\nimport providerUtils, { AnyProvider } from 'app-lib/providerUtils'\nimport { BigNumber } from '@0x/utils'\nimport {\n chainConfigs,\n ChainId,\n isChainSupported,\n stakingConfig,\n supportedChains,\n} from '../config/appConfig'\nimport ReserveDetails from '../domain/fulcrum/ReserveDetails'\nimport oracleApi from './apis/oracleApi'\nimport bzxApi, { IAllTokensStats, IChainStat } from './apis/bzxApi'\nimport subgraphHistoryUtils, { ActivityEvent } from './subgraphHistoryUtils'\nimport {\n BorrowEvent,\n BurnEvent,\n CloseWithDepositEvent,\n CloseWithSwapEvent,\n DepositCollateralEvent,\n LiquidationEvent,\n MintEvent,\n TradeEvent,\n WithdrawCollateralEvent,\n} from '../domain/events'\nimport tradeUtils from './tradeUtils'\nimport StakeEvent from '../domain/events/blockchain/StakeEvent'\nimport UnstakeEvent from '../domain/events/blockchain/UnstakeEvent'\nimport { IActivityInfo, Operation } from '../domain/txTypes'\nimport { switchNetwork } from './web3ReactUtils'\n\n/**\n * Calculate how many USDT, USDC, DAI are staked as 3CRV token in Staking Dashboard\n */\nconst getStakedTokensFromCRV = async (\n provider: AnyProvider,\n daiReserveDetails: ReserveDetails,\n usdcReserveDetails: ReserveDetails,\n usdtReserveDetails: ReserveDetails\n): Promise<{\n daiReserve: { lockedAssets: BigNumber; usdTotalLocked: BigNumber }\n usdcReserve: { lockedAssets: BigNumber; usdTotalLocked: BigNumber }\n usdtReserve: { lockedAssets: BigNumber; usdTotalLocked: BigNumber }\n}> => {\n const result: {\n daiReserve: { lockedAssets: BigNumber; usdTotalLocked: BigNumber }\n usdcReserve: { lockedAssets: BigNumber; usdTotalLocked: BigNumber }\n usdtReserve: { lockedAssets: BigNumber; usdTotalLocked: BigNumber }\n } = {\n daiReserve: { lockedAssets: new BigNumber(0), usdTotalLocked: new BigNumber(0) },\n usdcReserve: { lockedAssets: new BigNumber(0), usdTotalLocked: new BigNumber(0) },\n usdtReserve: { lockedAssets: new BigNumber(0), usdTotalLocked: new BigNumber(0) },\n }\n if (!provider.contractsSource || !isChainSupported(provider.currentChainId)) {\n return result\n }\n const stakingV1Address = stakingConfig.stakingContract\n const crvAddress = assetUtils.getAddress(provider.currentChainId, Asset.CRV)\n if (crvAddress) {\n // 3CRV swap contract\n const threePoolContract = await provider.contractsSource.getThreePoolContract()\n const crvErc20Contract = provider.contractsSource.getErc20Contract(crvAddress)\n\n const crvStakedLockedAmount = await crvErc20Contract.balanceOf(stakingV1Address).callAsync()\n const crvTotalSupply = await crvErc20Contract.totalSupply().callAsync()\n\n // get a share of 3CRV tokens in staking contract compare to all exisiting 3CRV tokens\n const shareOfCrvLockedInStaking = crvStakedLockedAmount.div(crvTotalSupply)\n\n if (daiReserveDetails && daiReserveDetails.decimals && daiReserveDetails.swapToUSDPrice) {\n const precision = new BigNumber(10 ** (18 - daiReserveDetails.decimals))\n // underlying DAI in 3CRV\n const underlyingDaiInCRV = await threePoolContract.balances(new BigNumber(0)).callAsync()\n const shareOfDaiInStakedCrv = underlyingDaiInCRV\n .times(precision)\n .times(shareOfCrvLockedInStaking)\n\n result.daiReserve.lockedAssets = shareOfDaiInStakedCrv.div(10 ** 18)\n\n const stakingDaiUsdLocked = shareOfDaiInStakedCrv\n .times(daiReserveDetails.swapToUSDPrice.dividedBy(10 ** 18))\n .div(10 ** 18)\n result.daiReserve.usdTotalLocked = stakingDaiUsdLocked\n }\n\n if (usdtReserveDetails && usdtReserveDetails.decimals && usdtReserveDetails.swapToUSDPrice) {\n const precision = new BigNumber(10 ** (18 - usdtReserveDetails.decimals))\n // underlying USDT in 3CRV\n const underlyingUsdtInCRV = await threePoolContract.balances(new BigNumber(2)).callAsync()\n const shareOfUsdtInStakedCrv = underlyingUsdtInCRV\n .times(precision)\n .times(shareOfCrvLockedInStaking)\n result.usdtReserve.lockedAssets = shareOfUsdtInStakedCrv.div(10 ** 18)\n\n const stakingUsdtUsdLocked = shareOfUsdtInStakedCrv\n .times(usdtReserveDetails.swapToUSDPrice.dividedBy(10 ** 18))\n .div(10 ** 18)\n\n result.usdtReserve.usdTotalLocked = stakingUsdtUsdLocked\n }\n\n if (usdcReserveDetails && usdcReserveDetails.decimals && usdcReserveDetails.swapToUSDPrice) {\n const precision = new BigNumber(10 ** (18 - usdcReserveDetails.decimals))\n // underlying USDC in 3CRV\n const underlyingUsdcInCRV = await threePoolContract.balances(new BigNumber(1)).callAsync()\n const shareOfUsdcInStakedCrv = underlyingUsdcInCRV\n .times(precision)\n .times(shareOfCrvLockedInStaking)\n\n result.usdtReserve.lockedAssets = shareOfUsdcInStakedCrv.div(10 ** 18)\n\n const stakingUsdcUsdLocked = shareOfUsdcInStakedCrv\n .times(usdcReserveDetails.swapToUSDPrice.dividedBy(10 ** 18))\n .div(10 ** 18)\n\n result.usdcReserve.usdTotalLocked = stakingUsdcUsdLocked\n }\n }\n return result\n}\n\n/**\n * Get reserve of tokens like stMATIC, wstETH\n * Use only for this type of tokens; they do not have iTokens and were added separately\n */\nasync function getChainStakedTokenReserve(\n provider: AnyProvider,\n token: Asset\n): Promise {\n const { chainId } = providerUtils.getDependenciesStrictRead(provider)\n const chain = chainConfigs[chainId]\n\n const tokenInfo = assetUtils.getInfo(chainId, token)\n const balance = (\n await providerUtils.getErc20Balance(provider, tokenInfo.address, chain.contracts.bzx)\n ).div(10 ** tokenInfo.decimals)\n\n const swapRate = await oracleApi.getSwapToUsdRate(provider, token)\n\n const reserve = new ReserveDetails(\n tokenInfo.asset,\n tokenInfo.address,\n tokenInfo.asset,\n tokenInfo.displayName,\n tokenInfo.decimals,\n null,\n new BigNumber(0),\n new BigNumber(0),\n new BigNumber(0),\n new BigNumber(0),\n new BigNumber(0),\n new BigNumber(0),\n new BigNumber(0),\n new BigNumber(0),\n balance,\n swapRate,\n new BigNumber(0),\n swapRate.times(balance)\n )\n return reserve\n}\n\nconst getReserveDetails = async (\n provider: AnyProvider,\n assets: Asset[]\n): Promise<{ allTokensStats: IAllTokensStats; stats: ReserveDetails[] }> => {\n const { helperContract, chainId } = providerUtils.getDependenciesStrictRead(provider)\n const tokens = assetUtils.getITokenAddresses(chainId, assets)\n\n let swapRates\n try {\n swapRates = (\n await oracleApi.getSwapToUsdRateBatch(\n provider,\n assets,\n chainConfigs[provider.currentChainId].stablecoinForUsdRates\n )\n )[0]\n } catch (e) {\n console.error(e)\n }\n\n const reserveData = await helperContract.reserveDetails(tokens).callAsync()\n let usdSupplyAll = new BigNumber(0)\n let usdTotalLockedAll = new BigNumber(0)\n const stats: ReserveDetails[] = []\n\n for (let i = 0; i < reserveData.length; i++) {\n const reserve = reserveData[i]\n const asset = assetUtils.getUnderlyingAssetFromItokenAddress(chainId, reserve.iToken)\n const symbol = ''\n const name = ''\n const assetAddress: string = tokens[i]\n\n let totalAssetSupply = new BigNumber(reserve.totalAssetSupply)\n let totalAssetBorrow = new BigNumber(reserve.totalAssetBorrow)\n const supplyInterestRate = new BigNumber(reserve.supplyInterestRate)\n const borrowInterestRate = new BigNumber(reserve.borrowInterestRate)\n const torqueBorrowInterestRate = new BigNumber(reserve.torqueBorrowInterestRate)\n let vaultBalance = new BigNumber(reserve.vaultBalance)\n let marketLiquidity = totalAssetSupply.minus(totalAssetBorrow)\n\n const decimals = assetUtils.getDecimals(chainId, asset)\n let usdSupply = new BigNumber(0)\n let usdTotalLocked = new BigNumber(0)\n\n const precision = new BigNumber(10 ** (18 - decimals))\n totalAssetSupply = totalAssetSupply.times(precision)\n totalAssetBorrow = totalAssetBorrow.times(precision)\n marketLiquidity = marketLiquidity.times(precision)\n //liquidityReserved = liquidityReserved.times(precision);\n vaultBalance = vaultBalance.times(precision)\n\n if (swapRates && swapRates[i]) {\n usdSupply = totalAssetSupply.times(swapRates[i]).dividedBy(10 ** 18)\n usdSupplyAll = usdSupplyAll.plus(usdSupply)\n\n usdTotalLocked = marketLiquidity\n .plus(vaultBalance)\n .times(swapRates[i])\n .dividedBy(10 ** 18)\n usdTotalLockedAll = usdTotalLockedAll.plus(usdTotalLocked)\n }\n\n stats.push(\n new ReserveDetails(\n asset,\n assetAddress,\n symbol,\n name,\n decimals,\n null, // tokenPrice.dividedBy(10 ** 18),\n marketLiquidity.dividedBy(10 ** 18),\n // liquidityReserved.dividedBy(10 ** 18),\n new BigNumber(0),\n totalAssetSupply.dividedBy(10 ** 18),\n totalAssetBorrow.dividedBy(10 ** 18),\n supplyInterestRate.dividedBy(10 ** 18),\n borrowInterestRate.dividedBy(10 ** 18),\n torqueBorrowInterestRate.dividedBy(10 ** 18),\n // avgBorrowInterestRate.dividedBy(10 ** 18),\n new BigNumber(0),\n vaultBalance.dividedBy(10 ** 18),\n swapRates ? swapRates[i] : new BigNumber(0),\n usdSupply.dividedBy(10 ** 18),\n usdTotalLocked.dividedBy(10 ** 18)\n )\n )\n }\n\n if (chainId === 137) {\n // Because stMATIC has no itoken and wont be in reserves, need to query separately\n const stMaticReserve = await getChainStakedTokenReserve(provider, Asset.STMATIC)\n usdTotalLockedAll = usdTotalLockedAll.plus(stMaticReserve.usdTotalLocked?.times(10 ** 18) || 0)\n stats.push(stMaticReserve)\n } else if (chainId === 1) {\n // Because wstETH has no itoken and wont be in reserves, need to query separately\n const wstEthReserve = await getChainStakedTokenReserve(provider, Asset.WSTETH)\n usdTotalLockedAll = usdTotalLockedAll.plus(wstEthReserve.usdTotalLocked?.times(10 ** 18) || 0)\n stats.push(wstEthReserve)\n }\n\n usdSupplyAll = usdSupplyAll.div(10 ** 18)\n usdTotalLockedAll = usdTotalLockedAll.div(10 ** 18)\n\n if (chainId === 1) {\n /**\n * Add USDT, USDC, DAI from staked CRV to protocol stats\n */\n const daiReserveDetails = stats.find((e) => e.asset === Asset.DAI)\n const usdcReserveDetails = stats.find((e) => e.asset === Asset.USDC)\n const usdtReserveDetails = stats.find((e) => e.asset === Asset.USDT)\n if (daiReserveDetails && usdtReserveDetails && usdcReserveDetails) {\n // TODO: should check if this whole code related to CRV still makes sense; add explanation or delete\n const { daiReserve, usdcReserve, usdtReserve } = await getStakedTokensFromCRV(\n provider,\n daiReserveDetails,\n usdcReserveDetails,\n usdtReserveDetails\n )\n daiReserveDetails.lockedAssets = daiReserveDetails.lockedAssets\n ? daiReserveDetails.lockedAssets.plus(daiReserve.lockedAssets)\n : daiReserve.lockedAssets\n usdcReserveDetails.lockedAssets = usdcReserveDetails.lockedAssets\n ? usdcReserveDetails.lockedAssets.plus(usdcReserve.lockedAssets)\n : usdcReserve.lockedAssets\n usdtReserveDetails.lockedAssets = usdtReserveDetails.lockedAssets\n ? usdtReserveDetails.lockedAssets.plus(usdtReserve.lockedAssets)\n : usdtReserve.lockedAssets\n\n daiReserveDetails.usdTotalLocked = daiReserveDetails.usdTotalLocked\n ? daiReserveDetails.usdTotalLocked.plus(daiReserve.usdTotalLocked)\n : daiReserve.usdTotalLocked\n usdcReserveDetails.usdTotalLocked = usdcReserveDetails.usdTotalLocked\n ? usdcReserveDetails.usdTotalLocked.plus(usdcReserve.usdTotalLocked)\n : usdcReserve.usdTotalLocked\n usdtReserveDetails.usdTotalLocked = usdtReserveDetails.usdTotalLocked\n ? usdtReserveDetails.usdTotalLocked.plus(usdtReserve.usdTotalLocked)\n : usdtReserve.usdTotalLocked\n\n usdTotalLockedAll = usdTotalLockedAll\n .plus(daiReserve.usdTotalLocked)\n .plus(usdcReserve.usdTotalLocked)\n .plus(usdtReserve.usdTotalLocked)\n }\n }\n\n const allTokensStats = {\n usdSupply: usdSupplyAll.toFixed(),\n usdTotalLocked: usdTotalLockedAll.toFixed(),\n }\n\n return { stats, allTokensStats }\n}\n\n/**\n * Uses reserveDetails to provide chain stats with the same format than the backend api\n */\nasync function getStatsOnChain(provider: AnyProvider): Promise {\n const { chainId } = providerUtils.getDependenciesStrictRead(provider)\n const chain = chainConfigs[chainId]\n const lendingAssets = chain.lending.assets\n const { stats, allTokensStats } = await getReserveDetails(provider, lendingAssets)\n const chainStats: IChainStat = { chainId, stats: [], allTokensStats }\n\n chainStats.stats = stats.map((item) => {\n // @see bzxApi.getChainStats for why we rename asset\n const tokenName =\n chain.native.asset === item.asset\n ? chain.native.wrapped\n : item.asset === 'ETH' && chainId === 137\n ? Asset.WETH\n : item.asset\n const decimals = item.decimals || 18\n const { iTokenAddress, iTokenExplorerUrl } = getItokenAddressInfo(chainId, tokenName)\n const assetsCommon = assetUtils.getCommon(tokenName)\n return {\n address: item.addressErc20,\n availableLiquidity: item.liquidity ? item.liquidity.toFixed(decimals) : 'NaN',\n borrowApr: item.borrowInterestRate ? item.borrowInterestRate.toFixed(decimals) : 'NaN',\n supplyApr: item.supplyInterestRate ? item.supplyInterestRate.toFixed(decimals) : 'NaN',\n tokenName,\n tokenUsdPrice: item.swapToUSDPrice ? item.swapToUSDPrice.toFixed(2) : 'NaN',\n totalBorrow: item.totalBorrow ? item.totalBorrow.toFixed(decimals) : 'NaN',\n totalSupply: item.totalSupply ? item.totalSupply.toFixed(decimals) : 'NaN',\n usdTotalLocked: item.usdTotalLocked ? item.usdTotalLocked.toFixed(2) : 'NaN',\n usdSupply: item.usdSupply ? item.usdSupply.toFixed(2) : 'NaN',\n vaultBalance: item.lockedAssets ? item.lockedAssets.toFixed(decimals) : 'NaN',\n decimals,\n iTokenAddress,\n iTokenExplorerUrl,\n logo: assetsCommon ? assetsCommon.spriteLogo : '',\n }\n })\n return [chainStats]\n}\n\n/**\n * Get data from the backend api first by default, fallback to blockchain in case of failure\n */\nasync function getChainStats(\n provider: AnyProvider,\n chainId?: ChainId,\n opts?: { onChain: boolean }\n): Promise {\n if (opts?.onChain) {\n return getStatsOnChain(provider)\n }\n try {\n const fromApi = await bzxApi.getChainStats(chainId)\n return fromApi\n } catch (err) {\n console.error('getChainStats Backend API failed.', 'Trying from blockchain...', err)\n // when there is fallback to the blockchain, we only query from the current chain\n return getStatsOnChain(provider)\n }\n}\n\nfunction getTradeEventInfo(e: TradeEvent | CloseWithSwapEvent) {\n const { isLong, positionType } = tradeUtils.guessLongShort(\n e.chainId,\n e.loanToken,\n e.collateralToken\n )\n let asset = isLong ? e.collateralToken : e.loanToken\n let leverage = new BigNumber(e.currentLeverage.div(10 ** 18))\n\n let type = 'Closed ' + positionType\n let value = new BigNumber(0)\n\n if (e instanceof TradeEvent) {\n asset = e.collateralToken\n const { decimals } = assetUtils.getChainDetails(e.chainId, asset)\n value = e.positionSize.div(10 ** decimals)\n if (isLong) {\n leverage = leverage.plus(1)\n type = 'Longed'\n } else {\n type = 'Shorted'\n }\n } else {\n const { decimals } = assetUtils.getChainDetails(e.chainId, asset)\n const closeAmount = isLong ? e.positionCloseSize : e.loanCloseAmount\n value = closeAmount.div(10 ** decimals)\n }\n\n return {\n asset,\n pair: isLong ? e.collateralToken + '/' + e.loanToken : e.loanToken + '/' + e.collateralToken,\n type,\n operation: Operation.Trade,\n leverage,\n value,\n }\n}\n\nfunction getBorrowEventInfo(e: BorrowEvent | CloseWithDepositEvent) {\n const asset = e.loanToken\n const { decimals } = assetUtils.getChainDetails(e.chainId, asset)\n if (e instanceof BorrowEvent) {\n return {\n asset,\n operation: Operation.Borrow,\n type: 'borrowed',\n value: e.newPrincipal.div(10 ** decimals),\n collateral: e.collateralToken,\n }\n }\n return {\n asset,\n operation: Operation.Borrow,\n type: 'closed borrow',\n value: e.repayAmount.div(10 ** decimals),\n }\n}\n\nfunction getLendEventInfo(e: MintEvent | BurnEvent) {\n const asset = assetUtils.getAssetByIToken(e.chainId, e.asset)\n const { decimals } = assetUtils.getChainDetails(e.chainId, asset)\n const value = e.assetAmount.div(10 ** decimals)\n\n return {\n asset,\n operation: Operation.Lend,\n type: e instanceof MintEvent ? 'lent' : 'unlent',\n value,\n }\n}\n\nfunction getLiquidationEventInfo(e: LiquidationEvent) {\n const { asset } = e\n const { decimals } = assetUtils.getChainDetails(e.chainId, asset)\n const value = e.repayAmount.div(10 ** decimals)\n\n return {\n asset,\n operation: Operation.Trade,\n type: 'liquidated',\n value,\n }\n}\n\nfunction getCollateralEventInfo(\n e: DepositCollateralEvent | WithdrawCollateralEvent,\n events: ActivityEvent[]\n) {\n //check if collateral changed for borrow or trade\n const tradeOrBorrow = events.find(\n (current) =>\n current.user === e.user &&\n (current instanceof BorrowEvent || current instanceof TradeEvent) &&\n e.loanId === current.loanId\n )\n\n const { asset, chainId, loanId } = e\n\n const operation = tradeOrBorrow\n ? tradeOrBorrow instanceof TradeEvent\n ? Operation.Trade\n : Operation.Borrow\n : undefined\n const { decimals } = assetUtils.getChainDetails(chainId, asset)\n const value = e.amount.div(10 ** decimals)\n const type = e instanceof DepositCollateralEvent ? 'collateral deposited' : 'collateral withdrawn'\n return {\n asset,\n operation,\n type,\n value,\n loanId,\n }\n}\n\nfunction getStakeEventInfo(e: StakeEvent | UnstakeEvent) {\n const { token: asset } = e\n const { decimals } = assetUtils.getChainDetails(1, asset)\n const value = e.amount.div(10 ** decimals)\n\n return {\n type: e instanceof StakeEvent ? 'staking' : 'unstake',\n asset,\n operation: Operation.Stake,\n value,\n }\n}\n\nfunction getActivityInfo(events: ActivityEvent[]) {\n const activity: IActivityInfo[] = []\n events.forEach(async (e) => {\n const { chainId, user, timestamp, txHash } = e\n const info =\n e instanceof TradeEvent || e instanceof CloseWithSwapEvent\n ? getTradeEventInfo(e)\n : e instanceof LiquidationEvent\n ? getLiquidationEventInfo(e)\n : e instanceof DepositCollateralEvent || e instanceof WithdrawCollateralEvent\n ? getCollateralEventInfo(e, events)\n : e instanceof BorrowEvent || e instanceof CloseWithDepositEvent\n ? getBorrowEventInfo(e)\n : e instanceof MintEvent || e instanceof BurnEvent\n ? getLendEventInfo(e)\n : e instanceof StakeEvent || e instanceof UnstakeEvent\n ? getStakeEventInfo(e)\n : {}\n activity.push({ chainId, user, timestamp, txHash, ...info } as IActivityInfo)\n })\n\n return activity\n}\n\n/** Get latest events\n * limit by 3 month to avoid a big response*/\nasync function getLatestProtocolEvents(chainId: ChainId, monthCount = 3) {\n const opts = { oldGraph: false, monthCount: monthCount }\n const events = await subgraphHistoryUtils.getChainHistory(chainId, undefined, opts)\n const activityInfo = getActivityInfo(events)\n // get loans to identify is it Trade collateral or Borrow\n const loans = activityInfo.reduce((loanIds, info) => {\n if (info.loanId && !info.operation) {\n loanIds.push(info.loanId)\n }\n return loanIds\n }, [] as string[])\n const tradeLoans = await subgraphHistoryUtils.getTradeLoans(chainId, loans)\n return activityInfo.map((info) => {\n if (!info.operation && info.loanId) {\n info.operation = tradeLoans.find((loan: string) => loan === info.loanId)\n ? Operation.Trade\n : Operation.Borrow\n }\n return info\n })\n}\n\nasync function getUserProtocolEvents(account: string) {\n const opts = { oldGraph: false }\n\n let result: Array = []\n for (const chainId of supportedChains) {\n const events = await subgraphHistoryUtils.getChainHistory(chainId, account, opts)\n const info = getActivityInfo(events)\n result = result.concat(info)\n }\n return result.sort((a, b) => Number(b.timestamp) - Number(a.timestamp))\n}\n\nfunction openInpersonate(e: IActivityInfo) {\n const link =\n e.operation === Operation.Trade\n ? '/trade/open-positions'\n : e.operation === Operation.Borrow\n ? '/borrow/user-loans'\n : e.operation === Operation.Lend\n ? '/lend/yields'\n : e.operation === Operation.Stake\n ? '/stake'\n : '/'\n\n providerUtils.setLocalstorageItem('impersonateAddress', e.user)\n switchNetwork(e.chainId)\n window.open(link, '_blank', 'noopener,noreferrer')\n // clean impersonateAddress after 10s\n setTimeout(() => {\n providerUtils.setLocalstorageItem('impersonateAddress', '')\n }, 10000)\n}\n\nexport default {\n getActivityInfo,\n getChainStats,\n getChainStakedTokenReserve,\n getLatestProtocolEvents,\n getReserveDetails,\n getStakedTokensFromCRV,\n getUserProtocolEvents,\n openInpersonate,\n}\n","import { Web3Wrapper } from '@0x/web3-wrapper'\nimport { ProviderType } from 'bzx-common/src/domain/ProviderTypeDictionary'\n\nexport class ProviderChangedEvent {\n public providerType: ProviderType\n public web3: Web3Wrapper | null\n\n constructor(providerType: ProviderType, web3: Web3Wrapper | null) {\n this.providerType = providerType\n this.web3 = web3\n }\n}\n\nexport enum ProviderEvents {\n ProviderAvailable = 'ProviderAvailable',\n ProviderChanged = 'ProviderChanged',\n ProviderIsChanging = 'ProviderIsChanging',\n}\n\nexport interface IProviderEvents {\n ProviderAvailable: (event: ProviderChangedEvent) => void\n ProviderChanged: (event: ProviderChangedEvent) => void\n ProviderIsChanging: () => void\n}\n","import React, { PureComponent } from 'react'\n\ninterface ILoaderProps {\n quantityDots: number\n sizeDots: 'small' | 'middle' | 'large'\n title?: string\n isWarningTitle?: boolean\n textPosition?: 'above' | 'below'\n className?: string\n}\n\nexport default class Loader extends PureComponent {\n public constructor(props: ILoaderProps, context?: any) {\n super(props, context)\n }\n\n public renderDots = () => {\n const animationDuration = 0.35 * this.props.quantityDots\n const wrapperDots = []\n for (let i = 0; i < this.props.quantityDots; i++) {\n wrapperDots.push(\n \n )\n }\n return wrapperDots\n }\n\n public render() {\n const textPosition = this.props.textPosition || 'above'\n let title = null\n\n if (this.props.title && this.props.title.length > 0) {\n title = (\n \n {this.props.title}\n

\n )\n }\n\n return (\n
\n
\n {textPosition === 'above' && title}\n
{this.renderDots()}
\n {textPosition === 'below' && title}\n
\n
\n )\n }\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport providerUtils from 'app-lib/providerUtils'\nimport { BigNumber } from '@0x/utils'\nimport { FulcrumProvider } from '../../../fulcrum/src/services/FulcrumProvider'\nimport { ChainId } from '../config/chains/chainCommon'\n\nexport enum Migration {\n BZRX_TO_OOKI = 'BZRX_TO_OOKI',\n}\n\nexport interface IMigration {\n id: Migration\n fromAsset: Asset\n toAsset: Asset\n conversionRatio: number\n chainsAvailable: [1, 137]\n chains: Partial<\n Record\n >\n}\n\nexport const migrationList: Record = {\n BZRX_TO_OOKI: {\n id: Migration.BZRX_TO_OOKI,\n fromAsset: Asset.BZRX,\n toAsset: Asset.OOKI,\n conversionRatio: 10,\n chainsAvailable: [1, 137],\n chains: {\n 1: {\n chainId: 1,\n converterAddress: '0x6BE9B7406260B6B6db79a1D4997e7f8f5c9D7400',\n limitedLiquidity: false,\n },\n 137: {\n chainId: 137,\n converterAddress: '0xc749E8217679817D07f47d1Bb1b651B05c7Cd44F',\n limitedLiquidity: true,\n },\n },\n },\n}\n\nexport default class MigrateService {\n fulcrumProvider: FulcrumProvider\n\n /**\n * Get contracts dependencies, throws an error if something is missing\n */\n public getDependenciesStrict(migration: IMigration) {\n const deps = providerUtils.getDependenciesStrict(this.fulcrumProvider)\n const migrationContractAddress = migration.chains[deps.chainId]?.converterAddress\n if (!migrationContractAddress) {\n throw new Error('Missing migrationContractAddress')\n }\n const swapConverter = deps.contractsSource.getFixedSwapConverter(migrationContractAddress)\n return { ...deps, swapConverter }\n }\n\n /**\n * This is for FixedSwapConverter (BZRX -> OOKI)\n */\n migrate(migration: IMigration, amount: BigNumber) {\n const { userAddress, swapConverter, chainId } = this.getDependenciesStrict(migration)\n const decimals = assetUtils.getDecimals(chainId, migration.fromAsset)\n const amountInBaseUnits = amount.times(10 ** decimals)\n return providerUtils.runTx(\n this.fulcrumProvider,\n swapConverter.convert2(userAddress, amountInBaseUnits),\n swapConverter\n )\n }\n\n constructor(provider: FulcrumProvider) {\n this.fulcrumProvider = provider\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { ChainId, stakingConfig } from '../config/appConfig'\nimport {\n BorrowEvent,\n BurnEvent,\n CloseWithDepositEvent,\n CloseWithSwapEvent,\n DepositCollateralEvent,\n EarnRewardEventNew,\n LiquidationEvent,\n MintEvent,\n PayTradingFeeEvent,\n RolloverEvent,\n StakeEvent,\n UnstakeEvent,\n TradeEvent,\n WithdrawCollateralEvent,\n} from '../domain/events'\nimport bzxApi from './apis/bzxApi'\nimport { getTimestamp } from './dateUtils'\n\ntype BaseEvent = {\n chainId: ChainId\n id: string // \"0x000273c35edbc480ad2e1543dafdc9b69eccc0b315da62f6d72103f7e5bb7716-138\",\n loan: {\n id: string // \"0x980a73c752722d83417470483f9badc176ea723b7535cfecbff5b734aeca890d\",\n collateralToken: string // \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",\n loanToken: string // \"0xdac17f958d2ee523a2206206994597c13d831ec7\"\n }\n address: string // \"0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f\",\n timestamp: number // 1606820164,\n transaction: {\n id: string // \"0x000273c35edbc480ad2e1543dafdc9b69eccc0b315da62f6d72103f7e5bb7716\"\n blockNumber: string // \"11582776\"\n timestamp: string // 1609693710\n }\n type: string // \"ProtocolTradeEvent\",\n user: {\n id: string // \"0xd22ac5af1c0db9a22a65a94db00a72b4e6b08ee2\"\n }\n}\n\ntype SubgraphTradeEvent = BaseEvent & {\n borrowedAmount: string // \"64987760\",\n currentLeverage: string // \"4167269003888986642\",\n entryLeverage: string // \"4000000000000000000\",\n entryPrice: string // \"1589635849229932136121008833\",\n interestRate: string // \"19000000000000000000\",\n lender: {\n id: string // \"0x7e9997a38a439b2be7ed9c9c4628391d3e055d48\"\n }\n positionSize: string // \"129414799655130232\",\n settlementDate: number // 1609239364,\n}\n\ntype SubgraphBorrowEvent = BaseEvent & {\n newCollateral: string // \"64987760\",\n currentMargin: string // \"4167269003888986642\",\n collateralToLoanRate: string // \"4000000000000000000\",\n interestRate: string // \"19000000000000000000\",\n lender: {\n id: string // \"0x7e9997a38a439b2be7ed9c9c4628391d3e055d48\"\n }\n newPrincipal: string // \"129414799655130232\",\n interestDuration: number // 1609239364,\n}\n\ntype SubgraphLiquidateEvent = BaseEvent & {\n collateralToLoanRate: string // '31935220394913006423'\n collateralWithdrawAmount: string // '75374874335927337991'\n currentMargin: string // '13974655882350922435'\n liquidator: {\n id: string // '0xfa084336deba96eb0519120d2faa446e15c568ca'\n }\n repayAmount: string // '2249638527249263248153'\n}\n\ntype SubgraphRolloverEvent = BaseEvent & {\n caller: {\n id: string // \"0xe487a866b0f6b1b663b4566ff7e998af6116fba9\"\n }\n collateralAmountUsed: string // \"143847530916363\",\n gasRebate: string // \"6663500000000000\",\n interestAmountAdded: string // \"95812595075377483\",\n loanEndTimestamp: number // 1623174271,\n}\n\ntype SubgraphCloseWithDepositEvent = BaseEvent & {\n closer: {\n id: string // '0xe33dc6024fb048d894deea298e5468bbb2108b7b'\n }\n repayAmount: string // '0443'\n collateralWithdrawAmount: string // '28967644427526'\n collateralToLoanRate: string // '970439278783124555505'\n currentMargin: string // '36305878781841533'\n}\n\ntype SubgraphCloseWithSwapEvent = BaseEvent & {\n closer: {\n id: string // '0xe33dc6024fb048d894deea298e5468bbb2108b7b'\n }\n currentLeverage: string // '0'\n exitPrice: string // '28967644427526'\n loanCloseAmount: string // '970439278783124555505'\n positionCloseSize: string // '36305878781841533'\n}\n\ntype SubgraphEarnRewardEvent = BaseEvent & {\n amount: string // '19369838282748679012'\n feeType: number // 3\n receiver: {\n id: string // '0xbfb3c2cf90b17cabf40e73384e1fea5d64d83644'\n }\n token: string // '0xb72b31907c1c95f3650b64b2469e08edacee5e8f'\n}\n\ntype SubgraphPayTradingFeeEvent = BaseEvent & {\n amount: string // '74031735924876064807'\n payer: {\n id: string // '0x6c10bfcd97611c671a23752e8e48bf5af26049c3'\n }\n token: string // '0x6b175474e89094c44da98b954eedeac495271d0f'\n}\n\ntype SubgraphDepositCollateralEvent = BaseEvent & {\n depositAmount: string // '5928881552879280376'\n depositToken: string // '0x514910771af9ca656af840dff83e8264ecf986ca'\n}\n\ntype SubgraphWithdrawCollateralEvent = BaseEvent & {\n withdrawAmount: string // '5928881552879280376'\n withdrawToken: string // '0x514910771af9ca656af840dff83e8264ecf986ca'\n timestamp: number // 1609291944\n}\n\ntype SubgraphMintEvent = BaseEvent & {\n price: string // '53339'\n transaction: {\n blockNumber: string // '11552379'\n id: string // '0x002ca365e3ca09ead22611de1b7d74a185f50cc66a10725f08a0cbc90aa640ef'\n timestamp: number // 1609291944\n }\n minter: {\n id: string // '0x23387f54e216c87f7c27a73bdb12bc4ca9b818eb'\n }\n tokenAmount: string\n assetAmount: string\n}\n\ntype SubgraphBurnEvent = BaseEvent & {\n address: string // '0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f'\n price: string // '53339'\n burner: {\n id: string // '0x23387f54e216c87f7c27a73bdb12bc4ca9b818eb'\n }\n tokenAmount: string\n assetAmount: string\n}\n\ntype SubgraphStakeEvent = BaseEvent & {\n amount: string\n token: string\n}\n\ntype SubgraphUnstakeEvent = BaseEvent & {\n amount: string\n token: string\n}\n\nexport type ActivityEvent =\n | TradeEvent\n | LiquidationEvent\n | CloseWithSwapEvent\n | CloseWithDepositEvent\n | DepositCollateralEvent\n | WithdrawCollateralEvent\n | BorrowEvent\n | MintEvent\n | BurnEvent\n | StakeEvent\n | UnstakeEvent\n\ntype TradeHistoryEvent =\n | TradeEvent\n | LiquidationEvent\n | RolloverEvent\n | CloseWithSwapEvent\n | DepositCollateralEvent\n | WithdrawCollateralEvent\n | EarnRewardEventNew\n | PayTradingFeeEvent\n\nconst activityEvents = [\n 'protocolTradeEvent',\n 'protocolLiquidateEvent',\n 'protocolRolloverEvent',\n 'protocolCloseWithSwapEvent',\n 'protocolDepositCollateralEvent',\n 'protocolWithdrawCollateralEvent',\n 'protocolEarnRewardEvent',\n 'protocolPayTradingFeeEvent',\n 'protocolCloseWithDepositEvent',\n 'protocolBorrowEvent',\n 'mintEvent',\n 'burnEvent',\n 'stakingStakeEvent',\n 'stakingUnstakeEvent',\n]\n\nconst tradeHistoryEvents = [\n 'protocolTradeEvent',\n 'protocolLiquidateEvent',\n 'protocolRolloverEvent',\n 'protocolCloseWithSwapEvent',\n 'protocolDepositCollateralEvent',\n 'protocolWithdrawCollateralEvent',\n 'protocolEarnRewardEvent',\n 'protocolPayTradingFeeEvent',\n]\n\ntype ProtocolEvent = typeof activityEvents[number] | typeof tradeHistoryEvents[number]\n\nconst params = `orderBy: timestamp, orderDirection: desc`\n\nconst timeFilter = (monthCount = 0) => `timestamp_gt: ${monthCount ? getTimestamp(monthCount) : 0}`\n\nconst baseEventQuery = `id\nuser {\n id\n}\naddress\ntype\ntransaction {\n id\n blockNumber\n timestamp\n}\ntimestamp\nloan {\n id\n loanToken\n collateralToken\n}`\n\nconst eventFields: Record = {\n protocolTradeEvent: `lender {\n id\n }\n positionSize\n borrowedAmount\n interestRate\n settlementDate\n entryPrice\n entryLeverage\n currentLeverage`,\n protocolCloseWithSwapEvent: `closer{\n id\n } \n positionCloseSize\n loanCloseAmount\n exitPrice\n currentLeverage`,\n protocolCloseWithDepositEvent: `closer{\n id\n } \n repayAmount\n collateralWithdrawAmount\n collateralToLoanRate\n currentMargin`,\n protocolBorrowEvent: `lender{\n id\n }\n newPrincipal\n newCollateral\n interestRate\n interestDuration\n collateralToLoanRate\n currentMargin`,\n mintEvent: `minter{\n id\n }\n tokenAmount\n assetAmount\n price`,\n burnEvent: `burner{\n id\n }\n tokenAmount\n assetAmount\n price`,\n protocolRolloverEvent: `caller{\n id\n }\n collateralAmountUsed\n interestAmountAdded\n loanEndTimestamp\n gasRebate`,\n protocolLiquidateEvent: `liquidator{\n id\n }\n repayAmount\n collateralWithdrawAmount\n collateralToLoanRate\n currentMargin`,\n protocolDepositCollateralEvent: `depositToken \n depositAmount`,\n protocolWithdrawCollateralEvent: `withdrawToken\n withdrawAmount`,\n protocolEarnRewardEvent: `receiver{\n id\n }\n token\n amount\n feeType`,\n protocolPayTradingFeeEvent: `payer{\n id\n }\n token\n amount`,\n stakingStakeEvent: `token\n amount`,\n stakingUnstakeEvent: `token\n amount`,\n}\n\nfunction getEventsQuery(\n type: ProtocolEvent,\n account?: string,\n opts?: { oldGraph: boolean; monthCount?: number }\n) {\n const fields = eventFields[type]\n const accountFilter = account ? `user: \"${account.toLowerCase()}\"` : ''\n return `${type}s${`(where: {${timeFilter(opts?.monthCount)},${accountFilter}}, ${params})`}{\n ${baseEventQuery}\n ${fields}\n }`\n}\n\nfunction getLoanEventsQuery(type: ProtocolEvent, loanIds: string[]) {\n const loans = loanIds.reduce((ids, id) => `${ids}\"${id.toLowerCase()}\",`, '')\n const loanFilter = loanIds.length ? `loan_: {id_in: [${loans}]}` : ''\n return `${type}s${`(where: {${loanFilter}}, ${params})`}{\n ${baseEventQuery}`\n}\n\nconst getTradeEvents = (events: SubgraphTradeEvent[], chainId: ChainId): TradeEvent[] => {\n return events.reduce((evnts, e) => {\n const loanToken = assetUtils.getAssetFromAddress(chainId, e.loan.loanToken)\n const collateralToken = assetUtils.getAssetFromAddress(chainId, e.loan.collateralToken)\n if (loanToken === Asset.UNKNOWN || collateralToken === Asset.UNKNOWN) {\n return evnts\n }\n evnts.push(\n new TradeEvent(\n chainId,\n e.user.id,\n e.lender.id,\n e.loan.id,\n collateralToken,\n loanToken,\n new BigNumber(e.positionSize),\n new BigNumber(e.borrowedAmount),\n new BigNumber(e.interestRate),\n new Date(new BigNumber(e.settlementDate).times(1000).toNumber()),\n new BigNumber(e.entryPrice),\n new BigNumber(e.entryLeverage),\n new BigNumber(e.currentLeverage),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as TradeEvent[])\n}\n\nconst getLiquidationEvents = (\n events: SubgraphLiquidateEvent[],\n chainId: ChainId\n): LiquidationEvent[] => {\n return events.reduce((evnts, e) => {\n const loanToken = assetUtils.getAssetFromAddress(chainId, e.loan.loanToken)\n const collateralToken = assetUtils.getAssetFromAddress(chainId, e.loan.collateralToken)\n if (loanToken === Asset.UNKNOWN || collateralToken === Asset.UNKNOWN) {\n return evnts\n }\n evnts.push(\n new LiquidationEvent(\n chainId,\n e.user.id,\n e.liquidator.id,\n e.loan.id,\n e.address,\n loanToken,\n collateralToken,\n new BigNumber(e.repayAmount),\n new BigNumber(e.collateralWithdrawAmount),\n new BigNumber(e.collateralToLoanRate),\n new BigNumber(e.currentMargin),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as LiquidationEvent[])\n}\n\nconst getRolloverEvents = (events: SubgraphRolloverEvent[], chainId: ChainId): RolloverEvent[] => {\n return events.reduce((evnts, e) => {\n const loanToken = assetUtils.getAssetFromAddress(chainId, e.loan.loanToken)\n const collateralToken = assetUtils.getAssetFromAddress(chainId, e.loan.collateralToken)\n if (loanToken === Asset.UNKNOWN || collateralToken === Asset.UNKNOWN) {\n return evnts\n }\n evnts.push(\n new RolloverEvent(\n e.user.id,\n e.caller.id,\n e.loan.id,\n e.address,\n loanToken,\n collateralToken,\n new BigNumber(e.collateralAmountUsed),\n new BigNumber(e.interestAmountAdded),\n new Date(new BigNumber(e.loanEndTimestamp).times(1000).toNumber()),\n new BigNumber(e.gasRebate),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as RolloverEvent[])\n}\n\nconst getCloseWithSwapEvents = (\n events: SubgraphCloseWithSwapEvent[],\n chainId: ChainId\n): CloseWithSwapEvent[] => {\n return events.reduce((evnts, e) => {\n const loanToken = assetUtils.getAssetFromAddress(chainId, e.loan.loanToken)\n const collateralToken = assetUtils.getAssetFromAddress(chainId, e.loan.collateralToken)\n if (loanToken === Asset.UNKNOWN || collateralToken === Asset.UNKNOWN) {\n return evnts\n }\n evnts.push(\n new CloseWithSwapEvent(\n chainId,\n e.user.id,\n collateralToken,\n loanToken,\n e.address,\n e.closer.id,\n e.loan.id,\n new BigNumber(e.positionCloseSize),\n new BigNumber(e.loanCloseAmount),\n new BigNumber(e.exitPrice),\n new BigNumber(e.currentLeverage),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as CloseWithSwapEvent[])\n}\n\nconst getCloseWithDepositEvents = (\n events: SubgraphCloseWithDepositEvent[],\n chainId: ChainId\n): CloseWithDepositEvent[] => {\n return events.reduce((evnts, e) => {\n const loanToken = assetUtils.getAssetFromAddress(chainId, e.loan.loanToken)\n const collateralToken = assetUtils.getAssetFromAddress(chainId, e.loan.collateralToken)\n if (loanToken === Asset.UNKNOWN || collateralToken === Asset.UNKNOWN) {\n return evnts\n }\n evnts.push(\n new CloseWithDepositEvent(\n chainId,\n e.user.id,\n e.address,\n e.loan.id,\n e.closer.id,\n loanToken,\n collateralToken,\n new BigNumber(e.repayAmount),\n new BigNumber(e.collateralWithdrawAmount),\n new BigNumber(e.collateralToLoanRate),\n new BigNumber(e.currentMargin),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as CloseWithDepositEvent[])\n}\n\nconst getEarnRewardEvents = (\n events: SubgraphEarnRewardEvent[],\n chainId: ChainId\n): EarnRewardEventNew[] => {\n return events.reduce((evnts, e) => {\n const token = assetUtils.getAssetFromAddress(chainId, e.token)\n if (token === Asset.UNKNOWN) {\n return evnts\n }\n evnts.push(\n new EarnRewardEventNew(\n e.receiver.id,\n e.loan.id,\n e.feeType,\n token,\n new BigNumber(e.amount).div(10 ** 18),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as EarnRewardEventNew[])\n}\n\nconst getPayTradingFeeEvents = (\n events: SubgraphPayTradingFeeEvent[],\n chainId: ChainId\n): PayTradingFeeEvent[] => {\n return events.reduce((evnts, e) => {\n const token = assetUtils.getAssetFromAddress(chainId, e.token)\n if (token === Asset.UNKNOWN) {\n return evnts\n }\n\n const decimals = assetUtils.getDecimals(chainId, token)\n evnts.push(\n new PayTradingFeeEvent(\n e.user.id,\n token,\n e.loan.id,\n new BigNumber(e.amount).div(10 ** decimals),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as PayTradingFeeEvent[])\n}\n\nconst getDepositCollateralEvents = (\n events: SubgraphDepositCollateralEvent[],\n chainId: ChainId\n): DepositCollateralEvent[] => {\n return events.reduce((evnts, e) => {\n const depositToken = assetUtils.getAssetFromAddress(chainId, e.depositToken)\n\n if (depositToken === Asset.UNKNOWN) {\n return evnts\n }\n evnts.push(\n new DepositCollateralEvent(\n chainId,\n e.user.id,\n depositToken,\n e.loan.id,\n new BigNumber(e.depositAmount),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as DepositCollateralEvent[])\n}\n\nconst getWithdrawCollateralEvents = (\n events: SubgraphWithdrawCollateralEvent[],\n chainId: ChainId\n): WithdrawCollateralEvent[] => {\n return events.reduce((evnts, e) => {\n const withdrawToken = assetUtils.getAssetFromAddress(chainId, e.withdrawToken)\n\n if (withdrawToken === Asset.UNKNOWN) {\n return evnts\n }\n\n evnts.push(\n new WithdrawCollateralEvent(\n chainId,\n e.user.id,\n withdrawToken,\n e.loan.id,\n new BigNumber(e.withdrawAmount),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as WithdrawCollateralEvent[])\n}\n\nconst getBorrowEvents = (events: SubgraphBorrowEvent[], chainId: ChainId): BorrowEvent[] => {\n return events.reduce((evnts, e) => {\n const loanToken = assetUtils.getAssetFromAddress(chainId, e.loan.loanToken)\n const collateralToken = assetUtils.getAssetFromAddress(chainId, e.loan.collateralToken)\n if (loanToken === Asset.UNKNOWN || collateralToken === Asset.UNKNOWN) {\n return evnts\n }\n evnts.push(\n new BorrowEvent(\n chainId,\n e.user.id,\n e.lender.id,\n e.loan.id,\n loanToken,\n collateralToken,\n new BigNumber(e.newPrincipal),\n new BigNumber(e.newCollateral),\n new BigNumber(e.interestRate),\n new BigNumber(e.interestDuration),\n new BigNumber(e.collateralToLoanRate),\n new BigNumber(e.currentMargin),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as BorrowEvent[])\n}\n\nconst getMintEvents = (events: SubgraphMintEvent[], chainId: ChainId): MintEvent[] => {\n return events.reduce((evnts, e) => {\n const token = assetUtils.getAssetFromAddress(chainId, e.address)\n\n if (token === Asset.UNKNOWN) {\n return evnts\n }\n evnts.push(\n new MintEvent(\n chainId,\n e.minter.id,\n new BigNumber(e.tokenAmount),\n new BigNumber(e.assetAmount),\n new BigNumber(e.price),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n token,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as MintEvent[])\n}\n\nconst getBurnEvents = (events: SubgraphBurnEvent[], chainId: ChainId): BurnEvent[] => {\n return events.reduce((evnts, e) => {\n const token = assetUtils.getAssetFromAddress(chainId, e.address)\n\n if (token === Asset.UNKNOWN) {\n return evnts\n }\n evnts.push(\n new BurnEvent(\n chainId,\n e.burner.id,\n new BigNumber(e.tokenAmount),\n new BigNumber(e.assetAmount),\n new BigNumber(e.price),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n token,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as BurnEvent[])\n}\n\nconst getStakeEvents = (events: SubgraphStakeEvent[]): StakeEvent[] => {\n return events.reduce((evnts, e) => {\n const token = assetUtils.getAssetFromAddress(1, e.token)\n\n if (!stakingConfig.stakeableAssets.includes(token)) {\n return evnts\n }\n\n evnts.push(\n new StakeEvent(\n e.user.id,\n token,\n new BigNumber(e.amount),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as StakeEvent[])\n}\n\nconst getUnstakeEvents = (events: SubgraphUnstakeEvent[]): UnstakeEvent[] => {\n return events.reduce((evnts, e) => {\n const token = assetUtils.getAssetFromAddress(1, e.token)\n\n if (!stakingConfig.stakeableAssets.includes(token)) {\n return evnts\n }\n\n evnts.push(\n new UnstakeEvent(\n e.user.id,\n token,\n new BigNumber(e.amount),\n new BigNumber(e.transaction.blockNumber),\n e.transaction.id,\n new Date(new BigNumber(e.transaction.timestamp).times(1000).toNumber())\n )\n )\n return evnts\n }, [] as UnstakeEvent[])\n}\n\nfunction getActivityEvents(\n events:\n | SubgraphTradeEvent[]\n | SubgraphCloseWithSwapEvent[]\n | SubgraphLiquidateEvent[]\n | SubgraphDepositCollateralEvent[]\n | SubgraphWithdrawCollateralEvent[]\n | SubgraphCloseWithDepositEvent[]\n | SubgraphBorrowEvent[]\n | SubgraphMintEvent[]\n | SubgraphBurnEvent[]\n | SubgraphStakeEvent[]\n | SubgraphUnstakeEvent[],\n chainId: ChainId,\n type: ProtocolEvent\n) {\n switch (type) {\n case 'protocolTradeEvent':\n return getTradeEvents(events as SubgraphTradeEvent[], chainId)\n case 'protocolCloseWithSwapEvent':\n return getCloseWithSwapEvents(events as SubgraphCloseWithSwapEvent[], chainId)\n case 'protocolLiquidateEvent':\n return getLiquidationEvents(events as SubgraphLiquidateEvent[], chainId)\n case 'protocolDepositCollateralEvent':\n return getDepositCollateralEvents(events as SubgraphDepositCollateralEvent[], chainId)\n case 'protocolWithdrawCollateralEvent':\n return getWithdrawCollateralEvents(events as SubgraphWithdrawCollateralEvent[], chainId)\n case 'protocolCloseWithDepositEvent':\n return getCloseWithDepositEvents(events as SubgraphCloseWithDepositEvent[], chainId)\n case 'protocolBorrowEvent':\n return getBorrowEvents(events as SubgraphBorrowEvent[], chainId)\n case 'mintEvent':\n return getMintEvents(events as SubgraphMintEvent[], chainId)\n case 'burnEvent':\n return getBurnEvents(events as SubgraphBurnEvent[], chainId)\n case 'stakingStakeEvent':\n return getStakeEvents(events as SubgraphStakeEvent[])\n case 'stakingUnstakeEvent':\n return getUnstakeEvents(events as SubgraphUnstakeEvent[])\n }\n\n return []\n}\n\nfunction getTradeHistoryEvents(\n events:\n | SubgraphTradeEvent[]\n | SubgraphCloseWithSwapEvent[]\n | SubgraphCloseWithDepositEvent[]\n | SubgraphRolloverEvent[]\n | SubgraphLiquidateEvent[]\n | SubgraphDepositCollateralEvent[]\n | SubgraphWithdrawCollateralEvent[]\n | SubgraphEarnRewardEvent[]\n | SubgraphPayTradingFeeEvent[],\n chainId: ChainId,\n type: ProtocolEvent\n) {\n switch (type) {\n case 'protocolTradeEvent':\n return getTradeEvents(events as SubgraphTradeEvent[], chainId)\n case 'protocolCloseWithSwapEvent':\n return getCloseWithSwapEvents(events as SubgraphCloseWithSwapEvent[], chainId)\n case 'protocolRolloverEvent':\n return getRolloverEvents(events as SubgraphRolloverEvent[], chainId)\n case 'protocolLiquidateEvent':\n return getLiquidationEvents(events as SubgraphLiquidateEvent[], chainId)\n case 'protocolDepositCollateralEvent':\n return getDepositCollateralEvents(events as SubgraphDepositCollateralEvent[], chainId)\n case 'protocolWithdrawCollateralEvent':\n return getWithdrawCollateralEvents(events as SubgraphWithdrawCollateralEvent[], chainId)\n case 'protocolEarnRewardEvent':\n return getEarnRewardEvents(events as SubgraphEarnRewardEvent[], chainId)\n case 'protocolPayTradingFeeEvent':\n return getPayTradingFeeEvents(events as SubgraphPayTradingFeeEvent[], chainId)\n }\n\n return []\n}\n\nasync function getChainHistory(\n chainId: ChainId,\n account?: string,\n opts?: { oldGraph: boolean; monthCount?: number }\n) {\n const history = activityEvents\n const query = `{ ${history.reduce((result, type) => {\n result = `${result && `${result}, `}${getEventsQuery(type, account, opts)}`\n\n return result\n }, ``)}\n}`\n const resp = await bzxApi.subgraphFetch(query, chainId, opts)\n if (!resp) {\n throw new Error('subgraph request failed')\n }\n\n return history.reduce((result, type) => {\n const events: Array = getActivityEvents(\n resp.data.data[`${type}s`],\n chainId,\n type\n )\n if (!events) {\n return result\n }\n result = events.concat(result)\n return result\n }, [] as ActivityEvent[])\n}\n\nasync function getTradeHistory(\n chainId: ChainId,\n account?: string,\n opts?: { oldGraph: boolean; allNetworks: boolean; monthCount?: number }\n) {\n const query = `\n { ${tradeHistoryEvents.reduce((result, type) => {\n result = `${result && `${result}, `}${getEventsQuery(type, account, opts)}`\n return result\n }, ``)}\n}`\n\n const resp = await bzxApi.subgraphFetch(query, chainId, opts)\n if (!resp) {\n throw new Error('subgraph request failed')\n }\n\n return tradeHistoryEvents.reduce((result, type) => {\n const events: Array = getTradeHistoryEvents(\n resp.data.data[`${type}s`],\n chainId,\n type\n )\n if (!events) {\n return result\n }\n result = events.concat(result)\n return result\n }, [] as TradeHistoryEvent[])\n}\n\nasync function getTradeLoans(chainId: ChainId, loanIds: string[]) {\n const query = `\n{ ${getLoanEventsQuery('protocolTradeEvent', loanIds)}}\n}`\n const resp = await bzxApi.subgraphFetch(query, chainId)\n\n if (!resp) {\n throw new Error('subgraph request failed')\n }\n\n return resp.data.data['protocolTradeEvents'].map((event: BaseEvent) => event.loan.id)\n}\n\nexport default {\n getTradeLoans,\n getChainHistory,\n getTradeHistory,\n}\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n SubscriptionManager,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n LogWithDecodedArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\nexport type BZRXVestingTokenEventArgs =\n | BZRXVestingTokenApprovalEventArgs\n | BZRXVestingTokenClaimEventArgs\n | BZRXVestingTokenOwnershipTransferredEventArgs\n | BZRXVestingTokenTransferEventArgs\n\nexport enum BZRXVestingTokenEvents {\n Approval = 'Approval',\n Claim = 'Claim',\n OwnershipTransferred = 'OwnershipTransferred',\n Transfer = 'Transfer',\n}\n\nexport interface BZRXVestingTokenApprovalEventArgs extends DecodedLogArgs {\n owner: string\n spender: string\n value: BigNumber\n}\n\nexport interface BZRXVestingTokenClaimEventArgs extends DecodedLogArgs {\n owner: string\n value: BigNumber\n}\n\nexport interface BZRXVestingTokenOwnershipTransferredEventArgs extends DecodedLogArgs {\n previousOwner: string\n newOwner: string\n}\n\nexport interface BZRXVestingTokenTransferEventArgs extends DecodedLogArgs {\n from: string\n to: string\n value: BigNumber\n}\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class BZRXVestingTokenContract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'BZRXVestingToken'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n private readonly _subscriptionManager: SubscriptionManager<\n BZRXVestingTokenEventArgs,\n BZRXVestingTokenEvents\n >\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return BZRXVestingTokenContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await BZRXVestingTokenContract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return BZRXVestingTokenContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`BZRXVestingToken successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new BZRXVestingTokenContract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n anonymous: false,\n inputs: [\n {\n name: 'owner',\n type: 'address',\n indexed: true,\n },\n {\n name: 'spender',\n type: 'address',\n indexed: true,\n },\n {\n name: 'value',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Approval',\n outputs: [],\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n name: 'owner',\n type: 'address',\n indexed: true,\n },\n {\n name: 'value',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Claim',\n outputs: [],\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n name: 'previousOwner',\n type: 'address',\n indexed: true,\n },\n {\n name: 'newOwner',\n type: 'address',\n indexed: true,\n },\n ],\n name: 'OwnershipTransferred',\n outputs: [],\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n name: 'from',\n type: 'address',\n indexed: true,\n },\n {\n name: 'to',\n type: 'address',\n indexed: true,\n },\n {\n name: 'value',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Transfer',\n outputs: [],\n type: 'event',\n },\n {\n constant: true,\n inputs: [],\n name: 'BZRX',\n outputs: [\n {\n name: '',\n type: 'address',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n {\n name: '_spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_spender',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n {\n name: '_blockNumber',\n type: 'uint256',\n },\n ],\n name: 'balanceOfAt',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [],\n name: 'burn',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [],\n name: 'claim',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n ],\n name: 'claimedBalanceOf',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'cliffDuration',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n name: '',\n type: 'uint8',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [],\n name: 'initialize',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'isOwner',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'name',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'owner',\n outputs: [\n {\n name: '',\n type: 'address',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_receiver',\n type: 'address',\n },\n {\n name: '_amount',\n type: 'uint256',\n },\n ],\n name: 'rescue',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalClaimed',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_blockNumber',\n type: 'uint256',\n },\n ],\n name: 'totalSupplyAt',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalUnclaimed',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalVested',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_to',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_from',\n type: 'address',\n },\n {\n name: '_to',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n ],\n name: 'vestedBalanceOf',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n ],\n name: 'vestingBalanceOf',\n outputs: [\n {\n name: 'balance',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'vestingCliffTimestamp',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'vestingDuration',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'vestingEndTimestamp',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'vestingLastClaimTimestamp',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'vestingStartTimestamp',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await BZRXVestingTokenContract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = BZRXVestingTokenContract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as BZRXVestingTokenContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as BZRXVestingTokenContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as BZRXVestingTokenContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public BZRX(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'BZRX()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public allowance(_owner: string, _spender: string): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n assert.isString('_owner', _owner)\n assert.isString('_spender', _spender)\n const functionSignature = 'allowance(address,address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n _owner.toLowerCase(),\n _spender.toLowerCase(),\n ])\n },\n }\n }\n public approve(_spender: string, _value: BigNumber): ContractTxFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n assert.isString('_spender', _spender)\n assert.isBigNumber('_value', _value)\n const functionSignature = 'approve(address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [_spender.toLowerCase(), _value])\n },\n }\n }\n public balanceOf(_owner: string): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n assert.isString('_owner', _owner)\n const functionSignature = 'balanceOf(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [_owner.toLowerCase()])\n },\n }\n }\n public balanceOfAt(_owner: string, _blockNumber: BigNumber): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n assert.isString('_owner', _owner)\n assert.isBigNumber('_blockNumber', _blockNumber)\n const functionSignature = 'balanceOfAt(address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [_owner.toLowerCase(), _blockNumber])\n },\n }\n }\n public burn(): ContractTxFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'burn()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public claim(): ContractTxFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'claim()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public claimedBalanceOf(_owner: string): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n assert.isString('_owner', _owner)\n const functionSignature = 'claimedBalanceOf(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [_owner.toLowerCase()])\n },\n }\n }\n public cliffDuration(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'cliffDuration()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public decimals(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'decimals()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public initialize(): ContractTxFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'initialize()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public isOwner(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'isOwner()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public name(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'name()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public owner(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'owner()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public rescue(_receiver: string, _amount: BigNumber): ContractTxFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n assert.isString('_receiver', _receiver)\n assert.isBigNumber('_amount', _amount)\n const functionSignature = 'rescue(address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [_receiver.toLowerCase(), _amount])\n },\n }\n }\n public symbol(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'symbol()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public totalClaimed(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'totalClaimed()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public totalSupply(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'totalSupply()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public totalSupplyAt(_blockNumber: BigNumber): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n assert.isBigNumber('_blockNumber', _blockNumber)\n const functionSignature = 'totalSupplyAt(uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [_blockNumber])\n },\n }\n }\n public totalUnclaimed(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'totalUnclaimed()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public totalVested(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'totalVested()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public transfer(_to: string, _value: BigNumber): ContractTxFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n assert.isString('_to', _to)\n assert.isBigNumber('_value', _value)\n const functionSignature = 'transfer(address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [_to.toLowerCase(), _value])\n },\n }\n }\n public transferFrom(\n _from: string,\n _to: string,\n _value: BigNumber\n ): ContractTxFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n assert.isString('_from', _from)\n assert.isString('_to', _to)\n assert.isBigNumber('_value', _value)\n const functionSignature = 'transferFrom(address,address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n _from.toLowerCase(),\n _to.toLowerCase(),\n _value,\n ])\n },\n }\n }\n public transferOwnership(newOwner: string): ContractTxFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n assert.isString('newOwner', newOwner)\n const functionSignature = 'transferOwnership(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [newOwner.toLowerCase()])\n },\n }\n }\n public vestedBalanceOf(_owner: string): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n assert.isString('_owner', _owner)\n const functionSignature = 'vestedBalanceOf(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [_owner.toLowerCase()])\n },\n }\n }\n public vestingBalanceOf(_owner: string): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n assert.isString('_owner', _owner)\n const functionSignature = 'vestingBalanceOf(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [_owner.toLowerCase()])\n },\n }\n }\n public vestingCliffTimestamp(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'vestingCliffTimestamp()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public vestingDuration(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'vestingDuration()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public vestingEndTimestamp(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'vestingEndTimestamp()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public vestingLastClaimTimestamp(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'vestingLastClaimTimestamp()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public vestingStartTimestamp(): ContractFunctionObj {\n const self = this as any as BZRXVestingTokenContract\n const functionSignature = 'vestingStartTimestamp()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n\n /**\n * Subscribe to an event type emitted by the BZRXVestingToken contract.\n * @param eventName The BZRXVestingToken contract event you would like to subscribe to.\n * @param indexFilterValues An object where the keys are indexed args returned by the event and\n * the value is the value you are interested in. E.g `{maker: aUserAddressHex}`\n * @param callback Callback that gets called when a log is added/removed\n * @param isVerbose Enable verbose subscription warnings (e.g recoverable network issues encountered)\n * @return Subscription token used later to unsubscribe\n */\n public subscribe(\n eventName: BZRXVestingTokenEvents,\n indexFilterValues: IndexedFilterValues,\n callback: EventCallback,\n isVerbose: boolean = false,\n blockPollingIntervalMs?: number\n ): string {\n assert.doesBelongToStringEnum('eventName', eventName, BZRXVestingTokenEvents)\n assert.doesConformToSchema(\n 'indexFilterValues',\n indexFilterValues,\n schemas.indexFilterValuesSchema\n )\n assert.isFunction('callback', callback)\n const subscriptionToken = this._subscriptionManager.subscribe(\n this.address,\n eventName,\n indexFilterValues,\n BZRXVestingTokenContract.ABI(),\n callback,\n isVerbose,\n blockPollingIntervalMs\n )\n return subscriptionToken\n }\n\n /**\n * Cancel a subscription\n * @param subscriptionToken Subscription token returned by `subscribe()`\n */\n public unsubscribe(subscriptionToken: string): void {\n this._subscriptionManager.unsubscribe(subscriptionToken)\n }\n\n /**\n * Cancels all existing subscriptions\n */\n public unsubscribeAll(): void {\n this._subscriptionManager.unsubscribeAll()\n }\n\n /**\n * Gets historical logs without creating a subscription\n * @param eventName The BZRXVestingToken contract event you would like to subscribe to.\n * @param blockRange Block range to get logs from.\n * @param indexFilterValues An object where the keys are indexed args returned by the event and\n * the value is the value you are interested in. E.g `{_from: aUserAddressHex}`\n * @return Array of logs that match the parameters\n */\n public async getLogsAsync(\n eventName: BZRXVestingTokenEvents,\n blockRange: BlockRange,\n indexFilterValues: IndexedFilterValues\n ): Promise>> {\n assert.doesBelongToStringEnum('eventName', eventName, BZRXVestingTokenEvents)\n assert.doesConformToSchema('blockRange', blockRange, schemas.blockRangeSchema)\n assert.doesConformToSchema(\n 'indexFilterValues',\n indexFilterValues,\n schemas.indexFilterValuesSchema\n )\n const logs = await this._subscriptionManager.getLogsAsync(\n this.address,\n eventName,\n blockRange,\n indexFilterValues,\n BZRXVestingTokenContract.ABI()\n )\n return logs\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = BZRXVestingTokenContract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'BZRXVestingToken',\n BZRXVestingTokenContract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n this._subscriptionManager = new SubscriptionManager<\n BZRXVestingTokenEventArgs,\n BZRXVestingTokenEvents\n >(BZRXVestingTokenContract.ABI(), this._web3Wrapper)\n BZRXVestingTokenContract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n SubscriptionManager,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n LogWithDecodedArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\nexport type BzxEventArgs = BzxBorrowEventArgs | BzxCloseWithDepositEventArgs\n\nexport enum BzxEvents {\n Borrow = 'Borrow',\n CloseWithDeposit = 'CloseWithDeposit',\n}\n\nexport interface BzxBorrowEventArgs extends DecodedLogArgs {\n user: string\n lender: string\n loanId: string\n loanToken: string\n collateralToken: string\n newPrincipal: BigNumber\n newCollateral: BigNumber\n interestRate: BigNumber\n interestDuration: BigNumber\n collateralToLoanRate: BigNumber\n currentMargin: BigNumber\n}\n\nexport interface BzxCloseWithDepositEventArgs extends DecodedLogArgs {\n user: string\n lender: string\n loanId: string\n closer: string\n loanToken: string\n collateralToken: string\n repayAmount: BigNumber\n collateralWithdrawAmount: BigNumber\n collateralToLoanRate: BigNumber\n currentMargin: BigNumber\n}\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class BzxContract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'Bzx'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n private readonly _subscriptionManager: SubscriptionManager\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return BzxContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await BzxContract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return BzxContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`Bzx successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new BzxContract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n inputs: [\n {\n name: 'loanToken',\n type: 'address',\n },\n {\n name: 'collateralToken',\n type: 'address',\n },\n {\n name: 'isTorqueLoan',\n type: 'bool',\n },\n ],\n name: 'getDefaultLoanParams',\n outputs: [\n {\n name: 'loanParamsLocal',\n type: 'tuple',\n components: [\n {\n name: 'id',\n type: 'bytes32',\n },\n {\n name: 'active',\n type: 'bool',\n },\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'loanToken',\n type: 'address',\n },\n {\n name: 'collateralToken',\n type: 'address',\n },\n {\n name: 'minInitialMargin',\n type: 'uint256',\n },\n {\n name: 'maintenanceMargin',\n type: 'uint256',\n },\n {\n name: 'maxLoanTerm',\n type: 'uint256',\n },\n ],\n },\n {\n name: 'isDefault',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n anonymous: false,\n inputs: [\n {\n name: 'user',\n type: 'address',\n indexed: true,\n },\n {\n name: 'lender',\n type: 'address',\n indexed: true,\n },\n {\n name: 'loanId',\n type: 'bytes32',\n indexed: true,\n },\n {\n name: 'loanToken',\n type: 'address',\n indexed: false,\n },\n {\n name: 'collateralToken',\n type: 'address',\n indexed: false,\n },\n {\n name: 'newPrincipal',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'newCollateral',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'interestRate',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'interestDuration',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'collateralToLoanRate',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'currentMargin',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Borrow',\n outputs: [],\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n name: 'user',\n type: 'address',\n indexed: true,\n },\n {\n name: 'lender',\n type: 'address',\n indexed: true,\n },\n {\n name: 'loanId',\n type: 'bytes32',\n indexed: true,\n },\n {\n name: 'closer',\n type: 'address',\n indexed: false,\n },\n {\n name: 'loanToken',\n type: 'address',\n indexed: false,\n },\n {\n name: 'collateralToken',\n type: 'address',\n indexed: false,\n },\n {\n name: 'repayAmount',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'collateralWithdrawAmount',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'collateralToLoanRate',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'currentMargin',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'CloseWithDeposit',\n outputs: [],\n type: 'event',\n },\n {\n inputs: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'depositAmount',\n type: 'uint256',\n },\n {\n name: 'loanDataBytes',\n type: 'bytes',\n },\n ],\n name: 'closeWithDeposit',\n outputs: [\n {\n name: 'loanCloseAmount',\n type: 'uint256',\n },\n {\n name: 'withdrawAmount',\n type: 'uint256',\n },\n {\n name: 'withdrawToken',\n type: 'address',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'swapAmount',\n type: 'uint256',\n },\n {\n name: 'returnTokenIsCollateral',\n type: 'bool',\n },\n {\n name: 'loanDataBytes',\n type: 'bytes',\n },\n ],\n name: 'closeWithSwap',\n outputs: [\n {\n name: 'loanCloseAmount',\n type: 'uint256',\n },\n {\n name: 'withdrawAmount',\n type: 'uint256',\n },\n {\n name: 'withdrawToken',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n {\n name: 'depositAmount',\n type: 'uint256',\n },\n ],\n name: 'depositCollateral',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'start',\n type: 'uint256',\n },\n {\n name: 'count',\n type: 'uint256',\n },\n {\n name: 'unsafeOnly',\n type: 'bool',\n },\n ],\n name: 'getActiveLoans',\n outputs: [\n {\n name: 'loansData',\n type: 'tuple[]',\n components: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n {\n name: 'endTimestamp',\n type: 'uint96',\n },\n {\n name: 'loanToken',\n type: 'address',\n },\n {\n name: 'collateralToken',\n type: 'address',\n },\n {\n name: 'principal',\n type: 'uint256',\n },\n {\n name: 'collateral',\n type: 'uint256',\n },\n {\n name: 'interestOwedPerDay',\n type: 'uint256',\n },\n {\n name: 'interestDepositRemaining',\n type: 'uint256',\n },\n {\n name: 'startRate',\n type: 'uint256',\n },\n {\n name: 'startMargin',\n type: 'uint256',\n },\n {\n name: 'maintenanceMargin',\n type: 'uint256',\n },\n {\n name: 'currentMargin',\n type: 'uint256',\n },\n {\n name: 'maxLoanTerm',\n type: 'uint256',\n },\n {\n name: 'maxLiquidatable',\n type: 'uint256',\n },\n {\n name: 'maxSeizable',\n type: 'uint256',\n },\n {\n name: 'depositValueAsLoanToken',\n type: 'uint256',\n },\n {\n name: 'depositValueAsCollateralToken',\n type: 'uint256',\n },\n ],\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n ],\n name: 'getLoan',\n outputs: [\n {\n name: 'loanData',\n type: 'tuple',\n components: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n {\n name: 'endTimestamp',\n type: 'uint96',\n },\n {\n name: 'loanToken',\n type: 'address',\n },\n {\n name: 'collateralToken',\n type: 'address',\n },\n {\n name: 'principal',\n type: 'uint256',\n },\n {\n name: 'collateral',\n type: 'uint256',\n },\n {\n name: 'interestOwedPerDay',\n type: 'uint256',\n },\n {\n name: 'interestDepositRemaining',\n type: 'uint256',\n },\n {\n name: 'startRate',\n type: 'uint256',\n },\n {\n name: 'startMargin',\n type: 'uint256',\n },\n {\n name: 'maintenanceMargin',\n type: 'uint256',\n },\n {\n name: 'currentMargin',\n type: 'uint256',\n },\n {\n name: 'maxLoanTerm',\n type: 'uint256',\n },\n {\n name: 'maxLiquidatable',\n type: 'uint256',\n },\n {\n name: 'maxSeizable',\n type: 'uint256',\n },\n {\n name: 'depositValueAsLoanToken',\n type: 'uint256',\n },\n {\n name: 'depositValueAsCollateralToken',\n type: 'uint256',\n },\n ],\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'trader',\n type: 'address',\n },\n {\n name: 'sourceToken',\n type: 'address',\n },\n {\n name: 'destToken',\n type: 'address',\n },\n {\n name: 'tokenAmount',\n type: 'uint256',\n },\n {\n name: 'payload',\n type: 'bytes',\n },\n {\n name: 'isAmountIn',\n type: 'bool',\n },\n ],\n name: 'getSwapExpectedReturn',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'user',\n type: 'address',\n },\n {\n name: 'start',\n type: 'uint256',\n },\n {\n name: 'count',\n type: 'uint256',\n },\n {\n name: 'loanType',\n type: 'uint8',\n },\n {\n name: 'isLender',\n type: 'bool',\n },\n {\n name: 'unsafeOnly',\n type: 'bool',\n },\n ],\n name: 'getUserLoans',\n outputs: [\n {\n name: 'loansData',\n type: 'tuple[]',\n components: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n {\n name: 'endTimestamp',\n type: 'uint96',\n },\n {\n name: 'loanToken',\n type: 'address',\n },\n {\n name: 'collateralToken',\n type: 'address',\n },\n {\n name: 'principal',\n type: 'uint256',\n },\n {\n name: 'collateral',\n type: 'uint256',\n },\n {\n name: 'interestOwedPerDay',\n type: 'uint256',\n },\n {\n name: 'interestDepositRemaining',\n type: 'uint256',\n },\n {\n name: 'startRate',\n type: 'uint256',\n },\n {\n name: 'startMargin',\n type: 'uint256',\n },\n {\n name: 'maintenanceMargin',\n type: 'uint256',\n },\n {\n name: 'currentMargin',\n type: 'uint256',\n },\n {\n name: 'maxLoanTerm',\n type: 'uint256',\n },\n {\n name: 'maxLiquidatable',\n type: 'uint256',\n },\n {\n name: 'maxSeizable',\n type: 'uint256',\n },\n {\n name: 'depositValueAsLoanToken',\n type: 'uint256',\n },\n {\n name: 'depositValueAsCollateralToken',\n type: 'uint256',\n },\n ],\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'closeAmount',\n type: 'uint256',\n },\n ],\n name: 'liquidate',\n outputs: [\n {\n name: 'loanCloseAmount',\n type: 'uint256',\n },\n {\n name: 'seizedAmount',\n type: 'uint256',\n },\n {\n name: 'seizedToken',\n type: 'address',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'index_0',\n type: 'bytes32',\n },\n ],\n name: 'loanParams',\n outputs: [\n {\n name: '',\n type: 'tuple',\n components: [\n {\n name: 'id',\n type: 'bytes32',\n },\n {\n name: 'active',\n type: 'bool',\n },\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'loanToken',\n type: 'address',\n },\n {\n name: 'collateralToken',\n type: 'address',\n },\n {\n name: 'minInitialMargin',\n type: 'uint256',\n },\n {\n name: 'maintenanceMargin',\n type: 'uint256',\n },\n {\n name: 'maxLoanTerm',\n type: 'uint256',\n },\n ],\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'withdrawAmount',\n type: 'uint256',\n },\n ],\n name: 'withdrawCollateral',\n outputs: [\n {\n name: 'actualWithdrawAmount',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await BzxContract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = BzxContract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as BzxContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as BzxContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as BzxContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public getDefaultLoanParams(\n loanToken: string,\n collateralToken: string,\n isTorqueLoan: boolean\n ): ContractTxFunctionObj<\n [\n {\n id: string\n active: boolean\n owner: string\n loanToken: string\n collateralToken: string\n minInitialMargin: BigNumber\n maintenanceMargin: BigNumber\n maxLoanTerm: BigNumber\n },\n boolean\n ]\n > {\n const self = this as any as BzxContract\n assert.isString('loanToken', loanToken)\n assert.isString('collateralToken', collateralToken)\n assert.isBoolean('isTorqueLoan', isTorqueLoan)\n const functionSignature = 'getDefaultLoanParams(address,address,bool)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<\n [\n {\n id: string\n active: boolean\n owner: string\n loanToken: string\n collateralToken: string\n minInitialMargin: BigNumber\n maintenanceMargin: BigNumber\n maxLoanTerm: BigNumber\n },\n boolean\n ]\n > {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<\n [\n {\n id: string\n active: boolean\n owner: string\n loanToken: string\n collateralToken: string\n minInitialMargin: BigNumber\n maintenanceMargin: BigNumber\n maxLoanTerm: BigNumber\n },\n boolean\n ]\n >(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n loanToken.toLowerCase(),\n collateralToken.toLowerCase(),\n isTorqueLoan,\n ])\n },\n }\n }\n public closeWithDeposit(\n loanId: string,\n receiver: string,\n depositAmount: BigNumber,\n loanDataBytes: string\n ): ContractTxFunctionObj<[BigNumber, BigNumber, string]> {\n const self = this as any as BzxContract\n assert.isString('loanId', loanId)\n assert.isString('receiver', receiver)\n assert.isBigNumber('depositAmount', depositAmount)\n assert.isString('loanDataBytes', loanDataBytes)\n const functionSignature = 'closeWithDeposit(bytes32,address,uint256,bytes)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<[BigNumber, BigNumber, string]> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<[BigNumber, BigNumber, string]>(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n loanId,\n receiver.toLowerCase(),\n depositAmount,\n loanDataBytes,\n ])\n },\n }\n }\n public closeWithSwap(\n loanId: string,\n receiver: string,\n swapAmount: BigNumber,\n returnTokenIsCollateral: boolean,\n loanDataBytes: string\n ): ContractTxFunctionObj<[BigNumber, BigNumber, string]> {\n const self = this as any as BzxContract\n assert.isString('loanId', loanId)\n assert.isString('receiver', receiver)\n assert.isBigNumber('swapAmount', swapAmount)\n assert.isBoolean('returnTokenIsCollateral', returnTokenIsCollateral)\n assert.isString('loanDataBytes', loanDataBytes)\n const functionSignature = 'closeWithSwap(bytes32,address,uint256,bool,bytes)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<[BigNumber, BigNumber, string]> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<[BigNumber, BigNumber, string]>(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n loanId,\n receiver.toLowerCase(),\n swapAmount,\n returnTokenIsCollateral,\n loanDataBytes,\n ])\n },\n }\n }\n public depositCollateral(loanId: string, depositAmount: BigNumber): ContractTxFunctionObj {\n const self = this as any as BzxContract\n assert.isString('loanId', loanId)\n assert.isBigNumber('depositAmount', depositAmount)\n const functionSignature = 'depositCollateral(bytes32,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [loanId, depositAmount])\n },\n }\n }\n public getActiveLoans(\n start: BigNumber,\n count: BigNumber,\n unsafeOnly: boolean\n ): ContractTxFunctionObj<\n Array<{\n loanId: string\n endTimestamp: BigNumber\n loanToken: string\n collateralToken: string\n principal: BigNumber\n collateral: BigNumber\n interestOwedPerDay: BigNumber\n interestDepositRemaining: BigNumber\n startRate: BigNumber\n startMargin: BigNumber\n maintenanceMargin: BigNumber\n currentMargin: BigNumber\n maxLoanTerm: BigNumber\n maxLiquidatable: BigNumber\n maxSeizable: BigNumber\n depositValueAsLoanToken: BigNumber\n depositValueAsCollateralToken: BigNumber\n }>\n > {\n const self = this as any as BzxContract\n assert.isBigNumber('start', start)\n assert.isBigNumber('count', count)\n assert.isBoolean('unsafeOnly', unsafeOnly)\n const functionSignature = 'getActiveLoans(uint256,uint256,bool)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<\n Array<{\n loanId: string\n endTimestamp: BigNumber\n loanToken: string\n collateralToken: string\n principal: BigNumber\n collateral: BigNumber\n interestOwedPerDay: BigNumber\n interestDepositRemaining: BigNumber\n startRate: BigNumber\n startMargin: BigNumber\n maintenanceMargin: BigNumber\n currentMargin: BigNumber\n maxLoanTerm: BigNumber\n maxLiquidatable: BigNumber\n maxSeizable: BigNumber\n depositValueAsLoanToken: BigNumber\n depositValueAsCollateralToken: BigNumber\n }>\n > {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<\n Array<{\n loanId: string\n endTimestamp: BigNumber\n loanToken: string\n collateralToken: string\n principal: BigNumber\n collateral: BigNumber\n interestOwedPerDay: BigNumber\n interestDepositRemaining: BigNumber\n startRate: BigNumber\n startMargin: BigNumber\n maintenanceMargin: BigNumber\n currentMargin: BigNumber\n maxLoanTerm: BigNumber\n maxLiquidatable: BigNumber\n maxSeizable: BigNumber\n depositValueAsLoanToken: BigNumber\n depositValueAsCollateralToken: BigNumber\n }>\n >(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [start, count, unsafeOnly])\n },\n }\n }\n public getLoan(\n loanId: string\n ): ContractTxFunctionObj<{\n loanId: string\n endTimestamp: BigNumber\n loanToken: string\n collateralToken: string\n principal: BigNumber\n collateral: BigNumber\n interestOwedPerDay: BigNumber\n interestDepositRemaining: BigNumber\n startRate: BigNumber\n startMargin: BigNumber\n maintenanceMargin: BigNumber\n currentMargin: BigNumber\n maxLoanTerm: BigNumber\n maxLiquidatable: BigNumber\n maxSeizable: BigNumber\n depositValueAsLoanToken: BigNumber\n depositValueAsCollateralToken: BigNumber\n }> {\n const self = this as any as BzxContract\n assert.isString('loanId', loanId)\n const functionSignature = 'getLoan(bytes32)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<{\n loanId: string\n endTimestamp: BigNumber\n loanToken: string\n collateralToken: string\n principal: BigNumber\n collateral: BigNumber\n interestOwedPerDay: BigNumber\n interestDepositRemaining: BigNumber\n startRate: BigNumber\n startMargin: BigNumber\n maintenanceMargin: BigNumber\n currentMargin: BigNumber\n maxLoanTerm: BigNumber\n maxLiquidatable: BigNumber\n maxSeizable: BigNumber\n depositValueAsLoanToken: BigNumber\n depositValueAsCollateralToken: BigNumber\n }> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<{\n loanId: string\n endTimestamp: BigNumber\n loanToken: string\n collateralToken: string\n principal: BigNumber\n collateral: BigNumber\n interestOwedPerDay: BigNumber\n interestDepositRemaining: BigNumber\n startRate: BigNumber\n startMargin: BigNumber\n maintenanceMargin: BigNumber\n currentMargin: BigNumber\n maxLoanTerm: BigNumber\n maxLiquidatable: BigNumber\n maxSeizable: BigNumber\n depositValueAsLoanToken: BigNumber\n depositValueAsCollateralToken: BigNumber\n }>(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [loanId])\n },\n }\n }\n public getSwapExpectedReturn(\n trader: string,\n sourceToken: string,\n destToken: string,\n tokenAmount: BigNumber,\n payload: string,\n isAmountIn: boolean\n ): ContractTxFunctionObj {\n const self = this as any as BzxContract\n assert.isString('trader', trader)\n assert.isString('sourceToken', sourceToken)\n assert.isString('destToken', destToken)\n assert.isBigNumber('tokenAmount', tokenAmount)\n assert.isString('payload', payload)\n assert.isBoolean('isAmountIn', isAmountIn)\n const functionSignature = 'getSwapExpectedReturn(address,address,address,uint256,bytes,bool)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n trader.toLowerCase(),\n sourceToken.toLowerCase(),\n destToken.toLowerCase(),\n tokenAmount,\n payload,\n isAmountIn,\n ])\n },\n }\n }\n public getUserLoans(\n user: string,\n start: BigNumber,\n count: BigNumber,\n loanType: number | BigNumber,\n isLender: boolean,\n unsafeOnly: boolean\n ): ContractTxFunctionObj<\n Array<{\n loanId: string\n endTimestamp: BigNumber\n loanToken: string\n collateralToken: string\n principal: BigNumber\n collateral: BigNumber\n interestOwedPerDay: BigNumber\n interestDepositRemaining: BigNumber\n startRate: BigNumber\n startMargin: BigNumber\n maintenanceMargin: BigNumber\n currentMargin: BigNumber\n maxLoanTerm: BigNumber\n maxLiquidatable: BigNumber\n maxSeizable: BigNumber\n depositValueAsLoanToken: BigNumber\n depositValueAsCollateralToken: BigNumber\n }>\n > {\n const self = this as any as BzxContract\n assert.isString('user', user)\n assert.isBigNumber('start', start)\n assert.isBigNumber('count', count)\n assert.isNumberOrBigNumber('loanType', loanType)\n assert.isBoolean('isLender', isLender)\n assert.isBoolean('unsafeOnly', unsafeOnly)\n const functionSignature = 'getUserLoans(address,uint256,uint256,uint8,bool,bool)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<\n Array<{\n loanId: string\n endTimestamp: BigNumber\n loanToken: string\n collateralToken: string\n principal: BigNumber\n collateral: BigNumber\n interestOwedPerDay: BigNumber\n interestDepositRemaining: BigNumber\n startRate: BigNumber\n startMargin: BigNumber\n maintenanceMargin: BigNumber\n currentMargin: BigNumber\n maxLoanTerm: BigNumber\n maxLiquidatable: BigNumber\n maxSeizable: BigNumber\n depositValueAsLoanToken: BigNumber\n depositValueAsCollateralToken: BigNumber\n }>\n > {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<\n Array<{\n loanId: string\n endTimestamp: BigNumber\n loanToken: string\n collateralToken: string\n principal: BigNumber\n collateral: BigNumber\n interestOwedPerDay: BigNumber\n interestDepositRemaining: BigNumber\n startRate: BigNumber\n startMargin: BigNumber\n maintenanceMargin: BigNumber\n currentMargin: BigNumber\n maxLoanTerm: BigNumber\n maxLiquidatable: BigNumber\n maxSeizable: BigNumber\n depositValueAsLoanToken: BigNumber\n depositValueAsCollateralToken: BigNumber\n }>\n >(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n user.toLowerCase(),\n start,\n count,\n loanType,\n isLender,\n unsafeOnly,\n ])\n },\n }\n }\n public liquidate(\n loanId: string,\n receiver: string,\n closeAmount: BigNumber\n ): ContractTxFunctionObj<[BigNumber, BigNumber, string]> {\n const self = this as any as BzxContract\n assert.isString('loanId', loanId)\n assert.isString('receiver', receiver)\n assert.isBigNumber('closeAmount', closeAmount)\n const functionSignature = 'liquidate(bytes32,address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<[BigNumber, BigNumber, string]> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<[BigNumber, BigNumber, string]>(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n loanId,\n receiver.toLowerCase(),\n closeAmount,\n ])\n },\n }\n }\n public loanParams(\n index_0: string\n ): ContractTxFunctionObj<{\n id: string\n active: boolean\n owner: string\n loanToken: string\n collateralToken: string\n minInitialMargin: BigNumber\n maintenanceMargin: BigNumber\n maxLoanTerm: BigNumber\n }> {\n const self = this as any as BzxContract\n assert.isString('index_0', index_0)\n const functionSignature = 'loanParams(bytes32)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<{\n id: string\n active: boolean\n owner: string\n loanToken: string\n collateralToken: string\n minInitialMargin: BigNumber\n maintenanceMargin: BigNumber\n maxLoanTerm: BigNumber\n }> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<{\n id: string\n active: boolean\n owner: string\n loanToken: string\n collateralToken: string\n minInitialMargin: BigNumber\n maintenanceMargin: BigNumber\n maxLoanTerm: BigNumber\n }>(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [index_0])\n },\n }\n }\n public withdrawCollateral(\n loanId: string,\n receiver: string,\n withdrawAmount: BigNumber\n ): ContractTxFunctionObj {\n const self = this as any as BzxContract\n assert.isString('loanId', loanId)\n assert.isString('receiver', receiver)\n assert.isBigNumber('withdrawAmount', withdrawAmount)\n const functionSignature = 'withdrawCollateral(bytes32,address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n loanId,\n receiver.toLowerCase(),\n withdrawAmount,\n ])\n },\n }\n }\n\n /**\n * Subscribe to an event type emitted by the Bzx contract.\n * @param eventName The Bzx contract event you would like to subscribe to.\n * @param indexFilterValues An object where the keys are indexed args returned by the event and\n * the value is the value you are interested in. E.g `{maker: aUserAddressHex}`\n * @param callback Callback that gets called when a log is added/removed\n * @param isVerbose Enable verbose subscription warnings (e.g recoverable network issues encountered)\n * @return Subscription token used later to unsubscribe\n */\n public subscribe(\n eventName: BzxEvents,\n indexFilterValues: IndexedFilterValues,\n callback: EventCallback,\n isVerbose: boolean = false,\n blockPollingIntervalMs?: number\n ): string {\n assert.doesBelongToStringEnum('eventName', eventName, BzxEvents)\n assert.doesConformToSchema(\n 'indexFilterValues',\n indexFilterValues,\n schemas.indexFilterValuesSchema\n )\n assert.isFunction('callback', callback)\n const subscriptionToken = this._subscriptionManager.subscribe(\n this.address,\n eventName,\n indexFilterValues,\n BzxContract.ABI(),\n callback,\n isVerbose,\n blockPollingIntervalMs\n )\n return subscriptionToken\n }\n\n /**\n * Cancel a subscription\n * @param subscriptionToken Subscription token returned by `subscribe()`\n */\n public unsubscribe(subscriptionToken: string): void {\n this._subscriptionManager.unsubscribe(subscriptionToken)\n }\n\n /**\n * Cancels all existing subscriptions\n */\n public unsubscribeAll(): void {\n this._subscriptionManager.unsubscribeAll()\n }\n\n /**\n * Gets historical logs without creating a subscription\n * @param eventName The Bzx contract event you would like to subscribe to.\n * @param blockRange Block range to get logs from.\n * @param indexFilterValues An object where the keys are indexed args returned by the event and\n * the value is the value you are interested in. E.g `{_from: aUserAddressHex}`\n * @return Array of logs that match the parameters\n */\n public async getLogsAsync(\n eventName: BzxEvents,\n blockRange: BlockRange,\n indexFilterValues: IndexedFilterValues\n ): Promise>> {\n assert.doesBelongToStringEnum('eventName', eventName, BzxEvents)\n assert.doesConformToSchema('blockRange', blockRange, schemas.blockRangeSchema)\n assert.doesConformToSchema(\n 'indexFilterValues',\n indexFilterValues,\n schemas.indexFilterValuesSchema\n )\n const logs = await this._subscriptionManager.getLogsAsync(\n this.address,\n eventName,\n blockRange,\n indexFilterValues,\n BzxContract.ABI()\n )\n return logs\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = BzxContract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'Bzx',\n BzxContract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n this._subscriptionManager = new SubscriptionManager(\n BzxContract.ABI(),\n this._web3Wrapper\n )\n BzxContract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n SubscriptionManager,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n LogWithDecodedArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\nexport type erc20EventArgs = erc20ApprovalEventArgs | erc20TransferEventArgs\n\nexport enum erc20Events {\n Approval = 'Approval',\n Transfer = 'Transfer',\n}\n\nexport interface erc20ApprovalEventArgs extends DecodedLogArgs {\n owner: string\n spender: string\n value: BigNumber\n}\n\nexport interface erc20TransferEventArgs extends DecodedLogArgs {\n from: string\n to: string\n value: BigNumber\n}\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class erc20Contract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'erc20'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n private readonly _subscriptionManager: SubscriptionManager\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return erc20Contract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await erc20Contract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return erc20Contract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`erc20 successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new erc20Contract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n anonymous: false,\n inputs: [\n {\n name: 'owner',\n type: 'address',\n indexed: true,\n },\n {\n name: 'spender',\n type: 'address',\n indexed: true,\n },\n {\n name: 'value',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Approval',\n outputs: [],\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n name: 'from',\n type: 'address',\n indexed: true,\n },\n {\n name: 'to',\n type: 'address',\n indexed: true,\n },\n {\n name: 'value',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Transfer',\n outputs: [],\n type: 'event',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n {\n name: '_spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_spender',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_who',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n name: '',\n type: 'uint8',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'name',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_to',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_from',\n type: 'address',\n },\n {\n name: '_to',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await erc20Contract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = erc20Contract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as erc20Contract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as erc20Contract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as erc20Contract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public allowance(_owner: string, _spender: string): ContractFunctionObj {\n const self = this as any as erc20Contract\n assert.isString('_owner', _owner)\n assert.isString('_spender', _spender)\n const functionSignature = 'allowance(address,address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n _owner.toLowerCase(),\n _spender.toLowerCase(),\n ])\n },\n }\n }\n public approve(_spender: string, _value: BigNumber): ContractTxFunctionObj {\n const self = this as any as erc20Contract\n assert.isString('_spender', _spender)\n assert.isBigNumber('_value', _value)\n const functionSignature = 'approve(address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [_spender.toLowerCase(), _value])\n },\n }\n }\n public balanceOf(_who: string): ContractFunctionObj {\n const self = this as any as erc20Contract\n assert.isString('_who', _who)\n const functionSignature = 'balanceOf(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [_who.toLowerCase()])\n },\n }\n }\n public decimals(): ContractFunctionObj {\n const self = this as any as erc20Contract\n const functionSignature = 'decimals()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public name(): ContractFunctionObj {\n const self = this as any as erc20Contract\n const functionSignature = 'name()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public symbol(): ContractFunctionObj {\n const self = this as any as erc20Contract\n const functionSignature = 'symbol()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public totalSupply(): ContractFunctionObj {\n const self = this as any as erc20Contract\n const functionSignature = 'totalSupply()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public transfer(_to: string, _value: BigNumber): ContractTxFunctionObj {\n const self = this as any as erc20Contract\n assert.isString('_to', _to)\n assert.isBigNumber('_value', _value)\n const functionSignature = 'transfer(address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [_to.toLowerCase(), _value])\n },\n }\n }\n public transferFrom(\n _from: string,\n _to: string,\n _value: BigNumber\n ): ContractTxFunctionObj {\n const self = this as any as erc20Contract\n assert.isString('_from', _from)\n assert.isString('_to', _to)\n assert.isBigNumber('_value', _value)\n const functionSignature = 'transferFrom(address,address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n _from.toLowerCase(),\n _to.toLowerCase(),\n _value,\n ])\n },\n }\n }\n\n /**\n * Subscribe to an event type emitted by the erc20 contract.\n * @param eventName The erc20 contract event you would like to subscribe to.\n * @param indexFilterValues An object where the keys are indexed args returned by the event and\n * the value is the value you are interested in. E.g `{maker: aUserAddressHex}`\n * @param callback Callback that gets called when a log is added/removed\n * @param isVerbose Enable verbose subscription warnings (e.g recoverable network issues encountered)\n * @return Subscription token used later to unsubscribe\n */\n public subscribe(\n eventName: erc20Events,\n indexFilterValues: IndexedFilterValues,\n callback: EventCallback,\n isVerbose: boolean = false,\n blockPollingIntervalMs?: number\n ): string {\n assert.doesBelongToStringEnum('eventName', eventName, erc20Events)\n assert.doesConformToSchema(\n 'indexFilterValues',\n indexFilterValues,\n schemas.indexFilterValuesSchema\n )\n assert.isFunction('callback', callback)\n const subscriptionToken = this._subscriptionManager.subscribe(\n this.address,\n eventName,\n indexFilterValues,\n erc20Contract.ABI(),\n callback,\n isVerbose,\n blockPollingIntervalMs\n )\n return subscriptionToken\n }\n\n /**\n * Cancel a subscription\n * @param subscriptionToken Subscription token returned by `subscribe()`\n */\n public unsubscribe(subscriptionToken: string): void {\n this._subscriptionManager.unsubscribe(subscriptionToken)\n }\n\n /**\n * Cancels all existing subscriptions\n */\n public unsubscribeAll(): void {\n this._subscriptionManager.unsubscribeAll()\n }\n\n /**\n * Gets historical logs without creating a subscription\n * @param eventName The erc20 contract event you would like to subscribe to.\n * @param blockRange Block range to get logs from.\n * @param indexFilterValues An object where the keys are indexed args returned by the event and\n * the value is the value you are interested in. E.g `{_from: aUserAddressHex}`\n * @return Array of logs that match the parameters\n */\n public async getLogsAsync(\n eventName: erc20Events,\n blockRange: BlockRange,\n indexFilterValues: IndexedFilterValues\n ): Promise>> {\n assert.doesBelongToStringEnum('eventName', eventName, erc20Events)\n assert.doesConformToSchema('blockRange', blockRange, schemas.blockRangeSchema)\n assert.doesConformToSchema(\n 'indexFilterValues',\n indexFilterValues,\n schemas.indexFilterValuesSchema\n )\n const logs = await this._subscriptionManager.getLogsAsync(\n this.address,\n eventName,\n blockRange,\n indexFilterValues,\n erc20Contract.ABI()\n )\n return logs\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = erc20Contract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'erc20',\n erc20Contract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n this._subscriptionManager = new SubscriptionManager(\n erc20Contract.ABI(),\n this._web3Wrapper\n )\n erc20Contract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class FixedSwapTokenConverterContract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'FixedSwapTokenConverter'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return FixedSwapTokenConverterContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await FixedSwapTokenConverterContract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return FixedSwapTokenConverterContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`FixedSwapTokenConverter successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new FixedSwapTokenConverterContract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n inputs: [\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: '_tokens',\n type: 'address[]',\n },\n {\n name: '_amounts',\n type: 'uint256[]',\n },\n ],\n name: 'convert',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: '_tokenAmount',\n type: 'uint256',\n },\n ],\n name: 'convert',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await FixedSwapTokenConverterContract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = FixedSwapTokenConverterContract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as FixedSwapTokenConverterContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as FixedSwapTokenConverterContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as FixedSwapTokenConverterContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public convert1(\n receiver: string,\n _tokens: string[],\n _amounts: BigNumber[]\n ): ContractTxFunctionObj {\n const self = this as any as FixedSwapTokenConverterContract\n assert.isString('receiver', receiver)\n assert.isArray('_tokens', _tokens)\n assert.isArray('_amounts', _amounts)\n const functionSignature = 'convert(address,address[],uint256[])'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n receiver.toLowerCase(),\n _tokens,\n _amounts,\n ])\n },\n }\n }\n public convert2(receiver: string, _tokenAmount: BigNumber): ContractTxFunctionObj {\n const self = this as any as FixedSwapTokenConverterContract\n assert.isString('receiver', receiver)\n assert.isBigNumber('_tokenAmount', _tokenAmount)\n const functionSignature = 'convert(address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n receiver.toLowerCase(),\n _tokenAmount,\n ])\n },\n }\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = FixedSwapTokenConverterContract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'FixedSwapTokenConverter',\n FixedSwapTokenConverterContract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n FixedSwapTokenConverterContract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n SubscriptionManager,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n LogWithDecodedArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\nexport type HelperEventArgs = HelperOwnershipTransferredEventArgs\n\nexport enum HelperEvents {\n OwnershipTransferred = 'OwnershipTransferred',\n}\n\nexport interface HelperOwnershipTransferredEventArgs extends DecodedLogArgs {\n previousOwner: string\n newOwner: string\n}\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class HelperContract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'Helper'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n private readonly _subscriptionManager: SubscriptionManager\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return HelperContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await HelperContract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return HelperContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`Helper successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new HelperContract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n anonymous: false,\n inputs: [\n {\n name: 'previousOwner',\n type: 'address',\n indexed: true,\n },\n {\n name: 'newOwner',\n type: 'address',\n indexed: true,\n },\n ],\n name: 'OwnershipTransferred',\n outputs: [],\n type: 'event',\n },\n {\n inputs: [\n {\n name: 'tokens',\n type: 'address[]',\n },\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n name: 'allowances',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'tokens',\n type: 'address[]',\n },\n {\n name: 'wallet',\n type: 'address',\n },\n ],\n name: 'assetBalanceOf',\n outputs: [\n {\n name: 'balances',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'usdTokenAddress',\n type: 'address',\n },\n {\n name: 'tokens',\n type: 'address[]',\n },\n {\n name: 'sourceAmounts',\n type: 'uint256[]',\n },\n ],\n name: 'assetRates',\n outputs: [\n {\n name: 'assetRates',\n type: 'tuple[]',\n components: [\n {\n name: 'rate',\n type: 'uint256',\n },\n {\n name: 'precision',\n type: 'uint256',\n },\n {\n name: 'destAmount',\n type: 'uint256',\n },\n ],\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'bZxProtocol',\n outputs: [\n {\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'tokens',\n type: 'address[]',\n },\n {\n name: 'wallet',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n name: 'balances',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'tokens',\n type: 'address[]',\n },\n ],\n name: 'borrowInterestRate',\n outputs: [\n {\n name: 'rates',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'depositAmount',\n type: 'uint256',\n },\n {\n name: 'loanTokenAddress',\n type: 'address',\n },\n {\n name: 'collateralTokenAddress',\n type: 'address',\n },\n ],\n name: 'getBorrowAmountForDeposit',\n outputs: [\n {\n name: 'borrowAmount',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'borrowAmount',\n type: 'uint256',\n },\n {\n name: 'loanTokenAddress',\n type: 'address',\n },\n {\n name: 'collateralTokenAddress',\n type: 'address',\n },\n ],\n name: 'getDepositAmountForBorrow',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'tokens',\n type: 'address[]',\n },\n ],\n name: 'marketLiquidity',\n outputs: [\n {\n name: 'liquidity',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'tokens',\n type: 'address[]',\n },\n {\n name: 'wallet',\n type: 'address',\n },\n ],\n name: 'profitOf',\n outputs: [\n {\n name: 'profits',\n type: 'int256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'tokens',\n type: 'address[]',\n },\n ],\n name: 'reserveDetails',\n outputs: [\n {\n name: 'reserveDetails',\n type: 'tuple[]',\n components: [\n {\n name: 'iToken',\n type: 'address',\n },\n {\n name: 'totalAssetSupply',\n type: 'uint256',\n },\n {\n name: 'totalAssetBorrow',\n type: 'uint256',\n },\n {\n name: 'supplyInterestRate',\n type: 'uint256',\n },\n {\n name: 'borrowInterestRate',\n type: 'uint256',\n },\n {\n name: 'torqueBorrowInterestRate',\n type: 'uint256',\n },\n {\n name: 'vaultBalance',\n type: 'uint256',\n },\n ],\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'tokens',\n type: 'address[]',\n },\n ],\n name: 'supplyInterestRate',\n outputs: [\n {\n name: 'rates',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'tokens',\n type: 'address[]',\n },\n ],\n name: 'tokenPrice',\n outputs: [\n {\n name: 'prices',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'tokens',\n type: 'address[]',\n },\n ],\n name: 'totalSupply',\n outputs: [\n {\n name: 'totalSupply',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await HelperContract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = HelperContract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as HelperContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as HelperContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as HelperContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public allowance(\n tokens: string[],\n owner: string,\n spender: string\n ): ContractTxFunctionObj {\n const self = this as any as HelperContract\n assert.isArray('tokens', tokens)\n assert.isString('owner', owner)\n assert.isString('spender', spender)\n const functionSignature = 'allowance(address[],address,address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n tokens,\n owner.toLowerCase(),\n spender.toLowerCase(),\n ])\n },\n }\n }\n public assetBalanceOf(tokens: string[], wallet: string): ContractTxFunctionObj {\n const self = this as any as HelperContract\n assert.isArray('tokens', tokens)\n assert.isString('wallet', wallet)\n const functionSignature = 'assetBalanceOf(address[],address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [tokens, wallet.toLowerCase()])\n },\n }\n }\n public assetRates(\n usdTokenAddress: string,\n tokens: string[],\n sourceAmounts: BigNumber[]\n ): ContractTxFunctionObj<\n Array<{ rate: BigNumber; precision: BigNumber; destAmount: BigNumber }>\n > {\n const self = this as any as HelperContract\n assert.isString('usdTokenAddress', usdTokenAddress)\n assert.isArray('tokens', tokens)\n assert.isArray('sourceAmounts', sourceAmounts)\n const functionSignature = 'assetRates(address,address[],uint256[])'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<\n Array<{ rate: BigNumber; precision: BigNumber; destAmount: BigNumber }>\n >(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n usdTokenAddress.toLowerCase(),\n tokens,\n sourceAmounts,\n ])\n },\n }\n }\n public bZxProtocol(): ContractTxFunctionObj {\n const self = this as any as HelperContract\n const functionSignature = 'bZxProtocol()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public balanceOf(tokens: string[], wallet: string): ContractTxFunctionObj {\n const self = this as any as HelperContract\n assert.isArray('tokens', tokens)\n assert.isString('wallet', wallet)\n const functionSignature = 'balanceOf(address[],address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [tokens, wallet.toLowerCase()])\n },\n }\n }\n public borrowInterestRate(tokens: string[]): ContractTxFunctionObj {\n const self = this as any as HelperContract\n assert.isArray('tokens', tokens)\n const functionSignature = 'borrowInterestRate(address[])'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [tokens])\n },\n }\n }\n public getBorrowAmountForDeposit(\n depositAmount: BigNumber,\n loanTokenAddress: string,\n collateralTokenAddress: string\n ): ContractTxFunctionObj {\n const self = this as any as HelperContract\n assert.isBigNumber('depositAmount', depositAmount)\n assert.isString('loanTokenAddress', loanTokenAddress)\n assert.isString('collateralTokenAddress', collateralTokenAddress)\n const functionSignature = 'getBorrowAmountForDeposit(uint256,address,address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n depositAmount,\n loanTokenAddress.toLowerCase(),\n collateralTokenAddress.toLowerCase(),\n ])\n },\n }\n }\n public getDepositAmountForBorrow(\n borrowAmount: BigNumber,\n loanTokenAddress: string,\n collateralTokenAddress: string\n ): ContractTxFunctionObj {\n const self = this as any as HelperContract\n assert.isBigNumber('borrowAmount', borrowAmount)\n assert.isString('loanTokenAddress', loanTokenAddress)\n assert.isString('collateralTokenAddress', collateralTokenAddress)\n const functionSignature = 'getDepositAmountForBorrow(uint256,address,address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n borrowAmount,\n loanTokenAddress.toLowerCase(),\n collateralTokenAddress.toLowerCase(),\n ])\n },\n }\n }\n public marketLiquidity(tokens: string[]): ContractTxFunctionObj {\n const self = this as any as HelperContract\n assert.isArray('tokens', tokens)\n const functionSignature = 'marketLiquidity(address[])'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [tokens])\n },\n }\n }\n public owner(): ContractTxFunctionObj {\n const self = this as any as HelperContract\n const functionSignature = 'owner()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public profitOf(tokens: string[], wallet: string): ContractTxFunctionObj {\n const self = this as any as HelperContract\n assert.isArray('tokens', tokens)\n assert.isString('wallet', wallet)\n const functionSignature = 'profitOf(address[],address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [tokens, wallet.toLowerCase()])\n },\n }\n }\n public renounceOwnership(): ContractTxFunctionObj {\n const self = this as any as HelperContract\n const functionSignature = 'renounceOwnership()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public reserveDetails(tokens: string[]): ContractTxFunctionObj<\n Array<{\n iToken: string\n totalAssetSupply: BigNumber\n totalAssetBorrow: BigNumber\n supplyInterestRate: BigNumber\n borrowInterestRate: BigNumber\n torqueBorrowInterestRate: BigNumber\n vaultBalance: BigNumber\n }>\n > {\n const self = this as any as HelperContract\n assert.isArray('tokens', tokens)\n const functionSignature = 'reserveDetails(address[])'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<\n Array<{\n iToken: string\n totalAssetSupply: BigNumber\n totalAssetBorrow: BigNumber\n supplyInterestRate: BigNumber\n borrowInterestRate: BigNumber\n torqueBorrowInterestRate: BigNumber\n vaultBalance: BigNumber\n }>\n > {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<\n Array<{\n iToken: string\n totalAssetSupply: BigNumber\n totalAssetBorrow: BigNumber\n supplyInterestRate: BigNumber\n borrowInterestRate: BigNumber\n torqueBorrowInterestRate: BigNumber\n vaultBalance: BigNumber\n }>\n >(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [tokens])\n },\n }\n }\n public supplyInterestRate(tokens: string[]): ContractTxFunctionObj {\n const self = this as any as HelperContract\n assert.isArray('tokens', tokens)\n const functionSignature = 'supplyInterestRate(address[])'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [tokens])\n },\n }\n }\n public tokenPrice(tokens: string[]): ContractTxFunctionObj {\n const self = this as any as HelperContract\n assert.isArray('tokens', tokens)\n const functionSignature = 'tokenPrice(address[])'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [tokens])\n },\n }\n }\n public totalSupply(tokens: string[]): ContractTxFunctionObj {\n const self = this as any as HelperContract\n assert.isArray('tokens', tokens)\n const functionSignature = 'totalSupply(address[])'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [tokens])\n },\n }\n }\n public transferOwnership(newOwner: string): ContractTxFunctionObj {\n const self = this as any as HelperContract\n assert.isString('newOwner', newOwner)\n const functionSignature = 'transferOwnership(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [newOwner.toLowerCase()])\n },\n }\n }\n\n /**\n * Subscribe to an event type emitted by the Helper contract.\n * @param eventName The Helper contract event you would like to subscribe to.\n * @param indexFilterValues An object where the keys are indexed args returned by the event and\n * the value is the value you are interested in. E.g `{maker: aUserAddressHex}`\n * @param callback Callback that gets called when a log is added/removed\n * @param isVerbose Enable verbose subscription warnings (e.g recoverable network issues encountered)\n * @return Subscription token used later to unsubscribe\n */\n public subscribe(\n eventName: HelperEvents,\n indexFilterValues: IndexedFilterValues,\n callback: EventCallback,\n isVerbose: boolean = false,\n blockPollingIntervalMs?: number\n ): string {\n assert.doesBelongToStringEnum('eventName', eventName, HelperEvents)\n assert.doesConformToSchema(\n 'indexFilterValues',\n indexFilterValues,\n schemas.indexFilterValuesSchema\n )\n assert.isFunction('callback', callback)\n const subscriptionToken = this._subscriptionManager.subscribe(\n this.address,\n eventName,\n indexFilterValues,\n HelperContract.ABI(),\n callback,\n isVerbose,\n blockPollingIntervalMs\n )\n return subscriptionToken\n }\n\n /**\n * Cancel a subscription\n * @param subscriptionToken Subscription token returned by `subscribe()`\n */\n public unsubscribe(subscriptionToken: string): void {\n this._subscriptionManager.unsubscribe(subscriptionToken)\n }\n\n /**\n * Cancels all existing subscriptions\n */\n public unsubscribeAll(): void {\n this._subscriptionManager.unsubscribeAll()\n }\n\n /**\n * Gets historical logs without creating a subscription\n * @param eventName The Helper contract event you would like to subscribe to.\n * @param blockRange Block range to get logs from.\n * @param indexFilterValues An object where the keys are indexed args returned by the event and\n * the value is the value you are interested in. E.g `{_from: aUserAddressHex}`\n * @return Array of logs that match the parameters\n */\n public async getLogsAsync(\n eventName: HelperEvents,\n blockRange: BlockRange,\n indexFilterValues: IndexedFilterValues\n ): Promise>> {\n assert.doesBelongToStringEnum('eventName', eventName, HelperEvents)\n assert.doesConformToSchema('blockRange', blockRange, schemas.blockRangeSchema)\n assert.doesConformToSchema(\n 'indexFilterValues',\n indexFilterValues,\n schemas.indexFilterValuesSchema\n )\n const logs = await this._subscriptionManager.getLogsAsync(\n this.address,\n eventName,\n blockRange,\n indexFilterValues,\n HelperContract.ABI()\n )\n return logs\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = HelperContract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'Helper',\n HelperContract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n this._subscriptionManager = new SubscriptionManager(\n HelperContract.ABI(),\n this._web3Wrapper\n )\n HelperContract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n SubscriptionManager,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n LogWithDecodedArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\nexport type iTokenEventArgs = iTokenBurnEventArgs | iTokenMintEventArgs\n\nexport enum iTokenEvents {\n Burn = 'Burn',\n Mint = 'Mint',\n}\n\nexport interface iTokenBurnEventArgs extends DecodedLogArgs {\n burner: string\n tokenAmount: BigNumber\n assetAmount: BigNumber\n price: BigNumber\n}\n\nexport interface iTokenMintEventArgs extends DecodedLogArgs {\n minter: string\n tokenAmount: BigNumber\n assetAmount: BigNumber\n price: BigNumber\n}\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class iTokenContract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'iToken'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n private readonly _subscriptionManager: SubscriptionManager\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return iTokenContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await iTokenContract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return iTokenContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`iToken successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new iTokenContract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n anonymous: false,\n inputs: [\n {\n name: 'burner',\n type: 'address',\n indexed: true,\n },\n {\n name: 'tokenAmount',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'assetAmount',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'price',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Burn',\n outputs: [],\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n name: 'minter',\n type: 'address',\n indexed: true,\n },\n {\n name: 'tokenAmount',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'assetAmount',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'price',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Mint',\n outputs: [],\n type: 'event',\n },\n {\n inputs: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n {\n name: 'withdrawAmount',\n type: 'uint256',\n },\n {\n name: 'initialLoanDuration',\n type: 'uint256',\n },\n {\n name: 'collateralTokenSent',\n type: 'uint256',\n },\n {\n name: 'collateralTokenAddress',\n type: 'address',\n },\n {\n name: 'borrower',\n type: 'address',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'index_7',\n type: 'bytes',\n },\n ],\n name: 'borrow',\n outputs: [\n {\n name: '',\n type: 'tuple',\n components: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n {\n name: 'principal',\n type: 'uint256',\n },\n {\n name: 'collateral',\n type: 'uint256',\n },\n ],\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'borrowInterestRate',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'burnAmount',\n type: 'uint256',\n },\n ],\n name: 'burn',\n outputs: [\n {\n name: 'loanAmountPaid',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'depositAmount',\n type: 'uint256',\n },\n {\n name: 'initialLoanDuration',\n type: 'uint256',\n },\n {\n name: 'collateralTokenAddress',\n type: 'address',\n },\n ],\n name: 'getBorrowAmountForDeposit',\n outputs: [\n {\n name: 'borrowAmount',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'borrowAmount',\n type: 'uint256',\n },\n {\n name: 'initialLoanDuration',\n type: 'uint256',\n },\n {\n name: 'collateralTokenAddress',\n type: 'address',\n },\n ],\n name: 'getDepositAmountForBorrow',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'leverageAmount',\n type: 'uint256',\n },\n {\n name: 'loanTokenSent',\n type: 'uint256',\n },\n {\n name: 'collateralTokenSent',\n type: 'uint256',\n },\n {\n name: 'collateralTokenAddress',\n type: 'address',\n },\n ],\n name: 'getEstimatedMarginDetails',\n outputs: [\n {\n name: 'principal',\n type: 'uint256',\n },\n {\n name: 'collateral',\n type: 'uint256',\n },\n {\n name: 'interestRate',\n type: 'uint256',\n },\n {\n name: 'collateralToLoanRate',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'index_0',\n type: 'uint256',\n },\n ],\n name: 'loanParamsIds',\n outputs: [\n {\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n {\n name: 'leverageAmount',\n type: 'uint256',\n },\n {\n name: 'loanTokenSent',\n type: 'uint256',\n },\n {\n name: 'collateralTokenSent',\n type: 'uint256',\n },\n {\n name: 'collateralTokenAddress',\n type: 'address',\n },\n {\n name: 'trader',\n type: 'address',\n },\n {\n name: 'loanDataBytes',\n type: 'bytes',\n },\n ],\n name: 'marginTrade',\n outputs: [\n {\n name: '',\n type: 'tuple',\n components: [\n {\n name: 'loanId',\n type: 'bytes32',\n },\n {\n name: 'principal',\n type: 'uint256',\n },\n {\n name: 'collateral',\n type: 'uint256',\n },\n ],\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'marketLiquidity',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'depositAmount',\n type: 'uint256',\n },\n ],\n name: 'mint',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'borrowAmount',\n type: 'uint256',\n },\n ],\n name: 'nextBorrowInterestRate',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: 'supplyAmount',\n type: 'int256',\n },\n ],\n name: 'nextSupplyInterestRate',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'supplyInterestRate',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'tokenPrice',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalAssetBorrow',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalAssetSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'burnAmount',\n type: 'uint256',\n },\n ],\n name: 'burnToEther',\n outputs: [\n {\n name: 'loanAmountPaid',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'mintWithEther',\n outputs: [\n {\n name: 'mintAmount',\n type: 'uint256',\n },\n ],\n payable: true,\n stateMutability: 'payable',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await iTokenContract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = iTokenContract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as iTokenContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as iTokenContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as iTokenContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public borrow(\n loanId: string,\n withdrawAmount: BigNumber,\n initialLoanDuration: BigNumber,\n collateralTokenSent: BigNumber,\n collateralTokenAddress: string,\n borrower: string,\n receiver: string,\n index_7: string\n ): ContractTxFunctionObj<{ loanId: string; principal: BigNumber; collateral: BigNumber }> {\n const self = this as any as iTokenContract\n assert.isString('loanId', loanId)\n assert.isBigNumber('withdrawAmount', withdrawAmount)\n assert.isBigNumber('initialLoanDuration', initialLoanDuration)\n assert.isBigNumber('collateralTokenSent', collateralTokenSent)\n assert.isString('collateralTokenAddress', collateralTokenAddress)\n assert.isString('borrower', borrower)\n assert.isString('receiver', receiver)\n assert.isString('index_7', index_7)\n const functionSignature =\n 'borrow(bytes32,uint256,uint256,uint256,address,address,address,bytes)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<{ loanId: string; principal: BigNumber; collateral: BigNumber }> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<{\n loanId: string\n principal: BigNumber\n collateral: BigNumber\n }>(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n loanId,\n withdrawAmount,\n initialLoanDuration,\n collateralTokenSent,\n collateralTokenAddress.toLowerCase(),\n borrower.toLowerCase(),\n receiver.toLowerCase(),\n index_7,\n ])\n },\n }\n }\n public borrowInterestRate(): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n const functionSignature = 'borrowInterestRate()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public burn(receiver: string, burnAmount: BigNumber): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n assert.isString('receiver', receiver)\n assert.isBigNumber('burnAmount', burnAmount)\n const functionSignature = 'burn(address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [receiver.toLowerCase(), burnAmount])\n },\n }\n }\n public getBorrowAmountForDeposit(\n depositAmount: BigNumber,\n initialLoanDuration: BigNumber,\n collateralTokenAddress: string\n ): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n assert.isBigNumber('depositAmount', depositAmount)\n assert.isBigNumber('initialLoanDuration', initialLoanDuration)\n assert.isString('collateralTokenAddress', collateralTokenAddress)\n const functionSignature = 'getBorrowAmountForDeposit(uint256,uint256,address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n depositAmount,\n initialLoanDuration,\n collateralTokenAddress.toLowerCase(),\n ])\n },\n }\n }\n public getDepositAmountForBorrow(\n borrowAmount: BigNumber,\n initialLoanDuration: BigNumber,\n collateralTokenAddress: string\n ): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n assert.isBigNumber('borrowAmount', borrowAmount)\n assert.isBigNumber('initialLoanDuration', initialLoanDuration)\n assert.isString('collateralTokenAddress', collateralTokenAddress)\n const functionSignature = 'getDepositAmountForBorrow(uint256,uint256,address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n borrowAmount,\n initialLoanDuration,\n collateralTokenAddress.toLowerCase(),\n ])\n },\n }\n }\n public getEstimatedMarginDetails(\n leverageAmount: BigNumber,\n loanTokenSent: BigNumber,\n collateralTokenSent: BigNumber,\n collateralTokenAddress: string\n ): ContractTxFunctionObj<[BigNumber, BigNumber, BigNumber, BigNumber]> {\n const self = this as any as iTokenContract\n assert.isBigNumber('leverageAmount', leverageAmount)\n assert.isBigNumber('loanTokenSent', loanTokenSent)\n assert.isBigNumber('collateralTokenSent', collateralTokenSent)\n assert.isString('collateralTokenAddress', collateralTokenAddress)\n const functionSignature = 'getEstimatedMarginDetails(uint256,uint256,uint256,address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<[BigNumber, BigNumber, BigNumber, BigNumber]>(\n rawCallResult\n )\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n leverageAmount,\n loanTokenSent,\n collateralTokenSent,\n collateralTokenAddress.toLowerCase(),\n ])\n },\n }\n }\n public loanParamsIds(index_0: BigNumber): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n assert.isBigNumber('index_0', index_0)\n const functionSignature = 'loanParamsIds(uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [index_0])\n },\n }\n }\n public marginTrade(\n loanId: string,\n leverageAmount: BigNumber,\n loanTokenSent: BigNumber,\n collateralTokenSent: BigNumber,\n collateralTokenAddress: string,\n trader: string,\n loanDataBytes: string\n ): ContractTxFunctionObj<{ loanId: string; principal: BigNumber; collateral: BigNumber }> {\n const self = this as any as iTokenContract\n assert.isString('loanId', loanId)\n assert.isBigNumber('leverageAmount', leverageAmount)\n assert.isBigNumber('loanTokenSent', loanTokenSent)\n assert.isBigNumber('collateralTokenSent', collateralTokenSent)\n assert.isString('collateralTokenAddress', collateralTokenAddress)\n assert.isString('trader', trader)\n assert.isString('loanDataBytes', loanDataBytes)\n const functionSignature = 'marginTrade(bytes32,uint256,uint256,uint256,address,address,bytes)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<{ loanId: string; principal: BigNumber; collateral: BigNumber }> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<{\n loanId: string\n principal: BigNumber\n collateral: BigNumber\n }>(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n loanId,\n leverageAmount,\n loanTokenSent,\n collateralTokenSent,\n collateralTokenAddress.toLowerCase(),\n trader.toLowerCase(),\n loanDataBytes,\n ])\n },\n }\n }\n public marketLiquidity(): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n const functionSignature = 'marketLiquidity()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public mint(receiver: string, depositAmount: BigNumber): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n assert.isString('receiver', receiver)\n assert.isBigNumber('depositAmount', depositAmount)\n const functionSignature = 'mint(address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n receiver.toLowerCase(),\n depositAmount,\n ])\n },\n }\n }\n public nextBorrowInterestRate(borrowAmount: BigNumber): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n assert.isBigNumber('borrowAmount', borrowAmount)\n const functionSignature = 'nextBorrowInterestRate(uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [borrowAmount])\n },\n }\n }\n public nextSupplyInterestRate(supplyAmount: BigNumber): ContractFunctionObj {\n const self = this as any as iTokenContract\n assert.isBigNumber('supplyAmount', supplyAmount)\n const functionSignature = 'nextSupplyInterestRate(int256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [supplyAmount])\n },\n }\n }\n public supplyInterestRate(): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n const functionSignature = 'supplyInterestRate()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public tokenPrice(): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n const functionSignature = 'tokenPrice()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public totalAssetBorrow(): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n const functionSignature = 'totalAssetBorrow()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public totalAssetSupply(): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n const functionSignature = 'totalAssetSupply()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public burnToEther(receiver: string, burnAmount: BigNumber): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n assert.isString('receiver', receiver)\n assert.isBigNumber('burnAmount', burnAmount)\n const functionSignature = 'burnToEther(address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [receiver.toLowerCase(), burnAmount])\n },\n }\n }\n public mintWithEther(receiver: string): ContractTxFunctionObj {\n const self = this as any as iTokenContract\n assert.isString('receiver', receiver)\n const functionSignature = 'mintWithEther(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [receiver.toLowerCase()])\n },\n }\n }\n\n /**\n * Subscribe to an event type emitted by the iToken contract.\n * @param eventName The iToken contract event you would like to subscribe to.\n * @param indexFilterValues An object where the keys are indexed args returned by the event and\n * the value is the value you are interested in. E.g `{maker: aUserAddressHex}`\n * @param callback Callback that gets called when a log is added/removed\n * @param isVerbose Enable verbose subscription warnings (e.g recoverable network issues encountered)\n * @return Subscription token used later to unsubscribe\n */\n public subscribe(\n eventName: iTokenEvents,\n indexFilterValues: IndexedFilterValues,\n callback: EventCallback,\n isVerbose: boolean = false,\n blockPollingIntervalMs?: number\n ): string {\n assert.doesBelongToStringEnum('eventName', eventName, iTokenEvents)\n assert.doesConformToSchema(\n 'indexFilterValues',\n indexFilterValues,\n schemas.indexFilterValuesSchema\n )\n assert.isFunction('callback', callback)\n const subscriptionToken = this._subscriptionManager.subscribe(\n this.address,\n eventName,\n indexFilterValues,\n iTokenContract.ABI(),\n callback,\n isVerbose,\n blockPollingIntervalMs\n )\n return subscriptionToken\n }\n\n /**\n * Cancel a subscription\n * @param subscriptionToken Subscription token returned by `subscribe()`\n */\n public unsubscribe(subscriptionToken: string): void {\n this._subscriptionManager.unsubscribe(subscriptionToken)\n }\n\n /**\n * Cancels all existing subscriptions\n */\n public unsubscribeAll(): void {\n this._subscriptionManager.unsubscribeAll()\n }\n\n /**\n * Gets historical logs without creating a subscription\n * @param eventName The iToken contract event you would like to subscribe to.\n * @param blockRange Block range to get logs from.\n * @param indexFilterValues An object where the keys are indexed args returned by the event and\n * the value is the value you are interested in. E.g `{_from: aUserAddressHex}`\n * @return Array of logs that match the parameters\n */\n public async getLogsAsync(\n eventName: iTokenEvents,\n blockRange: BlockRange,\n indexFilterValues: IndexedFilterValues\n ): Promise>> {\n assert.doesBelongToStringEnum('eventName', eventName, iTokenEvents)\n assert.doesConformToSchema('blockRange', blockRange, schemas.blockRangeSchema)\n assert.doesConformToSchema(\n 'indexFilterValues',\n indexFilterValues,\n schemas.indexFilterValuesSchema\n )\n const logs = await this._subscriptionManager.getLogsAsync(\n this.address,\n eventName,\n blockRange,\n indexFilterValues,\n iTokenContract.ABI()\n )\n return logs\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = iTokenContract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'iToken',\n iTokenContract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n this._subscriptionManager = new SubscriptionManager(\n iTokenContract.ABI(),\n this._web3Wrapper\n )\n iTokenContract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class MasterChefSushiContract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'MasterChefSushi'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return MasterChefSushiContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await MasterChefSushiContract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return MasterChefSushiContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`MasterChefSushi successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new MasterChefSushiContract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n constant: true,\n inputs: [\n {\n name: 'index_0',\n type: 'uint256',\n },\n {\n name: 'index_1',\n type: 'address',\n },\n ],\n name: 'userInfo',\n outputs: [\n {\n name: '',\n type: 'tuple',\n components: [\n {\n name: 'amount',\n type: 'uint256',\n },\n {\n name: 'rewardDebt',\n type: 'uint256',\n },\n ],\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await MasterChefSushiContract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = MasterChefSushiContract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as MasterChefSushiContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as MasterChefSushiContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as MasterChefSushiContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public userInfo(\n index_0: BigNumber,\n index_1: string\n ): ContractFunctionObj<{ amount: BigNumber; rewardDebt: BigNumber }> {\n const self = this as any as MasterChefSushiContract\n assert.isBigNumber('index_0', index_0)\n assert.isString('index_1', index_1)\n const functionSignature = 'userInfo(uint256,address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<{ amount: BigNumber; rewardDebt: BigNumber }> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<{ amount: BigNumber; rewardDebt: BigNumber }>(\n rawCallResult\n )\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [index_0, index_1.toLowerCase()])\n },\n }\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = MasterChefSushiContract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'MasterChefSushi',\n MasterChefSushiContract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n MasterChefSushiContract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n SubscriptionManager,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n LogWithDecodedArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\nexport type MerkleDistributorEventArgs =\n | MerkleDistributorClaimedEventArgs\n | MerkleDistributorOwnershipTransferredEventArgs\n\nexport enum MerkleDistributorEvents {\n Claimed = 'Claimed',\n OwnershipTransferred = 'OwnershipTransferred',\n}\n\nexport interface MerkleDistributorClaimedEventArgs extends DecodedLogArgs {\n airdropIndex: BigNumber\n index: BigNumber\n account: string\n amount: BigNumber\n}\n\nexport interface MerkleDistributorOwnershipTransferredEventArgs extends DecodedLogArgs {\n previousOwner: string\n newOwner: string\n}\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class MerkleDistributorContract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'MerkleDistributor'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n private readonly _subscriptionManager: SubscriptionManager<\n MerkleDistributorEventArgs,\n MerkleDistributorEvents\n >\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return MerkleDistributorContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await MerkleDistributorContract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return MerkleDistributorContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`MerkleDistributor successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new MerkleDistributorContract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n anonymous: false,\n inputs: [\n {\n name: 'airdropIndex',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'index',\n type: 'uint256',\n indexed: false,\n },\n {\n name: 'account',\n type: 'address',\n indexed: false,\n },\n {\n name: 'amount',\n type: 'uint256',\n indexed: false,\n },\n ],\n name: 'Claimed',\n outputs: [],\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n name: 'previousOwner',\n type: 'address',\n indexed: true,\n },\n {\n name: 'newOwner',\n type: 'address',\n indexed: true,\n },\n ],\n name: 'OwnershipTransferred',\n outputs: [],\n type: 'event',\n },\n {\n inputs: [],\n name: 'STAKING',\n outputs: [\n {\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'airdropCount',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'index_0',\n type: 'uint256',\n },\n ],\n name: 'airdropSource',\n outputs: [\n {\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'airdropIndex',\n type: 'uint256',\n },\n {\n name: 'index',\n type: 'uint256',\n },\n {\n name: 'account',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n {\n name: 'merkleProof',\n type: 'bytes32[]',\n },\n ],\n name: 'claim',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'token_',\n type: 'address',\n },\n {\n name: 'merkleRoot_',\n type: 'bytes32',\n },\n {\n name: 'airdropSource_',\n type: 'address',\n },\n {\n name: 'amount_',\n type: 'uint256',\n },\n ],\n name: 'createAirdrop',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'airdropIndex',\n type: 'uint256',\n },\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'isClaimed',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'index_0',\n type: 'uint256',\n },\n ],\n name: 'merkleRoot',\n outputs: [\n {\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'token_',\n type: 'address',\n },\n {\n name: 'spender_',\n type: 'address',\n },\n {\n name: 'value_',\n type: 'uint256',\n },\n ],\n name: 'setApproval',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'index_0',\n type: 'uint256',\n },\n ],\n name: 'token',\n outputs: [\n {\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await MerkleDistributorContract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = MerkleDistributorContract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as MerkleDistributorContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as MerkleDistributorContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as MerkleDistributorContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public STAKING(): ContractTxFunctionObj {\n const self = this as any as MerkleDistributorContract\n const functionSignature = 'STAKING()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public airdropCount(): ContractTxFunctionObj {\n const self = this as any as MerkleDistributorContract\n const functionSignature = 'airdropCount()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public airdropSource(index_0: BigNumber): ContractTxFunctionObj {\n const self = this as any as MerkleDistributorContract\n assert.isBigNumber('index_0', index_0)\n const functionSignature = 'airdropSource(uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [index_0])\n },\n }\n }\n public claim(\n airdropIndex: BigNumber,\n index: BigNumber,\n account: string,\n amount: BigNumber,\n merkleProof: string[]\n ): ContractTxFunctionObj {\n const self = this as any as MerkleDistributorContract\n assert.isBigNumber('airdropIndex', airdropIndex)\n assert.isBigNumber('index', index)\n assert.isString('account', account)\n assert.isBigNumber('amount', amount)\n assert.isArray('merkleProof', merkleProof)\n const functionSignature = 'claim(uint256,uint256,address,uint256,bytes32[])'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n airdropIndex,\n index,\n account.toLowerCase(),\n amount,\n merkleProof,\n ])\n },\n }\n }\n public createAirdrop(\n token_: string,\n merkleRoot_: string,\n airdropSource_: string,\n amount_: BigNumber\n ): ContractTxFunctionObj {\n const self = this as any as MerkleDistributorContract\n assert.isString('token_', token_)\n assert.isString('merkleRoot_', merkleRoot_)\n assert.isString('airdropSource_', airdropSource_)\n assert.isBigNumber('amount_', amount_)\n const functionSignature = 'createAirdrop(address,bytes32,address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n token_.toLowerCase(),\n merkleRoot_,\n airdropSource_.toLowerCase(),\n amount_,\n ])\n },\n }\n }\n public isClaimed(airdropIndex: BigNumber, index: BigNumber): ContractTxFunctionObj {\n const self = this as any as MerkleDistributorContract\n assert.isBigNumber('airdropIndex', airdropIndex)\n assert.isBigNumber('index', index)\n const functionSignature = 'isClaimed(uint256,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [airdropIndex, index])\n },\n }\n }\n public merkleRoot(index_0: BigNumber): ContractTxFunctionObj {\n const self = this as any as MerkleDistributorContract\n assert.isBigNumber('index_0', index_0)\n const functionSignature = 'merkleRoot(uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [index_0])\n },\n }\n }\n public owner(): ContractTxFunctionObj {\n const self = this as any as MerkleDistributorContract\n const functionSignature = 'owner()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public renounceOwnership(): ContractTxFunctionObj {\n const self = this as any as MerkleDistributorContract\n const functionSignature = 'renounceOwnership()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public setApproval(\n token_: string,\n spender_: string,\n value_: BigNumber\n ): ContractTxFunctionObj {\n const self = this as any as MerkleDistributorContract\n assert.isString('token_', token_)\n assert.isString('spender_', spender_)\n assert.isBigNumber('value_', value_)\n const functionSignature = 'setApproval(address,address,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n token_.toLowerCase(),\n spender_.toLowerCase(),\n value_,\n ])\n },\n }\n }\n public token(index_0: BigNumber): ContractTxFunctionObj {\n const self = this as any as MerkleDistributorContract\n assert.isBigNumber('index_0', index_0)\n const functionSignature = 'token(uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [index_0])\n },\n }\n }\n public transferOwnership(newOwner: string): ContractTxFunctionObj {\n const self = this as any as MerkleDistributorContract\n assert.isString('newOwner', newOwner)\n const functionSignature = 'transferOwnership(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [newOwner.toLowerCase()])\n },\n }\n }\n\n /**\n * Subscribe to an event type emitted by the MerkleDistributor contract.\n * @param eventName The MerkleDistributor contract event you would like to subscribe to.\n * @param indexFilterValues An object where the keys are indexed args returned by the event and\n * the value is the value you are interested in. E.g `{maker: aUserAddressHex}`\n * @param callback Callback that gets called when a log is added/removed\n * @param isVerbose Enable verbose subscription warnings (e.g recoverable network issues encountered)\n * @return Subscription token used later to unsubscribe\n */\n public subscribe(\n eventName: MerkleDistributorEvents,\n indexFilterValues: IndexedFilterValues,\n callback: EventCallback,\n isVerbose: boolean = false,\n blockPollingIntervalMs?: number\n ): string {\n assert.doesBelongToStringEnum('eventName', eventName, MerkleDistributorEvents)\n assert.doesConformToSchema(\n 'indexFilterValues',\n indexFilterValues,\n schemas.indexFilterValuesSchema\n )\n assert.isFunction('callback', callback)\n const subscriptionToken = this._subscriptionManager.subscribe(\n this.address,\n eventName,\n indexFilterValues,\n MerkleDistributorContract.ABI(),\n callback,\n isVerbose,\n blockPollingIntervalMs\n )\n return subscriptionToken\n }\n\n /**\n * Cancel a subscription\n * @param subscriptionToken Subscription token returned by `subscribe()`\n */\n public unsubscribe(subscriptionToken: string): void {\n this._subscriptionManager.unsubscribe(subscriptionToken)\n }\n\n /**\n * Cancels all existing subscriptions\n */\n public unsubscribeAll(): void {\n this._subscriptionManager.unsubscribeAll()\n }\n\n /**\n * Gets historical logs without creating a subscription\n * @param eventName The MerkleDistributor contract event you would like to subscribe to.\n * @param blockRange Block range to get logs from.\n * @param indexFilterValues An object where the keys are indexed args returned by the event and\n * the value is the value you are interested in. E.g `{_from: aUserAddressHex}`\n * @return Array of logs that match the parameters\n */\n public async getLogsAsync(\n eventName: MerkleDistributorEvents,\n blockRange: BlockRange,\n indexFilterValues: IndexedFilterValues\n ): Promise>> {\n assert.doesBelongToStringEnum('eventName', eventName, MerkleDistributorEvents)\n assert.doesConformToSchema('blockRange', blockRange, schemas.blockRangeSchema)\n assert.doesConformToSchema(\n 'indexFilterValues',\n indexFilterValues,\n schemas.indexFilterValuesSchema\n )\n const logs = await this._subscriptionManager.getLogsAsync(\n this.address,\n eventName,\n blockRange,\n indexFilterValues,\n MerkleDistributorContract.ABI()\n )\n return logs\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = MerkleDistributorContract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'MerkleDistributor',\n MerkleDistributorContract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n this._subscriptionManager = new SubscriptionManager<\n MerkleDistributorEventArgs,\n MerkleDistributorEvents\n >(MerkleDistributorContract.ABI(), this._web3Wrapper)\n MerkleDistributorContract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class oracleContract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'oracle'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return oracleContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await oracleContract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return oracleContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`oracle successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new oracleContract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n constant: true,\n inputs: [\n {\n name: 'loanToken',\n type: 'address',\n },\n {\n name: 'collateralToken',\n type: 'address',\n },\n {\n name: 'loanAmount',\n type: 'uint256',\n },\n {\n name: 'collateralAmount',\n type: 'uint256',\n },\n ],\n name: 'getCurrentMargin',\n outputs: [\n {\n name: 'currentMargin',\n type: 'uint256',\n },\n {\n name: 'collateralToLoanRate',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: 'sourceToken',\n type: 'address',\n },\n {\n name: 'destToken',\n type: 'address',\n },\n ],\n name: 'queryRate',\n outputs: [\n {\n name: 'rate',\n type: 'uint256',\n },\n {\n name: 'precision',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await oracleContract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = oracleContract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as oracleContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as oracleContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as oracleContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public getCurrentMargin(\n loanToken: string,\n collateralToken: string,\n loanAmount: BigNumber,\n collateralAmount: BigNumber\n ): ContractFunctionObj<[BigNumber, BigNumber]> {\n const self = this as any as oracleContract\n assert.isString('loanToken', loanToken)\n assert.isString('collateralToken', collateralToken)\n assert.isBigNumber('loanAmount', loanAmount)\n assert.isBigNumber('collateralAmount', collateralAmount)\n const functionSignature = 'getCurrentMargin(address,address,uint256,uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<[BigNumber, BigNumber]> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<[BigNumber, BigNumber]>(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n loanToken.toLowerCase(),\n collateralToken.toLowerCase(),\n loanAmount,\n collateralAmount,\n ])\n },\n }\n }\n public queryRate(\n sourceToken: string,\n destToken: string\n ): ContractFunctionObj<[BigNumber, BigNumber]> {\n const self = this as any as oracleContract\n assert.isString('sourceToken', sourceToken)\n assert.isString('destToken', destToken)\n const functionSignature = 'queryRate(address,address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<[BigNumber, BigNumber]> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<[BigNumber, BigNumber]>(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [\n sourceToken.toLowerCase(),\n destToken.toLowerCase(),\n ])\n },\n }\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = oracleContract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'oracle',\n oracleContract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n oracleContract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class StakingContract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'Staking'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return StakingContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await StakingContract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return StakingContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`Staking successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new StakingContract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOfByAssets',\n outputs: [\n {\n name: 'bzrxBalance',\n type: 'uint256',\n },\n {\n name: 'iOOKIBalance',\n type: 'uint256',\n },\n {\n name: 'vBZRXBalance',\n type: 'uint256',\n },\n {\n name: 'LPTokenBalance',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'restake',\n type: 'bool',\n },\n ],\n name: 'claim',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'claimSushi',\n outputs: [\n {\n name: 'sushiRewardsEarned',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'earned',\n outputs: [\n {\n name: 'bzrxRewardsEarned',\n type: 'uint256',\n },\n {\n name: 'stableCoinRewardsEarned',\n type: 'uint256',\n },\n {\n name: 'bzrxRewardsVesting',\n type: 'uint256',\n },\n {\n name: 'stableCoinRewardsVesting',\n type: 'uint256',\n },\n {\n name: 'sushiRewardsEarned',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'tokens',\n type: 'address[]',\n },\n {\n name: 'values',\n type: 'uint256[]',\n },\n ],\n name: 'stake',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'tokens',\n type: 'address[]',\n },\n {\n name: 'values',\n type: 'uint256[]',\n },\n ],\n name: 'unstake',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'user',\n type: 'address',\n },\n ],\n name: 'vestingLastSync',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'votingBalanceOfNow',\n outputs: [\n {\n name: 'totalVotes',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'votingFromStakedBalanceOf',\n outputs: [\n {\n name: 'totalVotes',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await StakingContract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = StakingContract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as StakingContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as StakingContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as StakingContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public balanceOfByAssets(\n account: string\n ): ContractTxFunctionObj<[BigNumber, BigNumber, BigNumber, BigNumber]> {\n const self = this as any as StakingContract\n assert.isString('account', account)\n const functionSignature = 'balanceOfByAssets(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber]> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<[BigNumber, BigNumber, BigNumber, BigNumber]>(\n rawCallResult\n )\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [account.toLowerCase()])\n },\n }\n }\n public claim(restake: boolean): ContractTxFunctionObj {\n const self = this as any as StakingContract\n assert.isBoolean('restake', restake)\n const functionSignature = 'claim(bool)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [restake])\n },\n }\n }\n public claimSushi(): ContractTxFunctionObj {\n const self = this as any as StakingContract\n const functionSignature = 'claimSushi()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public earned(\n account: string\n ): ContractTxFunctionObj<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]> {\n const self = this as any as StakingContract\n assert.isString('account', account)\n const functionSignature = 'earned(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise<[BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]> {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue<\n [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber]\n >(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [account.toLowerCase()])\n },\n }\n }\n public stake(tokens: string[], values: BigNumber[]): ContractTxFunctionObj {\n const self = this as any as StakingContract\n assert.isArray('tokens', tokens)\n assert.isArray('values', values)\n const functionSignature = 'stake(address[],uint256[])'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [tokens, values])\n },\n }\n }\n public unstake(tokens: string[], values: BigNumber[]): ContractTxFunctionObj {\n const self = this as any as StakingContract\n assert.isArray('tokens', tokens)\n assert.isArray('values', values)\n const functionSignature = 'unstake(address[],uint256[])'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [tokens, values])\n },\n }\n }\n public vestingLastSync(user: string): ContractTxFunctionObj {\n const self = this as any as StakingContract\n assert.isString('user', user)\n const functionSignature = 'vestingLastSync(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [user.toLowerCase()])\n },\n }\n }\n public votingBalanceOfNow(account: string): ContractTxFunctionObj {\n const self = this as any as StakingContract\n assert.isString('account', account)\n const functionSignature = 'votingBalanceOfNow(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [account.toLowerCase()])\n },\n }\n }\n public votingFromStakedBalanceOf(account: string): ContractTxFunctionObj {\n const self = this as any as StakingContract\n assert.isString('account', account)\n const functionSignature = 'votingFromStakedBalanceOf(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [account.toLowerCase()])\n },\n }\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = StakingContract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'Staking',\n StakingContract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n StakingContract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class threePoolContract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'threePool'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return threePoolContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await threePoolContract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return threePoolContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`threePool successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new threePoolContract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n inputs: [\n {\n name: 'arg0',\n type: 'uint256',\n },\n ],\n name: 'balances',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await threePoolContract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = threePoolContract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as threePoolContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as threePoolContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as threePoolContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public balances(arg0: BigNumber): ContractTxFunctionObj {\n const self = this as any as threePoolContract\n assert.isBigNumber('arg0', arg0)\n const functionSignature = 'balances(uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [arg0])\n },\n }\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = threePoolContract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'threePool',\n threePoolContract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n threePoolContract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class VoteDelegatorContract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'VoteDelegator'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return VoteDelegatorContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await VoteDelegatorContract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return VoteDelegatorContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`VoteDelegator successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new VoteDelegatorContract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n inputs: [\n {\n name: 'delegatee',\n type: 'address',\n },\n ],\n name: 'delegate',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'delegator',\n type: 'address',\n },\n ],\n name: 'delegates',\n outputs: [\n {\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await VoteDelegatorContract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = VoteDelegatorContract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as VoteDelegatorContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as VoteDelegatorContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as VoteDelegatorContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public delegate(delegatee: string): ContractTxFunctionObj {\n const self = this as any as VoteDelegatorContract\n assert.isString('delegatee', delegatee)\n const functionSignature = 'delegate(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [delegatee.toLowerCase()])\n },\n }\n }\n public delegates(delegator: string): ContractTxFunctionObj {\n const self = this as any as VoteDelegatorContract\n assert.isString('delegator', delegator)\n const functionSignature = 'delegates(address)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(\n callData: Partial = {},\n defaultBlock?: BlockParam\n ): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [delegator.toLowerCase()])\n },\n }\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = VoteDelegatorContract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'VoteDelegator',\n VoteDelegatorContract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n VoteDelegatorContract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma enum-naming\n// tslint:disable:whitespace no-unbound-method no-trailing-whitespace\n// tslint:disable:no-unused-variable\nimport {\n AwaitTransactionSuccessOpts,\n EncoderOverrides,\n ContractFunctionObj,\n ContractTxFunctionObj,\n SendTransactionOpts,\n BaseContract,\n PromiseWithTransactionHash,\n methodAbiToFunctionSignature,\n linkLibrariesInBytecode,\n} from '@0x/base-contract'\nimport { schemas } from '@0x/json-schemas'\nimport {\n BlockParam,\n BlockParamLiteral,\n BlockRange,\n CallData,\n ContractAbi,\n ContractArtifact,\n DecodedLogArgs,\n MethodAbi,\n TransactionReceiptWithDecodedLogs,\n TxData,\n TxDataPayable,\n TxAccessListWithGas,\n SupportedProvider,\n} from 'ethereum-types'\nimport {\n AbiEncoder,\n BigNumber,\n classUtils,\n EncodingRules,\n hexUtils,\n logUtils,\n providerUtils,\n} from '@0x/utils'\nimport { EventCallback, IndexedFilterValues, SimpleContractArtifact } from '@0x/types'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\nimport { assert } from '@0x/assert'\nimport * as ethers from 'ethers'\n// tslint:enable:no-unused-variable\n\n/* istanbul ignore next */\n// tslint:disable:array-type\n// tslint:disable:no-parameter-reassignment\n// tslint:disable-next-line:class-name\nexport class WrappedNativeContract extends BaseContract {\n /**\n * @ignore\n */\n public static deployedBytecode: string | undefined\n public static contractName = 'WrappedNative'\n private readonly _methodABIIndex: { [name: string]: number } = {}\n public static async deployFrom0xArtifactAsync(\n artifact: ContractArtifact | SimpleContractArtifact,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const bytecode = artifact.compilerOutput.evm.bytecode.object\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n return WrappedNativeContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployWithLibrariesFrom0xArtifactAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }\n ): Promise {\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n if (artifact.compilerOutput === undefined) {\n throw new Error('Compiler output not found in the artifact file')\n }\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const abi = artifact.compilerOutput.abi\n const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}\n if (Object.keys(logDecodeDependencies) !== undefined) {\n for (const key of Object.keys(logDecodeDependencies)) {\n logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi\n }\n }\n const libraryAddresses = await WrappedNativeContract._deployLibrariesAsync(\n artifact,\n libraryArtifacts,\n new Web3Wrapper(provider),\n txDefaults\n )\n const bytecode = linkLibrariesInBytecode(artifact, libraryAddresses)\n return WrappedNativeContract.deployAsync(\n bytecode,\n abi,\n provider,\n txDefaults,\n logDecodeDependenciesAbiOnly\n )\n }\n\n public static async deployAsync(\n bytecode: string,\n abi: ContractAbi,\n supportedProvider: SupportedProvider,\n txDefaults: Partial,\n logDecodeDependencies: { [contractName: string]: ContractAbi }\n ): Promise {\n assert.isHexString('bytecode', bytecode)\n assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema)\n const provider = providerUtils.standardizeOrThrow(supportedProvider)\n const constructorAbi = BaseContract._lookupConstructorAbi(abi)\n ;[] = BaseContract._formatABIDataItemList(\n constructorAbi.inputs,\n [],\n BaseContract._bigNumberToString\n )\n const iface = new ethers.utils.Interface(abi)\n const deployInfo = iface.deployFunction\n const txData = deployInfo.encode(bytecode, [])\n const web3Wrapper = new Web3Wrapper(provider)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: txData,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(`WrappedNative successfully deployed at ${txReceipt.contractAddress}`)\n const contractInstance = new WrappedNativeContract(\n txReceipt.contractAddress as string,\n provider,\n txDefaults,\n logDecodeDependencies\n )\n contractInstance.constructorArgs = []\n return contractInstance\n }\n\n /**\n * @returns The contract ABI\n */\n public static ABI(): ContractAbi {\n const abi = [\n {\n inputs: [],\n name: 'deposit',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'withdraw',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n ] as ContractAbi\n return abi\n }\n\n protected static async _deployLibrariesAsync(\n artifact: ContractArtifact,\n libraryArtifacts: { [libraryName: string]: ContractArtifact },\n web3Wrapper: Web3Wrapper,\n txDefaults: Partial,\n libraryAddresses: { [libraryName: string]: string } = {}\n ): Promise<{ [libraryName: string]: string }> {\n const links = artifact.compilerOutput.evm.bytecode.linkReferences || {}\n // Go through all linked libraries, recursively deploying them if necessary.\n for (const link of Object.values(links)) {\n for (const libraryName of Object.keys(link)) {\n if (!libraryAddresses[libraryName]) {\n // Library not yet deployed.\n const libraryArtifact = libraryArtifacts[libraryName]\n if (!libraryArtifact) {\n throw new Error(`Missing artifact for linked library \"${libraryName}\"`)\n }\n // Deploy any dependent libraries used by this library.\n await WrappedNativeContract._deployLibrariesAsync(\n libraryArtifact,\n libraryArtifacts,\n web3Wrapper,\n txDefaults,\n libraryAddresses\n )\n // Deploy this library.\n const linkedLibraryBytecode = linkLibrariesInBytecode(libraryArtifact, libraryAddresses)\n const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync(\n {\n data: linkedLibraryBytecode,\n ...txDefaults,\n },\n web3Wrapper.estimateGasAsync.bind(web3Wrapper)\n )\n const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n logUtils.log(`transactionHash: ${txHash}`)\n const { contractAddress } = await web3Wrapper.awaitTransactionSuccessAsync(txHash)\n logUtils.log(\n `${libraryArtifact.contractName} successfully deployed at ${contractAddress}`\n )\n libraryAddresses[libraryArtifact.contractName] = contractAddress as string\n }\n }\n }\n return libraryAddresses\n }\n\n public getFunctionSignature(methodName: string): string {\n const index = this._methodABIIndex[methodName]\n const methodAbi = WrappedNativeContract.ABI()[index] as MethodAbi // tslint:disable-line:no-unnecessary-type-assertion\n const functionSignature = methodAbiToFunctionSignature(methodAbi)\n return functionSignature\n }\n\n public getABIDecodedTransactionData(methodName: string, callData: string): T {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as WrappedNativeContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecode(callData)\n return abiDecodedCallData\n }\n\n public getABIDecodedReturnData(methodName: string, callData: string): T {\n if (this._encoderOverrides.decodeOutput) {\n return this._encoderOverrides.decodeOutput(methodName, callData)\n }\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as WrappedNativeContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n const abiDecodedCallData = abiEncoder.strictDecodeReturnValue(callData)\n return abiDecodedCallData\n }\n\n public getSelector(methodName: string): string {\n const functionSignature = this.getFunctionSignature(methodName)\n const self = this as any as WrappedNativeContract\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n return abiEncoder.getSelector()\n }\n\n public deposit(): ContractTxFunctionObj {\n const self = this as any as WrappedNativeContract\n const functionSignature = 'deposit()'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [])\n },\n }\n }\n public withdraw(amount: BigNumber): ContractTxFunctionObj {\n const self = this as any as WrappedNativeContract\n assert.isBigNumber('amount', amount)\n const functionSignature = 'withdraw(uint256)'\n\n return {\n selector: self._lookupAbiEncoder(functionSignature).getSelector(),\n async sendTransactionAsync(\n txData?: Partial | undefined,\n opts: SendTransactionOpts = { shouldValidate: true }\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(\n { data: this.getABIEncodedTransactionData(), ...txData },\n this.estimateGasAsync.bind(this)\n )\n if (opts.shouldValidate !== false) {\n await this.callAsync(txDataWithDefaults)\n }\n return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults)\n },\n awaitTransactionSuccessAsync(\n txData?: Partial,\n opts: AwaitTransactionSuccessOpts = { shouldValidate: true }\n ): PromiseWithTransactionHash {\n return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts)\n },\n async estimateGasAsync(txData?: Partial | undefined): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.estimateGasAsync(txDataWithDefaults)\n },\n async createAccessListAsync(\n txData?: Partial | undefined,\n defaultBlock?: BlockParam\n ): Promise {\n const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({\n data: this.getABIEncodedTransactionData(),\n ...txData,\n })\n return self._web3Wrapper.createAccessListAsync(txDataWithDefaults, defaultBlock)\n },\n async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise {\n BaseContract._assertCallParams(callData, defaultBlock)\n const rawCallResult = await self._performCallAsync(\n { data: this.getABIEncodedTransactionData(), ...callData },\n defaultBlock\n )\n const abiEncoder = self._lookupAbiEncoder(functionSignature)\n BaseContract._throwIfUnexpectedEmptyCallResult(rawCallResult, abiEncoder)\n return abiEncoder.strictDecodeReturnValue(rawCallResult)\n },\n getABIEncodedTransactionData(): string {\n return self._strictEncodeArguments(functionSignature, [amount])\n },\n }\n }\n\n constructor(\n address: string,\n supportedProvider: SupportedProvider,\n txDefaults?: Partial,\n logDecodeDependencies?: { [contractName: string]: ContractAbi },\n deployedBytecode: string | undefined = WrappedNativeContract.deployedBytecode,\n encoderOverrides?: Partial\n ) {\n super(\n 'WrappedNative',\n WrappedNativeContract.ABI(),\n address,\n supportedProvider,\n txDefaults,\n logDecodeDependencies,\n deployedBytecode,\n encoderOverrides\n )\n classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper'])\n WrappedNativeContract.ABI().forEach((item, index) => {\n if (item.type === 'function') {\n const methodAbi = item as MethodAbi\n this._methodABIIndex[methodAbi.name] = index\n }\n })\n }\n}\n\n// tslint:disable:max-file-line-count\n// tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align\n// tslint:enable:trailing-comma whitespace no-trailing-whitespace\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { memoize } from 'lodash'\nimport web3Utils from 'web3-utils'\nimport { chainConfigs, stakingConfig } from '../config/appConfig'\nimport { ChainId } from '../config/chains/chainCommon'\nimport { BZRXVestingTokenContract } from './typescript-wrappers/BZRXVestingToken'\nimport { BzxContract } from './typescript-wrappers/bzxContract'\nimport { erc20Contract } from './typescript-wrappers/erc20'\nimport { FixedSwapTokenConverterContract } from './typescript-wrappers/FixedSwapTokenConverter'\nimport { HelperContract } from './typescript-wrappers/helper'\nimport { iTokenContract } from './typescript-wrappers/iTokenContract'\nimport { MasterChefSushiContract } from './typescript-wrappers/MasterChefSushi'\nimport { MerkleDistributorContract } from './typescript-wrappers/MerkleDistributor'\nimport { oracleContract } from './typescript-wrappers/oracle'\nimport { StakingContract } from './typescript-wrappers/staking'\nimport { threePoolContract } from './typescript-wrappers/ThreePool'\nimport { VoteDelegatorContract } from './typescript-wrappers/voteDelegator'\nimport { WrappedNativeContract } from './typescript-wrappers/WrappedNative'\n\nconst threeCurveAddresses = new Map([[1, '0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7']])\n\nconst vbzrxAddresses = new Map([[1, '0xB72B31907C1C95F3650b64b2469e08EdACeE5e8F']])\n\nconst wrappedNativeAddresses = new Map([\n [1, '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'],\n [10, '0x4200000000000000000000000000000000000006'],\n [56, '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c'],\n [137, '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270'],\n [42161, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1'],\n])\n\n/**\n * Get address and throws error it is does not exist\n */\nexport function getAddress(chainId: ChainId, addresses: Map): string {\n const address = addresses.get(chainId)\n if (!address) {\n throw new Error(`Contract address not found for chain ${chainId}`)\n }\n return address\n}\n\nexport default class ContractsSource {\n private readonly provider: any\n public networkId: ChainId\n public canWrite: boolean\n\n public constructor(provider: any, networkId: ChainId, canWrite: boolean) {\n this.provider = provider\n this.networkId = networkId\n this.canWrite = canWrite\n }\n\n public getStakingContract = memoize(() => {\n return new StakingContract(stakingConfig.stakingContract, this.provider)\n })\n\n public getVoteDelegatorContract = memoize(() => {\n return new VoteDelegatorContract(stakingConfig.voteDelegatorContract, this.provider)\n })\n\n public getBzrxVestingContract = memoize(() => {\n const address = vbzrxAddresses.get(this.networkId) || ''\n return new BZRXVestingTokenContract(address.toLowerCase(), this.provider)\n })\n\n public getHelperContract = memoize(() => {\n const address = chainConfigs[this.networkId].contracts.helperProxy\n return new HelperContract(address.toLowerCase(), this.provider)\n })\n\n public getErc20Contract = memoize((addressOrAsset: string | Asset): erc20Contract => {\n const tokenAddress = web3Utils.isAddress(addressOrAsset)\n ? addressOrAsset\n : assetUtils.getAddress(this.networkId, addressOrAsset as Asset)\n return new erc20Contract(tokenAddress.toLowerCase(), this.provider)\n })\n\n public getITokenContract = memoize((underlyingAsset: Asset): iTokenContract => {\n const address = assetUtils.getITokenAddress(this.networkId, underlyingAsset)\n return new iTokenContract(address, this.provider)\n })\n\n public getITokenContractUsingIToken = memoize((iTokenAsset: Asset): iTokenContract => {\n const address = assetUtils.getAddress(this.networkId, iTokenAsset)\n return new iTokenContract(address, this.provider)\n })\n\n public getOracleContract = memoize((): oracleContract => {\n const address = chainConfigs[this.networkId].contracts.priceFeed\n return new oracleContract(address.toLowerCase(), this.provider)\n })\n\n public getiBZxContract = memoize((): BzxContract => {\n const address = chainConfigs[this.networkId].contracts.bzx\n return new BzxContract(address.toLowerCase(), this.provider)\n })\n\n public getThreePoolContract = memoize(() => {\n const address = getAddress(this.networkId, threeCurveAddresses)\n return new threePoolContract(address.toLowerCase(), this.provider)\n })\n\n public getMasterChefSushiContract = memoize(() => {\n return new MasterChefSushiContract(stakingConfig.masterChefSushiV2Contract, this.provider)\n })\n\n public getWrappedNativeContract = memoize((): WrappedNativeContract => {\n const address = getAddress(this.networkId, wrappedNativeAddresses)\n return new WrappedNativeContract(address, this.provider)\n })\n\n /**\n * For airdrops\n */\n public getMerkelDistributorContract = memoize((address: string) => {\n return new MerkleDistributorContract(address, this.provider)\n })\n\n public getFixedSwapConverter = memoize((address: string) => {\n return new FixedSwapTokenConverterContract(address, this.provider)\n })\n}\n","import { AbstractConnector } from 'bzx-common/../web3-react-6/packages/abstract-connector/dist'\nimport { ConnectorEvent, ConnectorUpdate } from 'bzx-common/../web3-react-6/packages/types/dist'\nimport { ChainId, isChainSupported } from '../config/appConfig'\nimport ContractsSource from '../contracts/ContractsSource'\nimport { ProviderChangedEvent } from '../domain/events/providerEvents'\nimport { getProviderTypeByConnector, ProviderType } from '../domain/ProviderTypeDictionary'\nimport Web3ConnectionFactory from '../services/Web3ConnectionFactory'\nimport providerUtils, { AnyProvider } from './providerUtils'\n\nasync function setWeb3ProviderFinalize(provider: AnyProvider, providerType?: ProviderType) {\n provider.web3Wrapper = Web3ConnectionFactory.web3Wrapper\n provider.providerEngine = Web3ConnectionFactory.providerEngine\n let canWrite = Web3ConnectionFactory.canWrite\n const networkId = Web3ConnectionFactory.networkId\n provider.accounts = Web3ConnectionFactory.userAccount ? [Web3ConnectionFactory.userAccount] : []\n const chainSupported = isChainSupported(networkId)\n\n if (provider.web3Wrapper && !isChainSupported(networkId)) {\n canWrite = false // revert back to read-only\n }\n\n if (provider.web3Wrapper && canWrite) {\n const web3EngineAccounts = await provider.web3Wrapper.getAvailableAddressesAsync()\n if (web3EngineAccounts.length > 0 && provider.accounts.length === 0) {\n provider.accounts = web3EngineAccounts\n }\n if (provider.accounts.length === 0) {\n canWrite = false // revert back to read-only\n }\n }\n\n if (provider.web3Wrapper && isChainSupported(networkId)) {\n const chainId = networkId as ChainId\n provider.contractsSource = new ContractsSource(provider.providerEngine, chainId, canWrite)\n } else {\n provider.contractsSource = null\n }\n\n if (providerType) {\n provider.providerType =\n canWrite || (!canWrite && !chainSupported) ? providerType : ProviderType.None\n }\n\n providerUtils.setLocalstorageItem('providerType', provider.providerType)\n providerUtils.setLocalstorageItem('userChainId', String(networkId))\n provider.emit(\n 'ProviderChanged',\n new ProviderChangedEvent(provider.providerType, provider.web3Wrapper)\n )\n}\n\nasync function setWeb3Provider(\n provider: AnyProvider,\n connector: AbstractConnector,\n account?: string\n) {\n provider.emit('ProviderIsChanging')\n const providerType = await getProviderTypeByConnector(connector)\n await Web3ConnectionFactory.setWalletProvider(connector, providerType, account)\n await setWeb3ProviderFinalize(provider, providerType)\n}\n\nasync function setReadonlyWeb3Provider(provider: AnyProvider, chainId: ChainId) {\n provider.emit('ProviderIsChanging')\n await Web3ConnectionFactory.setReadonlyProvider(chainId)\n await setWeb3ProviderFinalize(provider, ProviderType.None)\n // Walletconnect and walletlink keep info in localstorage that makes it reuse the same account\n // even after disconnecting.\n // So, remove the data on disconnect / readonly. It is a quick fix. Need further investigation.\n localStorage.removeItem('walletconnect')\n // walletlink\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n if (key && key.includes('walletlink')) {\n localStorage.removeItem(key)\n }\n }\n}\n\nasync function onConnectorUpdated(provider: AnyProvider, update: ConnectorUpdate) {\n provider.emit('ProviderIsChanging')\n Web3ConnectionFactory.updateConnector(update)\n await setWeb3ProviderFinalize(provider)\n}\n\nasync function getLibrary(provider: AnyProvider, connector: AbstractConnector) {\n // handle connectors events (i.e. network changed)\n await setWeb3Provider(provider, connector)\n if (!connector.listeners(ConnectorEvent.Update).includes(onConnectorUpdated)) {\n connector.on(ConnectorEvent.Update, (update) => update && onConnectorUpdated(provider, update))\n }\n return Web3ConnectionFactory.providerEngine\n}\n\nexport default {\n getLibrary,\n onConnectorUpdated,\n setReadonlyWeb3Provider,\n setWeb3Provider,\n setWeb3ProviderFinalize,\n}\n","import { BigNumber } from '@0x/utils'\n\nBigNumber.config({\n EXPONENTIAL_AT: 100,\n})\n\nconst formatWithSeparator = {\n decimalSeparator: '.',\n groupSeparator: ',',\n groupSize: 3,\n}\n\n/**\n * \"Smart\" format. Tries to use the best number of decimals depending on the number.\n * Optionally can show a '+' sign in front of positive numbers and format number with separators.\n * NOTE: use it ONLY TO DISPLAY values, NOT FOR INPUTS\n */\nexport function autoFormat(\n numbr: string | number | BigNumber,\n maxDecimals?: number,\n opts?: { sign?: boolean; noSeparator?: boolean; exponential?: boolean }\n) {\n let dp = 2\n let num: BigNumber = !(numbr instanceof BigNumber) ? new BigNumber(numbr) : numbr\n if (num.isNaN()) {\n return '-'\n }\n if (num.isZero()) {\n return '0'\n }\n if (maxDecimals && num.lt(10 ** -maxDecimals)) {\n if (opts?.exponential) {\n return num.toExponential(2, 4)\n }\n return '0'\n }\n if (num.lt(1) && num.gt(-1)) {\n num = num.precision(3, 1)\n return num.toFixed()\n } else if (num.lt(100) && num.gt(-100)) {\n dp = 2\n num = num.decimalPlaces(dp)\n } else {\n dp = 0\n num = num.integerValue()\n }\n let str = opts?.noSeparator ? num.toFixed() : num.toFormat(dp, formatWithSeparator)\n if (str.includes('.')) {\n str = str.replace(/0+$/, '')\n if (str.endsWith('.')) {\n str = str.replace('.', '')\n }\n }\n return opts?.sign && num.gt(0) ? '+' + str : str\n}\n\nexport function formatPercent(numbr: string | number | BigNumber) {\n let num: BigNumber = !(numbr instanceof BigNumber) ? new BigNumber(numbr) : numbr\n if (num.isNaN()) {\n return '-'\n }\n if (num.lt(0.001) && num.gt(-0.001)) {\n return '0'\n } else if (num.lt(0.1) && num.gt(-0.1)) {\n num = num.precision(1)\n return num.toFixed()\n } else if (num.lt(100) && num.gt(-100)) {\n num = num.precision(3)\n return num.toFixed()\n } else {\n return num.integerValue().toFixed()\n }\n}\n\n/**\n * This is a \"smart rounding\" function that always returns a number.\n * If no decimal places are passed, it will apply a smart rounding.\n *\n * * If number is very small (as in decimals), it will pick up to 4 most significant ones.\n * * If number is in [-1, 1], use most significant decimal numbers (up to 4).\n * * [1] note: in a list, we could have mixed values and asking for decimalPlaces 0,\n * which is nice for big numbers but this throws an exception for the range [-1, 1].\n * For bigger ranges, use max 2 decimals by default\n * @param {Number} num number to round\n * @param {Number} decimalPlaces\n */\nfunction round(num: number | BigNumber, decimalPlaces?: number) {\n let numbr = num instanceof BigNumber ? num : new BigNumber(num)\n\n if (numbr.isLessThan(0.0001) && numbr.isGreaterThan(-0.0001)) {\n const numbrString = numbr.toString().match(/[-]?0\\.0+[1-9]{1,4}/)\n if (numbrString) {\n return Number(numbrString[0])\n }\n return 0\n } else if (numbr.isLessThan(1) && numbr.isGreaterThan(-1)) {\n numbr = numbr.precision(decimalPlaces || 3, 1) // precision can not be zero @see above [1]\n } else if (numbr.isLessThan(100000) && numbr.isGreaterThan(-100000)) {\n numbr = numbr.decimalPlaces(typeof decimalPlaces === 'number' ? decimalPlaces : 2, 1)\n } else {\n numbr = numbr.decimalPlaces(typeof decimalPlaces === 'number' ? decimalPlaces : 1, 1)\n }\n return numbr.toNumber()\n}\n\n/**\n * @param {number} num\n * @param {number} decimalPlaces default 2\n */\nfunction roundWithSign(num: number | BigNumber | string, decimalPlaces = 2) {\n const numbr = num instanceof BigNumber ? num : new BigNumber(num)\n return numbr.gt(0) ? '+' + round(numbr, decimalPlaces) : round(numbr, decimalPlaces)\n}\n\n/**\n * This is a \"rounding\" function that always returns a string.\n *\n * @param {string | number | BigNumber} output number to round\n */\n\nexport function formatPrecision(output: string | number | BigNumber) {\n const outputNumber = new BigNumber(output)\n if (!outputNumber.isFinite() || outputNumber.isNaN()) {\n return outputNumber.toFixed()\n }\n const n = Math.log(Number(outputNumber.abs())) / Math.LN10\n const x = Math.round(4 - n)\n if (x < 2) {\n return outputNumber.dp(2, 1).toFixed()\n }\n if (x > 6) {\n return outputNumber.precision(3, 1).toFixed()\n }\n return outputNumber.dp(x, 1).toFixed()\n}\n\n/**\n * Abbreviate number using scale\n * 130000 -> 130K | 1300000 -> 1.3M\n */\nexport function abbreviate(val: string | number | BigNumber, maxDecimals = 6): string {\n const value = new BigNumber(val)\n if (value.isNaN()) {\n return '-'\n }\n if (value.isZero() || value.lt(10 ** -maxDecimals)) {\n return '0'\n }\n if (value.lt(1000)) {\n return value.precision(3, 1).toFixed()\n }\n if (value.lt(10 ** 6)) {\n return `${Number(value.dividedBy(1000).precision(3, 1)).toString()}K`\n }\n if (value.lt(10 ** 9)) {\n return `${Number(value.dividedBy(10 ** 6).precision(3, 1)).toString()}M`\n }\n return `${Number(value.dividedBy(10 ** 9).precision(3, 1)).toString()}B`\n}\n\nexport default {\n autoFormat,\n abbreviate,\n formatPrecision,\n round,\n roundWithSign,\n formatPercent,\n}\n","import React from 'react'\n\ninterface IPlaceholderProps {\n width?: string\n className?: string\n small?: boolean\n}\n\nexport function Placeholder({ className = '', small }: IPlaceholderProps) {\n const cssClass = small ? 'placeholder--small' : 'placeholder'\n return \n}\n\nexport default React.memo(Placeholder)\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\n\nexport default class StakeEvent {\n public static readonly topic0: string =\n '0xc5017594d2723c038bb216e5bcef3ac65910ade839c0e63253bf5b59efbf0fd7'\n public readonly chainId: ChainId = 1\n public readonly user: string //indexed\n public readonly amount: BigNumber\n public readonly token: Asset\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly timestamp: Date\n\n constructor(\n user: string,\n token: Asset,\n amount: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n timestamp: Date\n ) {\n this.user = user\n this.token = token\n this.amount = amount\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.timestamp = timestamp\n }\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { AnyProvider } from 'app-lib/providerUtils'\nimport { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { Contract } from 'ethers5'\nimport { AbiCoder } from 'ethers5/lib/utils'\nimport { BigNumber } from '@0x/utils'\nimport { DexDataPayload, TradeType } from './types'\n\nasync function getSushiRouteIn(\n provider: AnyProvider,\n params: { srcToken: Asset; destToken: Asset; amountUsed: BigNumber }\n): Promise<[string, BigNumber]> {\n const { srcToken, destToken, amountUsed } = params\n const ethersProvider = provider.ethersProvider\n const chainId = provider.currentChainId\n const abi = [\n 'function dexAmountInFormatted(bytes calldata payload, uint256 amountOut) external returns (uint256)',\n ]\n const sushiAddress = chainConfigs[chainId].dexesDetails.SUSHI?.address\n if (!sushiAddress) {\n throw new Error('Sushi address not found')\n }\n const swapContract = new Contract(sushiAddress, abi, ethersProvider)\n const abiCoder = new AbiCoder()\n const payloadMarking = abiCoder.encode(\n ['address', 'address'],\n [assetUtils.getAddress(chainId, srcToken), assetUtils.getAddress(chainId, destToken)]\n )\n const resultant = await swapContract.callStatic.dexAmountInFormatted(\n payloadMarking,\n amountUsed.integerValue().toString()\n )\n return ['0x', new BigNumber(resultant._hex)]\n}\n\nasync function getSushiRouteOut(\n provider: AnyProvider,\n params: { srcToken: Asset; destToken: Asset; amountUsed: BigNumber }\n): Promise<[string, BigNumber]> {\n const { srcToken, destToken, amountUsed } = params\n const chainId = provider.currentChainId\n const abi = [\n 'function dexAmountOutFormatted(bytes calldata payload, uint256 amountOut) external returns (uint256)',\n ]\n const sushiAddress = chainConfigs[chainId].dexesDetails.SUSHI?.address\n if (!sushiAddress) {\n throw new Error('Sushi address not found')\n }\n const swapContract = new Contract(sushiAddress, abi, provider.ethersProvider)\n const abiCoder = new AbiCoder()\n const payloadMarking = abiCoder.encode(\n ['address', 'address'],\n [assetUtils.getAddress(chainId, srcToken), assetUtils.getAddress(chainId, destToken)]\n )\n const resultant = await swapContract.callStatic.dexAmountOutFormatted(\n payloadMarking,\n amountUsed.integerValue().toString()\n )\n return ['0x', new BigNumber(resultant._hex)]\n}\n\nasync function getSushiRoute(provider: AnyProvider, payload: DexDataPayload) {\n return payload.direction === TradeType.EXACT_INPUT\n ? getSushiRouteOut(provider, payload)\n : getSushiRouteIn(provider, payload)\n}\n\nexport default {\n getSushiRouteIn,\n getSushiRouteOut,\n getSushiRoute,\n}\n","import oracleApi from 'app-lib/apis/oracleApi'\nimport assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { AnyProvider } from 'app-lib/providerUtils'\nimport { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { AbiCoder, solidityPack } from 'ethers5/lib/utils'\nimport JSBI from 'jsbi'\nimport { BigNumber } from '@0x/utils'\nimport { Protocol } from '@uniswap/router-sdk'\nimport { CurrencyAmount, Percent, Token } from '@uniswap/sdk-core'\nimport { AlphaRouter, V3Route, V3RouteWithValidQuote } from '@uniswap/smart-order-router'\nimport { DexDataPayload, IUniRoute, TradeType } from './types'\n\nasync function getUniswapV3RouteOut(\n provider: AnyProvider,\n params: { srcToken: Asset; destToken: Asset; amountUsed: BigNumber }\n): Promise<[string, BigNumber]> {\n const { amountUsed } = params\n let { srcToken, destToken } = params\n const result: [string, BigNumber] = ['g', new BigNumber('0')]\n const nProvider = provider.ethersProvider\n const chainId = provider.currentChainId\n const router = new AlphaRouter({ chainId: chainId, provider: nProvider })\n let tempAssetChange: [Asset, number] = [Asset.UNKNOWN, 0]\n const USDValue =\n srcToken == Asset.USDC || Asset.USDT || Asset.FRAX\n ? amountUsed.dividedBy(10 ** assetUtils.getDecimals(chainId, srcToken))\n : (\n await oracleApi.getSwapRateNew(\n provider,\n srcToken,\n chainConfigs[chainId].stablecoinForUsdRates\n )\n )\n .times(amountUsed)\n .dividedBy(10 ** assetUtils.getDecimals(chainId, srcToken))\n\n if (chainId == 42161) {\n //Stopgap fix to get around lower liquidity on USDT\n if (srcToken == Asset.USDT) {\n if (USDValue.gt(125000) && destToken != Asset.USDC) {\n tempAssetChange[0] = Asset.USDT\n srcToken = Asset.USDC\n }\n } else if (destToken == Asset.USDT) {\n if (USDValue.gt(125000) && srcToken != Asset.USDC) {\n tempAssetChange = [Asset.USDT, 1]\n destToken = Asset.USDC\n }\n }\n }\n\n const { address: srcAddress, decimals: srcDecimals } = assetUtils.getInfo(chainId, srcToken)\n const SRC = new Token(chainId, srcAddress, srcDecimals, srcToken, 'xxx')\n\n const { address: destAddress, decimals: destDecimals } = assetUtils.getInfo(chainId, destToken)\n const DEST = new Token(chainId, destAddress, destDecimals, destToken, 'yyy')\n\n const amountInFinal = CurrencyAmount.fromRawAmount(SRC, JSBI.BigInt(amountUsed.integerValue()))\n const key = [srcToken, destToken].sort((a, b) => a.localeCompare(b)).join('')\n const uniRouteSettings = chainConfigs[provider.currentChainId].uniRouteSettings[key]\n let v3PoolSelectionSettings: IUniRoute = {\n topN: 0,\n topNDirectSwaps: 2,\n topNTokenInOut: 2,\n topNSecondHop: 0,\n topNWithEachBaseToken: 0,\n topNWithBaseToken: 0,\n }\n if (uniRouteSettings) {\n v3PoolSelectionSettings = uniRouteSettings[0]\n if (USDValue.gt(100000)) {\n v3PoolSelectionSettings = uniRouteSettings[1]\n } else if (USDValue.gt(1000000)) {\n v3PoolSelectionSettings = uniRouteSettings[2]\n }\n }\n const swapRoute = await router.route(\n amountInFinal,\n DEST,\n TradeType.EXACT_INPUT,\n {\n recipient: '0x0000000000000000000000000000000000000001',\n slippageTolerance: new Percent(5, 100),\n deadline: Math.round(new Date().getTime() / 1000 + 100000),\n },\n {\n blockNumber: await nProvider.getBlockNumber(),\n protocols: [Protocol.V3],\n v3PoolSelection: v3PoolSelectionSettings,\n maxSwapsPerPath: 4,\n maxSplits: 5,\n }\n )\n\n if (!swapRoute) {\n throw new Error('No route found on the AMM')\n }\n\n const finalSwapList: [string, string, string, string, string][] = []\n let finalSwapOut = new BigNumber(0)\n for (const x in swapRoute.route) {\n const routes = swapRoute.route[x].route\n const set: (string | number)[] = []\n const set1: string[] = []\n for (let y = 0; y < routes.pools.length; y++) {\n if (y === 0) {\n set.push(routes.tokenPath[y].address)\n set1.push('address')\n set.push(routes.pools[y].fee.toString())\n set1.push('uint24')\n set.push(routes.tokenPath[y + 1].address)\n set1.push('address')\n } else {\n set.push(routes.pools[y].fee.toString())\n set1.push('uint24')\n set.push(routes.tokenPath[y + 1].address)\n set1.push('address')\n }\n }\n if (tempAssetChange[0] !== Asset.UNKNOWN) {\n if (tempAssetChange[1] === 0) {\n set.unshift(assetUtils.getAddress(chainId, tempAssetChange[0]), '500')\n set1.unshift('address', 'uint24')\n } else {\n set.push('500', assetUtils.getAddress(chainId, tempAssetChange[0]))\n set1.push('uint24', 'address')\n }\n }\n finalSwapList.push([\n solidityPack(set1, set),\n '0x0000000000000000000000000000000000000001',\n Math.round(new Date().getTime() / 1000 + 100000).toString(),\n amountUsed.times(swapRoute.route[x].percent).div(101).integerValue().toString(),\n new BigNumber((swapRoute.route[x]).rawQuote.toString())\n .times(new BigNumber(0.99))\n .integerValue()\n .toString(),\n ])\n finalSwapOut = finalSwapOut.plus(\n new BigNumber((swapRoute.route[x]).rawQuote.toString())\n )\n }\n\n const abiCoder = new AbiCoder()\n result[0] = abiCoder.encode(\n ['uint256', 'bytes[]'],\n [\n 2,\n [\n abiCoder.encode(\n ['uint256', 'bytes'],\n [2, abiCoder.encode(['(bytes,address,uint256,uint256,uint256)[]'], [finalSwapList])]\n ),\n ],\n ]\n )\n result[1] = finalSwapOut\n return result\n}\n\nasync function getUniswapV3RouteIn(\n provider: AnyProvider,\n params: { srcToken: Asset; destToken: Asset; amountUsed: BigNumber; amountsInMax?: BigNumber }\n): Promise<[string, BigNumber]> {\n const { amountUsed, amountsInMax } = params\n let srcToken = params.srcToken\n let destToken = params.destToken\n const result: [string, BigNumber] = ['0x', new BigNumber(0)]\n const nProvider = provider.ethersProvider\n const chainId = provider.currentChainId\n const router = new AlphaRouter({ chainId: chainId, provider: nProvider })\n let tempAssetChange: [Asset, number] = [Asset.UNKNOWN, 0]\n const USDValue =\n destToken == Asset.USDC || Asset.USDT || Asset.FRAX\n ? amountUsed.dividedBy(10 ** assetUtils.getDecimals(chainId, destToken))\n : (\n await oracleApi.getSwapRateNew(\n provider,\n destToken,\n chainConfigs[chainId].stablecoinForUsdRates\n )\n )\n .times(amountUsed)\n .dividedBy(10 ** assetUtils.getDecimals(chainId, destToken))\n if (chainId === 42161) {\n //Stopgap fix to get around lower liquidity on USDT\n if (srcToken == Asset.USDT) {\n if (USDValue.gt(125000) && destToken !== Asset.USDC) {\n tempAssetChange[0] = Asset.USDT\n srcToken = Asset.USDC\n }\n } else if (destToken == Asset.USDT) {\n if (USDValue.gt(125000) && srcToken !== Asset.USDC) {\n tempAssetChange = [Asset.USDT, 1]\n destToken = Asset.USDC\n }\n }\n }\n const { address: srcAddress, decimals: srcDecimals } = assetUtils.getInfo(chainId, srcToken)\n const SRC = new Token(chainId, srcAddress, srcDecimals, srcToken, 'xxx')\n\n const { address: destAddress, decimals: destDecimals } = assetUtils.getInfo(chainId, destToken)\n const DEST = new Token(chainId, destAddress, destDecimals, destToken, 'yyy')\n\n const amountInFinal = CurrencyAmount.fromRawAmount(DEST, JSBI.BigInt(amountUsed.integerValue()))\n const key = [srcToken, destToken].sort((a, b) => a.localeCompare(b)).join('')\n const uniRouteSettings = chainConfigs[provider.currentChainId].uniRouteSettings[key]\n let v3PoolSelectionSettings: IUniRoute = {\n topN: 0,\n topNDirectSwaps: 2,\n topNTokenInOut: 2,\n topNSecondHop: 0,\n topNWithEachBaseToken: 0,\n topNWithBaseToken: 0,\n }\n if (uniRouteSettings) {\n v3PoolSelectionSettings = uniRouteSettings[0]\n if (USDValue.gt(100000)) {\n v3PoolSelectionSettings = uniRouteSettings[1]\n } else if (USDValue.gt(1000000)) {\n v3PoolSelectionSettings = uniRouteSettings[2]\n }\n }\n\n const swapRoute = await router.route(\n amountInFinal,\n SRC,\n TradeType.EXACT_OUTPUT,\n {\n recipient: '0x0000000000000000000000000000000000000001',\n slippageTolerance: new Percent(5, 100),\n deadline: Math.round(new Date().getTime() / 1000 + 100000),\n },\n {\n blockNumber: await nProvider.getBlockNumber(),\n protocols: [Protocol.V3],\n v3PoolSelection: v3PoolSelectionSettings,\n maxSwapsPerPath: 4,\n maxSplits: 5,\n }\n )\n\n if (!swapRoute) {\n throw new Error('No route found on the AMM')\n }\n\n const finalSwapList: [string, string, string, string, string][] = []\n let finalSwapIn = new BigNumber(0)\n for (const x in swapRoute.route) {\n const routes = swapRoute.route[x].route\n const set: (string | number)[] = []\n const set1: string[] = []\n for (let y = 0; y < routes.pools.length; y++) {\n if (y === 0) {\n set.push(routes.tokenPath[y].address)\n set1.push('address')\n set.push(routes.pools[y].fee.toString())\n set1.push('uint24')\n set.push(routes.tokenPath[y + 1].address)\n set1.push('address')\n } else {\n set.push(routes.pools[y].fee.toString())\n set1.push('uint24')\n set.push(routes.tokenPath[y + 1].address)\n set1.push('address')\n }\n }\n let amountsIn: string = swapRoute.route[x].rawQuote.toBigInt().toString()\n if (amountsInMax) {\n amountsIn = amountsInMax.times(swapRoute.route[x].percent).div(100).integerValue().toString()\n }\n if (tempAssetChange[0] !== Asset.UNKNOWN) {\n if (tempAssetChange[1] === 0) {\n set.unshift(assetUtils.getAddress(chainId, tempAssetChange[0]), '500')\n set1.unshift('address', 'uint24')\n } else {\n set.push('500', assetUtils.getAddress(chainId, tempAssetChange[0]))\n set1.push('uint24', 'address')\n }\n }\n finalSwapList.push([\n solidityPack(set1, set.reverse()),\n '0x0000000000000000000000000000000000000001',\n Math.round(new Date().getTime() / 1000 + 100000).toString(),\n amountUsed.times(swapRoute.route[x].percent).div(100).integerValue().toString(),\n amountsIn,\n ])\n finalSwapIn = finalSwapIn.plus(\n new BigNumber((swapRoute.route[x]).rawQuote.toString())\n )\n }\n\n const abiCoder = new AbiCoder()\n result[0] = abiCoder.encode(\n ['uint256', 'bytes[]'],\n [\n 2,\n [\n abiCoder.encode(\n ['uint256', 'bytes'],\n [2, abiCoder.encode(['(bytes,address,uint256,uint256,uint256)[]'], [finalSwapList])]\n ),\n ],\n ]\n )\n result[1] = finalSwapIn\n return result\n}\n\nasync function getUniswapV3Route(provider: AnyProvider, payload: DexDataPayload) {\n return payload.direction === TradeType.EXACT_INPUT\n ? getUniswapV3RouteOut(provider, payload)\n : getUniswapV3RouteIn(provider, payload)\n}\n\nfunction restructureRoute(route: string): string {\n route = route.slice(2)\n const finalResult: string[] = []\n const encoderConditions: string[] = []\n let condition = true\n let retrieveAddress = true\n while (condition) {\n if (retrieveAddress) {\n finalResult.push('0x' + route.slice(0, 40))\n route = route.slice(40)\n retrieveAddress = false\n encoderConditions.push('address')\n } else {\n finalResult.push(parseInt(route.slice(0, 6), 16).toString())\n route = route.slice(6)\n retrieveAddress = true\n encoderConditions.push('uint24')\n }\n if (route.length === 0) {\n condition = false\n }\n }\n finalResult.reverse()\n encoderConditions.reverse()\n return solidityPack(encoderConditions, finalResult)\n}\n\n//Note: Only use for getSwapExpectedReturn or dexAmountOutFormatted. Do not use this for actual swap payload data\nfunction convertInToOutUniV3(abiCoder: AbiCoder, payload: string): string {\n const passedData = abiCoder.decode(['(bytes,address,uint256,uint256,uint256)[]'], payload)[0]\n const dataToEncode: string[][] = []\n for (let i = 0; i < passedData.length; i++) {\n const listing: string[] = [\n restructureRoute(passedData[i][0]),\n passedData[i][1].toString(),\n passedData[i][2].toString(),\n passedData[i][4].toString(),\n passedData[i][3].toString(),\n ]\n dataToEncode.push(listing)\n }\n return abiCoder.encode(['(bytes,address,uint256,uint256,uint256)[]'], [dataToEncode])\n}\n\nexport default {\n getUniswapV3RouteIn,\n getUniswapV3RouteOut,\n getUniswapV3Route,\n convertInToOutUniV3,\n}\n","import { BigNumber } from '@0x/utils'\nimport { AnyProvider } from 'app-lib/providerUtils'\nimport sushi from './sushi'\nimport univ3 from './univ3'\nimport { DEX, DexDataPayload, TradeType } from './types'\n\ntype RouteHandler = (provider: AnyProvider, payload: DexDataPayload) => Promise<[string, BigNumber]>\n\nconst routeHandlers: Record, RouteHandler> = {\n [DEX.SUSHI]: sushi.getSushiRoute,\n [DEX.UNISWAPV3]: univ3.getUniswapV3Route,\n}\n\n/**\n * Search for the best route amoung all the dexes supported.\n * Note: this is very slow; not recommended to use.\n */\nasync function getAutoRoute(provider: AnyProvider, payload: DexDataPayload) {\n let result: [string, BigNumber] = ['0x', new BigNumber(0)]\n const dexes = Object.values(DEX).filter((dex) => dex !== DEX.AUTO) as unknown as Array<\n Exclude\n >\n for (const dex of dexes) {\n try {\n const dataSet = await routeHandlers[dex](provider, payload)\n if (payload.direction == TradeType.EXACT_INPUT) {\n if (new BigNumber(dataSet[1].toString()).gt(new BigNumber(result[1].toString()))) {\n result = dataSet\n }\n } else {\n if (result[1].toString() === '0') {\n result = dataSet\n }\n if (new BigNumber(dataSet[1].toString()).lt(new BigNumber(result[1].toString()))) {\n result = dataSet\n }\n }\n } catch (err) {\n console.error(\n `getAutoRoute: retrievePayload failed for dex ${dex}; params: ${JSON.stringify(payload)}`,\n err\n )\n }\n }\n return result\n}\n\n/**\n * @returns [loanDataBytes, AmountReceivedForTheSwap]\n */\nasync function getTradePayload(\n provider: AnyProvider,\n payload: DexDataPayload,\n dex: DEX\n): Promise<[string, BigNumber]> {\n if (dex === DEX.AUTO) {\n return getAutoRoute(provider, payload)\n }\n try {\n const tradePayload = await routeHandlers[dex](provider, payload)\n return tradePayload\n } catch (err) {\n err.message += ` - getTradePayload: failed for dex ${dex}; params: ${JSON.stringify(payload)}`\n console.error(err)\n throw err\n }\n}\n\nexport default {\n getTradePayload,\n}\n","import assetUtils from 'app-lib/assetUtils'\nimport { TradeType as TradeT } from 'app-lib/dexSelector/types'\nimport { AnyProvider } from 'app-lib/providerUtils'\nimport tradeUtils from 'app-lib/tradeUtils'\nimport IBorrowedFundsState from 'bzx-common/src/domain/IBorrowedFundsState'\nimport { ITradeRequest, PositionType } from 'bzx-common/src/domain/trade.types'\nimport oracleApi from './apis/oracleApi'\nimport dexSelector from './dexSelector'\n\nexport async function getSwapDataForNewPosition(provider: AnyProvider, request: ITradeRequest) {\n if (!request.dex) {\n throw new Error('Unspecified dex')\n }\n const chainId = provider.currentChainId\n const { deposit, src, dest, loaned, leverage } = tradeUtils.getTradeTokens(chainId, request)\n let depositAmount = request.amount.times(10 ** deposit.decimals).times(leverage)\n\n if (deposit.asset !== loaned.asset) {\n const swapPrice = await oracleApi.getSwapRateNew(provider, deposit.asset, loaned.asset)\n depositAmount = depositAmount.times(swapPrice).integerValue()\n }\n const payloadInputData = {\n srcToken: src.asset,\n destToken: dest.asset,\n amountUsed: depositAmount,\n direction: TradeT.EXACT_INPUT,\n }\n return dexSelector.getTradePayload(provider, payloadInputData, request.dex)\n}\n\nexport async function getSwapDataForClosingPosition(\n provider: AnyProvider,\n request: ITradeRequest,\n loan: IBorrowedFundsState\n) {\n if (!request.dex) {\n throw new Error('Unspecified dex')\n }\n const chainId = provider.currentChainId\n const { positionType, amount } = request\n const { loaned, collateral, src, dest } = tradeUtils.getTradeTokens(chainId, request)\n const isLong = positionType === PositionType.LONG\n\n if (!request.returnTokenIsCollateral) {\n const depositAmount = amount.times(10 ** collateral.decimals)\n const payloadInputData = {\n srcToken: src.asset,\n destToken: dest.asset,\n amountUsed: depositAmount,\n direction: TradeT.EXACT_INPUT,\n }\n return dexSelector.getTradePayload(provider, payloadInputData, request.dex)\n }\n\n const { loanData } = loan\n const depositAmount = isLong\n ? amount.times(10 ** collateral.decimals)\n : amount\n .times(10 ** assetUtils.getDecimals(provider.currentChainId, loaned.asset))\n .times(loanData.collateral)\n .div(loanData.principal)\n\n const amountOutNeeded = loanData.principal.times(depositAmount).div(loanData.collateral)\n\n const payloadInputData = {\n srcToken: src.asset,\n destToken: dest.asset,\n amountUsed: amountOutNeeded,\n direction: TradeT.EXACT_OUTPUT,\n amountsInMax: depositAmount.times(1.003).gt(loanData.collateral)\n ? loanData.collateral\n : depositAmount.times(1.003).integerValue(),\n }\n return dexSelector.getTradePayload(provider, payloadInputData, request.dex)\n}\n\nexport default {\n getSwapDataForNewPosition,\n getSwapDataForClosingPosition,\n}\n","import bzxApi, { IUserYieldApi } from 'app-lib/apis/bzxApi'\nimport assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { AnyProvider } from 'app-lib/providerUtils'\nimport { LendType } from 'bzx-common/src/domain/lendTypes'\nimport { BigNumber } from '@0x/utils'\nimport providerUtils from './providerUtils'\n\nexport type LendInfo = {\n tokenName: Asset\n supplyInterestRate: string\n address: string\n totalSupply: string\n totalBorrow: string\n availableLiquidity: string\n}\n\n/**\n * Source: blockchain\n */\nasync function getLendTokenInterestRates(\n provider: AnyProvider,\n assets: Asset[]\n): Promise {\n const { helperContract, chainId } = providerUtils.getDependenciesStrictRead(provider)\n const itokenAddresses = assetUtils.getITokenAddresses(chainId, assets)\n const interestRates = await helperContract.supplyInterestRate(itokenAddresses).callAsync()\n return interestRates.map((interestRate) => interestRate.dividedBy(10 ** 18))\n}\n\nconst getMaxLendValue = async (provider: AnyProvider, lendType: LendType, asset: Asset) => {\n let maxLendAmount = new BigNumber(0)\n let maxTokenAmount = new BigNumber(0)\n let userLentBalance = new BigNumber(0)\n let freeSupply = new BigNumber(0)\n let tokenPrice = new BigNumber(0)\n if (lendType === LendType.LEND) {\n maxLendAmount = await providerUtils.getTokenBalanceOfUser(provider, asset)\n } else {\n const { contractsSource, helperContract, chainId } =\n providerUtils.getDependenciesStrict(provider)\n\n const assetContract = contractsSource.getITokenContract(asset)\n const itokenAddress = assetUtils.getITokenAddress(chainId, asset)\n const precision = assetUtils.getDecimals(provider.currentChainId, asset)\n\n tokenPrice = await assetContract.tokenPrice().callAsync()\n maxTokenAmount = await providerUtils.getITokenBalanceOfUser(provider, asset)\n freeSupply = (await helperContract.marketLiquidity([itokenAddress]).callAsync())[0].div(\n 10 ** precision\n )\n userLentBalance = maxTokenAmount.multipliedBy(tokenPrice).dividedBy(10 ** 18)\n\n if (freeSupply.lt(userLentBalance)) {\n maxLendAmount = freeSupply\n maxTokenAmount = maxTokenAmount.multipliedBy(freeSupply).div(userLentBalance)\n } else {\n maxLendAmount = userLentBalance\n }\n }\n\n return { maxLendAmount, maxTokenAmount, tokenPrice, freeSupply, userLentBalance }\n}\n\nexport interface IUserYield {\n asset: Asset\n /** User balance in underlying token, including profits */\n equity: BigNumber\n profit: BigNumber\n iTokenAddress: string\n iTokenPrice: BigNumber\n iTokenBalance: BigNumber\n userItokenPrice: BigNumber\n}\n\n/**\n * Note that values are already divided by the precision\n */\nasync function getLendProfits(provider: AnyProvider, assets: Asset[]): Promise {\n const { helperContract, chainId, userAddress } = providerUtils.getDependenciesStrict(provider)\n const itokenAddresses = assetUtils.getITokenAddresses(chainId, assets)\n const balances = await helperContract.balanceOf(itokenAddresses, userAddress).callAsync()\n\n if (balances.length === 0) {\n return []\n }\n let userItokens: IUserYieldApi[] = []\n try {\n userItokens = await bzxApi.getUserItokenPrice({ chainId, address: userAddress })\n } catch (err) {\n console.error('Could not get user itoken price from api', err)\n }\n\n const yields = balances.reduce((acc, balance, i) => {\n if (balance.gt(0)) {\n const asset = assetUtils.wrapNativeAsset(chainId, assets[i])\n const iTokenAddress = assetUtils.getITokenAddress(chainId, asset).toLowerCase()\n const yieldFromApi = userItokens.find((yyield) => yyield.iTokenAddress === iTokenAddress)\n\n const decimals = assetUtils.getDecimals(chainId, assets[i])\n const iTokenBalance = balances[i].div(10 ** decimals)\n const equity = yieldFromApi\n ? iTokenBalance.times(yieldFromApi.iTokenPrice).dp(decimals)\n : new BigNumber(NaN)\n const iTokenPrice = new BigNumber(yieldFromApi ? yieldFromApi.iTokenPrice : NaN)\n const profit = yieldFromApi\n ? new BigNumber(yieldFromApi.iTokenPrice)\n .minus(yieldFromApi.userItokenPrice)\n .times(iTokenBalance)\n : new BigNumber(NaN)\n\n acc.push({\n asset,\n equity,\n profit,\n iTokenBalance,\n iTokenAddress,\n iTokenPrice,\n userItokenPrice: new BigNumber(yieldFromApi ? yieldFromApi.userItokenPrice : NaN),\n })\n }\n return acc\n }, [] as IUserYield[])\n\n return yields\n}\n\n/**\n * Get the interest rate change if user adds or removes liquidity.\n * @param amount (in decimals)\n */\nasync function nextSupplyInterestRate(provider: AnyProvider, asset: Asset, amount: BigNumber) {\n const { chainId, contractsSource } = providerUtils.getDependenciesStrictRead(provider)\n const decimals = assetUtils.getDecimals(chainId, asset)\n const iToken = contractsSource.getITokenContract(asset)\n return (await iToken.nextSupplyInterestRate(amount.times(10 ** decimals)).callAsync()).div(\n 10 ** 18\n )\n}\n\nexport default {\n getLendProfits,\n getLendTokenInterestRates,\n getMaxLendValue,\n nextSupplyInterestRate,\n}\n","export enum stakeableToken {\n 'ooki' = 'ooki',\n 'iooki' = 'iooki',\n 'vbzrx' = 'vbzrx',\n 'slp_ooki_eth' = 'slp_ooki_eth',\n}\n\nexport enum unstakeableToken {\n 'ooki' = 'ooki',\n 'iooki' = 'iooki',\n 'vbzrx' = 'vbzrx',\n 'slp_ooki_eth' = 'slp_ooki_eth',\n}\n\n/**\n * Any token related to staking that user may have in his wallet\n */\nexport enum stakingWalletToken {\n 'ooki' = 'ooki',\n 'iooki' = 'iooki',\n 'vbzrx' = 'vbzrx',\n 'slp_ooki_eth' = 'slp_ooki_eth',\n 'crv' = 'crv',\n}\n","/**\n * Helpers to get the svg code of an icon that is present inside the svg sprite we generate\n */\n\nfunction isStyleNode(element: Element): element is HTMLStyleElement {\n return element.tagName === 'style'\n}\n\nfunction isNodeElement(node: Node): node is Element {\n return node.nodeType === Node.ELEMENT_NODE\n}\n\n/**\n * Sanitize specific styles that are known to be safe. Avoid XSS\n */\nfunction sanitizeStyles(styles: string) {\n // Allow specific styles that are known to be safe\n // and remove potentially harmful ones\n styles = styles.replace(/(^|[^-])font-family:/g, '$1')\n styles = styles.replace(/(^|[^-])fill:/g, '$1')\n styles = styles.replace(/(^|[^-])stroke:/g, '$1')\n styles = styles.replace(/(^|[^-])stroke-width:/g, '$1')\n return styles\n}\n\n/**\n * Sanitize svg code. Avoid XSS\n */\nfunction sanitize(node: Node) {\n if (isNodeElement(node)) {\n // Remove any elements that are not allowed\n if (node.tagName === 'script') {\n node.remove()\n }\n // Remove any attributes that are not allowed\n for (let i = 0; i < node.attributes.length; i++) {\n const attr = node.attributes[i]\n if (attr.name.startsWith('on')) {\n node.removeAttribute(attr.name)\n }\n }\n // Sanitize specific styles that are known to be safe\n if (isStyleNode(node)) {\n node.textContent = sanitizeStyles(node.textContent || '')\n } else {\n // Remove any styles that are not allowed\n const styles = node.getAttribute('style')\n if (styles) {\n const sanitizedStyles = sanitizeStyles(styles)\n if (sanitizedStyles) {\n node.setAttribute('style', sanitizedStyles)\n } else {\n node.removeAttribute('style')\n }\n }\n }\n // Recursively sanitize child nodes\n for (let i = 0; i < node.childNodes.length; i++) {\n sanitize(node.childNodes[i])\n }\n }\n}\n\n/**\n * Get the SVG code for a particular icon in the sprite\n * @param iconName the name of the icon in the sprite (eg: asset spriteLogo)\n */\nexport function getIconSvg(iconName: string) {\n const symbol = document.getElementById(iconName)\n if (!symbol) {\n return ''\n }\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const symbolAttributes = symbol.attributes\n for (let i = 0; i < symbolAttributes.length; i++) {\n svg.setAttribute(symbolAttributes[i].name, symbolAttributes[i].value)\n }\n const symbolChildren = Array.from(symbol.children)\n for (const child of symbolChildren) {\n svg.appendChild(child.cloneNode(true))\n }\n sanitize(svg)\n return svg.outerHTML\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { sleep } from 'app-lib/asyncUtils'\nimport web3Utils from 'web3-utils'\nimport { BaseContract, ContractTxFunctionObj } from '@0x/base-contract'\nimport { JSONRPCRequestPayload } from '@0x/subproviders'\nimport { BigNumber } from '@0x/utils'\nimport { TransactionReceipt, Web3Wrapper } from '@0x/web3-wrapper'\nimport { FulcrumProvider } from '../../../fulcrum/src/services/FulcrumProvider'\nimport appConfig, { chainConfigs, ChainId, isChainSupported } from '../config/appConfig'\nimport Web3ConnectionFactory from '../services/Web3ConnectionFactory'\nimport { getIconSvg } from './svgSpriteUtils'\n\nexport type AnyProvider = FulcrumProvider\n\n/**\n * An helper to get contracts and data related to web3 connection\n * Throws if any dependency is missing.\n */\nexport function getDependenciesStrictRead(provider: AnyProvider) {\n const { contractsSource, web3Wrapper, currentChainId, providerEngine } = provider\n if (!contractsSource) {\n throw new Error('Missing contractsSource')\n }\n if (!web3Wrapper) {\n throw new Error('Missing web3Wrapper')\n }\n if (!currentChainId || !isChainSupported(currentChainId)) {\n throw new Error(`Wrong chainId ${currentChainId}`)\n }\n if (!providerEngine) {\n throw new Error('Missing providerEngine')\n }\n const { currentAccount } = provider\n const helperContract = contractsSource.getHelperContract()\n return {\n contractsSource,\n helperContract,\n web3Wrapper,\n chainId: currentChainId,\n chain: chainConfigs[currentChainId],\n providerEngine,\n userAddress: currentAccount,\n }\n}\n\n/**\n * An helper to get contracts and data related to web3 connection\n * - currentAccount can be '' so we dont want that\n * Throws if any dependency is missing.\n */\nexport function getDependenciesStrict(provider: AnyProvider) {\n const deps = getDependenciesStrictRead(provider)\n const { currentAccount } = provider\n if (!currentAccount) {\n throw new Error('Missing currentAccount')\n }\n return { ...deps, userAddress: currentAccount }\n}\n\nexport function getDependenciesStrictAsset(provider: AnyProvider, asset: Asset) {\n const deps = getDependenciesStrict(provider)\n const erc20Contract = deps.contractsSource.getErc20Contract(asset)\n return { ...deps, erc20Contract }\n}\n\n/**\n * Returns transaction receipt when transaction succeeded\n * Throws error if transaction fails\n */\nexport async function waitForTransactionSuccess(txHash: string, web3Wrapper: Web3Wrapper) {\n return web3Wrapper.awaitTransactionSuccessAsync(txHash, 5000)\n}\n\n/**\n * Helper to get the gas estimate\n * @param task a function that calls estimateGasAsync under the hood\n *\n * Example\n * ```\n * const { gasAmount } = await getGasEstimate(() =>\n * stakingContract.exit.estimateGasAsync({\n * from: account,\n * gas: gasLimit\n * }),\n * {coefficient, fallback}\n * )\n * ```\n */\nexport async function getGasEstimate(\n task: () => Promise,\n gasConfig: { coefficient?: number; fallback?: number }\n): Promise {\n let gasAmountBN\n try {\n const gasAmount = await task()\n gasAmountBN = new BigNumber(gasAmount)\n .times(gasConfig.coefficient || 1)\n .integerValue(BigNumber.ROUND_UP)\n } catch (err) {\n console.error('Failed gas estimate', err)\n gasAmountBN = new BigNumber(gasConfig.fallback || appConfig.gas.gasLimitFallback)\n }\n return gasAmountBN\n}\n\n/**\n * Generic generator to run function calls (sendTransactionAsync)\n * Optionally pass the amount of native token to send with the tx (ETH, BNB, MATIC)\n */\nexport async function* runTx(\n provider: AnyProvider,\n tx: ContractTxFunctionObj,\n contract: BaseContract, // Passing the contract instance is only for debug purposes\n nativeAmountInBaseUnit?: BigNumber\n) {\n const { userAddress, web3Wrapper, chainId } = getDependenciesStrict(provider)\n\n // @ts-ignore\n if (typeof debugTx === 'boolean' && debugTx === true) {\n // Allow to print TX data for debugging. Requires global.debugTx to be defined.\n const token = assetUtils.getAssetFromAddress(chainId, contract.address)\n const debugInfo: any = {\n contractName: contract.contractName,\n contractAddress: contract.address,\n encodedTxData: tx.getABIEncodedTransactionData(),\n }\n if (token !== Asset.UNKNOWN) {\n debugInfo.token = token\n }\n console.log(JSON.stringify(debugInfo, null, 2))\n }\n\n const gasAmount = await getGasEstimate(\n () => tx.estimateGasAsync({ from: userAddress, ...{ value: nativeAmountInBaseUnit } }),\n chainConfigs[chainId].gas.amount\n )\n yield { gasAmount }\n\n const hash = await tx.sendTransactionAsync({\n from: userAddress,\n gas: gasAmount,\n ...{ value: nativeAmountInBaseUnit },\n })\n yield { gasAmount, hash }\n\n const receipt = await waitForTransactionSuccess(hash, web3Wrapper)\n yield { gasAmount, hash, receipt }\n}\n\n/**\n * Note: the amount returned is in wei; not divided by its token precision\n */\nfunction getEthBalance(provider: AnyProvider): Promise {\n const { web3Wrapper, userAddress } = getDependenciesStrict(provider)\n return web3Wrapper.getBalanceInWeiAsync(userAddress)\n}\n\n/**\n * returns amount in base unit\n */\nfunction getErc20Balance(\n provider: AnyProvider,\n contractAddress: string,\n holderAddress?: string\n): Promise {\n const account = holderAddress || provider.currentAccount\n if (!account) {\n throw new Error('Missing account')\n }\n const { contractsSource } = getDependenciesStrictRead(provider)\n const tokenContract = contractsSource.getErc20Contract(contractAddress)\n return tokenContract.balanceOf(account).callAsync()\n}\n\n/**\n * @param amount eg: want to send 10 USDC; BigNumber(10)\n */\nfunction sendErc20(provider: AnyProvider, token: Asset | string, to: string, amount: BigNumber) {\n const { contractsSource, chainId } = getDependenciesStrict(provider)\n const address = web3Utils.isAddress(token)\n ? token\n : assetUtils.getAddress(chainId, token as Asset)\n\n const tokenContract = contractsSource.getErc20Contract(address)\n let decimals = 18\n\n if (web3Utils.isAddress(token)) {\n // TODO fetch decimals onchain\n } else {\n decimals = assetUtils.getDecimals(provider.currentChainId, token as Asset)\n }\n const amountInBaseUnit = amount.times(10 ** decimals)\n const tx = tokenContract.transfer(to, amountInBaseUnit)\n return runTx(provider, tx, tokenContract)\n}\n\n/**\n * Returns the balance of a token in human-readable amount result.\n */\nasync function getTokenBalanceOfUser(\n provider: AnyProvider,\n asset: Asset,\n account?: string\n): Promise {\n let result: BigNumber = new BigNumber(0)\n if (asset === Asset.UNKNOWN) {\n return new BigNumber(0)\n } else if (assetUtils.isNativeTokenForNetwork(provider.currentChainId, asset)) {\n return (await getEthBalance(provider)).div(10 ** 18)\n } else {\n const currentAccount = account ?? provider.currentAccount\n // get erc20 token balance\n const precision = assetUtils.getDecimals(provider.currentChainId, asset)\n const assetErc20Address = assetUtils.getAddress(provider.currentChainId, asset)\n result = await getErc20Balance(provider, assetErc20Address, currentAccount)\n result = result.div(10 ** precision)\n }\n return result\n}\n\nasync function getITokenBalanceOfUser(provider: AnyProvider, asset: Asset): Promise {\n const { chainId } = getDependenciesStrict(provider)\n let result = new BigNumber(0)\n const precision = assetUtils.getDecimals(chainId, asset.replace('v1', '') as Asset)\n const address = assetUtils.getITokenAddress(chainId, asset)\n result = await getErc20Balance(provider, address)\n return result.div(10 ** precision)\n}\n\nconst waitForTransactionMined = async (\n provider: AnyProvider,\n txHash: string\n): Promise => {\n const { web3Wrapper } = getDependenciesStrict(provider)\n return waitForTransactionSuccess(txHash, web3Wrapper)\n}\n\nconst getLocalstorageItem = (item: string) => {\n let response = ''\n try {\n response = localStorage.getItem(item) || ''\n } catch (e) {\n console.error(e)\n }\n return response\n}\n\nconst setLocalstorageItem = (item: string, val: string) => {\n try {\n localStorage.setItem(item, val)\n } catch (e) {\n console.error(e)\n }\n}\n\nconst getCurrentAccount = (provider: AnyProvider): string => {\n return provider.impersonateAddress\n ? provider.impersonateAddress\n : provider.accounts.length > 0 && provider.accounts[0]\n ? provider.accounts[0].toLowerCase()\n : ''\n}\n\n/**\n * Get balances of the user in any wallet. Balances are already divided by precision.\n * @param provider\n * @param userAddress user wallet\n * @param assets a list of assets (tokens) we want to know the balance\n */\nasync function getWalletBalances(provider: AnyProvider, userAddress: string, assets: Asset[]) {\n const { helperContract, chainId } = getDependenciesStrictRead(provider)\n const chain = chainConfigs[chainId]\n const tokens = assets.filter((asset) => asset !== chain.native.asset)\n\n const { addresses, decimals } = tokens.reduce(\n (acc, asset) => {\n const { address, decimals } = assetUtils.getChainDetails(chainId, asset)\n acc.addresses.push(address)\n acc.decimals.push(decimals)\n return acc\n },\n { addresses: [] as string[], decimals: [] as number[] }\n )\n\n const balances = await helperContract.balanceOf(addresses, userAddress).callAsync()\n\n const walletBalances = balances.map((balance, index) => ({\n token: tokens[index],\n amount: balance.div(10 ** decimals[index]),\n }))\n\n if (tokens.length !== assets.length) {\n // Meaning that the native asset was in the list, we need to get its balance differently\n const nativeAmount = await getTokenBalanceOfUser(provider, chain.native.asset)\n walletBalances.push({ token: chain.native.asset, amount: nativeAmount })\n }\n\n return walletBalances\n}\n\nfunction inBaseUnits(chainId: ChainId, asset: Asset, amount: BigNumber) {\n const decimals = assetUtils.getDecimals(chainId, asset)\n return amount.times(10 ** decimals)\n}\n\n/**\n * helper to add token to user wallet for Metamask\n */\nfunction addToken(chainId: ChainId, asset: Asset) {\n const assetInfo = assetUtils.getInfo(chainId, asset)\n const provider = Web3ConnectionFactory.providerEngine\n const svgLogo = getIconSvg(assetUtils.getCommon(asset).spriteLogo)\n const image = svgLogo ? 'data:image/svg+xml,' + escape(svgLogo) : undefined\n // @ts-ignore\n const payload = {\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20', // Initially only supports ERC20, but eventually more!\n options: {\n address: assetInfo.address, // The address that the token is at.\n symbol: asset, // A ticker symbol or shorthand, up to 5 chars.\n decimals: assetInfo.decimals, // The number of decimals in the token\n image, // A string url of the token logo\n },\n },\n } as JSONRPCRequestPayload\n\n provider.request(payload)\n}\n\nfunction wrapNativeToken(provider: AnyProvider, amount: BigNumber) {\n const { contractsSource } = getDependenciesStrict(provider)\n const wrappedNative = contractsSource.getWrappedNativeContract()\n const tx = wrappedNative.deposit()\n return runTx(provider, tx, wrappedNative, amount.times(10 ** 18)) // Assuming all natives are 18 decimals\n}\n\nfunction unwrapNativeToken(provider: AnyProvider, amount: BigNumber) {\n const { contractsSource } = getDependenciesStrict(provider)\n const wrappedNative = contractsSource.getWrappedNativeContract()\n const tx = wrappedNative.withdraw(amount.times(10 ** 18)) // Assuming all natives are 18 decimals\n return runTx(provider, tx, wrappedNative)\n}\n\nexport default {\n addToken,\n getTokenBalanceOfUser,\n getCurrentAccount,\n getDependenciesStrict,\n getDependenciesStrictAsset,\n getDependenciesStrictRead,\n getErc20Balance,\n getEthBalance,\n getITokenBalanceOfUser,\n getLocalstorageItem,\n getWalletBalances,\n inBaseUnits,\n runTx,\n sendErc20,\n setLocalstorageItem,\n sleep,\n unwrapNativeToken,\n waitForTransactionMined,\n waitForTransactionSuccess,\n wrapNativeToken,\n}\n","export { default } from './ExternalLink'\n","enum Asset {\n AAVE = 'AAVE',\n APE = 'APE',\n ARB = 'ARB',\n AUTO = 'AUTO',\n BNB = 'BNB',\n BPT = 'BPT',\n BTCB = 'BTCB',\n BUSD = 'BUSD',\n BZRX = 'BZRX',\n BZRX_BNB = 'BZRX_BNB',\n CAKE = 'CAKE',\n COMP = 'COMP',\n CRV = 'CRV',\n CRV3 = 'CRV3',\n DAI = 'DAI',\n DOGE = 'DOGE',\n ETH = 'ETH',\n FRAX = 'FRAX',\n IAAVE = 'IAAVE',\n IAPE = 'IAPE',\n IARB = 'IARB',\n IAUTO = 'IAUTO',\n IBNB = 'IBNB',\n IBTCB = 'IBTCB',\n IBUSD = 'IBUSD',\n IBZRX = 'IBZRX',\n ICAKE = 'ICAKE',\n ICOMP = 'ICOMP',\n IDAI = 'IDAI',\n IDOGE = 'IDOGE',\n IETH = 'IETH',\n IFRAX = 'IFRAX',\n IKNC = 'IKNC',\n IKNCL = 'IKNCL',\n ILINK = 'ILINK',\n ILRC = 'ILRC',\n IMATIC = 'IMATIC',\n IMIM = 'IMIM',\n IMKR = 'IMKR',\n IOOKI = 'IOOKI',\n IOP = 'IOP',\n ISPELL = 'ISPELL',\n IUNI = 'IUNI',\n IUSDC = 'IUSDC',\n IUSDT = 'IUSDT',\n IWBTC = 'IWBTC',\n IWETH = 'IWETH',\n IYFI = 'IYFI',\n KNC = 'KNC',\n KNCL = 'KNCL',\n LINK = 'LINK',\n LRC = 'LRC',\n MATIC = 'MATIC',\n MIM = 'MIM',\n MKR = 'MKR',\n OOKI = 'OOKI',\n OP = 'OP',\n P125 = 'P125',\n SLP = 'SLP',\n SLP_OOKI_ETH = 'SLP_OOKI_ETH',\n SPELL = 'SPELL',\n STMATIC = 'STMATIC',\n SUSHI = 'SUSHI',\n UNI = 'UNI',\n UNKNOWN = 'UNKNOWN',\n USDC = 'USDC',\n USDT = 'USDT',\n vBZRX = 'vBZRX',\n vOOKI = 'vOOKI',\n WBNB = 'WBNB',\n WBTC = 'WBTC',\n WETH = 'WETH',\n WMATIC = 'WMATIC',\n WSTETH = 'WSTETH',\n YFI = 'YFI',\n}\n\nexport default Asset\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { Button } from 'ui-framework'\n\nexport interface WhyNoSirProps {\n link?: string\n action?: (arg: any) => void\n text: string\n buttonText?: string\n}\n\nexport function WhyNoSir(props: WhyNoSirProps) {\n const imageHeight = 258\n const txtSize = 'txt-size-2'\n\n return (\n
\n
{props.text}
\n
\n \n
\n {props.link && (\n \n {props.buttonText}\n \n )}\n {props.action && (\n \n {props.buttonText}\n \n )}\n
\n )\n}\n\nexport default WhyNoSir\n","import { Asset } from 'app-lib/assetUtils'\nimport React, { Component } from 'react'\nimport { Button, InfoTip } from 'ui-framework'\n\nexport interface IPriceSwitchProps {\n loanAsset: Asset\n collateralAsset: Asset\n selectedAsset: Asset\n textTooltip?: string\n onAssetChange?: (asset: Asset) => void\n}\n\nexport interface IPriceSwitchState {\n isOpened: boolean\n}\n\nexport default class PriceSwitch extends Component {\n constructor(props: IPriceSwitchProps) {\n super(props)\n\n this.state = { isOpened: false }\n }\n\n public componentDidUpdate(\n prevProps: Readonly,\n prevState: Readonly\n ): void {\n if (prevState.isOpened !== this.state.isOpened) {\n if (document.querySelector('.price-switch__wrapper')) {\n const PriceSwitchSelector = document.querySelector('.price-switch__wrapper') as HTMLElement\n const boundingClient = PriceSwitchSelector.getBoundingClientRect()\n PriceSwitchSelector!.style.left = -1 * boundingClient!.left + 'px'\n }\n }\n }\n\n private onSelect = (asset: Asset) => {\n if (this.props.onAssetChange) {\n this.props.onAssetChange(asset)\n }\n this.onClose()\n }\n\n private onClose = () => {\n this.setState({ ...this.state, isOpened: false })\n }\n\n public render() {\n const unselectedAsset =\n this.props.selectedAsset === this.props.loanAsset\n ? this.props.collateralAsset\n : this.props.loanAsset\n\n return (\n
\n {this.state.isOpened ? (\n
\n ) : null}\n
\n this.onSelect(unselectedAsset)}>\n \n {this.props.selectedAsset}/{unselectedAsset}\n \n \n

Click to toggle quote currency. {`${this.props.textTooltip || ''}`}

\n
\n \n {this.state.isOpened ? (\n
\n
\n
this.onSelect(unselectedAsset)}>\n
\n
\n {unselectedAsset}/{this.props.selectedAsset}\n
\n
\n
\n
\n
\n ) : null}\n
\n
\n )\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\n\nexport default class EarnRewardEventNew {\n public static readonly topic0: string =\n '0xe6c5d7a78caa3f3f24c92ef7f180efb19eb4cc6decff0d5b9cbc4d164b718d09'\n public readonly reciever: string //indexed\n public readonly loanId: string //indexed\n public readonly feeType: FeeType //indexed\n public readonly token: Asset\n public readonly amount: BigNumber\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly timestamp: Date\n\n constructor(\n reciever: string,\n loanId: string,\n feeType: number,\n token: Asset,\n amount: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n timestamp: Date\n ) {\n this.reciever = reciever\n this.token = token\n this.loanId = loanId\n this.feeType = feeType\n this.amount = amount\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.timestamp = timestamp\n }\n}\n\nexport enum FeeType {\n Lending,\n Trading,\n Borrowing,\n SettleInterest,\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\n\nexport default class PayTradingFeeEvent {\n public static readonly topic0: string =\n '0xb23479169712c443e6b00fb0cec3506a5f5926f541df4243d313e11c8c5c71ed'\n public readonly payer: string //indexed\n public readonly token: Asset //indexed\n public readonly loanId: string //indexed\n public readonly amount: BigNumber\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly timestamp: Date\n\n constructor(\n payer: string,\n token: Asset,\n loanId: string,\n amount: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n timestamp: Date\n ) {\n this.payer = payer\n this.token = token\n this.loanId = loanId\n this.amount = amount\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.timestamp = timestamp\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\n\nexport default class UnstakeEvent {\n public static readonly topic0: string =\n '0x2cbcd809a4c90d11f8d12c4b6d09986b255ae1e68f54f076c145fbb2185904e1'\n public readonly chainId: ChainId = 1\n public readonly user: string //indexed\n public readonly amount: BigNumber\n public readonly token: Asset\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly timestamp: Date\n\n constructor(\n user: string,\n token: Asset,\n amount: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n timestamp: Date\n ) {\n this.user = user\n this.token = token\n this.amount = amount\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.timestamp = timestamp\n }\n}\n","import React, { CSSProperties } from 'react'\nimport CircleLoader from '../CircleLoader'\n\ninterface ITokenLoaderProps {\n [key: string]: any\n children: React.ReactElement\n size: number\n style?: CSSProperties\n className?: string\n isLoading: boolean\n}\n\nconst TokenLoader = (props: ITokenLoaderProps) => {\n const { isLoading, children, ...otherProps } = props\n if (isLoading) {\n return (\n \n {React.cloneElement(children, { className: 'token-loader--loading' })}\n \n )\n }\n const { size } = otherProps\n return React.cloneElement(children, { style: { height: size + 'px', width: size + 'px' } })\n}\n\nTokenLoader.defaultProps = {\n className: '',\n}\n\nexport default React.memo(TokenLoader)\n","const routeConfig = {\n trade: '/trade',\n tradeChart: '/trade/chart',\n openPositions: '/trade/open-positions',\n tradingHistory: '/trade/history',\n lend: '/lend',\n lendAsset: '/lend/asset',\n lendYields: '/lend/yields',\n stats: '/stats',\n reserve: '/stats/reserve',\n treasury: '/stats/treasury',\n activity: '/stats/activity',\n}\n\nexport default routeConfig\n","/**\n * Sorts array by the field and group elements with the same field\n * Typescript version: https://gist.github.com/robmathers/1830ce09695f759bf2c4df15c29dd22d#gistcomment-3553222\n * Original version: https://stackoverflow.com/a/34890276/8369352\n * @param xs Source Array of objects\n * @param keys Sort keys\n * @returns\n * Examlple: Ex: [{id: 1, group: 'A'}, {id: 2, group: 'B'}, {id: 3, group: 'A'}], 'group'\n * =>\n * {A: [{id: 1, group: 'A'}, {id: 3, group: 'A'}], B: [{id: 2, group: 'B'}]}\n */\nconst groupBy = (arr: T[], keys: (keyof T)[]): { [key: string]: T[] } => {\n return arr.reduce((storage, item) => {\n const objKey = keys.map((key) => `${item[key]}`).join(':')\n if (storage[objKey]) {\n storage[objKey].push(item)\n } else {\n storage[objKey] = [item]\n }\n return storage\n }, {} as { [key: string]: T[] })\n}\n\nexport default {\n groupBy,\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport IBorrowedFundsState from 'bzx-common/src/domain/IBorrowedFundsState'\nimport ManageCollateralRequest from 'bzx-common/src/domain/ManageCollateralRequest'\nimport {\n PositionType,\n TradeType,\n IOpenPositionProps,\n IClosePositionRequest,\n} from 'bzx-common/src/domain/trade.types'\nimport * as mobx from 'mobx'\nimport { BigNumber } from '@0x/utils'\nimport RootStore from '../RootStore'\nimport TradeStore from './TradeStore'\nimport loanUtils from 'bzx-common/src/lib/loanUtils'\nimport tradeUtils, { getPairConfig, IPairConfigDetails } from 'bzx-common/src/lib/tradeUtils'\nimport { ChainId } from 'bzx-common/src/config/chains/chainCommon'\n\nexport default class OpenPosition implements IOpenPositionProps {\n activeTokenLiquidation = Asset.IETH\n activeTokenProfit = Asset.IETH\n baseToken = Asset.IETH\n chainId: ChainId\n collateral = new BigNumber(0)\n /** oracle price of collateral / principal */\n currentPrice = new BigNumber(0)\n isLoading = true\n leverage = 0\n liquidationPrice = new BigNumber(0)\n loan: IBorrowedFundsState\n loanApr = new BigNumber(NaN)\n maintenanceMargin = new BigNumber(0)\n openPrice = new BigNumber(0)\n pairConfig: IPairConfigDetails\n pendingTx = false\n positionType = PositionType.LONG\n positionValue = new BigNumber(0)\n profitCollateralToken = new BigNumber(0)\n profitLoanToken = new BigNumber(0)\n profitUSD = new BigNumber(0)\n quoteToken = Asset.IETH\n rootStore: RootStore\n tradeStore: TradeStore\n value = new BigNumber(0)\n valueChange = new BigNumber(0)\n\n get isLong() {\n return this.positionType === PositionType.LONG\n }\n\n get liquidationPriceSwitch() {\n return this.activeTokenLiquidation === this.loan.collateralAsset\n ? this.liquidationPrice\n : new BigNumber(1).div(this.liquidationPrice)\n }\n\n get collateralizedPercent() {\n return this.loan.collateralizedPercent.multipliedBy(100)\n }\n\n /** get oracle price of collateral / principal */\n async getCurrentPrice() {\n const fp = this.rootStore.fulcrumProvider\n const currentPrice = await tradeUtils.getLoanMarketRate(fp, this.loan, this.isLong)\n this.assign({ currentPrice })\n return currentPrice\n }\n\n setActiveTokenProfit = (asset: Asset) => {\n this.set('activeTokenProfit', asset)\n }\n\n setActiveTokenLiquidation = (asset: Asset) => {\n this.set('activeTokenLiquidation', asset)\n }\n\n onManageClick = () => {\n const loan = this.loan\n if (!loan) {\n return\n }\n const { loanId, collateralAsset, loanAsset } = loan\n const manageCollateralRequest = new ManageCollateralRequest(\n loanId,\n collateralAsset,\n this.collateral,\n false,\n loanAsset,\n this.positionType\n )\n this.tradeStore.requestManageCollateral(manageCollateralRequest)\n }\n\n async closePosition() {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId) {\n return\n }\n const tradeRequest: IClosePositionRequest = {\n dex: this.pairConfig.dexes[0],\n tradeType: TradeType.CLOSE_POSITION,\n baseToken: this.baseToken,\n quoteToken: this.quoteToken,\n depositToken: this.baseToken, // avoid an issue until close and open requests are split\n positionType: this.positionType,\n leverage: this.leverage,\n amount: new BigNumber(0),\n loanId: this.loan.loanId,\n returnTokenIsCollateral: false,\n loanDataBytes: '0x',\n }\n this.tradeStore.requestClosePosition(tradeRequest, this)\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof IOpenPositionProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n /** Get how much interest (%) the user is paying currently */\n async getLoanApr() {\n const fp = this.rootStore.fulcrumProvider\n const loanApr = await loanUtils.getBorrowInterestRate(fp, this.loan.loanAsset)\n this.assign({ loanApr })\n return loanApr\n }\n\n syncData() {\n let openValue = new BigNumber(0)\n let valueChange = new BigNumber(0)\n const { chainId } = this.rootStore.web3Connection\n if (!chainId) {\n return\n }\n if (this.positionType === PositionType.LONG) {\n const collateralAssetDecimals = assetUtils.getDecimals(chainId, this.loan.collateralAsset)\n openValue = this.loan.loanData.collateral\n .div(10 ** collateralAssetDecimals)\n .times(this.openPrice)\n valueChange = this.value.minus(openValue).div(openValue).times(100)\n } else {\n const loanAssetDecimals = assetUtils.getDecimals(chainId, this.loan.loanAsset)\n openValue = this.loan.loanData.principal.div(10 ** loanAssetDecimals).times(this.openPrice)\n valueChange = this.value.minus(openValue).div(openValue).times(100)\n }\n\n this.assign({ valueChange, isLoading: false })\n }\n\n init() {\n const { chainId } = this.rootStore.web3Connection\n\n chainId &&\n this.set(\n 'activeTokenLiquidation',\n assetUtils.getDefaultActiveToken(chainId, this.baseToken, this.quoteToken)\n )\n\n this.setActiveTokenProfit(this.baseToken)\n this.syncData()\n }\n\n constructor(rootStore: RootStore, position: IOpenPositionProps) {\n const { baseToken, quoteToken, chainId } = position\n this.rootStore = rootStore\n this.tradeStore = rootStore.tradeStore\n this.chainId = position.chainId // Make TS happy\n this.pairConfig = getPairConfig({ baseToken, quoteToken }, chainId)\n this.assign(position)\n this.loan = position.loan\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n this.init()\n }\n}\n","/**\n * Escape characters that could cause trouble when string is converted in regular expression.\n */\nfunction escapeString(str: string) {\n return str.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&')\n}\n\n/**\n * Create a regular expression from a list of strings.\n * This can be used for whitelisting.\n * The regex returned is not global. Methods like test() can be called multiple times.\n * @param strings eg: ['example.com', 'anotherdomain.com']\n * @returns A regular expression like /example\\.com|anotherdomain\\.com/mi\n */\nfunction regexFromStrings(strings: string[]) {\n return new RegExp(strings.map(escapeString).join('|'), 'mi')\n}\n\n/**\n * Get a function that can check if a word is present in a particular list\n * Takes into account special characters and is case insensitive.\n * @param strings List of words\n */\nfunction getWordListCheck(strings: string[]) {\n const regex = regexFromStrings(strings)\n return function checkWord(word: string) {\n return regex.test(word)\n }\n}\n\n/**\n * First character is alphanumeric, then 2 to 18 characters, last character is alphanum\n * [a-zA-Z0-9] an alphanumeric THEN (\n * _(?!\\.) a _ not followed by a . OR\n * \\.(?!_) a . not followed by a _ OR\n * [a-zA-Z0-9] an alphanumeric ) FOR\n * {2,18} minimum 2 to maximum 18 times THEN\n * [a-zA-Z0-9] an alphanumeric\n */\nfunction matchUserName(str: string) {\n const regex = /[a-zA-Z0-9](_(?!(\\.|_))|\\.(?!(_|\\.))|[a-zA-Z0-9]){2,18}[a-zA-Z0-9]/g\n return str.match(regex)\n}\n\n/**\n * [a-zA-Zа-яА-Я] first character is letter only\n * [^a-zA-Zа-яА-Я-Z0-9] an alphanumeric FOR\n * {2,18} minimum 3 to maximum 18 times\n * @returns string with warning\n */\nfunction matchAlias(str: string) {\n const regex = /^[a-zA-Zа-яА-Я-Z0-9]{3,18}$/g\n\n return str.match(regex)\n ? str[0].match(/[a-zA-Zа-яА-Я]/)\n ? ''\n : 'First character is a letter only'\n : 'Please use only letters or numbers'\n}\n\nexport default {\n escapeString,\n matchAlias,\n matchUserName,\n regexFromStrings,\n getWordListCheck,\n}\n","import _ from 'lodash'\nimport { chainConfigs, ChainId, getBlockExplorerAddressLink, UdfFeed } from '../../config/appConfig'\nimport Asset from './Asset'\nimport assetsChainDetails from './assetsChainDetails.json'\nimport assetsCommon, { ICommonAssetDetails } from './assetsCommon'\n\nexport interface IAssetInfo extends ICommonAssetDetails {\n address: string\n decimals: number\n}\n\n/**\n * Get non-chain specific details about the asset + UI related config,\n * **throws** an error if asset not found.\n *\n * `{displayName, spriteLogo}`\n */\nexport function getCommon(asset: Asset) {\n const common = assetsCommon[asset]\n if (!common) {\n throw new Error(`${asset} token not found`)\n }\n return common\n}\n\n/**\n * Get chain specific details of an asset, **throws** an error if asset not found.\n */\nexport function getChainDetails(chainId: ChainId, asset: Asset) {\n // @ts-ignore\n const onChain: { address: string; decimals: number } = assetsChainDetails[chainId][asset]\n if (!onChain) {\n throw new Error(`${asset} token not found for chain ${chainId}`)\n }\n\n return onChain\n}\n\n/**\n * Get decimals of an asset, **throws** an error if asset not found.\n */\nexport function getDecimals(chainId: ChainId, asset: Asset) {\n // @ts-ignore\n const onChain: { address: string; decimals: number } = assetsChainDetails[chainId][asset]\n if (!onChain) {\n throw new Error(`${asset} token not found for chain ${chainId}`)\n }\n return onChain.decimals\n}\n\n/**\n * Get an asset common info + chain specific info, **throws** an error if asset not found.\n *\n * `{displayName, spriteLogo, address, decimals}`\n */\nexport function getInfo(chainId: ChainId, asset: Asset): IAssetInfo {\n // @ts-ignore\n const onChain: { address: string; decimals: number } = assetsChainDetails[chainId][asset]\n if (!onChain) {\n throw new Error(`${asset} token not found for chain ${chainId}`)\n }\n const common = assetsCommon[asset]\n return Object.assign({ ...onChain }, common)\n}\n\nexport function getTokensInfo(chainId: ChainId, assets: Asset[]): IAssetInfo[] {\n return assets.map((asset) => getInfo(chainId, asset))\n}\n\n/**\n * Get address of an asset, **throws** an error if asset not found.\n */\nexport function getAddress(chainId: ChainId, asset: Asset) {\n // @ts-ignore\n const onChain: { address: string; decimals: number } = assetsChainDetails[chainId][asset]\n if (!onChain) {\n throw new Error(`${asset} token not found for chain ${chainId}`)\n }\n return onChain.address\n}\n\nexport function getAddresses(chainId: ChainId, assets: Asset[]) {\n return assets.map((asset) => getAddress(chainId, asset))\n}\n\n/**\n * Find the asset corresponding to the address.\n * Returns Asset.UNKNOWN if not found.\n * eg: useful for gettings asset in blockchain events\n */\nexport function getAssetFromAddress(chainId: ChainId, address: string) {\n // TODO: fix a bug with this right now for Wrapped / Native tokens\n // eg: ETH is in the list of Asset with the WETH address. (ETH / WETH mix)\n // Consequence: this function can return ETH while it is expected to be WETH.\n const assetDetails = _.find(\n assetsChainDetails[chainId],\n (asset) => asset.address.toLowerCase() === address.toLowerCase()\n )\n return (assetDetails?.asset as Asset) || Asset.UNKNOWN\n}\n\n/**\n * Find the asset corresponding to the address.\n * Throws an error if the asset/address is not found.\n */\nexport function getAssetStrict(chainId: ChainId, address: string) {\n const asset = getAssetFromAddress(chainId, address)\n if (asset === Asset.UNKNOWN) {\n throw new Error(`No Matching Asset for ${address} on chain ${chainId}`)\n }\n return asset\n}\n\n/**\n * `getAssetByIToken(1, Asset.IUSDT) => Asset.USDT`\n * Throws an error if the asset is not found\n */\nexport function getAssetByIToken(chainId: ChainId, iTokenAsset: Asset): Asset {\n let underlying = iTokenAsset.substring(1) as Asset\n if (chainConfigs[chainId].native.asset === underlying) {\n underlying = chainConfigs[chainId].native.wrapped\n }\n // @ts-ignore\n const asset = assetsChainDetails[chainId][underlying].asset\n if (!asset) {\n throw new Error(`Asset not found ${asset}`)\n }\n return asset\n}\n\n/**\n * `getUnderlyingAssetFromItokenAddress(1, 0x1234...) => Asset.USDT`\n * where the address is the address of IUSDT\n */\nexport function getUnderlyingAssetFromItokenAddress(chainId: ChainId, iTokenAddress: string) {\n const iToken = getAssetStrict(chainId, iTokenAddress)\n return getAssetByIToken(chainId, iToken)\n}\n\n/**\n * Get address of iToken given underlying asset.\n * Throws error if asset is not found\n */\nexport function getITokenAddress(chainId: ChainId, underlyingAsset: Asset) {\n return getAddress(chainId, `I${underlyingAsset}` as Asset)\n}\n\n/**\n * Get addresses of multiple iTokens given underlying assets.\n * Throws error if asset is not found\n */\nexport function getITokenAddresses(chainId: ChainId, assets: Asset[]): string[] {\n return assets.map((asset) => getITokenAddress(chainId, asset))\n}\n\n/** Get itoken full info from underlying asset\n * Throws error if not found.\n */\nexport function getItokenInfo(chainId: ChainId, underlyingAsset: Asset) {\n const itoken = `I${underlyingAsset}` as Asset\n return getInfo(chainId, itoken)\n}\n\nexport const stableCoins = [Asset.DAI, Asset.USDC, Asset.USDT, Asset.BUSD, Asset.MIM, Asset.FRAX]\n\nexport const isNativeTokenForNetwork = (chainId: ChainId, token: Asset) => {\n return token === chainConfigs[chainId].native.asset\n}\n\nexport const getDefaultActiveToken = (\n chainId: ChainId,\n loanToken: Asset,\n collateralToken: Asset\n): Asset => {\n const { stableCoins } = chainConfigs[chainId]\n const mainTokens = [Asset.ETH, Asset.WBTC, Asset.BTCB]\n let activeToken: Asset\n\n activeToken = stableCoins.concat(mainTokens).includes(collateralToken)\n ? loanToken\n : collateralToken\n if (mainTokens.includes(loanToken) && stableCoins.includes(collateralToken)) {\n activeToken = loanToken\n }\n if (mainTokens.includes(collateralToken) && stableCoins.includes(loanToken)) {\n activeToken = collateralToken\n }\n return activeToken\n}\n\nconst wethToEth = (asset: Asset): Asset => {\n return asset === Asset.ETH || asset === Asset.WETH ? Asset.ETH : asset\n}\n\nconst unwrapNativeAsset = (chainId: ChainId, asset: Asset): Asset => {\n return isNativeTokenForNetwork(chainId, asset) ? (asset.substring(1) as Asset) : asset\n}\n\nconst wrapNativeAsset = (chainId: ChainId, asset: Asset): Asset => {\n return isNativeTokenForNetwork(chainId, asset) ? (`W${asset}` as Asset) : asset\n}\n\nconst assetsMapForChart: Record = {\n KYBER: [Asset.WETH],\n BINANCE: [Asset.WETH, Asset.WBTC],\n}\n\nconst checkWethToken = (udfFeed: UdfFeed, asset: Asset) => {\n return assetsMapForChart[udfFeed].includes(asset) ? (asset.substring(1) as Asset) : asset\n}\n\nexport function getItokenAddressInfo(chainId: ChainId, asset: Asset) {\n try {\n // we need a try catch because the addition of STMATIC broke assumptions.\n // there is no itoken for STMATIC. TODO: need a nicer solution.\n const { address: iTokenAddress, decimals } = getItokenInfo(chainId, asset)\n const iTokenExplorerUrl = getBlockExplorerAddressLink(chainId, iTokenAddress)\n return { decimals, iTokenAddress, iTokenExplorerUrl }\n } catch (err) {\n return { decimals: 18, iTokenAddress: '', iTokenExplorerUrl: '' }\n }\n}\n\nexport function isStablePair(pair: [Asset, Asset] | { baseToken: Asset; quoteToken: Asset }) {\n if (Array.isArray(pair)) {\n return stableCoins.includes(pair[0]) && stableCoins.includes(pair[1])\n }\n return stableCoins.includes(pair.baseToken) && stableCoins.includes(pair.quoteToken)\n}\n\nexport default {\n checkWethToken,\n getAddress,\n getAddresses,\n getAssetByIToken,\n getAssetFromAddress,\n getAssetStrict,\n getChainDetails,\n getCommon,\n getDecimals,\n getDefaultActiveToken,\n getInfo,\n getITokenAddress,\n getITokenAddresses,\n getItokenInfo,\n getTokensInfo,\n getUnderlyingAssetFromItokenAddress,\n isNativeTokenForNetwork,\n isStablePair,\n stableCoins,\n unwrapNativeAsset,\n wethToEth,\n wrapNativeAsset,\n}\n","import providerUtils from 'app-lib/providerUtils'\nimport { ChainId } from 'bzx-common/src/config/chains/chainCommon'\nimport ContractsSource from 'bzx-common/src/contracts/ContractsSource'\nimport { IProviderEvents } from 'bzx-common/src/domain/events'\nimport { ProviderType } from 'bzx-common/src/domain/ProviderTypeDictionary'\nimport Web3ConnectionFactory from 'bzx-common/src/services/Web3ConnectionFactory'\nimport { providers } from 'ethers5'\nimport { TypedEmitter } from 'tiny-typed-emitter'\nimport { Web3ProviderEngine } from '@0x/subproviders'\nimport { Web3Wrapper } from '@0x/web3-wrapper'\n\nexport class FulcrumProvider extends TypedEmitter {\n public impersonateAddress = localStorage.getItem('impersonateAddress') || ''\n public providerType: ProviderType = ProviderType.None\n public providerEngine: Web3ProviderEngine | null = null\n public web3Wrapper: Web3Wrapper | null = null\n public contractsSource: ContractsSource | null = null\n public accounts: string[] = []\n public get currentAccount(): string {\n return providerUtils.getCurrentAccount(this)\n }\n\n public get currentChainId() {\n return Web3ConnectionFactory.networkId as ChainId\n }\n\n public get ethersProvider(): providers.BaseProvider {\n return Web3ConnectionFactory.etherProvider\n }\n\n constructor() {\n super()\n this.setMaxListeners(1000)\n }\n}\n\nexport default new FulcrumProvider()\n","import Asset from './Asset'\n\nexport interface ICommonAssetDetails {\n asset: Asset\n displayName: string\n spriteLogo: string\n}\n\nconst commons: Record = {\n AAVE: { asset: Asset.AAVE, displayName: 'AAVE', spriteLogo: 'ic_token_aave' },\n APE: { asset: Asset.APE, displayName: 'APE', spriteLogo: 'token-ape' },\n ARB: { asset: Asset.ARB, displayName: 'ARB', spriteLogo: 'arbitrum-logo' },\n AUTO: { asset: Asset.AUTO, displayName: 'AUTO', spriteLogo: 'ic_token_auto' },\n BNB: { asset: Asset.BNB, displayName: 'BNB', spriteLogo: 'ic_token_bnb' },\n BPT: { asset: Asset.BPT, displayName: 'BPT', spriteLogo: 'ic_token_bpt' },\n BTCB: { asset: Asset.BTCB, displayName: 'BTCB', spriteLogo: 'ic_token_btc' },\n BUSD: { asset: Asset.BUSD, displayName: 'BUSD', spriteLogo: 'ic_token_busd' },\n BZRX_BNB: { asset: Asset.BZRX_BNB, displayName: 'BZRX/BNB', spriteLogo: 'ic_token_bzrx_bnb' },\n BZRX: { asset: Asset.BZRX, displayName: 'BZRX', spriteLogo: 'ic_token_bzrx' },\n CAKE: { asset: Asset.CAKE, displayName: 'CAKE', spriteLogo: 'ic_token_cake' },\n COMP: { asset: Asset.COMP, displayName: 'COMP', spriteLogo: 'ic_token_comp' },\n CRV: { asset: Asset.CRV, displayName: 'CRV', spriteLogo: 'token-crv' },\n CRV3: { asset: Asset.CRV3, displayName: '3CRV', spriteLogo: 'token-crv' },\n DAI: { asset: Asset.DAI, displayName: 'DAI', spriteLogo: 'ic_token_dai' },\n DOGE: { asset: Asset.DOGE, displayName: 'DOGE', spriteLogo: 'ic_token_doge' },\n ETH: { asset: Asset.ETH, displayName: 'ETH', spriteLogo: 'ic_token_eth' },\n FRAX: { asset: Asset.FRAX, displayName: 'FRAX', spriteLogo: 'token-frax' },\n IAAVE: { asset: Asset.IAAVE, displayName: 'iAAVE', spriteLogo: 'ic_token_iaave' },\n IAPE: { asset: Asset.IAPE, displayName: 'iAPE', spriteLogo: 'token-ape' },\n IARB: { asset: Asset.IARB, displayName: 'iARB', spriteLogo: 'arbitrum-logo' },\n IAUTO: { asset: Asset.IAUTO, displayName: 'iAUTO', spriteLogo: 'ic_token_iauto' },\n IBNB: { asset: Asset.IBNB, displayName: 'iBNB', spriteLogo: 'ic_token_ibnb' },\n IBTCB: { asset: Asset.IBTCB, displayName: 'iBTCB', spriteLogo: 'ic_token_ibtc' },\n IBUSD: { asset: Asset.IBUSD, displayName: 'iBUSD', spriteLogo: 'ic_token_ibusd' },\n IBZRX: { asset: Asset.IBZRX, displayName: 'iBZRX', spriteLogo: 'ic_token_ibzrx' },\n ICAKE: { asset: Asset.ICAKE, displayName: 'iCAKE', spriteLogo: 'ic_token_icake' },\n ICOMP: { asset: Asset.ICOMP, displayName: 'iCOMP', spriteLogo: 'ic_token_comp' },\n IDAI: { asset: Asset.IDAI, displayName: 'iDAI', spriteLogo: 'ic_token_dai' },\n IDOGE: { asset: Asset.IDOGE, displayName: 'iDOGE', spriteLogo: 'ic_token_idoge' },\n IETH: { asset: Asset.IETH, displayName: 'iETH', spriteLogo: 'ic_token_ieth' },\n IFRAX: { asset: Asset.IFRAX, displayName: 'iFRAX', spriteLogo: 'token-frax' },\n IKNC: { asset: Asset.IKNC, displayName: 'iKNC', spriteLogo: 'ic_token_knc' },\n IKNCL: { asset: Asset.IKNCL, displayName: 'iKNCL', spriteLogo: 'ic_token_kncl' },\n ILINK: { asset: Asset.ILINK, displayName: 'iLINK', spriteLogo: 'ic_token_ilink' },\n ILRC: { asset: Asset.ILRC, displayName: 'iLRC', spriteLogo: 'ic_token_lrc' },\n IMATIC: { asset: Asset.IMATIC, displayName: 'iMATIC', spriteLogo: 'ic_token_imatic' },\n IMIM: { asset: Asset.IMIM, displayName: 'iMIM', spriteLogo: 'token-mim' },\n IMKR: { asset: Asset.IMKR, displayName: 'iMKR', spriteLogo: 'ic_token_mkr' },\n IOOKI: { asset: Asset.IOOKI, displayName: 'iOOKI', spriteLogo: 'token-iooki' },\n IOP: { asset: Asset.IOP, displayName: 'iOP', spriteLogo: 'chain-optimism' },\n ISPELL: { asset: Asset.ISPELL, displayName: 'iSPELL', spriteLogo: 'token-spell' },\n IUNI: { asset: Asset.IUNI, displayName: 'iUNI', spriteLogo: 'ic_token_uni' },\n IUSDC: { asset: Asset.IUSDC, displayName: 'iUSDC', spriteLogo: 'ic_token_usdc' },\n IUSDT: { asset: Asset.IUSDT, displayName: 'iUSDT', spriteLogo: 'ic_token_iusdt' },\n IWBTC: { asset: Asset.IWBTC, displayName: 'iWBTC', spriteLogo: 'ic_token_wbtc' },\n IWETH: { asset: Asset.IWETH, displayName: 'iWETH', spriteLogo: 'ic_token_ieth' },\n IYFI: { asset: Asset.IYFI, displayName: 'iYFI', spriteLogo: 'ic_token_yfi' },\n KNC: { asset: Asset.KNC, displayName: 'KNC', spriteLogo: 'ic_token_knc' },\n KNCL: { asset: Asset.KNCL, displayName: 'KNCL', spriteLogo: 'ic_token_kncl' },\n LINK: { asset: Asset.LINK, displayName: 'LINK', spriteLogo: 'ic_token_link' },\n LRC: { asset: Asset.LRC, displayName: 'LRC', spriteLogo: 'ic_token_lrc' },\n MATIC: { asset: Asset.MATIC, displayName: 'MATIC', spriteLogo: 'ic_token_matic' },\n MIM: { asset: Asset.MIM, displayName: 'MIM', spriteLogo: 'token-mim' },\n MKR: { asset: Asset.MKR, displayName: 'MKR', spriteLogo: 'ic_token_mkr' },\n OOKI: { asset: Asset.OOKI, displayName: 'OOKI', spriteLogo: 'token-ooki' },\n OP: { asset: Asset.OP, displayName: 'OP', spriteLogo: 'chain-optimism' },\n P125: { asset: Asset.P125, displayName: 'P125', spriteLogo: 'token-p125' },\n SLP_OOKI_ETH: { asset: Asset.SLP_OOKI_ETH, displayName: 'OOKI/ETH SLP', spriteLogo: 'token-slp' },\n SLP: { asset: Asset.SLP, displayName: 'SLP', spriteLogo: 'token-slp' },\n SPELL: { asset: Asset.SPELL, displayName: 'SPELL', spriteLogo: 'token-spell' },\n STMATIC: { asset: Asset.STMATIC, displayName: 'stMATIC', spriteLogo: 'token-stmatic' },\n SUSHI: { asset: Asset.SUSHI, displayName: 'SUSHI', spriteLogo: 'token-sushi' },\n UNI: { asset: Asset.UNI, displayName: 'UNI', spriteLogo: 'ic_token_uni' },\n USDC: { asset: Asset.USDC, displayName: 'USDC', spriteLogo: 'ic_token_usdc' },\n USDT: { asset: Asset.USDT, displayName: 'USDT', spriteLogo: 'ic_token_usdt' },\n vBZRX: { asset: Asset.vBZRX, displayName: 'vBZRX', spriteLogo: 'token-vbzrx' },\n vOOKI: { asset: Asset.vOOKI, displayName: 'vOOKI', spriteLogo: 'token-ooki' },\n WBNB: { asset: Asset.WBNB, displayName: 'WBNB', spriteLogo: 'ic_token_bnb' },\n WBTC: { asset: Asset.WBTC, displayName: 'WBTC', spriteLogo: 'ic_token_wbtc' },\n WETH: { asset: Asset.WETH, displayName: 'WETH', spriteLogo: 'ic_token_eth' },\n WMATIC: { asset: Asset.WMATIC, displayName: 'WMATIC', spriteLogo: 'ic_token_matic' },\n WSTETH: { asset: Asset.WSTETH, displayName: 'wstETH', spriteLogo: 'token-wsteth' },\n YFI: { asset: Asset.YFI, displayName: 'YFI', spriteLogo: 'ic_token_yfi' },\n // TODO: Not sure what to do about this one.\n UNKNOWN: { asset: Asset.UNKNOWN, displayName: '', spriteLogo: '' },\n}\n\nexport default commons\n","import { inject } from 'mobx-react'\nimport React from 'react'\nimport { Icon } from 'ui-framework'\n\ntype Theme = 'light' | 'dark'\n\nfunction applyTheme(theme: Theme) {\n document.documentElement.setAttribute('data-theme', theme)\n localStorage.setItem('theme', theme)\n}\n\nexport function ThemeSwitch(props: any) {\n const { rootStore } = props\n\n const [theme, setTheme] = React.useState(\n (localStorage.getItem('theme') || 'dark') as Theme\n )\n\n React.useEffect(() => {\n applyTheme(theme)\n rootStore.uiStore.set('theme', theme)\n }, [theme])\n\n function onChange() {\n setTheme(theme === 'dark' ? 'light' : 'dark')\n }\n\n return (\n
\n \n
\n )\n}\n\nexport default inject('rootStore')(ThemeSwitch)\n","\n'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./types.cjs.production.min.js')\n} else {\n module.exports = require('./types.cjs.development.js')\n}\n","import * as localforage from 'localforage'\n\n/**\n * Small wrapper on top of localforage that allows to get a default value if not found\n */\nexport default class LocalStorage {\n store: typeof localforage\n storeKey: string\n\n /**\n * Get value from store\n */\n async get(key: string, defaultValue: T): Promise {\n const value: T | null = await this.store.getItem(key)\n return value === null ? defaultValue : value\n }\n\n /**\n * Save item to store\n */\n save(key: string, value: T): Promise {\n return this.store.setItem(key, value)\n }\n\n /**\n * Delete item from store\n */\n delete(key: string): Promise {\n return this.store.removeItem(key)\n }\n\n constructor(storeKey: string) {\n this.storeKey = storeKey\n this.store = localforage.createInstance({\n name: storeKey,\n })\n }\n}\n","import _axios from 'axios'\nconst API_URL = 'https://api.tally.xyz/query'\n\nconst axios = _axios.create({\n baseURL: API_URL,\n timeout: 15000,\n})\n\ninterface IOokiProposals {\n governance: {\n id: string\n organization: { visual: { icon: string } }\n quorum: 'string'\n stats: { proposals: { failed: number; passed: number } }\n }\n proposals: {\n id: string\n description: string\n statusChanges: { type: string }[]\n voteStats: {\n percent: number\n support: 'FOR' | 'AGAINST' | 'ABSTAIN'\n votes: string\n weight: string\n }[]\n }[]\n}\n\n/**\n * Try to get the original error message from server.\n * @param {Error} error Error from a request\n */\nfunction normalizeRequestError(error: any) {\n if (error && error.response && error.response.data) {\n const errorData = error.response.data\n if (errorData.message) {\n error.message = errorData.message\n }\n if (errorData.errorCode) {\n error.code = errorData.errorCode\n }\n }\n return error\n}\n\nasync function getOokiProposals(): Promise {\n const query = {\n query: `\n query GovernanceProposals($sort: ProposalSort, $chainId: ChainID!, $pagination: Pagination, $governanceId: AccountID!, $governanceIds: [AccountID!], $proposerIds: [AccountID!]) {\n proposals(\n sort: $sort\n chainId: $chainId\n pagination: $pagination\n governanceIds: $governanceIds\n proposerIds: $proposerIds\n ) {\n id\n description\n statusChanges {\n type\n }\n tallyProposal {\n id\n createdAt\n status\n }\n voteStats {\n votes\n weight\n support\n percent\n }\n }\n governance(id: $governanceId) {\n id\n quorum\n organization {\n visual {\n icon\n }\n }\n stats {\n proposals {\n passed\n failed\n }\n }\n }}\n `,\n variables: {\n pagination: { limit: 5, offset: 0 },\n sort: { field: 'START_BLOCK', order: 'DESC' },\n chainId: 'eip155:1',\n governanceId: 'eip155:1:0x3133b4F4dcffc083724435784fEFAD510FA659c6',\n governanceIds: ['eip155:1:0x3133b4F4dcffc083724435784fEFAD510FA659c6'],\n },\n }\n try {\n const { data } = await axios.post('', query)\n return data.data\n } catch (err) {\n throw normalizeRequestError(err)\n }\n}\n\nexport default {\n getOokiProposals,\n}\n","import tallyApi from 'app-lib/apis/tallyApi'\nimport { AnyProvider } from 'app-lib/providerUtils'\nimport { BigNumber } from '@0x/utils'\n\nexport interface IOnchainProposal {\n id: BigNumber\n proposer: string\n eta: BigNumber\n startBlock: BigNumber\n endBlock: BigNumber\n votes: {\n for: BigNumber\n against: BigNumber\n abstain: BigNumber\n }\n description: string\n canceled: boolean\n executed: boolean\n status: string\n}\n\nexport default class DaoService {\n provider: AnyProvider\n\n /**\n * Get onchain proposals using Tally api\n */\n async getOnchainProposals(): Promise {\n const proposals = await tallyApi.getOokiProposals()\n return proposals.proposals.map((prop) => {\n return {\n id: new BigNumber(prop.id),\n description: prop.description,\n proposer: '',\n eta: new BigNumber(0),\n startBlock: new BigNumber(0),\n endBlock: new BigNumber(0),\n votes: {\n for: new BigNumber(\n prop.voteStats.find((vote) => vote.support === 'FOR')?.weight || 0\n ).div(10 ** 18),\n against: new BigNumber(\n prop.voteStats.find((vote) => vote.support === 'AGAINST')?.weight || 0\n ).div(10 ** 18),\n abstain: new BigNumber(\n prop.voteStats.find((vote) => vote.support === 'ABSTAIN')?.weight || 0\n ).div(10 ** 18),\n },\n canceled: false,\n status:\n prop.statusChanges.length > 0\n ? prop.statusChanges[prop.statusChanges.length - 1].type\n : 'Pending',\n executed: prop.statusChanges[prop.statusChanges.length - 1].type === 'EXECUTED',\n }\n })\n }\n\n constructor(provider: AnyProvider) {\n this.provider = provider\n }\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport providerUtils from 'app-lib/providerUtils'\nimport { BigNumber } from '@0x/utils'\nimport { FulcrumProvider } from '../../../fulcrum/src/services/FulcrumProvider'\n\nexport default class LendService {\n fulcrumProvider: FulcrumProvider\n\n getDependenciesStrict(asset: Asset) {\n const deps = providerUtils.getDependenciesStrict(this.fulcrumProvider)\n const iTokenContract = deps.contractsSource.getITokenContract(asset)\n return { ...deps, iTokenContract }\n }\n\n /**\n * @param asset the asset the user wants to lend\n * @param amount not in wei\n */\n lend(asset: Asset, amount: BigNumber) {\n const { iTokenContract, userAddress, chainId } = this.getDependenciesStrict(asset)\n const isNative = assetUtils.isNativeTokenForNetwork(chainId, asset)\n const amountInBaseUnits = providerUtils.inBaseUnits(chainId, asset, amount)\n\n if (isNative) {\n const tx = iTokenContract.mintWithEther(userAddress)\n return providerUtils.runTx(this.fulcrumProvider, tx, iTokenContract, amountInBaseUnits)\n } else {\n const tx = iTokenContract.mint(userAddress, amountInBaseUnits)\n return providerUtils.runTx(this.fulcrumProvider, tx, iTokenContract)\n }\n }\n\n /**\n * @param asset the asset the user wants to lend\n * @param amount not in wei\n */\n unlend(asset: Asset, amount: BigNumber) {\n const { iTokenContract, userAddress, chainId } = this.getDependenciesStrict(asset)\n const isNative = assetUtils.isNativeTokenForNetwork(chainId, asset)\n const amountInBaseUnits = providerUtils.inBaseUnits(chainId, asset, amount)\n\n const tx = isNative\n ? iTokenContract.burnToEther(userAddress, amountInBaseUnits)\n : iTokenContract.burn(userAddress, amountInBaseUnits)\n\n return providerUtils.runTx(this.fulcrumProvider, tx, iTokenContract)\n }\n\n constructor(provider: FulcrumProvider) {\n this.fulcrumProvider = provider\n }\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport providerUtils from 'app-lib/providerUtils'\nimport appConfig, { ChainId } from 'bzx-common/src/config/appConfig'\nimport { BigNumber } from '@0x/utils'\nimport { FulcrumProvider } from '../../../fulcrum/src/services/FulcrumProvider'\nimport BorrowRequest from '../domain/borrow/BorrowRequest'\nimport RepayLoanRequest from '../domain/borrow/RepayLoanRequest'\nimport IBorrowedFundsState from '../domain/IBorrowedFundsState'\nimport ManageCollateralRequest from '../domain/ManageCollateralRequest'\nimport { ITradeRequest, PositionType, TradeType } from '../domain/trade.types'\nimport tradeUtils from '../lib/tradeUtils'\n\nconst ZERO_LOAN_ID = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nexport default class LoanService {\n fulcrumProvider: FulcrumProvider\n\n getDependenciesStrict() {\n const deps = providerUtils.getDependenciesStrict(this.fulcrumProvider)\n const bzxContract = deps.contractsSource.getiBZxContract()\n return { ...deps, bzxContract }\n }\n\n getDependenciesStrictAsset(loanAsset: Asset) {\n const deps = providerUtils.getDependenciesStrict(this.fulcrumProvider)\n const iTokenContract = deps.contractsSource.getITokenContract(loanAsset)\n return { ...deps, iTokenContract }\n }\n\n getDependenciesRead() {\n return providerUtils.getDependenciesStrictRead(this.fulcrumProvider)\n }\n\n /**\n *\n * @param chainId\n * @param borrowDetails\n */\n async borrow(chainId: ChainId, borrowDetails: BorrowRequest) {\n const { borrowAsset, collateralAsset, depositAmount, borrowAmount, loanId } = borrowDetails\n const { userAddress, iTokenContract } = this.getDependenciesStrictAsset(borrowAsset)\n const isNative = assetUtils.isNativeTokenForNetwork(chainId, borrowDetails.collateralAsset)\n const collateralAssetErc20Address = assetUtils.getAddress(chainId, collateralAsset)\n const loanPrecision = assetUtils.getDecimals(chainId, borrowAsset)\n const collateralPrecision = assetUtils.getDecimals(chainId, collateralAsset)\n const borrowAmountInBaseUnits = new BigNumber(\n borrowAmount.multipliedBy(10 ** loanPrecision).toFixed(0, 1)\n )\n const depositAmountInBaseUnits = new BigNumber(\n depositAmount.multipliedBy(10 ** collateralPrecision).toFixed(0, 1)\n )\n\n const tx = iTokenContract.borrow(\n loanId,\n borrowAmountInBaseUnits,\n appConfig.INITIAL_TORQUE_LOAN_DURATION, // approximately 3 months\n depositAmountInBaseUnits,\n isNative ? appConfig.ZERO_ADDRESS : collateralAssetErc20Address,\n userAddress,\n userAddress,\n '0x'\n )\n\n return providerUtils.runTx(\n this.fulcrumProvider,\n tx,\n iTokenContract,\n isNative ? depositAmountInBaseUnits : undefined\n )\n }\n\n /**\n *\n * @param chainId\n * @param manageCollateralDetails\n */\n async collateral(chainId: ChainId, manageCollateralDetails: ManageCollateralRequest) {\n const { bzxContract, userAddress } = this.getDependenciesStrict()\n const { loanId, collateralAsset, collateralAmount, isWithdrawal } = manageCollateralDetails\n\n const collateralPrecision = assetUtils.getDecimals(chainId, collateralAsset)\n const collateralAmountInBaseUnits = new BigNumber(\n collateralAmount.multipliedBy(10 ** collateralPrecision).toFixed(0, 1)\n )\n const isNative = assetUtils.isNativeTokenForNetwork(\n chainId,\n manageCollateralDetails.collateralAsset\n )\n\n const tx = isWithdrawal\n ? bzxContract.withdrawCollateral(loanId, userAddress, collateralAmountInBaseUnits)\n : bzxContract.depositCollateral(loanId, collateralAmountInBaseUnits)\n\n return providerUtils.runTx(\n this.fulcrumProvider,\n tx,\n bzxContract,\n isNative && !isWithdrawal ? collateralAmountInBaseUnits : undefined\n )\n }\n\n /**\n * Repay a loan.\n *\n * Note:\n * We want to send a bigger number than actually owed, because the amount owed will have\n * increased by the time a TX is done due to interest.\n * The smart contract will use the right max amount from the user's wallet\n * if a bigger repay amount than owed is sent.\n\n * If you are repaying with ETH, you have to send ETH directly,\n * so in this case the closeAmount param is still that really huge number, but\n * the \"value\" param of ETH to send is just a larger amount of ETH that should be enough\n * to cover the loan (but not the super huge value of course since their wallet won't have that much)\n * @param chainId\n * @param repayDetails\n */\n async repay(chainId: ChainId, repayDetails: RepayLoanRequest) {\n const { userAddress, bzxContract } = this.getDependenciesStrict()\n const { loanId, borrowAsset, repayAmount } = repayDetails\n const loanPrecision = assetUtils.getDecimals(chainId, borrowAsset)\n let closeAmountInBaseUnits = repayAmount.times(10 ** loanPrecision)\n let closeAmountInBaseUnitsValue = closeAmountInBaseUnits // for native token\n const isNative = assetUtils.isNativeTokenForNetwork(chainId, borrowAsset)\n\n if (\n repayAmount.gte(repayDetails.amountOwed) ||\n repayDetails.repayPercent.gte(99.9) // assuming the user wanted to close everything\n ) {\n // send a large amount to close entire loan\n closeAmountInBaseUnits = closeAmountInBaseUnits.times(10 ** 50)\n if (closeAmountInBaseUnits.eq(0)) {\n closeAmountInBaseUnits = new BigNumber(10 ** 50)\n }\n closeAmountInBaseUnitsValue = repayAmount\n .times(1.001)\n .dp(loanPrecision)\n .times(10 ** loanPrecision)\n }\n\n const tx = bzxContract.closeWithDeposit(loanId, userAddress, closeAmountInBaseUnits, '0x')\n\n return providerUtils.runTx(\n this.fulcrumProvider,\n tx,\n bzxContract,\n isNative ? closeAmountInBaseUnitsValue : undefined\n )\n }\n\n async getLiquidityFromBlockchain(assets: Asset[]) {\n const { helperContract, chainId } = this.getDependenciesRead()\n const addresses = assets.map((asset) => assetUtils.getITokenAddress(chainId, asset))\n const liquidities = await helperContract.marketLiquidity(addresses).callAsync()\n return assets.reduce((acc, asset, index) => {\n acc[asset.toLowerCase()] = liquidities[index]\n .div(10 ** assetUtils.getDecimals(chainId, asset))\n .toFixed()\n return acc\n }, {} as Record)\n }\n\n /**\n *\n * @param chainId\n * @param tradeDetails\n */\n async tradeClose(chainId: ChainId, tradeDetails: ITradeRequest, loan: IBorrowedFundsState) {\n const isLong = tradeDetails.positionType === PositionType.LONG\n\n let amountInBaseUnits = new BigNumber(0)\n\n if (isLong) {\n const decimals = assetUtils.getDecimals(chainId, loan.collateralAsset)\n amountInBaseUnits = new BigNumber(\n tradeDetails.amount.multipliedBy(10 ** decimals).toFixed(0, 1)\n )\n } else {\n const { maxTradeValue } = await tradeUtils.getMaxTradeValue(this.fulcrumProvider, {\n tradeType: TradeType.CLOSE_POSITION,\n baseToken: loan.loanAsset,\n quoteToken: loan.collateralAsset,\n depositToken: tradeDetails.returnTokenIsCollateral ? loan.collateralAsset : loan.loanAsset,\n positionType: tradeDetails.positionType,\n loan,\n })\n amountInBaseUnits = new BigNumber(\n loan.loanData.collateral.times(tradeDetails.amount.div(maxTradeValue)).toFixed(0, 1)\n )\n }\n\n const maxAmountInBaseUnits = loan.loanData.collateral\n\n if (maxAmountInBaseUnits.minus(amountInBaseUnits).abs().div(maxAmountInBaseUnits).lte(0.05)) {\n amountInBaseUnits = new BigNumber(maxAmountInBaseUnits.times(10 ** 50).toFixed(0, 1))\n }\n\n const { bzxContract, userAddress } = this.getDependenciesStrict()\n\n const tx = bzxContract.closeWithSwap(\n loan.loanId,\n userAddress,\n amountInBaseUnits,\n tradeDetails.returnTokenIsCollateral,\n tradeDetails.loanDataBytes\n )\n\n return providerUtils.runTx(this.fulcrumProvider, tx, bzxContract)\n }\n\n /**\n *\n * @param chainId\n * @param tradeDetails\n */\n async tradeOpen(chainId: ChainId, tradeDetails: ITradeRequest) {\n const isLong = tradeDetails.positionType === PositionType.LONG\n const { depositToken } = tradeDetails\n const loanToken = isLong ? tradeDetails.quoteToken : tradeDetails.baseToken\n const decimals = assetUtils.getDecimals(chainId, depositToken)\n const amountInBaseUnits = new BigNumber(\n tradeDetails.amount.multipliedBy(10 ** decimals).toFixed(0, 1)\n )\n const { iTokenContract, userAddress } = this.getDependenciesStrictAsset(loanToken)\n\n const loanTokenSent = depositToken === loanToken ? amountInBaseUnits : new BigNumber(0)\n\n const collateralToken = isLong ? tradeDetails.baseToken : tradeDetails.quoteToken\n const collateralTokenSent =\n depositToken === collateralToken ? amountInBaseUnits : new BigNumber(0)\n\n const collateralTokenAddress = assetUtils.isNativeTokenForNetwork(chainId, collateralToken)\n ? appConfig.ZERO_ADDRESS\n : assetUtils.getAddress(chainId, collateralToken)\n\n const sendAmountForValue = assetUtils.isNativeTokenForNetwork(chainId, depositToken)\n ? amountInBaseUnits\n : new BigNumber(0)\n\n const tx = iTokenContract.marginTrade(\n ZERO_LOAN_ID,\n new BigNumber(isLong ? tradeDetails.leverage - 1 : tradeDetails.leverage).times(10 ** 18),\n loanTokenSent,\n collateralTokenSent,\n collateralTokenAddress,\n userAddress,\n tradeDetails.loanDataBytes\n )\n\n return providerUtils.runTx(this.fulcrumProvider, tx, iTokenContract, sendAmountForValue)\n }\n\n constructor(provider: FulcrumProvider) {\n this.fulcrumProvider = provider\n }\n}\n","import * as Sentry from '@sentry/browser'\nimport regexUtils from 'app-lib/regexUtils'\nimport { FulcrumProvider } from '../../../fulcrum/src/services/FulcrumProvider'\n\n/**\n * Filter some events that should not be reported in Sentry\n */\nconst checkEventFilter = regexUtils.getWordListCheck([\n 'ResizeObserver', // this is a browser bug\n 'XDR encoding', // browser bug in Firefox especially\n])\n\n/**\n * Allow to add user address as id for bug reports in Sentry\n * @param address user current wallet address. If undefined is passed, sentry scope will be reset.\n */\nfunction setWalletAddressAsId(address?: string) {\n if (typeof address === 'string') {\n Sentry.configureScope((scope) => {\n scope.setUser({ id: address })\n })\n } else {\n Sentry.configureScope((scope) => {\n scope.clear()\n })\n }\n}\n\n/**\n * @param provider Pass the provider instance (Fulcrum/Staking Provider)\n */\nfunction init(provider: FulcrumProvider) {\n Sentry.init({\n dsn: 'https://ee577e18ed6645bfaaac30fb29e63460@o500473.ingest.sentry.io/5525206',\n release: `fulcrum-${process.env.APP_VERSION}`,\n beforeSend(event, hint) {\n // https://docs.sentry.io/platforms/javascript/configuration/filtering/\n const error = hint?.originalException\n if (error instanceof Error && checkEventFilter(error.message)) {\n return null\n }\n return event\n },\n })\n\n provider.on('ProviderChanged', () => {\n setWalletAddressAsId(provider.currentAccount)\n })\n}\n\nexport default {\n init,\n}\n","import { History } from 'history'\n\nfunction start(history: History) {\n const secret = 'bugbug'\n let iterator = 0\n document.addEventListener('keydown', function (event) {\n iterator = event.key === secret[iterator] ? iterator + 1 : 0\n if (iterator === secret.length) {\n iterator = 0\n history.push('/debug')\n }\n })\n}\n\nexport default {\n start,\n}\n","import LocalStorage from 'app-lib/LocalStorage'\nimport AirdropService from 'bzx-common/src/services/AirdropService'\nimport DaoService from 'bzx-common/src/services/DaoService'\nimport LendService from 'bzx-common/src/services/LendService'\nimport LoanService from 'bzx-common/src/services/LoanService'\nimport MigrateService from 'bzx-common/src/services/MigrateService'\nimport sentryService from 'bzx-common/src/services/sentryService'\nimport { createBrowserHistory, History } from 'history'\nimport debugService from './debugService'\nimport fulcrumProvider, { FulcrumProvider } from './FulcrumProvider'\n\nexport interface IServices {\n airdropService: AirdropService\n daoService: DaoService\n fulcrumProvider: FulcrumProvider\n history: History\n lendService: LendService\n loanService: LoanService\n migrateService: MigrateService\n start: () => void\n storage: LocalStorage\n}\n\nconst airdropService = new AirdropService(fulcrumProvider)\nconst daoService = new DaoService(fulcrumProvider)\nconst lendService = new LendService(fulcrumProvider)\nconst migrateService = new MigrateService(fulcrumProvider)\nconst history = createBrowserHistory()\nconst loanService = new LoanService(fulcrumProvider)\nconst storage = new LocalStorage('ooki')\n\n/**\n * Start / Init services like Sentry\n */\nfunction start() {\n if (process.env.NODE_ENV === 'production') {\n sentryService.init(fulcrumProvider)\n }\n debugService.start(history)\n}\n\nexport default {\n airdropService,\n daoService,\n fulcrumProvider,\n history,\n lendService,\n loanService,\n migrateService,\n start,\n storage,\n}\n","import React from 'react'\n\nexport interface IPreloaderProps {\n width: string\n className?: string\n}\n\nconst Preloader = ({ width, className = '' }: IPreloaderProps) => {\n return (\n
\n
\n
\n )\n}\n\nexport default React.memo(Preloader)\n","import * as mobx from 'mobx'\n\ntype dialogProp = 'id' | 'state'\n\n/**\n * Generic View Model for simple dialogs.\n * It has a `visible` property that can be changed with `hide`/`show`/`toggle`\n */\nexport default class DialogVM {\n public id = ''\n public transitionDelay = 0\n public state: 'showing' | 'hiding' | 'visible' | 'hidden' = 'hidden'\n\n public get visible() {\n return this.state === 'visible' || this.state === 'showing' || this.state === 'hiding'\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: dialogProp, value: any) {\n ;(this[prop] as any) = value\n }\n\n public show() {\n if (this.transitionDelay) {\n this.state = 'showing'\n setTimeout(() => {\n this.set('state', 'visible')\n }, this.transitionDelay)\n } else {\n this.set('state', 'visible')\n }\n }\n\n /**\n * @param {function=} cb optional callback to run after once hidden. Useful if there is a transition.\n */\n public hide(cb?: any) {\n if (this.transitionDelay) {\n this.set('state', 'hiding')\n setTimeout(() => {\n this.set('state', 'hidden')\n if (typeof cb === 'function') {\n cb()\n }\n }, this.transitionDelay)\n } else {\n this.set('state', 'hidden')\n if (typeof cb === 'function') {\n cb()\n }\n }\n }\n\n public toggle() {\n this.state === 'visible' ? this.hide() : this.show()\n }\n\n /**\n * - __id__: optional id passed for debugging purposes\n * - __visible__: initial state of the dialog. Default: `false`\n * - __transitionDelay__: amount of time between the state hiding and visible false. Default: `0`\n */\n constructor(props?: { id?: string; visible?: boolean; transitionDelay?: number }) {\n if (props) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { visible, ...otherProps } = props\n Object.assign(this, otherProps)\n if (props.visible) {\n this.state = 'visible'\n }\n }\n mobx.makeObservable(this, {\n id: mobx.observable,\n visible: mobx.computed,\n transitionDelay: mobx.observable,\n state: mobx.observable,\n set: mobx.action.bound,\n show: mobx.action.bound,\n hide: mobx.action.bound,\n toggle: mobx.action.bound,\n })\n }\n}\n","/**\n * Creates a more human readable error message from the entire stack\n * Specifically useful for RPC / blockchain errors\n */\nfunction getErrorStackMessages(error: any, message = ''): string {\n if (error.message) {\n const stringified = /\"message\":\"(.+?)\"/gm.exec(error.message)\n message += stringified ? stringified[1] : error.message\n if (error.code) {\n message += ` (${error.code})`\n }\n message += '\\n'\n }\n if (!error.data) {\n return message\n }\n return getErrorStackMessages(error.data, message)\n}\n\n/**\n * Add extra props to errors that are useful.\n * @param error\n * @param opts\n */\nfunction decorateError(error: Error, opts: { title?: string; stackMessages?: boolean } = {}) {\n if (opts.title) {\n ;(error as any).title = opts.title\n }\n if (/user.denied/i.test(error.message)) {\n ;(error as any).title = 'The transaction was canceled or denied.'\n ;(error as any).noError = true\n }\n if (opts.stackMessages) {\n ;(error as any).stackMessages = getErrorStackMessages(error)\n }\n return error\n}\n\nexport default {\n decorateError,\n getErrorStackMessages,\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\n\nexport enum DEX {\n UNISWAPV3 = 'UNISWAPV3',\n SUSHI = 'SUSHI',\n AUTO = 'AUTO',\n}\n\nexport interface IUniRoute {\n topN: number\n topNDirectSwaps: number\n topNSecondHop: number\n topNTokenInOut: number\n topNWithBaseToken: number\n topNWithEachBaseToken: number\n}\n\nexport type DexDataPayload = {\n srcToken: Asset\n destToken: Asset\n amountUsed: BigNumber\n direction: TradeType\n amountsInMax?: BigNumber\n}\n\nexport enum TradeType {\n EXACT_INPUT,\n EXACT_OUTPUT,\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\n\nexport default class BorrowEvent {\n public static topic0 = '0x7bd8cbb7ba34b33004f3deda0fd36c92fc0360acbd97843360037b467a538f90'\n public readonly chainId: ChainId\n public readonly user: string //indexed\n public readonly lender: string //indexed\n public readonly loanId: string //indexed\n public readonly loanToken: Asset\n public readonly collateralToken: Asset\n public readonly newPrincipal: BigNumber\n public readonly newCollateral: BigNumber\n public readonly interestRate: BigNumber\n public readonly interestDuration: BigNumber\n public readonly collateralToLoanRate: BigNumber // one unit of loanToken, denominated in collateralToken\n public readonly currentMargin: BigNumber\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly timestamp: Date\n\n constructor(\n chainId: ChainId,\n user: string,\n lender: string,\n loanId: string,\n loanToken: Asset,\n collateralToken: Asset,\n newPrincipal: BigNumber,\n newCollateral: BigNumber,\n interestRate: BigNumber,\n interestDuration: BigNumber,\n collateralToLoanRate: BigNumber,\n currentMargin: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n timestamp: Date\n ) {\n this.chainId = chainId\n this.user = user\n this.lender = lender\n this.loanId = loanId\n this.loanToken = loanToken\n this.collateralToken = collateralToken\n this.newPrincipal = newPrincipal\n this.newCollateral = newCollateral\n this.interestRate = interestRate\n this.interestDuration = interestDuration\n this.collateralToLoanRate = collateralToLoanRate\n this.currentMargin = currentMargin\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.timestamp = timestamp\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\n\nexport default class BurnEvent {\n public static topic0 = '0x743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b4644'\n public readonly chainId: ChainId\n public readonly user: string //indexed\n public readonly tokenAmount: BigNumber\n public readonly assetAmount: BigNumber\n public readonly price: BigNumber\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly asset: Asset\n public readonly timestamp: Date\n\n constructor(\n chainId: ChainId,\n user: string,\n tokenAmount: BigNumber,\n assetAmount: BigNumber,\n price: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n asset: Asset,\n timestamp: Date\n ) {\n this.chainId = chainId\n this.user = user\n this.tokenAmount = tokenAmount\n this.assetAmount = assetAmount\n this.price = price\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.asset = asset\n this.timestamp = timestamp\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\n\nexport default class CloseWithDepositEvent {\n public static topic0 = '0x6349c1a02ec126f7f4fc6e6837e1859006e90e9901635c442d29271e77b96fb6'\n public readonly chainId: ChainId\n public readonly user: string //indexed\n public readonly lender: string //indexed\n public readonly loanId: string //indexed\n public readonly closer: string\n public readonly loanToken: Asset\n public readonly collateralToken: Asset\n public readonly repayAmount: BigNumber\n public readonly collateralWithdrawAmount: BigNumber\n public readonly collateralToLoanRate: BigNumber // one unit of loanToken, denominated in collateralToken\n public readonly currentMargin: BigNumber\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly timestamp: Date\n\n constructor(\n chainId: ChainId,\n user: string,\n lender: string,\n loanId: string,\n closer: string,\n loanToken: Asset,\n collateralToken: Asset,\n repayAmount: BigNumber,\n collateralWithdrawAmount: BigNumber,\n collateralToLoanRate: BigNumber,\n currentMargin: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n timestamp: Date\n ) {\n this.chainId = chainId\n this.user = user\n this.loanToken = loanToken\n this.collateralToken = collateralToken\n this.lender = lender\n this.closer = closer\n this.loanId = loanId\n this.repayAmount = repayAmount\n this.collateralWithdrawAmount = collateralWithdrawAmount\n this.collateralToLoanRate = collateralToLoanRate\n this.currentMargin = currentMargin\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.timestamp = timestamp\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\n\nexport default class CloseWithSwapEvent {\n public static topic0 = '0x2ed7b29b4ca95cf3bb9a44f703872a66e6aa5e8f07b675fa9a5c124a1e5d7352'\n public readonly chainId: ChainId\n public readonly user: string //indexed\n public readonly lender: string //indexed\n public readonly loanId: string //indexed\n public readonly collateralToken: Asset\n public readonly loanToken: Asset\n public readonly closer: string\n public readonly positionCloseSize: BigNumber\n public readonly loanCloseAmount: BigNumber\n public readonly exitPrice: BigNumber // one unit of loanToken, denominated in collateralToken\n public readonly currentLeverage: BigNumber\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly timestamp: Date\n\n constructor(\n chainId: ChainId,\n user: string,\n collateralToken: Asset,\n loanToken: Asset,\n lender: string,\n closer: string,\n loanId: string,\n positionCloseSize: BigNumber,\n loanCloseAmount: BigNumber,\n exitPrice: BigNumber,\n currentLeverage: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n timestamp: Date\n ) {\n this.chainId = chainId\n this.user = user\n this.collateralToken = collateralToken\n this.loanToken = loanToken\n this.lender = lender\n this.closer = closer\n this.loanId = loanId\n this.positionCloseSize = positionCloseSize\n this.loanCloseAmount = loanCloseAmount\n this.exitPrice = exitPrice\n this.currentLeverage = currentLeverage\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.timestamp = timestamp\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\n\nexport default class DepositCollateralEvent {\n public static readonly topic0: string =\n '0xa8a69faa6a38cc9c2beed79e034e1bd99f7eac877a5cee9f0118a8667b7ed93e'\n public readonly chainId: ChainId\n public readonly user: string //indexed\n public readonly asset: Asset //indexed\n public readonly loanId: string //indexed\n public readonly amount: BigNumber\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly timestamp: Date\n\n constructor(\n chainId: ChainId,\n user: string,\n asset: Asset,\n loanId: string,\n amount: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n timestamp: Date\n ) {\n this.chainId = chainId\n this.user = user\n this.asset = asset\n this.loanId = loanId\n this.amount = amount\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.timestamp = timestamp\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\n\nexport default class LiquidationEvent {\n public static readonly topic0: string =\n '0x46fa03303782eb2f686515f6c0100f9a62dabe587b0d3f5a4fc0c822d6e532d3'\n public readonly chainId: ChainId\n public readonly user: string //indexed\n public readonly liquidator: string //indexed\n public readonly loanId: string //indexed\n public readonly lender: string\n public readonly asset: Asset\n public readonly collateralToken: Asset\n public readonly repayAmount: BigNumber\n public readonly collateralWithdrawAmount: BigNumber\n public readonly collateralToLoanRate: BigNumber // one unit of baseToken, denominated in quoteToken\n public readonly currentMargin: BigNumber\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly timestamp: Date\n\n constructor(\n chainId: ChainId,\n user: string,\n liquidator: string,\n loanId: string,\n lender: string,\n asset: Asset,\n collateralToken: Asset,\n repayAmount: BigNumber,\n collateralWithdrawAmount: BigNumber,\n collateralToLoanRate: BigNumber,\n currentMargin: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n timestamp: Date\n ) {\n this.chainId = chainId\n this.user = user\n this.liquidator = liquidator\n this.loanId = loanId\n this.lender = lender\n this.asset = asset\n this.collateralToken = collateralToken\n this.repayAmount = repayAmount\n this.collateralWithdrawAmount = collateralWithdrawAmount\n this.collateralToLoanRate = collateralToLoanRate\n this.currentMargin = currentMargin\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.timestamp = timestamp\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\n\nexport default class MintEvent {\n public static topic0 = '0xb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb'\n public readonly chainId: ChainId\n public readonly user: string //indexed\n public readonly tokenAmount: BigNumber\n public readonly assetAmount: BigNumber\n public readonly price: BigNumber\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly asset: Asset\n public readonly timestamp: Date\n\n constructor(\n chainId: ChainId,\n user: string,\n tokenAmount: BigNumber,\n assetAmount: BigNumber,\n price: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n asset: Asset,\n timestamp: Date\n ) {\n this.chainId = chainId\n this.user = user\n this.tokenAmount = tokenAmount\n this.assetAmount = assetAmount\n this.price = price\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.asset = asset\n this.timestamp = timestamp\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\n\nexport default class RolloverEvent {\n public static readonly topic0: string =\n '0x21e656d09cbbafac02fd00fc98d308d0df53e46fa0a7b4358eca09302afc2e58'\n public readonly user: string //indexed\n public readonly caller: string //indexed\n public readonly loanId: string //indexed\n public readonly lender: string\n public readonly loanToken: Asset\n public readonly collateralToken: Asset\n public readonly collateralAmountUsed: BigNumber\n public readonly interestAmountAdded: BigNumber\n public readonly loanEndTimestamp: Date\n public readonly gasRebate: BigNumber\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly timeStamp: Date\n\n constructor(\n user: string,\n caller: string,\n loanId: string,\n lender: string,\n loanToken: Asset,\n collateralToken: Asset,\n collateralAmountUsed: BigNumber,\n interestAmountAdded: BigNumber,\n loanEndTimestamp: Date,\n gasRebate: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n timeStamp: Date\n ) {\n this.user = user\n this.caller = caller\n this.loanId = loanId\n this.lender = lender\n this.loanToken = loanToken\n this.collateralToken = collateralToken\n this.collateralAmountUsed = collateralAmountUsed\n this.interestAmountAdded = interestAmountAdded\n this.loanEndTimestamp = loanEndTimestamp\n this.gasRebate = gasRebate\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.timeStamp = timeStamp\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\n\nexport default class TradeEvent {\n public static readonly topic0: string =\n '0xf640c1cfe1a912a0b0152b5a542e5c2403142eed75b06cde526cee54b1580e5c'\n public readonly chainId: ChainId\n public readonly user: string //indexed\n public readonly lender: string //indexed\n public readonly loanId: string //indexed\n public readonly collateralToken: Asset\n public readonly loanToken: Asset\n public readonly positionSize: BigNumber\n public readonly borrowedAmount: BigNumber\n public readonly interestRate: BigNumber\n public readonly settlementDate: Date\n public readonly entryPrice: BigNumber // one unit of baseToken, denominated in quoteToken\n public readonly entryLeverage: BigNumber\n public readonly currentLeverage: BigNumber\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly timestamp: Date\n\n constructor(\n chainId: ChainId,\n user: string,\n lender: string,\n loanId: string,\n collateralToken: Asset,\n loanToken: Asset,\n positionSize: BigNumber,\n borrowedAmount: BigNumber,\n interestRate: BigNumber,\n settlementDate: Date,\n entryPrice: BigNumber,\n entryLeverage: BigNumber,\n currentLeverage: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n timestamp: Date\n ) {\n this.chainId = chainId\n this.user = user\n this.collateralToken = collateralToken\n this.loanToken = loanToken\n this.lender = lender\n this.loanId = loanId\n this.positionSize = positionSize\n this.borrowedAmount = borrowedAmount\n this.interestRate = interestRate\n this.settlementDate = settlementDate\n this.entryPrice = entryPrice\n this.entryLeverage = entryLeverage\n this.currentLeverage = currentLeverage\n this.blockNumber = blockNumber\n this.timestamp = timestamp\n this.txHash = txHash\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\n\nexport default class WithdrawCollateralEvent {\n public static readonly topic0: string =\n '0x7b1bab051266a4a36232da9b4341daf225fa42f7202b0e7207b9b502644ff1bb'\n public readonly chainId: ChainId\n public readonly user: string\n public readonly asset: Asset\n public readonly loanId: string\n public readonly amount: BigNumber\n public readonly blockNumber: BigNumber\n public readonly txHash: string\n public readonly timestamp: Date\n\n constructor(\n chainId: ChainId,\n user: string,\n asset: Asset,\n loanId: string,\n amount: BigNumber,\n blockNumber: BigNumber,\n txHash: string,\n timestamp: Date\n ) {\n this.chainId = chainId\n this.user = user\n this.asset = asset\n this.loanId = loanId\n this.amount = amount\n this.blockNumber = blockNumber\n this.txHash = txHash\n this.timestamp = timestamp\n }\n}\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLogoShortBinance(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 32 32\",\n width: \"32px\",\n color: \"text\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24 0H8C3.58172 0 0 3.58172 0 8V24C0 28.4183 3.58172 32 8 32H24C28.4183 32 32 28.4183 32 24V8C32 3.58172 28.4183 0 24 0Z\",\n fill: \"#1E2026\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.2857 4L9.97035 7.6761L12.2922 9.03415L16.2857 6.7161L20.2792 9.03415L22.6011 7.6761L16.2857 4Z\",\n fill: \"#F0B90B\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.2792 10.9541L22.6011 12.3122V15.0283L18.6075 17.3463V21.9824L16.2857 23.3405L13.9639 21.9824V17.3463L9.97035 15.0283V12.3122L12.2922 10.9541L16.2857 13.2722L20.2792 10.9541Z\",\n fill: \"#F0B90B\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.6011 16.9483V19.6644L20.2792 21.0224V18.3063L22.6011 16.9483Z\",\n fill: \"#F0B90B\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.2561 22.9424L24.2496 20.6244V15.9883L26.5714 14.6302V21.9824L20.2561 25.6585V22.9424Z\",\n fill: \"#F0B90B\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.2496 11.3522L21.9278 9.99414L24.2496 8.63609L26.5714 9.99414V12.7102L24.2496 14.0683V11.3522Z\",\n fill: \"#F0B90B\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.9639 26.642V23.9259L16.2857 25.2839L18.6075 23.9259V26.642L16.2857 28L13.9639 26.642Z\",\n fill: \"#F0B90B\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.2922 21.0224L9.97035 19.6644V16.9483L12.2922 18.3063V21.0224Z\",\n fill: \"#F0B90B\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.2857 11.3522L13.9639 9.99414L16.2857 8.63609L18.6075 9.99414L16.2857 11.3522Z\",\n fill: \"#F0B90B\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.6437 9.99414L8.32183 11.3522V14.0683L6 12.7102V9.99414L8.32183 8.63609L10.6437 9.99414Z\",\n fill: \"#F0B90B\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 14.6302L8.32183 15.9883V20.6244L12.3154 22.9424V25.6585L6 21.9824V14.6302Z\",\n fill: \"#F0B90B\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoShortBinance);\nexport default __webpack_public_path__ + \"static/media/logo_short___binance.a2c44893.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLogoShortCoinbase(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 32,\n height: 32,\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 32 32\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#1A2DEB\",\n d: \"M14 13c-.6 0-1 .4-1 1v4c0 .6.4 1 1 1h4c.6 0 1-.4 1-1v-4c0-.6-.4-1-1-1h-4z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n fill: \"#1A2DEB\",\n d: \"M16 0C7.2 0 0 7.2 0 16s7.2 16 16 16 16-7.2 16-16S24.8 0 16 0zM6.4 16c0-5.3 4.3-9.6 9.6-9.6s9.6 4.3 9.6 9.6-4.3 9.6-9.6 9.6-9.6-4.3-9.6-9.6z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoShortCoinbase);\nexport default __webpack_public_path__ + \"static/media/logo_short___coinbase.6e154363.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2, _path3, _path4;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLogoShortGenericwallet(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.1 23.5999C8.1 23.4999 8.1 23.2999 8.2 23.1999C8.3 22.3999 8.7 21.6999 9.2 21.0999C10.3 19.8999 11.3 18.6999 12.4 17.5999C12.9 16.9999 13.6 16.5999 14.4 16.4999C15.6 16.2999 16.6 16.6999 17.4 17.5999C17.7 17.8999 17.7 18.3999 17.4 18.6999C17.1 18.9999 16.7 18.9999 16.4 18.6999C16 18.2999 15.7 17.9999 15.2 17.9999C14.5 17.8999 13.9 17.9999 13.3 18.5999C12.2 19.7999 11.1 20.9999 10 22.2999C9.4 22.9999 9.3 23.7999 9.5 24.6999C9.8 25.5999 10.3 26.0999 11.2 26.1999C11.9 26.2999 12.5 26.0999 13 25.4999C13.9 24.4999 14.3 23.9999 15.2 22.9999C15.3 22.8999 15.4 22.7999 15.6 22.7999C15.9 22.6999 16.2 22.8999 16.4 23.1999C16.6 23.4999 16.5 23.8999 16.3 24.0999C16.1 24.2999 15.9 24.4999 15.7 24.7999C15 25.5999 14.7 25.8999 14 26.6999C13.5 27.2999 12.9 27.5999 12.2 27.7999C11 28.0999 9.9 27.6999 9 26.6999C8.5 26.0999 8.2 25.3999 8 24.4999V24.1999C8.1 23.8999 8.1 23.6999 8.1 23.5999Z\",\n fill: \"black\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.7008 14.5C23.7008 14.6 23.7008 14.8 23.6008 14.9C23.5008 15.7 23.1008 16.4 22.6008 17C21.5008 18.2 20.5008 19.4 19.4008 20.5C18.9008 21.1 18.2008 21.5 17.4008 21.6C16.2008 21.8 15.2008 21.4 14.4008 20.5C14.1008 20.2 14.1008 19.7 14.4008 19.4C14.7008 19.1 15.1008 19.1 15.4008 19.4C15.7008 19.7 16.1008 20 16.5008 20C17.2008 20.1 17.8008 20 18.4008 19.4C19.5008 18.2 20.6008 17 21.7008 15.7C22.3008 15 22.4008 14.2 22.2008 13.3C21.9008 12.4 21.4008 11.9 20.5008 11.8C19.8008 11.7 19.2008 11.9 18.7008 12.5C17.8008 13.5 17.4008 14 16.5008 15C16.4008 15.1 16.3008 15.2 16.1008 15.2C15.8008 15.3 15.5008 15.1 15.3008 14.8C15.1008 14.5 15.2008 14.1 15.4008 13.9C15.6008 13.7 15.8008 13.5 16.0008 13.2C16.7008 12.4 17.0008 12.1 17.7008 11.3C18.2008 10.7 18.8008 10.4 19.5008 10.2C20.7008 9.89997 21.8008 10.3 22.7008 11.3C23.2008 11.9 23.5008 12.6 23.7008 13.5V14.5Z\",\n fill: \"black\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M22.8 0.100109C23.5 0.000109255 24.1 0.000109255 24.8 0.200109C25.4 0.400109 26 0.700109 26.6 1.20011C27.1 1.70011 27.5 2.30011 27.8 2.90011C28 3.60011 28.2 4.30011 28.2 5.00011V7.40011H26.4V5.00011C26.4 4.60011 26.3 4.10011 26.1 3.70011C25.9 3.30011 25.7 2.90011 25.4 2.70011C25.1 2.40011 24.7 2.20011 24.3 2.10011C23.9 2.00011 23.5 2.00011 23.1 2.10011L4 5.70011C3.4 5.80011 2.8 6.20011 2.4 6.70011C2 7.30011 1.8 8.00011 1.8 8.70011V12.7001H0V8.70011C0 7.50011 0.4 6.40011 1 5.50011C1.7 4.60011 2.6 4.00011 3.6 3.80011L22.8 0.100109Z\",\n fill: \"black\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.4 8.69995C3 8.69995 1.8 9.99995 1.8 11.6V27.1C1.8 28.7 3 30 4.4 30H27.6C29 30 30.2 28.7 30.2 27.1V11.6C30.2 9.99995 29 8.69995 27.6 8.69995H4.4ZM0 11.6C0 8.89995 2 6.69995 4.4 6.69995H27.6C30 6.69995 32 8.89995 32 11.6V27.1C32 29.8 30 32 27.6 32H4.4C2 32 0 29.8 0 27.1V11.6Z\",\n fill: \"black\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoShortGenericwallet);\nexport default __webpack_public_path__ + \"static/media/logo_short___genericwallet.50b79722.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _path21, _path22, _path23, _path24, _path25, _path26, _path27, _path28, _path29;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLogoShortMetamask(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 32,\n height: 32,\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 32 32\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E2761B\",\n d: \"M30.4 1l-12.5 9.4 2.5-5.6 10-3.8z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E4761B\",\n d: \"M1.6 1L14 10.4l-2.2-5.6L1.6 1z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E4761B\",\n d: \"M25.4 22.2l-2.8 5.4 7.1 2 1.9-7.3h-6.2v-.1z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E4761B\",\n d: \"M.4 22.2l2 7.1 7.1-2-2.9-5.1H.4z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E4761B\",\n d: \"M9 13.9l-2 3 7.1.3-.3-7.6L9 13.9z\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E4761B\",\n d: \"M23 13.9l-4.9-4.4-.2 7.7 7.1-.3-2-3z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E4761B\",\n d: \"M9.1 27.9l4.5-2.3-3.6-2.9-.9 5.2z\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E4761B\",\n d: \"M18.3 25.5l4.5 2.3-.8-5.1-3.7 2.8z\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D7C1B3\",\n d: \"M22.9 27.9l-4.5-2.3.3 2.9v1.2l4.2-1.8z\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D7C1B3\",\n d: \"M9.1 27.9l4.2 1.9v-1.2l.3-2.9-4.5 2.2z\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#233447\",\n stroke: \"#233447\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12.9 21l-2.5-1.2 1.8-1.3.7 2.5z\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#233447\",\n stroke: \"#233447\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M19.1 21l.7-2.5 1.8 1.3-2.5 1.2z\"\n })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD6116\",\n d: \"M9.4 27.6l1-5.4h-5l4 5.4z\"\n })), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD6116\",\n d: \"M21.6 22.2l1 5.4 4-5.4h-5z\"\n })), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD6116\",\n d: \"M25 16.9l-7.1.3.7 3.6 1-2.2 2.5 1.1 2.9-2.8z\"\n })), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CD6116\",\n d: \"M9.9 19.8l2.5-1.1 1 2.2.7-3.6-7.1-.4 2.9 2.9z\"\n })), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E4751F\",\n stroke: \"#E4751F\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M7 16.9l3 5.8-.1-2.9L7 16.9z\"\n })), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E4751F\",\n stroke: \"#E4751F\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M22.1 19.8l-.1 2.9 3-5.8-2.9 2.9z\"\n })), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E4751F\",\n stroke: \"#E4751F\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M14.1 17.2l-.7 3.6.8 4.3.2-5.6-.3-2.3z\"\n })), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E4751F\",\n stroke: \"#E4751F\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M17.9 17.2l-.3 2.3.2 5.6.8-4.3-.7-3.6z\"\n })), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F6851B\",\n stroke: \"#F6851B\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M18.6 20.9l-.7 4.7.5.5 3.1-3.1.1-3.1-3 1z\"\n })), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F6851B\",\n stroke: \"#F6851B\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M10.4 19.7l.1 3.1 3.1 3.1.5-.5-.7-4.7-3-1z\"\n })), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C0AD9E\",\n d: \"M18.7 29.5v-1.4l-.3-.3h-4.9l-.3.3v1.4l-4.1-2.3 1.4 1.4 2.9 2.4h5l2.9-2.4 1.4-1.4-4 2.3z\"\n })), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#161616\",\n d: \"M18.7 25.2l-.7-.5h-4l-.7.5-.4 3.3.3-.3h5.5l.4.3-.4-3.3z\"\n })), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#763D16\",\n d: \"M30.9 10.9L32 5.8 30.4 1l-12.1 9 4.6 3.9 6.6 1.9 1.5-1.7-.6-.5 1-.9-.8-.6 1-.8-.7-.4z\"\n })), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#763D16\",\n d: \"M0 5.8l1.1 5.1-.7.5 1 .8-.8.6 1 .9-.6.4 1.4 1.7L9 13.9l4.6-3.9-12-9L0 5.8z\"\n })), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F6851B\",\n d: \"M29.3 15.4l-6.7-1.9 2 3-3 5.7h9.9l-2.2-6.8z\"\n })), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F6851B\",\n d: \"M9.4 13.5l-6.7 1.9-2.2 6.8h9.9l-3-5.7 2-3z\"\n })), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F6851B\",\n d: \"M18 17l.4-7.1 2-5.1h-8.7l1.9 5.1.4 7.1.2 2.2v5.5h3.6v-5.5L18 17z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoShortMetamask);\nexport default __webpack_public_path__ + \"static/media/logo_short___metamask.d2e6f07c.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLogoShortTrustwallet(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 32,\n height: 32,\n viewBox: \"0 0 32 32\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M0.712103 7.06183C0 8.93829 0 11.2922 0 16C0 20.7079 0 23.0617 0.712103 24.9381C1.82303 27.8655 4.13447 30.177 7.06184 31.2879C8.93829 32 11.2922 32 16 32C20.7079 32 23.0617 32 24.9381 31.2879C27.8655 30.177 30.177 27.8655 31.2879 24.9381C32 23.0617 32 20.7079 32 16C32 11.2922 32 8.93829 31.2879 7.06183C30.177 4.13447 27.8655 1.82303 24.9381 0.712103C23.0617 -2.72478e-07 20.7079 0 16 0C11.2922 0 8.93829 -2.72478e-07 7.06184 0.712103C4.13447 1.82303 1.82303 4.13447 0.712103 7.06183ZM15.3056 26.0574C15.537 26.1715 15.7686 26.2857 16 26.2857C16.2314 26.2857 16.463 26.2857 16.5787 26.1715C17.6202 25.4867 18.4303 25.0303 19.2405 24.5737C23.6383 22.177 24.9113 20.9217 25.1429 9.16663C25.1429 8.82423 25.0271 8.59589 24.7957 8.36766C24.5642 8.13943 24.3327 8.02526 23.9855 8.02526H23.7541C22.5967 8.02526 19.472 8.02526 16.6944 5.97102C16.3471 5.62863 15.7686 5.62863 15.3056 5.97102C12.528 8.02526 9.4032 8.02526 8.24594 8.02526H8.01451C7.78301 8.02526 7.43581 8.13943 7.20434 8.2536C6.97288 8.48183 6.85714 8.71006 6.85714 9.05246C6.97288 20.8075 8.24594 22.063 12.6438 24.4597C12.8195 24.5587 13.0008 24.6578 13.1863 24.7592C13.8558 25.125 14.5806 25.5213 15.3056 26.0574ZM13.7686 22.6147C10.4381 20.6897 9.40251 20.091 9.17177 10.3079C10.792 10.1937 13.6854 9.85131 16 8.2536C18.5462 9.96549 20.9765 10.1937 22.5967 10.3079C22.3653 20.1227 21.4393 20.6934 17.9675 22.6336C17.7521 22.7611 17.5205 22.9043 17.2731 23.0575C16.8557 23.3159 16.3928 23.6024 15.8843 23.889C15.3537 23.5402 14.7557 23.1914 14.245 22.8936C14.0872 22.8015 13.9377 22.7144 13.8011 22.6336L13.7686 22.6147Z\",\n fill: \"#3378B9\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoShortTrustwallet);\nexport default __webpack_public_path__ + \"static/media/logo_short___trustwallet.fabb761d.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLogoShortWalletconnect(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 32,\n height: 32,\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 32 32\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#3B99FC\",\n d: \"M25.4 9.9c-5.2-5.2-13.7-5.2-18.9 0l-.6.6c-.3.3-.3.7 0 .9L8 13.5c.1.1.3.1.5 0l.9-.9C13 9 18.9 9 22.6 12.6l.9.9c.1.1.3.1.5 0l2.1-2.1c.3-.3.3-.7 0-.9l-.7-.6zM2.1 14.3L.2 16.2c-.3.3-.3.7 0 .9l8.6 8.6c.3.3.7.3.9 0l6.1-6.1c.1-.1.2-.1.2 0l6.1 6.1c.3.3.7.3.9 0l8.6-8.6c.3-.3.3-.7 0-.9l-1.9-1.9c-.3-.3-.7-.3-.9 0l-6.1 6.1c-.1.1-.2.1-.2 0l-6.1-6.1c-.3-.3-.7-.3-.9 0l-6.1 6.1c-.1.1-.2.1-.2 0l-6.1-6.1c-.3-.2-.7-.2-1 0z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoShortWalletconnect);\nexport default __webpack_public_path__ + \"static/media/logo_short___walletconnect.7d2e6a77.svg\";\nexport { ForwardRef as ReactComponent };","import { binance, injected, useWalletConnect, useWalletLink } from 'app-lib/web3ReactUtils'\nimport { AbstractConnector } from '@web3-react/abstract-connector'\nimport { ReactComponent as BinanceLogoShort } from '../assets/images/providers/logo_short___binance.svg'\nimport { ReactComponent as WalletLinkLogoShort } from '../assets/images/providers/logo_short___coinbase.svg'\nimport { ReactComponent as GenericWalletShort } from '../assets/images/providers/logo_short___genericwallet.svg'\nimport { ReactComponent as MetamaskLogoShort } from '../assets/images/providers/logo_short___metamask.svg'\nimport { ReactComponent as TrustWalletLogoShort } from '../assets/images/providers/logo_short___trustwallet.svg'\nimport { ReactComponent as WalletConnectLogoShort } from '../assets/images/providers/logo_short___walletconnect.svg'\nimport { ChainId } from '../config/chains/chainCommon'\n\nexport enum ProviderType {\n MetaMask = 'MetaMask',\n TrustWallet = 'TrustWallet',\n Binance = 'Binance',\n WalletConnect = 'WalletConnect',\n WalletLink = 'WalletLink', // Coinbase\n None = 'None',\n}\n\nconst connectorsByType: Partial> = {\n [ProviderType.MetaMask]: injected,\n [ProviderType.TrustWallet]: injected,\n [ProviderType.Binance]: binance,\n [ProviderType.None]: null,\n}\n\nexport interface IProviderDetails {\n label: string\n ProviderLogo: React.FunctionComponent<\n React.SVGProps & {\n title?: string\n }\n >\n}\n\nexport const providersDetails: Record = {\n [ProviderType.MetaMask]: { label: 'MetaMask', ProviderLogo: MetamaskLogoShort },\n [ProviderType.TrustWallet]: { label: 'TrustWallet', ProviderLogo: TrustWalletLogoShort },\n [ProviderType.TrustWallet]: { label: 'TrustWallet', ProviderLogo: TrustWalletLogoShort },\n [ProviderType.WalletConnect]: { label: 'WalletConnect', ProviderLogo: WalletConnectLogoShort },\n [ProviderType.WalletLink]: { label: 'WalletLink', ProviderLogo: WalletLinkLogoShort },\n [ProviderType.Binance]: { label: 'Binance Wallet', ProviderLogo: BinanceLogoShort },\n [ProviderType.None]: { label: 'None', ProviderLogo: GenericWalletShort },\n}\n\nexport async function getProviderTypeByConnector(value: AbstractConnector): Promise {\n const provider = await value.getProvider()\n if (value === injected) {\n return provider.isMetaMask ? ProviderType.MetaMask : ProviderType.TrustWallet\n }\n if (provider.isWalletConnect) {\n return ProviderType.WalletConnect\n }\n if (provider.isWalletLink) {\n return ProviderType.WalletLink\n }\n return Object.keys(connectorsByType).find(\n (key) => connectorsByType[key as ProviderType] === value\n ) as ProviderType\n}\n\nexport function getConnectorByProviderType(\n providerType: ProviderType,\n chainId?: ChainId\n): AbstractConnector | null {\n if (providerType === ProviderType.WalletConnect && chainId) {\n return useWalletConnect(chainId)\n }\n if (providerType === ProviderType.WalletLink && chainId) {\n return useWalletLink(chainId)\n }\n return connectorsByType[providerType] || null\n}\n","import { Asset } from 'app-lib/assetUtils'\nimport { DEX } from 'app-lib/dexSelector/types'\nimport { BigNumber } from '@0x/utils'\nimport { ChainId } from '../config/chains/chainCommon'\nimport IBorrowedFundsState from './IBorrowedFundsState'\n\nexport enum PositionType {\n LONG = 'LONG',\n SHORT = 'SHORT',\n}\n\nexport enum TradeType {\n OPEN_POSITION = 'OPEN_POSITION',\n CLOSE_POSITION = 'CLOSE_POSITION',\n}\n\n/**\n *\n * * `loanDataBytes` {string} Must be set to '0x' if not needed\n * * `amount` {BigNumber} Is the amount the user would use as collateral\n */\nexport interface ITradeRequest {\n /** Amount without leverage */\n amount: BigNumber\n baseToken: Asset\n depositToken: Asset\n dex: DEX\n leverage: number\n loanDataBytes: string\n loanId?: string\n positionType: PositionType\n quoteToken: Asset\n returnTokenIsCollateral: boolean\n tradeType: TradeType\n positionValue?: number\n}\n\nexport interface IClosePositionRequest extends ITradeRequest {\n loanId: string\n returnTokenIsCollateral: boolean\n tradeType: TradeType.CLOSE_POSITION\n}\n\nexport interface IOpenPositionProps {\n chainId: ChainId\n activeTokenLiquidation: Asset\n activeTokenProfit: Asset\n baseToken: Asset\n collateral: BigNumber\n currentPrice: BigNumber\n isLoading: boolean\n leverage: number\n liquidationPrice: BigNumber\n loan: IBorrowedFundsState\n loanApr: BigNumber\n maintenanceMargin: BigNumber\n openPrice: BigNumber\n pendingTx: boolean\n positionType: PositionType\n positionValue: BigNumber\n profitCollateralToken: BigNumber\n profitLoanToken: BigNumber\n profitUSD: BigNumber\n quoteToken: Asset\n value: BigNumber\n valueChange: BigNumber\n}\n\nexport interface IPendingPosition {\n baseToken: Asset\n quoteToken: Asset\n positionType: PositionType\n leverage: number\n positionValue: number\n time: number\n}\n","import * as mobxReact from 'mobx-react'\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport React, { ComponentType, memo, useEffect, useState } from 'react'\n\ntype Constructable = new (...args: any[]) => T\n\ninterface IComponentWithVMProps {\n vm: T\n [x: string]: any\n}\n\ninterface IProviderProps {\n [x: string]: any\n rootStore?: any\n}\n\n/**\n * Tries to determine a Component's name\n * @param {function} Component\n */\nfunction getComponentDisplayName(Component: ComponentType>) {\n return (\n Component.displayName ||\n Component.name ||\n (Component.constructor && Component.constructor.name) ||\n 'Unknown'\n )\n}\n\n/**\n * `withVM` is a higher order component that allows to easily keep separated\n * the definition of a component internal state and its actual view (render) part.\n *\n * Thinking in terms of React/Mobx patterns,\n * it can be viewed as a convenient HOC that creates \"smart\" or \"container\" components with extras.\n *\n * As a reminder, a `vm` or view-model, is an entity responsible for taking the system business\n * data and use cases and make them available to a user interface, such as a view.\n * In general, using these VM is recommended for top-level sections such as feature pages\n * or stand-alone \"widgets\".\n *\n * What `withVM` does technically:\n * - it instantiates a VM when the component is mounted and pass it to the component.\n * - the VM receives the mobx rootStore so that your app state is available to your UI (Component)\n *\n * Usage example:\n * - The business data and logic is available through a \"root store\".\n * [Mobx docs](https://mobx.js.org/defining-data-stores.html#combining-multiple-stores)\n * - This root store is provided as a prop called \"rootStore\" in React Context.\n * For example using mobx-react Provider: ``\n * - Design the VM with the following characteristics:\n * - the VM constructor expects an object as argument, one property being `rootStore`.\n * - if necessary, a `destroyVM` method can be defined for cleanup. (automatically called on unmount)\n *\n * Pseudo code snippets:\n * ```\n * // UserFormComponent.js\n * function UserFormComponent (props) {\n * const {vm} = props\n * return (\n *
\n * \n * \n *
\n * )\n * }\n *\n * // ----------------\n * // UserFormWithVM.js\n * import withVM from '*...*withVM'\n * import UserFormComponent from './UserFormComponent'\n *\n * class UserFormVM {\n * name = ''\n * email = ''\n *\n * destroyVM () {\n * // can be optionally defined if cleanup necessary\n * }\n *\n * constructor ({rootStore}) {\n * // do something with rootStore\n * mobx.makeAutoObservable(this)\n * }\n * }\n *\n * export default withVM(UserFormComponent, UserForm)\n *\n * // ----------------\n * // App\n * import UserFormVM from './UserFormVM'\n * function App {\n * return (\n *
\n * \n *
\n * )\n * }\n * ```\n * @param Component\n * @param VM local vm using mobx observables\n */\nexport default function withVM(\n Component: ComponentType>,\n VM: Constructable\n) {\n const VMProvider = (props: IProviderProps) => {\n // eslint-disable-next-line\n const { rootStore, ...otherProps } = props\n const [vm] = useState(() => new VM(props))\n useEffect(\n () => () => {\n // @ts-ignore\n if (typeof vm.destroyVM === 'function') {\n // @ts-ignore\n vm.destroyVM()\n }\n },\n []\n )\n return \n }\n VMProvider.displayName = `${getComponentDisplayName(Component)}WithVM`\n return mobxReact.inject('rootStore')(memo(VMProvider))\n}\n","import { BigNumber } from '@0x/utils'\nimport assetUtils, { Asset, getCommon } from 'app-lib/assetUtils'\nimport loanUtils from 'app-lib/loanUtils'\nimport providerUtils from 'app-lib/providerUtils'\nimport swapRateUtils from 'app-lib/swapRateUtils'\nimport tradeUtils from 'app-lib/tradeUtils'\nimport appConfig, { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport IBorrowedFundsState from 'bzx-common/src/domain/IBorrowedFundsState'\nimport ManageCollateralRequest from 'bzx-common/src/domain/ManageCollateralRequest'\nimport oracleApi from 'bzx-common/src/lib/apis/oracleApi'\nimport { DEX } from 'bzx-common/src/lib/dexSelector/types'\nimport numberUtils, { formatPercent } from 'bzx-common/src/lib/numberUtils'\nimport { RootStore } from 'bzx-common/src/stores'\nimport _ from 'lodash'\nimport React, { Component, FormEvent } from 'react'\nimport { Button, Form, Icon, InfoTip, Input, Slider } from 'ui-framework'\nimport fulcrumProvider from '../../../../fulcrum/src/services/FulcrumProvider'\nimport ExpectedResult from '../ExpectedResult'\n\nexport interface IManageCollateralFormProps {\n loan: IBorrowedFundsState\n request: ManageCollateralRequest\n isBorrow?: boolean\n rootStore: RootStore\n closeModal: () => void\n}\n\ninterface IManageCollateralFormState {\n minValue: number\n maxValue: number\n loanValue: BigNumber\n selectedValue: BigNumber\n assetBalance: BigNumber\n collateralAmount: BigNumber\n collateralExcess: BigNumber\n collateralizedPercent: BigNumber\n collateralToLoanRate: BigNumber\n collateralTooLow: boolean\n inputAmount: string\n isLoading: boolean\n liquidationPrice: BigNumber\n activeTokenLiquidation: Asset\n needsApproval: boolean\n spender: string\n}\n\nexport default class ManageCollateralForm extends Component<\n IManageCollateralFormProps,\n IManageCollateralFormState\n> {\n private _onInputUpdate = _.debounce((value) => this.getExpectedData(value), appConfig.delay)\n public _collateralPrecision = assetUtils.getDecimals(\n fulcrumProvider.currentChainId,\n this.props.loan.collateralAsset\n )\n constructor(props: IManageCollateralFormProps) {\n super(props)\n\n this.state = {\n minValue: 0,\n maxValue: 0,\n selectedValue: new BigNumber(0),\n loanValue: new BigNumber(0),\n assetBalance: new BigNumber(0),\n collateralAmount: new BigNumber(0),\n collateralExcess: new BigNumber(0),\n collateralizedPercent: new BigNumber(0),\n collateralToLoanRate: new BigNumber(0),\n collateralTooLow: false,\n inputAmount: '',\n isLoading: true,\n liquidationPrice: new BigNumber(0),\n activeTokenLiquidation: this.props.loan.collateralAsset,\n needsApproval: false,\n spender: '',\n }\n }\n\n public async componentDidMount() {\n const chain = chainConfigs[fulcrumProvider.currentChainId]\n const collateralState = { minValue: 0.9 * 10 ** 18, maxValue: 3 * 10 ** 20, currentValue: 0 }\n this.setState({\n minValue: collateralState.minValue,\n maxValue: collateralState.maxValue,\n })\n const { loan } = this.props\n\n let collateralExcess = new BigNumber(0)\n try {\n collateralExcess = await tradeUtils.getManageCollateralExcessAmount(fulcrumProvider, loan)\n } catch (err) {\n console.error('getManageCollateralExcessAmount fail', err)\n }\n\n // check balance\n const assetBalance = await providerUtils.getTokenBalanceOfUser(\n fulcrumProvider,\n this.props.loan.collateralAsset\n )\n\n const collateralizedPercent = loan.collateralizedPercent\n .multipliedBy(100)\n .plus(this.props.isBorrow ? 100 : 0)\n\n let minCollateral\n let maxCollateral\n\n minCollateral = loan.collateralAmount.minus(collateralExcess).times(collateralState.minValue)\n\n maxCollateral = minCollateral\n .times(collateralState.maxValue - collateralState.minValue)\n .dividedBy(10 ** 20)\n\n // set range for case when loan has zero margin. Actually it don't affect slider range.\n // TODO: review the logic of the component\n if (loan.loanData.collateral.isZero()) {\n minCollateral = new BigNumber(loan.loanData.maintenanceMargin.div(10 ** 18).plus(5))\n maxCollateral = new BigNumber(loan.loanData.maintenanceMargin.div(10 ** 18).plus(50))\n }\n\n const currentCollateral = loan.collateralAmount.times(10 ** 18)\n\n if (maxCollateral.lt(currentCollateral)) {\n maxCollateral = currentCollateral\n }\n\n // new_v = (new_max - new_min) / (old_max - old_min) * (v - old_min) + new_min\n let currentCollateralNormalizedBN = new BigNumber(\n collateralState.maxValue - collateralState.minValue\n )\n .dividedBy(maxCollateral.minus(minCollateral))\n .times(currentCollateral.minus(minCollateral))\n .plus(collateralState.minValue)\n\n if (\n currentCollateralNormalizedBN\n .dividedBy(collateralState.maxValue - collateralState.minValue)\n .lte(0.01)\n ) {\n currentCollateralNormalizedBN = new BigNumber(collateralState.minValue)\n }\n\n let assetBalanceNormalizedBN = new BigNumber(\n collateralState.maxValue - collateralState.minValue\n )\n .dividedBy(maxCollateral.minus(minCollateral))\n .times(assetBalance.minus(minCollateral))\n .plus(collateralState.minValue)\n\n if (\n assetBalanceNormalizedBN\n .dividedBy(collateralState.maxValue - collateralState.minValue)\n .lte(0.01)\n ) {\n assetBalanceNormalizedBN = new BigNumber(collateralState.minValue)\n }\n\n const isUsingUniV3 = !chain.dexes.some((dex) => dex === DEX.SUSHI)\n let collateralToLoanRate = new BigNumber(NaN)\n\n if (!isUsingUniV3) {\n collateralToLoanRate = (\n await swapRateUtils.getActualSwapRate(fulcrumProvider, {\n srcToken: loan.collateralAsset,\n destToken: loan.loanAsset,\n loanDataBytes: '0x',\n })\n ).rate\n } else {\n // At least temporarily; using oracle price instead of AMM for chain that dont have sushi\n collateralToLoanRate = await oracleApi.getSwapRate(\n fulcrumProvider,\n loan.collateralAsset,\n loan.loanAsset\n )\n }\n\n const liquidationPrice = loanUtils.getLiquidationPrice(\n fulcrumProvider,\n this.props.loan,\n this.props.loan.loanData.collateral,\n this.state.activeTokenLiquidation\n )\n\n const collateralTooLow = loan.collateralizedPercent\n .multipliedBy(100)\n .minus(10)\n .lt(this.props.loan.loanData.maintenanceMargin.div(10 ** 18))\n\n const { checkApprovals } = this.props.rootStore.spendingApprovals\n const spender = chainConfigs[fulcrumProvider.currentChainId].contracts.bzx.toLowerCase()\n\n await checkApprovals([loan.collateralAsset], spender)\n\n this.setState({\n spender,\n collateralToLoanRate,\n loanValue: currentCollateralNormalizedBN,\n selectedValue: currentCollateralNormalizedBN,\n collateralizedPercent,\n collateralExcess,\n collateralTooLow,\n assetBalance,\n liquidationPrice,\n inputAmount: '0',\n isLoading: false,\n })\n }\n\n public render() {\n const warningMessage = this.state.assetBalance.lt(this.state.inputAmount)\n ? `Insufficient ${this.props.loan.collateralAsset} balance in your wallet!`\n : this.state.selectedValue.isZero()\n ? 'Too small collateralization'\n : this.state.loanValue.eq(this.state.maxValue) && new BigNumber(this.state.inputAmount).gt(0)\n ? 'Too big collateralization'\n : undefined\n\n const canSubmit = this.state.loanValue !== this.state.selectedValue && !warningMessage\n\n const { spriteLogo } = assetUtils.getCommon(this.props.loan.loanAsset)\n const { loan, request } = this.props\n const loanStatus = this.state.collateralTooLow ? 'risky' : 'safe'\n const submiTitle = this.state.collateralAmount.toFixed(this._collateralPrecision, 1)\n const { displayName } = getCommon(loan.collateralAsset)\n\n return (\n
\n
\n
\n
\n \n
\n
\n
Manage Collateral
\n
\n
\n
\n
APR
\n
\n {formatPercent(loan.interestRate)}%\n
\n
\n \n The % interest paid per year on your position.\n \n
\n
\n
\n
{displayName}
\n
\n {numberUtils.abbreviate(this.state.assetBalance)}\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
Current Collateral
\n
\n {numberUtils.autoFormat(request.collateralAmount)} {displayName}\n
\n
\n
\n
\n You will {this.state.loanValue.gt(this.state.selectedValue) ? 'withdraw' : 'top up'}\n
\n
\n
{displayName}
\n
\n \n
\n
\n
\n
\n
\n
\n Riskier\n Safer\n
\n \n
\n\n
\n \n
\n {warningMessage && !this.state.isLoading ? (\n

{warningMessage}

\n ) : this.state.needsApproval ? (\n \n Approve spending\n \n ) : (\n \n {this.state.loanValue.gt(this.state.selectedValue) ? `Withdraw -` : 'Top Up '}\n {numberUtils.autoFormat(this.state.collateralAmount)} {loan.collateralAsset}\n \n )}\n
\n
\n )\n }\n\n public approveSpending = async (event: FormEvent) => {\n event.preventDefault()\n\n this.setState({ isLoading: true })\n const success = await this.props.rootStore.spendingApprovals.setInfiniteApprovalForToken(\n this.props.loan.collateralAsset,\n this.state.spender\n )\n if (success) {\n const { needsApproval } = this.props.rootStore.spendingApprovals\n this.setState({\n needsApproval: needsApproval(\n fulcrumProvider.currentChainId,\n this.props.loan.collateralAsset,\n this.state.spender,\n this.state.collateralAmount\n ),\n })\n }\n this.setState({ isLoading: false })\n }\n\n public onSubmitClick = async (event: FormEvent) => {\n event.preventDefault()\n\n const { isBorrow, request, rootStore } = this.props\n const { borrowStore, tradeStore } = rootStore\n\n request.isWithdrawal = this.state.loanValue.gt(this.state.selectedValue)\n request.collateralAmount = new BigNumber(this.state.collateralAmount)\n isBorrow ? borrowStore.onLoanConfirmed(request) : tradeStore.manageCollateral(request)\n }\n\n private onChange = (value: number) => {\n const collateralAmount = this.getCollateralAmount(new BigNumber(value))\n const amount = numberUtils.formatPrecision(collateralAmount)\n const isWithdrawal = this.state.loanValue.gt(value)\n const inputAmountText = isWithdrawal ? '-' + amount : amount\n\n this.setState({\n inputAmount: inputAmountText,\n selectedValue: new BigNumber(value),\n collateralAmount,\n collateralizedPercent: new BigNumber(0),\n liquidationPrice: new BigNumber(0),\n })\n }\n\n private onAfterChange = () => {\n this._onInputUpdate(this.state.collateralAmount)\n }\n\n public onCollateralChange = (value: string) => {\n const bnValue = new BigNumber(value)\n const roundedValue = bnValue.absoluteValue()\n\n const decimals = assetUtils.getDecimals(\n fulcrumProvider.currentChainId,\n this.props.loan.loanAsset\n )\n // collateral amount enough to get maintenance margin + 200%\n const maxCollateralForZeroMarginLoan =\n this.props.loan.loanData.principal\n .div(10 ** decimals)\n .times(this.props.loan.loanData.maintenanceMargin.div(10 ** 20).plus(3))\n .div(this.state.collateralToLoanRate) || new BigNumber(0)\n\n let selectedValue = bnValue.lt(0)\n ? new BigNumber(this.state.loanValue).minus(\n roundedValue.dividedBy(this.state.collateralExcess).multipliedBy(this.state.loanValue)\n )\n : roundedValue\n .dividedBy(\n this.props.loan.collateralAmount.isZero()\n ? maxCollateralForZeroMarginLoan\n : this.props.loan.collateralAmount\n )\n .multipliedBy(new BigNumber(this.state.maxValue).minus(this.state.loanValue))\n .plus(this.state.loanValue)\n\n selectedValue = selectedValue.gt(0) ? selectedValue : new BigNumber(0)\n const collateralAmount = this.getCollateralAmount(selectedValue)\n this.setState({\n collateralAmount,\n selectedValue,\n collateralizedPercent: new BigNumber(0),\n liquidationPrice: new BigNumber(0),\n inputAmount: value,\n })\n this._onInputUpdate(collateralAmount)\n }\n\n private getCollateralAmount = (value: BigNumber) => {\n const decimals = assetUtils.getDecimals(\n fulcrumProvider.currentChainId,\n this.props.loan.loanAsset\n )\n // collateral amount enough to get maintenance margin + 200%\n const maxCollateralForZeroMarginLoan = this.props.loan.loanData.principal\n .div(10 ** decimals)\n .times(this.props.loan.loanData.maintenanceMargin.div(10 ** 20).plus(3))\n .div(this.state.collateralToLoanRate)\n\n return value.lt(this.state.loanValue)\n ? new BigNumber(this.state.loanValue)\n .minus(value)\n .dividedBy(this.state.loanValue)\n .multipliedBy(this.state.collateralExcess)\n : value.gt(this.state.loanValue)\n ? new BigNumber(value)\n .minus(this.state.loanValue)\n .dividedBy(new BigNumber(this.state.maxValue).minus(this.state.loanValue))\n .multipliedBy(\n this.props.loan.collateralAmount.isZero()\n ? maxCollateralForZeroMarginLoan\n : this.props.loan.collateralAmount\n )\n : new BigNumber(0)\n }\n\n private getExpectedData = async (value: BigNumber) => {\n const { activeTokenLiquidation, collateralAmount, spender, loanValue, selectedValue } =\n this.state\n const result = await loanUtils.getEstimateDataChangeEstimate(\n fulcrumProvider,\n this.props.loan,\n value,\n selectedValue.lt(loanValue),\n activeTokenLiquidation\n )\n\n const collateralizedPercent = result.collateralizedPercent.minus(this.props.isBorrow ? 0 : 100)\n const collateralTooLow = result.collateralizedPercent\n .minus(110)\n .lt(this.props.loan.loanData.maintenanceMargin.div(10 ** 18))\n const isWithdrawal = loanValue.gt(selectedValue)\n const { spendingApprovals } = this.props.rootStore\n\n const needsApproval =\n !isWithdrawal &&\n spender !== '' &&\n spendingApprovals.needsApproval(\n fulcrumProvider.currentChainId,\n this.props.loan.collateralAsset,\n spender,\n collateralAmount\n )\n\n this.setState({\n needsApproval,\n collateralizedPercent,\n collateralTooLow,\n liquidationPrice: result.liquidationPrice,\n })\n }\n}\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _path21, _path22, _path23, _path24, _path25, _path26, _path27, _path28, _path29, _path30, _path31, _path32, _path33, _path34, _path35, _path36, _path37, _path38;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgChartPlaceholder(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 394 218\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M9,133H5.2c-2.9,0-5.2,2.5-5.2,5.5v43c0,3.1,2.4,5.5,5.2,5.5H9 c2.9,0,5.2-2.5,5.2-5.5v-43C14.2,135.5,11.9,133,9,133z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M6.1,111v89.1c0,0.4,0.2,0.8,0.5,1c0.3,0.3,0.6,0.4,1,0.4s0.7-0.1,1-0.4 c0.3-0.3,0.5-0.6,0.5-1V111c0-0.4-0.2-0.8-0.5-1s-0.6-0.4-1-0.4s-0.7,0.1-1,0.4S6.1,110.6,6.1,111z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M29.3,134h-5.2c-2.5,0-4.5,2.1-4.5,4.8v30.5c0,2.6,2,4.8,4.5,4.8h5.2c2.5,0,4.5-2.1,4.5-4.8v-30.5 C33.8,136.2,31.8,134,29.3,134z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M25.9,121.4v66.7c0,0.4,0.1,0.7,0.4,1c0.2,0.3,0.6,0.4,0.9,0.4c0.3,0,0.7-0.1,0.9-0.4c0.2-0.3,0.4-0.6,0.4-1 v-66.7c0-0.4-0.1-0.7-0.4-1c-0.2-0.3-0.6-0.4-0.9-0.4c-0.3,0-0.7,0.1-0.9,0.4C26,120.7,25.9,121.1,25.9,121.4z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M45.3,155.2v61.6c0,0.3,0.2,0.6,0.4,0.8c0.2,0.2,0.5,0.3,0.8,0.3c0.3,0,0.6-0.1,0.8-0.3 c0.2-0.2,0.4-0.5,0.4-0.8v-61.6c0-0.3-0.2-0.6-0.4-0.8c-0.2-0.2-0.5-0.3-0.8-0.3c-0.3,0-0.6,0.1-0.8,0.3 C45.4,154.6,45.3,154.9,45.3,155.2z\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M49,171.1h-6c-2.3,0-4.1,1.9-4.1,4.3v24.4c0,2.4,1.8,4.3,4.1,4.3h6c2.3,0,4.1-1.9,4.1-4.3v-24.4 C53.1,173,51.2,171.1,49,171.1z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M63,126.8v89.1c0,0.4,0.2,0.8,0.4,1.1c0.3,0.3,0.7,0.5,1.1,0.5 c0.4,0,0.8-0.2,1.1-0.5c0.3-0.3,0.4-0.7,0.4-1.1v-89.1c0-0.4-0.2-0.8-0.4-1.1c-0.3-0.3-0.7-0.5-1.1-0.5c-0.4,0-0.8,0.2-1.1,0.5 C63.2,126,63,126.4,63,126.8z\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M86.8,151.1h-3.9c-2.8,0-5.1,2.4-5.1,5.4v41c0,3,2.3,5.4,5.1,5.4h3.9 c2.8,0,5.1-2.4,5.1-5.4v-41C92,153.5,89.7,151.1,86.8,151.1z\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M83.8,126.8v89.1c0,0.4,0.2,0.8,0.4,1.1c0.3,0.3,0.7,0.5,1.1,0.5 c0.4,0,0.8-0.2,1.1-0.5c0.3-0.3,0.4-0.7,0.4-1.1v-89.1c0-0.4-0.2-0.8-0.4-1.1c-0.3-0.3-0.7-0.5-1.1-0.5c-0.4,0-0.8,0.2-1.1,0.5 C84,126,83.8,126.4,83.8,126.8z\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M176.9,34.2H173c-2.8,0-5.1,2.4-5.1,5.4v41c0,3,2.3,5.4,5.1,5.4h3.9 c2.8,0,5.1-2.4,5.1-5.4v-41C182.1,36.6,179.8,34.2,176.9,34.2z\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M173.9,25.2v89.1c0,0.4,0.2,0.8,0.4,1.1c0.3,0.3,0.7,0.5,1.1,0.5 c0.4,0,0.8-0.2,1.1-0.5c0.3-0.3,0.4-0.7,0.4-1.1V25.2c0-0.4-0.2-0.8-0.4-1.1c-0.3-0.3-0.7-0.5-1.1-0.5c-0.4,0-0.8,0.2-1.1,0.5 C174.1,24.4,173.9,24.8,173.9,25.2z\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M199,48.2H195c-2.8,0-5.1,2.4-5.1,5.4v41c0,3,2.3,5.4,5.1,5.4h3.9c2.8,0,5.1-2.4,5.1-5.4v-41 C204.1,50.6,201.8,48.2,199,48.2z\"\n })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M196,26.5v104.1c0,0.4,0.2,0.8,0.4,1.1c0.3,0.3,0.7,0.5,1.1,0.5c0.4,0,0.8-0.2,1.1-0.5 c0.3-0.3,0.4-0.7,0.4-1.1V26.5c0-0.4-0.2-0.8-0.4-1.1c-0.3-0.3-0.7-0.5-1.1-0.5c-0.4,0-0.8,0.2-1.1,0.5C196.1,25.6,196,26,196,26.5z\"\n })), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M221,69.1h-3.9c-2.8,0-5.1,2.4-5.1,5.4v34c0,3,2.3,5.4,5.1,5.4h3.9c2.8,0,5.1-2.4,5.1-5.4v-34 C226.2,71.6,223.9,69.1,221,69.1z\"\n })), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M218,48v82.1c0,0.4,0.2,0.8,0.4,1.1c0.3,0.3,0.7,0.5,1.1,0.5c0.4,0,0.8-0.2,1.1-0.5c0.3-0.3,0.4-0.7,0.4-1.1 V48c0-0.4-0.2-0.8-0.4-1.1c-0.3-0.3-0.7-0.5-1.1-0.5c-0.4,0-0.8,0.2-1.1,0.5C218.2,47.2,218,47.6,218,48z\"\n })), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M243.1,104.1h-3.9c-2.8,0-5.1,2.4-5.1,5.4v13c0,3,2.3,5.4,5.1,5.4h3.9c2.8,0,5.1-2.4,5.1-5.4v-13 C248.2,106.5,245.9,104.1,243.1,104.1z\"\n })), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M240.1,84.6v61.1c0,0.4,0.2,0.8,0.4,1.1c0.3,0.3,0.7,0.5,1.1,0.5c0.4,0,0.8-0.2,1.1-0.5 c0.3-0.3,0.4-0.7,0.4-1.1V84.6c0-0.4-0.2-0.8-0.4-1.1c-0.3-0.3-0.7-0.5-1.1-0.5c-0.4,0-0.8,0.2-1.1,0.5 C240.2,83.8,240.1,84.2,240.1,84.6z\"\n })), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M272.1,90.1h-3.9c-2.8,0-5.1,2.4-5.1,5.4v41c0,3,2.3,5.4,5.1,5.4h3.9 c2.8,0,5.1-2.4,5.1-5.4v-41C277.3,92.5,275,90.1,272.1,90.1z\"\n })), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M269.1,59.4v89.1c0,0.4,0.2,0.8,0.4,1.1c0.3,0.3,0.7,0.5,1.1,0.5 c0.4,0,0.8-0.2,1.1-0.5c0.3-0.3,0.4-0.7,0.4-1.1V59.4c0-0.4-0.2-0.8-0.4-1.1c-0.3-0.3-0.7-0.5-1.1-0.5c-0.4,0-0.8,0.2-1.1,0.5 C269.3,58.5,269.1,59,269.1,59.4z\"\n })), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M106.8,137.8v67c0,0.4,0.1,0.7,0.4,1c0.2,0.3,0.6,0.4,0.9,0.4c0.3,0,0.7-0.1,0.9-0.4c0.2-0.3,0.4-0.6,0.4-1 v-67c0-0.4-0.1-0.7-0.4-1c-0.2-0.3-0.6-0.4-0.9-0.4c-0.3,0-0.7,0.1-0.9,0.4C107,137.1,106.8,137.5,106.8,137.8z\"\n })), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M110.6,152.8h-6c-2.3,0-4.1,1.9-4.1,4.3v24.4c0,2.4,1.8,4.3,4.1,4.3h6c2.3,0,4.1-1.9,4.1-4.3v-24.4 C114.7,154.8,112.9,152.8,110.6,152.8z\"\n })), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M131,85h-5c-2.5,0-4.6,2.2-4.6,4.9V180c0,2.7,2.1,4.9,4.6,4.9h5 c2.5,0,4.6-2.2,4.6-4.9V89.9C135.6,87.2,133.5,85,131,85z\"\n })), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M126.2,71v127c0,0.5,0.2,1,0.5,1.3c0.3,0.4,0.8,0.6,1.3,0.6s0.9-0.2,1.3-0.6 c0.3-0.4,0.5-0.8,0.5-1.3V71c0-0.5-0.2-1-0.5-1.3c-0.3-0.4-0.8-0.6-1.3-0.6s-0.9,0.2-1.3,0.6C126.4,70,126.2,70.5,126.2,71z\"\n })), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M149.6,70.5v67.1c0,0.4,0.1,0.7,0.4,1c0.2,0.3,0.6,0.4,0.9,0.4c0.3,0,0.7-0.1,0.9-0.4c0.2-0.3,0.4-0.6,0.4-1 V70.5c0-0.4-0.1-0.7-0.4-1c-0.2-0.3-0.6-0.4-0.9-0.4c-0.3,0-0.7,0.1-0.9,0.4C149.8,69.8,149.6,70.2,149.6,70.5z\"\n })), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M106.8,137.8v67c0,0.4,0.1,0.7,0.4,1c0.2,0.3,0.6,0.4,0.9,0.4c0.3,0,0.7-0.1,0.9-0.4c0.2-0.3,0.4-0.6,0.4-1 v-67c0-0.4-0.1-0.7-0.4-1c-0.2-0.3-0.6-0.4-0.9-0.4c-0.3,0-0.7,0.1-0.9,0.4C107,137.1,106.8,137.5,106.8,137.8z\"\n })), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M110.6,152.8h-6c-2.3,0-4.1,1.9-4.1,4.3v24.4c0,2.4,1.8,4.3,4.1,4.3h6c2.3,0,4.1-1.9,4.1-4.3v-24.4 C114.7,154.8,112.9,152.8,110.6,152.8z\"\n })), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M153.4,85.5h-6c-2.3,0-4.1,1.9-4.1,4.3v24.4c0,2.4,1.8,4.3,4.1,4.3h6c2.3,0,4.1-1.9,4.1-4.3V89.9 C157.5,87.5,155.6,85.5,153.4,85.5z\"\n })), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M68.1,175.5h-6.7c-2.1,0-3.8,1.8-3.8,4v20.1c0,2.2,1.7,4,3.8,4h6.7 c2.1,0,3.8-1.8,3.8-4v-20.1C71.9,177.2,70.2,175.5,68.1,175.5z\"\n })), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M296.8,39.9h-5c-2.5,0-4.6,2.2-4.6,4.9v83.2c0,2.7,2.1,4.9,4.6,4.9h5 c2.5,0,4.6-2.2,4.6-4.9V44.8C301.4,42.1,299.4,39.9,296.8,39.9z\"\n })), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M292,25.9v120c0,0.5,0.2,1,0.5,1.3c0.3,0.4,0.8,0.6,1.3,0.6 c0.5,0,0.9-0.2,1.3-0.6c0.3-0.4,0.5-0.8,0.5-1.3v-120c0-0.5-0.2-1-0.5-1.3c-0.3-0.4-0.8-0.6-1.3-0.6c-0.5,0-0.9,0.2-1.3,0.6 C292.2,24.9,292,25.4,292,25.9z\"\n })), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M315.5,25.4v67.1c0,0.3,0.2,0.6,0.4,0.9c0.2,0.2,0.5,0.3,0.9,0.3c0.3,0,0.6-0.1,0.9-0.3 c0.2-0.2,0.4-0.5,0.4-0.9V25.4c0-0.3-0.2-0.6-0.4-0.9c-0.2-0.2-0.5-0.3-0.9-0.3c-0.3,0-0.6,0.1-0.9,0.3 C315.6,24.8,315.5,25.1,315.5,25.4z\"\n })), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M319.2,40.5h-6c-2.3,0-4.1,1.9-4.1,4.3v24.4c0,2.4,1.8,4.3,4.1,4.3h6c2.3,0,4.1-1.9,4.1-4.3V44.8 C323.3,42.4,321.5,40.5,319.2,40.5z\"\n })), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M368.5,74h-8.6c-2.4,0-4.3,2-4.3,4.5v90.9c0,2.5,1.9,4.5,4.3,4.5h8.6 c2.4,0,4.3-2,4.3-4.5V78.5C372.8,76,370.9,74,368.5,74z\"\n })), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EDEDED\",\n d: \"M362.8,59.9v127c0,0.5,0.3,1,0.6,1.4c0.4,0.4,0.8,0.5,1.3,0.5 c0.5,0,1-0.2,1.3-0.5c0.4-0.4,0.6-0.8,0.6-1.4v-127c0-0.5-0.3-1-0.6-1.4c-0.4-0.4-0.8-0.5-1.3-0.5c-0.5,0-1,0.2-1.3,0.5 C363.1,58.9,362.8,59.4,362.8,59.9z\"\n })), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M335.6,59.5v67.1c0,0.4,0.2,0.7,0.5,1s0.6,0.4,1,0.4c0.4,0,0.7-0.1,1-0.4c0.3-0.2,0.4-0.6,0.5-1V59.5 c0-0.4-0.2-0.7-0.5-1c-0.3-0.3-0.6-0.4-1-0.4c-0.4,0-0.7,0.1-1,0.4C335.9,58.8,335.7,59.1,335.6,59.5z\"\n })), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M383.3,126.8v67.1c0,0.4,0.2,0.7,0.5,1s0.6,0.4,1,0.4c0.4,0,0.7-0.1,1-0.4c0.3-0.2,0.4-0.6,0.5-1v-67.1 c0-0.4-0.2-0.7-0.5-1c-0.3-0.2-0.6-0.4-1-0.4c-0.4,0-0.7,0.1-1,0.4C383.5,126.1,383.3,126.4,383.3,126.8z\"\n })), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M390.1,141.8h-9.5c-2.1,0-3.8,1.8-3.8,4v25c0,2.2,1.7,4,3.8,4h9.5c2.1,0,3.8-1.8,3.8-4v-25 C393.9,143.6,392.2,141.8,390.1,141.8z\"\n })), _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B7B7B7\",\n d: \"M342.5,74.5H333c-2.1,0-3.8,1.8-3.8,4v25c0,2.2,1.7,4,3.8,4h9.5c2.1,0,3.8-1.8,3.8-4v-25 C346.3,76.3,344.6,74.5,342.5,74.5z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgChartPlaceholder);\nexport default __webpack_public_path__ + \"static/media/chart-placeholder.8172afc7.svg\";\nexport { ForwardRef as ReactComponent };","export default __webpack_public_path__ + \"static/media/chart-placeholder-area.5d05581a.svg\";","import React from 'react'\nimport { ReactComponent as ChartPlaceholder } from './chart-placeholder.svg'\nimport chartPlaceholderArea from './chart-placeholder-area.svg'\nimport { Loader } from 'bzx-common/src/ui-framework'\n\ninterface IChartLoaderProps {\n showLoader?: boolean\n children?: React.ReactNode\n type: 'candle' | 'area'\n}\n\nconst chartTypes: Record<'candle' | 'area', { className: string; placeholder: React.ReactNode }> = {\n candle: {\n className: 'chart__loader flex-col flex-center z-100',\n placeholder: ,\n },\n area: {\n className: 'chart__loader--area',\n placeholder: ,\n },\n}\n\n/**\n * Loader for chart\n */\nexport function ChartLoader(props: IChartLoaderProps) {\n const { children, showLoader, type } = props\n const { className, placeholder } = chartTypes[type]\n\n return (\n
\n {placeholder}\n {showLoader ? (\n
\n \n
\n ) : (\n

{children}

\n )}\n
\n )\n}\n\nexport default React.memo(ChartLoader)\n","\n'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./bsc-connector.cjs.production.min.js')\n} else {\n module.exports = require('./bsc-connector.cjs.development.js')\n}\n","import { BigNumber } from '@0x/utils'\nimport assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { AnyProvider } from './providerUtils'\n\nconst getAvailableLiquidity = async (provider: AnyProvider, asset: Asset): Promise => {\n let result = new BigNumber(0)\n\n if (provider.contractsSource && provider.web3Wrapper) {\n const iTokenContract = provider.contractsSource.getITokenContract(asset)\n if (iTokenContract) {\n const decimals = assetUtils.getDecimals(provider.currentChainId, asset)\n const totalAssetSupply = await iTokenContract.totalAssetSupply().callAsync()\n const totalAssetBorrow = await iTokenContract.totalAssetBorrow().callAsync()\n\n const marketLiquidity = totalAssetSupply.minus(totalAssetBorrow)\n result = marketLiquidity.div(10 ** decimals)\n }\n }\n\n return result\n}\n\nexport default {\n getAvailableLiquidity,\n}\n","import { BigNumber } from '@0x/utils'\nimport assetUtils, { Asset } from 'app-lib/assetUtils'\nimport iTokensUtils from 'app-lib/iTokensUtils'\nimport { AnyProvider } from 'app-lib/providerUtils'\nimport IBorrowedFundsState, { LoanReturnData } from 'bzx-common/src/domain/IBorrowedFundsState'\nimport appConfig, { chainConfigs } from '../config/appConfig'\nimport IDepositEstimate from '../domain/borrow/IDepositEstimate'\nimport ICollateralChangeEstimate from '../domain/ICollateralChangeEstimate'\nimport ILoanParams from '../domain/ILoanParams'\n// import bzxApi from './apis/bzxApi'\nimport oracleApi from './apis/oracleApi'\nimport { ChainId } from '../config/chains/chainCommon'\nimport providerUtils from 'app-lib/providerUtils'\n\nconst getPositionSafetyText = (\n maintenanceMargin: BigNumber,\n collateralizedPercent: BigNumber\n): string => {\n const liquidationZone = maintenanceMargin.div(10 ** 20).toNumber()\n const dangerZone = liquidationZone + 0.1\n if (collateralizedPercent.gt(dangerZone)) {\n return 'Safe'\n } else if (collateralizedPercent.gt(liquidationZone)) {\n return 'Danger'\n } else if (collateralizedPercent.eq(0)) {\n return 'Display Error'\n } else {\n return 'Liquidation Pending'\n }\n}\n\n/** APR, interest the owner of the loan or a margin position */\nconst getBorrowInterestRate = async (provider: AnyProvider, asset: Asset): Promise => {\n const { contractsSource } = providerUtils.getDependenciesStrictRead(provider)\n const assetContract = contractsSource.getITokenContract(asset)\n const result = await assetContract.borrowInterestRate().callAsync()\n return result.div(10 ** 18)\n}\n\nasync function getLoanParamsOnChain(\n provider: AnyProvider,\n loanAsset: Asset,\n collateralAsset: Asset,\n isBorrow: boolean\n): Promise {\n const { contractsSource, chainId } = providerUtils.getDependenciesStrictRead(provider)\n const bzxContract = contractsSource.getiBZxContract()\n const collateralTokenAddress = assetUtils.getAddress(chainId, collateralAsset)\n const loanTokenAddress = assetUtils.getAddress(chainId, loanAsset)\n const [loanParams] = await bzxContract\n .getDefaultLoanParams(loanTokenAddress, collateralTokenAddress, isBorrow)\n .callAsync()\n return { loanId: loanParams.id, ...loanParams }\n}\n\nconst getLoanParams = async (\n provider: AnyProvider,\n asset: Asset,\n collateralAsset: Asset,\n isBorrow: boolean\n): Promise => {\n // Keeping this code until the backend api works again, or, we decide to get params only onchain.\n\n // try {\n // const platform = isBorrow ? 'Torque' : 'Fulcrum'\n // const loanParamFromApi = await bzxApi.getLoanParams(\n // provider.currentChainId,\n // platform,\n // asset,\n // collateralAsset\n // )\n // if (!loanParamFromApi) {\n // throw new Error('Loan params not found in API')\n // }\n // return {\n // loanId: loanParamFromApi.loanId,\n // loanToken: loanParamFromApi.principal,\n // collateralToken: loanParamFromApi.collateral,\n // minInitialMargin: new BigNumber(loanParamFromApi.initialMargin).times(10 ** 18),\n // maintenanceMargin: new BigNumber(loanParamFromApi.maintenanceMargin).times(10 ** 18),\n // } as ILoanParams\n // } catch (err) {\n // console.error(\n // `Failing API getLoanParams | asset: ${asset} | collateralAsset: ${collateralAsset}; trying from blockchain...`,\n // err\n // )\n // }\n\n return getLoanParamsOnChain(provider, asset, collateralAsset, isBorrow)\n}\n\nconst formatLoan = (\n data: LoanReturnData,\n chainId: ChainId,\n account: string\n): IBorrowedFundsState => {\n let loanAsset = assetUtils.getAssetFromAddress(chainId, data.loanToken)\n // could be WETH address instead of ETH, so replace it with native token for sure\n loanAsset = assetUtils.isNativeTokenForNetwork(chainId, loanAsset)\n ? chainConfigs[chainId].native.asset\n : loanAsset\n let collateralAsset = assetUtils.getAssetFromAddress(chainId, data.collateralToken)\n collateralAsset = assetUtils.isNativeTokenForNetwork(chainId, collateralAsset)\n ? chainConfigs[chainId].native.asset\n : collateralAsset\n\n const loanPrecision = assetUtils.getDecimals(chainId, loanAsset)\n const collateralPrecision = assetUtils.getDecimals(chainId, collateralAsset)\n let amountOwned = data.principal.minus(data.interestDepositRemaining)\n amountOwned = amountOwned.lte(0)\n ? new BigNumber(0)\n : amountOwned.dividedBy(10 ** loanPrecision).dp(3, BigNumber.ROUND_CEIL)\n\n const interestRate = data.interestOwedPerDay.dividedBy(data.principal).multipliedBy(365)\n\n return {\n accountAddress: account,\n loanId: data.loanId,\n loanAsset: loanAsset,\n collateralAsset: collateralAsset,\n amount: data.principal.dividedBy(10 ** loanPrecision).dp(3, BigNumber.ROUND_CEIL),\n amountOwed: amountOwned,\n collateralAmount: data.collateral.dividedBy(10 ** collateralPrecision),\n collateralizedPercent: data.currentMargin.dividedBy(10 ** 20),\n interestRate,\n interestOwedPerDay: data.interestOwedPerDay.dividedBy(10 ** loanPrecision),\n hasManagementContract: true,\n isInProgress: false,\n loanData: data,\n }\n}\n\nconst getLoanById = async (\n provider: AnyProvider,\n loanId: string\n): Promise => {\n const { contractsSource, chainId, userAddress } = providerUtils.getDependenciesStrict(provider)\n const bzxContract = contractsSource.getiBZxContract()\n const loanData = await bzxContract.getLoan(loanId).callAsync()\n const zero = new BigNumber(0)\n\n if (!loanData.principal.eq(zero) && !loanData.currentMargin.eq(zero)) {\n // What's that test for?\n return formatLoan(loanData, chainId, userAddress)\n }\n return null\n}\n\nconst getLoansList = async (provider: AnyProvider): Promise => {\n const { contractsSource, chainId, userAddress } = providerUtils.getDependenciesStrict(provider)\n const bzxContract = contractsSource.getiBZxContract()\n\n const loansData = await bzxContract\n .getUserLoans(\n userAddress,\n new BigNumber(0),\n new BigNumber(50),\n 2, // Torque loans\n false,\n false\n )\n .callAsync()\n\n return loansData.map((e: LoanReturnData) => formatLoan(e, chainId, userAddress))\n}\n\nfunction getLoanExtendEstimate(interestOwedPerDay: BigNumber, daysToAdd: number) {\n return interestOwedPerDay.multipliedBy(daysToAdd)\n}\n\nasync function getDepositAmountEstimate(\n provider: AnyProvider,\n borrowAsset: Asset,\n collateralAsset: Asset,\n amount: BigNumber\n): Promise {\n const { chainId, helperContract } = providerUtils.getDependenciesStrictRead(provider)\n const result = { depositAmount: new BigNumber(0), gasEstimate: new BigNumber(0) }\n\n const [loanToken, collateralToken] = assetUtils.getTokensInfo(chainId, [\n borrowAsset,\n collateralAsset,\n ])\n\n if (amount.gt(0)) {\n const borrowEstimate = await helperContract\n .getDepositAmountForBorrow(\n amount.multipliedBy(10 ** loanToken.decimals),\n loanToken.address,\n collateralToken.address\n )\n .callAsync()\n\n result.depositAmount = borrowEstimate.dividedBy(10 ** collateralToken.decimals)\n }\n\n return result\n}\n\nconst getCollateralExcessAmount = async (\n provider: AnyProvider,\n borrowedFundsState: IBorrowedFundsState\n): Promise => {\n let result = new BigNumber(0)\n const { currentChainId } = provider\n\n if (provider.web3Wrapper && provider.contractsSource && provider.contractsSource.canWrite) {\n const account = provider.currentAccount\n const bzxContract = provider.contractsSource.getiBZxContract()\n if (account && bzxContract) {\n result = await bzxContract\n .withdrawCollateral(borrowedFundsState.loanId, account, appConfig.MAX_UINT)\n .callAsync({\n from: account,\n gas: appConfig.gas.gasLimitFallback,\n })\n const precision = assetUtils.getDecimals(currentChainId, borrowedFundsState.collateralAsset)\n result = result.dividedBy(10 ** precision)\n }\n }\n return result\n}\n\nconst getLoanCollateralChangeEstimate = async (\n provider: AnyProvider,\n borrowedFundsState: IBorrowedFundsState,\n collateralAmount: BigNumber,\n isWithdrawal: boolean\n): Promise => {\n const result = {\n collateralAmount: collateralAmount,\n collateralizedPercent: new BigNumber(0),\n liquidationPrice: new BigNumber(0),\n gasEstimate: new BigNumber(0),\n isWithdrawal: isWithdrawal,\n }\n\n if (provider.contractsSource && provider.web3Wrapper && borrowedFundsState.loanData) {\n const oracleContract = provider.contractsSource.getOracleContract()\n const collateralAsset = assetUtils.getAssetFromAddress(\n provider.currentChainId,\n borrowedFundsState.loanData.collateralToken\n )\n const collateralPrecision = assetUtils.getDecimals(provider.currentChainId, collateralAsset)\n let newAmount = new BigNumber(0)\n if (collateralAmount && collateralAmount.gt(0)) {\n newAmount = collateralAmount.multipliedBy(10 ** collateralPrecision)\n }\n result.collateralAmount = isWithdrawal\n ? new BigNumber(borrowedFundsState.loanData.collateral.minus(newAmount).toFixed(0, 1))\n : new BigNumber(borrowedFundsState.loanData.collateral.plus(newAmount).toFixed(0, 1))\n try {\n const newCurrentMargin: [BigNumber, BigNumber] = await oracleContract\n .getCurrentMargin(\n borrowedFundsState.loanData.loanToken,\n borrowedFundsState.loanData.collateralToken,\n borrowedFundsState.loanData.principal,\n result.collateralAmount\n )\n .callAsync()\n result.collateralizedPercent = newCurrentMargin[0].dividedBy(10 ** 18).plus(100)\n } catch (e) {\n result.collateralizedPercent = borrowedFundsState.collateralizedPercent.times(100).plus(100)\n }\n }\n\n return result\n}\n\nconst getBorrowAmountEstimate = async (\n provider: AnyProvider,\n borrowAsset: Asset,\n collateralAsset: Asset,\n depositAmount: BigNumber,\n collaterizationPercent: BigNumber,\n minInitialMargin?: BigNumber\n) => {\n const { chainId, helperContract } = providerUtils.getDependenciesStrictRead(provider)\n\n const result = {\n borrowAsset,\n collateralAsset,\n borrowAmount: new BigNumber(0),\n liquidityAvailable: new BigNumber(0),\n exceedsLiquidity: false,\n collateralToLoanRate: new BigNumber(0),\n }\n\n if (depositAmount.lte(0)) {\n return result\n }\n\n const collateralToLoanRate = await oracleApi.getSwapRate(provider, collateralAsset, borrowAsset)\n const liquidity = await iTokensUtils.getAvailableLiquidity(provider, borrowAsset)\n const [loanToken, collateralToken] = assetUtils.getTokensInfo(chainId, [\n borrowAsset,\n collateralAsset,\n ])\n result.liquidityAvailable = liquidity\n result.collateralToLoanRate = collateralToLoanRate\n\n if (depositAmount.times(collateralToLoanRate).gte(liquidity)) {\n result.borrowAmount = liquidity.times(0.9)\n result.exceedsLiquidity = true\n return result\n }\n\n const borrowEstimate = await helperContract\n .getBorrowAmountForDeposit(\n depositAmount.times(10 ** collateralToken.decimals),\n loanToken.address,\n collateralToken.address\n )\n .callAsync()\n\n if (!minInitialMargin) {\n minInitialMargin = (\n await getLoanParams(provider, borrowAsset, collateralAsset, true)\n ).minInitialMargin\n .div(10 ** 18)\n .plus(100)\n }\n // getBorrowAmountForDeposit estimates borrow amount for 20% less collaterization than getDepositAmountForBorrow\n // example: borrow 52USDC for 1ETH (1eth = 100USDC) with desired collaterization 200%\n // by default, it will create a loan with borrowed 52USDC, 1ETH collateral and 180% collaterization\n // so we need to compensate provider 20%\n const realBorrowAmount = borrowEstimate\n .div(collaterizationPercent.plus(20))\n .times(minInitialMargin)\n result.borrowAmount = realBorrowAmount\n .dividedBy(10 ** loanToken.decimals)\n .precision(loanToken.decimals, 1)\n\n return result\n}\n\nconst getLiquidationPrice = (\n provider: AnyProvider,\n loan: IBorrowedFundsState,\n collateralAmount: BigNumber,\n activeToken: string\n) => {\n const { loanAsset, collateralAsset, loanData } = loan\n const loanAssetDecimals = assetUtils.getDecimals(provider.currentChainId, loanAsset)\n const collateralAssetDecimals = assetUtils.getDecimals(provider.currentChainId, collateralAsset)\n\n const loanAssetPrecision = new BigNumber(10 ** (18 - loanAssetDecimals))\n const collateralAssetPrecision = new BigNumber(10 ** (18 - collateralAssetDecimals))\n\n const liquidationCollateralToLoanRate = loanData.maintenanceMargin\n .times(loanData.principal.times(loanAssetPrecision))\n .div(10 ** 20)\n .plus(loanData.principal.times(loanAssetPrecision))\n .div(collateralAmount.times(collateralAssetPrecision))\n .times(10 ** 18)\n\n const liquidationPrice =\n activeToken === collateralAsset\n ? liquidationCollateralToLoanRate.div(10 ** 18)\n : new BigNumber(1).div(liquidationCollateralToLoanRate.div(10 ** 18))\n\n return liquidationPrice\n}\n\n/**\n * Get expected liquidation price and collateralization percent.\n * @param {IBorrowedFundsState} loan current loan\n * @param {BigNumber} changeAmount how much the amount need to change *\n * @param {bolean} isWithdrawal true if need to decrease collateralization percent false - increase\n * @param {string} activeToken in which coins the liquidation price need to be displayed\n */\nconst getEstimateDataChangeEstimate = async (\n provider: AnyProvider,\n loan: IBorrowedFundsState,\n changeAmount: BigNumber,\n isWithdrawal: boolean,\n activeToken: string\n) => {\n const result = {\n collateralizedPercent: new BigNumber(0),\n liquidationPrice: new BigNumber(0),\n }\n\n const collateral = await getLoanCollateralChangeEstimate(\n provider,\n loan,\n new BigNumber(changeAmount),\n isWithdrawal\n )\n result.collateralizedPercent = collateral.collateralizedPercent\n result.liquidationPrice = getLiquidationPrice(\n provider,\n loan,\n collateral.collateralAmount,\n activeToken\n )\n\n return result\n}\n\n/**\n * Get expected liquidation price and collateralization percent for Borrow more.\n * @param {BigNumber} changeAmount how much the borrow need to increase\n * @param {string} activeToken in which coins the liquidation price need to be displayed\n */\nconst getBorrowMoreChangeEstimate = async (\n provider: AnyProvider,\n loan: IBorrowedFundsState,\n changeAmount: BigNumber,\n activeToken: string\n) => {\n const borrowMoreLoan = { ...loan }\n borrowMoreLoan.loanData = { ...loan.loanData } // deep copy\n const decimals = assetUtils.getDecimals(provider.currentChainId, loan.loanAsset)\n borrowMoreLoan.loanData.principal = borrowMoreLoan.loanData.principal.plus(\n changeAmount.times(10 ** decimals)\n )\n\n return await getEstimateDataChangeEstimate(\n provider,\n borrowMoreLoan,\n new BigNumber(0),\n false,\n activeToken\n )\n}\n\n/**\n * Get expected liquidation price and collateralization percent for Repay.\n * @param {BigNumber} changeAmount how much the borrow need to decrease\n * @param {string} activeToken in which coins the liquidation price need to be displayed\n */\nconst getRepayChangeEstimate = async (\n provider: AnyProvider,\n loan: IBorrowedFundsState,\n changeAmount: BigNumber,\n activeToken: string\n) => {\n const borrowLessloan = { ...loan }\n borrowLessloan.loanData = { ...loan.loanData } // deep copy\n const decimals = assetUtils.getDecimals(provider.currentChainId, loan.loanAsset)\n borrowLessloan.loanData.principal = borrowLessloan.loanData.principal.minus(\n changeAmount.times(10 ** decimals)\n )\n\n return await getEstimateDataChangeEstimate(\n provider,\n borrowLessloan,\n new BigNumber(0),\n true,\n activeToken\n )\n}\n\n/**\n * Get the interest rate change if user adds or removes liquidity.\n * @param amount (in decimals)\n */\nasync function nextBorrowInterestRate(provider: AnyProvider, asset: Asset, amount: BigNumber) {\n const { chainId, contractsSource } = providerUtils.getDependenciesStrictRead(provider)\n const decimals = assetUtils.getDecimals(chainId, asset)\n const iToken = contractsSource.getITokenContract(asset)\n return (await iToken.nextBorrowInterestRate(amount.times(10 ** decimals)).callAsync()).div(\n 10 ** 18\n )\n}\n\nexport default {\n getBorrowAmountEstimate,\n getBorrowInterestRate,\n getBorrowMoreChangeEstimate,\n getCollateralExcessAmount,\n getDepositAmountEstimate,\n getEstimateDataChangeEstimate,\n getLiquidationPrice,\n getLoanById,\n getLoanCollateralChangeEstimate,\n getLoanExtendEstimate,\n getLoanParams,\n getLoansList,\n getPositionSafetyText,\n getRepayChangeEstimate,\n nextBorrowInterestRate,\n}\n","import { useEffect } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nexport function ScrollToTop() {\n const { pathname } = useLocation()\n\n useEffect(() => {\n window.scrollTo(0, 0)\n }, [pathname])\n\n return null\n}\n","var _g, _ellipse, _path, _path2, _circle, _circle2, _path3, _path4, _path5, _path6, _path7, _path8, _g2, _path9, _path10, _path11, _path12, _path13, _g3, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _polygon, _path21, _path22, _polygon2, _rect, _path23, _rect2, _path24, _path25, _path26, _path27, _path28, _path29, _path30, _path31, _path32, _path33, _path34, _path35, _path36, _path37, _path38, _path39, _g4, _rect3, _rect4, _rect5, _rect6, _path40, _path41, _defs, _clipPath, _g5, _g6;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgOokiWorker(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 232 300\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n opacity: 0.7\n }, /*#__PURE__*/React.createElement(\"ellipse\", {\n opacity: 0.4,\n fill: \"#8F8FBC\",\n cx: 118.5,\n cy: 273,\n rx: 113.5,\n ry: 27\n }))), _ellipse || (_ellipse = /*#__PURE__*/React.createElement(\"ellipse\", {\n fill: \"#FBC24F\",\n cx: 153.9,\n cy: 110.2,\n rx: 73.8,\n ry: 73.6\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M153.9,185.2c-41.4,0-74.9-33.6-74.9-74.9s33.7-74.8,75.1-74.7S229,69.2,229,110.5c0,30-18.1,57.1-45.8,68.8 C173.9,183.3,163.9,185.3,153.9,185.2z M153.9,38c-39.9,0-72.4,32.4-72.4,72.2s32.5,72.2,72.4,72.2s72.4-32.4,72.4-72.2 S193.8,38,153.9,38z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M153.9,185.2c-41.4,0-74.9-33.6-74.9-74.9s33.7-74.8,75.1-74.7S229,69.2,229,110.5c0,30-18.1,57.1-45.8,68.8 C173.9,183.3,163.9,185.3,153.9,185.2z M153.9,38c-39.9,0-72.4,32.4-72.4,72.2s32.5,72.2,72.4,72.2s72.4-32.4,72.4-72.2 S193.8,38,153.9,38z\"\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n fill: \"#29235C\",\n cx: 103.6,\n cy: 106.4,\n r: 3.7\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n fill: \"#29235C\",\n cx: 150.1,\n cy: 106.4,\n r: 3.7\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M131.6,110.3c-0.1-0.1-0.1-0.3-0.2-0.4c-0.1-0.2-0.3-0.4-0.5-0.5c-0.3-0.3-0.7-0.4-1.1-0.4 c-2.4,0-4.9-0.1-7.3-0.1c-0.2,0-0.3,0-0.5,0.1c-0.3,0.1-0.6,0.2-0.8,0.5c-0.4,0.4-0.6,0.8-0.6,1.3c-0.1,1,0.2,1.9,0.8,2.7 c0.4,0.6,1,1.1,1.6,1.5c0.5,0.2,1,0.4,1.5,0.5c2,0.4,4.2,0.2,5.7-1.3c0.5-0.5,0.9-1.2,1.1-1.9c0.1-0.2,0.2-0.4,0.2-0.6 C131.7,111.2,131.7,110.8,131.6,110.3z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FBC24F\",\n d: \"M173.6,172.3c-2.2,7.7-6.6,44.2-5.2,58.4c1.2,12.5,4.9,21.4,5.7,23.2c1.1,2.7,2.4,5.3,3.9,7.9 c-5.3-1.2-10.4,0.4-12.8,4c-0.3,0.5-2.7,4.2-1.2,8.2c0.5,1.2,1.2,2.3,2.2,3.1c2.7,0.2,19.4,1.6,25.2,0.3c0.8-0.2,1.6-0.5,2.2-1 c2.5-2,2.6-6.1,1.9-8.9c-0.3-1.4-0.9-2.7-1.6-3.9c-5.1-7.8-9.3-21.3-9.8-22.9c-1.8-6-2.7-12.2-2.5-18.4c0.2-9.2,4.5-39.2,6.4-43.6 L173.6,172.3L173.6,172.3z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.69,\n fill: \"#E5852E\",\n d: \"M185.7,188.5c0.8-4.8,1.6-8.6,2.2-9.9l-14.4-6.3 c-0.6,2.2-1.4,6.6-2.2,12.2c1.9,0.7,4,1.4,6.2,2C180.2,187.3,183,188,185.7,188.5z\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M183.3,279.4c-6.6,0-14.3-0.6-17.3-0.9h-0.5l-0.4-0.3c-1.2-1-2.1-2.3-2.6-3.7c-1.8-4.5,0.8-8.7,1.3-9.6 c2.3-3.4,6.6-5.3,11.3-5.1c-0.9-1.8-1.8-3.6-2.5-5.4c-1.4-3.2-4.6-12-5.8-23.6c-1.4-14.2,2.8-50.7,5.2-58.9l0.5-1.6l17.3,7.6 l-0.6,1.4c-1.7,4-6.1,33.7-6.3,43.1c-0.2,6.1,0.7,12.1,2.5,18c1.1,3.5,5,15.4,9.7,22.5c0.9,1.3,1.5,2.8,1.8,4.3 c0.8,3.3,0.6,8-2.5,10.4c-0.8,0.7-1.8,1.1-2.8,1.3C189.7,279.3,186.7,279.4,183.3,279.4L183.3,279.4z M166.8,275.6 c9.1,0.8,20.1,1.2,24.2,0.3c0.6-0.1,1.2-0.4,1.6-0.7c1.8-1.5,2-4.9,1.4-7.4c-0.3-1.2-0.8-2.3-1.4-3.4c-4.8-7.4-8.9-19.7-10-23.3 c-1.9-6.1-2.8-12.5-2.6-18.9c0.2-8.5,3.9-35.2,6.1-42.7l-11.5-5c-2.3,10.4-6,43.4-4.7,56.2c1.1,11.3,4.3,19.7,5.6,22.8 c1.1,2.6,2.4,5.2,3.8,7.7l1.7,3l-3.3-0.8c-4.6-1.1-9.2,0.3-11.2,3.4c-0.4,0.6-2.3,3.7-1,6.8C165.6,274.2,166.1,275,166.8,275.6 L166.8,275.6z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#445DB7\",\n d: \"M169.3,167.7c-7.7,27.6-8.4,56.8-1.9,84.7c7.9,4.6,17.8,4.1,25.2-1.2c-2-6.4-3.4-12.9-4.4-19.5 c-3.6-25.6,1.2-47.3,5.9-61.4c-4.8-0.3-9.8-0.7-14.9-1.2C175.9,168.5,172.6,168.1,169.3,167.7L169.3,167.7z\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M179.1,256.9c-4.3,0-8.6-1.2-12.4-3.3l-0.5-0.3l-0.1-0.6c-6.6-28.2-5.9-57.6,1.9-85.4l0.3-1.2l1.2,0.2 c3.3,0.5,6.6,0.9,9.9,1.2c4.9,0.5,9.9,0.9,14.9,1.2l1.8,0.1l-0.6,1.7c-6.7,20.3-8.7,40.7-5.9,60.8c0.9,6.5,2.4,13,4.3,19.3l0.3,1 l-0.8,0.6c-3.8,2.7-8.2,4.3-12.9,4.6C180.1,256.9,179.6,256.9,179.1,256.9z M168.7,251.5c3.6,1.9,7.7,2.9,11.7,2.6 c3.8-0.2,7.4-1.4,10.6-3.5c-1.8-6.2-3.2-12.4-4.1-18.8c-2.8-19.9-1-40.2,5.4-60.3c-4.4-0.3-8.8-0.7-13.2-1.1 c-2.9-0.3-5.9-0.7-8.8-1.1C163.1,196.1,162.5,224.3,168.7,251.5L168.7,251.5z\"\n })), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n opacity: 0.69\n }, /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.4,\n fill: \"#2B2687\",\n d: \"M192.7,251.1c-1.3-6.8-3.1-16.6-4.7-28.7 c-1.1-7.9-1.8-11.9-1.8-15.8c-0.1-9.8,1.7-21.8,8.1-36.5c-0.9-0.2-1.9-0.3-2.9-0.5c-2.4-0.4-4.7-0.6-6.8-0.7 c-3.5,7.8-3.4,9.7-5.5,21.1c-5.4,30.3,0.7,51.7,5.8,64.8L192.7,251.1L192.7,251.1z\"\n }))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FBC24F\",\n d: \"M115.1,172.8c-2.6-0.5-32.3-4.5-36.5-4.8c-4.2-0.2-10.5-0.5-18.2,1c-7.8,1.5-13.3,4.2-19.7,7.2 c-2.8,1.3-4.2,2-6,3.2c-5.1,3.4-5.3,5.5-9.3,7c-1.1,0.4-5.2,2-8.4,0.2c-0.9-0.5-1.6-1.2-2.1-2.1c-1.4-10.5-2.5-17.7-3.4-21.4 c-0.1-0.4-0.4-1.6,0.2-2.8c1.2-2.6,5.6-3.3,8.8-2.6c2.8,0.7,4.4,2.6,5.9,4.4c1.5,1.8,2.7,3.9,3.3,6.2c3.8-2.3,7.8-4.3,11.9-6.1 c4-1.8,12-5.1,22.9-6.9c10.8-1.8,46.5,2.3,53.8,3.3L115.1,172.8L115.1,172.8z\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.69,\n fill: \"#E5852E\",\n d: \"M105,171.6c4.9,0.2,8.5,1,10.1,0.8l3.1-13.7 c-2.2-0.3-5.6-0.6-11.3-0.6c-0.5,1.8-0.9,3.8-1.2,5.8C105.4,166.4,105.1,169,105,171.6z\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M20.5,189c-1.5,0-2.9-0.3-4.2-1c-1.1-0.6-2-1.5-2.6-2.6l-0.2-0.3v-0.3c-1.4-11.1-2.5-17.8-3.4-21.3 c-0.3-1.4-0.2-2.6,0.3-3.7c1.6-3.3,6.6-4.3,10.4-3.3c3.3,0.8,5.2,3,6.7,4.8c1.3,1.5,2.3,3.2,3,5c3.4-2,6.9-3.7,10.5-5.3 c3.6-1.5,11.9-5.2,23.2-7c11.6-1.9,49.2,2.6,54.2,3.3l-0.4,2.8c-8-1.1-42.9-5-53.3-3.3c-11,1.8-18.8,5.2-22.5,6.8 c-4,1.7-7.9,3.8-11.7,6l-1.6,1l-0.5-1.8c-0.6-2.1-1.7-4-3.1-5.7s-2.8-3.3-5.2-3.9c-2.6-0.6-6.3,0-7.1,1.8c-0.4,0.7-0.2,1.5-0.1,1.8 c0.9,3.5,1.9,10.1,3.4,21.3c0.4,0.6,0.9,1,1.5,1.3c1.7,1,4.1,0.9,7.2-0.3c2-0.8,2.8-1.6,4.2-2.9c1.5-1.5,3.1-2.8,4.9-4 c1.9-1.3,3.3-1.9,6.2-3.3c6.5-3.1,12.1-5.8,20-7.3c8-1.6,14.6-1.2,18.6-1c4.5,0.2,34.4,4.4,36.7,4.8l-0.5,2.8 c-2.2-0.4-32.1-4.5-36.3-4.7c-3.8-0.2-10.2-0.5-17.8,1s-13,4.1-19.3,7.1c-2.7,1.3-4.1,1.9-5.8,3.1c-1.6,1.1-3.1,2.3-4.5,3.7 c-1.4,1.4-2.6,2.5-5.1,3.5C24,188.6,22.2,189,20.5,189L20.5,189z\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#445DB7\",\n d: \"M121.6,151.7c-28.4-3.5-57.3-0.6-84.4,8.6c-1.7,3.7-2.2,8-1.3,12c1.2,5.4,4.5,8.9,5.9,10.3 c6.1-2.5,12.4-4.6,18.8-6.2c24.9-6.3,47.1-4.7,61.8-2.2c-0.4-4.3-0.6-8.8-0.8-13.4C121.6,157.6,121.5,154.6,121.6,151.7L121.6,151.7 z\"\n })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M41.5,184.1l-0.6-0.6c-2.3-2.1-5.2-5.7-6.3-10.9c-1.3-5.7,0.3-10.5,1.4-12.8l0.2-0.5l0.5-0.2 c27.3-9.2,56.4-12.2,85-8.7l1.2,0.1v1.2c0,3,0,6,0.1,8.9c0.1,4.4,0.4,8.9,0.8,13.4l0.1,1.7l-1.7-0.3c-21.1-3.5-41.7-2.8-61.3,2.2 c-6.4,1.6-12.6,3.7-18.6,6.2L41.5,184.1L41.5,184.1z M38.2,161.4c-1.4,3.4-1.8,7.1-1,10.6c0.8,3.4,2.5,6.5,4.9,9 c5.9-2.4,12-4.4,18.2-6c19.4-4.9,39.8-5.8,60.7-2.5c-0.3-3.9-0.5-7.9-0.6-11.8c-0.1-2.6-0.1-5.2-0.1-7.9 C92.6,149.6,64.5,152.5,38.2,161.4L38.2,161.4z\"\n })), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n opacity: 0.69\n }, /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.4,\n fill: \"#2B2687\",\n d: \"M41.5,182.4c6.5-1.9,16.1-4.6,27.9-7.5 c7.7-1.9,11.6-2.9,15.5-3.4c9.7-1.2,21.8-1,37.3,3c0.1-0.9,0.1-1.7,0.1-2.6c0.1-2.2,0-4.2-0.1-6.2c-8.2-2.2-10.1-2-21.7-2.5 c-30.8-1.4-51.3,6.6-63.7,12.6L41.5,182.4L41.5,182.4z\"\n }))), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#445DB7\",\n d: \"M118.3,37.9l0.5-8.4c4.8-19.8,25-31.9,44.9-27s32.2,24.9,27.4,44.7\"\n })), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M119.7,37.9l0.4-7c0-0.4,0-0.8,0.1-1.3v-0.1c0,0.1-0.1,0.4,0,0.2c0-0.1,0-0.2,0.1-0.3 c0.1-0.6,0.3-1.1,0.5-1.7c0.3-1,0.7-2.1,1.1-3.1l0.1-0.2c0.1-0.2,0,0,0,0.1c0.1-0.1,0.1-0.2,0.2-0.4c0.1-0.3,0.2-0.5,0.4-0.8 c0.2-0.5,0.5-1,0.7-1.4c0.5-1,1-1.9,1.6-2.8c0.3-0.4,0.6-0.9,0.9-1.3c0.2-0.2,0.3-0.4,0.5-0.6l0.2-0.3c0-0.1,0.1-0.1,0.1-0.2 c0.2-0.2-0.1,0.1,0,0c1.3-1.7,2.7-3.2,4.3-4.6c0.4-0.4,0.8-0.7,1.2-1.1c0.2-0.2,0.4-0.3,0.6-0.5c0.1-0.1,0.2-0.2,0.3-0.2 c0.2-0.2,0,0-0.1,0c0.1-0.1,0.2-0.1,0.2-0.2c0.8-0.6,1.7-1.2,2.6-1.8c0.9-0.6,1.8-1.1,2.8-1.6c0.5-0.2,1-0.5,1.4-0.7 c0.2-0.1,0.4-0.2,0.7-0.3l0.4-0.2c0,0,0.2-0.1,0.1,0h0.1c2-0.8,4-1.5,6.1-1.9c0.5-0.1,1-0.2,1.6-0.3c0.3,0,0.5-0.1,0.8-0.1l0.4-0.1 h0.2c0.3,0-0.2,0,0,0c1.1-0.1,2.2-0.2,3.2-0.3s2.2,0,3.2,0c0.6,0,1.1,0.1,1.7,0.1c0.3,0,0.5,0,0.8,0.1h0.6c0.3,0-0.2,0,0,0 c2.2,0.3,4.5,0.8,6.6,1.5c0.5,0.2,1.1,0.4,1.6,0.6c0.2,0.1,0.5,0.2,0.7,0.3l0.4,0.2c0,0,0.1,0,0.1,0.1c-0.3-0.1-0.1,0,0,0 c1,0.4,2,0.9,3,1.4s1.9,1.1,2.8,1.7c0.4,0.3,0.9,0.6,1.3,0.9c0.2,0.2,0.4,0.3,0.6,0.5c0,0,0.1,0.1,0.2,0.1l-0.1-0.1 c0.1,0.1,0.2,0.2,0.4,0.3c1.7,1.3,3.2,2.8,4.6,4.4c0.3,0.4,0.7,0.8,1,1.2c0.2,0.2,0.3,0.4,0.5,0.6s0,0,0-0.1c0,0.1,0.1,0.1,0.1,0.2 l0.3,0.3c0.6,0.8,1.2,1.7,1.8,2.6s1.1,1.8,1.5,2.8c0.2,0.5,0.5,0.9,0.7,1.4c0.1,0.2,0.2,0.5,0.3,0.7c0.1,0.3-0.1-0.2,0,0.1 c0.1,0.2,0.1,0.3,0.2,0.5c0.8,2,1.4,4,1.8,6c0.1,0.5,0.2,1.1,0.3,1.6c0,0.2,0.1,0.5,0.1,0.7c0,0,0.1,0.5,0,0.3s0,0,0,0.1v0.2 c0.1,1.1,0.2,2.1,0.2,3.2v3.3c0,0.5-0.1,1.1-0.1,1.6c0,0.3-0.1,0.5-0.1,0.8v0.2v-0.1c0,0.2,0,0.3-0.1,0.5c-0.2,1.1-0.4,2.1-0.6,3.2 c-0.2,0.7,0.2,1.5,1,1.7c0.7,0.2,1.5-0.2,1.7-1c1.1-4.4,1.4-9,0.8-13.6c-1.1-8.9-5.2-17.1-11.7-23.3c-3.3-3.1-7-5.6-11.2-7.4 c-4.4-1.9-9.1-3-13.8-3.2c-9-0.4-17.8,2.3-25,7.7c-5.5,4.1-9.8,9.6-12.3,16c-0.4,1-0.8,2.1-1.2,3.2c-0.3,0.8-0.6,1.7-0.7,2.6 c-0.2,2.5-0.3,5.1-0.4,7.6v0.7c0,0.8,0.6,1.4,1.4,1.4C119.1,39.3,119.7,38.7,119.7,37.9L119.7,37.9z\"\n })), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#D7E2FF\",\n d: \"M118.3,38.5c-4.7,2.7-8.5,5.3-11.2,7.2c-4.9,3.5-6.4,5-6.4,7c-0.1,2.8,3,4.9,3.7,5.4 c7.9,5.6,23-1.3,27.7-3.3c11.9-5,30.5-9.7,59.2-7.5c-2.3-0.9-5.7-2.3-9.9-3.7c-7.8-2.6-24.2-8-45.3-7.1c-2.4,0.1-4.9,0.3-4.9,0.3 C126.8,37.1,122.6,37.7,118.3,38.5z\"\n })), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M191.6,46c-4.1-1.7-8.3-3.2-12.5-4.6c-3.6-1.2-7.3-2.2-10.9-3.1c-5-1.2-10-2.1-15-2.6 c-6-0.7-12-0.9-18.1-0.6c-5.2,0.2-10.4,0.8-15.5,1.8c-0.5,0.1-1,0.2-1.6,0.3h-0.1c-0.2,0-0.3,0.1-0.5,0.2c-4.3,2.5-8.4,5.2-12.3,8.1 c-2.6,1.9-6.3,4.3-5.8,8.1c0.3,2,1.7,3.8,3.2,5c1.3,1.1,2.8,1.9,4.5,2.4c3.9,1.2,8.1,0.7,12-0.1c3.6-0.8,7-2,10.4-3.4 c0.7-0.3,1.4-0.6,2.2-0.9l0.8-0.3l0.3-0.1l0.2-0.1c1.3-0.5,2.6-1.1,4-1.5c3.1-1.1,6.2-2,9.3-2.8c3.8-0.9,7.6-1.7,11.4-2.2l0.4-0.1 h0.2l0.7-0.1c0.5-0.1,1.1-0.1,1.6-0.2l3.3-0.3c2.3-0.2,4.7-0.4,7.1-0.4c5.3-0.2,10.7-0.1,16,0.2c1.4,0.1,2.9,0.2,4.3,0.3 c0.7,0.1,1.3-0.6,1.4-1.2C192.7,46.8,192.2,46.3,191.6,46L191.6,46z M160.9,46.2c-7.4,0.8-14.7,2.2-21.8,4.5 c-2.8,0.9-5.5,1.9-8.2,3.1l-0.7,0.3l-0.4,0.2l-0.2,0.1c-0.7,0.3-1.4,0.6-2.1,0.8c-1.6,0.6-3.3,1.2-5,1.8c-1.8,0.6-3.7,1.1-5.6,1.4 c-0.5,0.1-0.9,0.2-1.4,0.2H115c-0.3,0-0.5,0.1-0.8,0.1c-0.9,0.1-1.9,0.1-2.8,0.1c-0.5,0-0.9,0-1.3-0.1h-0.4c-0.3,0-0.5-0.1-0.7-0.1 c-0.4-0.1-0.8-0.2-1.3-0.3c-0.2-0.1-0.3-0.1-0.5-0.2l-0.3-0.1h-0.1c-0.7-0.3-1.4-0.7-2-1.2l-0.2-0.1l0.1,0.1 c-0.1-0.1-0.3-0.2-0.4-0.3c-0.3-0.3-0.6-0.5-0.9-0.8c-0.2-0.2-0.3-0.3-0.4-0.5c-0.1-0.1-0.1-0.2-0.2-0.3c-0.1-0.2-0.2-0.4-0.4-0.6 l-0.1-0.2c0-0.1-0.1-0.2-0.1-0.3s-0.1-0.2-0.1-0.3v-0.6c0-0.1,0.1-0.3,0.1-0.4v-0.1c0,0,0,0.1,0,0c0,0,0-0.1,0.1-0.1v-0.1 c0.1-0.1,0.1-0.2,0.2-0.3c0-0.1,0.1-0.1,0.1-0.2c0.5-0.6,1.1-1.2,1.7-1.7c0.3-0.3,0.7-0.6,1.1-0.9l0.1-0.1l0.1-0.1l0.4-0.3 c0.3-0.2,0.6-0.4,0.9-0.7c0.9-0.7,1.8-1.3,2.7-1.9c2-1.3,3.9-2.6,6-3.9c1.1-0.7,2.2-1.4,3.4-2c4.7-0.9,9.4-1.5,14.2-1.8 c6-0.4,12.1-0.3,18.1,0.3c1.3,0.1,2.7,0.3,4,0.5h0.3c0,0-0.2,0,0,0l0.5,0.1l1,0.1c0.6,0.1,1.3,0.2,1.9,0.3c2.4,0.4,4.8,0.9,7.1,1.4 c3.8,0.9,7.6,1.9,11.3,3.1c1.7,0.5,3.4,1.1,5.1,1.7C175.2,45.2,168,45.5,160.9,46.2z\"\n })), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M159.8,41.3c-14.8,2.3-28.4,7.5-29.1,7.8c-7.5,2.9-9.5,4.5-14.6,5.1c-5.8,0.7-11-0.2-15.4-1.7 c0.2-1.8,1.7-3.4,6.4-6.7c2.7-2,6.5-4.5,11.2-7.2c4.2-0.8,8.5-1.4,12.8-1.8c0,0,2.4-0.2,4.9-0.3c13.6-0.5,25.2,1.5,33.9,3.7 C166,40.4,162.6,40.8,159.8,41.3L159.8,41.3z\"\n })), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.38,\n fill: \"#7C84C1\",\n d: \"M116.1,54.2c5.1-0.7,7.1-2.2,14.6-5.1 c0.7-0.3,14.2-5.5,29.1-7.8c2.8-0.4,6.2-0.9,10.1-1.1c4.8,1.2,8.6,2.5,11.4,3.4c4.2,1.4,7.6,2.8,9.9,3.7 c-28.7-2.2-47.2,2.5-59.2,7.5c-4.7,2-19.8,8.8-27.7,3.3c-0.7-0.5-3.7-2.6-3.7-5.4v-0.2C105,54,110.3,54.9,116.1,54.2z\"\n })), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.4,\n fill: \"#2B2687\",\n d: \"M146.4,1.4c2.8,0.2,13.1-3.1,25.3,12.6 c9.8,12.7,9.8,26.7,9.7,30.5l8.8,1c1.7-10.2-0.4-17.5-1.9-21.3C181.5,7.2,169.3,1,146.4,1.4z\"\n })), _polygon || (_polygon = /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"#C6DFE5\",\n points: \"102.8,211.5 102.8,212.8 102.8,216 102.8,229.6 97.8,229.6 97.8,216 47.5,216 47.5,229.6 42.7,229.6 42.7,216 42.7,212.8 42.7,211.5\"\n })), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M102.8,210.1h-60c-0.8,0-1.4,0.6-1.4,1.4v18.1c0,0.8,0.6,1.4,1.4,1.4h4.8c0.8,0,1.4-0.6,1.4-1.4v-12.2h47.5 v12.2c0,0.8,0.6,1.4,1.4,1.4h5c0.8,0,1.4-0.6,1.4-1.4v-18.1C104.2,210.8,103.5,210.1,102.8,210.1z M92.8,214.6H47.5 c-0.8,0-1.4,0.6-1.4,1.4v12.2h-2v-15.3h57.3v15.3h-2.2V216c0-0.8-0.6-1.4-1.4-1.4C97.8,214.6,92.8,214.6,92.8,214.6z\"\n })), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8EB9C1\",\n d: \"M103.3,228.4L92,242.5v35.4l18.1-9.1c-0.1-8.5-0.3-19.4-0.4-28C109.7,240.8,103.3,228.4,103.3,228.4z\"\n })), _polygon2 || (_polygon2 = /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"#C6DFE5\",\n points: \"102.9,228.4 43.4,228.4 30.8,242.5 91.6,242.5\"\n })), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 31,\n y: 243,\n fill: \"#C6DFE5\",\n width: 61,\n height: 35\n })), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M110.8,256.4c-0.1-4.2-0.1-8.5-0.2-12.7v-1.5c0-0.7,0.1-1.4-0.2-2c0-0.1-0.1-0.2-0.1-0.3l-0.9-1.8 c-1-2-2.1-4.1-3.1-6.1c-0.7-1.3-1.3-2.7-2-4c0-0.1-0.1-0.3-0.2-0.4c-0.1-0.2-0.3-0.3-0.5-0.4c-0.2-0.1-0.4-0.1-0.6-0.1H43.4 c-0.6,0-0.9,0.3-1.3,0.7l-5.9,6.7l-6,6.8l-0.3,0.4c0,0,0,0.1-0.1,0.1c-0.2,0.2-0.3,0.6-0.3,0.9v35.4c0,0.7,0.6,1.4,1.4,1.4h60.8 c0.2,0,0.4-0.1,0.6-0.2h0.1l1.8-0.9l4.3-2.2l5.2-2.6l4.5-2.3c0.7-0.4,1.5-0.7,2.2-1.1c0.4-0.2,0.7-0.7,0.7-1.2 C111,264.7,110.9,260.5,110.8,256.4L110.8,256.4z M36,238.7l6.8-7.6c0.4-0.5,0.8-0.9,1.2-1.3h56l-4.7,5.8l-3.3,4.1l-0.1,0.1 l-0.7,0.9c-0.1,0.1-0.2,0.3-0.3,0.4h-57L36,238.7z M89.9,276.5H32.2v-32.6h58v32.6C90.2,276.5,89.9,276.5,89.9,276.5z M107.1,268.5 l-4.3,2.2l-5.2,2.6l-4.5,2.3l-0.1,0.1V243l4.8-6l2.5-3.1l1.2-1.4l1.3-1.6l1.2,2.4l3.4,6.7l0.6,1.2c0.1,3.5,0.1,7,0.2,10.5l0.2,11.2 c0,1.7,0.1,3.4,0.1,5.1C108.5,268,107.1,268.5,107.1,268.5z\"\n })), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 55.9,\n y: 241.1,\n fill: \"#7A7A7A\",\n width: 7.7,\n height: 15\n })), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M63.6,239.7h-7.7c-0.8,0-1.4,0.6-1.4,1.4v15c0,0.7,0.6,1.4,1.4,1.4h7.7c0.8,0,1.4-0.6,1.4-1.4v-15 C65,240.3,64.3,239.7,63.6,239.7L63.6,239.7z M57.3,250.9v-8.5h4.9v12.2h-4.9V250.9z\"\n })), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#445DB7\",\n d: \"M80.9,120.7c13.7,11.6,28.2,15.7,45.3,17.7c49.7,5.8,88-19,101.5-28.1c-1.5,36.7-29.9,68.4-62.5,72.4 C128.5,187.1,91.6,171.1,80.9,120.7z\"\n })), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#445DB7\",\n d: \"M100,132.2c3.2,7.8,8.6,14.6,15.5,19.4l10.1-12.9C116.8,137.7,108.2,135.5,100,132.2z\"\n })), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#445DB7\",\n d: \"M159,138c-3.1,2.7-7,5.7-11.4,8.8c-3.9,2.8-7.6,4.9-10.5,7.4c-3.3-4.5-8.2-10.9-11.6-15.4 c5.5,0.3,11.5,0.3,17.9,0.1C148.7,138.6,154.3,138.5,159,138L159,138z\"\n })), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M226.9,109c-5.1,3.4-10.4,6.7-15.8,9.7c-7.9,4.4-16.2,8.1-24.7,11.1c-8.7,3.1-17.7,5.3-26.9,6.6 c-0.2-0.1-0.4-0.1-0.5-0.1c-4.3,0.5-8.6,0.6-12.9,0.7c-4.5,0.2-9,0.3-13.5,0.2c-0.9,0-1.8,0-2.6-0.1c-4.3-0.4-8.5-0.9-12.7-1.7 c-4.8-0.8-9.5-2.1-14.1-3.7c-0.9-0.3-1.8-0.7-2.6-1c-0.1,0-0.1-0.1-0.2-0.1c-5.3-2.1-10.3-5-14.9-8.4c-1.2-0.9-2.4-1.8-3.5-2.8 c-0.2-0.3-0.6-0.5-1.1-0.5c-0.4,0-0.8,0.1-1.1,0.4c-0.4,0.4-0.5,1-0.3,1.5c1.7,8.1,4.3,16.1,8,23.5c3.1,6.5,7.2,12.4,12,17.8 c4.4,4.8,9.5,9,15.2,12.3c5.5,3.2,11.3,5.7,17.5,7.3c6.2,1.6,12.6,2.5,19,2.7c6.7,0.2,13.6-0.3,20.1-1.7c7.3-1.6,14.3-4.6,20.6-8.6 c6.5-4.1,12.4-9.2,17.4-15c5.2-6,9.5-12.7,12.7-19.9c3.4-7.4,5.6-15.3,6.6-23.4c0.2-2,0.4-4,0.5-6 C229.1,109.2,227.8,108.4,226.9,109L226.9,109z M136.5,140.5c4.3,0.1,8.6,0.1,12.9-0.2c1.6-0.1,3.2-0.2,4.8-0.4 c-0.5,0.4-0.9,0.7-1.4,1.1c-2.1,1.6-4.3,3.2-6.5,4.8s-4.5,3-6.7,4.5c-0.7,0.5-1.5,1-2.2,1.6c-1.1-1.5-2.2-3-3.4-4.5l-4.8-6.3 l-0.5-0.7C131.3,140.5,133.9,140.6,136.5,140.5L136.5,140.5z M109.3,136.9c3.5,1,7,1.8,10.5,2.4c1,0.2,2.1,0.3,3.1,0.5l-6.3,8 l-1.5,1.9l-0.2-0.1l-0.2-0.2c-0.6-0.5-1.2-0.9-1.7-1.4c-1.3-1.1-2.5-2.3-3.6-3.5c-0.6-0.7-1.3-1.4-1.9-2.1l-0.4-0.5l-0.1-0.1 l-0.1-0.1c-0.1-0.1,0-0.1,0,0l-0.2-0.2c-0.3-0.4-0.6-0.7-0.8-1.1c-1-1.3-1.8-2.7-2.6-4.2c-0.3-0.5-0.5-1-0.8-1.5 C104.8,135.5,107.1,136.2,109.3,136.9L109.3,136.9z M104.9,163.9c-4.9-4.7-9.1-10-12.4-15.8c-3.9-6.7-6.7-14-8.7-21.5 c-0.2-0.7-0.4-1.5-0.6-2.2c3.8,2.9,7.9,5.4,12.2,7.5c1.2,0.6,2.4,1.1,3.6,1.6c2.6,6.2,6.6,11.8,11.6,16.2c1.3,1.2,2.7,2.3,4.2,3.3 c0.5,0.3,1.3,0.2,1.7-0.2l7.3-9.4v2.2c0,2.1,0.2,4.2,0.3,6.3c0.2,2.9,0.4,5.7,0.6,8.6c0.3,3,0.6,6,1,9.1c0.4,2.7,0.8,5.5,1.3,8.2 c-2.4-0.9-4.7-1.9-7-3C114.4,171.7,109.3,168.1,104.9,163.9L104.9,163.9z M221.6,133.3c-2.7,7.2-6.4,14-11.1,20.2 c-4.5,5.9-9.8,11.2-15.8,15.6c-5.9,4.3-12.4,7.7-19.3,9.9c-6.4,2-13.1,2.8-19.8,3c-6.2,0.2-12.3-0.4-18.4-1.6 c-2.3-0.5-4.6-1.1-6.9-1.8v-0.5c-0.6-3-1-6-1.4-9c-0.6-4.7-1-9.4-1.4-14c-0.3-3.5-0.5-6.9-0.6-10.4v-1.4c0.6,0.7,1.1,1.5,1.7,2.2 l4.8,6.3c0.8,1.1,1.6,2.1,2.4,3.2c0.3,0.4,0.6,0.7,1.1,0.7c0.5,0.1,1-0.1,1.3-0.4c0.3-0.2,0.5-0.4,0.8-0.7c2.7-2,5.5-3.7,8.3-5.7 c3-2.1,5.9-4.3,8.8-6.5c1.3-1,2.6-2.1,3.8-3.1c7.9-1.1,15.7-2.9,23.4-5.4c9.1-2.9,17.9-6.7,26.4-11.2c5.6-3,11.1-6.3,16.4-9.8 C225.5,119.9,224,126.7,221.6,133.3z\"\n })), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M107.1,141.8c0,0,0-0.1-0.1-0.1C107.1,141.7,107.1,141.8,107.1,141.8z\"\n })), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#445DB7\",\n d: \"M147.2,152.9c6,1.5,12.2,1.2,18-0.8l0.2,13.7l-9.3,7l-7.9-6.2L147.2,152.9z\"\n })), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M167,165.2v-2.5c0-1.7,0-3.3-0.1-5c0-1.9-0.1-3.8-0.1-5.7c0-1-1-1.9-2-1.5c-4.5,1.6-9.4,2.1-14.1,1.4 c-1-0.1-2.1-0.3-3.1-0.6c-0.1,0-0.3-0.1-0.4-0.1c-0.1,0-0.3,0-0.4,0.1c-0.4,0.1-0.7,0.3-1,0.7c-0.2,0.2-0.2,0.5-0.2,0.8 c0.2,3.1,0.5,6.2,0.7,9.3l0.2,2.3c0,0.4,0.1,0.8,0.1,1.2c0.1,0.7,0,1.5,0.6,2c0.3,0.3,0.6,0.5,0.9,0.7l0.9,0.7l1.9,1.5l4.2,3.3 c0.3,0.2,0.6,0.4,0.9,0.4c0.3,0.1,0.7,0,1-0.2l8-6l1-0.7c0.3-0.2,0.7-0.5,0.9-0.8C167.1,166.1,167.1,165.7,167,165.2L167,165.2z M149.8,165.7c-0.2-3.3-0.5-6.5-0.7-9.8c0-0.4-0.1-0.7-0.1-1.1c4.4,0.8,8.9,0.7,13.2-0.3c0.5-0.1,1.1-0.2,1.6-0.4l0.1,8.5v2.3 l-7.7,5.8L149.8,165.7L149.8,165.7z\"\n })), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#445DB7\",\n d: \"M96.1,148.5c0.5,5.1,3.2,9.7,7.4,12.7l4.8,2.7l2.9-3.1c-1.7-3.5-2.7-7.3-2.9-11.2c-2.5-0.5-5-0.9-7.5-1 C99.1,148.4,97.5,148.4,96.1,148.5L96.1,148.5z\"\n })), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M112.5,159.9c-0.2-0.3-0.3-0.7-0.5-1c-1-2.4-1.7-4.9-2.1-7.4c-0.1-0.6-0.1-1.3-0.2-1.9 c0-0.6-0.5-1.4-1.2-1.5c-3.2-0.7-6.5-1.1-9.8-1.2h-2.9c-0.4,0-0.7,0.2-0.9,0.4l-0.1,0.1c-0.1,0.2-0.2,0.3-0.3,0.5 c-0.1,0.1-0.1,0.3-0.1,0.5v0.2c0.6,5.5,3.5,10.5,8,13.7c0.3,0.2,0.7,0.4,1.1,0.6l1.3,0.7l2.6,1.5c0.6,0.3,1.4,0.2,1.9-0.2l2.9-3.1 C112.7,161.3,112.8,160.6,112.5,159.9L112.5,159.9z M103.9,159.5c-2.2-1.7-3.9-4-5-6.5c-0.4-1-0.7-2-0.9-3c2.1,0,4.1,0.1,6.1,0.4 c0.9,0.1,1.8,0.3,2.7,0.4c0.3,2.8,0.9,5.6,2,8.2c0.2,0.4,0.4,0.9,0.5,1.3l-1.3,1.4l-1.9-1C105.3,160.4,104.6,160,103.9,159.5 L103.9,159.5z\"\n })), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#595959\",\n d: \"M4.6,92.9c-0.1,8.3,4.3,15.4,11.3,17.9L11,176.9c-0.2,4.7,4.7,8.8,9.6,9s9.3-3.5,9.5-8.2l3.5-66.3 c6.7-2.3,12.2-8,12.2-17c0.5-8.7-4.7-16.9-12.7-19.9L30,74.4c0.9,5.9,1.7,11.9,2.6,17.8l-16.1-0.7l-0.1-0.2l0.9-14.2L14.1,77L4.7,91 v0.6H4.6C4.6,91.6,4.6,92.9,4.6,92.9z M15.3,174.8c0.3-3.2,3.2-5.5,6.2-5.6c3.4,0.3,4.1,2.8,4.3,5.8c-0.3,3.3-1.6,5.7-5,5.4 C17.8,180.5,15.4,177.7,15.3,174.8L15.3,174.8z\"\n })), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#595959\",\n d: \"M0.7,87.8c0,0.1-0.1,0.3-0.1,0.4C0.6,88.1,0.6,87.9,0.7,87.8z\"\n })), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#BABABA\",\n d: \"M1.4,92.9c-0.1,8.3,4.3,15.4,11.3,17.9l-3.5,66.3c-0.2,4.7,3.3,8.6,8.1,8.8c4.9,0.2,8.2-3.7,8.4-8.4 l3.9-67.3c6.7-2.3,12.9-6.8,13-15.8C43.1,85.7,38,79.8,30,76.7l0.1,16.9L14,92.9l-0.8-1.6l0.9-14.2C7.6,79.4,3,84.6,1.6,90.9v0.6 H1.5C1.4,92,1.4,92.4,1.4,92.9z M12.2,174.8c0.3-3.2,3.2-5.5,6.2-5.6c3.2,0.3,5.7,2.8,5.8,6c-0.3,3.3-3.2,5.5-6.6,5.2 C14.6,180.5,12.3,177.7,12.2,174.8L12.2,174.8z\"\n })), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#595959\",\n d: \"M0.6,88.2L0.6,88.2L0.6,88.2z\"\n })), _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M41.3,78.4c-1.4-1.5-2.9-2.7-4.7-3.7c-0.9-0.5-1.8-1-2.7-1.3c-0.6-0.2-1.2-0.2-1.9-0.3L30,73 c-0.8,0-1.4,0.7-1.4,1.4c-0.2,5.2-0.3,10.3-0.5,15.5v0.8l-10-0.5h-0.3c0.2-3.8,0.5-7.5,0.7-11.3l0.1-1.7c0.1-0.8-0.7-1.4-1.4-1.4 c-1,0-2.1-0.2-3.2-0.1c-0.5,0-0.9,0.2-1.3,0.4s-0.9,0.4-1.3,0.6c-1.5,0.7-2.9,1.6-4.2,2.7c-2.5,2-4.4,4.5-5.7,7.4 C0.9,88,0.4,89.5,0.2,91c-0.1,0.2-0.1,0.3-0.1,0.5c0,0.5,0,0.9-0.1,1.4V93c0,6.4,2.6,12.7,7.7,16.6c1.1,0.8,2.3,1.5,3.5,2l-1.8,33.7 l-0.9,17.3c-0.1,2.8-0.3,5.7-0.4,8.5l-0.2,4.3c0,0.7-0.1,1.4,0,2.1c0.1,0.5,0.2,1.1,0.4,1.6c2.2,6.3,9,9.6,15.3,7.4 c2.6-0.9,4.9-2.7,6.3-5.1c0.6-1,1-2,1.3-3.1c0.2-0.6,0.2-1.3,0.2-2l0.1-2.2c0.2-2.9,0.3-5.8,0.5-8.6c0.6-11.5,1.2-23.1,1.8-34.6 c0.3-6.2,0.6-12.4,1-18.5c2.7-1.1,5.2-2.6,7.2-4.7c2.4-2.5,4-5.5,4.7-8.9C48.2,91.6,46.4,83.8,41.3,78.4z M44.2,96.9 c-0.1,0.8-0.3,1.6-0.5,2.4c-0.1,0.4-0.2,0.7-0.4,1.1c-0.1,0.2-0.1,0.4-0.2,0.6c-0.1,0.2-0.1,0.1-0.2,0.4c-0.3,0.7-0.7,1.4-1.1,2 c-0.4,0.6-0.7,1.1-1.2,1.6c-1,1.2-2.1,2.2-3.4,3c-0.7,0.4-1.4,0.9-2.1,1.2c-0.7,0.3-1.3,0.6-2.1,0.9c-0.6,0.2-1,0.7-1,1.3L30.2,145 c-0.3,5.6-0.6,11.2-0.9,16.7l-0.4,8.4c-0.1,1.4-0.1,2.8-0.2,4.2c-0.1,1.2,0,2.6-0.3,3.7c-1.3,3.9-5.2,6.5-9.3,6.3 c-0.9-0.1-1.8-0.2-2.6-0.6c-0.4-0.1-0.7-0.3-1-0.5c-0.4-0.2-0.9-0.5-1.3-0.8c-0.3-0.2-0.6-0.5-0.9-0.7c-0.4-0.3-0.7-0.7-1-1.1 l-0.1-0.1c-0.1-0.1-0.1-0.2-0.2-0.2c-0.1-0.2-0.3-0.4-0.4-0.6l-0.6-1.2c-0.2-0.4-0.3-0.9-0.4-1.3c-0.1-0.6,0-1.1,0-1.7 c0.1-1.4,0.1-2.8,0.2-4.2c0.1-2.8,0.3-5.5,0.4-8.3l1.7-33.5c0.3-6.3,0.7-12.6,1-18.9c0-0.6-0.5-1.1-1-1.3c-0.6-0.2-1.2-0.5-1.7-0.8 c-1.7-0.9-3.3-2.2-4.5-3.7c-1.7-2-2.9-4.5-3.5-7.2c-0.4-1.6-0.5-3.2-0.5-4.9v-1c0-0.1,0.1-0.2,0.1-0.4v-0.5V91C3,91,3,90.9,3,90.8 c0-0.2,0.1-0.4,0.1-0.5c0.2-0.7,0.4-1.4,0.7-2c0.2-0.4,0.6-1.2,0.9-1.7C5,86,5.4,85.4,5.8,84.8c0.8-1.1,1.7-2.1,2.7-3 c1.1-0.9,2.2-1.7,3.4-2.3c0.7-0.4,1.4-0.8,2.2-1c0.4-0.1,0.9,0,1.3,0.5h0.2c-0.2,3.1-0.5,6.7-0.7,10.4c0,0.6-0.1,1.3-0.1,1.9 c0,0.9,0.7,1.6,1.5,1.7h0.4l6.5,0.3l6,0.3c0.8,0,1.4-0.7,1.4-1.4c0.2-5.2,0.3-10.3,0.5-15.5v-0.6h0.2c0.5-0.1,1-0.2,1.4-0.1 c0.7,0.3,1.4,0.6,2,1c1.3,0.7,2.6,1.7,3.7,2.7c2.2,2.1,3.9,4.8,4.8,7.7C44.4,90.5,44.7,93.7,44.2,96.9L44.2,96.9z\"\n })), _path39 || (_path39 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29235C\",\n d: \"M24.6,170c-0.7-1.2-1.8-2.1-3-2.7c-1.4-0.6-3-0.8-4.5-0.5c-2.7,0.5-5.1,2.9-5.5,5.7 c-0.1,0.4-0.1,0.8-0.1,1.2c0,1.4,0.4,2.8,1.2,4c0.9,1.2,2.1,2.2,3.5,2.7c2.7,1,5.9,0.1,7.7-2.1c1-1.2,1.6-2.6,1.7-4.1 S25.3,171.2,24.6,170L24.6,170z M16,170.2C15.9,170.2,16,170.2,16,170.2z M22.8,174.2c-0.1,0.4-0.2,0.8-0.3,1.1 c-0.1,0.3-0.3,0.5-0.4,0.7c0,0.1-0.1,0.1-0.1,0.2c-0.1,0.1-0.2,0.3-0.4,0.4c-0.1,0.1-0.2,0.2-0.4,0.3c-0.1,0-0.1,0.1-0.2,0.1 c-0.6,0.4-1.2,0.7-1.9,0.7h-1.2c-0.4-0.1-0.8-0.2-1.1-0.3c-0.3-0.1-0.5-0.3-0.7-0.4c-0.1,0-0.1-0.1-0.2-0.1 c-0.1-0.1-0.3-0.2-0.4-0.4c-0.1-0.1-0.2-0.2-0.3-0.4c0-0.1-0.1-0.1-0.1-0.2c-0.2-0.2-0.3-0.5-0.4-0.8c-0.1-0.4-0.2-0.7-0.3-1.1v-1.2 c0.1-0.4,0.2-0.8,0.3-1.1s0.3-0.5,0.4-0.7c0-0.1,0.1-0.1,0.1-0.2c0.1-0.1,0.2-0.3,0.4-0.4c0.1-0.1,0.2-0.2,0.4-0.3 c0.1,0,0.1-0.1,0.2-0.1c0.2-0.2,0.5-0.3,0.8-0.4c0.7-0.3,1.5-0.4,2.3-0.3c0.4,0.1,0.8,0.2,1.1,0.3c0.3,0.1,0.5,0.3,0.7,0.4l0.2,0.1 c0.1,0.1,0.3,0.2,0.4,0.4l0.4,0.4l0.1,0.2C22.7,172.1,23,173.2,22.8,174.2z\"\n })), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n opacity: 0.69\n }, /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.4,\n fill: \"#2B2687\",\n d: \"M225.4,102.1c8.9,33.2-14.9,68.8-52.8,78.9s-76.3-8.9-85.2-42.1 c17.7,21.1,48.3,30.2,77.7,23.2C196.1,154.7,220.3,130.7,225.4,102.1z\"\n }))), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 23.1,\n y: 100.7,\n transform: \"rotate(-88.244 28.512 102.692) scale(.99997)\",\n fill: \"#595959\",\n width: 10.8,\n height: 3.9\n })), _rect4 || (_rect4 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 22.1,\n y: 100.7,\n transform: \"rotate(-88.244 27.47 102.689) scale(.99997)\",\n fill: \"#DDD\",\n width: 10.8,\n height: 3.9\n })), _rect5 || (_rect5 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 16.8,\n y: 100.6,\n transform: \"rotate(-88.244 22.152 102.548) scale(.99997)\",\n fill: \"#595959\",\n width: 10.8,\n height: 3.9\n })), _rect6 || (_rect6 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 15.7,\n y: 100.6,\n transform: \"rotate(-88.244 21.11 102.544) scale(.99997)\",\n fill: \"#DDD\",\n width: 10.8,\n height: 3.9\n })), _path40 || (_path40 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EAF471\",\n d: \"M139.9,32c4.8,0.4,9.1-3.6,9.1-9.1s-4.3-9.5-9.1-9.1c-4.4,0.4-7.7,4.4-7.7,9.1S135.5,31.7,139.9,32z\"\n })), _path41 || (_path41 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F6BE4E\",\n d: \"M139.9,31.4c4.5,0.4,8.4-3.4,8.4-8.5s-3.9-8.8-8.4-8.5c-4.1,0.3-7.2,4.1-7.2,8.5S135.8,31.1,139.9,31.4z\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"a\",\n d: \"M139.9,31.5c4.5,0.4,8.4-3.4,8.4-8.5s-3.9-8.8-8.4-8.5c-4.1,0.3-7.2,4.1-7.2,8.5S135.8,31.1,139.9,31.5z\"\n }))), _clipPath || (_clipPath = /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"b\"\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#a\",\n overflow: \"visible\"\n }))), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#b)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E38329\",\n d: \"M148.3,21.6c1.2,4.3-1.8,8.8-6.3,9.7c-4.1,0.9-8-1.7-8.8-5.5c1.7,2.5,4.8,3.7,8,3.1 C144.7,28.2,147.6,25.3,148.3,21.6C148.3,21.6,148.3,21.6,148.3,21.6z\",\n opacity: 0.69\n }))), _g6 || (_g6 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#313076\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M136.8,21.9c0.3,0,0.5,0.2,0.5,0.5s-0.2,0.5-0.5,0.5c-0.3,0-0.5-0.2-0.5-0.5 C136.3,22.1,136.5,21.9,136.8,21.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M143,21.8c0.3,0,0.5,0.2,0.5,0.6S143.3,23,143,23c-0.3,0-0.5-0.2-0.5-0.6S142.7,21.8,143,21.8z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M139.2,22.8c-0.1,0-0.2,0.1-0.2,0.3c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.5,0.2c0.2,0,0.4-0.1,0.5-0.2 c0.1-0.1,0.1-0.2,0.2-0.3c0-0.1,0.1-0.2,0-0.3c0-0.1-0.1-0.2-0.2-0.2C139.9,22.8,139.6,22.8,139.2,22.8\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgOokiWorker);\nexport default __webpack_public_path__ + \"static/media/ooki-worker.720e14eb.svg\";\nexport { ForwardRef as ReactComponent };","import { RootStore } from 'bzx-common/src/stores'\nimport { Button } from 'bzx-common/src/ui-framework'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Icon } from 'ui-framework'\n\nexport function AppError({ rootStore }: { rootStore: RootStore }) {\n const { appError, clearError } = rootStore\n const [detailsVisible, setDetailsVisible] = React.useState(false)\n\n return (\n
\n {appError !== null && (\n
\n setDetailsVisible(!detailsVisible)}>\n

\n {appError.error.title || 'Error'}\n

\n \n {!appError.error.noError && detailsVisible && (\n \n )}\n \n \n \n
\n )}\n
\n )\n}\n\nexport default observer(AppError)\n","import { Button } from 'bzx-common/src/ui-framework'\nimport React, { Component } from 'react'\n\nexport interface IInfoBlockProps {\n className?: string\n /** The key under which the flag is set in local storage when the user accepts */\n storageKey: string\n onAccept?: () => void\n}\nexport interface IInfoBlockState {\n hasAccepted: boolean\n}\n\nclass InfoBlock extends Component {\n constructor(props: IInfoBlockProps, context?: any) {\n super(props, context)\n\n const localStorageItem = localStorage.getItem(this.props.storageKey)\n this.state = { hasAccepted: !!localStorageItem }\n }\n\n onAccept = () => {\n localStorage.setItem(this.props.storageKey, 'true')\n this.setState({ hasAccepted: true })\n if (this.props.onAccept) {\n this.props.onAccept()\n }\n }\n\n public render() {\n if (this.state.hasAccepted) {\n return null\n }\n\n return (\n
\n
\n
{this.props.children}
\n {!this.state.hasAccepted && (\n
\n \n
\n )}\n
\n
\n )\n }\n}\n\nexport default InfoBlock\n","import { RootStore } from 'bzx-common/src/stores'\nimport { inject, observer } from 'mobx-react'\nimport React from 'react'\nimport { Button, Icon } from 'ui-framework'\nimport { chainConfigs, ChainId, supportedChains } from '../../config/appConfig'\n\ntype Feature = 'staking'\n\ninterface IFeatureDesc {\n label: string\n available: { link: string; slogan: string; chainId: ChainId }[]\n}\n\nconst featureMap: Record = {\n staking: {\n label: 'Staking',\n available: [\n {\n link: 'https://app.fulcrum.trade/stake',\n slogan: 'Stake on Ethereum',\n chainId: 1,\n },\n ],\n },\n}\n\ninterface IFeatureNetworkSwitch {\n feature: 'staking'\n children?: React.ReactNode\n allChainsSwitches?: boolean\n rootStore: RootStore\n}\n\n/**\n * Note: this is currently based on the website domains.\n * NOT the network the user is connected to, until we have the apps working on any network.\n */\nexport function FeatureNetworkSwitch(props: any) {\n const { feature, rootStore, children, allChainsSwitches } = props as IFeatureNetworkSwitch\n const { web3Connection } = rootStore\n const featureDetails = featureMap[feature]\n\n return (\n
\n {children || (\n
\n

{featureDetails.label} is available on these networks:

\n
\n )}\n\n
\n {allChainsSwitches &&\n supportedChains.map((chainId) => {\n const { name, color } = chainConfigs[chainId].icon\n return (\n web3Connection.switchNetwork(chainId)}>\n \n {chainConfigs[chainId].chainDetails.chainName}\n \n )\n })}\n {!allChainsSwitches &&\n featureDetails.available.map((details) => {\n const { name, color } = chainConfigs[details.chainId].icon\n return (\n web3Connection.switchNetwork(details.chainId)}>\n \n {details.slogan}\n \n )\n })}\n
\n
\n )\n}\n\nexport default inject('rootStore')(observer(FeatureNetworkSwitch))\n","import RootStore from 'bzx-common/src/stores/RootStore'\nimport { inject, observer } from 'mobx-react'\nimport React from 'react'\nimport FeatureNetworkSwitch from '../FeatureNetworkSwitch'\n\n/**\n * For now it's only possible to switch to non Ethereum chain.\n * So button switch appears only for other chains.\n */\nconst NetworkError = (props: any) => {\n const rootStore = props.rootStore as RootStore\n const { chainId, networkDetails: connectedNetworkDetails } = rootStore.web3Connection\n\n return (\n
\n
\n You are currently connected to{' '}\n {connectedNetworkDetails ? connectedNetworkDetails.chainName : `Chain ${chainId}`}.\n
\n\n \n

Please switch to one of these chains.

\n
\n
\n )\n}\n\nexport default inject('rootStore')(observer(NetworkError))\n","import React from 'react'\nimport { Loader } from 'ui-framework'\n\nexport function PreloaderContent() {\n return \n}\n\nexport default React.memo(PreloaderContent)\n","import hashUtils from 'app-lib/hashUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\nimport { inject, observer } from 'mobx-react'\nimport React from 'react'\nimport { Button, Icon } from 'ui-framework'\nimport RootStore from '../../stores/RootStore'\nimport ExternalLink from '../ExternalLink'\n\nconst chevronDown = (\n \n)\nconst closeIcon = \n\nconst logos: Record = {\n 1: ,\n 10: ,\n 56: ,\n 137: ,\n 42161: ,\n}\n\n/**\n * TODO move to dateUtils\n */\nfunction formatDate(timestamp = 0) {\n return new Date(timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n}\n\nexport function TransactionTracker(props: any) {\n const rootStore = props.rootStore as RootStore\n const { transactionStore } = rootStore\n const { transactions, collapsed } = transactionStore\n const cssClass =\n transactions.length === 0\n ? 'tx-tracker'\n : collapsed\n ? 'tx-tracker--collapsed'\n : 'tx-tracker--visible'\n return (\n
\n \n TX\n {transactionStore.collapsed ? (\n {transactionStore.transactions.length}\n ) : (\n chevronDown\n )}\n \n \n {transactions.map((tx) => {\n const statusClass = tx.status === 'failed' ? 'txt-red-aim' : 'txt-green-aim'\n const hashContent = tx.hash ? (\n \n {hashUtils.shortHash(tx.hash)}\n \n ) : tx.error ? (\n '-'\n ) : (\n 'pending...'\n )\n\n return (\n \n \n \n \n \n \n \n \n \n \n {tx.error && (\n \n \n \n )}\n \n \n )\n })}\n
{logos[tx.chainId]}\n \n {tx.status}\n {tx.status === 'mining' && (\n \n )}\n \n {tx.type}\n {hashContent}\n {formatDate(tx.time)}\n \n {closeIcon}\n \n
\n {!tx.error.noError && (\n \n )}\n
\n
\n )\n}\n\nexport default inject('rootStore')(observer(TransactionTracker))\n","import { arrayify } from '@ethersproject/bytes'\r\nimport { keccak256 } from '@ethersproject/keccak256'\r\nimport invariant from 'tiny-invariant'\r\n\r\nexport function normalizeChainId(chainId: string | number): number {\r\n if (typeof chainId === 'string') {\r\n // Temporary fix until the next version of Metamask Mobile gets released.\r\n // In the current version (0.2.13), the chainId starts with “Ox” rather\r\n // than “0x”. Fix: https://github.com/MetaMask/metamask-mobile/pull/1275\r\n chainId = chainId.replace(/^Ox/, '0x')\r\n\r\n const parsedChainId = Number.parseInt(chainId, chainId.trim().substring(0, 2) === '0x' ? 16 : 10)\r\n invariant(!Number.isNaN(parsedChainId), `chainId ${chainId} is not an integer`)\r\n return parsedChainId\r\n } else {\r\n invariant(Number.isInteger(chainId), `chainId ${chainId} is not an integer`)\r\n return chainId\r\n }\r\n}\r\n\r\n// https://github.com/ethers-io/ethers.js/blob/d9d438a119bb11f8516fc9cf02c534ab3816fcb3/packages/address/src.ts/index.ts\r\nexport function normalizeAccount(_address: string): string {\r\n invariant(typeof _address === 'string' && _address.match(/^(0x)?[0-9a-fA-F]{40}$/), `Invalid address ${_address}`)\r\n\r\n const address = _address.substring(0, 2) === '0x' ? _address : `0x${_address}`\r\n const chars = address\r\n .toLowerCase()\r\n .substring(2)\r\n .split('')\r\n\r\n const charsArray = new Uint8Array(40)\r\n for (let i = 0; i < 40; i++) {\r\n charsArray[i] = chars[i].charCodeAt(0)\r\n }\r\n const hashed = arrayify(keccak256(charsArray))\r\n\r\n for (let i = 0; i < 40; i += 2) {\r\n if (hashed[i >> 1] >> 4 >= 8) {\r\n chars[i] = chars[i].toUpperCase()\r\n }\r\n if ((hashed[i >> 1] & 0x0f) >= 8) {\r\n chars[i + 1] = chars[i + 1].toUpperCase()\r\n }\r\n }\r\n\r\n const addressChecksum = `0x${chars.join('')}`\r\n\r\n invariant(\r\n !(address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && address !== addressChecksum),\r\n `Bad address checksum ${address} ${addressChecksum}`\r\n )\r\n\r\n return addressChecksum\r\n}\r\n","import { useReducer, useEffect, useCallback, useRef } from 'react'\r\nimport { ConnectorUpdate, ConnectorEvent } from '@web3-react/types'\r\nimport { AbstractConnector } from '@web3-react/abstract-connector'\r\nimport warning from 'tiny-warning'\r\n\r\nimport { Web3ReactManagerReturn } from './types'\r\nimport { normalizeChainId, normalizeAccount } from './normalizers'\r\n\r\nclass StaleConnectorError extends Error {\r\n constructor() {\r\n super()\r\n this.name = this.constructor.name\r\n }\r\n}\r\n\r\nexport class UnsupportedChainIdError extends Error {\r\n public constructor(unsupportedChainId: number, supportedChainIds?: readonly number[]) {\r\n super()\r\n this.name = this.constructor.name\r\n this.message = `Unsupported chain id: ${unsupportedChainId}. Supported chain ids are: ${supportedChainIds}.`\r\n }\r\n}\r\n\r\ninterface Web3ReactManagerState {\r\n connector?: AbstractConnector\r\n provider?: any\r\n chainId?: number\r\n account?: null | string\r\n\r\n onError?: (error: Error) => void\r\n\r\n error?: Error\r\n}\r\n\r\nenum ActionType {\r\n ACTIVATE_CONNECTOR,\r\n UPDATE,\r\n UPDATE_FROM_ERROR,\r\n ERROR,\r\n ERROR_FROM_ACTIVATION,\r\n DEACTIVATE_CONNECTOR\r\n}\r\n\r\ninterface Action {\r\n type: ActionType\r\n payload?: any\r\n}\r\n\r\nfunction reducer(state: Web3ReactManagerState, { type, payload }: Action): Web3ReactManagerState {\r\n switch (type) {\r\n case ActionType.ACTIVATE_CONNECTOR: {\r\n const { connector, provider, chainId, account, onError } = payload\r\n return { connector, provider, chainId, account, onError }\r\n }\r\n case ActionType.UPDATE: {\r\n const { provider, chainId, account } = payload\r\n return {\r\n ...state,\r\n ...(provider === undefined ? {} : { provider }),\r\n ...(chainId === undefined ? {} : { chainId }),\r\n ...(account === undefined ? {} : { account })\r\n }\r\n }\r\n case ActionType.UPDATE_FROM_ERROR: {\r\n const { provider, chainId, account } = payload\r\n return {\r\n ...state,\r\n ...(provider === undefined ? {} : { provider }),\r\n ...(chainId === undefined ? {} : { chainId }),\r\n ...(account === undefined ? {} : { account }),\r\n error: undefined\r\n }\r\n }\r\n case ActionType.ERROR: {\r\n const { error } = payload\r\n const { connector, onError } = state\r\n return {\r\n connector,\r\n error,\r\n onError\r\n }\r\n }\r\n case ActionType.ERROR_FROM_ACTIVATION: {\r\n const { connector, error } = payload\r\n return {\r\n connector,\r\n error\r\n }\r\n }\r\n case ActionType.DEACTIVATE_CONNECTOR: {\r\n return {}\r\n }\r\n }\r\n}\r\n\r\nasync function augmentConnectorUpdate(\r\n connector: AbstractConnector,\r\n update: ConnectorUpdate\r\n): Promise> {\r\n const provider = update.provider === undefined ? await connector.getProvider() : update.provider\r\n const [_chainId, _account] = (await Promise.all([\r\n update.chainId === undefined ? connector.getChainId() : update.chainId,\r\n update.account === undefined ? connector.getAccount() : update.account\r\n ])) as [Required['chainId'], Required['account']]\r\n\r\n const chainId = normalizeChainId(_chainId)\r\n if (!!connector.supportedChainIds && !connector.supportedChainIds.includes(chainId)) {\r\n throw new UnsupportedChainIdError(chainId, connector.supportedChainIds)\r\n }\r\n const account = _account === null ? _account : normalizeAccount(_account)\r\n\r\n return { provider, chainId, account }\r\n}\r\n\r\nexport function useWeb3ReactManager(): Web3ReactManagerReturn {\r\n const [state, dispatch] = useReducer(reducer, {})\r\n const { connector, provider, chainId, account, onError, error } = state\r\n\r\n const updateBusterRef = useRef(-1)\r\n updateBusterRef.current += 1\r\n\r\n const activate = useCallback(\r\n async (\r\n connector: AbstractConnector,\r\n onError?: (error: Error) => void,\r\n throwErrors: boolean = false\r\n ): Promise => {\r\n const updateBusterInitial = updateBusterRef.current\r\n\r\n let activated = false\r\n try {\r\n const update = await connector.activate().then(\r\n (update): ConnectorUpdate => {\r\n activated = true\r\n return update\r\n }\r\n )\r\n\r\n const augmentedUpdate = await augmentConnectorUpdate(connector, update)\r\n\r\n if (updateBusterRef.current > updateBusterInitial) {\r\n throw new StaleConnectorError()\r\n }\r\n dispatch({ type: ActionType.ACTIVATE_CONNECTOR, payload: { connector, ...augmentedUpdate, onError } })\r\n } catch (error) {\r\n if (error instanceof StaleConnectorError) {\r\n activated && connector.deactivate()\r\n warning(false, `Suppressed stale connector activation ${connector}`)\r\n } else if (throwErrors) {\r\n activated && connector.deactivate()\r\n throw error\r\n } else if (onError) {\r\n activated && connector.deactivate()\r\n onError(error)\r\n } else {\r\n // we don't call activated && connector.deactivate() here because it'll be handled in the useEffect\r\n dispatch({ type: ActionType.ERROR_FROM_ACTIVATION, payload: { connector, error } })\r\n }\r\n }\r\n },\r\n []\r\n )\r\n\r\n const setError = useCallback((error: Error): void => {\r\n dispatch({ type: ActionType.ERROR, payload: { error } })\r\n }, [])\r\n\r\n const deactivate = useCallback((): void => {\r\n dispatch({ type: ActionType.DEACTIVATE_CONNECTOR })\r\n }, [])\r\n\r\n const handleUpdate = useCallback(\r\n async (update: ConnectorUpdate): Promise => {\r\n if (!connector) {\r\n throw Error(\"This should never happen, it's just so Typescript stops complaining\")\r\n }\r\n\r\n const updateBusterInitial = updateBusterRef.current\r\n\r\n // updates are handled differently depending on whether the connector is active vs in an error state\r\n if (!error) {\r\n const chainId = update.chainId === undefined ? undefined : normalizeChainId(update.chainId)\r\n if (chainId !== undefined && !!connector.supportedChainIds && !connector.supportedChainIds.includes(chainId)) {\r\n const error = new UnsupportedChainIdError(chainId, connector.supportedChainIds)\r\n onError ? onError(error) : dispatch({ type: ActionType.ERROR, payload: { error } })\r\n } else {\r\n const account = typeof update.account === 'string' ? normalizeAccount(update.account) : update.account\r\n dispatch({ type: ActionType.UPDATE, payload: { provider: update.provider, chainId, account } })\r\n }\r\n } else {\r\n try {\r\n const augmentedUpdate = await augmentConnectorUpdate(connector, update)\r\n\r\n if (updateBusterRef.current > updateBusterInitial) {\r\n throw new StaleConnectorError()\r\n }\r\n dispatch({ type: ActionType.UPDATE_FROM_ERROR, payload: augmentedUpdate })\r\n } catch (error) {\r\n if (error instanceof StaleConnectorError) {\r\n warning(false, `Suppressed stale connector update from error state ${connector} ${update}`)\r\n } else {\r\n // though we don't have to, we're re-circulating the new error\r\n onError ? onError(error) : dispatch({ type: ActionType.ERROR, payload: { error } })\r\n }\r\n }\r\n }\r\n },\r\n [connector, error, onError]\r\n )\r\n const handleError = useCallback(\r\n (error: Error): void => {\r\n onError ? onError(error) : dispatch({ type: ActionType.ERROR, payload: { error } })\r\n },\r\n [onError]\r\n )\r\n const handleDeactivate = useCallback((): void => {\r\n dispatch({ type: ActionType.DEACTIVATE_CONNECTOR })\r\n }, [])\r\n\r\n // ensure that connectors which were set are deactivated\r\n useEffect((): (() => void) => {\r\n return () => {\r\n if (connector) {\r\n connector.deactivate()\r\n }\r\n }\r\n }, [connector])\r\n\r\n // ensure that events emitted from the set connector are handled appropriately\r\n useEffect((): (() => void) => {\r\n if (connector) {\r\n connector\r\n .on(ConnectorEvent.Update, handleUpdate)\r\n .on(ConnectorEvent.Error, handleError)\r\n .on(ConnectorEvent.Deactivate, handleDeactivate)\r\n }\r\n\r\n return () => {\r\n if (connector) {\r\n connector\r\n .off(ConnectorEvent.Update, handleUpdate)\r\n .off(ConnectorEvent.Error, handleError)\r\n .off(ConnectorEvent.Deactivate, handleDeactivate)\r\n }\r\n }\r\n }, [connector, handleUpdate, handleError, handleDeactivate])\r\n\r\n return { connector, provider, chainId, account, activate, setError, deactivate, error }\r\n}\r\n","import React, { createContext, useContext, useMemo } from 'react'\r\nimport invariant from 'tiny-invariant'\r\n\r\nimport { Web3ReactContextInterface } from './types'\r\nimport { useWeb3ReactManager } from './manager'\r\n\r\nexport const PRIMARY_KEY = 'primary'\r\nconst CONTEXTS: { [key: string]: React.Context } = {}\r\n\r\ninterface Web3ReactProviderArguments {\r\n getLibrary: (provider?: any, connector?: Required['connector']) => any\r\n children: any\r\n}\r\n\r\nexport function createWeb3ReactRoot(key: string): (args: Web3ReactProviderArguments) => JSX.Element {\r\n invariant(!CONTEXTS[key], `A root already exists for provided key ${key}`)\r\n\r\n CONTEXTS[key] = createContext({\r\n activate: async () => {\r\n invariant(false, 'No found.')\r\n },\r\n setError: () => {\r\n invariant(false, 'No found.')\r\n },\r\n deactivate: () => {\r\n invariant(false, 'No found.')\r\n },\r\n active: false\r\n })\r\n CONTEXTS[key].displayName = `Web3ReactContext - ${key}`\r\n\r\n const Provider = CONTEXTS[key].Provider\r\n\r\n return function Web3ReactProvider({ getLibrary, children }: Web3ReactProviderArguments): JSX.Element {\r\n const {\r\n connector,\r\n provider,\r\n chainId,\r\n account,\r\n\r\n activate,\r\n setError,\r\n deactivate,\r\n\r\n error\r\n } = useWeb3ReactManager()\r\n\r\n const active = connector !== undefined && chainId !== undefined && account !== undefined && !!!error\r\n const library = useMemo(\r\n () =>\r\n active && chainId !== undefined && Number.isInteger(chainId) && !!connector\r\n ? getLibrary(provider, connector)\r\n : undefined,\r\n [active, getLibrary, provider, connector, chainId]\r\n )\r\n\r\n const web3ReactContext: Web3ReactContextInterface = {\r\n connector,\r\n library,\r\n chainId,\r\n account,\r\n\r\n activate,\r\n setError,\r\n deactivate,\r\n\r\n active,\r\n error\r\n }\r\n\r\n return {children}\r\n }\r\n}\r\n\r\nexport const Web3ReactProvider = createWeb3ReactRoot(PRIMARY_KEY)\r\n\r\nexport function getWeb3ReactContext(key: string = PRIMARY_KEY): React.Context> {\r\n invariant(Object.keys(CONTEXTS).includes(key), `Invalid key ${key}`)\r\n return CONTEXTS[key]\r\n}\r\n\r\nexport function useWeb3React(key?: string): Web3ReactContextInterface {\r\n return useContext(getWeb3ReactContext(key))\r\n}\r\n","import { useWeb3React } from '@web3-react/core'\nimport React from 'react'\nimport Web3Connection from '../stores/Web3Connection'\n\nexport interface IWeb3ReactExporterProps {\n web3Connection: Web3Connection\n}\n\n/**\n * The sole purpose of this component is to capture the state of web3-react.\n * This way, it can be use and tracked outside of React.\n * @see Web3Connection mobx store\n */\nexport function Web3ReactExporter(props: IWeb3ReactExporterProps) {\n const { web3Connection } = props\n const context = useWeb3React()\n const { connector, activate, deactivate, active, error } = context\n\n React.useEffect(() => {\n web3Connection.getWeb3ReactContext({ connector, activate, deactivate, active, error })\n }, [connector, activate, deactivate, active, error, web3Connection])\n\n return
\n}\n\nexport default React.memo(Web3ReactExporter)\n","import assetUtils, { Asset, isNativeTokenForNetwork } from 'app-lib/assetUtils'\nimport errorUtils from 'app-lib/errorUtils'\nimport loanUtils from 'app-lib/loanUtils'\nimport numberUtils, { formatPercent } from 'app-lib/numberUtils'\nimport providerUtils from 'app-lib/providerUtils'\nimport appConfig, { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport BorrowRequest from 'bzx-common/src/domain/borrow/BorrowRequest'\nimport ExpectedResult from 'bzx-common/src/shared-components/ExpectedResult'\nimport { RootStore } from 'bzx-common/src/stores'\nimport _ from 'lodash'\nimport React, { Component, FormEvent } from 'react'\nimport AssetDropdown from 'shared-components/AssetDropdown'\nimport { Button, Form, Icon, InfoTip, Input, Slider } from 'ui-framework'\nimport { BigNumber } from '@0x/utils'\nimport fulcrumProvider from '../../../services/FulcrumProvider'\n\nexport interface IBorrowFormProps {\n borrowAsset: Asset\n interestRate: BigNumber\n liquidity: BigNumber\n onSubmit: (request: BorrowRequest) => void\n onCancel: () => void\n rootStore: RootStore\n}\n\ninterface IBorrowFormState {\n userBalances: { token: Asset; amount: BigNumber }[]\n borrowAmount: BigNumber\n collateralAsset: Asset\n borrowAmountValue: string\n depositAmount: BigNumber\n depositAmountValue: string\n balanceValue: BigNumber\n isLoading: boolean\n minValue: BigNumber\n maxValue: BigNumber\n sliderValue: number\n collaterizationPercents: BigNumber\n maxAvailableLiquidity: BigNumber\n liquidationPrice: BigNumber\n maintenanceMargin: BigNumber\n needsApproval: boolean\n itokenAddress: string\n nextBorrowInterestRate: BigNumber | null\n}\n\nexport default class BorrowForm extends Component {\n private _borrowAmountChange = _.debounce(\n (value) => this.borrowAmountChange(value),\n appConfig.delay\n )\n private _depositAmountChange = _.debounce(\n (value) => this.depositAmountChange(value),\n appConfig.delay\n )\n private _sliderChange = _.debounce(\n () => this.depositAmountChange(this.state.depositAmountValue),\n appConfig.delay\n )\n\n public gasAmountNeeded = new BigNumber(3000000)\n private collateralAssets: Asset[]\n public _borrowDecimals = assetUtils.getDecimals(\n fulcrumProvider.currentChainId,\n this.props.borrowAsset\n )\n public constructor(props: IBorrowFormProps) {\n super(props)\n const chainId = fulcrumProvider.currentChainId\n const { borrowAsset } = this.props\n const chain = chainConfigs[chainId]\n this.collateralAssets = chain.borrowing.collateralAssets.filter(\n (asset) => asset !== borrowAsset\n )\n\n this.state = {\n userBalances: this.collateralAssets.map((asset) => ({\n token: asset,\n amount: new BigNumber(0),\n })),\n borrowAmount: new BigNumber(0),\n collateralAsset:\n chain.native.asset !== borrowAsset ? chain.native.asset : chain.stableCoins[0],\n borrowAmountValue: '',\n depositAmount: new BigNumber(0),\n depositAmountValue: '',\n balanceValue: new BigNumber(0),\n maxAvailableLiquidity: new BigNumber(0),\n isLoading: true,\n minValue: new BigNumber(120.3019),\n maxValue: new BigNumber(3000),\n sliderValue: 0,\n collaterizationPercents: new BigNumber(0),\n liquidationPrice: new BigNumber(0),\n maintenanceMargin: new BigNumber(0),\n needsApproval: false,\n nextBorrowInterestRate: null,\n itokenAddress: assetUtils.getITokenAddress(fulcrumProvider.currentChainId, borrowAsset),\n }\n }\n\n async refreshBorrowRate(borrowAmount: BigNumber) {\n try {\n const nextBorrowInterestRate = await loanUtils.nextBorrowInterestRate(\n fulcrumProvider,\n this.props.borrowAsset,\n borrowAmount\n )\n this.setState({ nextBorrowInterestRate })\n } catch (err) {\n // fail silently for now; TODO: discuss how to handle error on the UI\n console.error(err)\n }\n }\n\n private async setInputDefaults() {\n const { collateralAsset } = this.state\n const { borrowAsset } = this.props\n const balanceValue = await providerUtils.getTokenBalanceOfUser(fulcrumProvider, collateralAsset)\n const { maintenanceMargin, minInitialMargin } = await loanUtils.getLoanParams(\n fulcrumProvider,\n this.props.borrowAsset,\n collateralAsset,\n true\n )\n const { loanService } = this.props.rootStore.services\n const liquidity = await loanService.getLiquidityFromBlockchain([borrowAsset])\n const maxAvailableLiquidity = new BigNumber(liquidity[borrowAsset.toLowerCase()]).times(0.95)\n\n const minValue = minInitialMargin\n .div(10 ** 18)\n .plus(100)\n .plus(0.3019)\n\n this.setState(\n {\n maxAvailableLiquidity,\n maintenanceMargin: maintenanceMargin.div(10 ** 20),\n balanceValue,\n minValue,\n sliderValue: this.inverseCurve(minValue),\n collaterizationPercents: minValue,\n borrowAmountValue: '0',\n borrowAmount: new BigNumber(0),\n },\n () => this.setLiquidationPrice()\n )\n }\n\n private setNeedsApproval() {\n const { spendingApprovals } = this.props.rootStore\n\n const needsApproval = spendingApprovals.needsApproval(\n fulcrumProvider.currentChainId,\n this.state.collateralAsset,\n this.state.itokenAddress,\n this.state.depositAmount\n )\n this.setState({ needsApproval })\n }\n\n public async componentDidMount() {\n const { spendingApprovals, userWallet } = this.props.rootStore\n await this.setInputDefaults()\n await this.setMaxBorrow()\n await spendingApprovals.checkApprovals(this.collateralAssets, this.state.itokenAddress)\n const userBalances = await userWallet.getBalances(this.collateralAssets)\n this.setState({ userBalances, isLoading: false })\n }\n\n // custom logarithmic-like scale for slider\n // based on https://codesandbox.io/s/qxm182k0mw\n private sliderCurve(x: number): BigNumber {\n const min = this.state.minValue.toNumber() - 0.3019\n return new BigNumber(0.30194 * Math.exp(2.30097 * x) + min).dp(2, BigNumber.ROUND_HALF_UP)\n }\n\n private inverseCurve(x: BigNumber): number {\n const min = this.state.minValue.toNumber() - 0.3019\n return new BigNumber(Math.log((Number(x) - min) / 0.30194) / 2.30097)\n .dp(2, BigNumber.ROUND_HALF_UP)\n .toNumber()\n }\n\n public setLiquidationPrice = async () => {\n const liquidationPrice = this.state.maintenanceMargin\n .times(this.state.borrowAmount)\n .plus(this.state.borrowAmount)\n .div(this.state.depositAmount)\n\n this.setState({ liquidationPrice, isLoading: false })\n }\n\n public render() {\n const balanceTooLow = this.state.balanceValue.lt(this.state.depositAmount)\n const loanStatus = this.state.borrowAmount.eq(0)\n ? ''\n : this.state.minValue.plus(10).gt(this.state.collaterizationPercents)\n ? 'risky'\n : 'safe'\n\n const minSliderValue = this.inverseCurve(this.state.minValue)\n const maxSliderValue = this.inverseCurve(this.state.maxValue)\n const warningMessage = this.state.borrowAmount.gt(this.state.maxAvailableLiquidity)\n ? 'There is insufficient liquidity available for this loan'\n : balanceTooLow || this.state.balanceValue.isZero()\n ? `Insufficient ${this.state.collateralAsset} balance in your wallet!`\n : this.state.depositAmount.lt(0)\n ? 'Wrong deposit amount'\n : this.state.borrowAmount.lt(0)\n ? 'Wrong borrow amount'\n : this.state.borrowAmount.gt(0) && this.state.depositAmount.eq(0)\n ? `Loan is too large`\n : undefined\n\n const submitTitle = this.state.borrowAmount.toFixed(this._borrowDecimals, 1)\n const { spriteLogo } = assetUtils.getCommon(this.props.borrowAsset)\n const canSubmit =\n !warningMessage && this.state.depositAmount.gt(0) && this.state.borrowAmount.gt(0)\n const { nextBorrowInterestRate } = this.state\n\n return (\n
\n
\n
\n
\n \n
\n
\n
\n Borrow {this.props.borrowAsset}\n
\n
\n
\n
\n
APR
\n
\n \n {formatPercent(this.props.interestRate)}%\n {' '}\n {nextBorrowInterestRate && (\n \n → {formatPercent(nextBorrowInterestRate)}%\n \n )}\n
\n
\n \n
\n

This is the % of interest paid per year on your position.

\n {nextBorrowInterestRate && nextBorrowInterestRate.gte(0.001) && (\n

\n \n With you current setup, the interest rates will raise to{' '}\n {formatPercent(nextBorrowInterestRate)}% approximately.\n \n

\n )}\n

\n The rates are dynamic and depend on the pool utilization. Thanks to Ooki,\n you will benefit from very low rates (almost free money) until the pool\n reaches 80% of utilization.\n

\n
\n
\n
\n
\n
\n
Liquidity
\n
\n {numberUtils.abbreviate(this.state.maxAvailableLiquidity)}{' '}\n {this.props.borrowAsset}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Choose your collateral
\n
\n
\n \n {numberUtils.autoFormat(this.state.balanceValue)}{' '}\n {' '}\n \n {this.state.collateralAsset}\n \n \n
\n
\n
\n\n
\n \n\n \n
\n\n
\n Amount of {this.props.borrowAsset} you will borrow\n
\n\n
\n \n \n Max\n \n
\n\n
\n Riskier\n Safer\n
\n\n \n\n
\n \n
\n\n {warningMessage && !this.state.isLoading ? (\n

{warningMessage}

\n ) : this.state.needsApproval ? (\n \n Approve spending\n \n ) : (\n \n Borrow {numberUtils.autoFormat(this.state.borrowAmount)} {this.props.borrowAsset}\n \n )}\n\n {isNativeTokenForNetwork(fulcrumProvider.currentChainId, this.state.collateralAsset) && (\n
\n Make sure you keep enough {this.state.collateralAsset} gas token{' '}\n \n You are going to send {this.state.collateralAsset}, which is the gas token necessary\n to pay for your transactions. Make sure you always keep some.{' '}\n \n
\n )}\n
\n
\n )\n }\n\n private approveSpending = async (event: FormEvent) => {\n event.preventDefault()\n const { spendingApprovals } = this.props.rootStore\n\n this.setState({ isLoading: true })\n const success = await spendingApprovals.setInfiniteApprovalForToken(\n this.state.collateralAsset,\n this.state.itokenAddress\n )\n if (success) {\n this.setNeedsApproval()\n }\n this.setState({ isLoading: false })\n }\n\n private onSubmit = async (event: FormEvent) => {\n event.preventDefault()\n const borrowRequest = new BorrowRequest(\n '0x0000000000000000000000000000000000000000000000000000000000000000',\n this.props.borrowAsset,\n this.state.borrowAmount,\n this.state.collateralAsset,\n this.state.depositAmount\n )\n\n this.props.onSubmit(borrowRequest)\n }\n\n private onChangeCollateralAsset = async (asset: Asset) => {\n if (this.state.collateralAsset !== asset) {\n const userBalance = this.state.userBalances.find((balance) => balance.token === asset)\n this.setState(\n {\n balanceValue: userBalance ? userBalance.amount : new BigNumber(NaN),\n depositAmount: userBalance ? userBalance.amount : new BigNumber(NaN),\n depositAmountValue: '',\n collateralAsset: asset,\n isLoading: true,\n },\n async () => {\n await this.setInputDefaults()\n await this.setMaxBorrow()\n this.setState({ isLoading: false })\n }\n )\n }\n }\n\n public onBorrowAmountChange = async (borrowAmountValue: string) => {\n const isValid = borrowAmountValue !== '' && _.isFinite(Number(borrowAmountValue))\n const stateUpdate: Partial = {\n borrowAmountValue,\n }\n if (isValid) {\n stateUpdate.borrowAmount = new BigNumber(borrowAmountValue)\n stateUpdate.isLoading = true\n }\n // @ts-ignore\n this.setState(stateUpdate, () => {\n if (isValid) {\n this._borrowAmountChange(this.state.borrowAmountValue)\n }\n })\n }\n\n public setMaxBorrow = async () => {\n if (this.state.balanceValue.eq(0)) {\n return\n }\n const depositAmountValue = numberUtils.formatPrecision(this.state.balanceValue)\n\n this.setState(\n {\n sliderValue: this.inverseCurve(this.state.minValue),\n collaterizationPercents: this.state.minValue,\n depositAmount: this.state.balanceValue,\n depositAmountValue,\n isLoading: true,\n liquidationPrice: new BigNumber(0),\n },\n () => {\n this._depositAmountChange(depositAmountValue)\n }\n )\n }\n\n private setDepositEstimate = (amount: BigNumber) => {\n const depositAmount = amount.times(this.state.collaterizationPercents).div(this.state.minValue)\n const precisionDigits = assetUtils.getDecimals(\n fulcrumProvider.currentChainId,\n this.state.collateralAsset\n )\n\n this.setState({\n depositAmount,\n depositAmountValue: numberUtils.formatPrecision(depositAmount.toFixed(precisionDigits, 1)),\n })\n }\n\n private onChange = async (sliderValue: number) => {\n this.setState({\n sliderValue,\n collaterizationPercents: this.sliderCurve(sliderValue),\n isLoading: true,\n })\n }\n\n public onChangeDeposit = async (depositAmountValue: string) => {\n const isValid = depositAmountValue !== '' && _.isFinite(Number(depositAmountValue))\n const stateUpdate: Partial = {\n depositAmountValue,\n }\n if (isValid) {\n stateUpdate.depositAmount = new BigNumber(depositAmountValue)\n stateUpdate.isLoading = true\n }\n // @ts-ignore\n this.setState(stateUpdate, () => {\n if (isValid) {\n this._depositAmountChange(depositAmountValue)\n }\n })\n }\n\n private borrowAmountChange = async (borrowAmount: string) => {\n const amountBN = new BigNumber(borrowAmount)\n const depositAmount = (\n await loanUtils.getDepositAmountEstimate(\n fulcrumProvider,\n this.props.borrowAsset,\n this.state.collateralAsset,\n amountBN\n )\n ).depositAmount\n\n this.setDepositEstimate(depositAmount)\n await this.setLiquidationPrice()\n this.refreshBorrowRate(amountBN)\n this.setNeedsApproval()\n }\n\n private depositAmountChange = async (depositAmount: string) => {\n try {\n const { borrowAmount } = await loanUtils.getBorrowAmountEstimate(\n fulcrumProvider,\n this.props.borrowAsset,\n this.state.collateralAsset,\n new BigNumber(depositAmount),\n this.sliderCurve(this.state.sliderValue),\n this.state.minValue.minus(0.3019)\n )\n\n this.setState({\n borrowAmount,\n borrowAmountValue: numberUtils.formatPrecision(\n borrowAmount.toFixed(this._borrowDecimals, 1)\n ),\n })\n\n await this.setLiquidationPrice()\n this.refreshBorrowRate(borrowAmount)\n this.setNeedsApproval()\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Could not estimate loan amount' })\n console.error(err)\n this.props.rootStore.setError(err)\n }\n }\n}\n","export default __webpack_public_path__ + \"static/media/borrow-nerd.4f212f8e.svg\";","export default __webpack_public_path__ + \"static/media/borrow-ooki.2013d612.svg\";","import hashUtils from 'app-lib/hashUtils'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Tooltip } from 'ui-framework'\n\ninterface ITokenTipProps {\n iTokenAddress: string\n iTokenExplorerUrl: string\n children: React.ReactNode\n}\n\n/**\n * Shows a tooltip with the iToken smart contract and link to block explorer\n */\nfunction TokenTip({ iTokenAddress, iTokenExplorerUrl, children }: ITokenTipProps) {\n const [tipId] = React.useState(Math.random() + iTokenAddress)\n return (\n <>\n \n

iToken Contract

\n {iTokenAddress ? (\n \n {hashUtils.shortHash(iTokenAddress, 6, 6)}\n \n ) : (\n '-'\n )}\n
\n
\n {children}\n
\n \n )\n}\n\nexport default React.memo(TokenTip)\n","import assetUtils from 'app-lib/assetUtils'\nimport numberUtils from 'app-lib/numberUtils'\nimport IBorrowInfo from 'bzx-common/src/domain/borrow/IBorrowInfo'\nimport { IBorrowItem } from 'bzx-common/src/stores/BorrowStore/BorrowStore'\nimport { Button, Icon, InfoTip } from 'ui-framework'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport TokenTip from 'shared-components/TokenTip'\nimport BorrowAssetVM from './BorrowAssetVM'\n\nconst rateFreeTipContent = (\n
\n

Ooki Free borrowing rates?

\n

\n It is only when users have borrowed around 80% of the available liquidity or more, that\n borrowing rates increase more.\n

\n

Of course, once you borrow, the rates will go up accordingly.

\n

Thanks to Ooki, you can borrow assets at very low rates, sometimes practically for free!

\n
\n)\n\nexport function BorrowAssetItem({ vm, item }: { vm: BorrowAssetVM; item: IBorrowItem }) {\n const { chain } = vm.rootStore\n const { asset, interestRate, availableLiquidity } = item\n const { spriteLogo } = assetUtils.getCommon(asset)\n const { isConnected } = vm.rootStore.web3Connection\n const borrowInfo = { asset, interestRate, liquidity: availableLiquidity } as IBorrowInfo\n const isComingSoon = !!(chain && chain.comingSoon.tokens[asset])\n\n const rateText = interestRate.lt(0.001) ? (\n \n Free{' '}\n \n {rateFreeTipContent}\n \n \n ) : (\n {numberUtils.formatPercent(interestRate) + '%'}\n )\n\n return (\n
\n
\n
\n \n {item.iTokenAddress ? (\n \n {asset}\n \n ) : (\n {asset}\n )}\n
\n
{rateText}
\n {isComingSoon ? (\n
\n Coming soon!\n
\n ) : (\n
\n
\n \n {numberUtils.abbreviate(item.availableLiquidity)}\n {' '}\n available\n
\n
\n {numberUtils.abbreviate(item.totalBorrow, 4)}{' '}\n borrowed\n
\n
\n )}\n\n
\n vm.onOpen(borrowInfo) : vm.rootStore.notifyConnect}>\n Borrow\n \n
\n
\n
\n )\n}\n\nexport default observer(BorrowAssetItem)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport { ButtonTH, Modal } from 'ui-framework'\nimport BorrowForm from '../BorrowForm'\nimport borrowNerd from './borrow-nerd.svg'\nimport borrowOoki from './borrow-ooki.svg'\nimport BorrowAssetItem from './BorrowAssetItem'\nimport BorrowAssetVM from './BorrowAssetVM'\n\nconst BorrowAsset = ({ vm }: { vm: BorrowAssetVM }) => {\n const { media } = vm.rootStore.uiStore\n const { borrowStore } = vm\n const { borrowInfo, filteredBorrowItems, searchQuery } = vm.borrowStore\n\n return (\n
\n
\n \n Asset\n \n\n \n Borrow. Rate\n \n\n \n Liquidity\n \n
\n
\n {filteredBorrowItems.map((item) => (\n \n ))}\n\n {filteredBorrowItems.length === 0 && searchQuery && (\n

\n The filter returned 0 result.\n

\n )}\n
\n\n {!media.isMobileMedia && !searchQuery && (\n <>\n \n \n \n )}\n\n \n {borrowInfo && (\n \n )}\n \n
\n )\n}\n\nexport default observer(BorrowAsset)\n","import IBorrowInfo from 'bzx-common/src/domain/borrow/IBorrowInfo'\nimport { BorrowStore, RootStore } from 'bzx-common/src/stores'\nimport * as mobx from 'mobx'\nimport BorrowRequest from 'bzx-common/src/domain/borrow/BorrowRequest'\n\ntype BorrowAssetVMProps = 'isBorrowOpen'\n\nexport default class BorrowAssetVM {\n rootStore: RootStore\n borrowStore: BorrowStore\n isBorrowOpen = false\n\n onOpen(borrowInfo: IBorrowInfo) {\n this.borrowStore.set('borrowInfo', borrowInfo)\n this.set('isBorrowOpen', true)\n }\n\n onClose() {\n this.set('isBorrowOpen', false)\n this.borrowStore.set('borrowInfo', null)\n }\n\n submit(request: BorrowRequest) {\n this.set('isBorrowOpen', false)\n setTimeout(async () => {\n await this.borrowStore.borrow(request)\n }, 0)\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: BorrowAssetVMProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n this.borrowStore = rootStore.borrowStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport BorrowAsset from './BorrowAsset'\nimport BorrowAssetVM from './BorrowAssetVM'\n\nexport default withVM(BorrowAsset, BorrowAssetVM)\n","import { Asset } from 'app-lib/assetUtils'\nimport { Button, Input, SliderPercent } from 'bzx-common/src/ui-framework'\nimport _ from 'lodash'\nimport React, { Component } from 'react'\nimport AssetDropdown from 'shared-components/AssetDropdown'\n\ninterface IInputAmountProps {\n inputAmount: string\n isLoading: boolean\n selectedAsset: Asset\n buttonValue?: number\n selectorAssets?: Asset[]\n withSlider?: boolean\n readonly?: boolean\n maxSliderValue?: number\n ratio?: number\n max?: boolean\n noButtonOrSlider?: boolean\n sliderAbove?: boolean\n className?: string\n isGrouped?: boolean\n onInsertMaxValue?: (value: number) => void\n onAmountChange?: (value: string) => void\n onCollateralChange?: (asset: Asset) => void\n onAfterSliderChange?: () => void\n}\n\ninterface IInputAmountState {\n prevInputAmount: number\n}\n\nexport class InputAmount extends Component {\n constructor(props: IInputAmountProps) {\n super(props)\n this.state = { prevInputAmount: 0 }\n }\n\n public render() {\n const ratio = _.isFinite(this.props.ratio) ? _.min([this.props.ratio, 1]) || 1 : 1\n const { isGrouped } = this.props\n const maxSliderValue = (this.props.maxSliderValue || 100) * ratio\n const wrapperClass = `input-amount ${isGrouped ? '' : ''}${this.props.className || ''}`\n\n return (\n
\n {this.props.children}\n
\n \n \n\n {!this.props.max ? (\n this.props.selectorAssets ? (\n \n ) : (\n \n )\n ) : (\n \n Max\n \n )}\n
\n
\n {!this.props.withSlider || !this.props.onInsertMaxValue ? (\n !this.props.noButtonOrSlider ? (\n
\n \n 25%\n \n \n 50%\n \n \n 75%\n \n 1 ? '1' : ratio}\n onClick={this.setButtonValue}\n disabled={ratio === 0}>\n {ratio < 1 ? 'MAX' : '100%'}\n \n
\n ) : null\n ) : (\n \n )}\n
\n )\n }\n\n public setButtonValue = (event: React.MouseEvent) => {\n event.preventDefault()\n const buttonElement = event.currentTarget as HTMLButtonElement\n if (buttonElement.dataset.value) {\n const value = parseFloat(buttonElement.dataset.value)\n this.props.onInsertMaxValue && this.props.onInsertMaxValue(value)\n }\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport assetUtils, { Asset } from 'app-lib/assetUtils'\nimport loanUtils from 'app-lib/loanUtils'\nimport { autoFormat, formatPercent, formatPrecision } from 'app-lib/numberUtils'\nimport providerUtils from 'app-lib/providerUtils'\nimport appConfig from 'bzx-common/src/config/appConfig'\nimport BorrowRequest from 'bzx-common/src/domain/borrow/BorrowRequest'\nimport IBorrowedFundsState from 'bzx-common/src/domain/IBorrowedFundsState'\nimport ExpectedResult from 'bzx-common/src/shared-components/ExpectedResult'\nimport { RootStore } from 'bzx-common/src/stores'\nimport _ from 'lodash'\nimport React, { Component, FormEvent } from 'react'\nimport { InputAmount } from 'shared-components/InputAmount/InputAmount'\nimport { Button, Form, Icon, InfoTip } from 'ui-framework'\nimport fulcrumProvider from '../../../services/FulcrumProvider'\n\nexport interface IBorrowMoreFormProps {\n loan: IBorrowedFundsState\n rootStore: RootStore\n onSubmit: (value: BorrowRequest) => void\n onCancel: () => void\n}\n\ninterface IBorrowMoreFormState {\n borrowAmount: BigNumber\n inputAmount: string\n borrowMoreCollaterizationMin: BigNumber\n activeToken: Asset\n maxBorrow: BigNumber\n maxAvailableLiquidity: BigNumber\n assetBalance: BigNumber\n isLoading: boolean\n collateralizedPercent: BigNumber\n liquidationPrice: BigNumber\n nextBorrowInterestRate: BigNumber | null\n collateralToLoanRate: BigNumber\n}\n\nexport default class BorrowMoreForm extends Component {\n private _onInputUpdate = _.debounce((value) => this.getExpectedData(value), appConfig.delay)\n public _borrowDecimals = assetUtils.getDecimals(\n fulcrumProvider.currentChainId,\n this.props.loan.loanAsset\n )\n public loanCollateralizedPercent = this.props.loan.collateralizedPercent.times(100).plus(100)\n\n constructor(props: IBorrowMoreFormProps) {\n super(props)\n\n this.state = {\n borrowAmount: new BigNumber(0),\n borrowMoreCollaterizationMin: new BigNumber(150),\n inputAmount: '',\n activeToken: assetUtils.getDefaultActiveToken(\n fulcrumProvider.currentChainId,\n this.props.loan.loanAsset,\n this.props.loan.collateralAsset\n ),\n maxAvailableLiquidity: new BigNumber(0),\n maxBorrow: new BigNumber(0),\n assetBalance: new BigNumber(0),\n isLoading: true,\n collateralizedPercent: this.loanCollateralizedPercent,\n liquidationPrice: new BigNumber(0),\n nextBorrowInterestRate: null,\n collateralToLoanRate: new BigNumber(NaN),\n }\n }\n\n public async componentDidMount() {\n const { amountOwed, loanAsset, loanData, collateralAmount, collateralAsset } = this.props.loan\n const minInitialMargin = (\n await loanUtils.getLoanParams(fulcrumProvider, loanAsset, collateralAsset, true)\n ).minInitialMargin\n .div(10 ** 18)\n .plus(100)\n\n const borrowMoreCollaterizationMin = minInitialMargin.plus(30)\n const collateralizationTooLow =\n !this.state.collateralizedPercent.isZero() &&\n this.state.collateralizedPercent.lte(this.state.borrowMoreCollaterizationMin)\n\n const assetBalance = await providerUtils.getTokenBalanceOfUser(fulcrumProvider, loanAsset)\n\n const borrowAmountEstimate = await loanUtils.getBorrowAmountEstimate(\n fulcrumProvider,\n loanAsset,\n collateralAsset,\n collateralAmount,\n borrowMoreCollaterizationMin\n )\n\n const { loanService } = this.props.rootStore.services\n const liquidity = await loanService.getLiquidityFromBlockchain([loanAsset])\n const maxAvailableLiquidity = new BigNumber(liquidity[loanAsset.toLowerCase()]).times(0.95)\n\n // get maxBorrow from amountOwed\n // if estimated borrowAmount for min collateralization level is less than amountOwed\n const maxBorrow = !collateralizationTooLow\n ? borrowAmountEstimate.borrowAmount.gt(amountOwed)\n ? borrowAmountEstimate.borrowAmount.minus(amountOwed)\n : amountOwed.times(0.1)\n : new BigNumber(0)\n\n const activeToken = assetUtils.getDefaultActiveToken(\n fulcrumProvider.currentChainId,\n loanAsset,\n collateralAsset\n )\n\n const liquidationPrice = loanUtils.getLiquidationPrice(\n fulcrumProvider,\n this.props.loan,\n loanData.collateral,\n activeToken\n )\n\n this.setState(\n {\n activeToken,\n assetBalance,\n borrowMoreCollaterizationMin,\n collateralToLoanRate: borrowAmountEstimate.collateralToLoanRate,\n isLoading: false,\n maxAvailableLiquidity,\n maxBorrow,\n liquidationPrice,\n },\n () => this.setAmountFromPercentage(1)\n )\n }\n\n public render() {\n const loan = this.props.loan\n const { spriteLogo } = assetUtils.getCommon(loan.loanAsset)\n const { maxBorrow, nextBorrowInterestRate } = this.state\n\n let sliderValue = this.state.borrowAmount.div(this.state.maxBorrow).toNumber()\n if (sliderValue > 1) {\n sliderValue = 1\n }\n\n const collateralizationTooLow =\n !this.state.collateralizedPercent.isZero() &&\n this.state.collateralizedPercent.lte(this.state.borrowMoreCollaterizationMin)\n\n const liquidationPrice = collateralizationTooLow\n ? new BigNumber(NaN)\n : this.state.liquidationPrice\n\n const loanStatus = collateralizationTooLow ? 'risky' : 'safe'\n const submitTitle = this.state.borrowAmount.toFixed(this._borrowDecimals, 1)\n const warningMessage = collateralizationTooLow ? (\n <>\n A minimum of {this.state.borrowMoreCollaterizationMin.toFixed(2)}%\n collaterilization is required\n \n ) : this.state.borrowAmount.lt(0) ? (\n `Please enter a positive number`\n ) : this.state.borrowAmount.gt(this.state.maxAvailableLiquidity) ? (\n 'There is insufficient liquidity available for this loan'\n ) : undefined\n\n const canSubmit = !warningMessage && this.state.borrowAmount.gt(0)\n return (\n
\n
\n
\n
\n \n
\n
\n
Borrow More
\n
\n
\n
\n
APR
\n
\n \n {formatPercent(loan.interestRate)}%\n {' '}\n {nextBorrowInterestRate && (\n \n → {formatPercent(nextBorrowInterestRate)}%\n \n )}\n
\n
\n \n
\n

This is the % of interest paid per year on your position.

\n {nextBorrowInterestRate && nextBorrowInterestRate.gte(0.001) && (\n

\n \n With you current setup, the interest rates will raise to{' '}\n {formatPercent(nextBorrowInterestRate)}% approximately.\n \n

\n )}\n

\n The rates are dynamic and depend on the pool utilization. Thanks to Ooki,\n you will benefit from very low rates (almost free money) until the pool\n reaches 80% of utilization.\n

\n
\n
\n
\n
\n {!this.state.collateralToLoanRate.isNaN() && (\n
\n
Price of 1 {loan.collateralAsset}
\n
\n {autoFormat(this.state.collateralToLoanRate)} {loan.loanAsset}\n
\n
\n )}\n
\n
\n
\n\n
\n
\n
\n
Your Collateral
\n
\n {autoFormat(loan.collateralAmount)} {loan.collateralAsset}\n
\n
\n
\n
Currently Borrowed
\n
\n {autoFormat(loan.amountOwed)} {loan.loanAsset}\n
\n
\n
\n\n
\n this._onInputUpdate(this.state.inputAmount)}\n withSlider\n isGrouped>\n
\n
You will Borrow More
\n \n \n {autoFormat(maxBorrow)}\n {' '}\n {loan.loanAsset} Max\n \n This is the maximum amount of {loan.loanAsset} that you can borrow with your\n current collateral and the liquidity available.{' '}\n \n
\n
\n \n
\n\n
\n \n
\n\n {warningMessage && !this.state.isLoading ? (\n

{warningMessage}

\n ) : (\n \n Borrow {autoFormat(this.state.borrowAmount)} {loan.loanAsset}\n \n )}\n \n \n )\n }\n\n public onSubmit = async (event: FormEvent) => {\n event.preventDefault()\n const { loanId, loanAsset, collateralAsset } = this.props.loan\n\n this.props.onSubmit(\n new BorrowRequest(\n loanId,\n loanAsset,\n this.state.borrowAmount,\n collateralAsset,\n new BigNumber(0)\n )\n )\n }\n\n public onTradeAmountChange = async (inputAmount: string) => {\n this.setState(\n {\n inputAmount,\n borrowAmount: new BigNumber(inputAmount),\n },\n () => {\n this._onInputUpdate(inputAmount)\n }\n )\n }\n\n /**\n * @param percentage from 0 to 1\n */\n public setAmountFromPercentage = (percentage: number) => {\n const borrowAmount = this.state.maxBorrow.times(percentage)\n this.setState(\n {\n borrowAmount,\n inputAmount: formatPrecision(borrowAmount),\n },\n () => this._onInputUpdate(this.state.inputAmount)\n )\n }\n\n async refreshBorrowRate(borrowAmount: BigNumber) {\n try {\n const nextBorrowInterestRate = await loanUtils.nextBorrowInterestRate(\n fulcrumProvider,\n this.props.loan.loanAsset,\n borrowAmount\n )\n this.setState({ nextBorrowInterestRate })\n } catch (err) {\n // fail silently for now; TODO: discuss how to handle error on the UI\n console.error(err)\n }\n }\n\n private getExpectedData = async (inputAmount: string) => {\n const amountBN = new BigNumber(inputAmount)\n if (amountBN.isNaN() || !amountBN.gt(0)) {\n return\n }\n const result = await loanUtils.getBorrowMoreChangeEstimate(\n fulcrumProvider,\n this.props.loan,\n new BigNumber(inputAmount),\n this.state.activeToken\n )\n\n this.setState({\n collateralizedPercent: result.collateralizedPercent,\n liquidationPrice: result.liquidationPrice,\n })\n\n this.refreshBorrowRate(amountBN)\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport assetUtils, { Asset, isNativeTokenForNetwork } from 'app-lib/assetUtils'\nimport loanUtils from 'app-lib/loanUtils'\nimport numberUtils, { formatPercent, autoFormat, formatPrecision } from 'app-lib/numberUtils'\nimport appConfig, { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport RepayLoanRequest from 'bzx-common/src/domain/borrow/RepayLoanRequest'\nimport IBorrowedFundsState from 'bzx-common/src/domain/IBorrowedFundsState'\nimport providerUtils from 'bzx-common/src/lib/providerUtils'\nimport ExpectedResult from 'bzx-common/src/shared-components/ExpectedResult'\nimport { RootStore } from 'bzx-common/src/stores'\nimport _ from 'lodash'\nimport React, { Component, FormEvent } from 'react'\nimport { Button, Form, Icon, InfoTip, Input, SliderPercent } from 'ui-framework'\nimport fulcrumProvider from '../../../services/FulcrumProvider'\n\nexport interface IRepayLoanFormProps {\n loan: IBorrowedFundsState\n isMobileMedia: boolean\n rootStore: RootStore\n onSubmit: (request: RepayLoanRequest) => void\n onCancel: () => void\n}\n\ninterface IRepayLoanFormState {\n inputAmount: string\n isLoading: boolean\n repayAmount: BigNumber\n balanceTooLow: boolean\n percentRatio: number\n assetBalance: BigNumber\n activeToken: Asset\n ratio: number\n collateralizedPercent: BigNumber\n liquidationPrice: BigNumber\n needsApproval: boolean\n spender: string\n}\n\nexport default class RepayLoanForm extends Component {\n public tokenInfo = assetUtils.getInfo(fulcrumProvider.currentChainId, this.props.loan.loanAsset)\n private _onInputUpdate = _.debounce((value) => this.getExpectedData(value), appConfig.delay, {\n leading: true,\n })\n public _borrowDecimals = assetUtils.getDecimals(\n fulcrumProvider.currentChainId,\n this.props.loan.loanAsset\n )\n constructor(props: IRepayLoanFormProps) {\n super(props)\n\n this.state = {\n inputAmount: '',\n repayAmount: new BigNumber(0),\n balanceTooLow: false,\n percentRatio: 1,\n assetBalance: new BigNumber(0),\n activeToken: assetUtils.getDefaultActiveToken(\n fulcrumProvider.currentChainId,\n this.props.loan.loanAsset,\n this.props.loan.collateralAsset\n ),\n ratio: 0,\n isLoading: true,\n collateralizedPercent: new BigNumber(NaN),\n liquidationPrice: new BigNumber(NaN),\n needsApproval: false,\n spender: '',\n }\n }\n\n private setNeedsApproval() {\n const { spendingApprovals } = this.props.rootStore\n const { loanAsset } = this.props.loan\n\n const needsApproval = spendingApprovals.needsApproval(\n fulcrumProvider.currentChainId,\n loanAsset,\n this.state.spender,\n this.state.repayAmount\n )\n this.setState({ needsApproval })\n }\n\n public async componentDidMount() {\n const { checkApprovals, needsApproval } = this.props.rootStore.spendingApprovals\n const { amountOwed, loanAsset } = this.props.loan\n const balance = await providerUtils.getTokenBalanceOfUser(fulcrumProvider, loanAsset)\n const repayAmount = amountOwed\n const inputAmount = repayAmount.toFixed()\n const balanceTooLow = balance.isEqualTo(0) || repayAmount.gt(balance) ? true : false\n const ratio = balance.gt(0) ? balance.div(amountOwed).toNumber() : 0\n const spender = chainConfigs[fulcrumProvider.currentChainId].contracts.bzx.toLowerCase()\n await checkApprovals([loanAsset], spender)\n\n this.setState({\n assetBalance: balance,\n balanceTooLow,\n inputAmount,\n isLoading: false,\n ratio,\n repayAmount,\n spender,\n needsApproval: needsApproval(fulcrumProvider.currentChainId, loanAsset, spender, repayAmount),\n })\n }\n\n public render() {\n const { amountOwed, collateralAsset, loanAsset, loanData } = this.props.loan\n const { collateralizedPercent, liquidationPrice } = this.state\n const { spriteLogo } = assetUtils.getCommon(loanAsset)\n\n const loanStatus =\n collateralizedPercent.isNaN() ||\n loanData.maintenanceMargin\n .div(10 ** 17)\n .minus(25)\n .lt(collateralizedPercent)\n ? 'safe'\n : 'risky'\n const submitTitle = this.state.repayAmount.toFixed(this._borrowDecimals, 1)\n const warningMessage = this.state.repayAmount.gt(this.props.loan.amountOwed)\n ? 'The amount should be equal or smaller than the loan.'\n : this.state.balanceTooLow\n ? `You don't have enough ${loanAsset} in your wallet.`\n : this.state.repayAmount.lt(0)\n ? `Please enter a positive number`\n : undefined\n\n const canSubmit = !warningMessage && this.state.repayAmount.gt(0)\n const balanceVSOwedRatio = this.state.assetBalance.div(this.props.loan.amountOwed)\n const warnEntireRepay =\n this.state.percentRatio === 1 && balanceVSOwedRatio.lte(1.005) && balanceVSOwedRatio.gte(1)\n\n return (\n
\n
\n
\n
\n \n
\n
\n
Repay
\n
\n
\n
\n
APR
\n
\n {formatPercent(this.props.loan.interestRate)}%\n
\n
\n \n The % interest paid per year on your position.\n \n
\n
\n
\n
{loanAsset}
\n
\n ~{numberUtils.abbreviate(this.state.assetBalance)}\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
Loan amount
\n
\n {autoFormat(amountOwed)} {loanAsset}\n
\n
\n
\n
You will repay
\n
\n
{loanAsset}
\n
\n \n
\n
\n
\n
\n\n
\n \n
\n\n
\n \n
\n\n {warningMessage && !this.state.isLoading ? (\n

{warningMessage}

\n ) : this.state.needsApproval ? (\n \n Approve spending\n \n ) : (\n \n Repay {numberUtils.autoFormat(this.state.inputAmount)} {loanAsset}\n \n )}\n {isNativeTokenForNetwork(fulcrumProvider.currentChainId, loanAsset) && (\n
\n Make sure you keep enough {loanAsset} gas token{' '}\n \n You are about to repay with {loanAsset}, which is the gas token necessary to\n pay for your transactions. Make sure you always keep some.{' '}\n \n
\n )}\n {warnEntireRepay && (\n
\n You might not have enough {loanAsset}{' '}\n \n

\n You have{' '}\n \n ~ {autoFormat(this.state.assetBalance)} {loanAsset}\n {' '}\n in your wallet and this might not be enough to repay the entire loan.\n

\n

\n This is because by the time the transaction is mined, your loan will have accrued\n slightly more interest.\n

\n

\n It is very possible that you won't have any issue but to be sure, it is\n recommended to have more {loanAsset} in your wallet to repay the entire loan.\n

\n \n
\n )}\n
\n
\n )\n }\n\n public approveSpending = async (event: FormEvent) => {\n event.preventDefault()\n\n this.setState({ isLoading: true })\n const success = await this.props.rootStore.spendingApprovals.setInfiniteApprovalForToken(\n this.props.loan.loanAsset,\n this.state.spender\n )\n if (success) {\n this.setNeedsApproval()\n }\n this.setState({ isLoading: false })\n }\n\n public onSubmitClick = async (event: FormEvent) => {\n event.preventDefault()\n const { loanAsset, collateralAsset, accountAddress, loanId, amountOwed } = this.props.loan\n const { repayAmount } = this.state\n const repayPercent = repayAmount.multipliedBy(100).dividedBy(amountOwed).integerValue(0)\n\n this.props.onSubmit(\n new RepayLoanRequest(\n loanAsset,\n collateralAsset,\n accountAddress,\n loanId,\n repayAmount,\n repayPercent,\n amountOwed\n )\n )\n }\n\n public onRepayAmountChange = (inputAmount: string) => {\n const { assetBalance } = this.state\n const { amountOwed } = this.props.loan\n const repayAmount = new BigNumber(inputAmount)\n const balanceTooLow = assetBalance.isEqualTo(0) || repayAmount.gt(assetBalance) ? true : false\n\n this.setState(\n {\n inputAmount,\n percentRatio: Number(new BigNumber(inputAmount).div(amountOwed)),\n repayAmount,\n balanceTooLow,\n },\n () => {\n this._onInputUpdate(this.state.inputAmount)\n }\n )\n }\n\n public setAmountByPercentage = async (percentRatio: number) => {\n const repayAmount =\n percentRatio === 1\n ? this.props.loan.amountOwed\n : new BigNumber(formatPrecision(this.props.loan.amountOwed.times(percentRatio)))\n this.onRepayAmountChange(repayAmount.toFixed())\n }\n\n private getExpectedData = async (inputAmount: string) => {\n const result =\n this.state.percentRatio < 1\n ? await loanUtils.getRepayChangeEstimate(\n fulcrumProvider,\n this.props.loan,\n new BigNumber(inputAmount),\n this.state.activeToken\n )\n : { collateralizedPercent: new BigNumber(NaN), liquidationPrice: new BigNumber(NaN) }\n\n this.setState({\n collateralizedPercent: result.collateralizedPercent,\n liquidationPrice: result.liquidationPrice,\n })\n this.setNeedsApproval()\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport assetUtils, { Asset } from 'app-lib/assetUtils'\nimport hashUtils from 'app-lib/hashUtils'\nimport loanUtils from 'app-lib/loanUtils'\nimport { autoFormat, formatPercent } from 'app-lib/numberUtils'\nimport { links } from 'bzx-common/src/config/appConfig'\nimport LoanModel from 'bzx-common/src/stores/BorrowStore/Loan'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport PriceSwitch from 'shared-components/PriceSwitch'\nimport TokenLoader from 'shared-components/TokenLoader'\nimport { Button, ButtonClipboard, Icon, InfoTip } from 'ui-framework'\nimport GreenFace from '../../../../public/gif/GreenFace.gif'\nimport RedFace from '../../../../public/gif/RedFace.gif'\nimport YellowFace from '../../../../public/gif/YellowFace.gif'\n\nconst ookiFace: Record<'safe' | 'danger' | 'unsafe', string> = {\n safe: GreenFace,\n danger: RedFace,\n unsafe: YellowFace,\n}\n\n/**\n * Returns a twitter intent link for a loan.\n */\nfunction getTweetLink(asset: Asset, rate: BigNumber, loanAmount: BigNumber) {\n const moneyAdjective = rate.lt(1) ? 'Free' : 'Cheap'\n return `https://twitter.com/intent/tweet?original_referer=${encodeURIComponent(\n 'https://ooki.com'\n )}&ref_src=twsrc%5Etfw%7Ctwcamp%5Ebuttonembed%7Ctwterm%5Emention%7Ctwgr%5EOokiTrade&screen_name=OokiTrade&text=${encodeURIComponent(\n `I'm borrowing ${autoFormat(loanAmount)} ${asset} at ${formatPercent(\n rate\n )}% interest rate on https://ooki.com/borrow. ${moneyAdjective} Money. 😎💰`\n )}`\n}\n\nexport function Loan({ loan }: { loan: LoanModel }) {\n const positionSafetyText = loanUtils.getPositionSafetyText(\n loan.loanData.maintenanceMargin,\n loan.collateralizedPercent\n )\n const collateralizedStateSelector =\n positionSafetyText === 'Safe' ? 'safe' : positionSafetyText === 'Danger' ? 'danger' : 'unsafe'\n const loanToken = assetUtils.getCommon(loan.loanAsset)\n const collateralToken = assetUtils.getCommon(loan.collateralAsset)\n const borrowApr = formatPercent(loan.interestRate)\n\n return (\n
\n
\n
\n \n \n \n
\n \n
\n {loanToken.displayName} / {collateralToken.displayName}\n
\n\n \n Share \n \n
\n
\n
\n
Amount Borrowed
\n
\n {autoFormat(loan.amountOwed)} {loan.loanAsset}\n
\n
\n
\n
Collateral
\n \n
{autoFormat(loan.collateralAmount)}
 \n
{collateralToken.displayName}
\n
\n
\n
\n\n
\n
\n
\n Collateralized{' '}\n \n Each asset pairing has unique collateral requirements for position maintenance.{' '}\n \n Learn More\n \n .\n \n
\n {positionSafetyText !== 'Display Error' ? (\n \n {formatPercent(loan.collateralizedPercent.multipliedBy(100).plus(100))}%\n
\n ) : (\n
{positionSafetyText}
\n )}\n
\n
\n
Borrow. Rate
\n
\n {borrowApr === '0' && '~'}\n {borrowApr}%\n
\n
\n
\n
\n
\n
Liq. Price
\n
\n {autoFormat(loan.selectedLiquidationPrice)}\n
\n {loan.activeTokenLiquidation && (\n \n loan.set('activeTokenLiquidation', activeTokenLiquidation)\n }\n />\n )}\n
\n
\n \n
\n \n ID:{' '}\n {hashUtils.shortHash(loan.loanId.slice(2), 2, 3)}\n \n \n
\n
\n
\n\n
\n {loan.isInProgress ? (\n
\n
Pending
\n
{/**/}
\n
\n ) : (\n
\n \n Borrow More\n \n\n \n Collateral\n \n\n \n Repay Loan\n \n
\n )}\n \n )\n}\n\nexport default observer(Loan)\n","export default __webpack_public_path__ + \"static/media/GreenFace.d87b775d.gif\";","export default __webpack_public_path__ + \"static/media/RedFace.2f177c33.gif\";","export default __webpack_public_path__ + \"static/media/YellowFace.d0d617c3.gif\";","import BorrowRequest from 'bzx-common/src/domain/borrow/BorrowRequest'\nimport RepayLoanRequest from 'bzx-common/src/domain/borrow/RepayLoanRequest'\nimport ManageCollateralRequest from 'bzx-common/src/domain/ManageCollateralRequest'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ManageCollateralForm from 'shared-components/ManageCollateralForm/ManageCollateralForm'\nimport WhyNoSir from 'shared-components/WhyNoSir/WhyNoSir'\nimport { Modal } from 'ui-framework'\nimport BorrowMoreForm from '../BorrowMoreForm'\nimport BorrowVM from '../BorrowVM'\nimport RepayLoanForm from '../RepayLoanForm'\nimport Loan from './Loan'\n\nexport type Request = ManageCollateralRequest | BorrowRequest | RepayLoanRequest | undefined\n\nexport function UserLoans({ vm }: { vm: BorrowVM }) {\n const { uiStore, web3Connection } = vm.rootStore\n const { smScreen } = uiStore.media\n const { loan, loans, request, filteredLoans, onClose, onLoanConfirmed } = vm.borrowStore\n\n if (!web3Connection.isConnected || (vm.borrowStore.loansChecked && loans.length === 0)) {\n return \n }\n\n return (\n <>\n {loan && (\n \n {request instanceof ManageCollateralRequest && (\n \n )}\n {request instanceof BorrowRequest && (\n \n )}\n {request instanceof RepayLoanRequest && (\n \n )}\n \n )}\n\n
\n {filteredLoans.map((loan) => (\n \n ))}\n {/** Trick to align items with tabs when there is only one */}\n {filteredLoans.length === 1 &&
}\n\n {filteredLoans.length === 0 && vm.rootStore.borrowStore.searchQuery && (\n

\n The filter returned 0 result.\n

\n )}\n
\n \n )\n}\n\nexport default observer(UserLoans)\n","import React from 'react'\nimport { observer } from 'mobx-react'\nimport { NavLink, Redirect, Route, Switch } from 'react-router-dom'\nimport { Input } from 'ui-framework'\nimport BorrowVM from './BorrowVM'\nimport BorrowAsset from './BorrowAsset'\nimport UserLoans from './UserLoans'\nimport CircleLoader from 'shared-components/CircleLoader'\n\nexport const Borrow = ({ vm }: { vm: BorrowVM }) => {\n return (\n
\n
\n
\n \n Borrow\n \n \n Your loans\n
\n {vm.borrowStore.pending ? (\n {vm.loansCount}\n ) : (\n vm.loansCount\n )}\n
\n
\n
\n\n \n
\n \n } />\n } />\n } />\n \n
\n )\n}\n\nexport default observer(Borrow)\n","import { BorrowStore, RootStore } from 'bzx-common/src/stores'\nimport * as mobx from 'mobx'\n\ntype BorrowVMProps = 'loansCount'\n\nexport default class BorrowVM {\n public borrowStore: BorrowStore\n public rootStore: RootStore\n\n public get loansCount() {\n return this.borrowStore.loans.length\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: BorrowVMProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n public assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n public init() {\n setTimeout(() => {\n this.borrowStore.autoSync(true)\n }, 0)\n }\n\n public destroyVM() {\n this.borrowStore.autoSync(false)\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n this.borrowStore = rootStore.borrowStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n this.init()\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport Borrow from './Borrow'\nimport BorrowVM from './BorrowVM'\n\nexport default withVM(Borrow, BorrowVM)\n","import { chainConfigs, ChainId } from 'bzx-common/src/config/appConfig'\nimport { RootStore } from 'bzx-common/src/stores'\nimport { inject, observer } from 'mobx-react'\nimport React from 'react'\nimport { Button, Icon } from 'ui-framework'\n\nconst supportedChains: ChainId[] = [1, 56, 137]\n\ninterface IButtonChainSwitch {\n chainId?: ChainId\n children?: React.ReactNode\n allChainsSwitches?: boolean\n onlyIcon?: boolean\n className?: string\n rootStore: RootStore\n}\n\n/**\n * Note: this is currently based on the website domains.\n * NOT the network the user is connected to, until we have the apps working on any network.\n */\nexport function ButtonChainSwitch(props: any) {\n const { rootStore, children, allChainsSwitches, chainId, onlyIcon, className } =\n props as IButtonChainSwitch\n const { web3Connection } = rootStore\n\n if (allChainsSwitches) {\n return (\n <>\n {supportedChains.map((chainId) => {\n const { name, color } = chainConfigs[chainId].icon\n return (\n \n \n \n \n {chainConfigs[chainId].chainDetails.chainName}\n \n \n \n )\n })}\n \n )\n }\n if (chainId) {\n const { name, color } = chainConfigs[chainId].icon\n if (onlyIcon) {\n return (\n \n \n \n )\n }\n return (\n \n \n {children}\n \n )\n }\n\n return null\n}\n\nexport default inject('rootStore')(observer(ButtonChainSwitch))\n","import { autoFormat } from 'app-lib/numberUtils'\nimport { IAirdropInfo } from 'bzx-common/src/services/AirdropService'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Button } from 'ui-framework'\nimport CompensationVM from './CompensationVM'\n\nexport function Claim({ vm, compensation }: { vm: CompensationVM; compensation: IAirdropInfo }) {\n const badBoyMode = vm.isBadBoy && compensation.amount.gt(0)\n const tokenName = badBoyMode ? 'vBZRX' : 'BZRX'\n const { amount, userClaimed } = compensation\n const canClaim =\n amount.gt(0) && !userClaimed && vm.approvalsAreSafe && vm.inputAddressEqualConnected\n const isBzrxLocked = compensation.airdrop === 'BZRX_LOCKED'\n\n if (!compensation.token.address) {\n return null\n }\n\n if (vm.isBadBoy && compensation.airdrop !== 'BZRX_COMPENSATION1') {\n return null\n }\n\n return (\n
\n
\n
\n

{compensation.airdrop}

\n
\n Entitled to{' '}\n \n {autoFormat(compensation.amount)}\n {' '}\n {tokenName}.\n
\n
\n\n {vm.canCheck && badBoyMode && compensation.airdrop === 'BZRX_COMPENSATION1' && (\n \n )}\n\n {!vm.isBadBoy && !userClaimed && (\n \n Claim\n \n )}\n
\n\n {vm.canCheck && badBoyMode && compensation.airdrop === 'BZRX_COMPENSATION1' && (\n

Team claim comes later

\n )}\n\n {userClaimed &&

You have already claimed.

}\n
\n )\n}\n\nexport default observer(Claim)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Button } from 'ui-framework'\nimport CompensationVM from '../CompensationVM'\n\nexport function ApprovalCheck({ vm }: { vm: CompensationVM }) {\n return (\n <>\n

Security check

\n\n {!vm.approvalsChecked && (\n <>\n

We will check that the contracts that were compromised can not take away your BZRX.

\n\n \n Check my wallet\n \n \n )}\n\n {vm.approvalsChecked && vm.approvalsAreSafe && (\n

\n Good! Your BZRX are safe :)\n

\n )}\n\n {vm.approvalsError &&

Error: {vm.approvalsError.message}

}\n {vm.approvalsChecked && !vm.approvalsAreSafe && !vm.approvalsError && (\n
\n

\n Your wallet is at risk!\n

\n

You should revoke your BZRX spending approvals for these contracts immediately.

\n
    \n {vm.approvals\n .filter((approval) => approval.amount.gt(0))\n .map((approval) => (\n
  • {approval.spender}
  • \n ))}\n
\n
    \n
  1. \n You can visit{' '}\n \n Debank\n {' '}\n to remove the spending approvals.\n
  2. \n
  3. \n Once the approvals are revoked, wait a few minutes and check your address again.\n
  4. \n
\n
\n )}\n \n )\n}\n\nexport default observer(ApprovalCheck)\n","import { chainConfigs, ChainId } from 'bzx-common/src/config/appConfig'\nimport { IAirdropInfo } from 'bzx-common/src/services/AirdropService'\nimport { observer } from 'mobx-react'\nimport React, { CSSProperties } from 'react'\nimport ButtonChainSwitch from 'shared-components/ButtonChainSwitch'\nimport { Button, Input } from 'ui-framework'\nimport CompensationClaim from '../CompensationClaim'\nimport CompensationVM from '../CompensationVM'\nimport ApprovalCheck from './ApprovalCheck'\n\nconst styles: Record = {\n inputWrapper: { maxWidth: '500px' },\n}\n\n/**\n * Used to claim BZRX for people who lost BZRX in hack or had BZRX stuck on BSC\n */\nexport function BZRXCommonCompensation({\n vm,\n compensations,\n chainIdNeeded,\n}: {\n vm: CompensationVM\n compensations: IAirdropInfo[]\n chainIdNeeded: ChainId\n}) {\n const { chainId, isConnected } = vm.rootStore.web3Connection\n const entitledCompensations = compensations.filter((airdrop) => airdrop.amount.gt(0))\n const isEntitledToCompensation = entitledCompensations.length > 0\n const hasClaimableCompensations = entitledCompensations.some((claim) => !claim.userClaimed)\n const compensationListVisible = !hasClaimableCompensations || vm.approvalsChecked\n const needToConnectRightWallet =\n isConnected && hasClaimableCompensations && !vm.inputAddressEqualConnected && vm.inputAddress\n\n if (chainId !== chainIdNeeded) {\n return (\n
\n \n Switch to {chainConfigs[chainIdNeeded].chainDetails.shortName}\n \n
\n )\n }\n\n return (\n
\n
\n \n
\n \n \n Check\n \n
\n
\n\n {vm.airdropStore.airdropsInfoLoaded && (\n <>\n {!isConnected && hasClaimableCompensations && (\n

You need to connect your wallet to claim.

\n )}\n\n {hasClaimableCompensations && !vm.isBadBoy && (\n
\n \n
\n )}\n\n {compensationListVisible && (\n <>\n

Claims

\n\n {!isEntitledToCompensation && (\n

No compensation was found for this address.

\n )}\n\n {needToConnectRightWallet && (\n

\n To claim, you need to connect with the same wallet that you are checking.\n

\n )}\n\n {entitledCompensations.map((compensation) => (\n \n ))}\n \n )}\n \n )}\n
\n )\n}\n\nexport default observer(BZRXCommonCompensation)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport BZRXCommonCompensation from './BZRXCommonCompensation'\nimport CompensationVM from './CompensationVM'\nimport { Icon } from 'ui-framework'\n\nexport function BZRXCompensation({ vm }: { vm: CompensationVM }) {\n const { BZRX_COMPENSATION1, BZRX_COMPENSATION2 } = vm.airdropStore.airdropsInfo\n const tokenName = vm.isBadBoy && BZRX_COMPENSATION1.amount.gt(0) ? 'vBZRX' : 'BZRX'\n\n return (\n
\n
\n

How does it work?

\n
\n

\n You will receive the BZRX compensation on Polygon,
regardless of whether\n your tokens were lost on BSC or Polygon.\n

\n
    \n
  1. Insert your address to know your compensation.
  2. \n
  3. There will be also a security check of your wallet.
  4. \n
  5. Finally, you will be able to claim your compensation on Polygon.
  6. \n
\n
\n
\n\n
\n

\n \n {tokenName} Compensation\n

\n\n \n
\n
\n )\n}\n\nexport default observer(BZRXCompensation)\n","import { bscCompensationContract } from 'bzx-common/src/config/appConfig'\nimport { airdrops } from 'bzx-common/src/services/AirdropService'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\n\nconst bscAirdrop = airdrops.BZRX_LOCKED\n\nexport function BZRXCompensationBSCInfo() {\n return (\n
\n

How does it work?

\n
\n
\n

\n If you still have BZRX on BSC,
you will receive the compensation (BZRX) on\n Polygon.\n

\n
    \n
  1. \n On BSC, you must send the BZRX you own to our Compensation contract.\n
  2. \n
  3. \n

    \n After sending your BZRX on BSC, you will have to wait for an airdrop to be created\n on Polygon. You will receive the same amount that you sent to our contract on BSC.\n

    \n
  4. \n
\n
\n
\n
\n

BSC Compensation Contract

\n \n {bscCompensationContract}\n \n
\n
\n

Polygon Airdrop Contract

\n \n {bscAirdrop.contract}\n \n
\n
\n
\n
\n )\n}\n\nexport default React.memo(BZRXCompensationBSCInfo)\n","import { autoFormat } from 'app-lib/numberUtils'\nimport { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ButtonChainSwitch from 'shared-components/ButtonChainSwitch'\nimport { Button } from 'ui-framework'\nimport CompensationVM from '../CompensationVM'\n\nexport function BZRXCompensationBSCStep1({ vm }: { vm: CompensationVM }) {\n const bzrxBalance = vm.rootStore.userWallet.indexedByAsset.BZRX\n const { chainId, isConnected } = vm.rootStore.web3Connection\n\n if (chainId !== 56) {\n return (\n <>\n

\n You need to be on {chainConfigs[56].chainDetails.shortName} to send your BZRX.\n

\n
\n \n Switch to {chainConfigs[56].chainDetails.shortName}\n \n
\n \n )\n }\n\n return (\n <>\n

Send your BZRX to our contract

\n\n {bzrxBalance ? (\n <>\n {vm.bzrxSentToBscCompensationContract ? (\n

Tokens sent

\n ) : (\n

\n You have {autoFormat(bzrxBalance.amount)} BZRX in your\n wallet.\n

\n )}\n\n \n Send my BZRX\n \n \n ) : (\n

\n {isConnected ? (\n Loading balance...\n ) : (\n You need to connect your wallet.\n )}\n

\n )}\n\n
\n

When will I get my airdrop?

\n

\n We create a new airdrop every two weeks. After you send your BZRX, you should come back\n here in two weeks and you will be able to claim your airdrop on Polygon.\n

\n
\n \n )\n}\n\nexport default observer(BZRXCompensationBSCStep1)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport BZRXCommonCompensation from '../BZRXCommonCompensation'\nimport CompensationVM from '../CompensationVM'\n\nexport function BZRXCompensationBSCStep2({ vm }: { vm: CompensationVM }) {\n return (\n \n )\n}\n\nexport default observer(BZRXCompensationBSCStep2)\n","import { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Button, Icon } from 'ui-framework'\nimport CompensationVM, { BscCompensationTab } from '../CompensationVM'\nimport BZRXCompensationBSCInfo from './BZRXCompensationBSCInfo'\nimport BZRXCompensationBSCStep1 from './BZRXCompensationBSCStep1'\nimport BZRXCompensationBSCStep2 from './BZRXCompensationBSCStep2'\n\nconst tabs: {\n id: BscCompensationTab\n label: string\n chainIcon: { name: string; color: string }\n}[] = [\n { id: 'bsc', label: '1. Send BZRX on BSC', chainIcon: chainConfigs[56].icon },\n { id: 'polygon', label: '2. Claim on Polygon', chainIcon: chainConfigs[137].icon },\n]\n\nexport function BZRXCompensationBSC({ vm }: { vm: CompensationVM }) {\n return (\n
\n \n\n
\n

\n \n BZRX Compensation\n

\n\n {vm.bscTab === '' && (\n <>\n
    \n
  • Choose option 1 if you have BZRX on BSC.
  • \n
  • Choose option 2 if you did step 1 already.
  • \n
\n
\n {tabs.map((tab) => (\n \n \n {tab.label}\n \n ))}\n
\n \n )}\n {vm.bscTab !== '' && (\n <>\n \n Back\n \n\n {vm.bscTab === 'bsc' && }\n {vm.bscTab === 'polygon' && }\n \n )}\n
\n
\n )\n}\n\nexport default observer(BZRXCompensationBSC)\n","import React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\n\nconst instructions = (\n
\n
\n
\n
\n

\n 1 BZRX Compensation\n

\n

Who is entitled to BZRX compensation?

\n
    \n
  • Users who lent BZRX to the protocol.
  • \n
  • Users who used BZRX as collateral in loans.
  • \n
  • Users who have PGOV/BGOV not yet converted.
  • \n
  • Users who had GOV LP tokens held in farming.
  • \n
  • Users who had GOV LP tokens in their wallet.
  • \n
  • Users that lost BZRX due infinite approval.
  • \n
\n
\n
\n

\n 2 Debt Token P125\n

\n

What is the P125 token?

\n
    \n
  • \n P125 is a debt token that the protocol repays over time.\n
  • \n
  • The token has a 25% premium.
  • \n
  • \n The premium means that if you lost an equivalent of 100 USD at the moment of the\n incident, you have the possibility to get back 125 USD over time.\n
  • \n
\n

Who is entitled to P125 compensation?

\n
    \n
  • Users who lost tokens other than BZRX.
  • \n
\n
\n
\n

\n \n Read the compensation snapshot proposal for detailed information.\n \n

\n
\n
\n)\n\nexport default function CompensationDetails() {\n return instructions\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { autoFormat } from 'app-lib/numberUtils'\nimport { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { airdrops } from 'bzx-common/src/services/AirdropService'\nimport { observer } from 'mobx-react'\nimport React, { CSSProperties } from 'react'\nimport ButtonChainSwitch from 'shared-components/ButtonChainSwitch'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Button, Icon, Input } from 'ui-framework'\nimport CompensationVM from './CompensationVM'\n\nconst styles: Record = {\n inputWrapper: { maxWidth: '500px' },\n assetName: { width: '56px' },\n}\n\nconst airdropContract = airdrops.P125_COMPENSATION1.contract\nconst airdropContractLink = `https://polygonscan.com/address/${airdropContract}`\nconst p125Info = assetUtils.getInfo(137, Asset.P125)\nconst p125Link = `https://polygonscan.com/address/${p125Info.address}`\n\nconst priceReference = [\n { asset: Asset.AAVE, price: '339.4' },\n { asset: Asset.AUTO, price: '1088.6' },\n { asset: Asset.BNB, price: '601' },\n { asset: Asset.BTCB, price: '61378' },\n { asset: Asset.BUSD, price: '1' },\n { asset: Asset.BZRX, price: '0.442' },\n { asset: Asset.CAKE, price: '19.85' },\n { asset: Asset.DOGE, price: '0.26' },\n { asset: Asset.ETH, price: '4476' },\n { asset: Asset.IAAVE, price: '1.034' },\n { asset: Asset.IAUTO, price: '1.0355' },\n { asset: Asset.IBNB, price: '1.0373' },\n { asset: Asset.IBUSD, price: '1.0258' },\n { asset: Asset.ICAKE, price: '1.0926' },\n { asset: Asset.IDOGE, price: '1.00659' },\n { asset: Asset.IETH, price: '1.0047 / 1.0026' },\n { asset: Asset.ILINK, price: '1.0033' },\n { asset: Asset.IMATIC, price: '1.004' },\n { asset: Asset.IUSDC, price: '1.03' },\n { asset: Asset.IUSDT, price: '1.00549 / 1.048' },\n { asset: Asset.IWBTC, price: '1.0029 / 1.0052' },\n { asset: Asset.LINK, price: '31.6' },\n { asset: Asset.MATIC, price: '1.9' },\n { asset: Asset.USDC, price: '1' },\n { asset: Asset.USDT, price: '1' },\n]\n\nexport function P125Compensation({ vm }: { vm: CompensationVM }) {\n const { P125_COMPENSATION1 } = vm.airdropStore.airdropsInfo\n const { chainId, isConnected } = vm.rootStore.web3Connection\n\n return (\n
\n
\n

How does it work?

\n
\n

\n You will receive your P125 compensation on Polygon, regardless of whether your\n tokens were lost on BSC or Polygon.\n

\n\n
    \n
  1. Insert your address to know your compensation.
  2. \n
  3. Check if your compensation is what you expect.
  4. \n
  5. Report any issue in the compensation channel.
  6. \n
  7. Wait. You will be able to claim on Polygon soon.
  8. \n
\n\n

How many P125 tokens should I get?

\n\n

\n The amount of P125 tokens you will receive will be the equivalent in USD of your total\n loss with an additional 25%.\n

\n

For example, if your loss was worth 1000$, you will receive 1250 P125 Tokens.

\n\n \n\n {vm.priceRefDialog.visible && (\n
\n

\n The prices of the tokens are taken from the moment of the loss. There may be a\n slight difference with the final calculation.\n

\n\n
    \n
  • BSC: Nov-05-2021 11:07:19 AM +UTC (Block 12386616)
  • \n
  • Polygon: Nov-05-2021 11:06:58 AM +UTC (Block 21009327)
  • \n
\n
\n {priceReference.map((ref) => {\n return (\n
\n \n {ref.asset}\n \n ${ref.price}\n
\n )\n })}\n
\n

\n Note: Where there are 2 prices, the first one is the price registered on BSC and the\n second one is on Polygon.\n

\n
\n )}\n
\n
\n\n
\n

\n \n P125 Compensation\n {chainId === 137 && isConnected && (\n \n Add P125 to Wallet\n \n )}\n

\n {!vm.rootStore.web3Connection.walletAddress && (\n

You need to connect your wallet to claim.

\n )}\n {chainId !== 137 && (\n
\n \n Switch to {chainConfigs[137].chainDetails.shortName}\n \n
\n )}\n\n {chainId === 137 && (\n <>\n
\n \n
\n \n \n Check\n \n
\n
\n\n {P125_COMPENSATION1.token.address && (\n <>\n

\n You are entitled to{' '}\n \n {autoFormat(P125_COMPENSATION1.amount)}\n {' '}\n P125 debt tokens.\n

\n {vm.airdropStore.airdropsInfo.P125_COMPENSATION1.userClaimed ? (\n

You have already claimed.

\n ) : (\n

\n Verify that your compensation is what you are expecting.
\n You will receive P125 tokens on Polygon.\n

\n )}\n\n {P125_COMPENSATION1.amount.gt(0) && vm.canCheck && (\n
\n {isConnected && !vm.inputAddressEqualConnected && (\n

\n The wallet address you are checking is different than the one you are\n connected to.\n

\n )}\n \n Claim\n \n
\n )}\n \n )}\n\n
\n
\n

Airdrop contract

\n \n {airdropContract}\n \n
\n
\n

P125 contract

\n \n {p125Info.address}\n \n
\n
\n \n )}\n
\n
\n )\n}\n\nexport default observer(P125Compensation)\n","import { links } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Button, Icon } from 'ui-framework'\nimport BZRXCompensation from './BZRXCompensation'\nimport BZRXCompensationBSC from './BZRXCompensationBSC'\nimport CompensationDetails from './CompensationDetails'\nimport CompensationVM, { CompensationTab } from './CompensationVM'\nimport P125Compensation from './P125Compensation'\n\nconst tabs: { id: CompensationTab; label: string; icon: string }[] = [\n { id: 'bzrxOnPolygon', label: 'I lost BZRX / GOV on BSC / Polygon', icon: 'token-bzrx' },\n { id: 'bzrxOnBsc', label: 'I still have BZRX on BSC', icon: 'token-bzrx' },\n { id: 'p125', label: 'I lost other tokens than BZRX', icon: 'token-p125' },\n]\n\nexport function Compensation({ vm }: { vm: CompensationVM }) {\n return (\n
\n

Compensation

\n\n
\n
\n

\n If you are a victim of the November 2021 incident, you are entitled to a compensation of\n BZRX tokens and/or Debt token.{' '}\n \n

\n

\n Depending on your situation you will receive multiple airdrops and must follow the\n instructions for each case.\n

\n\n

\n Join the{' '}\n \n Compensation channel\n {' '}\n if you need help.\n

\n
\n
\n\n {vm.instructionsDialog.visible && }\n\n
\n {tabs.map((tab) => (\n \n \n {tab.label}\n \n ))}\n
\n\n {vm.tab === 'bzrxOnPolygon' && }\n {vm.tab === 'bzrxOnBsc' && }\n {vm.tab === 'p125' && }\n
\n )\n}\n\nexport default observer(Compensation)\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgBorrow(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_9\",\n \"data-name\": \"Layer 9\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 36 36\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Borrow\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1.7,7.18v9.49a.59.59,0,0,0,1.17,0V7.18a.59.59,0,0,0-1.17,0Z\",\n fill: \"#f39867\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.78,10.37v6.3a.59.59,0,0,0,1.17,0v-6.3a.59.59,0,0,0-1.17,0Z\",\n fill: \"#f39867\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M33.13,7.18v9.49a.59.59,0,0,0,1.17,0V7.18a.59.59,0,0,0-1.17,0Z\",\n fill: \"#f39867\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M30.05,10.37v6.3a.59.59,0,0,0,1.17,0v-6.3a.59.59,0,0,0-1.17,0Z\",\n fill: \"#f39867\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18,22.56a10,10,0,1,0-10-10A10,10,0,0,0,18,22.56Z\",\n fill: \"#f39867\",\n stroke: \"#2e2c5b\",\n strokeMiterlimit: 10,\n strokeWidth: 1.04\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M35.47,30.85a3.29,3.29,0,0,1-3.25,3.26H3.78A3.29,3.29,0,0,1,.53,30.85V20a3.28,3.28,0,0,1,3.25-3.25H32.22A3.28,3.28,0,0,1,35.47,20Z\",\n fill: \"#f7b267\",\n stroke: \"#2c2c5a\",\n strokeMiterlimit: 10,\n strokeWidth: 1.03\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.59,24.84a.85.85,0,0,1-1.69-.06.85.85,0,0,1,1.69,0Z\",\n fill: \"#29265b\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.1,24.84a.84.84,0,0,1-.88.81.83.83,0,0,1-.81-.87.85.85,0,0,1,1.69,0Z\",\n fill: \"#29265b\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17,26.79a1.68,1.68,0,0,0,.54.28,1.9,1.9,0,0,0,.45.06,1.48,1.48,0,0,0,.51-.09A1.14,1.14,0,0,0,19,26.8a1.08,1.08,0,0,0,.32-.49l.06-.16a1,1,0,0,0,0-.42l-.06-.15a.55.55,0,0,0-.17-.17.59.59,0,0,0-.36-.13H17.24a.63.63,0,0,0-.43.17.73.73,0,0,0-.19.44,1.4,1.4,0,0,0,.09.46A1.23,1.23,0,0,0,17,26.79Z\",\n fill: \"#29265b\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgBorrow);\nexport default __webpack_public_path__ + \"static/media/borrow.34fd8327.svg\";\nexport { ForwardRef as ReactComponent };","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport providerUtils from 'app-lib/providerUtils'\nimport { approvalUtils } from 'app-lib/web3'\nimport { bscCompensationContract, chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { Airdrop, IAirdropInfo } from 'bzx-common/src/services/AirdropService'\nimport { AirdropStore, RootStore } from 'bzx-common/src/stores'\nimport * as mobx from 'mobx'\nimport { FormEvent } from 'react'\nimport { DialogVM } from 'ui-framework'\nimport web3Utils from 'web3-utils'\nimport { BigNumber } from '@0x/utils'\n\nexport type CompensationTab = 'bzrxOnPolygon' | 'bzrxOnBsc' | 'p125' | ''\nexport type BscCompensationTab = 'bsc' | 'polygon' | ''\n\n// Note keep these lowercase\nconst hackerWalletsRug2 = [\n '0x53cb834c43ce919289a4db2ca54f65e1afb17041',\n '0xafad9352eb6bcd085dd68268d353d0ed2571af89',\n]\n\ninterface ICompensationVMProps {\n inputAddress: string\n approvalsPending: boolean\n approvalsError: Error | null\n approvalsChecked: boolean\n bzrxSentToBscCompensationContract: boolean\n tab: CompensationTab\n bscTab: BscCompensationTab\n approvals: {\n amount: BigNumber\n spender: string\n assetAddress: string\n }[]\n}\n\nexport default class CompensationVM implements ICompensationVMProps {\n rootStore: RootStore\n airdropStore: AirdropStore\n inputAddress = ''\n approvalsPending = false\n approvalsError: Error | null = null\n approvalsChecked = false\n bzrxSentToBscCompensationContract = false\n instructionsDialog = new DialogVM({ id: 'instructions' })\n priceRefDialog = new DialogVM({ id: 'priceref' })\n tab: CompensationTab = ''\n bscTab: BscCompensationTab = ''\n approvals: {\n amount: BigNumber\n spender: string\n assetAddress: string\n }[] = []\n stopSyncBalance?: mobx.IReactionDisposer\n\n get canCheck() {\n return web3Utils.isAddress(this.inputAddress)\n }\n\n get canCheckP125() {\n const { userClaimed } = this.airdropStore.airdropsInfo.P125_COMPENSATION1\n return web3Utils.isAddress(this.inputAddress) && !userClaimed\n }\n\n get approvalsAreSafe() {\n return (\n this.approvalsChecked &&\n !this.approvalsError &&\n this.approvals.length > 0 &&\n this.approvals.every((approval) => approval.amount.isZero())\n )\n }\n\n get inputAddressEqualConnected() {\n const { walletAddress } = this.rootStore.web3Connection\n return walletAddress.toLowerCase() === this.inputAddress.toLowerCase()\n }\n\n /** This is for the BZRX / GOV that was stolen */\n get canClaimBZRX() {\n const { chainId } = this.rootStore.web3Connection\n if (\n chainId !== 137 ||\n this.airdropStore.airdropPending ||\n !this.inputAddressEqualConnected ||\n !this.approvalsAreSafe\n ) {\n return false\n }\n const { BZRX_COMPENSATION1, BZRX_COMPENSATION2 } = this.airdropStore.airdropsInfo\n return [BZRX_COMPENSATION1, BZRX_COMPENSATION2].some((compensation) => {\n const { amount, userClaimed } = compensation\n return amount.gt(0) && !userClaimed\n })\n }\n\n get canClaimP125() {\n const { chainId } = this.rootStore.web3Connection\n const { amount, userClaimed } = this.airdropStore.airdropsInfo.P125_COMPENSATION1\n return (\n amount.gt(0) &&\n !userClaimed &&\n this.inputAddressEqualConnected &&\n !this.airdropStore.airdropPending &&\n chainId === 137\n )\n }\n\n /**\n * Show different data for hacker\n */\n get isBadBoy() {\n const { walletAddress } = this.rootStore.web3Connection\n return (\n hackerWalletsRug2.includes(walletAddress.toLowerCase()) ||\n hackerWalletsRug2.includes(this.inputAddress.toLowerCase())\n )\n }\n\n get canCheckApprovals() {\n return web3Utils.isAddress(this.inputAddress) && !this.approvalsChecked\n }\n\n addP125Token() {\n const { chainId } = this.rootStore.web3Connection\n if (chainId === 137) {\n providerUtils.addToken(chainId, Asset.P125)\n }\n }\n\n set(prop: keyof ICompensationVMProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n checkBscBalance() {\n const { userWallet } = this.rootStore\n this.assign({ bzrxSentToBscCompensationContract: false })\n userWallet.getBalances([Asset.BZRX])\n }\n\n changeTab(tab: CompensationTab) {\n const { web3Connection } = this.rootStore\n this.tab = tab\n this.reset()\n if (this.tab === 'bzrxOnBsc' && web3Connection.chainId === 56 && web3Connection.walletAddress) {\n this.checkBscBalance()\n }\n }\n\n changeBscTab(tab: BscCompensationTab) {\n this.bscTab = tab\n this.reset()\n }\n\n hasCompensations(compensations: IAirdropInfo[]) {\n return compensations.find((compensation) => compensation.amount.gt(0))\n }\n\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n reset(address = '') {\n this.approvals = []\n this.bzrxSentToBscCompensationContract = false\n this.approvalsError = null\n this.approvalsPending = false\n this.approvalsChecked = false\n this.airdropStore.clearData()\n this.inputAddress = address || this.rootStore.web3Connection.walletAddress\n }\n\n async checkAirdrop(event: FormEvent) {\n event.preventDefault()\n this.reset(this.inputAddress)\n switch (this.tab) {\n case 'bzrxOnBsc': {\n await this.airdropStore.checkBzrxLockedAirdrops(this.inputAddress)\n break\n }\n case 'bzrxOnPolygon': {\n await this.airdropStore.getUserAirdropInfo(Airdrop.BZRX_COMPENSATION1, this.inputAddress)\n this.airdropStore.getUserAirdropInfo(Airdrop.BZRX_COMPENSATION2, this.inputAddress)\n break\n }\n case 'p125': {\n this.airdropStore.getUserAirdropInfo(Airdrop.P125_COMPENSATION1, this.inputAddress)\n break\n }\n }\n }\n\n async checkDangerousApprovals() {\n this.assign({ approvalsPending: true, approvalsChecked: false })\n try {\n const BZRXAddress = assetUtils.getAddress(137, Asset.BZRX)\n const { compromisedContracts } = chainConfigs[137]\n const approvals = await approvalUtils.getSpendingApprovalMultipleSpenders(\n this.rootStore.fulcrumProvider,\n this.inputAddress,\n BZRXAddress,\n compromisedContracts\n )\n this.set('approvals', approvals)\n } catch (err) {\n this.assign({ approvalsError: err })\n console.error(err)\n } finally {\n this.assign({ approvalsPending: false, approvalsChecked: true })\n }\n }\n\n async sendBZRXtoBscCompensationContract() {\n const { userWallet } = this.rootStore\n const balance = userWallet.findTokenBalance(Asset.BZRX)\n if (balance.gt(0)) {\n const tx = await userWallet.sendToken(Asset.BZRX, bscCompensationContract, balance)\n if (tx && tx.success) {\n this.assign({ bzrxSentToBscCompensationContract: true })\n }\n }\n }\n\n init() {\n const { web3Connection } = this.rootStore\n this.inputAddress = web3Connection.walletAddress\n this.stopSyncBalance = mobx.autorun(() => {\n this.reset(web3Connection.walletAddress)\n if (web3Connection.walletAddress && web3Connection.chainId === 56) {\n this.checkBscBalance()\n }\n })\n }\n\n destroyVM() {\n this.stopSyncBalance && this.stopSyncBalance()\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n this.airdropStore = rootStore.airdropStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n this.init()\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport Compensation from './Compensation'\nimport CompensationVM from './CompensationVM'\nexport default withVM(Compensation, CompensationVM)\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLend(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_8\",\n \"data-name\": \"Layer 8\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 36 36\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Lend\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.78,21.7A7.18,7.18,0,1,0,4.6,14.52,7.18,7.18,0,0,0,11.78,21.7Z\",\n fill: \"#ffd561\",\n stroke: \"#2c2c5a\",\n strokeMiterlimit: 10,\n strokeWidth: 1.02\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M35.5,27.18c0,2-1.57,3.15-3.32,3.72L20,34.38H3.83A3.59,3.59,0,0,1,.51,30.65V18.24a3.58,3.58,0,0,1,3.32-3.72H20l12.14-3.47a3.57,3.57,0,0,1,3.32,3.72Z\",\n fill: \"#5ab680\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.11,34.88H3.83A4.1,4.1,0,0,1,0,30.65V18.24A4.1,4.1,0,0,1,3.83,14H20l12.21-3.47A4.1,4.1,0,0,1,36,14.77V27.18c0,1.93-1.3,3.42-3.66,4.2ZM3.83,15A3.08,3.08,0,0,0,1,18.24V30.65a3.07,3.07,0,0,0,2.81,3.22H20L32,30.42c2-.65,3-1.74,3-3.24V14.77a3.09,3.09,0,0,0-2.74-3.22L20,15Z\",\n fill: \"#2c2c5a\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.21,9.26A4.27,4.27,0,1,0,19,5,4.26,4.26,0,0,0,23.21,9.26Z\",\n fill: \"#ffd561\",\n stroke: \"#2c2c5a\",\n strokeMiterlimit: 10,\n strokeWidth: 1.02\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22,17.15V30.64a.62.62,0,0,0,1.24,0V17.15a.62.62,0,0,0-1.24,0Z\",\n fill: \"#2c2c5a\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.23,24.11a.77.77,0,0,1-1.53-.06.77.77,0,0,1,1.53,0Z\",\n fill: \"#29265b\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.75,24.11a.77.77,0,1,1-.76-.8.78.78,0,0,1,.76.78Z\",\n fill: \"#29265b\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.36,25.87a1.17,1.17,0,0,0,.49.25,1.16,1.16,0,0,0,.4.06,1.26,1.26,0,0,0,.47-.08,1,1,0,0,0,.38-.22.92.92,0,0,0,.29-.44l.06-.15a.81.81,0,0,0,0-.38l-.06-.13a.43.43,0,0,0-.15-.15.51.51,0,0,0-.33-.13H10.54a.55.55,0,0,0-.39.16.56.56,0,0,0-.17.4,1.07,1.07,0,0,0,.08.41A1,1,0,0,0,10.36,25.87Z\",\n fill: \"#29265b\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLend);\nexport default __webpack_public_path__ + \"static/media/lend.53921089.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _rect, _path2, _path3, _rect2, _path4, _rect3, _path5, _path6, _rect4, _rect5, _path7, _rect6, _path8, _path9, _rect7, _rect8, _path10, _path11, _path12, _rect9, _rect10, _rect11, _rect12, _rect13, _rect14, _path13, _path14, _path15, _path16, _path17, _path18;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgTrade(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_10\",\n \"data-name\": \"Layer 10\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 36 36\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Trade\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.7,32a.75.75,0,0,1-.58.93,1.24,1.24,0,0,1-.27,0H15.4a.82.82,0,0,1-.89-.74.55.55,0,0,1,0-.22L17,20.16a1.3,1.3,0,0,1,1.26-1h.43a1.33,1.33,0,0,1,1.28,1Z\",\n fill: \"#877cb8\",\n stroke: \"#29265b\",\n strokeWidth: 1.03\n })), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 10.45,\n y: 29.81,\n width: 16.13,\n height: 5.86,\n rx: 2.93,\n fill: \"#877cb8\",\n stroke: \"#29265b\",\n strokeWidth: 1.03\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.75,1.71h24.1c1.63,0,2.95,1.75,2.95,3.92V21.25c0,2.17-1.32,3.93-2.95,3.93H6.75c-1.63,0-2.95-1.76-2.95-3.93V5.63C3.8,3.46,5.12,1.71,6.75,1.71Z\",\n fill: \"#fff\",\n stroke: \"#66f\",\n strokeWidth: 2.19\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.88.6H31.36c1.72,0,3.11,1.93,3.11,4.3V22c0,2.38-1.39,4.31-3.11,4.31H5.88c-1.72,0-3.12-1.93-3.12-4.31V4.9C2.76,2.53,4.16.6,5.88.6Z\",\n fill: \"#fff\",\n stroke: \"#29265b\",\n strokeWidth: 1.03\n })), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 4.75,\n y: 15.13,\n width: 2.27,\n height: 5.51,\n rx: 0.69,\n fill: \"#94d0cf\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.72,12.88V22a.24.24,0,0,0,.47,0V12.88a.24.24,0,0,0-.47,0Z\",\n fill: \"#94d0cf\"\n })), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 7.88,\n y: 15.23,\n width: 2.27,\n height: 4.08,\n rx: 0.59,\n fill: \"#e95451\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.88,13.94v6.8a.21.21,0,0,0,.41,0v-6.8a.21.21,0,0,0-.41,0Z\",\n fill: \"#e95451\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12,17.39v6.28a.2.2,0,0,0,.4,0V17.39a.2.2,0,0,0-.4,0Z\",\n fill: \"#e95451\"\n })), _rect4 || (_rect4 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 10.95,\n y: 19.01,\n width: 2.27,\n height: 3.37,\n rx: 0.54,\n fill: \"#e95451\"\n })), _rect5 || (_rect5 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 10.95,\n y: 19.01,\n width: 2.27,\n height: 3.37,\n rx: 0.54,\n fill: \"none\",\n stroke: \"#e95451\",\n strokeMiterlimit: 10,\n strokeWidth: 0.13\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.81,14.49v9.09a.24.24,0,0,0,.47,0V14.49a.24.24,0,0,0-.47,0Z\",\n fill: \"#94d0cf\"\n })), _rect6 || (_rect6 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 17.16,\n y: 16.96,\n width: 2.27,\n height: 5.29,\n rx: 0.67,\n fill: \"#94d0cf\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.14,14.49v9.09a.23.23,0,0,0,.46,0V14.49a.23.23,0,0,0-.46,0Z\",\n fill: \"#94d0cf\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.84,15.61v6.84a.17.17,0,0,0,.34,0V15.61a.17.17,0,0,0-.34,0Z\",\n fill: \"#ef5350\"\n })), _rect7 || (_rect7 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 20.79,\n y: 17.14,\n width: 2.27,\n height: 3.37,\n rx: 0.54,\n fill: \"#ef5350\"\n })), _rect8 || (_rect8 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 24.12,\n y: 10.23,\n width: 2.27,\n height: 10.19,\n rx: 0.6,\n fill: \"#94d0cf\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.94,8.8V21.74a.24.24,0,0,0,.47,0V8.8a.24.24,0,0,0-.47,0Z\",\n fill: \"#94d0cf\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.63,8.75v6.84a.2.2,0,0,0,.4,0V8.75a.2.2,0,0,0-.4,0Z\",\n fill: \"#e95451\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.81,15.61v6.84a.2.2,0,0,0,.4,0V15.61a.2.2,0,0,0-.4,0Z\",\n fill: \"#e95451\"\n })), _rect9 || (_rect9 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 20.79,\n y: 17.14,\n width: 2.27,\n height: 3.37,\n rx: 0.54,\n fill: \"#e95451\"\n })), _rect10 || (_rect10 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 20.79,\n y: 17.14,\n width: 2.27,\n height: 3.37,\n rx: 0.54,\n fill: \"none\",\n stroke: \"#e95451\",\n strokeMiterlimit: 10,\n strokeWidth: 0.13\n })), _rect11 || (_rect11 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 27.61,\n y: 10.28,\n width: 2.27,\n height: 3.37,\n rx: 0.54,\n fill: \"#e95451\"\n })), _rect12 || (_rect12 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 27.61,\n y: 10.28,\n width: 2.27,\n height: 3.37,\n rx: 0.54,\n fill: \"none\",\n stroke: \"#e95451\",\n strokeMiterlimit: 10,\n strokeWidth: 0.13\n })), _rect13 || (_rect13 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 13.95,\n y: 19.45,\n width: 2.27,\n height: 2.86,\n rx: 0.5,\n fill: \"#94d0cf\"\n })), _rect14 || (_rect14 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 31.21,\n y: 8.08,\n width: 2.27,\n height: 5.51,\n rx: 0.69,\n fill: \"#94d0cf\"\n })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.19,5.84v9.08a.24.24,0,0,0,.47,0V5.84a.24.24,0,0,0-.47,0Z\",\n fill: \"#94d0cf\"\n })), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.75,1.71h24.1c1.63,0,2.95,1.75,2.95,3.92V21.25c0,2.17-1.32,3.93-2.95,3.93H6.75c-1.63,0-2.95-1.76-2.95-3.93V5.63C3.8,3.46,5.12,1.71,6.75,1.71Z\",\n fill: \"none\",\n stroke: \"#877cb8\",\n strokeMiterlimit: 10,\n strokeWidth: 2.31\n })), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.88.6H31.36c1.72,0,3.11,1.93,3.11,4.3V22c0,2.38-1.39,4.31-3.11,4.31H5.88c-1.72,0-3.12-1.93-3.12-4.31V4.9C2.76,2.53,4.16.6,5.88.6Z\",\n fill: \"none\",\n stroke: \"#29265b\",\n strokeWidth: 1.03\n })), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.54,13.51a1,1,0,1,1-1-1,1,1,0,0,1,1,1Z\",\n fill: \"#29265b\"\n })), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.64,13.33a1,1,0,0,1-1,.95,1,1,0,0,1,0-1.95,1,1,0,0,1,1,1Z\",\n fill: \"#29265b\"\n })), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.55,15.7a1.83,1.83,0,0,0,.63.31,1.87,1.87,0,0,0,.51.06,1.71,1.71,0,0,0,.59-.11,1.49,1.49,0,0,0,.49-.28,1.38,1.38,0,0,0,.36-.57c0-.07.05-.13.07-.19a1.11,1.11,0,0,0,0-.48l-.08-.18a.47.47,0,0,0-.19-.18.67.67,0,0,0-.42-.16l-1.75,0a.71.71,0,0,0-.49.21.8.8,0,0,0-.21.51,1.33,1.33,0,0,0,.5,1Z\",\n fill: \"#29265b\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgTrade);\nexport default __webpack_public_path__ + \"static/media/trade.9c24261c.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react'\nimport { NavLink } from 'react-router-dom'\nimport { ReactComponent as BorrowIcon } from './icons/borrow.svg'\nimport { ReactComponent as LendIcon } from './icons/lend.svg'\nimport { ReactComponent as TradeIcon } from './icons/trade.svg'\nimport { routes } from 'bzx-common/src/config/appConfig'\n\nexport function DashboardFooter() {\n return (\n \n )\n}\n\nexport default React.memo(DashboardFooter)\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLearn(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 81,\n height: 58,\n viewBox: \"0 0 81 58\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M60.031 18.6782C60.849 18.6782 61.667 19.3326 61.667 20.3143L61.8306 49.4358C61.8306 50.2538 61.1762 51.2355 60.1946 51.5627L41.8709 56.798C41.0529 57.1252 39.5804 57.1252 38.7624 56.798L22.0748 52.3807C21.2568 52.2171 20.4387 51.2355 20.4387 50.2538L20.2751 20.6415C20.2751 19.8235 20.9296 19.0054 21.9112 19.0054L60.031 18.6782Z\",\n fill: \"#32ADF9\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M59.8674 19.4963C61.667 19.8235 61.0126 23.2592 61.0126 24.4044C61.0126 27.3493 61.0126 30.1305 61.0126 33.0754C61.0126 38.3107 61.3398 43.5461 61.0126 48.7814C61.0126 50.7447 59.7038 50.9083 58.0677 51.3991C55.2865 52.2171 52.5052 53.0351 49.7239 53.8531C47.2698 54.5076 44.8158 55.3256 42.3617 55.98C40.5621 56.4708 39.0896 56.3072 37.4536 55.8164C34.6723 54.9984 31.891 54.344 29.1098 53.5259C26.9829 53.0351 24.5289 52.5443 22.5656 51.7263C20.9296 51.0719 21.2568 49.1086 21.2568 47.7998C21.2568 45.1821 21.2568 42.5644 21.2568 39.9468C21.2568 34.2206 21.2568 28.4945 21.0932 22.7683C21.0932 21.4595 20.766 20.1507 22.402 19.8235C23.8744 19.4963 25.6741 19.8235 27.1465 19.8235C38.108 19.8235 49.2331 19.6599 60.1946 19.6599C61.1762 19.6599 61.1762 18.1874 60.1946 18.1874C49.3967 18.1874 38.5988 18.351 27.9645 18.351C25.3469 18.351 19.9479 17.2058 19.7843 21.1323C19.6207 26.6948 19.7843 32.2574 19.7843 37.6563C19.7843 40.7648 19.7843 43.8733 19.7843 46.8182C19.7843 48.127 19.4571 49.9266 19.9479 51.2355C20.6024 53.3623 23.5472 53.6895 25.5105 54.1804C28.7826 54.9984 31.891 55.8164 35.1631 56.798C37.4536 57.4524 39.7441 58.2705 42.0345 57.7796C43.9978 57.2888 45.961 56.6344 47.9243 56.1436C51.1963 55.162 54.3048 54.344 57.5769 53.3623C59.5402 52.8715 62.1578 52.5443 62.6486 50.0902C62.9759 48.6178 62.6486 46.9818 62.6486 45.6729C62.6486 42.5644 62.6486 39.2924 62.6486 36.1839C62.6486 31.1122 62.9759 25.7132 62.6486 20.6415C62.485 19.3326 61.8306 18.5146 60.5218 18.1874C59.213 17.8602 58.8857 19.3326 59.8674 19.4963Z\",\n fill: \"#2D285A\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1.78759 17.3693C0.969567 17.6965 0.969567 18.1873 1.78759 18.5146L38.4349 29.6396C39.253 29.9668 40.7254 29.9668 41.5434 29.6396L78.6816 17.5329C79.4996 17.2057 79.4996 16.7149 78.6816 16.3877L41.3798 1.99052C40.5618 1.66332 39.253 1.66332 38.2713 1.99052L1.78759 17.3693Z\",\n fill: \"#76D8FF\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1.29699 16.715C-1.15707 18.1874 1.6242 19.169 3.09664 19.6599C5.87791 20.4779 8.65918 21.2959 11.4405 22.1139C18.8026 24.4044 26.0012 26.5312 33.3634 28.8217C34.9995 29.3125 36.6355 29.9669 38.2715 30.2941C40.2348 30.7849 41.8708 30.2941 43.8341 29.6397C50.5419 27.5129 57.2496 25.2224 63.9574 23.0955C68.8655 21.4595 74.2645 20.1507 79.009 18.1874C80.1542 17.6966 80.645 16.715 79.4998 15.897C79.1726 15.5698 78.5182 15.5698 78.191 15.2425C75.9005 14.2609 73.4465 13.4429 71.156 12.4613C63.7938 9.84361 56.4316 7.06233 49.233 4.11746C46.9426 3.29944 44.6521 2.31781 42.3617 1.49979C40.7256 0.845373 39.2532 0.845373 37.6171 1.33619C25.8376 6.08071 14.2217 11.1524 2.60583 16.0606C2.27862 16.3878 1.95141 16.5514 1.4606 16.715C0.642577 17.0422 0.969786 18.5146 1.78781 18.1874C12.5857 13.6065 23.22 9.18919 34.0178 4.60827C35.4903 3.95385 36.7991 3.29944 38.2715 2.80862C40.0712 2.15421 41.5436 2.97223 43.1797 3.62664C49.3966 6.08071 55.45 8.37117 61.667 10.8252C64.939 12.1341 68.3747 13.4429 71.6468 14.7517C73.6101 15.5698 75.7369 16.5514 77.8638 17.2058C78.0274 17.2058 78.191 17.3694 78.5182 17.3694C78.8454 17.3694 78.5182 17.0422 78.5182 17.0422C78.0274 17.0422 77.5366 17.2058 77.0457 17.3694C74.5917 18.1874 72.1376 19.0054 69.6836 19.8235C62.6486 22.1139 55.7772 24.4044 48.7422 26.5312C45.4701 27.6765 41.38 29.8033 37.9443 28.6581C26.3284 25.0588 14.7125 21.6231 3.09664 18.0238C2.93304 18.0238 2.60583 17.8602 2.44222 17.8602C1.95141 17.6966 2.44222 17.8602 2.27862 18.0238C2.93304 17.533 2.11502 16.2242 1.29699 16.715Z\",\n fill: \"#2D285A\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.4552 16.3882C22.4018 18.6786 16.3485 20.9691 10.2951 23.2596C10.2951 23.914 10.2951 24.8956 10.2951 26.0408C10.4587 29.9673 10.9495 31.1126 10.7859 33.2394C10.6223 34.3847 10.2951 35.8571 9.1499 37.8203\",\n stroke: \"#FFBA55\",\n strokeWidth: 1.99721,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.1955 40.0098C10.4978 38.7815 9.88944 37.5757 8.83661 37.3166C7.78378 37.0574 6.6852 37.8431 6.38287 39.0714C6.08054 40.2997 6.68894 41.5055 7.74177 41.7646C8.7946 42.0238 9.89317 41.2381 10.1955 40.0098Z\",\n fill: \"#FFBA55\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.16822 37.6567C8.16822 39.1292 7.84101 41.256 7.02299 43.5465C5.55055 47.6366 3.09649 50.0907 1.78765 51.2359C1.29684 50.4179 0.642424 49.7635 0.151611 48.9454C1.46045 47.8002 2.76928 46.3278 4.24172 44.3645C6.04136 41.9104 7.18659 39.62 8.16822 37.6567Z\",\n fill: \"#FFBA55\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.0547 40.9283C32.8727 40.9283 33.5272 40.2739 33.5272 39.4558C33.5272 38.6378 32.8727 37.9834 32.0547 37.9834C31.2367 37.9834 30.5823 38.6378 30.5823 39.4558C30.5823 40.2739 31.2367 40.9283 32.0547 40.9283Z\",\n fill: \"#29235C\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50.2144 40.9283C51.0324 40.9283 51.6868 40.2739 51.6868 39.4558C51.6868 38.6378 51.0324 37.9834 50.2144 37.9834C49.3964 37.9834 48.7419 38.6378 48.7419 39.4558C48.7419 40.2739 49.3964 40.9283 50.2144 40.9283Z\",\n fill: \"#29235C\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.401 41.5039C40.3335 41.5039 41.4356 41.5896 42.4529 41.5039C42.4529 41.5896 42.4529 41.7609 42.3681 41.9322C42.1986 42.3605 41.7747 42.5318 41.6899 42.6174C41.266 42.7887 40.7574 42.7031 40.5878 42.7031C40.3335 42.6174 39.9944 42.6174 39.7401 42.2748C39.3162 41.9322 39.3162 41.5896 39.401 41.5039Z\",\n fill: \"#29235C\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.4011 42.2746C40.4184 42.2746 41.4357 42.3603 42.453 42.2746C42.1987 42.1033 41.9443 41.932 41.69 41.675C41.69 41.5894 41.69 41.5037 41.69 41.3324C41.69 41.3324 41.69 41.3324 41.69 41.4181V41.5037C41.69 41.5894 41.69 41.5894 41.6053 41.675C41.6053 41.675 41.6053 41.675 41.6053 41.7607C41.6053 41.8463 41.6053 41.8463 41.6053 41.675L41.5205 41.7607C41.4357 41.8463 41.6053 41.675 41.5205 41.7607L41.4357 41.8463C41.3509 41.932 41.4357 41.7607 41.5205 41.8463L41.3509 41.932C41.1814 42.0176 41.6053 41.8463 41.3509 41.932C41.2662 41.932 41.2662 41.932 41.1814 42.0176H41.0966C41.0118 42.0176 41.0966 42.0176 41.1814 42.0176H40.8423C40.7575 42.0176 40.7575 42.0176 40.6727 42.0176C40.5032 42.0176 40.8423 42.0176 40.6727 42.0176C40.588 42.0176 40.5032 42.0176 40.5032 41.932C40.4184 41.932 40.3336 41.8463 40.2489 41.8463C40.0793 41.7607 40.4184 41.932 40.2489 41.8463C40.2489 41.8463 40.1641 41.8463 40.1641 41.7607C40.0793 41.7607 40.0793 41.7607 40.1641 41.7607C40.2488 41.8463 40.2488 41.8463 40.1641 41.7607C40.1641 41.7607 40.1641 41.7607 40.0793 41.675C40.0793 41.675 40.0793 41.675 39.9945 41.5894C40.0793 41.675 40.0793 41.675 39.9945 41.5894C39.9945 41.5037 39.9097 41.4181 39.9945 41.5894V41.5037V41.4181C40.0793 41.5894 39.9945 41.5894 39.9945 41.5037C39.9945 41.4181 39.9945 41.4181 39.9945 41.3324C39.9945 40.9041 39.6554 40.5615 39.2315 40.5615C38.8077 40.5615 38.4685 40.9041 38.4685 41.3324C38.4685 41.932 38.7229 42.5316 39.1467 42.8742C39.5706 43.2168 40.2488 43.3881 40.7575 43.3881C41.3509 43.3881 41.8596 43.2168 42.2835 42.8742C42.5378 42.7029 42.7074 42.3603 42.7921 42.1033C42.8769 41.7607 42.9617 41.5037 42.9617 41.1611C42.8769 40.8185 42.5378 40.5615 42.1987 40.5615C41.1814 40.5615 40.164 40.4759 39.1467 40.5615C38.7229 40.5615 38.3838 40.9041 38.3838 41.3324C38.6381 41.8463 38.8925 42.2746 39.4011 42.2746Z\",\n fill: \"#29235C\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLearn);\nexport default __webpack_public_path__ + \"static/media/learn.0c2c891a.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLobby(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 57,\n height: 52,\n viewBox: \"0 0 57 52\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38.3545 29.2757C46.1564 29.2757 52.481 22.8854 52.481 15.0026C52.481 7.11978 46.1564 0.729492 38.3545 0.729492C30.5527 0.729492 24.228 7.11978 24.228 15.0026C24.228 22.8854 30.5527 29.2757 38.3545 29.2757Z\",\n fill: \"#FFCD5F\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M38.3548 1.45882C30.9516 1.45882 24.9502 7.52255 24.9502 15.0025C24.9502 22.4825 30.9516 28.5462 38.3548 28.5462C45.7579 28.5462 51.7594 22.4825 51.7594 15.0025C51.7594 7.52255 45.7579 1.45882 38.3548 1.45882ZM23.5063 15.0025C23.5063 6.71686 30.1542 0 38.3548 0C46.5553 0 53.2032 6.71686 53.2032 15.0025C53.2032 23.2882 46.5553 30.005 38.3548 30.005C30.1542 30.005 23.5063 23.2882 23.5063 15.0025Z\",\n fill: \"#29235C\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.3472 14.1818C32.8404 14.1818 33.2402 13.7779 33.2402 13.2795C33.2402 12.7812 32.8404 12.3772 32.3472 12.3772C31.8539 12.3772 31.4541 12.7812 31.4541 13.2795C31.4541 13.7779 31.8539 14.1818 32.3472 14.1818Z\",\n fill: \"#29235C\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M32.3471 12.5206C31.9323 12.5206 31.596 12.8603 31.596 13.2794C31.596 13.6985 31.9323 14.0383 32.3471 14.0383C32.7619 14.0383 33.0981 13.6985 33.0981 13.2794C33.0981 12.8603 32.7619 12.5206 32.3471 12.5206ZM31.312 13.2794C31.312 12.7019 31.7754 12.2336 32.3471 12.2336C32.9187 12.2336 33.3821 12.7019 33.3821 13.2794C33.3821 13.857 32.9187 14.3252 32.3471 14.3252C31.7754 14.3252 31.312 13.857 31.312 13.2794Z\",\n fill: \"#29235C\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.3807 14.3459C37.949 14.3459 38.5985 14.3459 39.1668 14.3459C39.1668 14.428 39.1668 14.51 39.0856 14.592C39.0044 14.8381 38.7608 15.0022 38.6797 15.0022C38.4361 15.0842 38.1925 15.0842 38.0302 15.0022C37.8678 15.0022 37.7054 14.9202 37.543 14.7561C37.2995 14.6741 37.3807 14.428 37.3807 14.3459Z\",\n fill: \"#29235C\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.3805 15.0841C37.9488 15.0841 38.5171 15.0841 39.1666 15.0841C38.923 14.92 38.6795 14.756 38.4359 14.5099C38.4359 14.4278 38.4359 14.3458 38.4359 14.3458C38.4359 14.2638 38.4359 14.1817 38.4359 14.1817C38.4359 14.2638 38.3547 14.3458 38.3547 14.4278C38.3547 14.3458 38.4359 14.3458 38.4359 14.2638C38.4359 14.3458 38.3547 14.3458 38.3547 14.4278C38.3547 14.3458 38.4359 14.3458 38.4359 14.2638C38.4359 14.3458 38.3547 14.3458 38.2735 14.3458C38.3547 14.3458 38.3547 14.2638 38.4359 14.2638C38.3547 14.2638 38.3547 14.3458 38.2735 14.3458C38.3547 14.3458 38.3547 14.2638 38.4359 14.2638C38.3547 14.2638 38.2736 14.3458 38.1924 14.3458C38.2736 14.3458 38.3547 14.3458 38.3547 14.3458C38.2735 14.3458 38.1112 14.3458 38.03 14.3458C38.1112 14.3458 38.1924 14.3458 38.1924 14.3458C38.1112 14.3458 37.9488 14.2638 37.8676 14.2638C37.9488 14.2638 37.9488 14.3458 38.03 14.3458C37.9488 14.3458 37.9488 14.2638 37.8676 14.2638C37.9488 14.2638 37.9488 14.3458 38.03 14.3458C37.9488 14.3458 37.9488 14.2638 37.8676 14.1817C37.8676 14.2638 37.9488 14.2638 37.9488 14.3458L37.8676 14.2638C37.8676 14.3458 37.9488 14.3458 37.9488 14.4278C37.9488 14.3458 37.9488 14.3458 37.8676 14.2638C37.8676 14.3458 37.8676 14.4278 37.8676 14.4278C37.8676 14.3458 37.8676 14.3458 37.8676 14.2638C37.8676 14.0997 37.7864 13.8536 37.6241 13.7716C37.4617 13.6075 37.2993 13.5255 37.1369 13.5255C36.9746 13.5255 36.731 13.6075 36.6498 13.7716C36.4874 13.9357 36.4874 14.0997 36.4062 14.2638C36.4062 14.6739 36.5686 15.0841 36.8934 15.3302C37.0557 15.4942 37.2993 15.5762 37.5429 15.6583C37.7052 15.6583 37.8676 15.7403 38.03 15.7403C38.1924 15.7403 38.4359 15.7403 38.5983 15.6583C38.7607 15.5762 38.923 15.4942 39.0854 15.3302C39.2478 15.1661 39.4102 15.002 39.4914 14.756C39.4914 14.6739 39.5725 14.5919 39.5725 14.5919C39.6537 14.4278 39.5725 14.2638 39.5725 14.0997C39.5725 14.0177 39.4914 14.0177 39.4914 13.9357C39.4102 13.8536 39.4102 13.7716 39.329 13.7716C39.1666 13.6896 39.0854 13.6075 38.923 13.6075C38.3547 13.6075 37.7864 13.6075 37.1369 13.6075C36.9746 13.6075 36.731 13.6896 36.6498 13.8536C36.4874 14.0177 36.4062 14.1817 36.4062 14.3458C36.6498 14.756 36.9746 15.0841 37.3805 15.0841Z\",\n fill: \"#29235C\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.1191 14.2644C44.6124 14.2644 45.0122 13.8604 45.0122 13.362C45.0122 12.8637 44.6124 12.4597 44.1191 12.4597C43.6259 12.4597 43.2261 12.8637 43.2261 13.362C43.2261 13.8604 43.6259 14.2644 44.1191 14.2644Z\",\n fill: \"#29235C\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M44.119 12.603C43.7042 12.603 43.368 12.9427 43.368 13.3618C43.368 13.7809 43.7042 14.1207 44.119 14.1207C44.5338 14.1207 44.8701 13.7809 44.8701 13.3618C44.8701 12.9427 44.5338 12.603 44.119 12.603ZM43.084 13.3618C43.084 12.7843 43.5474 12.316 44.119 12.316C44.6907 12.316 45.1541 12.7843 45.1541 13.3618C45.1541 13.9394 44.6907 14.4076 44.119 14.4076C43.5474 14.4076 43.084 13.9394 43.084 13.3618Z\",\n fill: \"#29235C\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.4049 24.3538C14.4861 24.7639 14.2425 25.1741 13.7554 25.1741H8.88419C8.47825 25.1741 8.15351 24.8459 8.23469 24.3538L10.102 14.5923C10.1832 14.1821 10.5891 13.772 11.0762 13.772H11.401C11.8069 13.772 12.294 14.1001 12.3752 14.5923L14.4049 24.3538Z\",\n fill: \"white\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M10.7229 14.7164C10.7228 14.7168 10.7227 14.7173 10.7226 14.7177L8.85804 24.4649C8.85234 24.5038 8.85633 24.5244 8.85791 24.5306C8.85792 24.5307 8.8579 24.5306 8.85791 24.5306C8.86219 24.5321 8.87064 24.5343 8.88394 24.5343H13.7552C13.7686 24.5343 13.7782 24.5332 13.7845 24.532C13.7867 24.5229 13.7889 24.5062 13.7842 24.4811L11.7526 14.7106L11.7504 14.6974C11.7406 14.638 11.7024 14.5665 11.6209 14.5025C11.5347 14.4348 11.4454 14.4117 11.4007 14.4117H11.076C11.012 14.4117 10.9329 14.439 10.8555 14.508C10.7753 14.5795 10.7337 14.6637 10.7229 14.7164ZM9.48088 14.4668C9.61332 13.7977 10.2483 13.1322 11.076 13.1322H11.4007C11.762 13.1322 12.1192 13.2732 12.3984 13.4925C12.679 13.713 12.9224 14.0465 12.997 14.472L15.0249 24.2252L15.0255 24.2283C15.0972 24.5905 15.0312 24.9824 14.8036 25.296C14.5666 25.6225 14.1899 25.8137 13.7552 25.8137H8.88394C8.51087 25.8137 8.14713 25.661 7.89579 25.3648C7.63976 25.063 7.54175 24.6617 7.6099 24.2485L7.61125 24.2404L9.48088 14.4668Z\",\n fill: \"#29235C\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.0614 16.8068C21.0614 17.8732 20.1684 18.7755 19.1129 18.7755H3.28149C2.22606 18.7755 1.33301 17.8732 1.33301 16.8068V9.01399C1.33301 7.94761 2.22606 7.04529 3.28149 7.04529H19.1129C20.1684 7.04529 21.0614 7.94761 21.0614 9.01399V16.8068Z\",\n fill: \"white\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M3.28173 7.77462C2.62501 7.77462 2.05517 8.35038 2.05517 9.01391V16.8067C2.05517 17.4702 2.62501 18.046 3.28173 18.046H19.1132C19.7699 18.046 20.3397 17.4702 20.3397 16.8067V9.01391C20.3397 8.35038 19.7699 7.77462 19.1132 7.77462H3.28173ZM0.611328 9.01391C0.611328 7.54469 1.8276 6.3158 3.28173 6.3158H19.1132C20.5673 6.3158 21.7836 7.54469 21.7836 9.01391V16.8067C21.7836 18.2759 20.5673 19.5048 19.1132 19.5048H3.28173C1.8276 19.5048 0.611328 18.2759 0.611328 16.8067V9.01391Z\",\n fill: \"#29235C\"\n })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.1048 46.5837C54.1048 49.1266 52.0751 51.1773 49.5583 51.1773H7.17879C4.662 51.1773 2.63232 49.1266 2.63232 46.5837V27.2247C2.63232 24.6818 4.662 22.6311 7.17879 22.6311H49.4771C51.9939 22.6311 54.0236 24.6818 54.0236 27.2247V46.5837H54.1048Z\",\n fill: \"#66D4FF\"\n })), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M7.1787 23.4537C5.11167 23.4537 3.44661 25.1361 3.44661 27.2246V46.5835C3.44661 48.672 5.11167 50.3543 7.1787 50.3543H49.5582C51.3573 50.3543 52.8519 49.0799 53.2091 47.3724V27.2246C53.2091 25.1361 51.5441 23.4537 49.477 23.4537H7.1787ZM54.8379 45.7607V27.2246C54.8379 24.2272 52.4436 21.8081 49.477 21.8081H7.1787C4.21215 21.8081 1.81787 24.2272 1.81787 27.2246V46.5835C1.81787 49.5809 4.21215 52 7.1787 52H49.5582C52.5248 52 54.9191 49.5809 54.9191 46.5835V45.7607H54.8379Z\",\n fill: \"#29235C\"\n })), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M55.8096 29.4393C55.8096 31.2439 54.3482 32.7205 52.5621 32.7205H4.17472C2.38861 32.7205 0.927246 31.2439 0.927246 29.4393V25.83C0.927246 24.0254 2.38861 22.5488 4.17472 22.5488H52.6433C54.4294 22.5488 55.8907 24.0254 55.8907 25.83V29.4393H55.8096Z\",\n fill: \"#E6F9FF\"\n })), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.17496 23.2782C2.78756 23.2782 1.64941 24.4281 1.64941 25.8299V29.4392C1.64941 30.841 2.78756 31.991 4.17496 31.991H52.5623C53.9497 31.991 55.0879 30.841 55.0879 29.4392V28.7098H55.1691V25.8299C55.1691 24.4281 54.0309 23.2782 52.6435 23.2782H4.17496ZM56.4656 30.1686H56.6129V25.8299C56.6129 23.6224 54.8283 21.8193 52.6435 21.8193H4.17496C1.99014 21.8193 0.205566 23.6224 0.205566 25.8299V29.4392C0.205566 31.6467 1.99014 33.4498 4.17496 33.4498H52.5623C54.5007 33.4498 56.1241 32.0305 56.4656 30.1686Z\",\n fill: \"#29235C\"\n })), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.71353 17.7095C3.68777 16.7252 4.58082 15.8229 5.55506 14.8385C5.3115 14.8385 5.06794 14.8385 4.82438 14.8385C5.3115 15.3307 5.79862 15.8229 6.28574 16.315C6.5293 16.5611 6.85405 16.5611 7.01643 16.315C8.47779 14.8385 9.85797 13.444 11.3193 11.9675C11.0758 11.9675 10.8322 11.9675 10.5886 11.9675C11.0758 12.4597 11.5629 12.9518 12.05 13.444C12.2936 13.6901 12.6183 13.6901 12.7807 13.444C13.7549 12.4596 14.648 11.5573 15.6222 10.573C15.3787 10.573 15.1351 10.573 14.8915 10.573C15.8658 11.5573 16.7588 12.4596 17.7331 13.444C17.9766 13.6901 18.3014 13.6901 18.4638 13.444C19.438 12.4596 20.3311 11.5573 21.3053 10.573C21.7924 10.0808 21.0617 9.34254 20.5746 9.83471C19.6004 10.8191 18.7073 11.7214 17.7331 12.7057C17.9766 12.7057 18.2202 12.7057 18.4638 12.7057C17.4895 11.7214 16.5965 10.8191 15.6222 9.83471C15.3787 9.58862 15.0539 9.58862 14.8915 9.83471C13.9173 10.8191 13.0243 11.7214 12.05 12.7057C12.2936 12.7057 12.5371 12.7057 12.7807 12.7057C12.2936 12.2136 11.8064 11.7214 11.3193 11.2292C11.0758 10.9831 10.751 10.9831 10.5886 11.2292C9.12729 12.7057 7.74711 14.1002 6.28574 15.5768C6.5293 15.5768 6.77287 15.5768 7.01643 15.5768C6.52931 15.0846 6.04219 14.5924 5.55506 14.1002C5.3115 13.8541 4.98676 13.8541 4.82438 14.1002C3.85014 15.0846 2.95708 15.9869 1.98284 16.9713C1.41453 17.4634 2.2264 18.2017 2.71353 17.7095Z\",\n fill: \"#0ca687\"\n })), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M3.28173 7.77462C2.62501 7.77462 2.05517 8.35038 2.05517 9.01391V16.8067C2.05517 17.4702 2.62501 18.046 3.28173 18.046H19.1132C19.7699 18.046 20.3397 17.4702 20.3397 16.8067V9.01391C20.3397 8.35038 19.7699 7.77462 19.1132 7.77462H3.28173ZM0.611328 9.01391C0.611328 7.54469 1.8276 6.3158 3.28173 6.3158H19.1132C20.5673 6.3158 21.7836 7.54469 21.7836 9.01391V16.8067C21.7836 18.2759 20.5673 19.5048 19.1132 19.5048H3.28173C1.8276 19.5048 0.611328 18.2759 0.611328 16.8067V9.01391Z\",\n fill: \"#29235C\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLobby);\nexport default __webpack_public_path__ + \"static/media/lobby.d88917ed.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _g, _g2, _g3, _g4, _g5;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgNfts(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 29 32\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F1822F\",\n d: \"M8.62 24.28h11.1v1.82H8.62z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29255C\",\n d: \"M20.18 26.55H8.16v-2.72h12.02v2.72zm-11.1-.9h10.19v-.92H9.08v.92z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F1822F\",\n d: \"M19.52 30.66c.11.49.62.89 1.13.89h.93c.51 0 .84-.4.72-.89L19 16.09c-.11-.49-.62-.89-1.13-.89h-.93c-.51 0-.84.4-.72.89l3.3 14.57z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29255C\",\n d: \"M21.57 32h-.93c-.73 0-1.42-.54-1.57-1.24l-3.3-14.57c-.08-.37 0-.73.22-1.01.22-.27.57-.43.95-.43h.93c.73 0 1.42.54 1.57 1.24l3.3 14.57c.08.37 0 .73-.22 1.01-.22.27-.57.43-.95.43zm-4.62-16.35c-.1 0-.19.03-.24.09-.05.06-.06.15-.04.25l3.3 14.57c.06.28.39.53.68.53h.93c.1 0 .19-.03.24-.09.05-.06.06-.15.04-.25l-3.3-14.57c-.06-.28-.39-.53-.68-.53h-.93z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F1822F\",\n d: \"M8.82 30.66c-.11.49-.62.89-1.13.89h-.92c-.51 0-.84-.4-.72-.89l3.3-14.57c.11-.49.62-.89 1.13-.89h.93c.51 0 .84.4.72.89L8.82 30.66z\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29255C\",\n d: \"M7.69 32h-.92c-.38 0-.73-.16-.95-.43-.22-.27-.3-.64-.22-1.01l3.3-14.57c.16-.69.85-1.24 1.57-1.24h.93c.38 0 .73.16.95.43.22.27.3.64.22 1.01l-3.3 14.57c-.16.7-.85 1.24-1.58 1.24zm2.78-16.35c-.29 0-.62.25-.68.53l-3.3 14.57c-.02.1-.01.19.04.25s.13.09.24.09h.93c.29 0 .62-.26.68-.53l3.3-14.57c.02-.1.01-.19-.04-.25s-.13-.09-.24-.09h-.93z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FECE8D\",\n d: \"M28.54 17.71c0 2-1.67 3.63-3.7 3.63H4.16c-2.04 0-3.7-1.63-3.7-3.63V4.08c0-2 1.67-3.63 3.7-3.63h20.68c2.04 0 3.7 1.63 3.7 3.63v13.63z\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29255C\",\n d: \"M24.84 21.79H4.16C1.87 21.79 0 19.96 0 17.71V4.08C0 1.83 1.87 0 4.16 0h20.68C27.13 0 29 1.83 29 4.08V17.7c0 2.26-1.87 4.09-4.16 4.09zM4.16.9C2.37.9.92 2.33.92 4.08V17.7c0 1.75 1.45 3.18 3.24 3.18h20.68c1.79 0 3.24-1.43 3.24-3.18V4.08c0-1.75-1.45-3.18-3.24-3.18H4.16z\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#DCF0F2\",\n d: \"M26.69 16.8c0 1.5-1.25 2.72-2.78 2.72H5.41c-1.53 0-2.78-1.23-2.78-2.72V4.99c0-1.5 1.25-2.72 2.78-2.72h18.51c1.53 0 2.78 1.23 2.78 2.72V16.8z\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29255C\",\n d: \"M23.91 19.97H5.41c-1.78 0-3.23-1.42-3.23-3.17V4.99c0-1.75 1.45-3.17 3.23-3.17h18.51c1.78 0 3.23 1.42 3.23 3.17V16.8c0 1.75-1.45 3.17-3.24 3.17zM5.41 2.72c-1.28 0-2.32 1.02-2.32 2.27V16.8c0 1.25 1.04 2.27 2.32 2.27h18.51c1.28 0 2.32-1.02 2.32-2.27V4.99c0-1.25-1.04-2.27-2.32-2.27H5.41z\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F3FAF5\",\n d: \"M26.66 6.04v10.19c-15.38 2.1-21.69 2.97-22.24 3.05h-.03c-.71.09-1.32-.43-1.78-1.02V9.09c.32-.45 1.16-1.53 2.67-2.04 2.75-.93 5.15.87 5.35 1.02.26-.26 1.03-.99 2.24-1.12.54-.06 1 .02 1.32.1.05-.18.71-2.43 2.67-3.06 1.62-.52 3.45.29 4.46 2.04.04-.11.28-.79.89-1.02.23-.12 1.3-.64 2.6-.27 1.08.33 1.67 1.06 1.85 1.3z\"\n })), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#56BD80\",\n d: \"M4.48 19.52c1.42-1.97 5.25-6.82 9.14-6.36.71.08 4.42.32 7.11 2.72.9.8 1.74.89 2.03.91 2.23.11 4.04-2.83 4.06-3.63 0-.04.02-.75.02-.75-.02-.14-.02-.16-.02-.16s.74 2.36 0 4.54c-.28.82-.46 1.33-1.02 1.82-1.32 1.16-3.45.98-3.77.94-.15-.01-.26-.03-.29-.04-1.13-.16-5.61-.22-17.26.01z\"\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29255C\",\n d: \"M23.91 19.97H5.41c-1.78 0-3.23-1.42-3.23-3.17V4.99c0-1.75 1.45-3.17 3.23-3.17h18.51c1.78 0 3.23 1.42 3.23 3.17V16.8c0 1.75-1.45 3.17-3.24 3.17zM5.41 2.72c-1.28 0-2.32 1.02-2.32 2.27V16.8c0 1.25 1.04 2.27 2.32 2.27h18.51c1.28 0 2.32-1.02 2.32-2.27V4.99c0-1.25-1.04-2.27-2.32-2.27H5.41z\"\n }))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 9.45,\n cy: 9.62,\n fill: \"#29255C\",\n rx: 0.83,\n ry: 0.82\n }))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 19.9,\n cy: 9.62,\n fill: \"#29255C\",\n rx: 0.83,\n ry: 0.82\n }))), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29255C\",\n d: \"M14.71 11.75c-.78 0-1.39-.5-1.39-1.14v-.44c0-.25.21-.45.46-.45.26 0 .46.2.46.45v.44c0 .08.18.23.47.23s.47-.15.47-.23v-.44c0-.25.21-.45.46-.45s.46.2.46.45v.44c0 .64-.61 1.14-1.39 1.14z\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgNfts);\nexport default __webpack_public_path__ + \"static/media/nfts.2ab4ef3b.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2, _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgOurTokens(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 32 32\",\n enableBackground: \"new 0 0 32 32\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F6BE4E\",\n d: \"M16,32c8.8,0,16-7.2,16-16S24.8,0,16,0S0,7.2,0,16S7.2,32,16,32z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E99534\",\n d: \"M31.8,13.6c-1.1,6.4-6.5,11.8-13.4,13.4c-6.5,1.6-13.3-0.5-17.3-5.2c2.1,5.4,7.1,9.4,13.2,10 c1.9,0.1,3.9,0,5.8-0.5c2-0.5,3.8-1.4,5.3-2.5C29.4,26,32,21.3,32,16C32,15.2,31.9,14.4,31.8,13.6z\"\n })), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"circle\", {\n fill: \"#313076\",\n cx: 9.6,\n cy: 15.2,\n r: 1\n }), /*#__PURE__*/React.createElement(\"circle\", {\n fill: \"#313076\",\n cx: 22.4,\n cy: 15.2,\n r: 1\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#313076\",\n d: \"M14.8,15.9c-0.3,0-0.5,0.2-0.5,0.5c0,0.4,0.1,0.8,0.4,1c0.3,0.2,0.7,0.4,1.1,0.4c0.4,0,0.7-0.1,1-0.3 c0.2-0.1,0.3-0.3,0.4-0.5c0.1-0.2,0.1-0.4,0.1-0.6c0-0.2-0.3-0.4-0.5-0.4C16.1,15.9,15.5,15.9,14.8,15.9\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgOurTokens);\nexport default __webpack_public_path__ + \"static/media/our-tokens.2126c579.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgShop(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 64,\n height: 70,\n viewBox: \"0 0 64 70\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.396 18.347C41.396 12.2317 37.0069 7.20839 31.6544 7.20839C26.3018 7.20839 21.9127 12.1225 21.9127 18.347L16.4531 18.1286C16.4531 8.73721 23.1973 0.983887 31.5473 0.983887C39.8972 0.983887 46.6415 8.62801 46.6415 18.1286L41.396 18.347Z\",\n fill: \"#EB6479\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.4413 17.1835L20.9856 17.3252C21.4394 11.1327 25.9828 6.2245 31.6543 6.2245C37.3259 6.2245 41.861 11.2272 42.3217 17.3237L45.6538 17.185C45.2272 8.58133 39.0001 1.96734 31.5472 1.96734C24.1014 1.96734 17.8733 8.67286 17.4413 17.1835ZM15.4888 18.1284C15.4888 8.29948 22.5666 0 31.5472 0C40.5241 0 47.6057 8.186 47.6057 18.1284V19.0727L40.4316 19.3714V18.3468C40.4316 12.6659 36.3735 8.19184 31.6543 8.19184C26.9293 8.19184 22.8769 12.5633 22.8769 18.3468V19.3698L15.4888 19.0742V18.1284Z\",\n fill: \"#29235C\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.6178 17.9097H56.4901C59.7016 17.9097 62.2709 20.0937 62.2709 22.8238L56.5972 64.1021C56.5972 66.8321 53.8138 69.0161 50.6023 69.0161C44.8215 69.0161 39.0408 69.0161 33.2601 69.0161H30.7979C23.0902 69.0161 13.4557 69.0161 13.4557 69.0161C10.2442 69.0161 7.56785 66.8321 7.46079 64.1021L1.78711 22.8238C1.78711 20.0937 4.35636 17.9097 7.56788 17.9097H31.4402H32.6178Z\",\n fill: \"#EB6479\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.75199 22.7601L8.42234 64.0142L8.42425 64.063C8.50457 66.1112 10.5955 68.0327 13.4556 68.0327V69.0164V70.0001C9.91055 70.0001 6.66373 67.578 6.49946 64.1929L0.822754 22.8926V22.824C0.822754 19.3904 3.99582 16.9263 7.56782 16.9263H56.49C60.062 16.9263 63.2351 19.3904 63.2351 22.824V22.8926L57.5609 64.1745C57.5137 67.61 54.1009 70.0001 50.6022 70.0001H13.4561C13.456 70.0001 13.4556 70.0001 13.4556 69.0164C13.4556 68.0327 13.4555 68.0327 13.4556 68.0327H50.6022C53.5021 68.0327 55.6328 66.0883 55.6328 64.1023V64.0337L61.3059 22.7601C61.2651 20.7577 59.3111 18.8936 56.49 18.8936H7.56782C4.74675 18.8936 2.79278 20.7577 2.75199 22.7601Z\",\n fill: \"#29235C\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.5576 43.0266C20.6809 43.0266 21.5916 42.0977 21.5916 40.9518C21.5916 39.8059 20.6809 38.877 19.5576 38.877C18.4343 38.877 17.5237 39.8059 17.5237 40.9518C17.5237 42.0977 18.4343 43.0266 19.5576 43.0266Z\",\n fill: \"#29235C\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.5575 39.1132C18.5621 39.1132 17.7552 39.9363 17.7552 40.9517C17.7552 41.9671 18.5621 42.7903 19.5575 42.7903C20.553 42.7903 21.3599 41.9671 21.3599 40.9517C21.3599 39.9363 20.553 39.1132 19.5575 39.1132ZM17.292 40.9517C17.292 39.6754 18.3063 38.6406 19.5575 38.6406C20.8088 38.6406 21.8231 39.6753 21.8231 40.9517C21.8231 42.2281 20.8088 43.2628 19.5575 43.2628C18.3063 43.2628 17.292 42.2281 17.292 40.9517Z\",\n fill: \"#29235C\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.3567 43.0266C46.4801 43.0266 47.3907 42.0977 47.3907 40.9518C47.3907 39.8059 46.4801 38.877 45.3567 38.877C44.2334 38.877 43.3228 39.8059 43.3228 40.9518C43.3228 42.0977 44.2334 43.0266 45.3567 43.0266Z\",\n fill: \"#29235C\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M45.3567 39.1132C44.3613 39.1132 43.5543 39.9363 43.5543 40.9517C43.5543 41.9671 44.3613 42.7903 45.3567 42.7903C46.3521 42.7903 47.159 41.9671 47.159 40.9517C47.159 39.9363 46.3521 39.1132 45.3567 39.1132ZM43.0911 40.9517C43.0911 39.6753 44.1054 38.6406 45.3567 38.6406C46.6079 38.6406 47.6222 39.6754 47.6222 40.9517C47.6222 42.2281 46.6079 43.2628 45.3567 43.2628C44.1054 43.2628 43.0911 42.2281 43.0911 40.9517Z\",\n fill: \"#29235C\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M35.4009 42.2625C33.474 42.2625 31.5471 42.2625 29.6202 42.2625C29.299 42.2625 29.0849 42.2625 28.7638 42.2625C27.5862 42.2625 27.5862 44.0097 28.7638 44.0097C30.6907 44.0097 32.6176 44.0097 34.5445 44.0097C34.8656 44.0097 35.0798 44.0097 35.4009 44.0097C36.5785 44.0097 36.5785 42.2625 35.4009 42.2625C34.8657 42.2625 34.2234 42.2625 33.6881 42.2625C33.2599 42.2625 32.8317 42.6993 32.8317 43.1361C32.8317 43.4637 32.8317 43.7913 32.8317 44.1189C32.8317 44.2281 32.8317 44.2281 32.8317 44.1189C32.8317 44.2281 32.8317 44.3373 32.7247 44.3373C32.8317 44.2281 32.7246 44.4465 32.6176 44.4465C32.5105 44.5557 32.7247 44.4465 32.5106 44.5557C32.4035 44.6649 32.5106 44.5557 32.5106 44.5557C32.4035 44.5557 32.4035 44.6649 32.2964 44.6649C32.4035 44.5557 32.1894 44.6649 32.1894 44.6649C31.9753 44.7741 32.2964 44.6649 32.0823 44.6649H31.9753C32.0824 44.6649 32.0824 44.6649 31.9753 44.6649C31.9753 44.6649 31.7612 44.5557 31.7612 44.6649C31.6541 44.6649 31.5471 44.5557 31.5471 44.5557C31.5471 44.5557 31.4401 44.4465 31.4401 44.3373C31.4401 44.4465 31.4401 44.2281 31.4401 44.1189C31.4401 44.0097 31.4401 44.0097 31.4401 44.1189V44.0097C31.4401 43.6821 31.4401 43.3545 31.4401 43.0269C31.4401 41.8257 29.7272 41.8257 29.7272 43.0269C29.7272 43.5729 29.6202 44.2281 29.8343 44.6649C30.1554 45.6477 31.1189 46.4121 32.1894 46.4121C33.2599 46.4121 34.2233 45.6477 34.5445 44.6649C34.6515 44.1189 34.6516 43.5729 34.6516 43.0269C34.3304 43.3545 34.1163 43.5729 33.7952 43.9005C34.3304 43.9005 34.9727 43.9005 35.508 43.9005C36.5785 44.0097 36.5785 42.2625 35.4009 42.2625C33.474 42.2625 31.5471 42.2625 29.6202 42.2625C29.299 42.2625 29.0849 42.2625 28.7638 42.2625C27.5862 42.2625 27.5862 44.0097 28.7638 44.0097C30.6907 44.0097 32.6176 44.0097 34.5445 44.0097C34.8656 44.0097 35.0798 44.0097 35.4009 44.0097C36.5785 44.0097 36.5785 42.2625 35.4009 42.2625Z\",\n fill: \"#29235C\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgShop);\nexport default __webpack_public_path__ + \"static/media/shop.f3d666a3.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2, _path3, _ellipse, _ellipse2, _path4, _path5, _path6;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSocials(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 32 32\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M14.97 6.55c.32-1.83-.82-3 0-4.38.64-.99 1.79-1.55 2.98-1.46 1.89.18 2.75 2.34 2.98 2.92a6.46 6.46 0 0 1 0 4.38c-.3 1.06-.81 2.05-1.49 2.92h5.97c2.88-.4 5.56 1.56 5.97 4.38.07.49.07.98 0 1.47v8.76c-.01 3.22-2.68 5.83-5.97 5.84h-8.45C13.05 31.38 9 27 9 27c-2.98-2.92-4.27-2.62-4.09-5.83 0 0 .26-3.42.26-10.23 2.91 0 5.72-.08 6.24-.19 2.67-1.61 3.37-3.13 3.56-4.2z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M30.76 16.72c.09-2.35-1.04-4.54-3.58-5.1-.92-.13-1.85-.15-2.77-.08h-4.98a.68.68 0 0 1-.31-.08.595.595 0 0 1-.22-.82c1.71-2.25 2.48-5.37.91-7.88-.88-1.41-2.67-2.03-4.01-.68-1.09 1.11-.07 3.09-.24 4.48 0 .01-.01.02-.01.04 0 .03.01.07 0 .1a7.029 7.029 0 0 1-3.4 4.3c-.74.36-1.57.52-2.39.45-1.28.06-2.62.07-3.94.07-.01 2.55-.04 5.11-.15 7.67a14.14 14.14 0 0 0-.05 3.5c.29.81.85 1.5 1.59 1.95.77.62 1.52 1.24 2.23 1.93 1.11 1.15 2.36 2.16 3.73 3 2.49 1.45 5.05 1.22 7.85 1.22h4.39c2.8-.05 5.12-2.17 5.35-4.9.21-3.05-.1-6.17 0-9.17z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29255C\",\n d: \"M31.94 22.56c0-1.94-.07-3.9 0-5.84.08-2.51-.9-4.87-3.39-6-.97-.39-2.02-.56-3.07-.5-1.67.05-3.34.02-5.01.01 1.69-2.88 2.08-6.95-.59-9.34a3.628 3.628 0 0 0-4.67-.06c-2.04 1.59-.67 3.55-.92 5.61 0 .06.02.11.03.16a5.513 5.513 0 0 1-3.11 3.56c-.78.14-1.57.18-2.35.12H5.23c-.34.01-.61.27-.61.6 0 2.83 0 5.65-.16 8.47-.16 1.2-.16 2.41 0 3.61.48 1.95 2.79 3.1 4.09 4.41 1.26 1.3 2.7 2.42 4.27 3.33 2.71 1.48 5.55 1.22 8.57 1.22 1.73.11 3.47.08 5.19-.11 2.42-.47 4.39-2.21 5.11-4.52.3-1.56.38-3.15.25-4.73zm-1.18 3.32c-.23 2.74-2.54 4.85-5.35 4.9h-4.39c-2.8 0-5.36.23-7.85-1.22-1.37-.84-2.62-1.85-3.73-3-.71-.69-1.46-1.31-2.23-1.93a3.77 3.77 0 0 1-1.59-1.95c-.13-1.16-.11-2.34.05-3.5.1-2.55.14-5.11.15-7.67 1.32 0 2.66-.01 3.94-.07.82.07 1.65-.09 2.39-.45 1.68-.93 2.91-2.48 3.4-4.3.01-.04 0-.07 0-.1 0-.01.01-.02.01-.04.16-1.39-.86-3.37.24-4.48 1.34-1.35 3.13-.73 4.01.68 1.57 2.51.8 5.63-.91 7.88-.17.29-.07.65.22.82.09.05.2.08.31.08h4.98c.92-.07 1.85-.05 2.77.08 2.54.56 3.67 2.75 3.58 5.1-.1 3.01.21 6.13 0 9.17z\"\n })), _ellipse || (_ellipse = /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 15.43,\n cy: 19.63,\n fill: \"#29255C\",\n stroke: \"#29255C\",\n strokeMiterlimit: 10,\n strokeWidth: 0.24,\n rx: 0.93,\n ry: 0.91\n })), _ellipse2 || (_ellipse2 = /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 27.04,\n cy: 19.63,\n fill: \"#29255C\",\n stroke: \"#29255C\",\n strokeMiterlimit: 10,\n strokeWidth: 0.24,\n rx: 0.93,\n ry: 0.91\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29255C\",\n d: \"M22.59 20.24h-2.93a.378.378 0 0 0 0 .75h2.95a.378.378 0 0 0 0-.75h-.8c-.21.01-.37.17-.38.37v.43c0 .08-.03.16-.09.21 0 .05 0 0 0 0H21.12a.41.41 0 0 1-.16-.16v-.51a.376.376 0 0 0-.45-.31c-.16.03-.29.15-.32.31-.04.24-.04.48 0 .72.12.46.54.77 1.02.76.47-.01.89-.32 1.02-.76.04-.24.04-.48 0-.72l-.39.38h.8a.378.378 0 0 0 0-.75h-2.98a.378.378 0 0 0 0 .75h2.95a.378.378 0 0 0 0-.75l-.02.03z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#6FD0F6\",\n d: \"M1.69 9.45h7.57c.56 0 1.02.45 1.02 1v19.92c0 .55-.46 1-1.02 1H1.69c-.56 0-1.02-.45-1.02-1V10.45c0-.55.46-1 1.02-1z\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29255C\",\n d: \"M9.69 30.24c-.12.89-1.82.56-2.49.56H3.31c-.59 0-1.78.24-2.04-.43-.06-.45-.06-.9 0-1.35V12.01c-.06-.49-.06-.99 0-1.48.19-.68 1.02-.48 1.64-.48h3.98c.78-.1 1.58-.1 2.36 0 .57.18.42.82.42 1.3v19.01c0 .33.27.6.61.6.34 0 .61-.27.61-.6v-19.4c.12-.73-.2-1.47-.82-1.89-.84-.27-1.73-.35-2.59-.22H3.07c-.89 0-2.04-.17-2.64.58-.34.5-.49 1.1-.4 1.69v18.21c-.09.63-.01 1.26.22 1.85.6 1 1.97.8 3 .8H8.1c1.17 0 2.55 0 2.76-1.44.12-.76-1.06-1.09-1.17-.3z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSocials);\nexport default __webpack_public_path__ + \"static/media/socials.e0158081.svg\";\nexport { ForwardRef as ReactComponent };","import { observer } from 'mobx-react'\nimport React from 'react'\nimport { useLocation } from 'react-router'\nimport { NavLink } from 'react-router-dom'\nimport { ReactComponent as LearnIcon } from './icons/learn.svg'\nimport { ReactComponent as LobbyIcon } from './icons/lobby.svg'\n// import { ReactComponent as VideosIcon } from './icons/videos.svg'\nimport { ReactComponent as NftsIcon } from './icons/nfts.svg'\nimport { ReactComponent as OurTokenIcon } from './icons/our-tokens.svg'\nimport { ReactComponent as ShopIcon } from './icons/shop.svg'\nimport { ReactComponent as SocialsIcon } from './icons/socials.svg'\n\nexport function DashboardNav() {\n const location = useLocation()\n const isLobby = location.pathname.endsWith('lobby')\n\n return (\n
\n \n
\n )\n}\n\nexport default observer(DashboardNav)\n","import React from 'react'\nimport { IPostData } from 'app-lib/apis/ghostApi'\nimport ExternalLink from 'shared-components/ExternalLink'\n\nexport const OokiversityPost = ({ post }: { post: IPostData }) => {\n const prefix = 'Ookiversity: '\n const postTitle = post.title.startsWith(prefix) ? post.title.slice(prefix.length) : post.title\n return (\n
\n \n \n \n\n
\n \n

\n {postTitle}\n

\n
\n\n

{post.date}

\n

\n {post.excerpt.replaceAll('\\n', ' ').slice(0, 180)}…{' '}\n \n read more\n \n

\n
\n
\n )\n}\n\nexport default React.memo(OokiversityPost)\n","import Loader from 'bzx-common/src/ui-framework/components/Loader'\nimport React from 'react'\nimport OokiversityPost from './OokiversityPost'\nimport { BlogStore } from 'bzx-common/src/stores'\nimport { observer } from 'mobx-react'\n\nexport const OokiversityPosts = ({ blogStore }: { blogStore: BlogStore }) => {\n const showLoader = !blogStore.posts.loaded && !blogStore.posts.error\n return (\n
\n

Ookiversity articles

\n
\n
\n {showLoader && }\n {blogStore.posts.value.length > 0 &&\n blogStore.ookiversityPosts.map((post) => (\n \n ))}\n {blogStore.posts.error !== null && (\n

{blogStore.posts.error.message}

\n )}\n
\n
\n
\n )\n}\n\nexport default observer(OokiversityPosts)\n","export default __webpack_public_path__ + \"static/media/ookiversity-banner.25b561b5.jpeg\";","import { links } from 'bzx-common/src/config/appConfig'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport DashboardVM from 'src/components/Dashboard/DashboardVM'\nimport { observer } from 'mobx-react'\nimport OokiversityPosts from './OokiversityPosts'\nimport banner from './ookiversity-banner.jpeg'\n\nexport const Learn = ({ vm }: { vm: DashboardVM }) => (\n <>\n
\n
\n \n
\n
\n
\n

{'Learn crypto & DeFi fundamentals!'}

\n
    \n
  • Tutorials
  • \n
  • Articles
  • \n
  • Videos
  • \n
  • Lessons
  • \n
\n
\n
\n Ookiversity educates its students on the core mission of cryptocurrency and blockchain\n technology.\n
\n \n Go to Blog\n \n
\n
\n \n \n)\n\nexport default observer(Learn)\n","import { getDate } from 'app-lib/dateUtils'\nimport { ReactComponent as OokiWorker } from 'bzx-common/src/assets/images/ooki-worker.svg'\nimport { ChainId, links } from 'bzx-common/src/config/appConfig'\nimport chainConfigs from 'bzx-common/src/config/chains'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\nimport { Button, Icon } from 'ui-framework'\nimport DashboardVM from '../DashboardVM'\nimport ExternalLink from 'shared-components/ExternalLink'\n\ninterface IAppUpdate {\n type: 'fix' | 'improvement' | 'feature'\n feature: string\n text: string | React.ReactNode\n chains?: ChainId[]\n}\n\nconst updateTypesIcon: Record<'fix' | 'improvement' | 'feature', string> = {\n feature: '🚀',\n improvement: '🎉',\n fix: '👩‍⚕️',\n}\n\nconst appUpdates: Array<{\n date: number\n updates: IAppUpdate[]\n}> = [\n {\n date: 1680676863446,\n updates: [\n {\n type: 'fix',\n feature: 'Borrow',\n text: 'Fixed repaying a loan using the native chain token with small balances.',\n },\n ],\n },\n {\n date: 1680515555600,\n updates: [\n {\n type: 'feature',\n feature: 'Trading',\n chains: [42161],\n text: 'The ARB token is now available for lending, borrowing and trading.',\n },\n {\n type: 'improvement',\n feature: 'Trading',\n text: 'The market selector got some improvements to find the pairs you want more easily.',\n },\n ],\n },\n {\n date: 1679581709189,\n updates: [\n {\n type: 'feature',\n feature: 'User profile',\n text: (\n <>\n \n New user profile!\n \n
    \n
  • \n Follow your personal activity cross chain\n

    Helps you remember what you have and manage everything more efficiently.

    \n
  • \n
  • \n Customize your Ooki experience\n

    \n Set a custom Ooki avatar and an address alias to easily recognize your account.\n

    \n
  • \n
  • \n In the future, we plan to add more upgrades like personal stats and recommendations,\n nfts and more…\n
  • \n
\n \n ),\n },\n {\n type: 'improvement',\n feature: 'Stats',\n text: (\n <>\n TVL charts and more protocol events added to the{' '}\n \n stats page\n \n .\n \n ),\n },\n ],\n },\n {\n date: 1676286378654,\n updates: [\n {\n type: 'feature',\n feature: 'Trading',\n text: (\n <>\n

Trading UI/UX changes to be like familiar trading terminals.

\n

Added customizations to accomodate people's taste and screen sizes:

\n
    \n
  • the open positions can be displayed as list of cards or rows
  • \n
  • the trade setup panel can be collapsed to get more place for positions list
  • \n
\n \n ),\n },\n {\n type: 'improvement',\n feature: 'Trading',\n text: 'Candlestick chart falls back to USDT for USDC pairs that lack historical data.',\n },\n {\n type: 'improvement',\n feature: 'Borrow',\n text: 'iETH is added back as available collateral for borrow.',\n },\n {\n type: 'improvement',\n feature: 'Dashboard',\n text: 'The lobby takes advantage of wider screens to display more content.',\n },\n ],\n },\n {\n date: 1674560891564,\n updates: [\n {\n type: 'feature',\n chains: [1],\n feature: 'Borrow',\n text: (\n <>\n \n {'Use wstETH as collateral to borrow assets on Ooki Ethereum Mainnet :)'}\n \n ),\n },\n {\n type: 'improvement',\n feature: 'Stats',\n text: 'More events are now being tracked in the protocol activity page: liquidations, loan repayments.',\n },\n ],\n },\n {\n date: 1672743800744,\n updates: [\n {\n type: 'fix',\n feature: 'Borrow',\n text: 'The issue \"Insufficient funds for gas\" should not appear anymore when borrowing a token.',\n },\n ],\n },\n {\n date: 1672667048065,\n updates: [\n {\n type: 'fix',\n feature: 'Lend',\n text: 'The issue \"Insufficient funds for gas\" should not appear anymore when lending a token.',\n },\n {\n type: 'improvement',\n chains: [137],\n feature: 'Stats',\n text: 'stMATIC usage has been included in the protocol stats.',\n },\n ],\n },\n {\n date: 1672137338545,\n updates: [\n {\n type: 'feature',\n chains: [1],\n feature: 'Borrow',\n text: 'You can now use iTokens as collateral for loans on Ethereum Mainnet.',\n },\n {\n type: 'improvement',\n chains: [1, 10, 56, 137, 42161],\n feature: 'Stats',\n text: (\n <>\n View more details about the protocol usage in the{' '}\n \n stats activity page\n \n .\n \n ),\n },\n ],\n },\n {\n date: 1671645669413,\n updates: [\n {\n type: 'feature',\n chains: [137],\n feature: 'Borrow',\n text: (\n <>\n \n {\n \"Don't know what to do with your staked MATIC (stMATIC)? Use them as collateral on Ooki Polygon to borrow assets :)\"\n }\n \n ),\n },\n ],\n },\n {\n date: 1669993220914,\n updates: [\n {\n type: 'feature',\n chains: [10, 56],\n feature: 'Borrow',\n text: 'You can now use iTokens as collateral for loans on Binance Chain and Optimism.',\n },\n ],\n },\n {\n date: 1669721130119,\n updates: [\n {\n type: 'feature',\n chains: [42161, 137],\n feature: 'Borrow',\n text: 'You can now borrow assets using iTokens as collateral. This allows you to earn from lending yields while you borrow. Available on Arbitrum and Polygon first, other chains soon.',\n },\n {\n type: 'improvement',\n feature: 'New OOKI Token Logo',\n text: 'Ooki is recognizable. A brand, distinctive, linked to good spirits - Ooki makes the world smile. And as always, it is by the community for the community.',\n },\n ],\n },\n {\n date: 1664289158622,\n updates: [\n {\n type: 'improvement',\n feature: \"NFT's Section\",\n text: \"Added list of OOKI NFT's from OpenSea\",\n },\n {\n type: 'improvement',\n feature: 'UI/UX',\n text: (\n <>\n Multiple improvements:\n
    \n
  • \n Borrow: the list of assets for collateral is filtered with the tokens and\n balances that you can use.\n
  • \n
  • \n Trade chart: an info message is displayed when the chart is not available for\n a pair.\n
  • \n
\n \n ),\n },\n ],\n },\n {\n date: 1658159488279,\n updates: [\n {\n type: 'feature',\n chains: [10],\n feature: 'Optimism Support',\n text: 'Enjoy trading, lending and borrowing on Optimism.',\n },\n {\n type: 'feature',\n feature: 'Treasury stats',\n text: (\n <>\n Check how much is held in the Ooki treasury in the new{' '}\n \n stats treasury section\n \n .\n \n ),\n },\n {\n type: 'improvement',\n feature: 'App',\n text: (\n <>\n General fixes and improvements: Ooki addresses added in{' '}\n \n {'\"our token\"'} section\n \n , UI support for chain that do not have sushi AMM. Better refresh of data after a\n transaction. Filtering out rates that are close to 0 on the dashboard {'\"best rates\"'}\n ...\n \n ),\n },\n ],\n },\n {\n date: 1654611468066,\n updates: [\n {\n type: 'feature',\n chains: [1, 137, 42161],\n feature: 'Dex Selector',\n text: (\n <>\n Get better trade execution (entry price, position size) by using the{' '}\n \n new Dex Selector\n \n !\n \n ),\n },\n {\n type: 'fix',\n feature: 'Gas price',\n text: 'Transactions will be cheaper in certain cases. The gas price is now set by the user wallet.',\n },\n {\n type: 'improvement',\n feature: 'Lending',\n text: 'Lending and yields sections are now directly accessible and can be shared through their own URL.',\n },\n {\n type: 'improvement',\n feature: 'Borrow',\n text: 'The display of liquidity stats has been unified for lending and borrow pages.',\n },\n ],\n },\n {\n date: 1653495406052,\n updates: [\n {\n type: 'fix',\n feature: 'Dao',\n text: 'The amount of staked SLP is available again.',\n },\n {\n type: 'improvement',\n feature: 'Trading',\n text: 'Added the possibility to view older trading history.',\n },\n {\n type: 'improvement',\n feature: 'Trading',\n text: 'Each trading section has now its own URL that you can access directly.',\n },\n ],\n },\n {\n date: 1652867148334,\n updates: [\n {\n type: 'feature',\n feature: 'Borrow',\n text: 'View how your loan will impact the borrowing rates before you borrow.',\n },\n {\n type: 'improvement',\n feature: 'Interest rates',\n text: 'The UI will provide more information about the current rates. It will also give the possibility to share about rates on Twitter. Want to earn more from lending? Ask borrowers to come. Want cheap money? Ask lenders to join ;)',\n },\n {\n type: 'improvement',\n feature: 'Coin update',\n chains: [1],\n text: 'Lending and unlending the OOKI token is available again.',\n },\n {\n type: 'fix',\n feature: 'Trade/Borrow',\n text: 'Fixed the display of the collateral token and amount in some places.',\n },\n ],\n },\n {\n date: 1652433209649,\n updates: [\n {\n type: 'feature',\n feature: 'Protocol',\n chains: [1],\n text: 'Ooki v2 new interests rates are live on Ethereum!',\n },\n {\n type: 'feature',\n feature: 'New coin',\n chains: [1],\n text: (\n <>\n APE is now available for trading, lending\n and borrowing.\n \n ),\n },\n {\n type: 'fix',\n feature: 'Coin update',\n chains: [1],\n text: 'Lending is temporarily disabled for OOKI, pending an update of the itoken in next DAO proposal. No worries, just an update ;)',\n },\n ],\n },\n {\n date: 1651931610626,\n updates: [\n {\n type: 'feature',\n feature: 'Ookiversity',\n text: (\n <>\n Find the latest Ookiversity articles in the dashboard{' '}\n \n Ookiversity section\n \n .\n \n ),\n },\n {\n type: 'feature',\n feature: 'Staking',\n text: 'The Ooki app will inform you when there is an ongoing onchain proposal that you can vote for before you stake or claim rewards.',\n },\n {\n type: 'feature',\n feature: 'Dao',\n text: 'View the list of the DAO onchain proposals in the staking / dao tab where you can also find links to the Tally DAO operations platform.',\n },\n ],\n },\n {\n date: 1651590008985,\n updates: [\n {\n type: 'fix',\n feature: 'Borrow',\n text: 'Always fetch liquidity onchain for new loans and \"borrow more\".',\n },\n {\n type: 'feature',\n feature: 'Social Ooki',\n text: 'New \"share on Twitter\" for trade positions, lending yields and loans.',\n },\n ],\n },\n {\n date: 1651065218428,\n updates: [\n {\n type: 'improvement',\n feature: 'Trade',\n text: 'Substantial increase in UI performance and positions loading.',\n },\n {\n type: 'improvement',\n feature: 'Trade',\n text: 'Default leverage is set to 7X for stablecoins pairs and 3X for others.',\n },\n ],\n },\n {\n date: 1650046448252,\n updates: [\n {\n type: 'fix',\n feature: 'Trade',\n text: 'Fixed trade history table layout and entry price displayed.',\n },\n {\n type: 'improvement',\n feature: 'Chain update',\n text: 'Added support of native ETH on Arbitrum and improvement in interest rates reactivity.',\n chains: [42161],\n },\n {\n type: 'feature',\n feature: 'Dashboard',\n text: 'New widget \"App updates\".',\n },\n {\n type: 'improvement',\n feature: 'Lending',\n text: 'Better handling and warning of limited liquidity when unlending.',\n },\n {\n type: 'feature',\n feature: 'Lending',\n text: 'See expected interest rate change depending on how much you will lend.',\n chains: [56, 137, 42161],\n },\n {\n type: 'feature',\n feature: 'Dashboard',\n text: 'New Dao Widget shows the latest snapshot proposals.',\n },\n {\n type: 'feature',\n feature: 'Dashboard',\n text: 'New widget \"latest blog posts\".',\n },\n ],\n },\n]\n\nexport function AppUpdates({ vm }: { vm: DashboardVM }) {\n const updatesShown = vm.appUpdatesViewMore.visible ? appUpdates : appUpdates.slice(0, 3)\n return (\n
\n
\n

\n
App updates
\n \n

\n
\n
\n {updatesShown.map((appUpdate) => {\n return (\n
\n
{getDate(appUpdate.date)}
\n {appUpdate.updates.map((update, index) => {\n return (\n
\n

\n {updateTypesIcon[update.type]} {update.feature}\n

\n :{' '}\n {update.chains?.map((chainId) => (\n \n ))}\n {update.chains && ' '}\n {update.text}{' '}\n
\n )\n })}\n
\n )\n })}\n
\n
\n {!vm.appUpdatesViewMore.visible && (\n

\n \n

\n )}\n
\n
\n )\n}\n\nexport default observer(AppUpdates)\n","import assetUtils from 'app-lib/assetUtils'\nimport { formatPercent } from 'app-lib/numberUtils'\nimport { chainConfigs, routes } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { NavLink } from 'react-router-dom'\nimport { Icon, Loader, useElementSizeQuery } from 'ui-framework'\nimport DashboardVM from '../DashboardVM'\n\nconst loader = (\n
\n \n
\n)\n\nconst mediaQueries: { minWidth: [number, string][] } = {\n minWidth: [[320, 'lobby__apr-icons-visible']],\n}\n\nexport function BestAPR({ vm }: { vm: DashboardVM }) {\n const { statsStore } = vm.rootStore\n const hasAPR = statsStore.bestLendAprs.some((apr) => apr.tokens.length > 0)\n const [media, setRef] = useElementSizeQuery(mediaQueries)\n\n return (\n
\n

\n Best Rates\n \n Lend Now\n \n

\n\n {!statsStore.stats.loaded && !statsStore.stats.error && loader}\n\n {statsStore.stats.error && (\n

The best lending APR could not be fetched.

\n )}\n\n {hasAPR && (\n
\n {statsStore.bestLendAprs.map(({ chainId, tokens }, index) => {\n const { shortName: chainName } = chainConfigs[chainId].chainDetails\n const chainIcon = chainConfigs[chainId].icon\n return (\n
\n
\n \n {chainName}\n {index === 0 && 🚀}\n
\n\n
\n {tokens.slice(0, 3).map((token) => {\n const { spriteLogo } = assetUtils.getCommon(token.tokenName)\n return (\n
\n
\n
{token.tokenName}
\n {formatPercent(token.supplyApr)}%\n
\n \n
\n )\n })}\n
\n
\n )\n })}\n
\n )}\n
\n )\n}\n\nexport default observer(BestAPR)\n","import React from 'react'\nimport Placeholder from 'shared-components/Placeholder'\n\nconst posts = [1, 2, 3]\nconst styles = {\n img: { backgroundColor: 'var(--placeholder-bg)', border: 0 },\n}\n\nexport function BlogPostsPlaceholder() {\n return (\n <>\n {posts.map((post) => {\n return (\n
\n
\n\n
\n

\n \n

\n\n

\n \n

\n
\n
\n )\n })}\n \n )\n}\n\nexport default React.memo(BlogPostsPlaceholder)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport { ExternalLink } from 'shared-components/ExternalLink/ExternalLink'\nimport { BlogStore } from 'bzx-common/src/stores'\nimport BlogPostPlaceholder from './BlogPostPlaceholder'\n\nconst placeholder = \n\nexport function BlogPosts({ blogStore }: { blogStore: BlogStore }) {\n const showLoader = !blogStore.posts.loaded && !blogStore.posts.error\n return (\n
\n

\n Latest blog posts\n

\n
\n
\n {showLoader && placeholder}\n {blogStore.latestPosts.length > 0 &&\n blogStore.latestPosts.map((post, index) => {\n return (\n
\n \n \n \n\n
\n \n

{post.title}

\n
\n\n

{post.date}

\n
\n
\n )\n })}\n {blogStore.posts.error &&

{blogStore.posts.error.message}

}\n
\n
\n
\n )\n}\n\nexport default observer(BlogPosts)\n","import { links } from 'bzx-common/src/config/appConfig'\nimport { useElementSizeQuery } from 'ui-framework'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport DashboardVM from '../DashboardVM'\n\nconst mediaQueries: { minWidth: [number, string][] } = {\n minWidth: [[420, 'lobby__dao--md']],\n}\n\nexport function LobbyDao({ vm }: { vm: DashboardVM }) {\n const { stakingStore } = vm.rootStore\n const [media, setRef] = useElementSizeQuery(mediaQueries)\n\n return (\n \n
\n
\n
\n

DAO

\n
\n

Get involved

\n \n Forum\n \n \n Proposals\n \n
\n
\n
\n
\n {stakingStore.dao.snapshotProposals.length > 0 && (\n <>\n

Latest proposals

\n\n
    \n {stakingStore.dao.snapshotProposals.slice(0, 5).map((proposal) => {\n return (\n
  • \n
    {proposal.title}
    \n
  • \n )\n })}\n
\n \n )}\n
\n
\n
\n
\n )\n}\n\nexport default observer(LobbyDao)\n","export default __webpack_public_path__ + \"static/media/ooki-web-preview.f40c0318.png\";","import { observer } from 'mobx-react'\nimport React from 'react'\nimport { Timeline } from 'react-twitter-widgets'\nimport DashboardVM from '../DashboardVM'\nimport { Icon } from 'ui-framework'\nconst placeholder = (\n \n)\n// Keep the Twitter in its own component for performance optimizations, due to widget width bug\n\nexport function Twitter({ vm }: { vm: DashboardVM }) {\n const { uiStore } = vm.rootStore\n const { width } = uiStore.media.viewPort.size\n // fix twitter widget growing length\n const maxWidth = width - (uiStore.media.mdPlusScreen ? 40 : 32)\n const twitterHeight = uiStore.media.xlScreen ? 443 : 364\n\n return (\n
\n {placeholder}\n \n
\n )\n}\n\nexport default observer(Twitter)\n","import { links } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { NavLink } from 'react-router-dom'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Icon } from 'ui-framework'\nimport DashboardVM from '../DashboardVM'\nimport AppUpdates from './AppUpdates'\nimport BestAPR from './BestAPR'\nimport BlogPosts from './BlogPosts'\nimport LobbyDao from './LobbyDao'\nimport webPreview from '../../../../public/ooki-web-preview.png'\nimport Twitter from './Twitter'\n\nconst ookiIcon = \nconst bzrxIcon = \n\nexport function Lobby({ vm }: { vm: DashboardVM }) {\n return (\n <>\n
\n
\n
\n \n {/* */}\n
\n
\n \n FAQ\n \n \n Blog\n \n
\n
\n
\n
\n
\n \n
Migrate to Ooki Token
\n {bzrxIcon} {ookiIcon}\n \n \n
\n\n \n \n \n \n
\n \n )\n}\n\nexport default observer(Lobby)\n","import { observer } from 'mobx-react'\nimport React, { CSSProperties } from 'react'\nimport { ExternalLink } from 'shared-components/ExternalLink/ExternalLink'\n\ninterface ICollection {\n contractAddress: string\n linkPath: string\n filePath: string\n nftTokens: INftToken[]\n}\n\ninterface INftToken {\n name: string\n tokenId: string\n src: string\n description: string\n}\n\nconst collection: ICollection = {\n contractAddress: '0x495f947276749ce646f68ac8c248420045cb7b5e',\n linkPath: 'https://opensea.io/assets/ethereum/',\n filePath: 'https://openseauserdata.com/files/',\n nftTokens: [\n {\n name: 'Mr. OOki',\n tokenId: '64093593714290136112596889839166670846544561855086852164347192949043422560257',\n src: '6d26a3e1858af6789ce8ff8c79c9ba5d',\n description: 'The first NFT of the Ooki collection to celebrate the launch of ooki.com.',\n },\n {\n name: 'Ooki Korea',\n tokenId: '51104822734232092166983300974407982455056227197551392102799214882345149530113',\n src: 'ceb1bba8f2bb466f727ef0dc785e4084',\n description: 'The second NFT of the Ooki collection.',\n },\n {\n name: 'Ooki Japan',\n tokenId: '51104822734232092166983300974407982455056227197551392102799214883444661157889',\n src: '3885d9f3d94421192028698f3e1be4b8',\n description:\n 'This limited edition NFT is the third in a series created to celebrate the launch of Ooki.com and features an avatar representing the spirit of the Ooki Japan Community of DeFi traders, borrowers, lenders.',\n },\n ],\n}\n\nconst styles: Record = {\n grid: {\n gridTemplateColumns: 'repeat(auto-fit, minmax(330px, 1fr))',\n },\n}\n\nexport function NftCollection() {\n return (\n
\n

{\"Our NFT's\"}

\n\n
\n {collection.nftTokens.map((token) => {\n const link = `${collection.linkPath}${collection.contractAddress}/${token.tokenId}`\n return (\n
\n \n \n

{token.name}

\n
\n

{token.description}

\n
\n )\n })}\n
\n
\n )\n}\n\nexport default observer(NftCollection)\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgCoinGecco(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 30,\n height: 31,\n viewBox: \"0 0 30 31\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29.9999 15.7186C30.0129 18.6853 29.146 21.5892 27.5087 24.0632C25.8714 26.5372 23.5372 28.4701 20.8014 29.6175C18.0656 30.7649 15.0509 31.0753 12.1387 30.5093C9.22644 29.9434 6.54742 28.5267 4.44039 26.4382C2.33336 24.3497 0.892952 21.6833 0.301313 18.7762C-0.290326 15.8691 -0.00662223 12.8518 1.11655 10.1059C2.23972 7.36004 4.15191 5.00888 6.61131 3.34977C9.07072 1.69065 11.9669 0.79808 14.9336 0.784937C16.9034 0.776211 18.8557 1.15556 20.6789 1.90133C22.5021 2.6471 24.1606 3.74468 25.5596 5.13141C26.9587 6.51813 28.0709 8.16684 28.8327 9.9834C29.5946 11.8 29.9912 13.7488 29.9999 15.7186Z\",\n fill: \"#8DC63F\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.8749 15.7241C28.8884 18.4681 28.0879 21.1544 26.5745 23.4434C25.0612 25.7324 22.903 27.5211 20.373 28.5834C17.843 29.6458 15.0547 29.9339 12.3609 29.4115C9.66713 28.8891 7.18876 27.5795 5.23927 25.6484C3.28979 23.7173 1.95678 21.2515 1.40882 18.5627C0.860861 15.874 1.12258 13.0832 2.16086 10.5432C3.19915 8.00319 4.96737 5.82817 7.24189 4.2932C9.5164 2.75822 12.195 1.93225 14.939 1.91975C18.6172 1.90357 22.1513 3.34856 24.7645 5.9371C27.3777 8.52565 28.8562 12.0459 28.8749 15.7241Z\",\n fill: \"#F9E988\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.2555 2.8132C16.1374 2.65667 17.0399 2.65667 17.9218 2.8132C18.8122 2.95437 19.6728 3.24272 20.4685 3.66646C21.2598 4.10124 21.9435 4.69146 22.624 5.24472C23.3044 5.79798 23.9816 6.36428 24.6261 6.98385C25.2842 7.59371 25.8584 8.28817 26.3337 9.04907C26.8231 9.80399 27.2242 10.6125 27.5294 11.4588C28.1087 13.161 28.3098 14.9947 28.0207 16.7436H27.9348C27.6446 15.0099 27.2511 13.3578 26.6305 11.786C26.3391 10.996 25.9964 10.2259 25.6044 9.48059C25.1956 8.73117 24.7449 8.00539 24.2544 7.30668C23.7558 6.60286 23.1447 5.98592 22.4457 5.48059C21.7413 4.97842 20.9316 4.65342 20.1479 4.34472C19.3642 4.03602 18.587 3.71972 17.7696 3.48494C16.9522 3.25015 16.1218 3.07407 15.2544 2.90342L15.2555 2.8132Z\",\n fill: \"white\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.0369 10.8273C21.0304 10.536 19.9869 10.1229 18.9304 9.70556C18.8695 9.44034 18.6347 9.10991 18.1597 8.70664C17.4695 8.10773 16.1728 8.12295 15.0521 8.38817C13.8152 8.09686 12.5934 7.9936 11.4206 8.27947C1.82821 10.9219 7.26734 17.3686 3.74561 23.849C4.24669 24.9121 9.64778 31.1143 17.463 29.4501C17.463 29.4501 14.7902 23.0273 20.8217 19.9447C25.7141 17.4349 29.2489 12.7914 22.0369 10.8273Z\",\n fill: \"#8BC53F\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.2216 15.0458C23.2223 15.1608 23.1888 15.2734 23.1254 15.3694C23.0621 15.4654 22.9717 15.5404 22.8657 15.585C22.7596 15.6297 22.6428 15.6418 22.5299 15.62C22.4169 15.5982 22.313 15.5434 22.2312 15.4625C22.1494 15.3817 22.0935 15.2784 22.0704 15.1657C22.0473 15.053 22.0582 14.936 22.1016 14.8295C22.145 14.723 22.2191 14.6318 22.3143 14.5674C22.4096 14.5029 22.5218 14.4682 22.6368 14.4675C22.791 14.467 22.9391 14.5275 23.0487 14.6359C23.1583 14.7443 23.2205 14.8917 23.2216 15.0458Z\",\n fill: \"white\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.0522 8.38386C15.7512 8.43386 18.2783 9.25343 18.9305 9.70126C18.387 8.12517 16.5577 7.91539 15.0522 8.38386Z\",\n fill: \"#009345\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.7173 12.3698C15.7175 12.9003 15.5604 13.419 15.2658 13.8603C14.9712 14.3016 14.5524 14.6456 14.0623 14.8488C13.5722 15.0521 13.0328 15.1054 12.5124 15.0021C11.992 14.8988 11.5139 14.6435 11.1385 14.2685C10.7632 13.8935 10.5075 13.4156 10.4038 12.8953C10.3001 12.3749 10.353 11.8355 10.5558 11.3453C10.7587 10.855 11.1023 10.4359 11.5434 10.1409C11.9844 9.84599 12.503 9.68845 13.0336 9.68823C13.7447 9.68823 14.4267 9.97056 14.9297 10.4732C15.4327 10.9758 15.7156 11.6576 15.7162 12.3687L15.7173 12.3698Z\",\n fill: \"white\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.9214 12.3937C14.9214 12.7669 14.8107 13.1317 14.6034 13.442C14.396 13.7523 14.1013 13.9942 13.7565 14.137C13.4117 14.2798 13.0323 14.3172 12.6663 14.2444C12.3003 14.1716 11.964 13.9918 11.7001 13.728C11.4362 13.4641 11.2565 13.1278 11.1837 12.7618C11.1109 12.3958 11.1483 12.0164 11.2911 11.6716C11.4339 11.3268 11.6758 11.0321 11.9861 10.8247C12.2964 10.6174 12.6612 10.5067 13.0344 10.5067C13.5349 10.5067 14.0148 10.7055 14.3687 11.0594C14.7226 11.4133 14.9214 11.8932 14.9214 12.3937Z\",\n fill: \"#58595B\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.3945 16.2284C23.2206 17.7599 20.7489 18.9219 17.2424 18.9219C15.601 18.9219 15.2684 17.1828 14.1837 18.0328C13.6239 18.4741 11.65 19.461 10.0837 19.386C8.51735 19.311 5.97822 18.3936 5.27061 15.0491C4.99018 18.3936 4.8467 20.8556 3.58691 23.6784C6.08691 27.6817 12.0478 30.7697 17.4587 29.4393C16.8815 25.3795 20.4347 21.4034 22.4282 19.3719C23.1891 18.6012 24.6347 17.3436 25.3945 16.2295V16.2284Z\",\n fill: \"#8BC53F\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.3097 16.3284C24.6347 16.9437 23.8314 17.3991 23.014 17.8013C22.1865 18.1937 21.3241 18.5078 20.438 18.7393C19.551 18.9686 18.626 19.1415 17.689 19.0567C16.7521 18.9719 15.7945 18.6534 15.1738 17.9513L15.2032 17.9176C15.964 18.411 16.8423 18.585 17.7162 18.61C18.602 18.6372 19.4881 18.5642 20.3575 18.3926C21.2358 18.2085 22.0949 17.9428 22.9238 17.5991C23.7532 17.2567 24.5738 16.86 25.2804 16.2947L25.3097 16.3284Z\",\n fill: \"#58595B\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCoinGecco);\nexport default __webpack_public_path__ + \"static/media/coin-gecco.e5d5a4ee.svg\";\nexport { ForwardRef as ReactComponent };","export default __webpack_public_path__ + \"static/media/nfts-banner.5f0d1f9b.jpeg\";","import { links } from 'bzx-common/src/config/appConfig'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport NftCollection from './NftCollection'\nimport nftsBanner from './nfts-banner.jpeg'\n\nexport default function Nfts() {\n return (\n <>\n
\n
\n \n
\n
\n
\n

{\"Collect OOKI NFT's\"}

\n
    \n
  • Mascots
  • \n
  • Community members
  • \n
  • Ookiverse
  • \n
  • 3-Dee
  • \n
\n
\n
\n {\n \"Ooki NFT's are released as limited edition collections, follow Ooki on socials to stay up to date.\"\n }\n
\n \n {\"Get your NFT's\"}\n \n
\n
\n \n \n )\n}\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgGovern(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 78.1 92.7\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#45A1DA\",\n d: \"M24.3 91.3c-.9-.9-1.4-2.1-1.3-3.3 0-1.2.4-2.4 1.3-3.3.9-.9 2.1-1.3 3.3-1.3 1 0 1.9.3 2.7.8.8.5 1.4 1.3 1.6 2.2h-2.6c-.3-.6-.9-1-1.6-1-.7 0-1.3.2-1.8.7-.4.5-.7 1.2-.6 1.9-.1.7.2 1.4.6 2 .5.5 1.1.7 1.8.7.5 0 .9-.1 1.3-.4.3-.3.6-.6.7-1.1H27v-1.7h4.9v1.7c-.2.9-.7 1.7-1.3 2.3-.4.4-.8.7-1.3.8-.5.2-1.1.3-1.7.3-1.3.1-2.4-.4-3.3-1.3zm13.3-1c.3-.4.5-.8.4-1.3 0-.5-.1-1-.4-1.3-.6-.6-1.5-.6-2.1-.1l-.1.1c-.3.3-.4.8-.4 1.3s.1 1 .4 1.3c.3.3.7.5 1.1.5.5 0 .8-.2 1.1-.5zm-3.7 1.4c-.8-.7-1.2-1.7-1.1-2.7 0-1 .4-2 1.1-2.7 1.5-1.3 3.8-1.3 5.3 0 .7.7 1.1 1.7 1.1 2.7 0 1-.3 2-1.1 2.7-.7.7-1.7 1-2.7 1-.9 0-1.9-.4-2.6-1zm6.9-6.3h2.3l1.6 5.3 1.6-5.3h2.3l-2.5 7.2h-2.9l-2.4-7.2zm12 7.3c-1 0-1.9-.3-2.6-1-.7-.7-1-1.7-1-2.7 0-1 .3-1.9 1-2.7.7-.7 1.6-1 2.6-1s1.9.3 2.6 1c.7.7 1.1 1.7 1.1 2.7 0 .2 0 .5-.1.7h-4.9c0 .3.2.6.4.8.2.2.5.3.8.3.2 0 .4 0 .6-.1.1 0 .2-.1.3-.2.1-.1.2-.2.2-.3h2.4c-.2.8-.6 1.4-1.2 1.8-.6.5-1.4.7-2.2.7zm1.4-4.4c0-.3-.2-.6-.4-.8-.3-.2-.6-.3-.9-.3-.3 0-.6.1-.9.3-.2.2-.4.5-.4.8h2.6zm5.9-2.9v1.3c.4-.8 1.2-1.4 2.1-1.4v2.2h-.5c-.4 0-.8.1-1.1.4-.3.4-.4.8-.4 1.3v3.4H58v-7.2h2.1zm5.4 0v1c.5-.8 1.3-1.2 2.2-1.1.8 0 1.5.3 2 .8.5.6.8 1.4.8 2.2v4.2h-2.2v-3.9c0-.4-.1-.8-.4-1.1-.3-.3-.6-.4-1-.4s-.7.1-1 .4c-.3.3-.4.7-.4 1.1v3.9h-2.2v-7.2l2.2.1zM20.3 61.3H2.5c-.5.1-1.1 0-1.6-.1-.4-.2-1-.8-1-1.3s.7-.8 1.2-1c.5-.1.9-.1 1.4-.1H38c.5-.1.9 0 1.4.1.5.2 1.2.8 1.1 1-.2.6-.6 1-1.1 1.3-.4.2-1 .1-1.6.1H20.3zM19.8 55H5.9c-1 0-2.2.2-2.3-1.2s1.2-1.3 2.2-1.3h28.5c.7 0 1.8.4 1.9.8.4 1.4-.7 1.6-1.8 1.6l-14.6.1z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#46C0EC\",\n d: \"m45.6 25.9 1.5-1.5c1.6-1.6 4.1-1.6 5.7 0L77 48.6c1.6 1.6 1.6 4.1 0 5.7l-1.5 1.5c-1.6 1.6-4.1 1.6-5.7 0L45.6 31.6c-1.6-1.6-1.6-4.1 0-5.7z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M70.6 53.2c.5.6 1.2 1.1 1.9 1.4 1.3.5 2.7.5 4-.1l.3-.3c1.6-1.6 1.6-4.1 0-5.7L52.7 24.4c-1.6-1.6-4.1-1.6-5.7 0L45.6 26c-.1.1-.2.2-.2.3l25.2 26.9z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#45A1DA\",\n d: \"M72.5 54.6c-.7-.3-1.4-.8-1.9-1.4-8.4-9-17.6-17-26-26-1.3 1.6-.5 2.9.9 4.4l24.2 24.2c1.6 1.6 4.1 1.6 5.7 0l1.2-1.2c-1.3.5-2.7.5-4.1 0z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#46C0EC\",\n d: \"M44.8 10.1c-.1 3.2-1.3 6.3-3.3 8.7-4.4 5-10.9 4.5-11.6 4.5L45.7 39c-.4-3.7.9-7.3 3.4-10 3.2-3.2 7.9-4.5 12.3-3.3L44.8 10.1z\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M57.9 22.4 44.8 10.1c-.1 3.2-1.3 6.3-3.3 8.7-4.4 5-10.9 4.5-11.6 4.5L43 36.2c-.1-3.4 1.1-6.7 3.2-9.3 2.9-3.2 7.3-4.9 11.7-4.5zM45.1 38.4l.6.6c0-.2 0-.5-.1-1l-.5.4z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#45A1DA\",\n d: \"M49.1 29c3.2-3.2 7.9-4.5 12.3-3.3l-3-2.8c-4.2.9-6.5.8-9.9 3.9-3 2.7-5.5 6.9-5.5 9.5l2.2 2.2.6-.4c-.2-3.4 1-6.7 3.3-9.1z\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M44.4 13.3c-1.2 5.1-5.5 9-10.7 9.8 3.4 3.3 9.1 8.9 12.2 12 .4-2.3 1.5-4.5 3.2-6.2 2.2-2.2 5.2-3.6 8.3-3.7-3.3-3.1-10.8-10-13-11.9z\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#45A1DA\",\n d: \"M29.8 23.3 45.7 39c-.1-1.3-.1-2.6.2-3.9-3.1-3.1-8.8-8.7-12.2-12-1.3.2-2.6.3-3.9.2z\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#46C0EC\",\n d: \"M54.5 1.1c-1.6-1.5-4.1-1.4-5.7.2L44.4 6c-1.5 1.6-1.4 4.1.2 5.7l13.6 12.8c1.6 1.5 4.1 1.4 5.7-.2l4.5-4.8c1.5-1.6 1.4-4.1-.2-5.7L54.5 1.1z\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M62.7 23c-1 .1-2 0-2.9-.4-.4-.2-.7-.4-1-.7L46.1 10c-.3-.6-.5-1.2-.5-1.8 0-.9.2-1.9.7-2.7 1-1.7 2.1-3.3 3.4-4.9 1.6-1 3.6-.8 4.9.5l13.5 12.7c1.6 1.5 1.7 4.1.2 5.7l-2.9 3.1c-.9.2-1.8.3-2.7.4z\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#45A1DA\",\n d: \"M45.6 8.2c0 .6.2 1.2.5 1.8l12.7 11.8c.3.3.6.5 1 .7.9.4 1.9.6 2.9.4l2.7-.3-1.6 1.6c-1.5 1.6-4.1 1.7-5.7.2L44.5 11.7c-1.6-1.5-1.7-4.1-.2-5.7l4.5-4.7c.2-.2.5-.5.8-.6-1.3 1.5-2.4 3.1-3.4 4.9-.4.7-.7 1.6-.6 2.6z\"\n })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#46C0EC\",\n d: \"m21.9 28.5 4.5-4.5c1.6-1.6 4.1-1.6 5.7 0L45 37c1.6 1.6 1.6 4.1 0 5.7l-4.5 4.5c-1.6 1.6-4.1 1.6-5.7 0l-12.9-13c-1.6-1.6-1.6-4.1 0-5.7z\"\n })), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M23.2 29.6c-.1 1 .1 2 .5 2.8.2.4.4.7.7 1 4 4.1 8 8.1 12.1 12.1.6.3 1.2.4 1.8.4.9 0 1.8-.3 2.6-.7 1.7-1 3.2-2.2 4.7-3.5.9-1.6.7-3.6-.6-4.8L32 24c-1.6-1.6-4.1-1.6-5.7 0l-2.9 3c-.1.8-.2 1.7-.2 2.6z\"\n })), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#45A1DA\",\n d: \"M38.3 46c-.6 0-1.2-.2-1.8-.4-4-4-8-8.1-12.1-12.1-.3-.3-.5-.6-.7-1-.4-.9-.6-1.9-.5-2.8 0-.9.1-1.8.3-2.6l-1.6 1.6c-1.6 1.6-1.6 4.1 0 5.7l12.9 12.9c1.6 1.6 4.1 1.6 5.7 0l4.5-4.5c.2-.2.4-.5.6-.8-1.4 1.3-3 2.5-4.7 3.5-.8.3-1.7.5-2.6.5z\"\n })), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M48.8 3.7c-.1-.4 1.5-1.7 3.2-1.6 1.4.2 2.6 1 3.3 2.2-.9-.2-1.9-.3-2.9-.4-2.3-.2-3.5.1-3.6-.2zM26.7 27c-.1-.4 1.5-1.7 3.2-1.6 1.4.2 2.6 1 3.3 2.2-.9-.2-1.9-.3-2.9-.4-2.3-.2-3.5.1-3.6-.2z\"\n })), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"m56.5 32 11.3 11.4\"\n })), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"m56.1 32.4 9.9 10 1.4 1.4c.2.2.6.2.9 0 .2-.2.2-.6 0-.9l-9.9-10-1.4-1.4c-.3-.2-.7-.2-.9.1-.2.2-.2.6 0 .8zM54.3 30.6c.4 0 .8-.3.8-.8s-.3-.8-.8-.8-.8.3-.8.8.4.8.8.8z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgGovern);\nexport default __webpack_public_path__ + \"static/media/govern.4cd42524.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18, _path19, _path20, _path21, _path22, _path23, _path24, _path25, _path26, _path27, _path28, _path29, _path30, _path31, _path32, _path33, _path34, _path35, _path36, _path37, _path38, _path39, _path40, _path41, _path42, _path43, _path44, _path45, _path46, _path47, _path48, _path49, _path50, _path51, _path52, _path53, _path54, _path55, _path56, _path57, _path58, _path59, _path60, _path61, _path62, _path63, _path64, _path65, _path66, _path67, _path68, _path69, _path70, _path71, _path72, _path73, _path74, _path75, _path76, _path77, _path78, _path79, _path80, _path81, _path82, _path83, _path84, _path85, _path86, _path87, _path88, _path89, _path90, _path91, _ellipse, _path92, _defs, _clipPath, _g, _g2, _path93, _ellipse2, _path94, _defs2, _clipPath2, _g3, _g4;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgOokiFlowchart(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 301.9 224\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#6574AF\",\n d: \"M12.4,32.1c0,1.6-1.2,2.8-2.7,2.9H7.3c-1.6,0-2.8-1.3-2.8-2.9v-9.7c0-1.5,1.2-2.8,2.8-2.9h2.3 c1.5,0.1,2.8,1.3,2.7,2.9V32.1z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#6574AF\",\n d: \"M22.1,32.1c0,1.5-1.2,2.8-2.7,2.9h-2.3c-1.6-0.1-2.8-1.3-2.8-2.9V17.2c0-1.6,1.2-2.8,2.8-2.9h2.3 c1.5,0,2.8,1.3,2.8,2.9L22.1,32.1z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#6574AF\",\n d: \"M32.1,32.1c0,1.6-1.2,2.8-2.8,2.9H27c-1.5-0.1-2.8-1.3-2.8-2.9V11c0-1.5,1.2-2.8,2.8-2.9h2.3 c1.6,0,2.8,1.3,2.8,2.9V32.1z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#6574AF\",\n d: \"M42.1,32.1c0,1.6-1.2,2.8-2.8,2.9H37c-1.5-0.1-2.8-1.3-2.8-2.9V7c0-1.5,1.2-2.8,2.8-2.9h2.3 c1.5,0.1,2.8,1.3,2.8,2.9V32.1z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M152.1,23.8c5.8,0,10.6-4.7,10.6-10.6s-4.7-10.6-10.6-10.6s-10.6,4.7-10.6,10.6S146.3,23.8,152.1,23.8 C152.1,23.8,152.1,23.8,152.1,23.8z\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M152.1,2.6c-1,0-1.9,0.1-2.8,0.4c-1.3,1-2.4,2.3-3.1,3.7c-1.5,2.6-1.9,5.6-1,8.5c0.8,2.3,2.4,4.2,4.5,5.5 l-5.2-0.2c4,4.2,10.7,4.4,14.9,0.4s4.4-10.7,0.4-14.9C157.7,3.8,155,2.6,152.1,2.6L152.1,2.6z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F08639\",\n d: \"M145.1,15.2c-0.9-2.8-0.5-5.9,1-8.5c0.8-1.4,1.9-2.7,3.1-3.7c-5.6,1.5-8.9,7.3-7.4,13 c0.5,1.7,1.3,3.2,2.5,4.5l5.2,0.2C147.5,19.4,145.9,17.5,145.1,15.2z\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M13.6,32.1c0,1.5-1.2,2.8-2.8,2.9H8.5c-1.6,0-2.8-1.3-2.8-2.9v-9.7c0-1.5,1.2-2.8,2.8-2.9h2.3 c1.5,0.1,2.8,1.3,2.8,2.9V32.1z\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M23.3,32.1c0,1.5-1.2,2.8-2.8,2.9h-2.3c-1.5,0-2.8-1.3-2.8-2.9V17.2c0-1.5,1.2-2.8,2.8-2.9h2.3 c1.5,0,2.8,1.3,2.8,2.9V32.1z\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M33.3,32.1c0,1.5-1.2,2.8-2.8,2.9h-2.3c-1.6,0-2.8-1.3-2.8-2.9V11c0-1.6,1.2-2.9,2.8-2.9c0,0,0,0,0,0h2.3 c1.6,0,2.8,1.3,2.8,2.9V32.1z\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M43.2,32.1c0,1.5-1.2,2.8-2.8,2.9h-2.3c-1.5-0.1-2.8-1.3-2.8-2.9V7c0-1.5,1.2-2.8,2.8-2.9h2.3 c1.6,0,2.8,1.3,2.8,2.9V32.1z\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#597290\",\n d: \"M8.9,31.1l9.2-8.2l-1,0.3l7.2,1.5c1.2,0.3,2.4,0.5,3.6,0.8c0.5,0.1,1,0,1.4-0.3c4.6-3.1,9-6.6,13.5-9.8 l4.8-3.5c1-0.7,0-2.5-1-1.7L30.3,22.1L28,23.8l0.8-0.1l-10.4-2.2c-0.5-0.2-1.1-0.2-1.6,0c-0.3,0.2-0.6,0.5-0.9,0.8l-4.7,4.2 l-3.7,3.3C6.5,30.5,7.9,31.9,8.9,31.1L8.9,31.1z\"\n })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#597291\",\n stroke: \"#597290\",\n strokeWidth: 1.11,\n strokeMiterlimit: 10,\n d: \"M44.6,9.2l3.3,4.2l1.5-4.8L44.6,9.2z\"\n })), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M0,45.4v-1.8h7.5v1.8H4.9v7.8H2.6v-7.8H0z\"\n })), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M11.2,45.6V47c0.4-0.9,1.2-1.4,2.2-1.5v2.4h-0.6c-0.4,0-0.9,0.1-1.2,0.4c-0.3,0.4-0.5,0.9-0.4,1.3v3.6H8.9 v-7.6H11.2z\"\n })), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M15.1,52.2c-1.3-1.6-1.3-4,0-5.6c0.6-0.7,1.5-1.1,2.5-1.1c0.9,0,1.7,0.4,2.2,1.1v-1h2.3v7.6h-2.3v-1.1 c-0.5,0.8-1.3,1.2-2.3,1.2C16.6,53.3,15.8,52.9,15.1,52.2z M19.3,50.8c0.3-0.4,0.5-0.9,0.5-1.4c0-0.5-0.2-1-0.5-1.4 c-0.6-0.6-1.7-0.6-2.3,0c0,0,0,0,0,0c-0.4,0.4-0.5,0.9-0.5,1.4c0,0.5,0.2,1,0.5,1.4C17.6,51.4,18.7,51.4,19.3,50.8 C19.3,50.8,19.3,50.8,19.3,50.8z\"\n })), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M24.6,52.2c-1.3-1.6-1.3-4,0-5.6c0.6-0.7,1.5-1.1,2.5-1.1c0.9,0,1.7,0.4,2.2,1.1v-3.5h2.3v10.1h-2.3v-1.1 c-0.5,0.8-1.3,1.2-2.2,1.2C26.1,53.3,25.3,52.9,24.6,52.2z M28.8,50.8c0.4-0.4,0.5-0.9,0.5-1.4c0-0.5-0.1-1-0.5-1.4 c-0.6-0.6-1.7-0.6-2.3,0c0,0,0,0,0,0c-0.4,0.4-0.5,0.9-0.5,1.4c0,0.5,0.1,1,0.5,1.4c0.3,0.3,0.7,0.5,1.2,0.5 C28.1,51.2,28.5,51.1,28.8,50.8z\"\n })), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M35.8,44.7c-0.3,0.3-0.6,0.4-1,0.4c-0.4,0-0.7-0.1-1-0.4c-0.3-0.3-0.4-0.6-0.4-1c0-0.7,0.6-1.4,1.3-1.4 c0,0,0,0,0,0c0.4,0,0.7,0.1,1,0.4c0.3,0.3,0.4,0.6,0.4,1C36.2,44.1,36.1,44.5,35.8,44.7z M33.7,53.2v-7.6H36v7.6L33.7,53.2z\"\n })), _path19 || (_path19 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M40.4,45.6v1.1c0.5-0.8,1.4-1.3,2.3-1.2c0.8,0,1.6,0.3,2.1,0.9c0.6,0.7,0.9,1.5,0.8,2.4v4.4h-2.4V49 c0-0.4-0.1-0.8-0.4-1.1c-0.3-0.3-0.7-0.4-1.1-0.4c-0.4,0-0.8,0.1-1.1,0.4c-0.3,0.3-0.4,0.7-0.3,1.1v4.1H38v-7.6H40.4z\"\n })), _path20 || (_path20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M48,52.2c-1.3-1.6-1.3-4,0-5.6c0.6-0.7,1.5-1.1,2.5-1.1c0.9,0,1.7,0.4,2.2,1.1v-1H55v7.5 c0,1-0.3,1.9-0.9,2.7c-0.3,0.4-0.7,0.7-1.2,0.8c-0.6,0.2-1.2,0.3-1.8,0.3c-1,0.1-1.9-0.2-2.8-0.7c-0.7-0.5-1.1-1.3-1.2-2.2h2.3 c0.2,0.6,0.8,0.9,1.6,0.9c0.4,0,0.8-0.1,1.1-0.4c0.3-0.4,0.5-0.9,0.4-1.3v-1c-0.5,0.8-1.4,1.2-2.3,1.2C49.5,53.3,48.6,52.9,48,52.2 z M52.2,50.8c0.4-0.4,0.5-0.9,0.5-1.4c0-0.5-0.2-1-0.5-1.4c-0.3-0.3-0.7-0.5-1.2-0.5c-0.4,0-0.9,0.2-1.2,0.5 c-0.4,0.4-0.5,0.9-0.5,1.4c0,0.5,0.1,1,0.5,1.4c0.3,0.3,0.7,0.5,1.2,0.5C51.5,51.2,51.9,51.1,52.2,50.8z\"\n })), _path21 || (_path21 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M12.6,69.5V60h6.2v1.8h-3.9v2.1h2.9v1.8h-2.9v4L12.6,69.5z\"\n })), _path22 || (_path22 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M23.6,69.6c-1,0-2-0.4-2.7-1.1c-0.7-0.8-1.1-1.8-1.1-2.8c-0.1-1,0.3-2.1,1.1-2.8c0.7-0.7,1.7-1.1,2.7-1 c1,0,2,0.3,2.8,1c0.8,0.8,1.2,1.8,1.1,2.9c0,0.2,0,0.5-0.1,0.7h-5.2c0,0.3,0.2,0.6,0.5,0.8c0.2,0.2,0.5,0.3,0.8,0.3 c0.2,0,0.4,0,0.7-0.1c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.3-0.3h2.5c-0.2,0.8-0.7,1.4-1.3,1.8C25.3,69.4,24.4,69.6,23.6,69.6z M24.6,64.1c-0.3-0.2-0.6-0.3-1-0.3c-0.3,0-0.7,0.1-0.9,0.3c-0.3,0.2-0.4,0.5-0.5,0.9H25C25,64.7,24.9,64.3,24.6,64.1z\"\n })), _path23 || (_path23 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M32.2,69.6c-1,0-2-0.4-2.7-1.1c-1.4-1.6-1.4-4,0-5.7c0.7-0.7,1.7-1.1,2.7-1c1,0,2,0.3,2.8,1 c0.8,0.8,1.2,1.8,1.1,2.9c0,0.2,0,0.5,0,0.7h-5.3c0.1,0.6,0.6,1.1,1.3,1.1c0.2,0,0.4,0,0.7-0.1c0.1,0,0.2-0.1,0.3-0.2 c0.1-0.1,0.2-0.2,0.3-0.3h2.5c-0.2,0.8-0.7,1.4-1.3,1.8C33.9,69.4,33,69.6,32.2,69.6z M33.2,64.1c-0.3-0.2-0.6-0.3-1-0.3 c-0.3,0-0.7,0.1-0.9,0.3c-0.3,0.2-0.4,0.5-0.5,0.9h2.8C33.6,64.7,33.5,64.3,33.2,64.1L33.2,64.1z\"\n })), _path24 || (_path24 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8C95CA\",\n d: \"M37.1,64.2c0-0.7,0.3-1.3,0.9-1.7c0.7-0.5,1.5-0.7,2.3-0.7c0.8,0,1.7,0.2,2.4,0.7c0.6,0.4,0.9,1.1,1,1.8 h-2.4c0-0.2-0.1-0.4-0.3-0.5c-0.2-0.1-0.5-0.2-0.7-0.1c-0.6,0-0.9,0.2-0.9,0.6s0.4,0.6,1.1,0.7c0.7,0.1,1.4,0.3,2,0.6 c0.3,0.1,0.6,0.3,0.8,0.6c0.2,0.3,0.3,0.7,0.3,1.1c0,0.7-0.3,1.4-0.9,1.7c-0.7,0.5-1.5,0.7-2.3,0.7c-0.8,0-1.6-0.2-2.3-0.6 c-0.6-0.4-1-1.1-1-1.9h2.3c0.1,0.5,0.4,0.7,1,0.7c0.2,0,0.5-0.1,0.7-0.2c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.2-0.4-0.4-0.5 c-0.3-0.1-0.7-0.2-1.1-0.3c-0.4-0.1-0.8-0.2-1.3-0.3c-0.4-0.1-0.8-0.3-1.1-0.6C37.2,65.1,37,64.6,37.1,64.2z\"\n })), _path25 || (_path25 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F8B976\",\n d: \"M170.5,33c0,1.9-1.6,3.4-3.4,3.5H137c-1.9,0-3.4-1.6-3.4-3.5V21.5c0-1.9,1.6-3.4,3.4-3.5h30.1 c1.9,0,3.4,1.6,3.4,3.5V33z\"\n })), _path26 || (_path26 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M116.3,43.6h4.1c0.8,0,1.7,0.2,2.3,0.7c1,0.7,1.2,2.2,0.4,3.1c-0.3,0.5-0.9,0.8-1.4,0.9 c0.6,0.1,1.1,0.4,1.5,0.8c0.4,0.4,0.6,1,0.6,1.6c0,0.7-0.3,1.4-0.8,1.8c-0.7,0.5-1.5,0.7-2.3,0.7h-4.4V43.6z M118.6,45.4v2.1h1.5 c0.3,0,0.6-0.1,0.8-0.3c0.4-0.4,0.4-1.1,0-1.5c-0.2-0.2-0.5-0.3-0.8-0.3H118.6z M118.6,51.4h1.8c0.3,0,0.6-0.1,0.8-0.3 c0.4-0.4,0.5-1.1,0.1-1.5c-0.2-0.2-0.5-0.4-0.8-0.3h-1.8L118.6,51.4z\"\n })), _path27 || (_path27 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M126.1,52.2c-1.6-1.6-1.6-4.1,0-5.6c0.8-0.7,1.8-1,2.8-1c1,0,2,0.3,2.8,1c0.8,0.7,1.2,1.8,1.1,2.8 c0,1.1-0.4,2.1-1.1,2.8c-0.8,0.7-1.8,1.1-2.8,1.1C127.9,53.3,126.8,52.9,126.1,52.2z M130.1,50.8c0.3-0.4,0.5-0.9,0.5-1.4 c0-0.5-0.1-1-0.5-1.4c-0.3-0.3-0.7-0.5-1.1-0.5c-0.4,0-0.8,0.2-1.1,0.5c-0.3,0.4-0.5,0.9-0.5,1.4c0,0.5,0.1,1,0.5,1.4 c0.3,0.3,0.7,0.5,1.1,0.5C129.4,51.3,129.8,51.1,130.1,50.8L130.1,50.8z\"\n })), _path28 || (_path28 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M136.7,45.6V47c0.4-0.9,1.2-1.5,2.2-1.5v2.4h-0.6c-0.4,0-0.9,0.1-1.2,0.4c-0.3,0.4-0.4,0.9-0.4,1.3v3.6 h-2.3v-7.6H136.7z\"\n })), _path29 || (_path29 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M142.4,45.6V47c0.4-0.9,1.2-1.5,2.2-1.5v2.4H144c-0.4,0-0.9,0.1-1.2,0.4c-0.3,0.4-0.5,0.9-0.4,1.3v3.6h-2.3 v-7.6H142.4z\"\n })), _path30 || (_path30 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M146.5,52.2c-1.6-1.6-1.6-4.1,0-5.6c1.6-1.4,4-1.4,5.6,0c0.8,0.7,1.2,1.8,1.1,2.8c0,1.1-0.4,2.1-1.1,2.8 c-0.8,0.7-1.8,1.1-2.8,1.1C148.3,53.3,147.3,52.9,146.5,52.2z M150.4,50.8c0.3-0.4,0.5-0.9,0.5-1.4c0-0.5-0.2-1-0.5-1.4 c-0.6-0.6-1.6-0.7-2.2-0.1c0,0,0,0-0.1,0.1c-0.3,0.4-0.5,0.9-0.5,1.4c0,0.5,0.1,1,0.5,1.4c0.3,0.3,0.7,0.5,1.1,0.5 C149.7,51.3,150.1,51.1,150.4,50.8L150.4,50.8z\"\n })), _path31 || (_path31 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M163.3,45.6h2.2l-2.3,7.6h-2.5l-1.1-4.5l-1.1,4.5h-2.5l-2.3-7.6h2.3l1.2,5.3l1.2-5.3h2.5l1.2,5.3 L163.3,45.6z\"\n })), _path32 || (_path32 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M168.7,44.7c-0.3,0.3-0.6,0.4-1,0.4c-0.7,0-1.4-0.6-1.4-1.3c0,0,0,0,0,0c0-0.4,0.1-0.7,0.4-1 c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,1,0.4c0.3,0.3,0.4,0.6,0.4,1C169.1,44.1,168.9,44.5,168.7,44.7z M166.6,53.2v-7.6h2.3v7.6 L166.6,53.2z\"\n })), _path33 || (_path33 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M173.2,45.6v1.1c0.5-0.8,1.4-1.3,2.3-1.2c0.8,0,1.6,0.3,2.1,0.9c0.6,0.7,0.9,1.5,0.8,2.4v4.4h-2.3V49 c0-0.4-0.1-0.8-0.4-1.1c-0.6-0.5-1.5-0.5-2.1,0c-0.3,0.3-0.4,0.7-0.4,1.1v4.1h-2.3v-7.6H173.2z\"\n })), _path34 || (_path34 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M180.9,52.2c-1.3-1.6-1.3-4,0-5.6c0.6-0.7,1.5-1.1,2.4-1.1c0.9,0,1.7,0.4,2.2,1.1v-1h2.3v7.5 c0,1-0.3,1.9-0.9,2.7c-0.3,0.4-0.7,0.7-1.2,0.8c-0.6,0.2-1.2,0.3-1.8,0.3c-1,0.1-1.9-0.2-2.8-0.7c-0.7-0.5-1.1-1.3-1.1-2.2h2.2 c0.2,0.6,0.8,0.9,1.6,0.9c0.4,0,0.8-0.1,1.1-0.4c0.3-0.4,0.5-0.9,0.4-1.3v-1c-0.5,0.8-1.4,1.2-2.3,1.2 C182.4,53.3,181.5,52.9,180.9,52.2z M185.1,50.8c0.4-0.4,0.5-0.9,0.5-1.4c0-0.5-0.2-1-0.5-1.4c-0.3-0.3-0.7-0.5-1.1-0.5 c-0.4,0-0.9,0.2-1.2,0.5c-0.3,0.4-0.5,0.9-0.5,1.4c0,0.5,0.1,1,0.5,1.4c0.3,0.3,0.7,0.5,1.2,0.5C184.3,51.2,184.8,51.1,185.1,50.8z\"\n })), _path35 || (_path35 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M136.8,69.5V60h6.2v1.8h-3.9v2.1h2.9v1.8h-2.9v4L136.8,69.5z\"\n })), _path36 || (_path36 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M147.9,69.6c-1,0-2-0.4-2.7-1.1c-0.7-0.8-1.1-1.8-1.1-2.8c-0.1-1,0.3-2.1,1.1-2.8c0.7-0.7,1.7-1.1,2.7-1 c1,0,2,0.3,2.8,1c0.8,0.8,1.2,1.8,1.1,2.9c0,0.2,0,0.5-0.1,0.7h-5.2c0,0.3,0.2,0.6,0.4,0.8c0.2,0.2,0.5,0.3,0.8,0.3 c0.2,0,0.4,0,0.7-0.1c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.3-0.3h2.5c-0.2,0.7-0.7,1.4-1.3,1.8 C149.5,69.4,148.7,69.6,147.9,69.6z M148.9,64.1c-0.3-0.2-0.6-0.3-1-0.3c-0.3,0-0.7,0.1-0.9,0.3c-0.3,0.2-0.4,0.5-0.5,0.9h2.8 C149.3,64.7,149.1,64.3,148.9,64.1z\"\n })), _path37 || (_path37 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M156.5,69.6c-1,0-2-0.4-2.7-1.1c-1.4-1.6-1.4-4,0-5.7c0.7-0.7,1.7-1.1,2.7-1c1,0,2,0.3,2.8,1 c0.8,0.7,1.2,1.8,1.1,2.8c0,0.2,0,0.5-0.1,0.7h-5.2c0,0.3,0.2,0.6,0.4,0.8c0.2,0.2,0.5,0.3,0.8,0.3c0.2,0,0.4,0,0.7-0.1 c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.3-0.3h2.5c-0.2,0.7-0.7,1.4-1.3,1.8C158.2,69.4,157.3,69.6,156.5,69.6z M157.5,64.1 c-0.3-0.2-0.6-0.3-1-0.3c-0.3,0-0.7,0.1-0.9,0.3c-0.3,0.2-0.4,0.5-0.5,0.9h2.8C157.9,64.7,157.7,64.3,157.5,64.1L157.5,64.1z\"\n })), _path38 || (_path38 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F19844\",\n d: \"M161.3,64.2c0-0.7,0.3-1.3,0.9-1.7c0.7-0.5,1.5-0.7,2.3-0.7c0.8,0,1.7,0.2,2.4,0.7c0.6,0.4,0.9,1.1,0.9,1.8 h-2.4c0-0.2-0.1-0.4-0.3-0.5c-0.2-0.1-0.5-0.2-0.7-0.1c-0.6,0-0.9,0.2-0.9,0.6s0.4,0.6,1.1,0.7c0.7,0.1,1.4,0.3,2,0.6 c0.3,0.1,0.6,0.3,0.8,0.6c0.2,0.3,0.3,0.7,0.3,1.1c0,0.7-0.3,1.4-0.9,1.7c-0.7,0.5-1.5,0.7-2.3,0.7c-0.8,0-1.6-0.2-2.3-0.6 c-0.6-0.4-1-1.1-1-1.9h2.4c0.1,0.5,0.4,0.7,1,0.7c0.2,0,0.5-0.1,0.7-0.2c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.4-0.5 c-0.3-0.1-0.7-0.2-1.1-0.3c-0.4-0.1-0.8-0.2-1.3-0.3c-0.4-0.1-0.8-0.3-1.1-0.6C161.4,65,161.3,64.6,161.3,64.2z\"\n })), _path39 || (_path39 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#06A485\",\n d: \"M246.4,43.6h2.3v7.8h2.9v1.8h-5.2V43.6z\"\n })), _path40 || (_path40 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#06A485\",\n d: \"M256.2,53.3c-1,0-2-0.3-2.8-1.1c-0.7-0.8-1.1-1.8-1-2.8c-0.1-1,0.3-2.1,1-2.8c0.7-0.7,1.7-1.1,2.7-1 c1,0,2,0.3,2.8,1c0.8,0.8,1.2,1.8,1.1,2.9c0,0.2,0,0.5,0,0.7h-5.2c0,0.3,0.2,0.6,0.5,0.8c0.2,0.2,0.5,0.3,0.8,0.3 c0.2,0,0.4,0,0.7-0.1c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.3-0.3h2.5c-0.2,0.8-0.7,1.4-1.3,1.8C257.8,53,257,53.3,256.2,53.3z M257.2,47.8c-0.3-0.2-0.6-0.4-1-0.3c-0.3,0-0.7,0.1-0.9,0.3c-0.3,0.2-0.4,0.5-0.5,0.9h2.8C257.6,48.3,257.4,48,257.2,47.8 L257.2,47.8z\"\n })), _path41 || (_path41 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#06A485\",\n d: \"M263.9,45.6v1.1c0.5-0.8,1.4-1.3,2.3-1.2c0.8,0,1.6,0.3,2.1,0.9c0.6,0.7,0.9,1.5,0.8,2.4v4.4h-2.3V49 c0-0.4-0.1-0.8-0.4-1.1c-0.3-0.3-0.7-0.4-1.1-0.4c-0.4,0-0.8,0.1-1.1,0.4c-0.3,0.3-0.4,0.7-0.4,1.1v4.1h-2.3v-7.6H263.9z\"\n })), _path42 || (_path42 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#06A485\",\n d: \"M271.5,52.2c-1.3-1.6-1.3-4,0-5.6c0.6-0.7,1.5-1.1,2.5-1.1c0.9,0,1.7,0.4,2.2,1.1v-3.5h2.3v10.1h-2.3v-1.1 c-0.5,0.8-1.3,1.2-2.3,1.2C273,53.3,272.1,52.9,271.5,52.2z M275.7,50.8c0.3-0.4,0.5-0.9,0.5-1.4c0-0.5-0.2-1-0.5-1.4 c-0.6-0.6-1.6-0.6-2.3,0c-0.3,0.4-0.5,0.9-0.5,1.4c0,0.5,0.1,1,0.5,1.4c0.3,0.3,0.7,0.5,1.2,0.5C275,51.2,275.4,51,275.7,50.8z\"\n })), _path43 || (_path43 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#06A485\",\n d: \"M282.7,44.7c-0.3,0.3-0.6,0.4-1,0.4c-0.8,0-1.4-0.6-1.4-1.4c0-0.4,0.1-0.7,0.4-1c0.3-0.3,0.6-0.4,1-0.4 c0.4,0,0.7,0.1,1,0.4c0.3,0.3,0.4,0.6,0.4,1C283.1,44.1,282.9,44.5,282.7,44.7z M280.6,53.2v-7.6h2.3v7.6L280.6,53.2z\"\n })), _path44 || (_path44 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#06A485\",\n d: \"M287.2,45.6v1.1c0.5-0.8,1.4-1.3,2.3-1.2c0.8,0,1.6,0.3,2.1,0.9c0.6,0.7,0.9,1.5,0.8,2.4v4.4h-2.3V49 c0-0.4-0.1-0.8-0.4-1.1c-0.3-0.3-0.7-0.4-1.1-0.4c-0.4,0-0.8,0.1-1.1,0.4c-0.3,0.3-0.4,0.7-0.4,1.1v4.1h-2.3v-7.6H287.2z\"\n })), _path45 || (_path45 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#06A485\",\n d: \"M294.9,52.2c-1.3-1.6-1.3-4,0-5.6c0.6-0.7,1.5-1.1,2.5-1.1c0.9,0,1.7,0.4,2.2,1.1v-1h2.3v7.5 c0,1-0.3,1.9-0.9,2.7c-0.3,0.4-0.7,0.7-1.2,0.8c-0.6,0.2-1.2,0.3-1.8,0.3c-1,0.1-1.9-0.2-2.8-0.7c-0.7-0.5-1.1-1.3-1.2-2.2h2.3 c0.2,0.6,0.8,0.9,1.6,0.9c0.4,0,0.8-0.1,1.1-0.4c0.3-0.4,0.5-0.9,0.4-1.3v-1c-0.5,0.8-1.3,1.2-2.3,1.2 C296.3,53.3,295.5,52.9,294.9,52.2z M299.1,50.8c0.3-0.4,0.5-0.9,0.5-1.4c0-0.5-0.2-1-0.5-1.4c-0.6-0.6-1.7-0.6-2.3,0c0,0,0,0,0,0 c-0.4,0.4-0.5,0.9-0.5,1.4c0,0.5,0.2,1,0.5,1.4C297.4,51.4,298.4,51.4,299.1,50.8C299,50.8,299.1,50.8,299.1,50.8z\"\n })), _path46 || (_path46 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#06A485\",\n d: \"M258.9,69.5V60h6.2v1.8h-3.9v2.1h2.9v1.8h-2.9v4L258.9,69.5z\"\n })), _path47 || (_path47 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#06A485\",\n d: \"M269.9,69.6c-1,0-2-0.4-2.7-1.1c-1.4-1.6-1.4-4,0-5.7c0.7-0.7,1.7-1.1,2.7-1c1,0,2,0.3,2.8,1 c0.8,0.8,1.2,1.8,1.1,2.9c0,0.2,0,0.5,0,0.7h-5.2c0,0.3,0.2,0.6,0.4,0.8c0.2,0.2,0.5,0.3,0.8,0.3c0.2,0,0.4,0,0.7-0.1 c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.3-0.3h2.5c-0.2,0.8-0.7,1.4-1.3,1.8C271.6,69.4,270.8,69.6,269.9,69.6z M270.9,64.1 c-0.3-0.2-0.6-0.3-1-0.3c-0.3,0-0.7,0.1-0.9,0.3c-0.3,0.2-0.4,0.5-0.5,0.9h2.9C271.4,64.6,271.2,64.3,270.9,64.1L270.9,64.1z\"\n })), _path48 || (_path48 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#06A485\",\n d: \"M278.5,69.6c-1,0-2-0.4-2.7-1.1c-0.7-0.8-1.1-1.8-1.1-2.8c-0.1-1,0.3-2.1,1.1-2.8c0.7-0.7,1.7-1.1,2.7-1 c1,0,2,0.3,2.8,1c0.8,0.8,1.2,1.8,1.1,2.9c0,0.2,0,0.5,0,0.7h-5.2c0,0.3,0.2,0.6,0.5,0.8c0.2,0.2,0.5,0.3,0.8,0.3 c0.2,0,0.4,0,0.7-0.1c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.3-0.3h2.5c-0.2,0.8-0.7,1.4-1.3,1.8 C280.2,69.4,279.4,69.6,278.5,69.6z M279.5,64.1c-0.3-0.2-0.6-0.3-1-0.3c-0.3,0-0.7,0.1-0.9,0.3c-0.3,0.2-0.4,0.5-0.5,0.9h2.8 C279.9,64.7,279.8,64.3,279.5,64.1z\"\n })), _path49 || (_path49 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#06A485\",\n d: \"M283.4,64.2c0-0.7,0.3-1.3,0.9-1.7c0.7-0.5,1.5-0.7,2.3-0.7c0.8,0,1.7,0.2,2.4,0.7c0.6,0.4,1,1.1,1,1.8 h-2.4c0-0.2-0.1-0.4-0.3-0.5c-0.2-0.1-0.5-0.2-0.7-0.1c-0.6,0-0.9,0.2-0.9,0.6s0.4,0.6,1.1,0.7c0.7,0.1,1.4,0.3,2.1,0.6 c0.3,0.1,0.6,0.3,0.8,0.6c0.2,0.3,0.3,0.7,0.3,1.1c0,0.7-0.3,1.4-0.9,1.7c-0.7,0.5-1.5,0.7-2.3,0.7c-0.8,0-1.6-0.2-2.3-0.6 c-0.6-0.4-1-1.1-1-1.9h2.4c0.1,0.5,0.4,0.7,1,0.7c0.2,0,0.5-0.1,0.7-0.2c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.4-0.5 c-0.3-0.1-0.7-0.2-1.1-0.3c-0.4-0.1-0.8-0.2-1.2-0.3c-0.4-0.1-0.8-0.3-1.1-0.6C283.6,65.1,283.4,64.6,283.4,64.2z\"\n })), _path50 || (_path50 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#008D6C\",\n d: \"M259.5,19.9c0-0.8,0.2-1.8,0.5-3.9c0.3-1.5,0.9-2.9,1.7-4.1c0.3-0.4,0.8-0.6,1.2-0.5 c0.6,0.1,1.1,1.1,1.1,1.9c-0.1,3.8-1.5,5.2-0.9,7.4c0.2,0.8,0.6,1.5,1.1,2.1c1.1,1.2,2.2,1.5,2,1.8c-0.4,0.5-4.5,0.6-6.2-0.9 C259.4,23,259.4,22,259.5,19.9z\"\n })), _path51 || (_path51 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#3AB086\",\n d: \"M265.8,32.8c-3.4-3.1-5.9-7-7.4-11.3c-0.7-2.1-1.1-4.4-1-6.7c0.1-3.8,0.1-4.9,0.8-5.3 c0.4-0.2,0.8-0.3,1.2-0.1c0.6,0.4,0.4,1.5,0.4,2c-0.2,2.2,0.4,4.1,1.1,6.6c0.5,1.9,1.6,3.6,3,4.9c0.5,0.6,1.3,0.9,2.1,0.9 c0.6-0.1,1.2-0.5,1.5-1c0.4-0.5,0.1-1-0.4-3.6c-0.2-1-0.3-1.5,0-1.8c0.4-0.2,0.8-0.3,1.2-0.1c1,0.5,0.8,1.8,1.6,4.2 c0.5,1.4,1,2.7,1.8,4c1.2,2.3,1.6,2.2,2,3.4c0.5,1.4,0.7,4-0.7,5.2C271.4,35.5,268.2,35.2,265.8,32.8z\"\n })), _path52 || (_path52 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M259.7,11.4c0-0.5,0.2-1.6-0.4-2c-0.1-0.1-0.3-0.1-0.4-0.1c-0.4,1.7-0.7,3.5-0.6,5.2c0.1,3.6,1.1,7,2.9,10.1 c1,1.9,3.2,5.7,7,7.1c0.9,0.4,1.8,0.5,2.7,0.3c1.1-0.2,2.2-0.8,2.9-1.7c-0.1-0.5-0.2-1-0.3-1.5c-0.4-1.2-0.8-1.1-2-3.4 c-0.7-1.3-1.3-2.6-1.8-4c-0.8-2.4-0.6-3.8-1.6-4.2c-0.4-0.2-0.8-0.2-1.2,0.1c-0.3,0.3-0.2,0.8,0,1.8c0.5,2.6,0.8,3.1,0.4,3.6 c-0.3,0.5-0.9,0.9-1.5,1c-0.8,0-1.5-0.3-2.1-0.9c-1.4-1.3-2.5-3-3-4.9C260.1,15.6,259.6,13.6,259.7,11.4z\"\n })), _path53 || (_path53 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#008D6C\",\n d: \"M270.9,32.1c-0.9,0.1-1.9,0-2.7-0.3c-3.7-1.4-5.9-5.2-7-7.1c-1.8-3.1-2.8-6.5-2.9-10.1 c0-1.8,0.2-3.5,0.6-5.2c-0.3,0-0.6,0.1-0.8,0.2c-0.7,0.4-0.7,1.4-0.8,5.3c-0.1,2.3,0.3,4.5,1.1,6.7c1.5,4.3,4,8.2,7.4,11.3 c2.5,2.4,5.6,2.7,7.1,1.3c0.9-1,1.3-2.4,1-3.7C273.1,31.3,272.1,31.9,270.9,32.1z\"\n })), _path54 || (_path54 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#06A586\",\n d: \"M277.2,16c4.4,0,8-3.6,8-8s-3.6-8-8-8s-8,3.6-8,8S272.8,16,277.2,16z\"\n })), _path55 || (_path55 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M135.4,32.5c0.7,0.6,1.4,1.1,2.2,1.5l1.4,0.3h26.8c0.5-0.1,1-0.2,1.5-0.4c1.5-0.7,2.6-1.9,3.2-3.5v-9 c0-1.9-1.6-3.4-3.4-3.5H137c-1.9,0-3.4,1.6-3.4,3.5v9C134.1,31.3,134.7,31.9,135.4,32.5z\"\n })), _path56 || (_path56 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F5A657\",\n d: \"M133.6,30.5V33c0,1.9,1.6,3.4,3.4,3.5h30.1c1.9,0,3.4-1.6,3.4-3.5v-2.5c-0.6,1.5-1.8,2.8-3.2,3.5 c-0.5,0.2-1,0.3-1.5,0.4h-26.8c-1,0-2-0.2-2.9-0.5C134.7,33.2,133.8,31.9,133.6,30.5z\"\n })), _path57 || (_path57 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F8B976\",\n d: \"M151.4,4.4c0.1-0.2,5-0.4,7.8,3.4c1.5,2.1,2,4.8,1.4,7.3c-0.2-2.7-1.3-5.3-3.1-7.3 C154.8,5.1,151.3,4.6,151.4,4.4z\"\n })), _path58 || (_path58 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M276.5,0c-1.7,1.2-4.3,3.2-4.8,6.3c-0.3,2.1,0.3,4.2,1.6,5.9c2,2.2,5.5,2.9,9,1.8c3.3-2.9,3.6-8,0.7-11.3 c-1.5-1.7-3.6-2.7-5.9-2.7C277,0,276.7,0,276.5,0z\"\n })), _path59 || (_path59 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#008D6C\",\n d: \"M273.3,12.2c-1.4-1.6-2-3.8-1.6-5.9c0.5-3.1,3.1-5.1,4.8-6.3c-4.4,0.3-7.7,4.1-7.4,8.5 c0.3,4.4,4.1,7.7,8.5,7.4c1.7-0.1,3.4-0.8,4.7-2C278.8,15.2,275.3,14.4,273.3,12.2z\"\n })), _path60 || (_path60 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#A3D1AA\",\n d: \"M276.6,2c1.9-0.2,3.8,0.6,5.1,2c1,1.1,1.3,2.7,0.9,4.1c-0.2-1.6-0.9-3-2.1-4.1C279.4,3,278.1,2.3,276.6,2z\"\n })), _path61 || (_path61 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#008D6C\",\n d: \"M294.1,19.9c0-0.8-0.2-1.8-0.5-3.9c-0.3-1.5-0.9-2.9-1.7-4.1c-0.3-0.4-0.8-0.6-1.2-0.5 c-0.6,0.1-1.1,1.1-1.1,1.9c0.1,3.8,1.5,5.2,0.9,7.4c-0.2,0.8-0.5,1.5-1,2.1c-1.1,1.2-2.2,1.5-2,1.8c0.4,0.5,4.5,0.6,6.2-0.9 C294.2,23,294.2,22,294.1,19.9z\"\n })), _path62 || (_path62 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#3AB086\",\n d: \"M287.8,32.8c3.4-3.1,5.9-7,7.4-11.3c0.8-2.1,1.1-4.4,1-6.7c-0.1-3.8-0.1-4.9-0.8-5.3 c-0.4-0.2-0.8-0.3-1.2-0.1c-0.6,0.4-0.4,1.5-0.4,2c0.1,2.2-0.3,4.5-1.1,6.6c-0.5,1.9-1.6,3.6-3,4.9c-0.5,0.6-1.3,0.9-2.1,0.9 c-0.6-0.1-1.2-0.5-1.5-1c-0.4-0.5-0.1-1,0.4-3.6c0.2-1,0.3-1.5,0-1.8c-0.4-0.2-0.8-0.3-1.2-0.1c-1,0.5-0.8,1.8-1.6,4.2 c-0.5,1.4-1,2.7-1.8,4c-1.2,2.3-1.6,2.2-2,3.4c-0.5,1.4-0.7,4,0.7,5.2C282.2,35.5,285.4,35.2,287.8,32.8z\"\n })), _path63 || (_path63 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M293.9,11.4c0-0.5-0.2-1.6,0.4-2c0.1-0.1,0.3-0.1,0.4-0.1c0.5,1.7,0.7,3.5,0.6,5.2c-0.1,3.6-1.1,7-2.9,10.1 c-1,1.9-3.2,5.7-7,7.1c-0.9,0.4-1.8,0.5-2.7,0.3c-1.1-0.2-2.2-0.8-2.9-1.7c0.1-0.5,0.2-1,0.3-1.5c0.4-1.2,0.8-1.1,2-3.4 c0.7-1.3,1.3-2.6,1.8-4c0.8-2.4,0.6-3.8,1.6-4.2c0.4-0.2,0.8-0.2,1.2,0.1c0.3,0.3,0.2,0.8,0,1.8c-0.5,2.6-0.8,3.1-0.4,3.6 c0.3,0.5,0.9,0.9,1.5,1c0.8,0,1.5-0.3,2.1-0.9c1.4-1.3,2.5-3,3-4.9C293.6,15.9,293.9,13.7,293.9,11.4z\"\n })), _path64 || (_path64 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#008D6C\",\n d: \"M282.7,32.1c0.9,0.2,1.9,0,2.7-0.3c3.7-1.4,5.9-5.2,7-7.1c1.8-3.1,2.8-6.5,2.9-10.1c0-1.8-0.2-3.5-0.6-5.2 c0.3,0,0.6,0.1,0.8,0.2c0.7,0.4,0.7,1.4,0.8,5.3c0.1,2.3-0.3,4.5-1,6.7c-1.5,4.3-4,8.2-7.4,11.3c-2.5,2.4-5.6,2.7-7.1,1.3 c-0.9-1-1.3-2.4-1-3.7C280.5,31.3,281.5,31.9,282.7,32.1z\"\n })), _path65 || (_path65 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M9.2,20.4c0.1-0.2,1.3-0.4,2.2,0.2c0.7,0.6,1,1.4,1,2.2c-0.4-0.4-0.9-0.8-1.4-1.1 C9.8,20.8,9.1,20.6,9.2,20.4z\"\n })), _path66 || (_path66 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M19.4,15.4c0.1-0.3,1.4-0.4,2.2,0.2c0.7,0.6,1,1.4,1,2.2c-0.4-0.4-0.9-0.8-1.4-1.2 C20.1,15.8,19.4,15.6,19.4,15.4z\"\n })), _path67 || (_path67 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M29.4,9.3c0.1-0.3,1.3-0.4,2.2,0.2c0.7,0.6,1,1.4,1,2.2c-0.4-0.4-0.9-0.8-1.4-1.2C30,9.7,29.3,9.5,29.4,9.3 z\"\n })), _path68 || (_path68 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M38.8,5.3C38.9,5,40.1,4.8,41,5.5c0.7,0.6,1,1.4,1,2.2c-0.4-0.4-0.9-0.8-1.4-1.2 C39.5,5.7,38.7,5.5,38.8,5.3z\"\n })), _path69 || (_path69 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M33.3,93.7c3.1,10.7,9.1,20.3,17.5,27.7c7.2,6.2,15.8,10.6,25.1,12.9c3,0.8,6.1,1.3,9.2,1.6 c1.7,0.2,3.2-1.6,3.2-3.2c0-1.8-1.5-3.2-3.2-3.2l-1.2-0.1c-0.3,0,0.9,0.1,0,0l-1-0.2c-1.3-0.2-2.7-0.5-4-0.8 c-1.7-0.4-3.4-0.9-5.2-1.4c-0.8-0.3-1.6-0.6-2.4-0.9l-1.4-0.5l-0.8-0.4l-0.4-0.2c-9.4-4-17.4-10.7-22.9-19.3 c-2.8-4.2-4.9-8.9-6.2-13.7c-0.5-1.7-2.3-2.7-4-2.3S32.8,92,33.3,93.7L33.3,93.7z\"\n })), _path70 || (_path70 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M95.4,137.7c1.7-0.5,2.1-1.9,0.8-3.1L84.4,123c-1.3-1.2-2.7-0.9-3.1,0.9l-4.2,16c-0.4,1.7,0.6,2.8,2.3,2.3 L95.4,137.7z\"\n })), _path71 || (_path71 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M274.1,90c-0.6,2-1.2,3.9-2,5.8c0-0.1,0.2-0.4-0.1,0.2c-0.1,0.3-0.3,0.6-0.4,1c-0.2,0.5-0.5,1-0.7,1.5 c-0.6,1.2-1.2,2.4-1.9,3.6c-2.8,4.8-6.5,9.2-10.7,12.8c-3.6,3-7.6,5.5-11.8,7.5c-1.7,0.8-3.4,1.5-5.2,2.1c-1.8,0.6-3.5,1.1-5.3,1.6 c-1.6,0.4-3.2,0.7-4.8,1c-0.6,0.2-1.2,0.2-1.8,0.3c1.1,0.1,0.3,0-0.1,0l-0.7,0.1c-1.8,0-3.2,1.5-3.2,3.2c0,1.6,1.5,3.4,3.2,3.2 c18-2,34.9-11.3,44.8-26.7c3.1-4.8,5.4-10,7-15.4c0.5-1.7-0.6-3.5-2.3-4S274.5,88.2,274.1,90z\"\n })), _path72 || (_path72 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M218.3,135.7c-1.7-0.5-2.1-1.9-0.8-3.1l11.8-11.6c1.3-1.2,2.7-0.9,3.1,0.9l4.1,16c0.4,1.7-0.6,2.8-2.3,2.3 L218.3,135.7z\"\n })), _path73 || (_path73 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M149.1,79.7v27.5c0,4.2,6.5,4.2,6.5,0V79.7C155.6,75.6,149.1,75.6,149.1,79.7z\"\n })), _path74 || (_path74 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M150.5,123.6c0.9,1.5,2.4,1.5,3.2,0l8.3-14.3c0.9-1.5,0.2-2.8-1.6-2.8h-16.5c-1.8,0-2.5,1.3-1.6,2.8 L150.5,123.6z\"\n })), _path75 || (_path75 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M85.6,222.6c-2-2-2-5.2,0-7.2c2-1.9,5.1-1.9,7.2,0c1.9,2,1.9,5.2,0,7.2C90.7,224.5,87.6,224.5,85.6,222.6 L85.6,222.6z M91,221c0.9-1.2,0.9-2.9,0-4.1c-0.5-0.5-1.2-0.8-1.9-0.8c-0.7,0-1.4,0.3-1.9,0.8c-0.9,1.2-0.9,2.9,0,4.1 c0.5,0.5,1.2,0.8,1.9,0.8C89.9,221.8,90.5,221.6,91,221L91,221z\"\n })), _path76 || (_path76 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M96.6,222.6c-2-2-2-5.2,0-7.2c2-1.9,5.1-1.9,7.2,0c1.9,2,1.9,5.2,0,7.2C101.8,224.5,98.6,224.5,96.6,222.6 L96.6,222.6z M102.1,221c0.9-1.2,0.9-2.9,0-4.1c-1-1-2.7-1-3.8,0c-0.9,1.2-0.9,2.9,0,4.1C99.3,222.1,101,222.1,102.1,221z\"\n })), _path77 || (_path77 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M109.1,224h-2.4v-9.8h2.4v4.3l3.2-4.3h3.1l-4.1,4.8l4.1,4.9h-3.1l-3.3-4.3L109.1,224z\"\n })), _path78 || (_path78 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M116.8,224v-9.8h2.4v9.8H116.8z\"\n })), _path79 || (_path79 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M124.9,215.9v-1.8h7.8v1.8h-2.7v8h-2.4v-8H124.9z\"\n })), _path80 || (_path80 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M134.7,222.9c-1.6-1.6-1.6-4.2,0-5.8c1.7-1.4,4.1-1.4,5.8,0c0.8,0.7,1.2,1.8,1.2,2.9c0,1.1-0.4,2.2-1.2,2.9 c-0.8,0.7-1.8,1.1-2.9,1.1C136.5,224.1,135.5,223.7,134.7,222.9z M138.7,221.5c0.3-0.4,0.5-0.9,0.5-1.4c0-0.5-0.1-1.1-0.5-1.4 c-0.6-0.6-1.6-0.7-2.3-0.1c0,0,0,0-0.1,0.1c-0.7,0.9-0.7,2,0,2.9c0.3,0.3,0.7,0.5,1.2,0.5C138,222,138.4,221.8,138.7,221.5z\"\n })), _path81 || (_path81 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M145.6,224h-2.4v-10.4h2.4v5.8l2.4-3.3h3.2l-3.3,4l3.3,3.9H148l-2.5-3.1V224z\"\n })), _path82 || (_path82 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M155.6,224c-1,0-2.1-0.4-2.8-1.1c-1.5-1.7-1.5-4.2,0-5.8c0.8-0.7,1.8-1.1,2.8-1.1c1.1,0,2.1,0.3,2.9,1.1 c0.8,0.8,1.2,1.8,1.1,2.9c0,0.3,0,0.5-0.1,0.8h-5.4c0,0.3,0.2,0.6,0.5,0.9c0.2,0.2,0.5,0.3,0.8,0.3c0.2,0,0.5,0,0.7-0.1 c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.3-0.3h2.6c-0.2,0.8-0.7,1.4-1.3,1.9C157.4,223.8,156.5,224,155.6,224z M156.6,218.4 c-0.3-0.2-0.6-0.3-1-0.3c-0.4,0-0.7,0.1-1,0.3c-0.3,0.2-0.4,0.5-0.5,0.9h2.9C157.1,219,156.9,218.6,156.6,218.4L156.6,218.4z\"\n })), _path83 || (_path83 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M163.6,216.1v1.1c0.5-0.8,1.4-1.3,2.4-1.2c0.8,0,1.6,0.3,2.2,0.9c0.6,0.7,0.9,1.5,0.8,2.4v4.6h-2.4v-4.2 c0-0.4-0.1-0.8-0.4-1.2c-0.6-0.5-1.6-0.5-2.2,0c-0.3,0.3-0.4,0.7-0.4,1.2v4.2h-2.4v-7.8L163.6,216.1z\"\n })), _path84 || (_path84 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M178.5,215.8c-0.3,0-0.5,0.1-0.7,0.2c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7 c0.2,0.2,0.4,0.3,0.7,0.4c0.3,0.1,0.6,0.2,1,0.3s0.7,0.2,1,0.3c0.3,0.1,0.6,0.3,0.9,0.5c0.3,0.2,0.5,0.5,0.7,0.8 c0.5,1.2,0.2,2.5-0.8,3.4c-0.8,0.6-1.7,0.9-2.7,0.9c-1,0-1.9-0.2-2.7-0.8c-0.7-0.6-1.1-1.4-1-2.3h2.5c0,0.6,0.4,1.1,1,1.2 c0.1,0,0.1,0,0.2,0c0.3,0,0.6-0.1,0.8-0.3c0.4-0.4,0.4-1,0-1.4c-0.2-0.2-0.4-0.3-0.7-0.4c-0.3-0.1-0.6-0.2-0.9-0.3 c-0.3-0.1-0.7-0.2-1-0.3c-0.3-0.1-0.6-0.3-0.9-0.5c-0.3-0.2-0.5-0.5-0.7-0.8c-0.2-0.4-0.3-0.8-0.3-1.2c0-0.9,0.3-1.7,1-2.2 c0.7-0.6,1.7-0.9,2.6-0.8c0.9,0,1.8,0.2,2.6,0.7c0.7,0.6,1,1.4,1,2.3h-2.6c0-0.3-0.1-0.6-0.4-0.8 C179,215.9,178.8,215.8,178.5,215.8z\"\n })), _path85 || (_path85 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M187.5,221.9h0.9v2h-1.2c-0.7,0-1.4-0.2-2-0.6c-0.5-0.5-0.8-1.3-0.7-2v-3.2h-0.7v-2h0.7v-1.9h2.4v1.9h1.6v2 h-1.6v3.2C186.8,221.7,187.1,221.9,187.5,221.9z\"\n })), _path86 || (_path86 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M190.5,222.9c-1.4-1.7-1.4-4.1,0-5.8c0.6-0.7,1.6-1.1,2.5-1.1c0.9,0,1.8,0.4,2.3,1.1v-1h2.4v7.8h-2.4v-1.1 c-0.5,0.8-1.4,1.2-2.3,1.2C192,224.1,191.1,223.6,190.5,222.9z M194.8,221.4c0.7-0.8,0.7-2,0-2.8c-0.3-0.3-0.7-0.5-1.2-0.5 c-0.4,0-0.9,0.2-1.2,0.5c-0.4,0.4-0.5,0.9-0.5,1.4c0,0.5,0.1,1,0.5,1.4c0.3,0.3,0.7,0.5,1.2,0.5C194,222,194.5,221.8,194.8,221.4 L194.8,221.4z\"\n })), _path87 || (_path87 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M202.2,224h-2.4v-10.4h2.4v5.8l2.4-3.3h3.2l-3.3,4l3.3,3.8h-3.2l-2.5-3.1V224z\"\n })), _path88 || (_path88 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M212.3,224c-1,0-2.1-0.4-2.8-1.1c-1.5-1.7-1.5-4.2,0-5.8c0.8-0.7,1.8-1.1,2.8-1.1c1.1,0,2.1,0.3,2.9,1.1 c0.8,0.8,1.2,1.8,1.1,2.9c0,0.3,0,0.5-0.1,0.8h-5.4c0.1,0.7,0.6,1.2,1.3,1.2c0.2,0,0.5,0,0.7-0.1c0.1,0,0.2-0.1,0.3-0.2 c0.1-0.1,0.2-0.2,0.3-0.3h2.6c-0.2,0.8-0.7,1.4-1.3,1.9C214,223.8,213.1,224,212.3,224z M213.3,218.4c-0.3-0.2-0.6-0.3-1-0.3 c-0.4,0-0.7,0.1-1,0.3c-0.3,0.2-0.4,0.5-0.5,0.9h2.9C213.7,219,213.5,218.6,213.3,218.4L213.3,218.4z\"\n })), _path89 || (_path89 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M220.2,216.1v1.5c0.4-0.9,1.3-1.5,2.2-1.5v2.4h-0.6c-0.4,0-0.9,0.1-1.2,0.4c-0.3,0.4-0.5,0.9-0.4,1.4v3.7 h-2.4v-7.8L220.2,216.1z\"\n })), _path90 || (_path90 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#8E89C1\",\n d: \"M223.2,218.5c0-0.7,0.3-1.3,0.9-1.7c0.7-0.5,1.5-0.7,2.4-0.7c0.9,0,1.7,0.2,2.4,0.7c0.6,0.4,1,1.1,1,1.9 h-2.5c0-0.2-0.1-0.4-0.3-0.6c-0.2-0.1-0.5-0.2-0.7-0.1c-0.6,0-0.9,0.2-0.9,0.6s0.4,0.6,1.1,0.7c0.7,0.1,1.4,0.3,2.1,0.6 c0.3,0.1,0.6,0.4,0.8,0.6c0.2,0.3,0.3,0.7,0.3,1.1c0,0.7-0.3,1.4-0.9,1.8c-0.7,0.5-1.5,0.7-2.4,0.7c-0.8,0-1.7-0.2-2.4-0.6 c-0.6-0.4-1-1.2-1-1.9h2.4c0.1,0.5,0.4,0.7,1,0.7c0.2,0,0.5-0.1,0.7-0.2c0.2-0.1,0.3-0.3,0.3-0.5c0-0.2-0.1-0.4-0.5-0.5 c-0.4-0.1-0.7-0.2-1.1-0.3c-0.4-0.1-0.9-0.2-1.3-0.3c-0.4-0.1-0.8-0.4-1.1-0.7C223.3,219.4,223.2,218.9,223.2,218.5z\"\n })), _path91 || (_path91 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E28328\",\n d: \"M185.8,183.3v-0.4c0-0.3-0.1-0.5-0.2-0.7c-0.2-0.3-0.6-0.6-1.1-0.6l-5.4,0.1l-13.1,0.3l-15.8,0.4 l-13.7,0.3c-2.2,0.1-4.5,0.1-6.7,0.2l-0.1,0c-0.8,0-1.4,0.6-1.4,1.3l1,11.6c0,0.8,0.2,1.6,0.5,2.4c0.6,1.2,1.5,2.2,2.6,3 c2.9,2.2,6.8,3.4,10.5,4.1c5.1,1,10.2,1.5,15.4,1.3c4.8-0.1,9.6-0.7,14.2-1.7c3.6-0.9,7.2-2,10.2-4.1c1.9-1.3,3.5-3.1,3.5-5.4 C186,191.4,185.8,187.4,185.8,183.3L185.8,183.3z\"\n })), _ellipse || (_ellipse = /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"rotate(-1.087 156.98 183.94) scale(.99998)\",\n fill: \"#EAF471\",\n cx: 157,\n cy: 184,\n rx: 28.8,\n ry: 12.5\n })), _path92 || (_path92 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F6BE4E\",\n d: \"M157,195.1c15-0.1,27.1-5.3,27-11.7c0-6.4-12.2-11.5-27.1-11.4s-27.1,5.3-27,11.7 C129.9,190,142.1,195.1,157,195.1z\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"a\",\n d: \"M157,195.1c15-0.1,27.1-5.3,27-11.7s-12.2-11.5-27.1-11.4s-27.1,5.3-27,11.7S142.1,195.2,157,195.1z\"\n }))), _clipPath || (_clipPath = /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"b\"\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#a\",\n overflow: \"visible\"\n }))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#b)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E38329\",\n d: \"M183.7,181.6c3.4,5.4-5.5,11.3-19.8,13c-14.3,1.7-28.9-1.4-32.3-6.8c6.7,3.4,18.3,4.9,29.4,3.7 C172.8,190.2,181.9,186.3,183.7,181.6L183.7,181.6z\",\n opacity: 0.69\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#313076\"\n }, /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"matrix(1 -.00524 .00524 1 -.957 .768)\",\n cx: 146.2,\n cy: 183.2,\n rx: 1.7,\n ry: 0.7\n }), /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"matrix(1 -.00524 .00524 1 -.956 .88)\",\n cx: 167.8,\n cy: 183.1,\n rx: 1.7,\n ry: 0.7\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M154.9,183.6c-0.5,0-0.8,0.2-0.9,0.4c0,0.3,0.2,0.6,0.7,0.7c0.5,0.2,1.2,0.2,1.9,0.2 c0.7,0,1.3-0.1,1.8-0.3c0.3-0.1,0.5-0.2,0.6-0.4c0.1-0.1,0.2-0.3,0.1-0.4s-0.5-0.3-0.8-0.3C157.2,183.6,156.1,183.6,154.9,183.6\"\n }))), _path93 || (_path93 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E28328\",\n d: \"M174.3,147l-0.2-0.4c-0.1-0.3-0.3-0.4-0.5-0.6c-0.3-0.2-0.8-0.3-1.3-0.1l-4.9,2.4l-11.8,5.7l-14.2,6.9 l-12.3,5.9c-2,1-4.1,1.9-6,2.9H123c-0.7,0.3-1,1.1-0.8,1.8l5.7,10.2c0.4,0.7,0.9,1.4,1.5,2c1,0.8,2.3,1.4,3.6,1.6 c3.6,0.8,7.6,0.2,11.2-0.6c5-1.1,9.9-2.9,14.5-5.1c4.3-2.1,8.4-4.6,12.3-7.5c2.9-2.2,5.7-4.8,7.6-7.9c1.2-2,1.9-4.3,0.9-6.4 C177.8,154.2,176,150.6,174.3,147L174.3,147z\"\n })), _ellipse2 || (_ellipse2 = /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"rotate(-25.458 148.29 159.408)\",\n fill: \"#EAF471\",\n cx: 148.3,\n cy: 159.4,\n rx: 28.8,\n ry: 12.5\n })), _path94 || (_path94 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F6BE4E\",\n d: \"M152.9,169.5c13.6-6.2,22.4-16,19.8-21.8c-2.7-5.8-15.9-5.4-29.4,0.8c-13.6,6.2-22.5,16-19.8,21.8 C126.1,176.1,139.3,175.8,152.9,169.5L152.9,169.5z\"\n })), _defs2 || (_defs2 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"c\",\n d: \"M152.9,169.5c13.6-6.2,22.4-16,19.8-21.8s-15.9-5.4-29.4,0.8c-13.6,6.2-22.5,16-19.8,21.8 S139.3,175.8,152.9,169.5L152.9,169.5z\"\n }))), _clipPath2 || (_clipPath2 = /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"d\"\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#c\",\n overflow: \"visible\"\n }))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#d)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E38329\",\n d: \"M171.7,146.2c5.4,3.5-0.3,12.6-12.6,20c-12.3,7.5-26.9,10.7-32.2,7.2c7.6,0.4,18.7-3.1,28.4-8.8 C165.3,158.6,171.9,151.2,171.7,146.2L171.7,146.2L171.7,146.2z\",\n opacity: 0.69\n }))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#313076\"\n }, /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"rotate(-24.674 138.114 163.19)\",\n cx: 138.1,\n cy: 163.2,\n rx: 1.7,\n ry: 0.7\n }), /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"rotate(-24.674 157.737 154.172)\",\n cx: 157.8,\n cy: 154.2,\n rx: 1.7,\n ry: 0.7\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M146.3,160c-0.4,0.2-0.7,0.5-0.6,0.7c0.1,0.3,0.5,0.4,1,0.4c0.6-0.1,1.2-0.3,1.8-0.5 c0.6-0.3,1.1-0.6,1.5-1c0.2-0.2,0.3-0.4,0.4-0.6c0.1-0.2,0.1-0.3-0.1-0.5c-0.1-0.1-0.6-0.1-0.9,0.1 C148.4,159,147.3,159.5,146.3,160\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgOokiFlowchart);\nexport default __webpack_public_path__ + \"static/media/ooki-flowchart.2fe3319a.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2, _path3, _ellipse, _path4, _defs, _clipPath, _g, _g2, _path5, _ellipse2, _path6, _defs2, _clipPath2, _g3, _g4, _path7, _ellipse3, _path8, _defs3, _clipPath3, _g5, _g6, _path9, _path10, _path11, _path12;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgStake(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 56.1 81.5\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EB5F72\",\n d: \"M20.1,74.3c-0.2,0-0.5,0.1-0.6,0.2c-0.2,0.1-0.3,0.4-0.2,0.6c0,0.2,0.1,0.5,0.2,0.6 c0.2,0.2,0.4,0.3,0.6,0.4l0.8,0.2c0.3,0.1,0.6,0.2,0.9,0.3c0.3,0.1,0.6,0.2,0.8,0.4c0.3,0.2,0.5,0.4,0.6,0.7 c0.2,0.3,0.2,0.7,0.2,1.1c0,0.7-0.3,1.4-0.9,1.9c-0.7,0.5-1.5,0.8-2.4,0.8c-0.8,0-1.7-0.2-2.4-0.7c-0.6-0.5-0.9-1.2-0.9-2h2.2 c0,0.6,0.4,1,1,1c0,0,0,0,0.1,0c0.3,0,0.5-0.1,0.7-0.2c0.2-0.2,0.3-0.4,0.3-0.6c0-0.2-0.1-0.4-0.2-0.6c-0.2-0.2-0.4-0.3-0.6-0.4 c-0.2-0.1-0.5-0.2-0.8-0.2s-0.6-0.2-0.9-0.3c-0.3-0.1-0.6-0.2-0.8-0.4c-0.3-0.2-0.5-0.4-0.6-0.7C17,76,16.9,75.6,17,75.3 c0-0.7,0.3-1.5,0.9-1.9c0.7-0.5,1.5-0.8,2.3-0.7c0.8,0,1.6,0.2,2.3,0.6c0.6,0.5,0.9,1.2,0.9,2H21c0-0.3-0.1-0.5-0.3-0.7 C20.5,74.4,20.3,74.3,20.1,74.3z M28.1,79.6h0.8v1.8h-1.1c-0.6,0-1.3-0.1-1.8-0.5c-0.5-0.5-0.7-1.1-0.6-1.8v-2.8h-0.6v-1.8h0.6 v-1.7h2.1v1.7h1.4v1.8h-1.4v2.8C27.4,79.5,27.6,79.6,28.1,79.6L28.1,79.6z M34.4,79.2c0.3-0.3,0.5-0.8,0.5-1.3 c0-0.5-0.2-0.9-0.5-1.2c-0.3-0.3-0.7-0.4-1-0.4c-0.4,0-0.8,0.2-1,0.4c-0.3,0.3-0.5,0.8-0.5,1.3c0,0.5,0.1,0.9,0.5,1.2 c0.3,0.3,0.6,0.4,1,0.4C33.7,79.7,34.1,79.5,34.4,79.2L34.4,79.2z M30.7,80.5c-1.2-1.5-1.2-3.5,0-5c0.6-0.6,1.4-1,2.2-1 c0.8,0,1.5,0.3,2,1v-0.9H37v6.9h-2.1v-1c-0.4,0.7-1.2,1.1-2,1.1C32,81.6,31.2,81.2,30.7,80.5L30.7,80.5z M41,81.4h-2.2v-9.1h2.1 v5.1l2.1-2.9h2.8l-2.9,3.5l2.9,3.4h-2.8l-2.2-2.8L41,81.4z M49.8,81.5c-0.9,0-1.8-0.3-2.5-1c-0.7-0.7-1-1.6-1-2.6 c0-1,0.3-1.9,1-2.6c0.7-0.6,1.6-1,2.5-0.9c0.9,0,1.8,0.3,2.5,0.9c0.7,0.7,1.1,1.6,1,2.6c0,0.2,0,0.4,0,0.7h-4.8 c0.1,0.6,0.6,1,1.2,1c0.2,0,0.4,0,0.6-0.1c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.2-0.3H53c-0.2,0.7-0.6,1.3-1.2,1.7 C51.2,81.2,50.5,81.5,49.8,81.5L49.8,81.5z M51.1,77.4c0-0.3-0.2-0.6-0.4-0.8c-0.2-0.2-0.6-0.3-0.9-0.3c-0.3,0-0.6,0.1-0.8,0.3 c-0.2,0.2-0.4,0.5-0.4,0.8H51.1z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#DB4D65\",\n d: \"M38.1,6.1c1.2,1,2.7,2.5,5.6,5.4c2,2.2,3.5,4.8,4.5,7.5c0.3,0.9,0,1.9-0.6,2.5c-0.8,0.9-3,0.5-4.2-0.5 c-5.8-4.6-6.4-8.5-10.8-10.1c-1.4-0.6-3-0.8-4.5-0.7c-3.2,0.3-5,1.7-5.2,1.1c-0.3-1.2,4.3-7.8,8.6-8.7C33.3,2.4,35,3.6,38.1,6.1z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E28328\",\n d: \"M52.3,40.2V40c0-0.2,0-0.3-0.1-0.4c-0.1-0.2-0.3-0.3-0.6-0.3l-2.7,0l-6.6-0.1l-8-0.1L27.4,39 c-1.1,0-2.3,0-3.4,0h0c-0.4,0-0.7,0.2-0.7,0.6l0.3,5.9c0,0.4,0.1,0.8,0.2,1.2c0.3,0.6,0.7,1.2,1.3,1.6c1.5,1.2,3.4,1.8,5.2,2.3 c2.5,0.6,5.1,0.9,7.7,0.9c2.4,0,4.8-0.2,7.2-0.6c1.8-0.4,3.7-0.9,5.2-1.9c1-0.6,1.8-1.5,1.9-2.7C52.3,44.2,52.3,42.2,52.3,40.2 L52.3,40.2z\"\n })), _ellipse || (_ellipse = /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"matrix(.01658 -.9999 .9999 .01658 -2.77 77.074)\",\n fill: \"#EAF471\",\n cx: 37.8,\n cy: 39.9,\n rx: 6.3,\n ry: 14.6\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F6BE4E\",\n d: \"M37.6,45.6c7.6,0.2,13.8-2.2,13.8-5.4s-6-6-13.5-6.3s-13.8,2.2-13.9,5.4S30,45.3,37.6,45.6L37.6,45.6z\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"a\",\n d: \"M37.6,45.6c7.6,0.2,13.8-2.2,13.8-5.4s-6-6-13.5-6.3c-7.5-0.2-13.8,2.2-13.9,5.4S30,45.3,37.6,45.6 L37.6,45.6z\"\n }))), _clipPath || (_clipPath = /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"b\"\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#a\",\n overflow: \"visible\"\n }))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#b)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E38329\",\n d: \"M51.3,39.2c1.6,2.8-3,5.6-10.2,6.2c-7.2,0.6-14.6-1.2-16.2-4c3.3,1.9,9.2,2.8,14.8,2.4 C45.7,43.4,50.3,41.6,51.3,39.2C51.3,39.2,51.3,39.2,51.3,39.2z\",\n opacity: 0.69\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#313076\"\n }, /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"rotate(-88.26 32.349 39.364) scale(.99996)\",\n cx: 32.3,\n cy: 39.4,\n rx: 0.4,\n ry: 0.9\n }), /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"rotate(-88.26 43.26 39.69) scale(.99996)\",\n cx: 43.3,\n cy: 39.7,\n rx: 0.4,\n ry: 0.9\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M36.8,39.7c-0.2,0-0.4,0.1-0.5,0.2c0,0.1,0.1,0.3,0.4,0.4c0.3,0.1,0.6,0.2,0.9,0.2c0.3,0,0.6,0,0.9-0.1 c0.1,0,0.2-0.1,0.3-0.2S39,40,38.9,40c0-0.1-0.2-0.2-0.4-0.2C37.9,39.8,37.3,39.8,36.8,39.7\"\n }))), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E28328\",\n d: \"M52.3,33.4v-0.2c0-0.2,0-0.3-0.1-0.4c-0.1-0.2-0.3-0.3-0.6-0.3l-2.7,0l-6.6,0.1l-8,0.1l-6.9,0.1 c-1.1,0-2.3,0-3.4,0h0c-0.4,0-0.7,0.3-0.7,0.6l0.4,5.9c0,0.4,0.1,0.8,0.2,1.2c0.3,0.6,0.8,1.1,1.3,1.5c1.5,1.1,3.4,1.7,5.3,2.1 c2.5,0.5,5.2,0.8,7.8,0.7c2.4,0,4.8-0.3,7.2-0.8c1.8-0.4,3.7-1,5.2-2c1-0.6,1.8-1.6,1.8-2.7C52.4,37.5,52.3,35.5,52.3,33.4z\"\n })), _ellipse2 || (_ellipse2 = /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"matrix(1 -.0082 .0082 1 -.274 .31)\",\n fill: \"#EAF471\",\n cx: 37.7,\n cy: 33.6,\n rx: 14.6,\n ry: 6.3\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F6BE4E\",\n d: \"M37.7,39.2c7.6,0,13.7-2.5,13.7-5.8s-6.1-5.9-13.7-5.9C30.2,27.5,24,30,24,33.3S30.1,39.1,37.7,39.2 L37.7,39.2z\"\n })), _defs2 || (_defs2 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"c\",\n d: \"M37.7,39.2c7.6,0,13.7-2.5,13.7-5.8s-6.1-5.9-13.7-5.9c-7.6,0-13.7,2.5-13.7,5.8S30.1,39.2,37.7,39.2 L37.7,39.2z\"\n }))), _clipPath2 || (_clipPath2 = /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"d\"\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#c\",\n overflow: \"visible\"\n }))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#d)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E38329\",\n d: \"M51.3,32.5c1.7,2.8-2.8,5.7-10.1,6.5c-7.2,0.8-14.6-0.8-16.3-3.6c3.4,1.8,9.2,2.6,14.9,2 C45.7,36.9,50.3,34.9,51.3,32.5L51.3,32.5z\",\n opacity: 0.69\n }))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#313076\"\n }, /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"matrix(.00559 -1 1 .00559 -1.059 65.226)\",\n cx: 32.3,\n cy: 33.1,\n rx: 0.4,\n ry: 0.9\n }), /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"matrix(.00559 -1 1 .00559 9.74 76.187)\",\n cx: 43.2,\n cy: 33.2,\n rx: 0.4,\n ry: 0.9\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M36.7,33.4c-0.2,0-0.4,0.1-0.4,0.2c0,0.1,0.1,0.3,0.4,0.4c0.3,0.1,0.6,0.1,0.9,0.1c0.3,0,0.6,0,0.9-0.1 c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.1,0.1-0.2s-0.2-0.1-0.4-0.1C37.8,33.4,37.3,33.4,36.7,33.4\"\n }))), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E28328\",\n d: \"M54.1,26l0.1-0.2c0.1-0.1,0.1-0.3,0-0.4c0-0.2-0.2-0.4-0.4-0.5l-2.5-1l-6.1-2.5l-7.4-3l-6.4-2.6 c-1-0.4-2.1-0.9-3.1-1.3l0,0c-0.3-0.2-0.8,0-0.9,0.3l-1.9,5.5c-0.1,0.4-0.2,0.8-0.2,1.2c0,0.7,0.2,1.3,0.6,1.9 c0.9,1.6,2.5,2.9,4,4c2.1,1.5,4.4,2.8,6.8,3.7c2.2,0.9,4.6,1.6,6.9,2.1c1.8,0.3,3.7,0.5,5.5,0.2c1.1-0.2,2.3-0.8,2.7-1.8 C52.5,29.8,53.3,27.9,54.1,26L54.1,26z\"\n })), _ellipse3 || (_ellipse3 = /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"rotate(-67.33 40.65 20.462)\",\n fill: \"#EAF471\",\n cx: 40.6,\n cy: 20.5,\n rx: 6.3,\n ry: 14.6\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F6BE4E\",\n d: \"M38.4,25.6c6.9,3,13.6,3,14.9,0.1S50,17.9,43.1,14.9s-13.6-3.1-14.9-0.1S31.5,22.6,38.4,25.6z\"\n })), _defs3 || (_defs3 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"e\",\n d: \"M38.4,25.6c6.9,3,13.6,3,14.9,0.1S50,17.9,43.1,14.9s-13.6-3.1-14.9-0.1S31.5,22.6,38.4,25.6z\"\n }))), _clipPath3 || (_clipPath3 = /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"f\"\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#e\",\n overflow: \"visible\"\n }))), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#f)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E38329\",\n d: \"M53.5,24.8c0.5,3.2-4.8,4.1-11.8,2s-13.1-6.5-13.6-9.7c2.4,3,7.5,6,12.9,7.7 C46.7,26.6,51.7,26.6,53.5,24.8L53.5,24.8L53.5,24.8z\",\n opacity: 0.69\n }))), _g6 || (_g6 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#313076\"\n }, /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"rotate(-66.54 35.811 17.901)\",\n cx: 35.8,\n cy: 17.9,\n rx: 0.4,\n ry: 0.9\n }), /*#__PURE__*/React.createElement(\"ellipse\", {\n transform: \"rotate(-66.54 45.827 22.25)\",\n cx: 45.8,\n cy: 22.2,\n rx: 0.4,\n ry: 0.9\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.8,19.9c-0.2-0.1-0.4-0.1-0.5,0c-0.1,0.1,0,0.3,0.2,0.5c0.2,0.2,0.5,0.4,0.8,0.5 c0.3,0.1,0.6,0.2,0.9,0.2c0.2,0,0.3,0,0.3,0c0.1,0,0.2-0.1,0.2-0.2s-0.2-0.2-0.3-0.3C40.8,20.4,40.3,20.1,39.8,19.9\"\n }))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EE8097\",\n d: \"M10.4,1c5.1-0.9,15.5-2.3,26.5,1.5c4.3,1.3,8.3,3.4,11.8,6.1c6,4.6,7.5,5.8,7.4,7.4c-0.1,0.8-0.5,1.6-1.3,2 c-1.2,0.5-2.8-1.1-3.5-1.7c-3.3-2.9-7-4.2-11.7-5.9c-3.6-1.3-7.5-1.7-11.2-1c-2.1,0.4-3.2,1.1-3.9,2.2c-0.5,1.1-0.6,2.4-0.2,3.5 c0.4,1.2,1.5,1.3,6.2,3.6c1.8,0.9,2.8,1.4,2.8,2.2c-0.1,0.8-0.5,1.6-1.3,2c-1.9,1.1-3.9-0.8-8.6-2.5c-2.7-0.9-5.5-1.5-8.3-1.8 c-5-0.7-5.4,0-7.7-0.8c-2.7-0.9-7.1-3.6-7.4-7.1C-0.4,6.8,3.8,2.1,10.4,1z\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M4.9,9.2c0.9,1.8,2.4,3.3,4.3,4.3c1.4,0.7,2.1,0.6,4.5,1.1c2.8,0.6,5.5,1.5,8.1,2.8c4.2,1.9,4.3,2.8,6.6,3.2 c1.6,0.3,3.2,0.2,4.7-0.3c-0.8-0.7-1.6-1.2-2.6-1.6c-4.2-2-5.6-2.3-6.1-3.2c0,0.3,0,0.6,0,0.8c-1.2-1.3-1.9-3.1-2-4.9 c0-1.3,0.3-2.5,0.8-3.6c2.9-0.6,5.8-0.8,8.8-0.6c6.9,0.3,13.6,2.8,19,7.1c0.9,0.8,1.8,1.6,2.6,2.5c0.3,0.2,0.7,0.2,1,0.3 c0.5,0,0.9-0.1,1.3-0.3c0.1-0.2,0.1-0.4,0.1-0.6c0.1-1.5-1.4-2.8-7.4-7.4c-3.5-2.8-7.6-4.9-11.9-6.2C25.9-1.2,15.5,0.1,10.4,1 c-2,0.3-4,1-5.7,2.1C4,5.1,4.1,7.3,4.9,9.2z\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EB5F72\",\n d: \"M28.4,20.6c-2.3-0.4-2.5-1.3-6.6-3.2c-2.6-1.2-5.3-2.2-8.1-2.8c-2.4-0.5-3.1-0.4-4.5-1.1 c-1.8-0.9-3.3-2.4-4.3-4.3C4.1,7.3,4,5.1,4.7,3.1c-3.2,2-4.9,4.9-4.6,7.5c0.3,3.5,4.7,6.2,7.4,7.1c2.3,0.8,2.7,0.1,7.7,0.8 c2.8,0.3,5.6,0.9,8.3,1.8c4.7,1.6,6.7,3.5,8.6,2.5c0.8-0.4,1.2-1.2,1.3-2c0-0.2-0.1-0.4-0.2-0.6C31.6,20.7,30,20.8,28.4,20.6z\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EB5F72\",\n d: \"M53.7,16.7C52.8,15.8,52,15,51,14.2C45.6,9.9,39,7.4,32,7.1c-2.9-0.1-5.9,0.1-8.8,0.7 c-0.6,1.1-0.9,2.4-0.9,3.6c0.1,1.8,0.8,3.6,2,4.9c0-0.3,0-0.6,0-0.8c-0.1-0.1-0.1-0.2-0.1-0.3c-0.4-1.1-0.3-2.4,0.2-3.5 c0.6-1.1,1.8-1.8,3.9-2.2c3.8-0.7,7.6-0.3,11.2,1c4.7,1.7,8.4,3.1,11.7,5.9c0.7,0.6,2.3,2.1,3.5,1.7c0.6-0.3,1-0.8,1.2-1.4 c-0.4,0.2-0.9,0.4-1.3,0.3C54.3,16.9,54,16.8,53.7,16.7z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgStake);\nexport default __webpack_public_path__ + \"static/media/stake.6b5374cb.svg\";\nexport { ForwardRef as ReactComponent };","import hashUtils from 'app-lib/hashUtils'\nimport { links } from 'bzx-common/src/config/appConfig'\nimport { Button, ButtonClipboard, Icon, Tooltip } from 'bzx-common/src/ui-framework'\nimport _ from 'lodash'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport DashboardVM from '../DashboardVM'\nimport { ReactComponent as CoinGecco } from './coin-gecco.svg'\nimport { ReactComponent as Govern } from './govern.svg'\nimport { ReactComponent as OokiTokenIllustration } from './ooki-flowchart.svg'\nimport { ReactComponent as Stake } from './stake.svg'\n\nexport function OurToken({ vm }: { vm: DashboardVM }) {\n return (\n
\n
\n
\n \n OOKI is a multi-chain token\n \n
    \n {vm.ookiInfo.map((info) => (\n
  • \n \n \n {hashUtils.shortHash(info.address, 8, 6)}\n \n \n
  • \n ))}\n
\n
\n
\n\n

The OokiDAO {'&'} Tokenized Ownership Model

\n

\n The OOKI Token was designed to kickstart liquidity, network effects, and create long term\n aligned stakeholders. OOKI is a governance token first and foremost. An active and vibrant\n community of stakeholders collectively advancing the protocol is at the heart of OOKI.{' '}\n \n Learn More\n \n

\n
\n \n\n
\n
\n \n

\n Earn a percentage of OOKI protocol fees when you stake OOKI Tokens.\n

\n \n View info \n \n
\n
\n \n

\n Vote through OOKI DAO on proposals relating to governance.\n

\n \n Buy OOKI \n \n \n

Buy Ooki on:

\n
    \n {_.map(links.buyOoki, (link) => {\n return (\n
  • \n \n {' '}\n {link.title}\n \n
  • \n )\n })}\n
\n \n
\n
\n
\n {/* TODO: WE WILL SHOW STATS ONCE WE HAVE THEM. */}\n {/*
\n
\n

Price

\n

\n $0.24\n

\n
\n
\n

Circulating Supply

\n

\n $140,610,067\n

\n
\n
\n

Total Supply

\n

\n $1,030,000,000\n

\n
\n
*/}\n
\n )\n}\n\nexport default observer(OurToken)\n","export default __webpack_public_path__ + \"static/media/shop-banner.bb443da3.jpeg\";","import { links } from 'bzx-common/src/config/appConfig'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport shopBanner from './shop-banner.jpeg'\n\nexport default function Shop() {\n return (\n
\n
\n \n
\n
\n
\n

Get your OOKI Gear!

\n
    \n
  • T-Shirts
  • \n
  • Hoodies
  • \n
  • Jackets
  • \n
  • Hats
  • \n
  • Collectibles
  • \n
\n
\n
\n OOKI merch drops are limited and restocks are rare.\n
\n \n Shop Now\n \n
\n
\n )\n}\n","import { links } from 'bzx-common/src/config/appConfig'\nimport _ from 'lodash'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Icon } from 'ui-framework'\n\nexport function Socials() {\n return (\n
\n
\n

Our Channels

\n
\n \n {links.blog.title}\n \n
\n

Social networks

\n
\n {_.map(links.socials, (social, key) => (\n
\n \n {social.title}\n \n
\n ))}\n
\n\n

Developers

\n
\n \n {links.github.title}\n \n
\n
\n\n
\n

Crypto Platforms

\n
\n {links.cryptoPlatforms.map((platform) => (\n
\n \n {platform.title}\n \n
\n ))}\n
\n
\n
\n )\n}\n\nexport default React.memo(Socials)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport { Redirect, Route } from 'react-router-dom'\nimport DashboardFooter from './DashboardFooter'\nimport DashboardNav from './DashboardNav'\nimport DashboardVM from './DashboardVM'\nimport Learn from './Learn'\nimport Lobby from './Lobby'\nimport Nfts from './Nfts'\nimport OurToken from './OurToken'\nimport Shop from './Shop'\nimport Socials from './Socials'\n\nexport function Dashboard({ vm }: { vm: DashboardVM }) {\n return (\n
\n \n } />\n } />\n } />\n } />\n } />\n } />\n \n \n \n\n \n
\n )\n}\n\nexport default observer(Dashboard)\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { chainConfigs, ChainId, getBlockExplorerAddressLink } from 'bzx-common/src/config/appConfig'\nimport { RootStore } from 'bzx-common/src/stores'\nimport * as mobx from 'mobx'\nimport { DialogVM } from 'ui-framework'\n\nconst ookiChains: ChainId[] = [1, 56, 137, 42161]\n\nexport default class DashboardVM {\n rootStore: RootStore\n appUpdatesViewMore = new DialogVM({ id: 'appUpdatesViewMore' })\n\n get ookiInfo() {\n return ookiChains.map((chainId) => {\n const info = assetUtils.getInfo(chainId, Asset.OOKI)\n return {\n ...info,\n chainIcon: chainConfigs[chainId].icon,\n chainId,\n ookiExplorerLink: getBlockExplorerAddressLink(chainId, info.address),\n }\n })\n }\n\n private init() {\n setTimeout(() => {\n !this.rootStore.statsStore.stats.loaded && this.rootStore.statsStore.stats.fetch()\n this.rootStore.stakingStore.dao.getSnapshotProposals()\n this.rootStore.blogStore.posts.fetch()\n }, 2000)\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n this.init()\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport Dashboard from './Dashboard'\nimport DashboardVM from './DashboardVM'\nexport default withVM(Dashboard, DashboardVM)\n","import { getAssetFromAddress, Asset } from 'app-lib/assetUtils'\nimport { abbreviate } from 'app-lib/numberUtils'\nimport chainConfigs from 'bzx-common/src/config/chains'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Button, InputBasic } from 'ui-framework'\nimport DebugVM from './DebugVM'\n\nconst knownAddresses = Object.values(chainConfigs).reduce((acc, chain) => {\n acc[chain.contracts.bzx.toLowerCase()] = `bzxContract ${chain.chainDetails.shortName}`\n return acc\n}, {} as Record)\n\nfunction SpendingApprovals({ vm }: { vm: DebugVM }) {\n const { chainId, isConnected } = vm.rootStore.web3Connection\n\n if (!chainId || !isConnected) {\n return null\n }\n\n return (\n
\n
\n

\n Approvals\n \n Get Approvals\n \n

\n\n
\n \n \n
\n
\n \n \n \n \n \n \n \n \n \n \n {vm.spendingApprovals.map((approval) => {\n let spenderLabel = knownAddresses[approval.spender.toLowerCase()]\n if (!spenderLabel) {\n const asset = getAssetFromAddress(chainId, approval.spender)\n if (asset !== Asset.UNKNOWN) {\n spenderLabel = asset\n }\n }\n if (!spenderLabel) {\n spenderLabel = approval.spender\n }\n return (\n \n \n \n \n \n \n \n )\n })}\n \n
TokenToken addressSpenderAmount\n
{approval.token}{approval.assetAddress}{spenderLabel}{abbreviate(approval.amount)}\n \n Remove\n \n
\n
\n
\n
\n )\n}\n\nexport default observer(SpendingApprovals)\n","import React from 'react'\nimport DebugVM from './DebugVM'\nimport { Input, Button, InputBasic } from 'ui-framework'\nimport { observer } from 'mobx-react'\nimport { autoFormat } from 'app-lib/numberUtils'\nimport SpendingApprovals from './SpendingApprovals'\n\nfunction Debug({ vm }: { vm: DebugVM }) {\n const { web3Connection, userWallet, settings } = vm.rootStore\n\n return (\n
\n
\n
\n

Version

\n {process.env.APP_VERSION} {`Commit ${process.env.GIT_COMMIT}`}\n
\n
\n

Impersonate 🕵️

\n
\n
\n \n \n
\n
\n {web3Connection.impersonateAddress && (\n <>\n

\n Currently impersonating:{' '}\n \n {web3Connection.shortWalletAddress}\n \n

\n \n )}\n
\n
\n {web3Connection.impersonateAddress && (\n
\n

🕵️ Impersonated user balances

\n
\n \n {userWallet.nativeBalance.token}{' '}\n \n {autoFormat(userWallet.nativeBalance.amount)}\n \n \n {userWallet.balances\n .filter((balance) => !balance.amount.isZero())\n .map((balance) => (\n
\n {balance.token}{' '}\n {autoFormat(balance.amount)}\n
\n ))}\n
\n
\n )}\n\n \n\n
\n

Options

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n Override protocol version\n \n \n \n \n \n
\n
\n Note: this will override the version for all chains configs. So any chain which contracts\n does not match the version will fail on breaking changes.\n
\n
\n
\n )\n}\n\nexport default observer(Debug)\n","var _polygon, _rect, _path, _ellipse, _ellipse2, _ellipse3;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgOokiLogo(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n x: \"0px\",\n y: \"0px\",\n width: \"136px\",\n height: \"50px\",\n viewBox: \"0 0 136 50\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"ooki-logo-a\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 137.851,\n y1: -635.7874,\n x2: 66.3971,\n y2: -571.6544,\n gradientTransform: \"matrix(1 0 0 -1 0 -571.86)\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n style: {\n stopColor: \"#004cff\"\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n style: {\n stopColor: \"#66d4ff\"\n }\n })), _polygon || (_polygon = /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"url(#ooki-logo-a)\",\n points: \"105.5,14.4 94.8,28.9 94.8,3.1 84.2,3.1 84.2,49 94.8,49 94.8,35.2 105.6,49 119.7,49 104.9,32.1 119.7,14.4\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"ooki-logo-b\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 150.3138,\n y1: -621.8782,\n x2: 78.8042,\n y2: -557.7003,\n gradientTransform: \"matrix(1 0 0 -1 0 -571.86)\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n style: {\n stopColor: \"#004cff\"\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n style: {\n stopColor: \"#66d4ff\"\n }\n })), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 124.6,\n y: 14.4,\n fill: \"url(#ooki-logo-b)\",\n width: 10.6,\n height: 34.6\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"ooki-logo-c\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 162.9457,\n y1: -607.7003,\n x2: 91.5215,\n y2: -543.5945,\n gradientTransform: \"matrix(1 0 0 -1 0 -571.86)\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n style: {\n stopColor: \"#004cff\"\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n style: {\n stopColor: \"#66d4ff\"\n }\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#ooki-logo-c)\",\n d: \"M129.9,12.3c1.8,0,3.2-0.6,4.4-1.8s1.8-2.6,1.8-4.4s-0.6-3.2-1.8-4.4c-1.2-1.2-2.6-1.8-4.4-1.8 s-3.2,0.6-4.4,1.8c-1.2,1.2-1.8,2.6-1.8,4.4s0.6,3.2,1.8,4.4C126.7,11.7,128.1,12.3,129.9,12.3z\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"ooki-logo-d\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 119.216,\n y1: -655.351,\n x2: 47.7913,\n y2: -591.2448,\n gradientTransform: \"matrix(1 0 0 -1 0 -571.86)\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n style: {\n stopColor: \"#004cff\"\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n style: {\n stopColor: \"#66d4ff\"\n }\n })), _ellipse || (_ellipse = /*#__PURE__*/React.createElement(\"ellipse\", {\n fill: \"url(#ooki-logo-d)\",\n cx: 60.2,\n cy: 30.5,\n rx: 19.4,\n ry: 19.5\n })), /*#__PURE__*/React.createElement(\"radialGradient\", {\n id: \"ooki-logo-e\",\n cx: 57.1886,\n cy: -645.3253,\n r: 115.4541,\n gradientTransform: \"matrix(.2912 .06588 .06563 -.2923 81.489 -166.698)\",\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n style: {\n stopColor: \"#fff\",\n stopOpacity: 0\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.99,\n style: {\n stopColor: \"#0952ff\"\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n style: {\n stopColor: \"#004cff\"\n }\n })), _ellipse2 || (_ellipse2 = /*#__PURE__*/React.createElement(\"ellipse\", {\n fill: \"url(#ooki-logo-e)\",\n cx: 60.2,\n cy: 30.5,\n rx: 19.4,\n ry: 19.5\n })), /*#__PURE__*/React.createElement(\"radialGradient\", {\n id: \"ooki-logo-f\",\n cx: 93.9677,\n cy: -1164.0817,\n r: 214.3878,\n gradientTransform: \"matrix(.2985 0 0 -.2997 -29.126 -334.795)\",\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n style: {\n stopColor: \"#ffbe3b\"\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.13,\n style: {\n stopColor: \"#ffb445\"\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.36,\n style: {\n stopColor: \"#ff995e\"\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.66,\n style: {\n stopColor: \"#ff6d88\"\n }\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.71,\n style: {\n stopColor: \"#ff6490\"\n }\n })), _ellipse3 || (_ellipse3 = /*#__PURE__*/React.createElement(\"ellipse\", {\n fill: \"url(#ooki-logo-f)\",\n cx: 19.4,\n cy: 30.5,\n rx: 19.4,\n ry: 19.5\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgOokiLogo);\nexport default __webpack_public_path__ + \"static/media/ooki-logo.8a913672.svg\";\nexport { ForwardRef as ReactComponent };","import { sleep } from 'app-lib/asyncUtils'\nimport { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { ProviderEvents } from 'bzx-common/src/domain/events'\nimport { ProviderChangedEvent } from 'bzx-common/src/domain/events/providerEvents'\nimport { RootStore } from 'bzx-common/src/stores'\nimport { ISpendingApproval } from 'bzx-common/src/stores/SpendingApprovals'\nimport * as mobx from 'mobx'\nimport web3Utils from 'web3-utils'\n\ninterface IDebugVM {\n inputImpersonate: string\n approvalsPending: boolean\n viewZeroApprovals: boolean\n}\n\nexport default class DebugVM implements IDebugVM {\n rootStore: RootStore\n inputImpersonate = ''\n approvalsPending = false\n viewZeroApprovals = false\n\n get inputImpersonateValid() {\n return this.inputImpersonate === '' || web3Utils.isAddress(this.inputImpersonate)\n }\n\n get spendingApprovals() {\n const { list } = this.rootStore.spendingApprovals\n if (this.viewZeroApprovals) {\n return list\n }\n return list.filter((approval) => approval.amount.gt(0))\n }\n\n set(prop: keyof IDebugVM, value: any) {\n ;(this[prop] as any) = value\n }\n\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n async fetchImpersonatedBalances() {\n const { userWallet, chain } = this.rootStore\n // Get some info about user balances\n if (chain) {\n await userWallet.getNativeTokenBalance()\n await sleep(500)\n userWallet.getBalances(chain.lending.assets)\n }\n }\n\n setImpersonate(event: any) {\n event.preventDefault()\n const { fulcrumProvider, web3Connection } = this.rootStore\n fulcrumProvider.impersonateAddress = this.inputImpersonate\n web3Connection.assign({ impersonateAddress: this.inputImpersonate })\n fulcrumProvider.emit(\n ProviderEvents.ProviderChanged,\n new ProviderChangedEvent(fulcrumProvider.providerType, fulcrumProvider.web3Wrapper)\n )\n localStorage.setItem('impersonateAddress', this.inputImpersonate)\n this.inputImpersonate = ''\n setTimeout(() => {\n this.fetchImpersonatedBalances()\n }, 0)\n }\n\n async getSpendingApprovals() {\n const { spendingApprovals, web3Connection } = this.rootStore\n if (!web3Connection.chainId) {\n return\n }\n this.assign({ approvalsPending: true })\n const assets = chainConfigs[web3Connection.chainId].lending.assets\n await spendingApprovals.checkApprovalsOfAllItokens()\n await spendingApprovals.checkApprovals(\n assets,\n chainConfigs[web3Connection.chainId].contracts.bzx\n )\n this.assign({ approvalsPending: false })\n }\n\n removeApproval(approval: ISpendingApproval) {\n return this.rootStore.spendingApprovals.removeApproval({\n asset: approval.token,\n spender: approval.spender,\n })\n }\n\n setProtocolVersion(event: React.ChangeEvent) {\n const version = Number(event.target.value)\n this.rootStore.settings.setProtocolVersion(version)\n }\n\n async init() {\n setTimeout(() => {\n if (this.rootStore.web3Connection.walletAddress) {\n this.fetchImpersonatedBalances()\n }\n }, 0)\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n this.init()\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport Debug from './Debug'\nimport DebugVM from './DebugVM'\nexport default withVM(Debug, DebugVM)\n","import { links as allLinks } from 'bzx-common/src/config/appConfig'\nimport { routes } from 'bzx-common/src/config/appConfig'\n\nfunction showIntercom(event: any) {\n event.preventDefault()\n // @ts-ignore\n if (window.Intercom) {\n // @ts-ignore\n window.Intercom('show')\n }\n}\n\nexport const linksSocials = Object.values(allLinks.socials)\n\nexport const linksMore = [\n { title: 'Stats', icon: 'Stats', link: '/stats', external: false },\n { title: 'Tools', icon: 'tools', link: '/tools', external: false },\n { title: 'Dao Snapshot', icon: 'DAO', link: allLinks.daoSnapshot, external: true },\n { title: 'Blog', icon: 'Blog', link: allLinks.blog.url, external: true },\n { title: 'Shop', icon: 'Shop', link: allLinks.shop, external: true },\n { title: 'NFT', icon: 'NFT', link: '/dashboard/nfts', external: false },\n { title: 'FAQ', icon: 'FAQ', link: allLinks.gitbook, external: true },\n { title: 'Help Chat', icon: 'HelpChat', link: '/chat', onClick: showIntercom, external: true },\n]\n\nexport const featuresLinks = [\n { title: 'Dashboard', icon: 'Dashboard', link: '/dashboard', external: false },\n { title: 'Trade', icon: 'Trade', link: routes.tradeChart, external: false },\n { title: 'Lend', icon: 'Lend', link: '/lend', external: false },\n { title: 'Borrow', icon: 'Borrow', link: '/borrow', external: false },\n { title: 'Stake', icon: 'Stake', link: '/stake', external: false },\n]\n\nexport const linksHelp = [\n { title: 'FAQ', icon: 'FAQ', link: allLinks.gitbook, external: true },\n { title: 'Chat With Us', icon: 'HelpChat', link: '/chat', onClick: showIntercom, external: true },\n]\n\nexport default {\n linksSocials,\n linksMore,\n featuresLinks,\n}\n","import React from 'react'\nimport { Icon, Tooltip } from 'ui-framework'\nimport { NavLink } from 'react-router-dom'\nimport { linksSocials, linksMore } from './headerConfig'\nimport ExternalLink from 'shared-components/ExternalLink'\n\nexport default function HeaderMoreDropdown() {\n const menuItems = linksMore.map((item) => {\n return item.external ? (\n \n \n {item.title}\n \n ) : (\n \n \n {item.title}\n \n )\n })\n\n return (\n \n {menuItems}\n
\n\n
\n {linksSocials.map((item) => (\n \n \n \n ))}\n
\n \n )\n}\n","import { ChainId } from 'bzx-common/src/config/appConfig'\nimport React from 'react'\nimport { NavLink } from 'react-router-dom'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Icon } from 'ui-framework'\nimport { linksMore } from './headerConfig'\nimport HeaderMoreDropdown from './HeaderMoreDropdown'\n\ninterface IHeaderMenuItemProps {\n title: string\n link: string\n icon: string\n external: boolean\n}\n\nexport interface IHeaderMenuProps {\n items: IHeaderMenuItemProps[]\n onMenuToggle?: () => void\n chainId?: ChainId\n isMobileMedia: boolean\n}\n\nexport default function HeaderMenu({ items, onMenuToggle, isMobileMedia }: IHeaderMenuProps) {\n if (isMobileMedia) {\n return (\n
\n {items.map((item) => (\n \n \n {item.title}\n \n ))}\n\n
\n
\n
More
\n
\n\n
\n {linksMore.map((item) => {\n return item.external ? (\n \n \n {item.title}\n \n ) : (\n \n \n {item.title}\n \n )\n })}\n
\n
\n
\n )\n }\n\n return (\n
\n {items.map((item) => {\n return (\n
\n {item.external ? (\n \n {item.title}\n \n ) : item.title === 'Dashboard' ? (\n \n \n \n ) : (\n \n {item.title}\n \n )}\n
\n )\n })}\n
\n
More
\n \n
\n \n
\n )\n}\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport { NavLink } from 'react-router-dom'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Icon } from 'ui-framework'\nimport { linksHelp } from '../headerConfig'\nimport HeaderVM from '../HeaderVM'\n\nexport function MainHelp({ vm }: { vm: HeaderVM }) {\n const menuItems = linksHelp.map((item) => {\n return item.external ? (\n \n \n {item.title}\n \n ) : (\n \n \n {item.title}\n \n )\n })\n\n return (\n
\n
\n
\n

Need help?

\n
{menuItems}
\n
\n
\n )\n}\n\nexport default observer(MainHelp)\n","import React from 'react'\n\nexport interface IPicture {\n src: string\n webp?: string\n}\n\ninterface IPictureProps\n extends React.DetailedHTMLProps, HTMLImageElement> {\n src: string\n retina?: string\n webp?: string\n webpRetina?: string\n}\n\n/**\n * This component is using to display Retina + WebP Images\n */\nexport function Picture(props: IPictureProps) {\n const { src, retina, webp, webpRetina, ...otherProps } = props\n const webpImg = webp && (\n \n )\n\n return (\n \n {webpImg}\n \n \n )\n}\n\nexport default React.memo(Picture)\n","import { chainConfigs, supportedChains } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Button, Icon, Tooltip } from 'ui-framework'\nimport ChainInfoVM from './ChainInfoVM'\n\n/**\n * Chain switch menu in header\n */\nexport function ChainInfo({ vm }: { vm: ChainInfoVM }) {\n const { web3Connection } = vm.rootStore\n const tooltip = React.useRef(null)\n\n return (\n \n {supportedChains\n .filter((chainId) => chainId !== web3Connection.chainId)\n .map((chainId) => {\n return (\n web3Connection.switchNetwork(chainId)}\n variant=\"menu\">\n \n {chainConfigs[chainId].chainDetails.shortName}\n \n )\n })}\n
\n \n )\n}\n\nexport default observer(ChainInfo)\n","import { switchNetwork } from 'app-lib/web3ReactUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\nimport { RootStore } from 'bzx-common/src/stores'\nimport * as mobx from 'mobx'\n\nexport default class ChainInfoVM {\n public rootStore: RootStore\n\n public switchNetwork(chainId: ChainId) {\n const { web3Connection } = this.rootStore\n if (web3Connection.isConnected) {\n switchNetwork(chainId)\n } else {\n web3Connection.setReadOnlyProvider(chainId)\n }\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport ChainInfo from './ChainInfo'\nimport ChainInfoVM from './ChainInfoVM'\nexport default withVM(ChainInfo, ChainInfoVM)\n","import { providersDetails } from 'bzx-common/src/domain/ProviderTypeDictionary'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\nimport { Button, Icon, Tooltip } from 'ui-framework'\nimport ProviderInfoVM from './ProviderInfoVM'\n\n/**\n * Change provider info found in the navbar\n */\n\nexport function ProviderInfo({ vm }: { vm: ProviderInfoVM }) {\n const tooltip = React.useRef(null)\n const { web3Connection } = vm.rootStore\n const { supportedWalletProviders, providerTypeDetails } = web3Connection\n const providerTypes = supportedWalletProviders\n const ProviderLogoIcon = providerTypeDetails.ProviderLogo\n return (\n \n {!web3Connection.isConnected && (\n
\n {providerTypes\n .filter((item) => web3Connection.providerType !== item)\n .map((providerType) => {\n const providerTypeDetails = providersDetails[providerType]\n const ProviderLogoIcon = providerTypeDetails.ProviderLogo\n return (\n \n \n {providerTypeDetails.label}\n \n )\n })}\n
\n )}\n\n {web3Connection.isConnected && (\n <>\n \n \n Profile\n \n
\n \n {' '}\n Disconnect\n \n \n )}\n \n )\n}\n\nexport default observer(ProviderInfo)\n","import { ProviderType } from 'bzx-common/src/domain/ProviderTypeDictionary'\nimport * as mobx from 'mobx'\nimport { RootStore } from 'bzx-common/src/stores'\n\nexport default class ProviderInfoVM {\n public rootStore: RootStore\n\n public connect(providerType: ProviderType) {\n this.rootStore.web3Connection.connect(providerType)\n }\n\n public disconnect() {\n this.rootStore.web3Connection.disconnect()\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport ProviderInfo from './ProviderInfo'\nimport ProviderInfoVM from './ProviderInfoVM'\nexport default withVM(ProviderInfo, ProviderInfoVM)\n","import { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { RootStore } from 'bzx-common/src/stores'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport Picture from 'shared-components/Picture'\nimport { Icon } from 'ui-framework'\nimport ChainInfo from './ChainInfo'\nimport ProviderInfo from './ProviderInfo'\n\nconst genericWalletLogo = \n\nexport function OnChainIndicator({ rootStore }: { rootStore: RootStore }) {\n const { web3Connection, settings } = rootStore\n const {\n chainId,\n providerTypeDetails,\n isConnected,\n isDisconnecting,\n isLoadingWallet,\n hasProvider,\n impersonateAddress,\n shortWalletAddress,\n } = web3Connection\n\n const user = settings.users[web3Connection.connectedAddress]\n const alias = user ? user.alias : shortWalletAddress\n\n const ProviderLogoIcon = providerTypeDetails.ProviderLogo\n\n if (web3Connection.unsupportedNetwork) {\n return (\n <>\n
\n Wrong Network!\n
\n \n \n )\n }\n\n const chainLogo = chainId ? (\n \n ) : (\n genericWalletLogo\n )\n\n if (!hasProvider) {\n return (\n
\n
\n {chainLogo}\n
\n \n \n
Connect Wallet
\n
\n \n
\n )\n }\n\n if (providerTypeDetails === null) {\n return (\n <>\n \n
Unknown provider
\n
\n \n \n )\n }\n\n return (\n
\n
\n {chainLogo}\n
\n \n \n
\n {impersonateAddress ? (\n 🕵️\n ) : !isDisconnecting ? (\n user && user.avatar ? (\n \n ) : (\n \n )\n ) : null}\n\n
\n {isConnected && !isDisconnecting && <>{alias}}\n {isLoadingWallet && <>Connecting...}\n {isDisconnecting && <>Disconnecting...}\n
\n
\n
\n \n
\n )\n}\n\nexport default observer(OnChainIndicator)\n","import numberUtils from 'app-lib/numberUtils'\nimport { links } from 'bzx-common/src/config/appConfig'\nimport { Button, Icon, Tooltip } from 'bzx-common/src/ui-framework'\nimport { observer } from 'mobx-react'\nimport React, { CSSProperties } from 'react'\nimport { Link } from 'react-router-dom'\nimport CircleLoader from 'shared-components/CircleLoader'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport OokiDetailsVM from './OokiDetailsVM'\n\nconst styles: Record = {\n totalSupply: { paddingTop: '3px' }, // compensate for coingecko icon\n}\nconst loader = (\n \n)\n\nexport function OokiDetails({ vm }: { vm: OokiDetailsVM }) {\n const tooltip = React.useRef(null)\n const { userWallet } = vm.rootStore\n const { addOokiToken, canAddToken, marketData, ookiBalance } = vm\n return (\n <>\n \n \n \n \n \n \n Stake ooki\n \n \n About Ooki Token\n \n {canAddToken && (\n \n )}\n
\n\n
\n {marketData.error && (\n
\n Ooki market data unavailable\n
\n )}\n {marketData.value && (\n
\n
\n

\n Price{' '}\n \n \n \n

\n $\n \n {numberUtils.autoFormat(marketData.value.price)}\n \n

0 ? 'positive' : 'negative'}`}>\n {numberUtils.autoFormat(marketData.value.priceChange, undefined, { sign: true })}%\n

\n
\n
\n

\n Total Supply\n

\n \n {numberUtils.abbreviate(marketData.value.totalSupply)}\n {' '}\n OOKI\n
\n
\n )}\n {canAddToken && ookiBalance && (\n

Wallet balance

\n )}\n
\n {canAddToken && ookiBalance && (\n
\n {userWallet.getBalancesPending && ookiBalance.isZero() ? (\n loader\n ) : (\n {numberUtils.autoFormat(ookiBalance)}\n )}{' '}\n OOKI\n
\n )}\n\n
\n \n Buy OOKI\n \n
\n
\n
\n \n \n )\n}\n\nexport default observer(OokiDetails)\n","import { Asset } from '../assetUtils'\n\nconst coingeckoUrl = 'https://api.coingecko.com/api/v3/'\n\nexport interface IMarketData {\n marketCap: number\n marketCapChange: number\n price: number\n priceChange: number\n totalSupply: number\n}\n\n/**\n * Get the current market data from coingecko API\n */\nexport const getMarketData = async (asset: Asset, toCurrency = 'usd'): Promise => {\n const url = `${coingeckoUrl}coins/markets?vs_currency=${toCurrency.toLowerCase()}&ids=${asset.toLowerCase()}&order=market_cap_desc&per_page=100&page=1&sparkline=false`\n const marketRequest = await fetch(url)\n if (marketRequest.status !== 200) {\n throw new Error('Coingecko market data unavailable')\n }\n const marketResponse = await marketRequest.json()\n const marketData = marketResponse[0]\n return {\n marketCap: marketData['market_cap'] as number,\n marketCapChange: marketData['market_cap_change_percentage_24h'] as number,\n price: marketData['current_price'] as number,\n priceChange: marketData['price_change_percentage_24h'] as number,\n totalSupply: marketData['total_supply'] as number,\n }\n}\n","import { getMarketData } from 'app-lib/apis/coingeckoApi'\nimport { Asset } from 'app-lib/assetUtils'\nimport AsyncData from 'app-lib/mobx/AsyncData'\nimport providerUtils from 'app-lib/providerUtils'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\nimport { RootStore } from 'bzx-common/src/stores'\nimport * as mobx from 'mobx'\n\nexport default class OokiDetailsVM {\n static chainsWithOokiToken: ChainId[] = [1, 56, 137, 42161]\n marketData = new AsyncData(null, () => getMarketData(Asset.OOKI))\n rootStore: RootStore\n\n get ookiBalance() {\n const { userWallet } = this.rootStore\n return userWallet.indexedByAsset.OOKI?.amount\n }\n\n get canAddToken() {\n const { isConnected, chainId } = this.rootStore.web3Connection\n return isConnected && chainId && OokiDetailsVM.chainsWithOokiToken.includes(chainId)\n }\n\n addOokiToken() {\n const { chainId } = this.rootStore.web3Connection\n if (chainId && OokiDetailsVM.chainsWithOokiToken.includes(chainId)) {\n providerUtils.addToken(chainId, Asset.OOKI)\n }\n }\n\n getData() {\n if (this.canAddToken) {\n this.rootStore.userWallet.getBalances([Asset.OOKI])\n }\n !this.marketData.loaded && this.marketData.fetch()\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport OokiDetails from './OokiDetails'\nimport OokiDetailsVM from './OokiDetailsVM'\nexport default withVM(OokiDetails, OokiDetailsVM)\n","import { ReactComponent as OokiLogo } from 'bzx-common/src/assets/images/ooki-logo.svg'\nimport ThemeSwitch from 'bzx-common/src/shared-components/ThemeSwitch'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Button, ButtonClose, Icon, Tooltip } from 'ui-framework'\nimport { featuresLinks, linksSocials } from './headerConfig'\nimport HeaderMenu from './HeaderMenu'\nimport ReactTooltip from 'react-tooltip'\nimport HeaderVM from './HeaderVM'\nimport MainHelp from './MainHelp'\nimport OnChainIndicator from './OnChainIndicator'\nimport OokiDetails from './OokiDetails'\n\ntype TooltipRef = { tooltipRef: null } | null\n\nconst ookiLogoLink = (\n \n \n \n)\n\nexport function Header({ vm }: { vm: HeaderVM }) {\n const { isMobileMedia } = vm.uiStore.media\n const tooltip = React.useRef(null)\n\n if (isMobileMedia) {\n return (\n
\n
\n
{ookiLogoLink}
\n
\n
\n \n
\n \n
\n
\n\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n {vm.helpDialog.visible ? (\n <>\n \n \n \n ) : (\n <>\n
\n \n
\n
\n
\n {linksSocials.map((item) => {\n return (\n \n \n \n )\n })}\n
\n
\n \n )}\n
\n
\n )\n }\n\n return (\n
\n
\n
\n {ookiLogoLink}\n \n
\n
\n
\n \n
\n\n
\n \n
\n \n \n \n
\n \n {\n const current: TooltipRef = tooltip.current\n current!.tooltipRef = null\n ReactTooltip.hide()\n }}\n right={10}\n top={8}\n />\n \n \n
\n \n
\n )\n}\n\nexport default observer(Header)\n","import { RootStore, UIStore } from 'bzx-common/src/stores'\nimport { DialogVM } from 'bzx-common/src/ui-framework'\nimport * as mobx from 'mobx'\n\nexport default class HeaderVM {\n rootStore: RootStore\n uiStore: UIStore\n sideMenu = new DialogVM({ id: 'main-side-menu', transitionDelay: 200 })\n helpDialog = new DialogVM({ id: 'main-help', transitionDelay: 200 })\n\n hideDialogs() {\n this.sideMenu.hide()\n this.helpDialog.hide()\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n this.uiStore = rootStore.uiStore\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport Header from './Header'\nimport HeaderVM from './HeaderVM'\nexport default withVM(Header, HeaderVM)\n","import { autoFormat, abbreviate } from 'app-lib/numberUtils'\nimport { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Button, Input, Icon } from 'ui-framework'\nimport WrapNativeFormVM from './WrapNativeFormVM'\n\nexport function WrapNativeForm({ form }: { form: WrapNativeFormVM }) {\n const { rootStore, fromTo } = form\n const { chainId } = rootStore.web3Connection\n if (!chainId) {\n return null\n }\n\n const { native } = chainConfigs[chainId]\n\n return (\n
\n {form.directionAllowed && (\n <>\n
    \n
  • \n You have{' '}\n \n {autoFormat(form.fromTo.to.balance)}\n {' '}\n {form.fromTo.to.asset}.{' '}\n
  • \n\n
  • \n You can swap{' '}\n \n {autoFormat(form.fromTo.from.balance)}\n {' '}\n {form.fromTo.from.asset} to {form.fromTo.to.asset} from your wallet.\n
  • \n
\n \n )}\n\n {!form.directionAllowed && (\n
\n
\n
\n {fromTo.from.asset}\n
\n {' '}\n \n
\n
\n\n \n\n
\n {fromTo.to.asset}\n
\n {' '}\n {abbreviate(fromTo.to.balance)}\n
\n
\n
\n
\n )}\n\n
\n
\n \n
\n
\n \n \n
\n
\n \n Get {fromTo.to.asset}\n \n
\n
\n
\n {fromTo.from.asset === native.asset && (\n Note: keep some {native.asset} to pay for your transactions.\n )}\n
\n
\n )\n}\n\nexport default observer(WrapNativeForm)\n","import assetUtils from 'app-lib/assetUtils'\nimport { abbreviate, autoFormat, formatPercent } from 'app-lib/numberUtils'\nimport { chainConfigs, links } from 'bzx-common/src/config/appConfig'\nimport { InputAmount } from 'bzx-common/src/shared-components/InputAmount/InputAmount'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Button, ButtonClose, Icon, InfoTip } from 'ui-framework'\nimport LendVM from '../LendVM'\nimport WrapNativeForm from './WrapNativeForm'\n\nconst noop = () => {\n // TODO: either complete or remove itoken price update\n console.log('noop')\n}\n\nexport function LendForm({ vm }: { vm: LendVM }) {\n const { chainId } = vm.rootStore.web3Connection\n if (!vm.assetSelected || !vm.lendForm.assetSelectedInfo || !chainId) {\n return null\n }\n const { lendForm } = vm\n const { isLending, nextSupplyRate } = lendForm\n const { lendItem, profitEstimates } = vm.lendForm.assetSelectedInfo\n const { displayName, spriteLogo } = assetUtils.getCommon(lendForm.inputLendAsset)\n const chain = chainConfigs[chainId]\n\n /** If interest rate is very low, we display 0 but it's a bit more, so we prefix with '~' */\n const numPrefix =\n !lendForm.lendAmountAsBN.isNaN() &&\n !lendForm.lendAmountAsBN.isZero() &&\n profitEstimates.yearly.isZero() &&\n lendItem.interestRate.gt(0)\n ? '~'\n : ''\n\n return (\n
\n \n\n
\n
\n \n
\n
\n
\n {lendForm.lendType} {lendForm.inputLendAsset}\n
\n
\n
\n APR{' '}\n \n

\n Lend 100 {lendItem.asset} and you will have{' '}\n {autoFormat((nextSupplyRate || lendItem.interestRate).plus(100))}{' '}\n {lendItem.asset} after a year at current rate.\n

\n

Rates always change depending on supply and demand.

\n
\n
\n {numPrefix}\n \n {formatPercent(lendItem.interestRate)}%\n {' '}\n {nextSupplyRate && (\n \n → {formatPercent(nextSupplyRate)}%\n \n )}\n
\n
\n\n {!isLending && (\n
\n Avl. Liquidity{' '}\n \n Available liquidity is the maximum amount of {lendItem.asset} that can be unlent\n at the moment.\n \n
\n \n {abbreviate(lendForm.freeSupply)} {lendForm.inputLendAsset}\n \n
\n
\n )}\n
\n
\n
\n\n
\n {!lendForm.wrapNativeFormVisible && (\n
\n
\n \n
\n
{isLending ? 'Lend' : 'Unlend'} amount
\n \n {' '}\n {lendForm.inputLendAsset}\n \n
\n
\n \n
\n\n
\n
\n
Weekly Profit
\n
\n {numPrefix}\n {autoFormat(profitEstimates.weekly)}\n
\n
\n
\n
Monthly Profit
\n
\n {numPrefix}\n {autoFormat(profitEstimates.monthly)}\n
\n
\n
\n
Yearly Profit
\n
\n {numPrefix}\n {autoFormat(profitEstimates.yearly)}\n
\n
\n
\n\n
\n You will receive {`${isLending ? 'i' : ''}${displayName}`}{' '}\n {isLending && (\n \n

\n iTokens (interest-earning tokens) are minted when you deposit corresponding\n assets. iTokens increase in value and are worth more than the underlying asset.\n

\n \n (Learn More)\n \n
\n )}\n
\n\n {lendForm.warningMessage ? (\n

{lendForm.warningMessage}

\n ) : lendForm.needsApproval ? (\n \n Approve spending\n \n ) : lendForm.isExpired ? (\n \n ) : (\n \n {lendForm.lendType} {autoFormat(lendForm.inputLendAmount)} {displayName}\n \n )}\n \n )}\n {lendForm.wrapNativeFormVisible && (\n <>\n {lendForm.wrapNativeForm.useWrappedNative && (\n
\n \n Back to use {chain.native.wrapped} \n \n
\n )}\n

\n Only the wrapped token, {chain.native.wrapped}, is supported on{' '}\n {chain.chainDetails.shortName}.\n

\n {isLending && }\n {!isLending && (\n <>\n

If you would like to get back the native ETH.

\n
    \n
  1. \n \n .\n
  2. \n
  3. \n Then use our{' '}\n \n native token swap tool\n {' '}\n to get {chain.native.asset}.\n
  4. \n
\n \n )}\n \n )}\n
\n \n )\n}\n\nexport default observer(LendForm)\n","export default __webpack_public_path__ + \"static/media/lend-bean.c898f870.svg\";","export default __webpack_public_path__ + \"static/media/lend-ooki.20d290bb.svg\";","import assetUtils from 'app-lib/assetUtils'\nimport numberUtils from 'app-lib/numberUtils'\nimport { IChainConfig } from 'bzx-common/src/config/chains/chainCommon'\nimport { ILendItem } from 'bzx-common/src/stores/LendStore/LendStore'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport TokenTip from 'shared-components/TokenTip'\nimport { Button, Icon, InfoTip } from 'ui-framework'\nimport LendVM from '../LendVM'\n\nexport interface ILendTokenSelectorItemProps {\n vm: LendVM\n lendItemDetails: ILendItem\n chain: IChainConfig\n}\n\n/**\n * Returns a twitter intent to ask people to borrow on Ooki at low rates.\n */\nfunction getTweetLink(props: ILendTokenSelectorItemProps, chain: IChainConfig) {\n return `https://twitter.com/intent/tweet?original_referer=${encodeURIComponent(\n 'https://ooki.com'\n )}&ref_src=twsrc%5Etfw%7Ctwcamp%5Ebuttonembed%7Ctwterm%5Emention%7Ctwgr%5EOokiTrade&screen_name=OokiTrade&text=${encodeURIComponent(\n `\\n\\nBorrowing $${props.lendItemDetails.asset} on ${chain.twitterHandle} is cheap at the moment! It's almost free money! 😎💰\\n\\nBorrow now on https://ooki.com/borrow.`\n )}`\n}\n\nfunction LendListItem(props: ILendTokenSelectorItemProps) {\n const { vm, lendItemDetails } = props\n const { asset, interestRate } = lendItemDetails\n const { chainId } = props.chain.chainDetails\n const assetInfo = assetUtils.getInfo(chainId, asset)\n const hasPendingTx = vm.lendStore.pendingAssetTx.some((txAsset) => txAsset === asset)\n const ratePrefix = interestRate.gt(0) && interestRate.lt(0.001) ? '~' : ''\n const isComingSoon = props.chain.comingSoon.tokens[asset]\n\n const rateTip =\n interestRate.lt(5) && interestRate.gt(0) ? (\n \n
\n
\n

Ooki lending rates

\n

Earn passive income with very high rates, 20%, 50% and much more!

\n

\n When the pool reaches 80% of utilization, meaning when many people trade\n and borrow on Ooki, you benefit from especially high rates.\n

\n

\n Spread the word, get people to use Ooki and start earning from great lending rates.\n

\n
\n\n \n Tell people to borrow \n \n
\n
\n ) : null\n\n return (\n
\n
\n
\n \n {lendItemDetails.iTokenAddress ? (\n \n
{assetInfo.displayName}
\n \n ) : (\n
{assetInfo.displayName}
\n )}\n
\n
\n
Lending Rate
\n \n {ratePrefix}\n {numberUtils.formatPercent(interestRate)}%\n {' '}\n {rateTip}\n
\n\n {isComingSoon ? (\n
\n Coming soon!\n
\n ) : (\n
\n
\n \n {numberUtils.abbreviate(lendItemDetails.availableLiquidity, 4)}\n {' '}\n available\n
\n
\n \n {numberUtils.abbreviate(lendItemDetails.totalBorrow, 4)}\n {' '}\n borrowed\n
\n
\n )}\n
\n \n Lend\n \n
\n
\n
\n )\n}\n\nexport default observer(LendListItem)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport { ButtonTH } from 'ui-framework'\nimport LendVM from '../LendVM'\nimport lendBean from './lend-bean.svg'\nimport lendOoki from './lend-ooki.svg'\nimport LendListItem from './LendListItem'\n\nexport function LendList({ vm }: { vm: LendVM }) {\n const { chain } = vm.rootStore\n const { media } = vm.rootStore.uiStore\n\n if (!chain) {\n return null\n }\n\n return (\n
\n
\n \n Asset\n \n \n Lending Rate\n \n \n Liquidity\n \n
\n\n {vm.filteredLendItems.map((item) => (\n \n ))}\n\n {vm.filteredLendItems.length === 0 && vm.searchQuery && (\n

\n The filter returned 0 result.\n

\n )}\n {!media.isMobileMedia && !vm.searchQuery && (\n <>\n \n \n \n )}\n
\n )\n}\n\nexport default observer(LendList)\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport numberUtils, { autoFormat, formatPercent } from 'app-lib/numberUtils'\nimport { ILendItem } from 'bzx-common/src/stores/LendStore/LendStore'\nimport { observer } from 'mobx-react'\nimport { IChainConfig } from 'bzx-common/src/config/chains/chainCommon'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport TokenLoader from 'shared-components/TokenLoader'\nimport { Button, Icon, InfoTip, Tooltip } from 'ui-framework'\nimport { BigNumber } from '@0x/utils'\nimport LendVM from '../LendVM'\n\n/**\n * Returns a twitter intent link for a lending position profit\n */\nfunction getTweetLink(asset: Asset, rate: BigNumber, profit: BigNumber, chain: string) {\n return `https://twitter.com/intent/tweet?original_referer=${encodeURIComponent(\n 'https://ooki.com'\n )}&ref_src=twsrc%5Etfw%7Ctwcamp%5Ebuttonembed%7Ctwterm%5Emention%7Ctwgr%5EOokiTrade&screen_name=OokiTrade&text=${encodeURIComponent(\n `\\n\\nI'm lending $${asset} at ${formatPercent(rate)}% interest rate and made ${autoFormat(\n profit\n )} $${asset} so far on ${chain}.\n \\nEasy passive income at https://ooki.com/lend. 😎💰`\n )}`\n}\n\n/**\n * Returns a twitter intent link to attract borrowers.\n */\nfunction getTweetLinkBorrow(asset: Asset, rate: BigNumber, chain: IChainConfig) {\n return `https://twitter.com/intent/tweet?original_referer=${encodeURIComponent(\n 'https://ooki.com'\n )}&ref_src=twsrc%5Etfw%7Ctwcamp%5Ebuttonembed%7Ctwterm%5Emention%7Ctwgr%5EOokiTrade&screen_name=OokiTrade&text=${encodeURIComponent(\n `\\n\\nI'm lending $${asset} and it's up for grab, for cheap :)\\nBorrow $${asset} at ${formatPercent(\n rate\n )}% on ${chain.twitterHandle}.\\n\\nAlmost free money at https://ooki.com/borrow! 😎💰`\n )}`\n}\n\n/**\n * Displays a user lending position for a particular asset with corresponding profits.\n */\nfunction UserYieldsItem({ vm, lendItem }: { vm: LendVM; lendItem: ILendItem }) {\n const { chain } = vm.rootStore\n const { userYield } = lendItem\n if (!chain || !userYield) {\n return null\n }\n const { chainId } = chain.chainDetails\n const assetInfo = assetUtils.getInfo(chainId, lendItem.asset)\n const { userYearlyProfit, asset, interestRate } = lendItem\n const hasPendingTx = vm.lendStore.pendingAssetTx.some((txAsset) => txAsset === asset)\n\n const ratePrefix = interestRate.gt(0) && interestRate.lt(0.001) ? '~' : ''\n const rateTip =\n interestRate.lt(5) && interestRate.gt(0) ? (\n \n
\n

Ooki lending rates

\n

Earn passive income with very high rates, 20%, 50% and much more!

\n

\n When the pool reaches 80% of utilization, meaning when many people trade\n and borrow on Ooki, you benefit from especially high rates.\n

\n

Spread the word, get people to use Ooki and start earning from great lending rates.

\n \n Tell people to borrow \n \n
\n
\n ) : null\n\n // If we could not get the itoken price for some reason, we still display balances but in iToken\n const iTokenSymbol = 'i' + lendItem.asset\n const hasProfit = !userYield.iTokenPrice.isNaN()\n const balanceShown = hasProfit ? userYield.equity : userYield.iTokenBalance\n const balanceShownAsset = hasProfit ? lendItem.asset : iTokenSymbol\n const balanceDescription = hasProfit ? (\n
\n

\n The {autoFormat(userYield.equity)} {lendItem.asset} include your profits.\n

\n You have currently{' '}\n {autoFormat(userYield.iTokenBalance)}{' '}\n {iTokenSymbol} in your wallet. Each {iTokenSymbol} is worth{' '}\n {userYield.iTokenPrice.dp(5).toFixed()}{' '}\n {lendItem.asset}.\n
\n ) : (\n
\n

\n You have{' '}\n {autoFormat(userYield.iTokenBalance)}{' '}\n {iTokenSymbol} in your wallet.\n

\n

\n Your profit can not be calculated temporarily because the current {lendItem.asset} iToken\n price is unavailable.\n

\n No worries, you are still earning interests, and can still lend or unlend.\n
\n )\n\n return (\n
\n
\n \n \n \n\n
{assetInfo.displayName}
\n \n Share \n \n
\n\n
\n
\n
Avail. Liquidity
\n
\n {numberUtils.abbreviate(lendItem.liquidity)}{' '}\n {assetInfo.displayName}\n
\n
\n
\n
\n
Balance
\n \n

Yield balance

\n {balanceDescription}\n
\n
\n\n
\n {autoFormat(balanceShown)} {balanceShownAsset}\n
\n
\n
\n\n
\n
\n
Interest Rate
\n
\n \n {ratePrefix}\n {formatPercent(interestRate)}\n %\n {' '}\n {rateTip}\n
\n
\n
\n
\n Profit\n \n \n
\n
\n Est. Earnings at current APR\n
\n
\n
Weekly
\n
\n {autoFormat(userYearlyProfit.div(52))} {assetInfo.displayName}\n
\n
\n
\n
Monthly
\n
\n {autoFormat(userYearlyProfit.div(12))} {assetInfo.displayName}\n
\n
\n
\n
Yearly
\n
\n {autoFormat(userYearlyProfit)} {assetInfo.displayName}\n
\n
\n
\n \n
\n
\n {autoFormat(userYield.profit)} {assetInfo.displayName}\n
\n
\n
\n
\n
\n \n Lend More\n \n \n UnLend\n \n
\n
\n )\n}\n\nexport default observer(UserYieldsItem)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport WhyNoSir from 'shared-components/WhyNoSir/WhyNoSir'\nimport LendVM from '../LendVM'\nimport UserYieldsItem from './UserYieldsItem'\n\nexport function UserYields({ vm }: { vm: LendVM }) {\n const { userYields } = vm.lendStore\n\n if (userYields.loaded && userYields.value.length === 0) {\n return \n }\n\n return (\n
\n {vm.filteredYieldList.map((yyield) => (\n \n ))}\n\n {/** Trick to align items with tabs when there is only one */}\n {vm.filteredYieldList.length === 1 &&
}\n\n {vm.filteredYieldList.length === 0 && vm.searchQuery && (\n

\n The filter returned 0 result.\n

\n )}\n
\n )\n}\n\nexport default observer(UserYields)\n","import { routes } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { NavLink, Redirect, Route, Switch } from 'react-router-dom'\nimport CircleLoader from 'shared-components/CircleLoader'\nimport { Input, Modal } from 'ui-framework'\nimport LendFormBis from './LendForm/LendForm'\nimport LendList from './LendList'\nimport LendVM from './LendVM'\nimport UserYields from './UserYields'\n\nfunction Lend({ vm }: { vm: LendVM }) {\n const userYields = vm.lendStore.userYields.value\n return (\n
\n
\n
\n
\n \n Lend\n \n \n
\n Your Yields\n
\n {vm.fetchingData ? (\n {userYields.length}\n ) : (\n userYields.length\n )}\n
\n
\n
\n
\n \n
\n\n \n } />\n } />\n } />\n \n\n \n \n \n
\n
\n )\n}\n\nexport default observer(Lend)\n","import { BigNumber } from '@0x/utils'\nimport { formatPrecision } from 'app-lib/numberUtils'\nimport providerUtils from 'app-lib/providerUtils'\nimport { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { RootStore } from 'bzx-common/src/stores'\nimport * as mobx from 'mobx'\nimport { FormEvent } from 'react'\n\nexport interface IWrapNativeFormVMProps {\n autoSyncData: boolean\n direction: 'wrap' | 'unwrap'\n directionAllowed?: 'wrap' | 'unwrap'\n inputAmount: string\n nativeBalance: BigNumber\n nativeBalancePending: boolean\n swapPending: boolean\n useWrappedNative?: () => void\n wrappedBalance: BigNumber\n wrappedBalancePending: boolean\n}\n\n/**\n * Allows user to swap native to wrapped token for lending where the native token is not supported\n */\nexport default class WrapNativeFormVM implements IWrapNativeFormVMProps {\n autoSyncData = false\n direction: 'wrap' | 'unwrap' = 'wrap'\n directionAllowed?: 'wrap' | 'unwrap'\n inputAmount = ''\n nativeBalance = new BigNumber(0)\n nativeBalancePending = false\n swapPending = false\n rootStore: RootStore\n useWrappedNative?: () => void\n wrappedBalance = new BigNumber(0)\n wrappedBalancePending = false\n stopAutoSync?: mobx.Lambda\n\n get tokens() {\n const chainId = this.rootStore.web3Connection.chainId || 1\n return {\n native: { asset: chainConfigs[chainId].native.asset, balance: this.nativeBalance },\n wrapped: { asset: chainConfigs[chainId].native.wrapped, balance: this.wrappedBalance },\n }\n }\n\n get fromTo() {\n const { native, wrapped } = this.tokens\n return this.direction === 'wrap' ? { from: native, to: wrapped } : { from: wrapped, to: native }\n }\n\n set(prop: keyof IWrapNativeFormVMProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n setToMax() {\n this.inputAmount = this.fromTo.from.balance.toFixed()\n }\n\n toggleReceive() {\n this.direction = this.direction === 'wrap' ? 'unwrap' : 'wrap'\n this.inputAmount = formatPrecision(this.fromTo.from.balance)\n }\n\n async getNativeBalance() {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId) {\n return\n }\n this.assign({ nativeBalancePending: true })\n const { asset } = chainConfigs[chainId].native\n const nativeBalance = await providerUtils.getTokenBalanceOfUser(\n this.rootStore.fulcrumProvider,\n asset\n )\n this.assign({\n nativeBalance,\n nativeBalancePending: false,\n })\n }\n\n async getWrappedBalance() {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId) {\n return\n }\n this.assign({ wrappedBalancePending: true })\n const { wrapped } = chainConfigs[chainId].native\n const wrappedBalance = await providerUtils.getTokenBalanceOfUser(\n this.rootStore.fulcrumProvider,\n wrapped\n )\n this.assign({ wrappedBalance, wrappedBalancePending: false })\n }\n\n async syncData() {\n await this.getNativeBalance()\n await this.getWrappedBalance()\n const balance = this.direction === 'wrap' ? this.nativeBalance : this.wrappedBalance\n this.inputAmount = formatPrecision(balance)\n }\n\n async wrapNativeToken(amount: BigNumber) {\n this.assign({ swapPending: true })\n const { transactionStore, fulcrumProvider } = this.rootStore\n const txSteps = providerUtils.wrapNativeToken(fulcrumProvider, amount)\n const tx = await transactionStore.run('swap', txSteps)\n if (tx.status === 'success') {\n this.syncData()\n } else {\n console.error(tx.error)\n }\n this.assign({ swapPending: false })\n }\n\n async unwrapNativeToken(amount: BigNumber) {\n this.assign({ swapPending: true })\n const { transactionStore, fulcrumProvider } = this.rootStore\n const txSteps = providerUtils.unwrapNativeToken(fulcrumProvider, amount)\n const tx = await transactionStore.run('swap', txSteps)\n if (tx.status === 'success') {\n this.syncData()\n } else {\n console.error(tx.error)\n }\n this.assign({ swapPending: false })\n }\n\n async submit(event: FormEvent) {\n event.preventDefault()\n if (this.direction === 'wrap') {\n return this.wrapNativeToken(new BigNumber(this.inputAmount))\n } else {\n return this.unwrapNativeToken(new BigNumber(this.inputAmount))\n }\n }\n\n autoSync(enabled: boolean) {\n this.autoSyncData = enabled\n }\n\n clearData() {\n this.inputAmount = '0'\n this.nativeBalance = new BigNumber(0)\n this.wrappedBalance = new BigNumber(0)\n }\n\n init() {\n this.stopAutoSync = mobx.autorun(() => {\n const { chainId, walletAddress } = this.rootStore.web3Connection\n if (this.autoSyncData) {\n if (chainId && walletAddress) {\n this.clearData()\n this.syncData()\n } else {\n this.clearData()\n }\n }\n })\n }\n\n destroyVM() {\n this.stopAutoSync && this.stopAutoSync()\n }\n\n constructor(\n rootStore: RootStore,\n opts: { useWrapped?: () => void; directionAllowed?: 'wrap' | 'unwrap' } = {}\n ) {\n this.rootStore = rootStore\n if (opts.useWrapped) {\n this.useWrappedNative = opts.useWrapped\n }\n if (opts.directionAllowed) {\n this.directionAllowed = opts.directionAllowed\n }\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n }\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport lendUtils from 'app-lib/lendUtils'\nimport numberUtils, { abbreviate } from 'app-lib/numberUtils'\nimport { chainConfigs, isChainSupported } from 'bzx-common/src/config/appConfig'\nimport { LendType } from 'bzx-common/src/domain/lendTypes'\nimport { RootStore } from 'bzx-common/src/stores'\nimport { debounce, DebouncedFunc } from 'lodash'\nimport * as mobx from 'mobx'\nimport { FormEvent } from 'react'\nimport { DialogVM } from 'ui-framework'\nimport { BigNumber } from '@0x/utils'\nimport WrapNativeFormVM from './WrapNativeFormVM'\n\ninterface ILendForm {\n freeSupply: BigNumber\n inputLendAsset: Asset\n inputLendAmount: string\n isExpired: boolean\n isLoading: boolean\n iTokenAddress: string\n lendedAmountEstimate: BigNumber\n lendType: LendType\n maxLendAmount: BigNumber\n maxTokenAmount: BigNumber\n needsApproval: boolean\n nextSupplyRate?: BigNumber\n spendingApprovalPending: boolean\n tokenPrice: BigNumber\n userLentBalance: BigNumber\n wrapNativeForm: WrapNativeFormVM\n}\n\nexport default class LendForm implements ILendForm {\n /** How many tokens are available for borrowing or unlending */\n freeSupply = new BigNumber(0)\n inputLendAsset: Asset\n inputLendAmount = ''\n isExpired = false // TODO\n isLoading = true\n iTokenAddress = ''\n lendDialog: DialogVM\n /** How many iTokens the user would receive for lending. Note: we removed this from the UI. Needs rethink */\n lendedAmountEstimate = new BigNumber(0)\n lendType: LendType\n /** For lend and unlend; maximum the user can lend or unlend */\n maxLendAmount = new BigNumber(0)\n /** For unlend, maximum amount the user can unlend, depends on supply and token price */\n maxTokenAmount = new BigNumber(0)\n rootStore: RootStore\n spendingApprovalPending = false\n /** Price of the iToken compared to underlying: how many ETH you get for 1 iETH */\n tokenPrice = new BigNumber(0)\n /** How much the user has lent (in underlying) */\n userLentBalance = new BigNumber(0)\n wrapNativeForm: WrapNativeFormVM\n /** For chains with new interest rate model; updates on user input changes */\n nextSupplyRate?: BigNumber\n refreshSupplyRateDebounced: DebouncedFunc<(supplyAmount: BigNumber) => Promise>\n stopAutoUpdate?: mobx.IReactionDisposer\n\n get isLending() {\n return this.lendType === 'LEND'\n }\n\n /**\n * For the select input, we allow user to use the native token or its ERC20 wrapped version\n */\n get selectableAssets() {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId || !isChainSupported(chainId)) {\n return []\n }\n const { asset, wrapped } = chainConfigs[chainId].native\n if (![asset, wrapped].includes(this.inputLendAsset)) {\n return [this.inputLendAsset]\n }\n return [asset, wrapped]\n }\n\n get lendAmountAsBN() {\n return new BigNumber(this.inputLendAmount)\n }\n\n get insufficientLiquidityToUnlend() {\n if (this.lendType === 'LEND' || this.lendAmountAsBN.isNaN()) {\n return false\n }\n return this.freeSupply.lt(this.lendAmountAsBN)\n }\n\n /**\n * This is basically for the slider percentage value\n */\n get ratioMaxLendAmount() {\n return this.maxLendAmount.isZero()\n ? 0\n : new BigNumber(this.inputLendAmount).div(this.maxLendAmount).toNumber()\n }\n\n get warningMessage() {\n if (this.isLoading) {\n return ''\n }\n const { isConnected } = this.rootStore.web3Connection\n return !isConnected\n ? 'Connect your wallet'\n : this.insufficientLiquidityToUnlend\n ? `Free supply is ${abbreviate(this.freeSupply)} ${this.inputLendAsset} - Unlending limited. `\n : this.maxLendAmount.isZero()\n ? `You do not have ${this.inputLendAsset} in your wallet`\n : this.isExpired\n ? 'Price has changed'\n : ''\n }\n\n get assetSelectedInfo() {\n const { lendStore, chain } = this.rootStore\n if (!chain) {\n return\n }\n // Note: this can be confusing for native / wrapped tokens;\n // wrapped token is not present in the list and relies on native info\n const searchAsset =\n !chain.nativeTokenSupported && this.inputLendAsset === chain.native.asset\n ? chain.native.wrapped\n : chain.nativeTokenSupported && this.inputLendAsset === chain.native.wrapped\n ? chain.native.asset\n : this.inputLendAsset\n\n const lendItem = lendStore.lendItems.find((item) => item.asset === searchAsset)\n if (lendItem) {\n const rate = this.nextSupplyRate || lendItem.interestRate\n const yearlyProfit = rate.lt(0.0001)\n ? new BigNumber(0)\n : rate.div(100).times(this.inputLendAmount || 0) // default to 0 if the user empties the field\n return {\n lendItem,\n profitEstimates: {\n yearly: yearlyProfit,\n monthly: yearlyProfit.div(12),\n weekly: yearlyProfit.div(52),\n },\n }\n }\n }\n\n get canSubmit() {\n const inputAmount = new BigNumber(this.inputLendAmount)\n return inputAmount.gt(0) && inputAmount.lte(this.maxLendAmount)\n }\n\n get wrapNativeFormVisible() {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId) {\n return false\n }\n const { native, nativeTokenSupported } = chainConfigs[chainId]\n return !nativeTokenSupported && this.inputLendAsset === native.asset\n }\n\n get needsApproval() {\n const { web3Connection, spendingApprovals } = this.rootStore\n const { chainId } = web3Connection\n if (\n !chainId ||\n this.lendType === LendType.UNLEND ||\n this.lendAmountAsBN.isNaN() ||\n !this.lendAmountAsBN.gt(0) ||\n this.lendAmountAsBN.gt(this.maxLendAmount)\n ) {\n // We return that it does not need approval if input is bigger than balance\n // to avoid showing approval button\n return false\n }\n return spendingApprovals.needsApproval(\n chainId,\n this.inputLendAsset,\n assetUtils.getITokenAddress(chainId, this.inputLendAsset),\n this.lendAmountAsBN\n )\n }\n\n set(prop: keyof ILendForm, value: any) {\n ;(this[prop] as any) = value\n }\n\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n /**\n * TODO: use framework inputs later for inputAmount component\n */\n changeAmount(value: string) {\n this.inputLendAmount = value\n }\n\n setMax() {\n this.inputLendAmount = numberUtils.formatPrecision(this.maxLendAmount)\n }\n\n /**\n * @param percent percentage of maxLendAmount\n */\n setAmountFromMaxPercent(percent: number) {\n this.inputLendAmount = numberUtils.formatPrecision(this.maxLendAmount.times(percent).toNumber())\n }\n\n changeCollateral(asset: Asset) {\n this.inputLendAsset = asset\n this.getData()\n }\n\n submit(event: FormEvent) {\n event.preventDefault()\n const { lendStore } = this.rootStore\n let amount = new BigNumber(this.inputLendAmount)\n const inputAmountRounded = numberUtils.formatPrecision(this.inputLendAmount)\n const maxLendAmountRounded = numberUtils.formatPrecision(this.maxLendAmount)\n\n if (inputAmountRounded === maxLendAmountRounded) {\n amount = new BigNumber(this.maxLendAmount)\n }\n\n this.lendDialog.hide()\n\n setTimeout(() => {\n if (this.lendType === 'LEND') {\n lendStore.lend(this.inputLendAsset, amount)\n } else {\n lendStore.unlend(this.inputLendAsset, amount.times(10 ** 18).div(this.tokenPrice))\n }\n }, 0)\n }\n\n async approveSpending() {\n const { spendingApprovals } = this.rootStore\n this.assign({ spendingApprovalPending: true })\n await spendingApprovals.setInfiniteApprovalForIToken(this.inputLendAsset)\n this.assign({ spendingApprovalPending: false })\n }\n\n async getData() {\n const { fulcrumProvider, web3Connection } = this.rootStore\n const { chainId } = web3Connection\n if (!chainId) {\n return\n }\n\n // Check token approval\n if (this.lendType === 'LEND') {\n await this.rootStore.spendingApprovals.checkApproval(\n this.inputLendAsset,\n assetUtils.getITokenAddress(chainId, this.inputLendAsset)\n )\n }\n this.assign({\n iTokenAddress: assetUtils.getITokenAddress(chainId, this.inputLendAsset),\n })\n\n const maxLendValue = await lendUtils.getMaxLendValue(\n fulcrumProvider,\n this.lendType,\n this.inputLendAsset\n )\n this.assign(maxLendValue)\n this.set('inputLendAmount', numberUtils.formatPrecision(maxLendValue.maxLendAmount))\n\n if (this.wrapNativeFormVisible) {\n this.wrapNativeForm.syncData()\n }\n }\n\n useWrappedNative() {\n const { chainId } = this.rootStore.web3Connection\n chainId && this.changeCollateral(chainConfigs[chainId].native.wrapped)\n }\n\n async refreshSupplyRate(supplyAmount: BigNumber) {\n const { chain, fulcrumProvider } = this.rootStore\n if (!chain || supplyAmount.isNaN()) {\n return\n }\n try {\n const nextSupplyRate = await lendUtils.nextSupplyInterestRate(\n fulcrumProvider,\n this.inputLendAsset,\n this.lendAmountAsBN.times(this.isLending ? 1 : -1)\n )\n this.assign({ nextSupplyRate })\n } catch (err) {\n // fail silently for now; TODO: discuss how to handle error on the UI\n console.error(err)\n }\n }\n\n async init() {\n const { web3Connection } = this.rootStore\n const { chainId } = web3Connection\n if (!chainId) {\n return\n }\n try {\n await this.getData()\n } catch (err) {\n console.error(err)\n } finally {\n this.set('isLoading', false)\n }\n\n this.stopAutoUpdate = mobx.autorun(() => {\n this.refreshSupplyRateDebounced(this.lendAmountAsBN)\n })\n }\n\n destroyVM() {\n this.stopAutoUpdate && this.stopAutoUpdate()\n }\n\n constructor(asset: Asset, lendType: LendType, rootStore: RootStore, lendDialog: DialogVM) {\n this.lendType = lendType\n this.rootStore = rootStore\n this.inputLendAsset = asset\n this.lendDialog = lendDialog\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n this.wrapNativeForm = new WrapNativeFormVM(this.rootStore, {\n useWrapped: this.useWrappedNative,\n directionAllowed: 'wrap',\n })\n this.refreshSupplyRateDebounced = debounce(\n (supplyAmount: BigNumber) => this.refreshSupplyRate(supplyAmount),\n 250\n )\n }\n}\n","import { Asset } from 'app-lib/assetUtils'\nimport { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { LendType } from 'bzx-common/src/domain/lendTypes'\nimport { LendStore, RootStore } from 'bzx-common/src/stores'\nimport _ from 'lodash'\nimport * as mobx from 'mobx'\nimport { DialogVM } from 'ui-framework'\nimport LendFormVM from './LendForm/LendFormVM'\n\ninterface ILendVMProps {\n assetSelected: Asset | null\n lendForm: LendFormVM\n searchQuery: string\n sortBy: 'supplyApr' | 'liquidity' | 'asset'\n sortOrder: 'asc' | 'desc'\n}\n\nexport default class LendVM implements ILendVMProps {\n assetSelected: Asset | null = null\n lendDialog = new DialogVM({ id: 'lend-dialog' })\n lendForm: LendFormVM\n lendStore: LendStore\n rootStore: RootStore\n searchQuery = ''\n sortBy: 'supplyApr' | 'liquidity' | 'asset' = 'supplyApr'\n sortOrder: 'asc' | 'desc' = 'desc'\n stopAutoSync: mobx.IReactionDisposer | null = null\n\n get fetchingData() {\n return this.lendStore.userYields.pending || this.rootStore.statsStore.stats.pending\n }\n\n /**\n * Ordered and filtered list, per user criteria\n */\n get filteredLendItems() {\n let filtered = this.lendStore.lendItems\n if (this.searchQuery) {\n filtered = filtered.filter((item) =>\n item.asset.toLowerCase().includes(this.searchQuery.toLowerCase())\n )\n }\n return _.orderBy(filtered, [this.sortBy], [this.sortOrder])\n }\n\n get filteredYieldList() {\n return this.filteredLendItems.filter((item) => !!item.userYield)\n }\n\n set(prop: keyof ILendVMProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n sortList(by: 'supplyApr' | 'liquidity' | 'asset') {\n if (this.sortBy === by) {\n this.sortOrder = this.sortOrder === 'asc' ? 'desc' : 'asc'\n } else {\n this.sortBy = by\n }\n }\n\n showForm(asset: Asset, lendType: LendType) {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId) {\n return\n }\n const chain = chainConfigs[chainId]\n this.assetSelected = asset\n const formAsset =\n !chain.nativeTokenSupported && asset === chain.native.asset ? chain.native.wrapped : asset\n this.lendForm = new LendFormVM(formAsset, lendType, this.rootStore, this.lendDialog)\n this.lendDialog.show()\n this.lendForm.init()\n }\n\n showLendForm(asset: Asset) {\n this.showForm(asset, LendType.LEND)\n }\n\n showUnlendForm(asset: Asset) {\n this.showForm(asset, LendType.UNLEND)\n }\n\n init() {\n setTimeout(() => {\n this.lendStore.autoSync(true)\n }, 0)\n }\n\n destroyVM() {\n this.lendStore.autoSync(false)\n this.lendForm.destroyVM()\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n this.lendStore = rootStore.lendStore\n this.lendForm = new LendFormVM(Asset.ETH, LendType.LEND, this.rootStore, this.lendDialog)\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n this.init()\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport Lend from './Lend'\nimport LendVM from './LendVM'\nexport default withVM(Lend, LendVM)\n","import assetUtils from 'app-lib/assetUtils'\nimport numberUtils, { autoFormat } from 'app-lib/numberUtils'\nimport { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { Migration } from 'bzx-common/src/stores/MigrationStore'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ButtonChainSwitch from 'shared-components/ButtonChainSwitch'\nimport { Button, Icon, Input } from 'ui-framework'\nimport MigrateTokensVM from './MigrateTokensVM'\n\nexport function MigrateTokens({ vm, migration }: { vm: MigrateTokensVM; migration: Migration }) {\n const fromInfo = assetUtils.getCommon(migration.details.fromAsset)\n const toInfo = assetUtils.getCommon(migration.details.toAsset)\n const connectedChainId = vm.rootStore.web3Connection.chainId\n const { chainsAvailable } = migration.details\n const toIcon = toInfo.spriteLogo\n\n if (!connectedChainId) {\n return null\n }\n\n return (\n
\n

\n \n Migrate {fromInfo.displayName} to {toInfo.displayName}{' '}\n \n
\n {chainsAvailable.map((chainId) => (\n \n ))}\n
\n

\n\n
\n
\n \n \n {' '}\n \n
\n
\n\n
\n \n \n Max\n \n
\n
\n\n
\n

\n You will receive{' '}\n \n {autoFormat(migration.conversionAmount)}\n {' '}\n {toInfo.displayName} \n

\n {migration.details.chains[connectedChainId] ? (\n <>\n {migration.needsApproval ? (\n \n {migration.enabled ? 'Approve Spending' : Soon™}\n \n ) : (\n \n {migration.enabled ? 'Migrate' : Soon™}\n \n )}\n {migration.liquidityLoaded &&\n migration.details.chains[connectedChainId]?.limitedLiquidity && (\n
\n \n {autoFormat(migration.liquidityAvailable)}\n {' '}\n {toInfo.displayName} available for conversion\n
\n )}\n \n ) : (\n
\n \n Switch to {chainConfigs[chainsAvailable[0]].chainDetails.shortName}\n \n
\n )}\n
\n
\n )\n}\n\nexport default observer(MigrateTokens)\n","import { autoFormat } from 'app-lib/numberUtils'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Mention } from 'react-twitter-widgets'\nimport { Button, Icon } from 'ui-framework'\nimport MigrateTokensVM from './MigrateTokensVM'\n\nconst tweetOptions = {\n text: 'I am now part of the Ookimunity. https://ooki.com',\n size: 'large',\n}\n\nexport function OokiBalance({ vm }: { vm: MigrateTokensVM }) {\n const ookiBalance = vm.rootStore.userWallet.indexedByAsset.OOKI\n if (!ookiBalance || ookiBalance.amount.isZero()) {\n return null\n }\n return (\n
\n

Congratulations! You are part of the OOKI family.

\n

\n You have {autoFormat(ookiBalance.amount)} OOKI tokens!\n

\n\n \n\n

Share it with the World

\n\n
\n \n
\n
\n )\n}\n\nexport default observer(OokiBalance)\n","import hashUtils from 'app-lib/hashUtils'\nimport { links } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { ButtonClipboard, Icon } from 'ui-framework'\nimport MigrateTokensVM from './MigrateTokensVM'\n\nexport function OokiMigrationInfo({ vm }: { vm: MigrateTokensVM }) {\n return (\n
\n

Instructions

\n
\n

\n \n Read this article\n {' '}\n for detailed information.\n

\n\n

OOKI token

\n
    \n {vm.ookiInfo.map((info) => (\n
  • \n \n \n {hashUtils.shortHash(info.address, 8, 8)}\n \n \n
  • \n ))}\n
\n\n

Converter Contract

\n
    \n {vm.ookiInfo.map((info) => (\n
  • \n \n \n {hashUtils.shortHash(info.converterAddress, 8, 8)}\n \n
  • \n ))}\n
\n
\n
\n )\n}\n\nexport default observer(OokiMigrationInfo)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport MigrateTokensVM from './MigrateTokensVM'\nimport MigrationItem from './MigrationItem'\nimport OokiBalance from './OokiBalance'\nimport OokiMigrationInfo from './OokiMigrationInfo'\n\nexport function MigrateTokens({ vm }: { vm: MigrateTokensVM }) {\n return (\n <>\n
\n
\n
\n
\n

Migrate to OOKI

\n
\n\n
\n \n\n {vm.migrationStore.migrations.map((migration) => (\n \n ))}\n\n \n
\n \n )\n}\n\nexport default observer(MigrateTokens)\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport providerUtils from 'app-lib/providerUtils'\nimport { chainConfigs, getBlockExplorerAddressLink } from 'bzx-common/src/config/appConfig'\nimport { migrationList } from 'bzx-common/src/services/MigrateService'\nimport { MigrationStore, RootStore } from 'bzx-common/src/stores'\nimport { Migration } from 'bzx-common/src/stores/MigrationStore'\nimport * as mobx from 'mobx'\n\nexport default class MigrateTokensVM {\n rootStore: RootStore\n migrationStore: MigrationStore\n\n get ookiInfo() {\n const migrationDetails = migrationList.BZRX_TO_OOKI\n return migrationDetails.chainsAvailable.map((chainId) => {\n const info = assetUtils.getInfo(chainId, Asset.OOKI)\n const converterAddress = migrationDetails.chains[chainId]?.converterAddress || ''\n return {\n ...info,\n chainId,\n chainIcon: chainConfigs[chainId].icon,\n ookiExplorerLink: getBlockExplorerAddressLink(chainId, info.address),\n converterAddress,\n converterExplorerLink: getBlockExplorerAddressLink(chainId, converterAddress),\n }\n })\n }\n\n addOokiToken() {\n const { chainId } = this.rootStore.web3Connection\n if (chainId === 1 || chainId === 137) {\n providerUtils.addToken(chainId, Asset.OOKI)\n }\n }\n\n init() {\n setTimeout(() => {\n this.migrationStore.set('autoSyncData', true)\n }, 0)\n }\n\n destroyVM() {\n this.migrationStore.autoSyncData = false\n }\n\n convert(migration: Migration) {\n migration.convert()\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n this.migrationStore = rootStore.migrationStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n this.init()\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport MigrateTokens from './MigrateTokens'\nimport MigrateTokensVM from './MigrateTokensVM'\nexport default withVM(MigrateTokens, MigrateTokensVM)\n","export default __webpack_public_path__ + \"static/media/exit-old-staking.1a4067da.png\";","import hashUtils from 'app-lib/hashUtils'\nimport { getBlockExplorerAddressLink, links, ookiToken } from 'bzx-common/src/config/appConfig'\nimport { stakingConfig } from 'bzx-common/src/config/chains/ethereumConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\nimport ButtonChainSwitch from 'shared-components/ButtonChainSwitch'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Button } from 'ui-framework'\nimport StakingVM from './StakingVM'\nimport imgExitOldStaking from './exit-old-staking.png'\n\nconst { stakingContract } = stakingConfig\nconst contractUrl = getBlockExplorerAddressLink(1, stakingContract)\n\nexport function AboutStaking({ vm }: { vm: StakingVM }) {\n return (\n <>\n {vm.rootStore.web3Connection.chainId !== 1 && (\n
\n
\n Stake on Ethereum\n
\n

You need to be on Ethereum Mainnet to stake.

\n
\n )}\n
\n

\n About Staking\n
\n Contract:{' '}\n \n {hashUtils.shortHash(stakingContract, 8, 8)}\n \n
\n

\n\n
\n
    \n
  • \n Earn part of the Ooki protocol fees and{' '}\n \n vote in DAO proposals\n \n .\n
  • \n
  • \n Directly claim rewards for{' '}\n \n providing liquidity\n \n .\n
  • \n
\n\n
\n Migration Note: if you were staking BZRX on Fulcrum, you will have to unstake\n first from the Fulcrum app and restake here.{' '}\n \n .\n
\n\n {vm.migrationDetailsDialog.visible && (\n
\n

Staking Migration FAQ

\n
    \n
  • \n

    \n Q: Is there automatic migration for staked BZRX, iBZRX and BZRX/ETH SLP?\n

    \n

    \n No. Due to technical limitations, we have deployed a new staking contract. You\n will have to unstake from the old contract, migrate and restake.\n

    \n

    \n BZRX can be migrated to OOKI on the{' '}\n \n migration page\n \n .\n

    \n
  • \n
  • \n

    \n Q: What should I do if I have staked BZRX, iBZRX or BZRX/ETH SLP?\n

    \n

    \n If you still have them staked in the old staking contract, unstake them first.\n The address is 0xe95ebce2b02ee07def5ed6b53289801f7fc137a4.\n

    \n
      \n
    • \n Go to the old staking contract page on Etherscan,{' '}\n \n \"Write as Proxy\" section\n \n .\n
    • \n
    • \n Connect your wallet using the Etherscan \"Connect to Web3\" button, be sure to\n be on Ethereum Mainnet.\n
    • \n
    • \n Once connected, locate the \"exit\" function in the page and use the\n \"write\" button.\n
    • \n
    • \n Confirm the transaction and all the tokens will be sent back to your wallet.\n
    • \n
    \n \n
  • \n\n
  • \n

    Q: What about staked iBZRX?

    \n

    \n The equivalent of iBZRX is{' '}\n \n iOOKI\n \n .\n

    \n
      \n
    • Convert BZRX to OOKI and lend /stake again here on Ooki.
    • \n
    \n
  • \n
  • \n

    Q: What about vBZRX?

    \n

    \n If staked on the legacy Fulcrum app; you need to unstake them, then restake them\n here on Ooki.\n

    \n\n

    \n Note: once staked in the new Ooki staking contract, the part that has vested\n will be automatically converted to OOKI.\n

    \n
  • \n
  • \n

    Q: What about Sushi LP token ETH/BZRX?

    \n

    \n The equivalent token is the{' '}\n \n SLP OOKI/ETH token\n \n .\n

    \n
      \n
    • Unstake them, and remove the liquidity from Sushi to get BZRX back.
    • \n
    • \n Convert BZRX to OOKI add liquidity on{' '}\n \n SUSHI LP OOKI/ETH\n \n .\n
    • \n
    • {\"Restake your SLP's here on Ooki.\"}
    • \n
    \n
  • \n
\n

\n Note: be aware that the gas cost on Ethereum may be high for all these steps.\n

\n
\n )}\n
\n
\n \n )\n}\n\nexport default observer(AboutStaking)\n","import { BigNumber } from '@0x/utils'\nimport { Asset, getCommon } from 'app-lib/assetUtils'\nimport React from 'react'\nimport NumberEasing from 'react-number-easing'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Icon } from 'ui-framework'\n\ninterface IAssetBalanceProps {\n size?: 'small' | 'normal'\n variant: 'green' | ''\n className?: string\n balance: BigNumber\n link?: string\n tokenLogo?: React.ReactNode\n decimals?: number\n asset: Asset\n}\n\nfunction customFunctionRender(num: number) {\n return (num > -1 && num < -0.01) || (num >= 0.01 && num < 1)\n ? num.toPrecision(2)\n : Math.floor(num).toFixed()\n}\n\nexport function AssetBalance(props: IAssetBalanceProps) {\n const { spriteLogo, displayName } = getCommon(props.asset)\n return (\n
\n \n {props.link ? (\n \n {displayName}\n \n ) : (\n
{displayName}
\n )}\n \n \n \n
\n )\n}\n\nAssetBalance.defaultProps = {\n variant: '',\n size: 'normal',\n}\n\nexport default React.memo(AssetBalance)\n","import { Asset } from 'app-lib/assetUtils'\nimport { links } from 'bzx-common/src/config/appConfig'\nimport numberUtils from 'bzx-common/src/lib/numberUtils'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport AssetBalance from 'shared-components/AssetBalance'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Button, InputBasic } from 'ui-framework'\nimport RewardsVM from './RewardsVM'\n\nexport function StakingRewards({ vm }: { vm: RewardsVM }) {\n const { rewards } = vm\n\n return (\n
\n

Staking Rewards

\n \n\n {rewards.ooki.gt(0.01) && (\n

\n OOKI rewards include{' '}\n {numberUtils.autoFormat(rewards.vestedOokiInRewards)}{' '}\n vested OOKI from your staked vBZRX and{' '}\n {numberUtils.autoFormat(rewards.actualBzrxStakingRewards)}{' '}\n OOKI of actual staking rewards.\n

\n )}\n\n \n\n

\n 3CRV is an interest earning stablecoin made up of other stablecoins. You can redeem\n them for USDC, USDT, or DAI on{' '}\n \n curve.fi\n \n . Learn more{' '}\n \n here\n \n .\n

\n\n
\n \n \n
\n \n Claim {vm.inputRestake ? '& Restake' : ''}\n \n\n {vm.stakingStore.dao.userShouldVote && (\n
\n

Important: vote before you claim!

\n

\n We recommend you to{' '}\n \n cast your vote\n {' '}\n for the ongoing DAO proposals first. If you claim the rewards before voting onchain, you\n will not be able to vote for the ongoing proposals (due to technical limitations).\n

\n
\n )}\n
\n )\n}\n\nexport default observer(StakingRewards)\n","import { Asset } from 'app-lib/assetUtils'\nimport { ookiToken } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport AssetBalance from 'shared-components/AssetBalance'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Button } from 'ui-framework'\nimport RewardsVM from './RewardsVM'\n\nexport function SushiRewards({ vm }: { vm: RewardsVM }) {\n const { rewards } = vm\n\n return (\n
\n

Sushi Rewards

\n\n \n\n

\n SUSHI earned from providing liquidity to the{' '}\n \n Sushi OOKI/ETH Pool.\n \n

\n\n \n Claim SUSHI\n \n
\n )\n}\n\nexport default observer(SushiRewards)\n","import { Asset } from 'app-lib/assetUtils'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport AssetBalance from 'shared-components/AssetBalance'\nimport { Button } from 'ui-framework'\nimport RewardsVM from './RewardsVM'\n\nexport function StakingRewards({ vm }: { vm: RewardsVM }) {\n const { rewards, stakingStore } = vm\n\n return (\n
\n

Vested BZRX in Your Wallet

\n \n

\n vBZRX tokens in your wallet\n {' vest BZRX overtime. Your available BZRX are listed above.'}\n

\n\n \n Claim BZRX\n \n
\n )\n}\n\nexport default observer(StakingRewards)\n","import { Asset } from 'app-lib/assetUtils'\nimport { links } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport AssetBalance from 'shared-components/AssetBalance'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport RewardsVM from './RewardsVM'\n\nexport function VestingRewards({ vm }: { vm: RewardsVM }) {\n const { rewards } = vm\n\n return (\n <>\n

Time-Locked Rewards

\n
\n
\n \n \n
\n
\n

\n When you stake vesting BZRX (vBZRX), your staking rewards are unlocked on the\n same schedule as the vesting. Learn more{' '}\n \n here\n \n .\n

\n
\n
\n \n )\n}\n\nexport default observer(VestingRewards)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport RewardsVM from './RewardsVM'\nimport StakingRewards from './StakingRewards'\nimport SushiRewards from './SushiRewards'\nimport VestedBZRX from './VestedBZRX'\nimport VestingRewards from './VestingRewards'\n\nexport function Rewards({ vm }: { vm: RewardsVM }) {\n return (\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n )\n}\n\nexport default observer(Rewards)\n","var _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgDaoGovern(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 78 60\",\n enableBackground: \"new 0 0 78 60\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#45A1DA\",\n d: \"M20.3,60H2.6c-0.5,0.1-1.1,0-1.6-0.1c-0.4-0.2-1-0.8-1-1.3s0.7-0.8,1.2-1c0.5-0.1,0.9-0.1,1.4-0.1H38 c0.5-0.1,0.9,0,1.4,0.1c0.5,0.2,1.2,0.8,1.1,1c-0.2,0.6-0.6,1-1.1,1.3c-0.4,0.2-1,0.1-1.6,0.1H20.3z M19.8,53.8H6 c-1,0-2.2,0.2-2.3-1.2c-0.1-1.4,1.2-1.3,2.2-1.3h28.4c0.7,0,1.8,0.4,1.9,0.8c0.4,1.4-0.7,1.6-1.8,1.6 C34.4,53.7,19.8,53.8,19.8,53.8z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#46C0EC\",\n d: \"M45.5,25.4l1.5-1.5c1.6-1.6,4.1-1.6,5.7,0l24.1,23.7c1.6,1.6,1.6,4,0,5.6l-1.5,1.5c-1.6,1.6-4.1,1.6-5.7,0 L45.5,30.9C43.9,29.4,43.9,26.9,45.5,25.4z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M70.4,52c0.5,0.6,1.2,1.1,1.9,1.4c1.3,0.5,2.7,0.5,4-0.1l0.3-0.3c1.6-1.6,1.6-4,0-5.6l-24-23.6 c-1.6-1.6-4.1-1.6-5.7,0l-1.4,1.6c-0.1,0.1-0.2,0.2-0.2,0.3C45.3,25.7,70.4,52,70.4,52z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#45A1DA\",\n d: \"M72.3,53.4c-0.7-0.3-1.4-0.8-1.9-1.4c-8.4-8.8-17.5-16.6-25.9-25.4c-1.3,1.6-0.5,2.8,0.9,4.3l24.1,23.7 c1.6,1.6,4.1,1.6,5.7,0l1.2-1.2C75.1,53.9,73.7,53.9,72.3,53.4z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#46C0EC\",\n d: \"M44.7,9.9c-0.1,3.1-1.3,6.2-3.3,8.5c-4.4,4.9-10.9,4.4-11.6,4.4l15.7,15.3c-0.4-3.6,0.9-7.1,3.4-9.8 c3.2-3.1,7.9-4.4,12.3-3.2L44.7,9.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M57.8,21.9l-13-12c-0.1,3.1-1.3,6.2-3.3,8.5c-4.4,4.9-10.9,4.4-11.6,4.4l13,12.6c-0.1-3.3,1.1-6.6,3.2-9.1 C49,23.2,53.4,21.5,57.8,21.9z M45,37.6l0.6,0.6c0-0.2,0-0.5-0.1-1L45,37.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#45A1DA\",\n d: \"M49,28.4c3.2-3.1,7.9-4.4,12.3-3.2l-3-2.7c-4.2,0.9-6.5,0.8-9.9,3.8c-3,2.6-5.5,6.7-5.5,9.3l2.2,2.2 l0.6-0.4C45.5,34,46.7,30.7,49,28.4z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M44.3,13c-1.2,5-5.5,8.8-10.7,9.6c3.4,3.2,9.1,8.7,12.2,11.7c0.4-2.2,1.5-4.4,3.2-6.1c2.2-2.2,5.2-3.5,8.3-3.6 C54,21.6,46.5,14.9,44.3,13z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#45A1DA\",\n d: \"M29.8,22.8l15.8,15.3c-0.1-1.3-0.1-2.5,0.2-3.8c-3.1-3-8.8-8.5-12.2-11.7C32.4,22.8,31.1,22.9,29.8,22.8z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#46C0EC\",\n d: \"M54.4,1.1c-1.6-1.5-4.1-1.4-5.7,0.2l-4.4,4.6c-1.5,1.6-1.4,4,0.2,5.6L58.1,24c1.6,1.5,4.1,1.4,5.7-0.2 l4.5-4.7c1.5-1.6,1.4-4-0.2-5.6L54.4,1.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M62.6,22.5c-1,0.1-2,0-2.9-0.4c-0.4-0.2-0.7-0.4-1-0.7L46,9.8c-0.3-0.6-0.5-1.2-0.5-1.8c0-0.9,0.2-1.9,0.7-2.6 c1-1.7,2.1-3.2,3.4-4.8c1.6-1,3.6-0.8,4.9,0.5l13.4,12.4c1.6,1.5,1.7,4,0.2,5.6l-2.9,3C64.4,22.3,63.5,22.4,62.6,22.5z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#45A1DA\",\n d: \"M45.5,8c0,0.6,0.2,1.2,0.5,1.8l12.7,11.5c0.3,0.3,0.6,0.5,1,0.7c0.9,0.4,1.9,0.6,2.9,0.4l2.7-0.3l-1.6,1.6 c-1.5,1.6-4.1,1.7-5.7,0.2L44.4,11.5c-1.6-1.5-1.7-4-0.2-5.6l4.5-4.6c0.2-0.2,0.5-0.5,0.8-0.6c-1.3,1.5-2.4,3-3.4,4.8 C45.7,6.2,45.4,7.1,45.5,8z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#46C0EC\",\n d: \"M21.9,27.9l4.5-4.4c1.6-1.6,4.1-1.6,5.7,0l12.9,12.7c1.6,1.6,1.6,4,0,5.6l-4.5,4.4c-1.6,1.6-4.1,1.6-5.7,0 L21.9,33.5C20.3,31.9,20.3,29.5,21.9,27.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M23.2,29c-0.1,1,0.1,2,0.5,2.7c0.2,0.4,0.4,0.7,0.7,1c4,4,8,7.9,12.1,11.8c0.6,0.3,1.2,0.4,1.8,0.4 c0.9,0,1.8-0.3,2.6-0.7c1.7-1,3.2-2.2,4.7-3.4c0.9-1.6,0.7-3.5-0.6-4.7L32,23.5c-1.6-1.6-4.1-1.6-5.7,0l-2.9,2.9 C23.3,27.2,23.2,28.1,23.2,29z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#45A1DA\",\n d: \"M38.3,45c-0.6,0-1.2-0.2-1.8-0.4c-4-3.9-8-7.9-12.1-11.8c-0.3-0.3-0.5-0.6-0.7-1c-0.4-0.9-0.6-1.9-0.5-2.7 c0-0.9,0.1-1.8,0.3-2.5l-1.6,1.6c-1.6,1.6-1.6,4,0,5.6l12.9,12.6c1.6,1.6,4.1,1.6,5.7,0l4.5-4.4c0.2-0.2,0.4-0.5,0.6-0.8 c-1.4,1.3-3,2.4-4.7,3.4C40,44.8,39.1,45,38.3,45z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M48.7,3.6c-0.1-0.4,1.5-1.7,3.2-1.6c1.4,0.2,2.6,1,3.3,2.2c-0.9-0.2-1.9-0.3-2.9-0.4 C50,3.6,48.8,3.9,48.7,3.6z M26.7,26.4c-0.1-0.4,1.5-1.7,3.2-1.6c1.4,0.2,2.6,1,3.3,2.2c-0.9-0.2-1.9-0.3-2.9-0.4 C28,26.4,26.8,26.7,26.7,26.4z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M56.4,31.3l11.3,11.1\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#C5CCE9\",\n d: \"M56,31.7l9.9,9.8l1.4,1.4c0.2,0.2,0.6,0.2,0.9,0c0.2-0.2,0.2-0.6,0-0.9l-9.9-9.8l-1.4-1.4 c-0.3-0.2-0.7-0.2-0.9,0.1C55.8,31.1,55.8,31.5,56,31.7z M54.2,29.9c0.4,0,0.8-0.3,0.8-0.8s-0.3-0.8-0.8-0.8s-0.8,0.3-0.8,0.8 S53.8,29.9,54.2,29.9z\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgDaoGovern);\nexport default __webpack_public_path__ + \"static/media/dao-govern.f3ab9933.svg\";\nexport { ForwardRef as ReactComponent };","import { RootStore, StakingStore } from 'bzx-common/src/stores'\nimport Rewards from 'bzx-common/src/stores/StakingStore/Rewards'\nimport * as mobx from 'mobx'\n\ntype rewardVMProps = 'inputRestake'\n\nexport default class RewardsVM {\n rootStore: RootStore\n stakingStore: StakingStore\n inputRestake = true\n rewards: Rewards\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: rewardVMProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n claimStakingRewards() {\n return this.stakingStore.claimStakingRewards(this.inputRestake)\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n this.stakingStore = rootStore.stakingStore\n this.rewards = rootStore.stakingStore.rewards\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport Rewards from './Rewards'\nimport RewardsVM from './RewardsVM'\nexport default withVM(Rewards, RewardsVM)\n","import { abbreviate } from 'app-lib/numberUtils'\nimport { links } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Loader } from 'ui-framework'\nimport DaoVM from './DaoVM'\n\nconst loader = (\n
\n \n
\n)\n\nexport function OnChainProposals({ vm }: { vm: DaoVM }) {\n const { onchainProposals } = vm.dao\n return (\n
\n

\n
\n On-Chain Proposals\n \n Vote on Tally\n \n
\n

\n
\n {onchainProposals.length === 0 && vm.dao.onchainProposalsPending && loader}\n {vm.dao.onchainProposalsError && (\n

Could not fetch the list of proposals.

\n )}\n\n {onchainProposals.map((proposal) => {\n const status = proposal.executed ? (\n executed\n ) : proposal.canceled ? (\n canceled\n ) : (\n {proposal.status.toLowerCase()}\n )\n return (\n
\n

\n {!proposal.description && `#${proposal.id.toNumber()}`} {proposal.description}\n {status}\n

\n\n For: {abbreviate(proposal.votes.for)}\n Against: {abbreviate(proposal.votes.against)}\n
\n )\n })}\n
\n
\n Check the details for each proposal in our{' '}\n \n Github Repo\n \n .\n
\n
\n )\n}\n\nexport default observer(OnChainProposals)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport DaoVM from './DaoVM'\nimport { Button, Loader } from 'ui-framework'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { links } from 'bzx-common/src/config/appConfig'\nimport { getDate } from 'app-lib/dateUtils'\n\nconst loader = (\n
\n \n
\n)\n\nexport function Proposals({ vm }: { vm: DaoVM }) {\n return (\n
\n

\n
\n Latest Proposals\n \n Vote on Snapshot\n \n
\n

\n
\n {vm.proposals.length === 0 && vm.dao.proposalsPending && loader}\n {vm.dao.proposalsError && (\n

Could not fetch the list of proposals.

\n )}\n\n {vm.proposals.map((proposal) => {\n const { data, dialogVM } = proposal\n return (\n
\n

\n {data.title}\n
\n {data.state}\n
\n

\n
\n {getDate(data.start)}\n \n
\n

\n {dialogVM.visible ? data.body : `${data.body.slice(0, 180)}…`}\n

\n
\n )\n })}\n
\n
\n )\n}\n\nexport default observer(Proposals)\n","import { getCommon } from 'app-lib/assetUtils'\nimport hashUtils from 'app-lib/hashUtils'\nimport { autoFormat } from 'app-lib/numberUtils'\nimport { getBlockExplorerAddressLink, links, stakingConfig } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Button, Icon, Input, Loader } from 'ui-framework'\nimport { ReactComponent as Govern } from './dao-govern.svg'\nimport DaoVM from './DaoVM'\nimport OnChainProposals from './OnChainProposals'\nimport Proposals from './Proposals'\n\nconst loader = \n\nexport function Dao({ vm }: { vm: DaoVM }) {\n const { dao } = vm.stakingStore\n const votingPower = dao.votingPowerTotal.isZero() ? dao.votingPowerStaked : dao.votingPowerTotal\n\n return (\n <>\n
\n
\n {dao.votingPowerPending && loader}\n

\n Governance\n {!dao.votingPowerPending && (\n \n \n \n )}\n

\n
\n
\n \n

Your voting power

\n
\n {autoFormat(votingPower)}\n
\n {dao.votingPowerFromDelegators.gt(0) && (\n

\n This includes {autoFormat(dao.votingPowerFromDelegators)} voting power coming\n from your delegators.\n

\n )}\n {dao.hasDelegate && (\n You are delegating\n )}\n
\n\n
\n {dao.getDelegatePending && loader}\n

\n Delegate\n {!dao.getDelegatePending && (\n \n \n \n )}\n

\n
\n

\n Someone you trust can vote on your behalf. You have the possibility to give them your\n voting power.\n

\n\n {dao.hasDelegate && (\n
\n

\n Your are currently delegating to:{' '}\n \n {hashUtils.shortHash(dao.delegateAddress)}\n \n

\n \n
\n )}\n\n {!dao.hasDelegate && (\n
\n
\n \n Delegate address\n \n
\n \n \n Delegate\n \n
\n \n

\n You can remove this power at any time and this does not give them control of your\n staked tokens.\n

\n
\n )}\n

Vote Delegator Contract

\n\n \n {hashUtils.shortHash(stakingConfig.voteDelegatorContract, 8, 8)}\n \n
\n
\n
\n\n
\n \n Snapshot Votes\n \n \n Onchain Votes\n \n
\n\n {vm.daoSection === 'snapshotProposals' && }\n {vm.daoSection === 'onchainProposals' && }\n\n {dao.globalStaked.length > 0 && (\n
\n

Total staked by all users

\n
\n {dao.globalStaked.map((staked) => {\n const { displayName, spriteLogo } = getCommon(staked.token)\n return (\n
\n
\n {displayName}\n
{' '}\n
{autoFormat(staked.amount)}
\n
\n )\n })}\n
\n
\n )}\n \n )\n}\n\nexport default observer(Dao)\n","import { RootStore, StakingStore } from 'bzx-common/src/stores'\nimport Dao from 'bzx-common/src/stores/StakingStore/Dao'\nimport * as mobx from 'mobx'\nimport { DialogVM } from 'ui-framework'\nimport { isAddress } from 'web3-utils'\n\ntype DaoSection = 'snapshotProposals' | 'onchainProposals'\n\ninterface IDaoVMProps {\n inputDelegate: string\n daoSection: DaoSection\n}\n\nexport default class DaoVM implements IDaoVMProps {\n rootStore: RootStore\n stakingStore: StakingStore\n dao: Dao\n stopAutoSyncData?: mobx.Lambda\n inputDelegate = ''\n daoSection: DaoSection = 'snapshotProposals'\n\n get canDelegate() {\n const { walletAddress, isConnected } = this.rootStore.web3Connection\n return isConnected && isAddress(this.inputDelegate) && this.inputDelegate !== walletAddress\n }\n\n get proposals() {\n return this.dao.snapshotProposals.map((proposal) => ({\n dialogVM: new DialogVM({ id: `proposal-${proposal.id}` }),\n data: proposal,\n }))\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof IDaoVMProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n setDelegate(event: React.FormEvent) {\n event.preventDefault()\n this.dao.setDelegate(this.inputDelegate)\n }\n\n setSection(section: DaoSection) {\n this.daoSection = section\n }\n\n init() {\n setTimeout(async () => {\n this.dao.set('autoSyncData', true)\n await this.dao.getSnapshotProposals()\n await this.dao.getOnchainProposals()\n }, 0)\n }\n\n destroyVM() {\n this.dao.set('autoSyncData', false)\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n this.stakingStore = rootStore.stakingStore\n this.dao = this.stakingStore.dao\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n this.init()\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport Dao from './Dao'\nimport DaoVM from './DaoVM'\nexport default withVM(Dao, DaoVM)\n","import { getCommon } from 'app-lib/assetUtils'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Button, Icon } from 'ui-framework'\nimport StakingFormVM from '../StakingFormVM'\n\nexport function SpendingAllowance({ vm }: { vm: StakingFormVM }) {\n const { needApprovalList } = vm.stakingStore.stakingAllowances\n\n if (needApprovalList.length === 0) {\n return null\n }\n\n return (\n
\n

Spending Approval

\n

\n \n Please approve all the tokens you are planning to stake, in order to save on transaction\n fees.\n \n \n .\n

\n {vm.spendingAllowanceDetails.visible && (\n
\n

What is a Spending Approval?

\n

\n When staking, your tokens are moved from your wallet to the BZX staking contract. In\n order to do so, you need to approve a transaction that will allow it.\n

\n

\n While you can stake multiple tokens at the same time, spending approvals are done for\n each token separately.\n

\n
\n )}\n\n
\n {needApprovalList.map((allowance) => {\n const { spriteLogo, displayName } = getCommon(allowance.asset)\n return (\n \n
\n \n \n Approve {displayName}\n \n
\n \n )\n })}\n
\n
\n )\n}\n\nexport default observer(SpendingAllowance)\n","import { BigNumber } from '@0x/utils'\nimport { Asset, getCommon } from 'app-lib/assetUtils'\nimport React from 'react'\nimport { Icon, InputBasic, Slider } from 'ui-framework'\n\ninterface IStakeInputProps {\n id: string\n max: BigNumber\n onChange: (name: 'ooki' | 'vbzrx' | 'iooki' | 'slp_ooki_eth', value: number) => void\n value: string\n asset: Asset\n}\n\nexport function InputStake(props: IStakeInputProps) {\n const { spriteLogo, displayName } = getCommon(props.asset)\n return (\n
\n \n \n \n \n \n
\n \n
\n
\n )\n}\n\nexport default React.memo(InputStake)\n","import { Asset } from 'app-lib/assetUtils'\nimport { links } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport { Button } from 'ui-framework'\nimport StakingFormVM from '../StakingFormVM'\nimport InputStake from './InputStake'\n\nexport function Stake({ vm }: { vm: StakingFormVM }) {\n const { wallet } = vm.stakingStore.userBalances\n const { stakingAllowances } = vm.stakingStore\n\n if (!vm.stakingStore.hasEnoughToStake) {\n return null\n }\n\n return (\n
\n

Add to Staking Balance

\n\n {wallet.ooki.gte(0.01) && stakingAllowances.ooki.amount.gte(wallet.ooki) && (\n \n )}\n {wallet.vbzrx.gte(0.01) && stakingAllowances.vbzrx.amount.gte(wallet.vbzrx) && (\n \n )}\n {wallet.iooki.gte(0.01) && stakingAllowances.iooki.amount.gte(wallet.iooki) && (\n \n )}\n {wallet.slp_ooki_eth.gte(0.01) &&\n stakingAllowances.slp_ooki_eth.amount.gte(wallet.slp_ooki_eth) && (\n \n )}\n\n {stakingAllowances.needApprovalList.length < 4 && (\n \n Stake\n \n )}\n\n {vm.stakingStore.dao.userShouldVote && (\n
\n

Important: vote before you stake!

\n

\n We recommend you to{' '}\n \n cast your vote\n {' '}\n for the ongoing DAO proposals first. If you stake more tokens before voting onchain, you\n will not be able to vote for the ongoing proposals (due to technical limitations).\n

\n
\n )}\n
\n )\n}\n\nexport default observer(Stake)\n","import { Asset } from 'app-lib/assetUtils'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Button } from 'ui-framework'\nimport StakingFormVM from '../StakingFormVM'\nimport InputStake from './InputStake'\n\nexport function Unstake({ vm }: { vm: StakingFormVM }) {\n const { staked } = vm.stakingStore.userBalances\n\n return (\n
\n

Remove from Staking Balance

\n {staked.ooki.gte(0.01) && (\n \n )}\n {staked.vbzrx.gte(0.01) && (\n \n )}\n {staked.iooki.gte(0.01) && (\n \n )}\n {staked.slp_ooki_eth.gte(0.01) && (\n \n )}\n\n \n Unstake\n \n
\n )\n}\n\nexport default observer(Unstake)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport { Button, Loader } from 'ui-framework'\nimport StakingFormVM from '../StakingFormVM'\nimport SpendingAllowance from './SpendingAllowance'\nimport Stake from './Stake'\nimport Unstake from './Unstake'\n\nconst loader = (\n
\n \n
\n)\n\nexport function AddToBalance({ vm }: { vm: StakingFormVM }) {\n return (\n \n
\n
\n
\n {vm.userBalances.wallet.isWorthEnough && (\n \n Stake\n \n )}\n {vm.userBalances.staked.isWorthEnough && (\n \n Unstake\n \n )}\n
\n {/* {loader} */}\n
\n\n {vm.rootStore.web3Connection.isConnected &&\n !vm.stakingStore.stakingAllowances.allowanceChecked &&\n loader}\n\n {vm.stakingStore.stakingAllowances.allowanceChecked && (\n <>\n {!vm.unstakeSelected && }\n\n {vm.stakingStore.stakingAllowances.needApprovalList.length < 4 &&\n (vm.unstakeSelected ? : )}\n \n )}\n
\n
\n )\n}\n\nexport default observer(AddToBalance)\n","import { Asset } from 'app-lib/assetUtils'\nimport { TokenBalances } from 'bzx-common/src/stores/StakingStore/UserBalances'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport AssetBalance from 'shared-components/AssetBalance'\nimport { ookiToken } from 'bzx-common/src/config/appConfig'\n\nexport function Balances({ wallet }: { wallet: TokenBalances }) {\n return (\n <>\n \n\n \n\n \n\n \n \n )\n}\n\nexport default observer(Balances)\n","import RootStore from 'bzx-common/src/stores/RootStore'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Loader } from 'ui-framework'\nimport Balances from './Balances'\n\nconst loader = \n\nexport function UserBalances({ rootStore }: { rootStore: RootStore }) {\n const { stakingStore } = rootStore\n const { userBalances } = stakingStore\n const { wallet, staked } = userBalances\n\n return (\n
\n
\n
\n {userBalances.pendingWalletBalance && loader}\n

Wallet Balance

\n \n
\n\n
\n {userBalances.pendingStakedBalance && loader}\n

Staking Balance

\n \n
\n
\n\n {userBalances.loaded && wallet.isEmpty && staked.isEmpty && (\n

\n There are no tokens available to stake in your wallet.\n

\n )}\n
\n )\n}\n\nexport default observer(UserBalances)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport AddToBalance from './AddToBalance'\nimport StakingFormVM from './StakingFormVM'\nimport UserBalances from './UserBalances'\n\nexport function StakingForm({ vm }: { vm: StakingFormVM }) {\n const { userBalances } = vm.stakingStore\n const { wallet, staked } = userBalances\n\n return (\n <>\n \n {(wallet.isWorthEnough || staked.isWorthEnough) && }\n \n )\n}\n\nexport default observer(StakingForm)\n","import { Asset } from 'app-lib/assetUtils'\nimport { BigNumber } from '@0x/utils'\nimport appConfig from 'bzx-common/src/config/appConfig'\nimport { stakeableToken, unstakeableToken } from 'bzx-common/src/domain/staking/stakingTypes'\nimport stakingUtils from 'bzx-common/src/lib/stakingUtils'\nimport { RootStore, StakingStore } from 'bzx-common/src/stores'\nimport UserBalances from 'bzx-common/src/stores/StakingStore/UserBalances'\nimport * as mobx from 'mobx'\nimport { DialogVM } from 'ui-framework'\n\ntype StakingFormVMProp =\n | 'ookiInput'\n | 'vbzrxInput'\n | 'iookiInput'\n | 'slp_ooki_eth'\n | 'unstakeSelected'\n\nexport default class StakingFormVM {\n [name: string]: any\n public rootStore: RootStore\n public stakingStore: StakingStore\n public userBalances: UserBalances\n public ookiInput = '0'\n public iookiInput = '0'\n public vbzrxInput = '0'\n public slp_ooki_ethInput = '0'\n public spendingAllowanceDetails = new DialogVM({ id: 'spendingAllowanceDetails' })\n public unstakeSelected = false\n\n get inputsAsBN(): Record {\n return {\n ooki: new BigNumber(this.ookiInput),\n vbzrx: new BigNumber(this.vbzrxInput),\n iooki: new BigNumber(this.iookiInput),\n slp_ooki_eth: new BigNumber(this.slp_ooki_ethInput),\n }\n }\n\n get canStake() {\n // TODO : redo check. Had to disable because of spending approval changes.\n return true\n // const { wallet } = this.stakingStore.userBalances\n // return stakingUtils.verifyStake(wallet, this.inputsAsBN)\n }\n\n get canUnstake() {\n const { staked } = this.stakingStore.userBalances\n return stakingUtils.verifyStake(staked, this.inputsAsBN)\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: StakingFormVMProp, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n public assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n /**\n * Format the token amounts in inputs\n */\n private formatPrecision = (output: string) => {\n if (output.match(/^(\\d+\\.{1}0?)$/)) {\n return output\n }\n return Number(parseFloat(output).toFixed(2)).toPrecision()\n }\n\n /**\n * Helper function to change the input value ensuring it is always valid\n */\n public changeTokenBalance(name: 'ooki' | 'vbzrx' | 'iooki' | 'slp_ooki_eth', value: number) {\n const { wallet, staked } = this.stakingStore.userBalances\n const balance = this.unstakeSelected ? staked : wallet\n const totalBalance = balance[name]\n const valueBN = new BigNumber(value)\n let newInputValue = String(value)\n\n if (valueBN.gt(totalBalance)) {\n newInputValue = totalBalance.toFixed(2, 1)\n } else if (valueBN.lt(0) || !value) {\n newInputValue = '0'\n } else {\n newInputValue = this.formatPrecision(String(value))\n }\n this[`${name}Input`] = newInputValue\n }\n\n public setSpendingAllowance(asset: Asset) {\n const spendingAllowance = this.stakingStore.stakingAllowances[asset.toLowerCase()]\n return spendingAllowance.update(appConfig.INFINITE_ALLOWANCE)\n }\n\n /**\n * Stake\n * Uses some heuristic: we are assuming that the user wants to use the full amounts\n * by comparing rounded values of staked and inputs\n */\n public stake() {\n const { stakingAllowances } = this.stakingStore\n const { wallet } = this.userBalances\n const tokenAmounts = new Map()\n Object.values(stakeableToken).forEach((token) => {\n const inputValue = this.inputsAsBN[token]\n if (!stakingAllowances.needApprovals.get(token) && inputValue.gt(0)) {\n const amount =\n inputValue.toFixed(2, 1) === wallet[token].toFixed(2, 1) ? wallet[token] : inputValue\n tokenAmounts.set(token, amount)\n }\n })\n return this.stakingStore.stake(tokenAmounts)\n }\n\n /**\n * Unstake\n * Users some heuristic: we are assuming that the user wants to use the full amounts\n * by comparing rounded values of staked and inputs\n */\n public unstake() {\n const { staked } = this.userBalances\n const tokenAmounts = new Map()\n\n Object.values(unstakeableToken).forEach((token) => {\n const inputValue = this.inputsAsBN[token]\n if (inputValue.gt(0)) {\n const amount =\n inputValue.toFixed(2, 1) === staked[token].toFixed(2, 1) ? staked[token] : inputValue\n tokenAmounts.set(token, amount)\n }\n })\n\n return this.stakingStore.unstake(tokenAmounts)\n }\n\n private init() {\n const { wallet, staked } = this.userBalances\n this.unstakeSelected = !wallet.isWorthEnough && staked.isWorthEnough\n const balance = this.unstakeSelected ? staked : wallet\n\n this.ookiInput = balance.ooki.toFixed(2, 1)\n this.vbzrxInput = balance.vbzrx.toFixed(2, 1)\n this.iookiInput = balance.iooki.toFixed(2, 1)\n this.slp_ooki_ethInput = balance.slp_ooki_eth.toFixed(2, 1)\n\n this.stopInputSync = mobx.reaction(\n () => {\n const unstakeSelected = !staked.isWorthEnough\n ? false\n : !wallet.isWorthEnough\n ? true\n : this.unstakeSelected\n const tokens = unstakeSelected ? staked : wallet\n return {\n ookiInput: tokens.ooki.toFixed(2, 1),\n vbzrxInput: tokens.vbzrx.toFixed(2, 1),\n iookiInput: tokens.iooki.toFixed(2, 1),\n slp_ooki_ethInput: tokens.slp_ooki_eth.toFixed(2, 1),\n unstakeSelected,\n }\n },\n (update) => {\n this.assign(update)\n }\n )\n }\n\n public destroyVM() {\n this.stopInputSync()\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n this.stakingStore = rootStore.stakingStore\n this.userBalances = rootStore.stakingStore.userBalances\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n this.init()\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport StakingForm from './StakingForm'\nimport StakingFormVM from './StakingFormVM'\n\nexport default withVM(StakingForm, StakingFormVM)\n","import { Asset } from 'app-lib/assetUtils'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport AssetBalance from 'shared-components/AssetBalance'\nimport StakingVM from '../StakingVM'\n\nexport function WalletUpdate({ vm }: { vm: StakingVM }) {\n const { walletUpdate } = vm.rootStore.stakingStore\n const { walletUpdatePopup } = vm.rootStore.uiStore\n\n if (!walletUpdatePopup.visible || !walletUpdate) {\n return null\n }\n\n const lines = Math.ceil(walletUpdate.from.length / 2)\n const styles = {\n height: `${lines * 40 + 84}px`,\n }\n\n const cssClass = `st-wallet-update--${walletUpdatePopup.state} padded-1`\n\n return (\n
\n

Wallet Update

\n
\n {walletUpdate.from.map((change) => {\n return (\n
\n \n
\n )\n })}\n
\n
\n )\n}\n\nexport default observer(WalletUpdate)\n","export default __webpack_public_path__ + \"static/media/staking-coins-left.b0789ee6.svg\";","export default __webpack_public_path__ + \"static/media/staking-coins-right.b0c4f2c0.svg\";","import { observer } from 'mobx-react'\nimport React from 'react'\nimport { Button } from 'ui-framework'\nimport AboutStaking from './AboutStaking'\nimport Rewards from './Rewards'\nimport Dao from './Dao'\nimport StakingForm from './StakingForm'\nimport StakingVM from './StakingVM'\nimport WalletUpdate from './WalletUpdate'\nimport coinsLeftImg from './staking-coins-left.svg'\nimport coinsRightImg from './staking-coins-right.svg'\n\nexport function StakingDashboard({ vm }: { vm: StakingVM }) {\n const { media } = vm.rootStore.uiStore\n const { rewards } = vm.rootStore.stakingStore\n\n return (\n
\n <>\n
\n \n Staking\n \n \n Rewards\n \n \n DAO\n \n
\n {vm.section === 'stake' && }\n {vm.section === 'rewards' && }\n {vm.section === 'dao' && }\n \n\n {!media.isMobileMedia && (\n <>\n \n \n \n )}\n \n\n \n
\n )\n}\n\nexport default observer(StakingDashboard)\n","import { RootStore, StakingStore } from 'bzx-common/src/stores'\nimport { DialogVM } from 'ui-framework'\nimport * as mobx from 'mobx'\n\ntype StakingVMProps = 'pending' | 'section'\n\nexport default class StakingVM {\n rootStore: RootStore\n stakingStore: StakingStore\n pending = false\n section: 'dao' | 'stake' | 'rewards' = 'stake'\n migrationDetailsDialog = new DialogVM({ id: 'staking-migration' })\n private stopAutoSyncData: mobx.IReactionDisposer | null = null\n\n get stakingAvailable() {\n return this.rootStore.web3Connection.chainId === 1\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: StakingVMProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n init() {\n setTimeout(() => {\n this.stopAutoSyncData = mobx.autorun(() => {\n const { chainId, walletAddress } = this.rootStore.web3Connection\n if (chainId === 1 && walletAddress) {\n this.stakingStore.syncData()\n }\n })\n }, 0)\n }\n\n destroyVM() {\n this.stopAutoSyncData && this.stopAutoSyncData()\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n this.stakingStore = rootStore.stakingStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n this.init()\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport Staking from './Staking'\nimport StakingVM from './StakingVM'\n\nexport default withVM(Staking, StakingVM)\n","import { getDateTime } from 'app-lib/dateUtils'\nimport hashUtils from 'app-lib/hashUtils'\nimport numberUtils from 'app-lib/numberUtils'\nimport protocolStatsUtils from 'app-lib/protocolStatsUtils'\nimport chainConfigs from 'bzx-common/src/config/chains'\nimport { Button, ButtonClipboard, Icon } from 'bzx-common/src/ui-framework'\nimport { IActivityInfo } from 'bzx-common/src/domain/txTypes'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport ExternalLink from 'shared-components/ExternalLink'\n\nfunction EventInfo({\n info,\n devMode,\n currentUser,\n}: {\n info: IActivityInfo\n devMode?: boolean\n currentUser?: boolean\n}) {\n const {\n asset,\n chainId,\n leverage,\n collateral,\n type,\n value,\n txHash,\n timestamp,\n user,\n operation,\n pair,\n } = info\n const chain = chainConfigs[chainId]\n\n return (\n <>\n
\n \n {chain.chainDetails.shortName}\n
\n\n
\n \n {operation}\n
\n\n
\n {pair ? (\n
\n {type} {pair}\n
\n {value && {numberUtils.autoFormat(value)}}\n {asset}\n {leverage?.gt(0) && {` (${numberUtils.autoFormat(leverage)}X)`}}\n
\n
\n ) : collateral ? (\n
\n {numberUtils.autoFormat(value)} \n {asset} {type} using\n {collateral} collateral\n
\n ) : (\n
\n {value && {numberUtils.autoFormat(value)} }\n {asset} {type}\n
\n )}\n
\n\n {!currentUser && (\n
\n User: \n \n {hashUtils.shortHash(user)}\n {' '}\n \n
\n )}\n\n
\n \n {getDateTime(timestamp)}\n \n
\n {devMode && (\n
\n \n Impersonate\n \n
\n )}\n \n )\n}\n\nexport default observer(EventInfo)\n","import React from 'react'\nimport { Button, Input, InputBasic, Loader } from 'bzx-common/src/ui-framework'\nimport StatsVM from '../StatsVM'\nimport { observer } from 'mobx-react'\nimport { ReactComponent as ArrowPagination } from 'bzx-common/src/assets/images/fulcrum/icon_pagination.svg'\nimport EventInfo from 'shared-components/EventInfo'\n\nconst loader = (\n
\n \n
\n)\n\nexport function Activity({ vm }: { vm: StatsVM }) {\n const { latestProtocolEvents, selectedUserEvents } = vm.statsStore\n const { devMode } = vm.rootStore.settings\n const showLoader = selectedUserEvents.pending || latestProtocolEvents.pending\n return (\n
\n
\n

Latest activity across blockchains

\n {latestProtocolEvents.loaded && (\n
\n \n
\n \n \n
\n
\n )}\n\n {showLoader ? (\n loader\n ) : (\n <>\n {latestProtocolEvents.error && (\n

\n The latest protocol events could not be fetched.\n

\n )}\n
\n {vm.latestActivity.map((info, i) => (\n \n ))}\n
\n {vm.quantityGrids > 1 && (\n
\n \n \n
\n\n {vm.paginations.map((pagination) => (\n \n \n {++pagination}\n \n \n ))}\n\n \n \n
\n
\n )}\n \n )}\n
\n \n )\n}\n\nexport default observer(Activity)\n","import { autoFormat, formatPercent } from 'app-lib/numberUtils'\nimport React from 'react'\nimport { Icon } from 'ui-framework'\nimport TokenTip from 'shared-components/TokenTip'\nimport { IChainTokenStat } from 'app-lib/apis/bzxApi'\n\nexport default function ReserveDesktopItem({ statsItem }: { statsItem: IChainTokenStat }) {\n return (\n \n \n \n
\n \n \n {statsItem.tokenName}\n \n
\n \n \n {statsItem.usdTotalLocked ? (\n <>\n $\n {autoFormat(statsItem.usdTotalLocked, 5)}\n \n ) : (\n `-`\n )}\n \n \n
\n {statsItem.totalSupply ? (\n <>\n {autoFormat(statsItem.totalSupply, 5)}{' '}\n {statsItem.tokenName}\n \n ) : (\n `-`\n )}\n
\n\n
\n {statsItem.usdSupply ? (\n <>\n {autoFormat(statsItem.usdSupply, 5)}\n $\n \n ) : (\n `-`\n )}\n
\n \n\n \n
\n {statsItem.availableLiquidity ? (\n <>\n {autoFormat(statsItem.availableLiquidity, 5)}{' '}\n available\n \n ) : (\n `-`\n )}\n
\n
\n {statsItem.totalBorrow ? (\n <>\n {autoFormat(statsItem.totalBorrow, 5)}{' '}\n borrowed\n \n ) : (\n `-`\n )}\n
\n \n \n {statsItem.vaultBalance ? (\n <>\n {autoFormat(statsItem.vaultBalance, 5)}{' '}\n {statsItem.tokenName}\n \n ) : (\n `-`\n )}\n \n \n {statsItem.supplyApr ? (\n <>\n {formatPercent(statsItem.supplyApr)}\n %\n \n ) : (\n `-`\n )}\n \n \n {statsItem.borrowApr ? (\n <>\n {formatPercent(statsItem.borrowApr)}\n %\n \n ) : (\n `-`\n )}\n \n \n \n )\n}\n","import { IChainTokenStat } from 'app-lib/apis/bzxApi'\nimport React from 'react'\nimport ReserveDesktopItem from './ReserveDesktopItem'\n\nexport default function ReserveDesktop({ statsItems }: { statsItems: IChainTokenStat[] }) {\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n\n {statsItems.map((item) => (\n \n ))}\n
ReserveTVL (USD)Total SupplyLiquidity\n Locked as\n
\n Collateral\n
\n Lending
\n Rates\n
\n Borrowing
\n Rates\n
\n
\n )\n}\n","import { IChainTokenStat } from 'app-lib/apis/bzxApi'\nimport { autoFormat, formatPercent } from 'app-lib/numberUtils'\nimport React from 'react'\nimport TokenTip from 'shared-components/TokenTip'\nimport { Icon } from 'ui-framework'\n\nexport default function ReserveMobileItem({ statsItem }: { statsItem: IChainTokenStat }) {\n return (\n
\n
\n
\n \n \n {statsItem.tokenName}\n \n
\n
\n
\n
\n

TVL (USD)

\n
\n {statsItem.usdTotalLocked ? (\n <>\n $\n {autoFormat(statsItem.usdTotalLocked, 5)}\n \n ) : (\n `-`\n )}\n
\n
\n
\n

Total Supply

\n
\n
\n {statsItem.totalSupply ? (\n <>\n {autoFormat(statsItem.totalSupply, 5)}{' '}\n {statsItem.tokenName}\n \n ) : (\n `-`\n )}\n
\n
\n {statsItem.usdSupply ? (\n <>\n {autoFormat(statsItem.usdSupply, 5)}\n $\n \n ) : (\n `-`\n )}\n
\n
\n
\n\n
\n

Liquidity

\n
\n
\n {statsItem.availableLiquidity ? (\n <>\n {autoFormat(statsItem.availableLiquidity, 5)}{' '}\n available\n \n ) : (\n `-`\n )}\n
\n
\n {statsItem.totalBorrow ? (\n <>\n {autoFormat(statsItem.totalBorrow, 5)}{' '}\n borrowed\n \n ) : (\n `-`\n )}\n
\n
\n
\n\n
\n

Locked as Collateral

\n
\n {statsItem.vaultBalance ? (\n <>\n {autoFormat(statsItem.vaultBalance, 5)}{' '}\n {statsItem.tokenName}\n \n ) : (\n `-`\n )}\n
\n
\n\n
\n

Lending Rate

\n
\n {statsItem.supplyApr ? (\n <>\n {formatPercent(statsItem.supplyApr)}\n %\n \n ) : (\n `-`\n )}\n
\n
\n\n
\n

Borrowing Rate

\n
\n {statsItem.borrowApr ? (\n <>\n {formatPercent(statsItem.borrowApr)}\n %\n \n ) : (\n `-`\n )}\n
\n
\n
\n
\n )\n}\n","import numberUtils from 'app-lib/numberUtils'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport StatsVM from '../StatsVM'\n\nexport function StatsTotal({ vm }: { vm: StatsVM }) {\n const currentChainAllTokensStats = vm.selectedChainAllTokensStats\n const { usdTotalLocked, usdSupply } = currentChainAllTokensStats\n return (\n
\n
\n
Total Value Locked (USD)
\n \n {usdTotalLocked ? (\n
\n $\n {numberUtils.autoFormat(usdTotalLocked)}\n
\n ) : (\n `-`\n )}\n
\n
\n
\n
Total Supply (USD)
\n \n {usdSupply ? (\n
\n $\n {numberUtils.autoFormat(usdSupply)}\n
\n ) : (\n `-`\n )}\n
\n
\n
\n )\n}\n\nexport default observer(StatsTotal)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport { Loader } from 'ui-framework'\nimport StatsVM from '../StatsVM'\nimport ReserveDesktop from './ReserveDesktop'\nimport ReserveMobileItem from './ReserveMobileItem'\nimport Tvl from './Tvl'\n\n/* This component shows the stats for all reserves.\nIt has a grid row used for each coin */\n\nconst Reserve = ({ vm }: { vm: StatsVM }) => {\n const { stats } = vm.statsStore\n return (\n <>\n \n\n
\n {(stats.pending || vm.chartStatus.pending) && (\n \n )}\n
\n\n {vm.rootStore.uiStore.media.isMobileMedia ? (\n vm.selectedChainStats.map((item) => (\n \n ))\n ) : (\n \n )}\n \n )\n}\n\nexport default observer(Reserve)\n","export default __webpack_public_path__ + \"static/media/treasury.0c876514.svg\";","import { getCommon } from 'app-lib/assetUtils'\nimport React from 'react'\nimport { Icon, Loader, InfoTip } from 'ui-framework'\nimport { autoFormat } from 'app-lib/numberUtils'\nimport { observer } from 'mobx-react'\nimport { StatsStore } from 'bzx-common/src/stores'\nimport treasuryImg from './treasury.svg'\nimport { links } from 'bzx-common/src/config/appConfig'\nimport ExternalLink from 'shared-components/ExternalLink'\nimport Placeholder from 'shared-components/Placeholder'\n\nconst vbzrxTip = (\n \n {'vBZRX are tokens that are \"vesting\" over time. They are converted to OOKI little by little.'}\n \n)\n\nexport const Treasury = ({ statsStore }: { statsStore: StatsStore }) => {\n const { treasuryBalances, treasuryTotalUsd } = statsStore\n return (\n
\n
\n \n
\n

Total in DAO treasury

\n {treasuryTotalUsd.isNaN() ? (\n \n ) : (\n
${autoFormat(treasuryTotalUsd)}
\n )}\n
\n
\n\n
\n
\n

Treasury balances

\n
\n {treasuryBalances.value.length === 0 && treasuryBalances.pending && (\n \n )}\n {treasuryBalances.error && (\n

The balances could not be loaded

\n )}\n {treasuryBalances.value\n .filter((balance) => balance.amountUSD.gt(0.1))\n .map((balance) => {\n const { displayName, spriteLogo } = getCommon(balance.asset)\n return (\n
\n
\n {' '}\n {displayName}\n \n {autoFormat(balance.amount)}\n {' '}\n
\n
\n ${autoFormat(balance.amountUSD)}\n
\n
\n
\n
\n )\n })}\n
\n
\n
\n
\n \n Treasury address\n \n
What are vBZRX? {vbzrxTip}
\n
\n
\n
\n
\n )\n}\n\nexport default observer(Treasury)\n","import { Asset } from 'app-lib/assetUtils'\nimport { Button } from 'bzx-common/src/ui-framework'\nimport { observer } from 'mobx-react'\nimport React, { CSSProperties } from 'react'\nimport AssetDropdown from 'shared-components/AssetDropdown'\nimport ChartLoader from 'shared-components/ChartLoader'\nimport StatsVM from '../../StatsVM'\n\nconst StatsChart = ({ vm }: { vm: StatsVM }) => {\n const { empty, error } = vm.chartStatus\n\n const styles: Record = {\n selectedLine: { color: vm.selectedLine },\n secondLine: { color: vm.secondLine },\n }\n\n return (\n <>\n
\n {vm.assets && (\n \n )}\n {vm.selectedAsset && vm.assets && (\n \n )}\n {vm.selectedAsset && (\n
\n \n tvl usd\n \n \n tvl\n \n \n apr\n \n
\n )}\n
\n
\n
\n \n {' '}\n {vm.dataLabel} \n \n {vm.secondAsset && (\n \n \n {vm.selectedAsset}\n {' - '}\n {vm.secondAsset}\n \n \n )}\n
\n
\n
\n {(empty || error) && {error}}\n {}\n \n )\n}\n\nexport default observer(StatsChart)\n","import { observer } from 'mobx-react'\nimport React from 'react'\nimport StatsVM from './StatsVM'\nimport { NavLink, Redirect, Route } from 'react-router-dom'\nimport Activity from './Activity'\nimport Reserve from './Reserve'\nimport Treasury from './Treasury'\nimport StatsChart from './Reserve/StatsChart'\nimport { chainConfigs, routes, supportedChains } from 'bzx-common/src/config/appConfig'\nimport { Button, Icon } from 'bzx-common/src/ui-framework'\nimport { apiNetworkNames } from 'app-lib/apis/bzxApi'\n\n/* This component shows the stats for all reserves and treasury based on navigation */\nexport const Stats = ({ vm }: { vm: StatsVM }) => (\n
\n
\n \n\n {vm.rootStore.route !== routes.treasury && (\n
\n {supportedChains.map((chainId) => {\n return (\n \n \n \n )\n })}\n
\n )}\n
\n\n \n \n
\n }>\n }>\n }>\n } />\n \n)\n\nexport default observer(Stats)\n","export const config = {\n height: 300,\n rightPriceScale: {\n borderVisible: false,\n },\n timeScale: {\n borderVisible: false,\n },\n}\n\nexport const themeConfig = {\n dark: {\n chart: {\n layout: {\n backgroundColor: '#1e2024',\n lineColor: '#2B2B43',\n textColor: '#D9D9D9',\n },\n watermark: {\n color: 'rgba(0, 0, 0, 0)',\n },\n grid: {\n vertLines: {\n color: '#2B2B43',\n },\n horzLines: {\n color: '#363C4E',\n },\n },\n timeScale: { fixLeftEdge: true, fixRightEdge: true },\n },\n series: {\n topColor: 'rgba(32, 226, 47, 0.56)',\n bottomColor: 'rgba(32, 226, 47, 0.04)',\n lineColor: 'rgba(32, 226, 47, 1)',\n },\n secondSeries: {\n topColor: 'rgba(33, 150, 243, 0.56)',\n bottomColor: 'rgba(33, 150, 243, 0.04)',\n lineColor: 'rgba(33, 150, 243, 1)',\n },\n },\n light: {\n chart: {\n layout: {\n backgroundColor: '#FFFFFF',\n lineColor: '#2B2B43',\n textColor: '#191919',\n },\n watermark: {\n color: 'rgba(0, 0, 0, 0)',\n },\n grid: {\n vertLines: {\n visible: false,\n },\n horzLines: {\n color: '#f0f3fa',\n },\n },\n },\n series: {\n topColor: 'rgba(0, 140, 240, 0.56)',\n bottomColor: 'rgba(0, 140, 240, 0.04)',\n lineColor: 'rgba(0, 140, 240, 1)',\n },\n secondSeries: {\n topColor: 'rgba(117, 0, 235, 0.56)',\n bottomColor: 'rgba(117, 0, 235, 0.04)',\n lineColor: 'rgba(117, 0, 235, 1)',\n },\n },\n}\n","import { IChainTokenStat } from 'app-lib/apis/bzxApi'\nimport { Asset } from 'app-lib/assetUtils'\nimport numberUtils from 'app-lib/numberUtils'\nimport appConfig, {\n chainConfigs,\n ChainId,\n routes,\n supportedChains,\n} from 'bzx-common/src/config/appConfig'\nimport routeConfig from 'bzx-common/src/config/routeConfig'\nimport { RootStore, StatsStore, UIStore } from 'bzx-common/src/stores'\nimport { createChart, IChartApi, ISeriesApi } from 'lightweight-charts'\nimport * as mobx from 'mobx'\nimport React from 'react'\nimport web3Utils from 'web3-utils'\nimport { config, themeConfig } from './Reserve/StatsChart/StatsChartConfig'\n\ntype ChartValue = 'tvlUsd' | 'tvl' | 'apr'\n\nexport interface IStatsVM {\n selectedChain: ChainId | null\n numberPagination: number\n searchUser: string\n selectedAsset: Asset | null\n secondAsset: Asset | null\n selectedData: ChartValue\n allActivity: boolean\n}\n\nexport default class StatsVM implements IStatsVM {\n rootStore: RootStore\n statsStore: StatsStore\n uiStore: UIStore\n selectedChain: ChainId | null = null\n numberPagination = 0\n paginationSize = 5\n searchUser = ''\n selectedAsset: Asset | null = null\n secondAsset: Asset | null = null\n selectedData: ChartValue = 'tvlUsd'\n allActivity = false\n stopSyncTheme?: mobx.IReactionDisposer\n stopSyncChartData?: mobx.IReactionDisposer\n chartContainer?: React.RefObject\n chart?: IChartApi\n areaSeries?: ISeriesApi<'Area'>\n secondAreaSeries?: ISeriesApi<'Area'>\n\n get isLastEventsPagination() {\n return (\n this.numberPagination + 1 === this.quantityGrids ||\n this.latestProtocolEvents.length <= this.statsStore.defaultQuantityEvents\n )\n }\n\n get latestProtocolEvents() {\n const { latestProtocolEvents, selectedUserEvents } = this.statsStore\n if (selectedUserEvents.value.length) {\n return selectedUserEvents.value.filter(\n (event) => this.allActivity || event.chainId === this.selectedChain\n )\n }\n\n return latestProtocolEvents.value.filter(\n (event) =>\n (this.allActivity || event.chainId === this.selectedChain) &&\n (!this.searchUser || event.user.includes(this.searchUser))\n )\n }\n\n get dataLabel() {\n if (this.selectedData === 'tvl') {\n return 'Locked as Collateral'\n }\n if (this.selectedData === 'apr') {\n return 'Lending Rates'\n }\n return 'TVL (USD)'\n }\n\n get latestActivity() {\n const startIndex = this.statsStore.defaultQuantityEvents * this.numberPagination\n const endIndex =\n this.statsStore.defaultQuantityEvents * this.numberPagination +\n this.statsStore.defaultQuantityEvents\n\n return this.latestProtocolEvents.slice(startIndex, endIndex)\n }\n\n get selectedChainStats(): IChainTokenStat[] {\n const stats = this.statsStore.stats.value.find((stat) => {\n return stat.chainId === this.selectedChain\n })\n return stats ? stats.stats : []\n }\n\n get selectedChainAllTokensStats() {\n const allTokensStats = this.statsStore.stats.value.find(\n (stat) => stat.chainId === this.selectedChain\n )?.allTokensStats\n const usdSupply = allTokensStats?.usdSupply || 'NaN'\n const usdTotalLocked = allTokensStats?.usdTotalLocked || 'NaN'\n return { usdSupply, usdTotalLocked }\n }\n\n get quantityGrids() {\n return Math.ceil(this.latestProtocolEvents.length / this.statsStore.defaultQuantityEvents)\n }\n\n get paginations() {\n let startIndex = this.numberPagination - Math.floor(this.paginationSize / 2)\n\n if (startIndex < 1) {\n startIndex = 0\n } else if (startIndex + this.paginationSize > this.quantityGrids) {\n startIndex = this.quantityGrids - this.paginationSize\n }\n\n const endIndex = startIndex + this.paginationSize\n\n return [...Array(this.quantityGrids)].map((x, i) => i).slice(startIndex, endIndex)\n }\n\n get reserveChain() {\n const { chainId } = this.rootStore.web3Connection\n return this.selectedChain ? this.selectedChain : chainId\n }\n\n get chartStatus() {\n const { assetStatsData, tvlData } = this.statsStore\n const data = this.selectedAsset ? assetStatsData : tvlData\n const empty = !assetStatsData.value.length && !tvlData.value.length\n return { pending: data.pending, error: data.error?.toString(), empty }\n }\n\n get assets() {\n return (\n this.reserveChain && [Asset.UNKNOWN].concat(chainConfigs[this.reserveChain].lending.assets)\n )\n }\n\n get firstAssets() {\n return this.assets?.filter((asset) => asset !== this.secondAsset)\n }\n\n get secondAssets() {\n return this.assets?.filter((asset) => asset !== this.selectedAsset)\n }\n\n get iconName() {\n return (this.reserveChain && chainConfigs[this.reserveChain].icon.name) || ''\n }\n\n get native() {\n if (!this.selectedChain) {\n return null\n }\n return chainConfigs[this.selectedChain].native\n }\n\n get chartData() {\n // get info for wrapped tokens\n const selectedAsset =\n this.selectedAsset === this.native!.asset ? this.native!.wrapped : this.selectedAsset\n const points = selectedAsset\n ? this.statsStore.assetStatsData.value[selectedAsset.toLowerCase()]\n : this.statsStore.tvlData.value\n if (!points) {\n return []\n }\n return points.reduce((result, point, index) => {\n const prevTime =\n points[index - 1] && new Date(points[index - 1].timestamp).toISOString().split('T')[0]\n const time = new Date(point.timestamp).toISOString().split('T')[0]\n time !== prevTime && result.push({ time, value: point[this.selectedData] })\n\n return result\n }, [] as Array<{ time: string; value?: number }>)\n }\n\n get secondChartData() {\n // get info for wrapped tokens\n const secondAsset =\n this.secondAsset === this.native!.asset ? this.native!.wrapped : this.secondAsset\n if (!secondAsset) {\n return []\n }\n const points = this.statsStore.assetStatsData.value[secondAsset.toLowerCase()]\n\n if (!points) {\n return []\n }\n return points.map((point) => {\n const time = new Date(point.timestamp).toISOString().split('T')[0]\n return { time, value: point[this.selectedData] }\n })\n }\n\n get selectedLine() {\n const { theme } = this.uiStore\n const config = themeConfig[theme]\n return config.series.lineColor\n }\n\n get secondLine() {\n const { theme } = this.uiStore\n const config = themeConfig[theme]\n return config.secondSeries.lineColor\n }\n\n showAllActivity() {\n this.set('allActivity', !this.allActivity)\n supportedChains.map((chainId) => {\n this.statsStore.latestProtocolEvents.fetch(chainId)\n })\n }\n\n syncToTheme() {\n const { theme } = this.uiStore\n const config = themeConfig[theme]\n const container = this.chartContainer?.current\n\n if (this.chart) {\n this.chart.applyOptions(config.chart)\n this.chart.applyOptions({\n height: container?.offsetHeight,\n width: container?.offsetWidth,\n })\n }\n this.areaSeries?.applyOptions(config.series)\n this.secondAreaSeries?.applyOptions(config.secondSeries)\n }\n\n nextPagination = () => {\n !this.isLastEventsPagination && this.set('numberPagination', this.numberPagination + 1)\n }\n\n prevPagination = () => {\n this.numberPagination !== 0 && this.set('numberPagination', this.numberPagination - 1)\n }\n\n getDefaults() {\n this.assign({ selectedAsset: null, secondAsset: null, selectedData: 'tvlUsd' })\n this.areaSeries?.setData([])\n this.secondAreaSeries?.setData([])\n }\n\n /**\n * Refresh stats (total borrow, lent, aprs, etc) for the current chain onchain (not API)\n */\n updateChain(selectedChain: ChainId) {\n const { web3Connection, route } = this.rootStore\n\n this.assign({ numberPagination: 0, selectedChain })\n\n if (route === routes.reserve) {\n !this.selectedChainStats.length &&\n this.statsStore.stats.fetch(selectedChain).then(() => {\n if (!this.selectedChainStats.length) {\n // switch network to get data onchain\n web3Connection.switchNetwork(selectedChain)\n }\n })\n this.loadCharData(selectedChain)\n } else {\n this.statsStore.latestProtocolEvents.fetch(selectedChain)\n }\n }\n\n setSecondChartData() {\n this.secondAreaSeries?.setData(this.secondChartData)\n }\n\n setChartData() {\n this.areaSeries?.setData(this.chartData)\n this.chart &&\n this.chart.applyOptions({\n localization: {\n priceFormatter: (p: number) => `${numberUtils.abbreviate(p)}`,\n },\n })\n }\n\n loadCharData(chainId: ChainId, newData = true) {\n const { assetStatsData, tvlData } = this.statsStore\n if (newData) {\n tvlData.fetch(chainId).then(() => {\n this.getDefaults()\n this.setChartData()\n // expand chart to the container\n this.chart?.timeScale().fitContent()\n })\n assetStatsData.fetch(chainId).then(() => this.setChartData())\n } else {\n this.setChartData()\n }\n }\n\n findByUser(searchUser: string) {\n this.statsStore.selectedUserEvents.reset()\n this.assign({ searchUser, numberPagination: 0 })\n web3Utils.isAddress(searchUser) && this.statsStore.selectedUserEvents.fetch(searchUser)\n }\n\n onDataSwitch(selectedData: ChartValue) {\n this.assign({ selectedData })\n this.setChartData()\n this.setSecondChartData()\n }\n\n onAssetSwitch(selectedAsset: Asset) {\n if (selectedAsset === Asset.UNKNOWN) {\n this.getDefaults()\n } else {\n this.assign({ selectedAsset })\n }\n this.setChartData()\n }\n\n onSecondAssetSwitch(secondAsset: Asset) {\n if (secondAsset === Asset.UNKNOWN) {\n this.assign({ secondAsset: null })\n } else {\n this.assign({ secondAsset })\n }\n this.setSecondChartData()\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n\n set(prop: keyof IStatsVM, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n init() {\n this.chartContainer = React.createRef()\n const { chainId } = this.rootStore.web3Connection\n chainId && this.updateChain(chainId)\n // delay to get chart container\n setTimeout(() => {\n if (this.chartContainer?.current) {\n this.chart = createChart(this.chartContainer.current, config)\n this.areaSeries = this.chart.addAreaSeries({\n lineWidth: 2,\n })\n this.secondAreaSeries = this.chart.addAreaSeries({\n lineWidth: 2,\n })\n this.syncToTheme()\n }\n const { tvlData, latestProtocolEvents } = this.statsStore\n chainId && this.loadCharData(chainId, !tvlData.loaded)\n latestProtocolEvents.fetch(chainId)\n }, appConfig.delay)\n\n this.stopSyncTheme = mobx.reaction(\n () => {\n const { theme } = this.uiStore\n const { width, height } = this.uiStore.media.viewPort.size\n return {\n theme,\n width,\n height,\n }\n },\n () => this.syncToTheme()\n )\n\n this.stopSyncChartData = mobx.reaction(\n () => {\n const { route, web3Connection } = this.rootStore\n const { chainId } = web3Connection\n\n return { chainId, route }\n },\n (data) => {\n if (data.chainId) {\n this.updateChain(data.chainId)\n }\n }\n )\n\n !this.statsStore.tvlData.loaded && this.statsStore.tvlData.fetch(chainId)\n !this.statsStore.assetStatsData.loaded && this.statsStore.assetStatsData.fetch(chainId)\n\n if (this.rootStore.route.endsWith(routeConfig.treasury)) {\n this.statsStore.treasuryBalances.fetch()\n }\n }\n\n destroyVM() {\n this.stopSyncTheme && this.stopSyncTheme()\n this.stopSyncChartData && this.stopSyncChartData()\n this.chart && this.chart.remove()\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n this.statsStore = rootStore.statsStore\n this.uiStore = rootStore.uiStore\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n this.init()\n }\n}\n","import withVM from 'bzx-common/src/lib/withVM'\nimport Stats from './Stats'\nimport StatsVM from './StatsVM'\n\nexport default withVM(Stats, StatsVM)\n","import { RootStore } from 'bzx-common/src/stores'\nimport { inject, observer } from 'mobx-react'\nimport React from 'react'\n\nexport function ToastNotification(props: any) {\n const rootStore = props.rootStore as RootStore\n const { toastDialog } = rootStore.uiStore\n return (\n
\n {rootStore.toastMessage}\n
\n )\n}\n\nexport default inject('rootStore')(observer(ToastNotification))\n","import { observer } from 'mobx-react'\nimport WrapNativeForm from '../Lend/LendForm/WrapNativeForm'\nimport ToolsVM from './ToolsVM'\nimport { NavLink } from 'react-router-dom'\nimport { Icon } from 'ui-framework'\nimport React from 'react'\n\nexport function WrapNative({ vm }: { vm: ToolsVM }) {\n return (\n
\n

Wrap or unwrap native token

\n\n
\n \n
\n\n
\n \n All Ooki Tools\n \n
\n
\n )\n}\n\nexport default observer(WrapNative)\n","import { getCommon } from 'app-lib/assetUtils'\nimport { ReactComponent as OokiWorker } from 'bzx-common/src/assets/images/ooki-worker.svg'\nimport { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { NavLink } from 'react-router-dom'\nimport { Icon } from 'ui-framework'\nimport ToolsVM from './ToolsVM'\nimport WrapNative from './WrapNative'\n\nexport function Tools({ vm }: { vm: ToolsVM }) {\n const { chainId } = vm.rootStore.web3Connection\n if (!chainId) {\n return null\n }\n const { native } = chainConfigs[chainId]\n const { route } = vm.rootStore\n const { spriteLogo: tokenIcon } = getCommon(native.asset)\n\n return (\n
\n {route.endsWith('tools') && (\n <>\n
\n \n

Ooki Tools

\n
\n\n
\n
\n \n

Native Token Wrapper

\n {native.asset} ↔ {native.wrapped}\n
\n
\n
\n \n )}\n\n {route.endsWith('tools/wrap-native') && }\n
\n )\n}\n\nexport default observer(Tools)\n","import * as mobx from 'mobx'\nimport { RootStore } from 'bzx-common/src/stores'\nimport WrapNativeFormVM from '../Lend/LendForm/WrapNativeFormVM'\n\ninterface IToolsVMProps {\n rootStore: RootStore\n wrapNativeForm: WrapNativeFormVM\n}\n\nexport default class ToolsVM implements IToolsVMProps {\n rootStore: RootStore\n wrapNativeForm: WrapNativeFormVM\n\n set(prop: keyof IToolsVMProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n init() {\n setTimeout(() => {\n this.wrapNativeForm.init()\n this.wrapNativeForm.autoSync(true)\n }, 0)\n }\n\n destroyVM() {\n this.wrapNativeForm.destroyVM()\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n this.wrapNativeForm = new WrapNativeFormVM(rootStore)\n this.init()\n }\n}\n","import withVM from 'app-lib/withVM'\nimport Tools from './Tools'\nimport ToolsVM from './ToolsVM'\nexport default withVM(Tools, ToolsVM)\n","import { ReactComponent as ArrowPagination } from 'bzx-common/src/assets/images/fulcrum/icon_pagination.svg'\nimport { Button, Form } from 'bzx-common/src/ui-framework'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Picture } from 'shared-components/Picture/Picture'\n\nimport UserProfileVM from './UserProfileVM'\n\nexport const AvatarSelector = ({ vm }: { vm: UserProfileVM }) => {\n return (\n
\n
\n

Select Avatar

\n
\n {vm.currentAvatars.map((avatar) => {\n if (avatar) {\n return (\n \n \n \n )\n }\n })}\n
\n
\n \n \n
\n {vm.avatarPaginations.map((pagination) => (\n \n \n {++pagination}\n \n \n ))}\n \n \n
\n \n \n
\n )\n}\n\nexport default observer(AvatarSelector)\n","import hashUtils from 'app-lib/hashUtils'\nimport { ReactComponent as ArrowPagination } from 'bzx-common/src/assets/images/fulcrum/icon_pagination.svg'\nimport { supportedChains } from 'bzx-common/src/config/appConfig'\nimport chainConfigs from 'bzx-common/src/config/chains'\nimport { Button, ButtonClipboard, Icon, InfoTip, Input, Loader, Modal } from 'ui-framework'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport EventInfo from 'shared-components/EventInfo'\nimport { ExternalLink } from 'shared-components/ExternalLink/ExternalLink'\nimport Picture from 'shared-components/Picture'\nimport { AvatarSelector } from './AvatarSelector'\nimport UserProfileVM from './UserProfileVM'\n\nconst loader = (\n
\n \n
\n)\n\nexport function UserProfile({ vm }: { vm: UserProfileVM }) {\n const { web3Connection } = vm.rootStore\n const { chainId, walletAddress, isConnected, explorerWalletLink } = web3Connection\n const { latestUserTransactions } = vm.statsStore\n\n if (!chainId || !isConnected) {\n return (\n
\n \n
\n Connect to see your profile\n
\n
\n )\n }\n\n return (\n
\n
\n
\n
\n
\n
\n
Avatar
\n \n {vm.avatar ? (\n \n ) : (\n \n )}\n \n \n\n
Wallet Address
\n \n \n {hashUtils.shortHash(walletAddress)}\n \n \n \n
\n\n Address Alias \n \n

The alias and avatar will be displayed in the app.

\n

They are saved on your device only.

\n
\n
\n \n\n \n
\n
\n {vm.warning}\n
\n\n \n
\n
\n\n
\n
\n

Latest transactions across blockchains

\n
\n \n All\n \n {supportedChains.map((chainId) => {\n const { icon, chainDetails } = chainConfigs[chainId]\n return (\n \n \n \n )\n })}\n
\n
\n\n {!latestUserTransactions.loaded && !latestUserTransactions.error && loader}\n\n {latestUserTransactions.loaded && (\n
\n

{vm.errorMessage}

\n\n
\n {vm.currentTransactions.map(\n (info, i) => info && \n )}\n
\n
\n )}\n {vm.quantityTxPagination > 1 && (\n
\n \n \n
\n {vm.txPaginations.map((pagination) => (\n \n \n {++pagination}\n \n \n ))}\n \n \n
\n
\n )}\n
\n \n\n \n \n \n \n \n )\n}\n\nexport default observer(UserProfile)\n","import * as mobx from 'mobx'\nimport { RootStore, StatsStore } from 'bzx-common/src/stores'\nimport { ChainId } from 'bzx-common/src/config/appConfig'\nimport regexUtils from 'app-lib/regexUtils'\nimport { DialogVM } from 'bzx-common/src/ui-framework'\n\ninterface IUserProfileVMProps {\n selectedChain: ChainId | null\n avatar: number\n avatars: number[]\n alias: string\n inputAlias: string\n warning: string\n avatarPagination: number\n txPagination: number\n}\n\nexport default class UserProfileVM implements IUserProfileVMProps {\n rootStore: RootStore\n statsStore: StatsStore\n selectedChain: ChainId | null = null\n avatar = 0\n avatars: number[] = []\n alias = ''\n inputAlias = ''\n avatarPagination = 0\n txPagination = 0\n warning = ''\n avatarDialog = new DialogVM({ id: 'avatar-dialog' })\n desktopVisible = 15\n mobileVisible = 10\n paginationSize = 5\n avatarsCount = 100\n\n private stopAutoSyncData?: mobx.IReactionDisposer\n\n get txInfo() {\n return this.statsStore.latestUserTransactions.value.filter(\n (tx) => !this.selectedChain || tx.chainId === this.selectedChain\n )\n }\n\n get defaultQuantityVisible() {\n const { isMobileMedia } = this.rootStore.uiStore.media\n return isMobileMedia ? this.mobileVisible : this.desktopVisible\n }\n\n get currentAvatars() {\n const startIndex = this.defaultQuantityVisible * this.avatarPagination\n const endIndex =\n this.defaultQuantityVisible * this.avatarPagination + this.defaultQuantityVisible\n\n return this.avatars.slice(startIndex, endIndex)\n }\n\n get currentTransactions() {\n const startIndex = this.defaultQuantityVisible * this.txPagination\n const endIndex = this.defaultQuantityVisible * this.txPagination + this.defaultQuantityVisible\n\n return this.txInfo.slice(startIndex, endIndex)\n }\n\n get quantityAvatarPagination() {\n return Math.ceil(this.avatars.length / this.defaultQuantityVisible)\n }\n\n get quantityTxPagination() {\n return Math.ceil(this.txInfo.length / this.defaultQuantityVisible)\n }\n\n get isLastAvatarPagination() {\n return (\n this.avatarPagination + 1 === this.quantityAvatarPagination ||\n this.avatars.length <= this.defaultQuantityVisible\n )\n }\n\n get isLastTxPagination() {\n return (\n this.txPagination + 1 === this.quantityTxPagination ||\n this.txInfo.length <= this.defaultQuantityVisible\n )\n }\n\n get avatarPaginations() {\n let startIndex = this.avatarPagination - Math.floor(this.paginationSize / 2)\n\n if (startIndex < 1) {\n startIndex = 0\n } else if (startIndex + this.paginationSize > this.quantityTxPagination) {\n startIndex = this.quantityAvatarPagination - this.paginationSize\n }\n\n const endIndex = startIndex + this.paginationSize\n\n return [...Array(this.quantityAvatarPagination)].map((x, i) => i).slice(startIndex, endIndex)\n }\n\n get txPaginations() {\n let startIndex = this.txPagination - Math.floor(this.paginationSize / 2)\n\n if (startIndex < 1) {\n startIndex = 0\n } else if (startIndex + this.paginationSize > this.quantityTxPagination) {\n startIndex = this.quantityTxPagination - this.paginationSize\n }\n\n const endIndex = startIndex + this.paginationSize\n\n return [...Array(this.quantityTxPagination)].map((x, i) => i).slice(startIndex, endIndex)\n }\n\n get errorMessage() {\n return this.statsStore.latestUserTransactions.error\n ? 'The latest transactions could not be fetched.'\n : !this.currentTransactions.length\n ? 'No activity found.'\n : ''\n }\n\n get needSave() {\n const { shortWalletAddress } = this.rootStore.web3Connection\n return this.inputAlias !== this.alias || this.inputAlias === shortWalletAddress\n }\n\n get canSave() {\n return !this.warning && this.alias !== this.inputAlias\n }\n\n getAvatars() {\n const { settings } = this.rootStore\n // get unused avatars only\n const avatars = []\n\n for (let ava = 1; ava <= this.avatarsCount; ava++) {\n !Object.values(settings.users).find((user) => user.avatar === ava) && avatars.push(ava)\n }\n this.assign({ avatars })\n }\n\n toggleStored(storedEvents: boolean) {\n this.statsStore.assign({ storedEvents })\n }\n\n ediAlias(alias: string) {\n const { settings } = this.rootStore\n this.assign({ inputAlias: alias })\n\n const warning =\n Object.values(settings.users).find(\n (user) => user.alias.toLowerCase() === alias.toLowerCase()\n ) && alias !== this.alias\n ? 'Alias exists'\n : alias.length > 2 && alias.length < 18\n ? regexUtils.matchAlias(alias)\n : 'From 3 to 18 symbols required'\n\n this.assign({ warning })\n }\n\n saveAlias() {\n const { settings, web3Connection } = this.rootStore\n this.set('alias', this.inputAlias)\n settings.setAlias(web3Connection.connectedAddress, this.inputAlias)\n }\n\n restoreDefaults() {\n const { settings, web3Connection } = this.rootStore\n const { shortWalletAddress } = web3Connection\n this.assign({ avatar: 0, alias: shortWalletAddress, inputAlias: shortWalletAddress })\n settings.setAvatar(web3Connection.connectedAddress, 0)\n this.saveAlias()\n }\n\n saveAvatar() {\n const { settings, web3Connection } = this.rootStore\n const { connectedAddress } = web3Connection\n settings.setAvatar(connectedAddress, this.avatar)\n }\n\n updateAvatar(avatar: number) {\n this.assign({ avatar })\n this.closeDialog()\n }\n\n closeDialog() {\n this.avatarDialog.hide()\n this.saveAvatar()\n }\n\n nextPagination = () => {\n !this.isLastAvatarPagination && this.set('avatarPagination', this.avatarPagination + 1)\n }\n\n prevPagination = () => {\n this.avatarPagination !== 0 && this.set('avatarPagination', this.avatarPagination - 1)\n }\n\n nextTxPagination = () => {\n !this.isLastTxPagination && this.set('txPagination', this.txPagination + 1)\n }\n\n prevTxPagination = () => {\n this.txPagination !== 0 && this.set('txPagination', this.txPagination - 1)\n }\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof IUserProfileVMProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n syncData() {\n const { web3Connection, settings } = this.rootStore\n const storedUser = settings.users[web3Connection.walletAddress]\n const alias = storedUser ? storedUser.alias : web3Connection.shortWalletAddress\n const avatar = storedUser && storedUser.avatar\n this.getAvatars()\n this.assign({\n avatar,\n alias,\n inputAlias: alias,\n warning: '',\n })\n }\n\n init() {\n this.syncData()\n this.stopAutoSyncData = mobx.reaction(\n () => this.rootStore.web3Connection.walletAddress,\n () => {\n const { isConnected } = this.rootStore.web3Connection\n if (isConnected) {\n this.syncData()\n this.statsStore.latestUserTransactions.fetch()\n }\n },\n { name: 'autosyncTransactionsVM' }\n )\n }\n\n destroyVM() {\n this.stopAutoSyncData && this.stopAutoSyncData()\n }\n\n constructor({ rootStore }: { rootStore: RootStore }) {\n this.rootStore = rootStore\n this.statsStore = rootStore.statsStore\n this.init()\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n !this.statsStore.latestUserTransactions.loaded && this.statsStore.latestUserTransactions.fetch()\n }\n}\n","import withVM from 'app-lib/withVM'\nimport UserProfile from './UserProfile'\nimport UserProfileVM from './UserProfileVM'\nexport default withVM(UserProfile, UserProfileVM)\n","import { ScrollToTop } from 'app-lib/reactHooks'\nimport web3ProviderUtils from 'app-lib/web3ProviderUtils'\nimport { ReactComponent as OokiWorker } from 'bzx-common/src/assets/images/ooki-worker.svg'\nimport { acceptNoTradeKey } from 'bzx-common/src/config/appConfig'\nimport { RootStore } from 'bzx-common/src/stores'\nimport { errors } from 'ethers'\nimport { observer } from 'mobx-react'\nimport React, { Component, Suspense } from 'react'\nimport { Redirect, Route, Router, Switch } from 'react-router-dom'\nimport AppError from 'shared-components/AppError'\nimport InfoBlock from 'shared-components/InfoBlock'\nimport NetworkError from 'shared-components/NetworkError'\nimport PreloaderContent from 'shared-components/PreloaderContent/PreloaderContent'\nimport TransactionTracker from 'shared-components/TransactionTracker'\nimport Web3ReactExporter from 'shared-components/Web3ReactExporter'\nimport { Loader } from 'ui-framework'\nimport { AbstractConnector } from '@web3-react/abstract-connector'\nimport { Web3ReactProvider } from '@web3-react/core'\nimport fulcrumProvider from '../services/FulcrumProvider'\nimport Borrow from './Borrow'\nimport Compensation from './Compensation'\nimport Dashboard from './Dashboard'\nimport Debug from './Debug'\nimport Header from './Header'\nimport Lend from './Lend'\nimport MigrateTokens from './MigrateTokens'\nimport Staking from './Staking'\nimport Stats from './Stats'\nimport ToastNotification from './ToastNotification'\nimport Tools from './Tools'\nimport UserProfile from './UserProfile'\n\nconst Intercom = React.lazy(() => import('react-intercom'))\nconst Trading = React.lazy(() => import('./Trading'))\nconst UIFramework = React.lazy(() => import('./UIFramework'))\n\ninterface IAppProps {\n rootStore: RootStore\n}\n\nclass App extends Component {\n constructor(props: IAppProps) {\n super(props)\n }\n\n public componentDidMount(): void {\n errors.setLogLevel('error')\n }\n\n public async onGetLibrary(provider?: any, connector?: AbstractConnector) {\n connector && (await web3ProviderUtils.getLibrary(fulcrumProvider, connector))\n }\n\n public render() {\n const { web3Connection, uiStore, services, chain } = this.props.rootStore\n const { isMobileMedia } = uiStore.media\n const chainDisabledMsg = chain?.uiDisabled ? (\n
\n \n

\n Ooki on {chain.chainDetails.shortName} is disabled\n

\n

\n {chain.uiDisabledReason}\n

\n

Check our social channels for more information.

\n
\n ) : null\n\n return (\n <>\n \n \n \n\n {process.env.NODE_ENV === 'production' && (\n \n \n \n )}\n\n \n
\n \n
\n {this.props.rootStore.userNotAllowedToTrade && (\n
\n \n You are in a region where trading is not allowed.\n \n
\n )}\n\n {web3Connection.chainId === undefined && (\n
\n {web3Connection.activatingProvider &&

Connecting your wallet

}\n \n
\n )}\n\n {web3Connection.unsupportedNetwork && }\n\n {chain && (\n \n } />\n chainDisabledMsg || } />\n chainDisabledMsg || } />\n chainDisabledMsg || } />\n chainDisabledMsg || } />\n } />\n } />\n } />\n } />\n } />\n \n chainDisabledMsg || (\n }>\n \n \n )\n }\n />\n\n (\n }>\n \n \n )}\n />\n\n } />\n \n )}\n\n \n \n \n \n
\n \n \n )\n }\n}\n\nexport default observer(App)\n","import axios from 'axios'\n\nexport async function isFromUS() {\n const { headers } = await axios.head('/')\n return !!headers && !!headers['x-country'] && headers['x-country'].toLowerCase() === 'us'\n}\n\nexport default {\n isFromUS,\n}\n","import { BigNumber } from '@0x/utils'\nimport errorUtils from 'bzx-common/src/lib/errorUtils'\nimport * as mobx from 'mobx'\nimport { FulcrumProvider } from '../../../fulcrum/src/services/FulcrumProvider'\nimport { Airdrop, airdrops, IAirdropInfo } from '../services/AirdropService'\nimport RootStore from './RootStore'\n\ninterface IAirdropStoreProps {\n airdropInfoPending: boolean\n airdropPending: boolean\n airdropsInfo: Record\n airdropsInfoLoaded: boolean\n balAirdropInfo: IAirdropInfo\n error: Error | null\n lockedBzrxAirdrops: IAirdropInfo[]\n rootStore: RootStore\n}\n\n/**\n * Default state for an airdrop\n */\nfunction getInitialAirdropState(airdrop: Airdrop): IAirdropInfo {\n return {\n airdrop,\n amount: new BigNumber(0),\n airdropIndex: airdrops[airdrop].index,\n index: new BigNumber(0),\n proof: [],\n token: { symbol: '', address: '', decimals: 18 },\n userClaimed: false,\n }\n}\n\nfunction initAirdropsState(): Record {\n return {\n BAL: getInitialAirdropState(Airdrop.BAL),\n BZRX_COMPENSATION1: getInitialAirdropState(Airdrop.BZRX_COMPENSATION1),\n BZRX_COMPENSATION2: getInitialAirdropState(Airdrop.BZRX_COMPENSATION2),\n // Note BZRX_LOCKED state is there to avoid type issues for the Record; it is not used anymore.\n BZRX_LOCKED: getInitialAirdropState(Airdrop.BZRX_LOCKED),\n P125_COMPENSATION1: getInitialAirdropState(Airdrop.P125_COMPENSATION1),\n }\n}\n\nexport default class AirdropStore implements IAirdropStoreProps {\n rootStore: RootStore\n fulcrumProvider: FulcrumProvider\n airdropPending = false\n error: Error | null = null\n airdropsInfoLoaded = false\n airdropsInfo = initAirdropsState()\n airdropInfoPending = false\n balAirdropInfo = getInitialAirdropState(Airdrop.BAL)\n lockedBzrxAirdrops: IAirdropInfo[] = []\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof IAirdropStoreProps, value: any) {\n this[prop] = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n clearData() {\n this.airdropPending = false\n this.error = null\n this.balAirdropInfo = getInitialAirdropState(Airdrop.BAL)\n this.airdropsInfoLoaded = false\n this.airdropsInfo = initAirdropsState()\n }\n\n clearError() {\n this.error = null\n }\n\n /**\n * eg: `getUserAirdropInfo(Airdrop.BAL, 'address')`\n * sets the user claim info to `AirdropStore.airdropsInfo[Airdrop.BAL]`\n */\n async getUserAirdropInfo(airdrop: Airdrop, walletAddress: string) {\n const { services } = this.rootStore\n\n try {\n this.assign({ error: null, airdropInfoPending: true, airdropsInfoLoaded: false })\n const info = await services.airdropService.checkUserAirdrop(airdrop, walletAddress)\n mobx.runInAction(() => {\n this.airdropsInfo[airdrop] = info\n })\n return info\n } catch (err) {\n console.error(err)\n this.assign({ error: err })\n } finally {\n this.assign({ airdropInfoPending: false, airdropsInfoLoaded: true })\n }\n }\n\n async checkBalAirdrop() {\n const { web3Connection, services } = this.rootStore\n const { chainId, walletAddress } = web3Connection\n const { index, airdropChainId } = airdrops.BAL\n\n if (!chainId || services.airdropService.wasChecked(airdropChainId, index, walletAddress)) {\n return\n }\n try {\n this.assign({ error: null })\n const info = await services.airdropService.checkUserAirdrop(Airdrop.BAL, walletAddress)\n !info.userClaimed && this.assign({ balAirdropInfo: info })\n } catch (err) {\n console.error(err)\n this.assign({ error: err })\n }\n }\n\n async claimAirdrop(airdropInfo: IAirdropInfo) {\n const { transactionStore, services, web3Connection } = this.rootStore\n const { airdropService } = services\n const { chainId, walletAddress } = web3Connection\n const { airdropIndex } = airdropInfo\n let tx\n\n if (!chainId) {\n return\n }\n try {\n this.assign({ error: null, airdropPending: true })\n const txSteps = airdropService.claimAirdrop(airdropInfo, walletAddress)\n tx = await transactionStore.run('get-airdrop', txSteps)\n if (tx.status === 'success') {\n airdropService.setChecked(chainId, airdropIndex, walletAddress)\n }\n return tx\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Airdrop claim Failed' })\n this.set('error', err)\n console.error(err)\n return tx\n } finally {\n this.set('airdropPending', false)\n }\n }\n\n /** Check multiple airdrops, one after another. Stores the data in AirdropStore */\n async checkAirdrops(airdrops: Airdrop[], address: string) {\n for (const airdrop of airdrops) {\n await this.getUserAirdropInfo(airdrop, address)\n }\n }\n\n async checkBzrxLockedAirdrops(address: string) {\n this.assign({ error: null, airdropInfoPending: true, airdropsInfoLoaded: false })\n try {\n const { services } = this.rootStore\n const { airdropService } = services\n const lockedBzrxAirdrops = await airdropService.checkBzrxLockedAirdrops(address)\n this.assign({ lockedBzrxAirdrops })\n return lockedBzrxAirdrops\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Failed to list your airdrops' })\n console.error(err)\n this.assign({ error: err })\n } finally {\n this.assign({ airdropInfoPending: false, airdropsInfoLoaded: true })\n }\n }\n\n claimBZRXCompensation(airdrop: Airdrop) {\n return this.claimAirdrop(this.airdropsInfo[airdrop])\n }\n\n claimLockedBZRXCompensation(airdropIndex: number) {\n const airdropInfo = this.lockedBzrxAirdrops.find(\n (airdrop) => airdrop.airdropIndex === airdropIndex\n )\n if (!airdropInfo) {\n throw new Error('locked bzrx airdropInfo was not found')\n }\n return this.claimAirdrop(airdropInfo)\n }\n\n claimP125Compensation1() {\n return this.claimAirdrop(this.airdropsInfo.P125_COMPENSATION1)\n }\n\n claimBalAirdrop() {\n return this.claimAirdrop(this.balAirdropInfo)\n }\n\n constructor(rootStore: RootStore) {\n const { fulcrumProvider } = rootStore\n this.rootStore = rootStore\n this.fulcrumProvider = fulcrumProvider\n mobx.makeAutoObservable(\n this,\n { airdropsInfo: mobx.observable.shallow, rootStore: false },\n { deep: false, autoBind: true }\n )\n }\n}\n","import { getDate } from '../dateUtils'\n\ntype PostTag = 'announcements' | 'governance' | 'trading' | 'ookiversity' | 'news' | 'defi-basics'\n\nexport interface IPostData {\n title: string\n date: string\n url: string\n image: string\n tags: PostTag[]\n excerpt: string\n}\n\nexport interface BlogPostResponse {\n title: string\n updated_at: string\n feature_image: string\n url: string\n tags: { slug: PostTag }[]\n excerpt: string\n plaintext: string\n}\n\nexport const ghostApiUrl = `https://bzx-protocol.ghost.io/ghost/api/v3/content/posts/?key=e8a35446590101d58c4bbb668d&fields=title,url,updated_at,feature_image,excerpt&formats=plaintext&limit=100&include=tags`\nexport const getBlogPosts = async (): Promise => {\n const blogRequest = await fetch(ghostApiUrl)\n if (blogRequest.status !== 200) {\n throw new Error('Could not fetch posts')\n }\n\n const blogResponse = await blogRequest.json()\n return blogResponse.posts.map((post: BlogPostResponse) => {\n return {\n title: post.title,\n date: getDate(post['updated_at']),\n url: post.url,\n image: post['feature_image'],\n excerpt: post.excerpt.replaceAll(/\\[http.+\\]/gm, ''),\n tags: post.tags.map((tag) => tag.slug),\n }\n })\n}\n","import { getBlogPosts, IPostData } from 'app-lib/apis/ghostApi'\nimport { RootStore } from 'bzx-common/src/stores'\nimport * as mobx from 'mobx'\nimport AsyncData from 'app-lib/mobx/AsyncData'\nexport interface IBlogStoreProps {\n posts: AsyncData\n}\n\nexport default class BlogStore implements IBlogStoreProps {\n rootStore: RootStore\n posts = new AsyncData([], getBlogPosts)\n\n get latestPosts() {\n return this.posts.value.slice(0, 3)\n }\n\n get ookiversityPosts() {\n return this.posts.value.filter((post) => post.tags.includes('ookiversity')).slice(0, 6)\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof IBlogStoreProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, { rootStore: false }, { autoBind: true, deep: false })\n }\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport IBorrowedFundsState, { LoanReturnData } from 'bzx-common/src/domain/IBorrowedFundsState'\nimport * as mobx from 'mobx'\nimport { BigNumber } from '@0x/utils'\nimport { isChainSupported } from '../../config/appConfig'\nimport RootStore from '../RootStore'\n\ntype LoanProps =\n | 'accountAddress'\n | 'loanId'\n | 'loanAsset'\n | 'collateralAsset'\n | 'amount'\n | 'amountOwed'\n | 'collateralAmount'\n | 'interestRate'\n | 'interestOwedPerDay'\n | 'collateralizedPercent'\n | 'hasManagementContract'\n | 'isInProgress'\n | 'loanData'\n | 'activeTokenLiquidation'\n | 'pendingTx'\n\nexport default class Loan {\n accountAddress = ''\n loanId = ''\n loanAsset: Asset = Asset.IETH\n collateralAsset: Asset = Asset.IETH\n amount = new BigNumber(0)\n amountOwed = new BigNumber(0)\n collateralAmount = new BigNumber(0)\n interestRate = new BigNumber(0)\n interestOwedPerDay = new BigNumber(0)\n collateralizedPercent = new BigNumber(0)\n hasManagementContract = false\n isInProgress = false\n loanData: LoanReturnData\n pendingTx = false\n activeTokenLiquidation: Asset | null = null\n liquidationPrice = new BigNumber(0)\n sliderMax = 3000\n rootStore: RootStore\n\n get startMargin() {\n return this.loanData.startMargin.div(10 ** 18).toNumber()\n }\n\n get sliderMin() {\n return this.loanData.maintenanceMargin.div(10 ** 18).toNumber()\n }\n\n get isUnhealthyLoan() {\n return this.collateralizedPercent.times(100).lt(this.sliderMin)\n }\n\n get sliderValue() {\n const sliderValue = this.collateralizedPercent.times(100).toNumber()\n\n if (sliderValue > this.sliderMax) {\n return this.sliderMax\n }\n if (sliderValue < this.sliderMin) {\n return this.sliderMin\n }\n\n return sliderValue\n }\n\n get selectedLiquidationPrice() {\n return this.activeTokenLiquidation === this.collateralAsset\n ? this.liquidationPrice\n : new BigNumber(1).div(this.liquidationPrice)\n }\n\n get unwrappedCollateralAsset() {\n return this.collateralAsset === Asset.WETH\n ? Asset.ETH\n : this.collateralAsset === Asset.WBNB\n ? Asset.BNB\n : this.collateralAsset === Asset.WMATIC\n ? Asset.MATIC\n : this.collateralAsset\n }\n\n updateLiquidationPrice() {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId) {\n throw new Error('There is no network connection')\n }\n const loanAssetDecimals = assetUtils.getDecimals(chainId, this.loanAsset)\n const collateralAssetDecimals = assetUtils.getDecimals(chainId, this.collateralAsset)\n const loanAssetPrecision = new BigNumber(10 ** (18 - loanAssetDecimals))\n const collateralAssetPrecision = new BigNumber(10 ** (18 - collateralAssetDecimals))\n const liquidationCollateralToLoanRate = this.loanData.maintenanceMargin\n .times(this.loanData.principal.times(loanAssetPrecision))\n .div(10 ** 20)\n .plus(this.loanData.principal.times(loanAssetPrecision))\n .div(this.loanData.collateral.times(collateralAssetPrecision))\n .times(10 ** 18)\n\n this.liquidationPrice = liquidationCollateralToLoanRate.div(10 ** 18)\n }\n\n setActive(prop: any, value: any) {\n const { borrowStore } = this.rootStore\n borrowStore.set('loanId', this.loanId)\n borrowStore.set(prop, value)\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: LoanProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n init() {\n const { chainId } = this.rootStore.web3Connection\n this.updateLiquidationPrice()\n if (chainId && isChainSupported(chainId)) {\n this.set(\n 'activeTokenLiquidation',\n assetUtils.getDefaultActiveToken(chainId, this.loanAsset, this.collateralAsset)\n )\n }\n\n mobx.reaction(\n () => this.pendingTx,\n () => {\n const loan = this.rootStore.borrowStore.loans.find((item) => this.loanId === item.loanId)\n loan && this.assign(loan)\n }\n )\n }\n\n constructor(rootStore: RootStore, loan: IBorrowedFundsState) {\n this.rootStore = rootStore\n this.assign(loan)\n this.loanData = loan.loanData\n this.init()\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n }\n}\n","import assetUtils, { Asset, getITokenAddress } from 'app-lib/assetUtils'\nimport {\n ChainId,\n getBlockExplorerAddressLink,\n isChainSupported,\n} from 'bzx-common/src/config/appConfig'\nimport BorrowRequest from 'bzx-common/src/domain/borrow/BorrowRequest'\nimport IBorrowInfo from 'bzx-common/src/domain/borrow/IBorrowInfo'\nimport RepayLoanRequest from 'bzx-common/src/domain/borrow/RepayLoanRequest'\nimport ManageCollateralRequest from 'bzx-common/src/domain/ManageCollateralRequest'\nimport { IInterestRatesFromApi } from 'bzx-common/src/lib/apis/bzxApi'\nimport errorUtils from 'bzx-common/src/lib/errorUtils'\nimport loanUtils from 'bzx-common/src/lib/loanUtils'\nimport _ from 'lodash'\nimport * as mobx from 'mobx'\nimport { BigNumber } from '@0x/utils'\nimport RootStore from '../../stores/RootStore'\nimport Loan from './Loan'\n\ntype Action = 'collateral' | 'borrow' | 'repay' | 'autoSyncData'\n\ntype Request = BorrowRequest | ManageCollateralRequest | RepayLoanRequest\n\nexport interface IBorrowItem {\n asset: Asset\n availableLiquidity: BigNumber\n borrowInterestRate: BigNumber\n interestRate: BigNumber\n isLoading: boolean\n iTokenAddress: string\n iTokenExplorerUrl: string\n supplyApr: string\n totalBorrow: string\n totalSupply: string\n}\n\ninterface IBorrowStoreProps {\n action: Action | null\n aprs: Record\n autoSyncData: boolean\n borrowInfo: IBorrowInfo | null\n errorLoan: Error | null\n errorBorrow: Error | null\n errorTask: Error | null\n filteredLoans: Loan[]\n isBorrowCompleted: boolean\n isOpen: boolean\n liquidities: Record\n loans: Loan[]\n loansPending: boolean\n loansChecked: boolean\n loansError: Error | null\n loanId: string | null\n pending: boolean\n request: Request | null\n searchQuery: string\n sortBy: 'asset' | 'interestRate' | 'availableLiquidity'\n sortOrder: 'asc' | 'desc'\n}\n\nexport default class BorrowStore implements IBorrowStoreProps {\n action = null\n aprs: Record = {}\n liquidities: Record = {}\n autoSyncData = false\n borrowInfo: IBorrowInfo | null = null\n errorBorrow = null\n errorLoan = null\n errorTask = null\n isBorrowCompleted = false\n isOpen = false\n loanId = null\n loans: Loan[] = []\n loansPending = false\n loansChecked = false\n /** Error when fetching the list of user loans */\n loansError: Error | null = null\n pending = false\n request: Request | null = null\n rootStore: RootStore\n recentLiquidationsNumber = 0\n searchQuery = ''\n sortBy: 'interestRate' | 'availableLiquidity' | 'asset' = 'interestRate'\n sortOrder: 'asc' | 'desc' = 'asc'\n readonly daysNumberForLoanActionNotification = 2\n\n get error() {\n return this.errorBorrow || this.errorLoan || this.errorTask || this.loansError\n }\n\n get borrowItems(): IBorrowItem[] {\n const { chain, statsStore } = this.rootStore\n if (!chain) {\n return []\n }\n const { chainId } = chain.chainDetails\n const { currentChainStats } = statsStore\n return chain.borrowing.assets.map((asset) => {\n const borrowAsset = assetUtils.wrapNativeAsset(chainId, asset) // fix for Weth token\n const stat = currentChainStats.find((stat) => stat.tokenName === borrowAsset)\n const iTokenAddress = getITokenAddress(chainId, asset)\n return {\n asset,\n interestRate: new BigNumber(stat ? stat.borrowApr : 0),\n isLoading: false,\n iTokenAddress,\n availableLiquidity: new BigNumber(stat ? stat.availableLiquidity : NaN),\n borrowInterestRate: new BigNumber(stat ? stat.borrowApr : 0),\n iTokenExplorerUrl: getBlockExplorerAddressLink(chainId, iTokenAddress),\n supplyApr: stat ? stat.supplyApr : '0',\n totalBorrow: stat ? stat.totalBorrow : 'NaN',\n totalSupply: stat ? stat.totalSupply : 'NaN',\n }\n })\n }\n\n get filteredBorrowItems() {\n let filtered = this.borrowItems\n if (this.rootStore.borrowStore.searchQuery) {\n filtered = filtered.filter((item) =>\n item.asset.toLowerCase().includes(this.searchQuery.toLowerCase())\n )\n }\n return _.orderBy(\n filtered,\n [this.sortBy === 'asset' ? this.sortBy : (item) => +item[this.sortBy]],\n [this.sortOrder]\n )\n }\n\n get loan() {\n return this.loans.find((item) => this.loanId === item.loanId)\n }\n\n get filteredLoans() {\n let filtered = this.loans\n if (this.searchQuery) {\n filtered = this.loans.filter((loan: Loan) =>\n loan.loanAsset.toLowerCase().includes(this.searchQuery)\n )\n }\n return filtered\n }\n\n updateLoan(updatedLoan: Loan) {\n this.set(\n 'loans',\n this.loans.map((loan) => {\n if (updatedLoan.loanId === loan.loanId) {\n return updatedLoan\n }\n return loan\n })\n )\n }\n\n removeLoan(loanId: string) {\n const loans = this.loans\n this.set(\n 'loans',\n loans.reduce((arr, loan) => {\n if (loanId !== loan.loanId) {\n arr.push(loan)\n }\n return arr\n }, [] as Loan[])\n )\n }\n\n sortList(by: 'interestRate' | 'availableLiquidity' | 'asset') {\n if (this.sortBy === by) {\n this.sortOrder = this.sortOrder === 'asc' ? 'desc' : 'asc'\n } else {\n this.sortBy = by\n }\n }\n\n setLoanPendingTx(loanId: string, pendingTx = true) {\n this.set(\n 'loans',\n this.loans.map((loan) => {\n if (loanId === loan.loanId) {\n loan.set('pendingTx', pendingTx)\n }\n return loan\n })\n )\n }\n\n onLoanConfirmed(request: Request) {\n try {\n this.setLoanPendingTx(request.loanId)\n\n if (request instanceof BorrowRequest) {\n this.borrow(request)\n } else if (request instanceof ManageCollateralRequest) {\n this.collateral(request)\n } else if (request instanceof RepayLoanRequest) {\n this.repay(request)\n }\n this.onClose()\n } catch (err) {\n errorUtils.decorateError(err, { title: 'No task found' })\n this.set('errorLoan', err)\n console.error(err)\n }\n }\n\n async borrow(request: BorrowRequest) {\n const { web3Connection, transactionStore } = this.rootStore\n const { loanService } = this.rootStore.services\n const { chainId } = web3Connection\n if (!chainId) {\n return\n }\n let tx\n try {\n const txSteps = await loanService.borrow(chainId, request)\n tx = await transactionStore.run('borrow', txSteps)\n if (tx.status === 'success') {\n await this.syncLoans()\n this.rootStore.statsStore.refreshForCurrentChain()\n }\n return tx\n } catch (err) {\n console.error('Could not borrow', err)\n }\n }\n\n async collateral(request: ManageCollateralRequest) {\n const { fulcrumProvider, web3Connection, transactionStore } = this.rootStore\n const { loanService } = this.rootStore.services\n const { chainId } = web3Connection\n const { loanId } = request\n this.setLoanPendingTx(loanId)\n if (!chainId) {\n return\n }\n let tx\n try {\n const txSteps = await loanService.collateral(chainId, request)\n tx = await transactionStore.run('borrow-collateral', txSteps)\n if (tx.status === 'success') {\n const loanData = await loanUtils.getLoanById(fulcrumProvider, loanId)\n if (loanData) {\n return this.updateLoan(new Loan(this.rootStore, loanData))\n }\n this.syncLoans()\n }\n return tx\n } catch (err) {\n console.error(err)\n }\n }\n\n async repay(request: RepayLoanRequest) {\n const { fulcrumProvider, web3Connection, transactionStore } = this.rootStore\n const { loanService } = this.rootStore.services\n const { chainId } = web3Connection\n const { loanId } = request\n this.setLoanPendingTx(loanId)\n if (!chainId) {\n return\n }\n let tx\n try {\n const txSteps = await loanService.repay(chainId, request)\n tx = await transactionStore.run('repay', txSteps)\n if (tx.status === 'success') {\n const loanData = await loanUtils.getLoanById(fulcrumProvider, loanId)\n if (loanData) {\n return this.updateLoan(new Loan(this.rootStore, loanData))\n }\n this.syncLoans()\n }\n return tx\n } catch (err) {\n console.error(err)\n }\n }\n\n /**\n * Reset error state to null for any model that might have an error.\n * borrowStore.error computed value will be null as a result.\n */\n clearError() {\n this.errorBorrow = null\n this.errorTask = null\n this.loansError = null\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof IBorrowStoreProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n clearData() {\n this.borrowInfo = null\n this.isBorrowCompleted = false\n this.loans = []\n this.onClose()\n this.loansChecked = false\n }\n\n // TODO: there shouldnt be UI component state mixed in stores\n onClose() {\n this.loanId = null\n this.request = null\n this.action = null\n this.isOpen = false\n }\n\n createRequest(action: Action) {\n const loan = this.loan\n if (!loan) {\n return\n }\n switch (action) {\n case 'borrow':\n return new BorrowRequest(\n loan.loanId,\n loan.loanAsset,\n new BigNumber(0),\n loan.collateralAsset,\n new BigNumber(0)\n )\n case `collateral`: {\n return new ManageCollateralRequest(\n loan.loanId,\n loan.collateralAsset,\n loan.collateralAmount,\n false,\n loan.loanAsset\n )\n }\n case `repay`: {\n return new RepayLoanRequest(\n loan.loanAsset,\n loan.collateralAsset,\n loan.accountAddress,\n loan.loanId,\n new BigNumber(0),\n new BigNumber(0),\n loan.amountOwed\n )\n }\n }\n }\n\n /**\n * Loan list, all loan related data.\n */\n async syncLoans() {\n try {\n const loans = (await loanUtils.getLoansList(this.rootStore.fulcrumProvider)).map((loan) => {\n return new Loan(this.rootStore, loan)\n })\n this.assign({ loans })\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Could not list your loans' })\n this.assign({ loansError: err })\n } finally {\n this.assign({ loansPending: false, loansChecked: true })\n }\n }\n\n /**\n * Refresh all assets interest rates, liquidity, loans, all user related data\n */\n async syncData(chainId: ChainId, walletAddress: string) {\n this.assign({ pending: true, loansPending: !!walletAddress })\n await this.rootStore.statsStore.stats.fetch(chainId)\n if (walletAddress) {\n await this.syncLoans()\n }\n this.assign({ pending: false })\n }\n\n autoSync(enabled: boolean) {\n this.autoSyncData = enabled\n }\n\n init() {\n mobx.reaction(\n () => this.rootStore.transactionStore.isFinished,\n (isFinished) => {\n if (isFinished) {\n this.loans.forEach((loan) => loan.set('pendingTx', false))\n }\n }\n )\n\n mobx.reaction(\n () => this.action,\n (action) => {\n if (!action) {\n return\n }\n const request = this.createRequest(action)\n if (!request) {\n return\n }\n this.set('request', request)\n this.set('isOpen', true)\n }\n )\n\n mobx.autorun(() => {\n const { chainId, walletAddress } = this.rootStore.web3Connection\n if (this.autoSyncData) {\n if (chainId && isChainSupported(chainId)) {\n this.syncData(chainId, walletAddress)\n }\n }\n })\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, { rootStore: false }, { autoBind: true, deep: false })\n this.init()\n }\n}\n","import assetUtils, { Asset, getITokenAddress } from 'app-lib/assetUtils'\nimport errorUtils from 'app-lib/errorUtils'\nimport lendUtils, { IUserYield } from 'app-lib/lendUtils'\nimport {\n chainConfigs,\n ChainId,\n getBlockExplorerAddressLink,\n isChainSupported,\n} from 'bzx-common/src/config/appConfig'\nimport _ from 'lodash'\nimport * as mobx from 'mobx'\nimport { BigNumber } from '@0x/utils'\nimport RootStore from '../../stores/RootStore'\nimport AsyncData from 'bzx-common/src/lib/mobx/AsyncData'\n\nexport interface ILendItem {\n supplyApr: number\n asset: Asset\n availableLiquidity: string\n insufficientLiquidityToUnlend: boolean\n interestRate: BigNumber\n isLoading: boolean\n iTokenAddress: string\n iTokenExplorerUrl: string\n liquidity: number\n supplyInterestRate: string\n totalBorrow: string\n totalSupply: string\n userYearlyProfit: BigNumber\n userYield?: IUserYield\n}\n\ninterface ILendStoreProps {\n autoSyncData: boolean\n lendItems: ILendItem[]\n pendingAssetTx: Asset[]\n profitError: Error | null\n userYields: AsyncData\n}\n\nexport default class LendStore implements ILendStoreProps {\n autoSyncData = false\n pendingAssetTx: Asset[] = []\n rootStore: RootStore\n profitError: Error | null = null\n\n /** User balances + lend profits */\n userYields = new AsyncData(\n [],\n () => lendUtils.getLendProfits(this.rootStore.fulcrumProvider, this.lendAssets),\n {\n onError(err) {\n errorUtils.decorateError(err, { title: 'Could not get your yield balances' })\n console.error(err)\n },\n }\n )\n\n get error() {\n return this.userYields.error || this.profitError\n }\n\n get lendAssets() {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId || !isChainSupported(chainId)) {\n return []\n }\n return chainConfigs[chainId].lending.assets\n }\n\n /** Takes from the statsStore for general stats */\n get lendItems(): ILendItem[] {\n const { chain, statsStore } = this.rootStore\n if (!chain) {\n return []\n }\n const { chainId } = chain.chainDetails\n const { currentChainStats } = statsStore\n return this.lendAssets.map((asset) => {\n const lendAsset = assetUtils.wrapNativeAsset(chainId, asset)\n const stat = currentChainStats.find((stat) => stat.tokenName === lendAsset)\n const userYield = this.userYields.value.find((yyield) => yyield.asset === lendAsset)\n const interestRate = new BigNumber(stat?.supplyApr || 0)\n const availableLiquidity = stat?.availableLiquidity || 'NaN'\n const iTokenAddress = getITokenAddress(chainId, asset)\n const iTokenExplorerUrl = getBlockExplorerAddressLink(chainId, iTokenAddress)\n\n return {\n supplyApr: Number(stat?.supplyApr || 0),\n asset,\n availableLiquidity,\n interestRate,\n isLoading: false,\n iTokenAddress,\n iTokenExplorerUrl,\n liquidity: Number(stat?.availableLiquidity || 0),\n supplyInterestRate: stat?.supplyApr || 'NaN',\n totalBorrow: stat?.totalBorrow || 'NaN',\n totalSupply: stat?.totalSupply || 'NaN',\n insufficientLiquidityToUnlend:\n !!stat &&\n !!userYield &&\n userYield.equity.gt(0) &&\n userYield.equity.gt(availableLiquidity),\n userYield,\n userYearlyProfit:\n stat && userYield ? interestRate.div(100).times(userYield.equity) : new BigNumber(0),\n }\n })\n }\n\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n setPendingAssetTx(asset: Asset) {\n const isPending = this.pendingAssetTx.some((assetTx) => assetTx === asset)\n if (isPending) {\n this.pendingAssetTx = _.without(this.pendingAssetTx, asset)\n } else {\n this.pendingAssetTx = this.pendingAssetTx.concat([asset])\n }\n }\n\n async lend(asset: Asset, amount: BigNumber) {\n const { transactionStore } = this.rootStore\n const { lendService } = this.rootStore.services\n let tx\n try {\n const txSteps = lendService.lend(asset, amount)\n this.setPendingAssetTx(asset)\n tx = await transactionStore.run('lend', txSteps)\n if (tx.status === 'success') {\n await this.userYields.fetch()\n this.rootStore.statsStore.refreshForCurrentChain()\n }\n return tx\n } catch (err) {\n console.error(err)\n } finally {\n this.setPendingAssetTx(asset)\n }\n }\n\n async unlend(asset: Asset, amount: BigNumber) {\n const { transactionStore } = this.rootStore\n const { lendService } = this.rootStore.services\n let tx\n try {\n const txSteps = lendService.unlend(asset, amount)\n this.setPendingAssetTx(asset)\n tx = await transactionStore.run('unlend', txSteps)\n if (tx.status === 'success') {\n await this.userYields.fetch()\n this.rootStore.statsStore.refreshForCurrentChain()\n }\n return tx\n } catch (err) {\n console.error(err)\n } finally {\n this.setPendingAssetTx(asset)\n }\n }\n\n clearError() {\n this.userYields.error = null\n this.profitError = null\n }\n\n clearData() {\n this.userYields.reset()\n this.clearError()\n }\n\n async syncData(chainId: ChainId, walletAddress: string) {\n await this.rootStore.statsStore.stats.fetch(chainId)\n if (walletAddress) {\n await this.userYields.fetch()\n const yields = this.userYields.value\n if (yields.length > 0 && yields.some((yyield) => yyield.iTokenPrice.isNaN())) {\n const profitError = new Error('Missing user iToken data from API Graph')\n errorUtils.decorateError(profitError, { title: 'Could not calculate yield profits' })\n this.assign({ profitError })\n }\n }\n }\n\n autoSync(enabled: boolean) {\n this.autoSyncData = enabled\n }\n\n init() {\n mobx.autorun(() => {\n const { chainId, walletAddress } = this.rootStore.web3Connection\n if (this.autoSyncData) {\n if (chainId && isChainSupported(chainId)) {\n this.syncData(chainId, walletAddress)\n }\n }\n })\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, { rootStore: false }, { autoBind: true, deep: false })\n this.init()\n }\n}\n","// tslint:disable: max-classes-per-file\nimport { BigNumber } from '@0x/utils'\nimport { Asset, getInfo } from 'app-lib/assetUtils'\nimport errorUtils from 'app-lib/errorUtils'\nimport providerUtils from 'app-lib/providerUtils'\nimport * as mobx from 'mobx'\nimport { IMigration, migrationList } from '../services/MigrateService'\nimport RootStore from './RootStore'\n\ntype BzxAsset = Asset.BZRX\n\nexport type MigrateAsset = Asset.BZRX\n\ninterface IMigrationProps {\n amountToConvert: string\n approvalPending: boolean\n balancesPending: boolean\n conversionError: null | Error\n conversionPending: boolean\n details: IMigration\n enabled: boolean\n liquidityAvailable: BigNumber\n liquidityLoaded: boolean\n spendingApproval: BigNumber\n walletBalanceFrom: BigNumber\n walletBalanceTo: BigNumber\n}\n\n/**\n * Model for a migration from one toke to another\n * eg: BGOV -> BZRX, BZRX -> OOKI, ...\n */\nexport class Migration implements IMigrationProps {\n amountToConvert = ''\n approvalPending = false\n balancesPending = false\n conversionError: null | Error = null\n conversionPending = false\n details: IMigration\n enabled = true\n liquidityAvailable = new BigNumber(0)\n liquidityLoaded = false\n rootStore: RootStore\n spendingApproval = new BigNumber(0)\n walletBalanceFrom = new BigNumber(0)\n walletBalanceTo = new BigNumber(0)\n\n get needsApproval() {\n return this.walletBalanceFrom.gt(0) && this.spendingApproval.lt(this.walletBalanceFrom)\n }\n\n get amountAsBigNumber() {\n return new BigNumber(this.amountToConvert || 0)\n }\n\n get conversionAmount() {\n return this.amountAsBigNumber.times(this.details.conversionRatio)\n }\n\n get canConvert() {\n const { isConnected } = this.rootStore.web3Connection\n return (\n isConnected &&\n !this.needsApproval &&\n this.amountAsBigNumber.gt(0) &&\n this.walletBalanceFrom.gte(this.amountToConvert) &&\n this.enabled\n )\n }\n\n get migrationChainDetails() {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId) {\n return\n }\n return this.details.chains[chainId]\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof IMigrationProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n setMaxAmount() {\n this.amountToConvert = this.rootStore.userWallet\n .findTokenBalance(this.details.fromAsset)\n .toFixed()\n }\n\n clearData() {\n this.amountToConvert = ''\n this.liquidityAvailable = new BigNumber(0)\n this.spendingApproval = new BigNumber(0)\n this.walletBalanceFrom = new BigNumber(0)\n this.liquidityLoaded = false\n }\n\n /**\n * If a converter has limited amount of tokens for conversion\n * Currently fails silently as it is not critical but could be reviewed.\n */\n async getLiquidityAvailable() {\n try {\n if (!this.migrationChainDetails) {\n return\n }\n const { address, decimals } = getInfo(\n this.migrationChainDetails.chainId,\n this.details.toAsset\n )\n const amount = await providerUtils.getErc20Balance(\n this.rootStore.fulcrumProvider,\n address,\n this.migrationChainDetails.converterAddress\n )\n const liquidityAvailable = amount.div(10 ** decimals)\n this.assign({ liquidityAvailable, liquidityLoaded: true })\n return liquidityAvailable\n } catch (err) {\n console.error(err)\n }\n }\n\n async setSpendingApproval() {\n if (!this.migrationChainDetails) {\n return\n }\n const { spendingApprovals } = this.rootStore\n this.assign({ approvalPending: true })\n const approval = await spendingApprovals.setInfiniteApprovalForToken(\n this.details.fromAsset,\n this.migrationChainDetails.converterAddress\n )\n if (approval) {\n this.assign({ spendingApproval: approval.amount })\n }\n this.assign({ approvalPending: false })\n }\n\n async refreshTokensAmounts() {\n if (!this.migrationChainDetails) {\n return\n }\n try {\n this.assign({ balancesPending: true })\n const { userWallet, spendingApprovals } = this.rootStore\n const { fromAsset, toAsset } = this.details\n const [from, to] = await userWallet.getBalances([fromAsset, toAsset])\n this.assign({\n amountToConvert: from.amount.toFixed(),\n walletBalanceFrom: from.amount,\n walletBalanceTo: to.amount,\n })\n const approval = await spendingApprovals.checkApproval(\n fromAsset,\n this.migrationChainDetails.converterAddress\n )\n this.set('spendingApproval', approval.amount)\n if (this.migrationChainDetails.limitedLiquidity) {\n this.getLiquidityAvailable()\n }\n } catch (err) {\n console.error(err)\n } finally {\n this.assign({ balancesPending: false })\n }\n }\n\n async convert() {\n try {\n const { transactionStore, services } = this.rootStore\n this.assign({ conversionPending: true, conversionError: null })\n const txSteps = services.migrateService.migrate(this.details, this.amountAsBigNumber)\n const tx = await transactionStore.run('migrate-token', txSteps)\n if (tx.status === 'success') {\n this.refreshTokensAmounts()\n }\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Could not convert' })\n this.assign({ conversionError: err })\n } finally {\n this.assign({ conversionPending: false })\n }\n }\n\n constructor(migrationInfo: IMigration, rootStore: RootStore) {\n this.details = migrationInfo\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n\ninterface IMigrationStoreProps {\n errorConversion: Error | null\n migrateAssets: BzxAsset[]\n autoSyncData: boolean\n}\n\nexport default class MigrationStore implements IMigrationStoreProps {\n public rootStore: RootStore\n errorConversion: Error | null = null\n migrateAssets: BzxAsset[] = []\n autoSyncData = false\n migrations: Migration[]\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof IMigrationStoreProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n clearData() {\n this.migrations.forEach((migration) => migration.clearData())\n }\n\n init() {\n mobx.autorun(() => {\n if (this.autoSyncData) {\n const { chainId, walletAddress } = this.rootStore.web3Connection\n this.migrations.forEach((migration, index) => {\n migration.clearData()\n if (walletAddress && chainId && migration.details.chains[chainId]) {\n setTimeout(() => {\n migration.refreshTokensAmounts()\n }, index * 500)\n }\n })\n }\n })\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n this.migrations = [new Migration(migrationList.BZRX_TO_OOKI, rootStore)]\n mobx.makeAutoObservable(this, { rootStore: false }, { autoBind: true, deep: false })\n }\n}\n","import { Asset } from 'app-lib/assetUtils'\nimport { chainConfigs, ChainId, supportedChains } from 'bzx-common/src/config/appConfig'\nimport hashUtils from 'bzx-common/src/lib/hashUtils'\nimport * as mobx from 'mobx'\n\nexport interface ISettingsStoreProps {\n activePairs: Record\n debugTx: boolean\n devMode: boolean\n favoritePairs: Record\n fetchRatesOnChain: boolean\n theme: 'light' | 'dark'\n protocolVersionOverride: number\n panelsLayout: 'form-expanded' | 'form-shrinked'\n positionsLayout: 'card' | 'row'\n users: Record\n}\n\nconst defaultActivePairs: Record = {\n 1: chainConfigs[1].trading.defaultPair,\n 10: chainConfigs[10].trading.defaultPair,\n 56: chainConfigs[56].trading.defaultPair,\n 137: chainConfigs[137].trading.defaultPair,\n 42161: chainConfigs[42161].trading.defaultPair,\n}\n\n// Copy to be able to restore the protocol version override in the chain configs\nconst defaultProtocolVersion: Record = supportedChains.reduce((acc, chainId) => {\n acc[chainId] = chainConfigs[chainId].protocol.version\n return acc\n}, {} as Record)\n\n/**\n * Settings for the application\n */\nexport default class SettingsStore {\n static defaultSettings: ISettingsStoreProps = {\n fetchRatesOnChain: false,\n theme: 'light',\n favoritePairs: supportedChains.reduce((acc, chainId) => {\n acc[chainId] = []\n return acc\n }, {} as Record),\n activePairs: defaultActivePairs,\n debugTx: false,\n devMode: false,\n protocolVersionOverride: -1,\n panelsLayout: 'form-expanded',\n positionsLayout: 'row',\n users: {} as Record,\n }\n\n /**\n * Note the theme setting is not used at the moment, needs app refactoring\n */\n theme = SettingsStore.defaultSettings.theme\n favoritePairs = SettingsStore.defaultSettings.favoritePairs\n /** Whether the app should skip the backend api and fetch lend and borrow rates onchain only */\n fetchRatesOnChain = SettingsStore.defaultSettings.fetchRatesOnChain\n activePairs = SettingsStore.defaultSettings.activePairs\n debugTx = SettingsStore.defaultSettings.debugTx\n devMode = SettingsStore.defaultSettings.devMode\n protocolVersionOverride = SettingsStore.defaultSettings.protocolVersionOverride\n panelsLayout: 'form-expanded' | 'form-shrinked' = 'form-expanded'\n positionsLayout: 'card' | 'row' = 'row'\n users = SettingsStore.defaultSettings.users\n\n /**\n * @param chainId 1, 42, 56, 137, 42161\n * @param pair ETH/USDT\n */\n addFavoritePair(chainId: ChainId, pair: string) {\n if (!this.favoritePairs[chainId]) {\n // Necessary when we add new chains\n this.favoritePairs[chainId] = []\n }\n this.favoritePairs[chainId].push(pair)\n this.favoritePairs = { ...this.favoritePairs }\n }\n\n /**\n * @param chainId 1, 42, 56, 137, 42161\n * @param pair ETH/USDT\n */\n removeFavoritePair(chainId: ChainId, pair: string) {\n this.favoritePairs[chainId] = this.favoritePairs[chainId].filter((item) => item !== pair)\n this.favoritePairs = { ...this.favoritePairs }\n }\n\n /**\n * @param chainId 1, 42, 56, 137\n * @param baseToken ETH\n * @param quoteToken USDT\n */\n setMarketPair(chainId: ChainId, pair: { baseToken: Asset; quoteToken: Asset }) {\n this.activePairs[chainId] = pair\n this.activePairs = { ...this.activePairs }\n }\n\n /**\n * @param walletAddress 0xa00E002A4e71f886E1082c40322181f022d33000\n * @param name User\n */\n setAlias(walletAddress: string, alias: string) {\n const user = this.users[walletAddress]\n if (!user) {\n // Necessary when we add new user\n this.users[walletAddress] = { alias, avatar: 0 }\n } else {\n this.users[walletAddress].alias = alias\n }\n this.users = { ...this.users }\n }\n\n /**\n * @param walletAddress 0xa00E002A4e71f886E1082c40322181f022d33000\n * @param avatar 12\n */\n setAvatar(walletAddress: string, avatar: number) {\n if (!this.users[walletAddress]) {\n // Necessary when we add new user\n this.users[walletAddress] = { avatar, alias: hashUtils.shortHash(walletAddress, 4, 4) }\n } else {\n this.users[walletAddress].avatar = avatar\n }\n\n this.users = { ...this.users }\n }\n\n switchTheme() {\n this.theme = this.theme === 'light' ? 'dark' : 'light'\n }\n\n switchLayout() {\n this.panelsLayout = this.panelsLayout === 'form-expanded' ? 'form-shrinked' : 'form-expanded'\n }\n\n switchPositionsLayout() {\n this.positionsLayout = this.positionsLayout === 'card' ? 'row' : 'card'\n }\n\n set(prop: keyof ISettingsStoreProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n /**\n * This will override all chains configs protocol. For more info, check `chainCommon.ts`\n * If -1 is passed it should restore the version from the original config\n */\n setProtocolVersion(version: number) {\n supportedChains.forEach((chainId) => {\n chainConfigs[chainId].protocol.version =\n version === -1 ? defaultProtocolVersion[chainId] : version\n })\n this.protocolVersionOverride = version\n }\n\n constructor() {\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n }\n}\n","import LocalStorage from 'app-lib/LocalStorage'\nimport * as mobx from 'mobx'\nimport { supportedChains } from '../../config/appConfig'\nimport SettingsStore, { ISettingsStoreProps } from './SettingsStore'\n\n/**\n * Manage the retrieval and persistance of app settings.\n */\nexport default class SettingsAutoStorage {\n storage: LocalStorage\n settingsStore: SettingsStore\n stopAutoSaveSettings?: mobx.IReactionDisposer\n\n async getSettings(): Promise> {\n const settings = await this.storage.get('settings', SettingsStore.defaultSettings)\n supportedChains.forEach((chainId) => {\n // Necessary for when we add new chains; avoids crash\n if (!Array.isArray(settings.favoritePairs[chainId])) {\n settings.favoritePairs[chainId] = []\n }\n })\n return settings\n }\n\n saveSettings(settings: Partial) {\n return this.storage.save('settings', settings)\n }\n\n /**\n * Load local settings + setup automatic persistence\n */\n async init() {\n const storedSettings = await this.getSettings()\n this.settingsStore.assign(storedSettings)\n if (this.settingsStore.protocolVersionOverride !== -1) {\n this.settingsStore.setProtocolVersion(this.settingsStore.protocolVersionOverride)\n }\n\n /**\n * Auto save app settings on every change.\n */\n this.stopAutoSaveSettings = mobx.reaction(\n () => {\n // \"We enumerate which props/setting need to be sync so mobx observe them.\"\n const {\n activePairs,\n debugTx,\n devMode,\n favoritePairs,\n fetchRatesOnChain,\n panelsLayout,\n positionsLayout,\n protocolVersionOverride,\n users,\n } = this.settingsStore\n return {\n activePairs,\n debugTx,\n devMode,\n favoritePairs,\n fetchRatesOnChain,\n panelsLayout,\n positionsLayout,\n protocolVersionOverride,\n users,\n }\n },\n (settings) => this.saveSettings(settings),\n { name: 'autoSaveSettings', delay: 200 }\n )\n }\n\n destroy() {\n this.stopAutoSaveSettings && this.stopAutoSaveSettings()\n }\n\n constructor(settingsStore: SettingsStore, storage: LocalStorage) {\n this.settingsStore = settingsStore\n this.storage = storage\n }\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { asyncRetry, sleep } from 'app-lib/asyncUtils'\nimport errorUtils from 'app-lib/errorUtils'\nimport { approvalUtils } from 'app-lib/web3'\nimport _ from 'lodash'\nimport * as mobx from 'mobx'\nimport web3Utils from 'web3-utils'\nimport { BigNumber } from '@0x/utils'\nimport { chainConfigs, ChainId } from '../config/appConfig'\nimport RootStore from './RootStore'\nimport UserWallet from './UserWallet'\n\ntype SpendingApprovalsProps = 'pending' | 'error' | 'list' | 'isApproving'\n\nexport interface ISpendingApproval {\n amount: BigNumber\n assetAddress: string\n spender: string\n token: Asset\n}\n\n/**\n * Manage spending approvals\n * Approvals are in base unit.\n */\nexport default class SpendingApprovals {\n private rootStore: RootStore\n private userWallet: UserWallet\n public list: ISpendingApproval[] = []\n public error: Error | null = null\n public pending = false\n public isApproving: Asset | null = null\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: SpendingApprovalsProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n public assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n public clearError() {\n this.error = null\n }\n\n /**\n * If spender is an Asset, will return his address. Returns address as is in other cases.\n */\n public getSpenderAddress(spender: string | Asset) {\n return web3Utils.isAddress(spender)\n ? spender\n : assetUtils.getAddress(this.rootStore.fulcrumProvider.currentChainId, spender as Asset)\n }\n\n public findApproval(asset: Asset, spender: string | Asset) {\n const spenderAddress = this.getSpenderAddress(spender)\n return this.list.find(\n (approval) => approval.token === asset && approval.spender === spenderAddress\n )\n }\n\n /**\n * Get the current state for given approvals; does not update from blockchain\n */\n public findApprovals(assets: Asset[], spender: string | Asset) {\n const spenderAddress = this.getSpenderAddress(spender)\n return this.list.filter(\n (approval) => assets.includes(approval.token) && approval.spender === spenderAddress\n )\n }\n\n public needsApproval(\n chainId: ChainId,\n asset: Asset,\n spender: string | Asset,\n assetAmount: BigNumber\n ) {\n const isNative = assetUtils.isNativeTokenForNetwork(chainId, asset)\n if (isNative) {\n return false\n }\n const approval = this.findApproval(asset, spender)\n if (!approval) {\n return true\n }\n\n const decimals = assetUtils.getDecimals(chainId, asset)\n return approval.amount.div(10 ** decimals).lt(assetAmount)\n }\n\n public updateApprovalList(newApprovals: ISpendingApproval[]) {\n this.list = _.unionWith(\n newApprovals,\n this.list,\n (a, b) => a.token === b.token && a.spender === b.spender\n )\n }\n\n async checkApproval(token: Asset | string, spender: Asset | string) {\n const fp = this.rootStore.fulcrumProvider\n const approval = await approvalUtils.getSpendingApproval(fp, token, spender)\n this.updateApprovalList([approval])\n return approval\n }\n\n /**\n * Allows to check approval of multiple tokens for a single spender\n */\n async checkApprovals(assets: Asset[], spender: string) {\n try {\n this.assign({ pending: true, error: null })\n const fp = this.rootStore.fulcrumProvider\n const spenderAddress = this.getSpenderAddress(spender)\n const result = await asyncRetry(\n () => approvalUtils.getSpendingApprovalsOfAssets(fp, assets, spenderAddress),\n 2,\n 3000\n )\n this.updateApprovalList(result)\n return result\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Spending Approvals Check Issue' })\n this.set('error', err)\n console.error(err)\n } finally {\n this.set('pending', false)\n }\n }\n\n async setInfiniteApprovalForToken(asset: Asset, spender: string | Asset) {\n try {\n this.assign({ isApproving: asset, error: null, pending: true })\n const fp = this.rootStore.fulcrumProvider\n const spenderAddress = this.getSpenderAddress(spender)\n await approvalUtils.setSpendingApprovalInfinite(fp, asset, spenderAddress)\n const newApprowal = await this.checkApproval(asset, spenderAddress)\n this.updateApprovalList([newApprowal])\n return newApprowal\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Spending approval failed' })\n this.set('error', err)\n console.error(err)\n return false\n } finally {\n this.assign({ isApproving: null, pending: false })\n }\n }\n\n async setInfiniteApprovalForIToken(asset: Asset) {\n try {\n this.assign({ isApproving: asset, error: null, pending: true })\n const fp = this.rootStore.fulcrumProvider\n const iTokenAddress = assetUtils.getITokenAddress(fp.currentChainId, asset)\n await approvalUtils.setSpendingApprovalInfinite(fp, asset, iTokenAddress)\n const newApprowal = await this.checkApproval(asset, iTokenAddress)\n this.updateApprovalList([newApprowal])\n return newApprowal\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Spending approval failed' })\n this.set('error', err)\n console.error(err)\n return false\n } finally {\n this.assign({ isApproving: null, pending: false })\n }\n }\n\n async removeApproval({ asset, spender }: { asset: Asset; spender: string | Asset }) {\n const { transactionStore, fulcrumProvider } = this.rootStore\n const txSteps = await approvalUtils.setSpendingApprovalErc20(fulcrumProvider, {\n erc20Token: asset,\n spender,\n amount: new BigNumber(0),\n })\n transactionStore.run('approval', txSteps)\n }\n\n async checkApprovalsOfAllItokens() {\n const { web3Connection } = this.rootStore\n const { chainId } = web3Connection\n if (chainId) {\n const tokens = chainConfigs[chainId].lending.assets\n const itokenAddresses = assetUtils.getITokenAddresses(chainId, tokens)\n\n for (const address of itokenAddresses) {\n await this.checkApprovals(tokens, address)\n await sleep(500)\n }\n }\n }\n\n clearData() {\n this.list = []\n }\n\n constructor(rootStore: RootStore) {\n this.userWallet = rootStore.userWallet\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n","import _axios from 'axios'\n\nconst API_URL = 'https://hub.snapshot.org/graphql'\n\nconst axios = _axios.create({\n baseURL: API_URL,\n timeout: 15000,\n})\n\nexport interface IDaoProposal {\n author: string\n body: string\n choices: string[]\n end: number // timestamp\n id: string\n snapshot: string\n space: { id: string; name: string }\n start: number // timestamp\n state: string\n title: string\n}\n\nexport async function getProposals(): Promise {\n const payload = {\n query: `\n query Proposals {\n proposals(\n first: 20,\n skip: 0,\n where: {\n space: \"ooki.eth\"\n },\n orderBy: \"created\",\n orderDirection: desc\n ) {\n id\n title\n body\n choices\n start\n end\n snapshot\n state\n author\n space {\n id\n name\n }\n }\n }\n `,\n variables: null,\n operationName: 'Proposals',\n }\n\n const { data } = await axios.post('', payload)\n // There is a test proposal that we want to exclude from snapshot listing\n return data.data.proposals.filter((prop: IDaoProposal) => !prop.title.includes('test'))\n}\n\nexport default {\n getProposals,\n}\n","import { BigNumber } from '@0x/utils'\nimport snapshotApi, { IDaoProposal } from 'app-lib/apis/snapshotApi'\nimport { Asset } from 'app-lib/assetUtils'\nimport { sleep } from 'app-lib/asyncUtils'\nimport errorUtils from 'app-lib/errorUtils'\nimport stakingUtils from 'app-lib/stakingUtils'\nimport { ZERO_ADDRESS } from 'bzx-common/src/config/appConfig'\nimport * as mobx from 'mobx'\nimport { IOnchainProposal } from '../../services/DaoService'\nimport RootStore from '../../stores/RootStore'\n\ninterface IDaoProps {\n autoSyncData: boolean\n delegateAddress: string\n getDelegateError: null | Error\n getDelegatePending: boolean\n globalStaked: { token: Asset; amount: BigNumber }[]\n proposalsError: null | Error\n proposalsPending: boolean\n rootStore: RootStore\n setDelegateError: null | Error\n setDelegatePending: boolean\n snapshotProposals: IDaoProposal[]\n votingPowerError: null | Error\n votingPowerPending: boolean\n votingPowerStaked: BigNumber\n votingPowerTotal: BigNumber\n onchainProposals: IOnchainProposal[]\n onchainProposalsPending: boolean\n onchainProposalsError: null | Error\n}\n\nexport default class Dao implements IDaoProps {\n autoSyncData = false\n delegateAddress = ''\n getDelegateError: null | Error = null\n getDelegatePending = false\n globalStaked: { token: Asset; amount: BigNumber }[] = []\n proposalsError: null | Error = null\n proposalsPending = false\n rootStore: RootStore\n setDelegateError: null | Error = null\n setDelegatePending = false\n snapshotProposals: IDaoProposal[] = []\n votingPowerError = null\n votingPowerPending = false\n votingPowerStaked = new BigNumber(0)\n votingPowerTotal = new BigNumber(0)\n onchainProposals: IOnchainProposal[] = []\n onchainProposalsPending = false\n onchainProposalsError: null | Error = null\n\n get error() {\n return this.getDelegateError || this.setDelegateError || this.votingPowerError || null\n }\n\n get hasDelegate() {\n return this.delegateAddress && this.delegateAddress !== ZERO_ADDRESS\n }\n\n get votingPowerFromDelegators() {\n if (this.votingPowerStaked.eq(this.votingPowerTotal)) {\n return new BigNumber(0)\n }\n return this.votingPowerTotal.minus(this.votingPowerStaked)\n }\n\n get onchainProposalOngoing() {\n return this.onchainProposals.some((proposal) => !proposal.canceled && !proposal.executed)\n }\n\n /**\n * Flag to tell user that he needs to vote before staking or claiming rewards.\n * This is due to a bug related to staking contract that causes people to lose their voting power.\n */\n get userShouldVote() {\n return this.votingPowerTotal.gt(100000) && this.onchainProposalOngoing\n }\n\n set(prop: keyof IDaoProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n async getVotingPower() {\n try {\n const { fulcrumProvider: fp } = this.rootStore\n this.assign({ votingPowerPending: true, votingPowerError: null })\n const votingPower = await stakingUtils.getVotingPower(fp)\n this.assign(votingPower)\n } catch (err) {\n this.set(\n 'votingPowerError',\n errorUtils.decorateError(err, { title: 'Could not get your voting power' })\n )\n console.error(err)\n } finally {\n this.assign({ votingPowerPending: false })\n }\n }\n\n async getDelegate() {\n try {\n const { fulcrumProvider: fp } = this.rootStore\n this.assign({ getDelegatePending: true, getDelegateError: null })\n const delegateAddress = await stakingUtils.getDelegate(fp)\n this.assign({ delegateAddress })\n } catch (err) {\n this.set(\n 'getDelegateError',\n errorUtils.decorateError(err, { title: 'Could not get delegate info' })\n )\n console.error(err)\n } finally {\n this.assign({ getDelegatePending: false })\n }\n }\n\n async setDelegate(delegateAddress: string) {\n try {\n const { transactionStore, fulcrumProvider } = this.rootStore\n this.assign({ setDelegatePending: true, setDelegateError: null })\n const txSteps = stakingUtils.delegate(fulcrumProvider, delegateAddress)\n const tx = await transactionStore.run('delegate', txSteps)\n if (tx.status === 'success') {\n this.assign({ delegateAddress })\n }\n return tx\n } catch (err) {\n this.assign({\n setDelegateError: errorUtils.decorateError(err, { title: 'Could not delegate' }),\n })\n } finally {\n this.assign({ setDelegatePending: false })\n }\n }\n\n async getSnapshotProposals() {\n try {\n this.assign({ proposalsError: null, proposalsPending: true })\n const snapshotProposals = await snapshotApi.getProposals()\n snapshotProposals.forEach((prop) => {\n // Some proposals start with \"Ooki Snapshot Vote for\"; tries to simplify titles\n prop.title = prop.title.replace(/^Ooki Snapshot|Vote for/gi, '').trim()\n prop.start = prop.start * 1000 // dates from api are in ms\n prop.end = prop.end * 1000\n })\n this.assign({ snapshotProposals })\n } catch (proposalsError) {\n this.assign({ proposalsError })\n } finally {\n this.assign({ proposalsPending: false })\n }\n }\n\n async getGlobalStake() {\n try {\n const { fulcrumProvider: fp } = this.rootStore\n const globalStaked = await stakingUtils.getGlobalStaked(fp)\n this.assign({ globalStaked })\n } catch (err) {\n // Fail silently; global stats aren't that important\n console.error(err)\n }\n }\n\n async getOnchainProposals() {\n try {\n this.assign({ onchainProposalsPending: true, onchainProposalsError: null })\n const { daoService } = this.rootStore.services\n const onchainProposals = await daoService.getOnchainProposals()\n this.assign({ onchainProposals })\n } catch (err) {\n const onchainProposalsError = errorUtils.decorateError(err, {\n title: 'Could not fetch onchain proposals',\n })\n this.assign({ onchainProposalsError })\n } finally {\n this.assign({ onchainProposalsPending: false })\n }\n }\n\n stopDelegating() {\n return this.setDelegate(ZERO_ADDRESS)\n }\n\n clearError() {\n this.setDelegateError = null\n this.getDelegateError = null\n this.votingPowerError = null\n }\n\n clearData() {\n this.delegateAddress = ''\n this.votingPowerStaked = new BigNumber(0)\n this.votingPowerTotal = new BigNumber(0)\n this.clearError()\n }\n\n async syncData(walletAddress: string) {\n if (walletAddress) {\n await this.getVotingPower()\n await sleep(250)\n await this.getDelegate()\n await sleep(250)\n } else {\n this.clearData()\n }\n await this.getGlobalStake()\n }\n\n init() {\n mobx.autorun(() => {\n const { chainId, walletAddress } = this.rootStore.web3Connection\n if (this.autoSyncData) {\n if (chainId === 1) {\n this.syncData(walletAddress)\n } else {\n this.clearData()\n }\n }\n })\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n","// tslint:disable: max-classes-per-file\nimport { BigNumber } from '@0x/utils'\nimport stakingUtils from 'app-lib/stakingUtils'\nimport errorUtils from 'bzx-common/src/lib/errorUtils'\nimport * as mobx from 'mobx'\nimport { FulcrumProvider } from '../../../../fulcrum/src/services/FulcrumProvider'\nimport RootStore from '../RootStore'\nimport StakingStore from './StakingStore'\n\ninterface IRewardsProps {\n ooki: BigNumber\n ookiVesting: BigNumber\n vestedOokiInRewards: BigNumber\n error: Error | null\n pendingSushiRewards: boolean\n pendingStakingRewards: boolean\n pendingVbzrxClaim: boolean\n sushi: BigNumber\n stableCoin: BigNumber\n stableCoinVesting: BigNumber\n vestedVbzrx: BigNumber\n}\n\nexport default class Rewards implements IRewardsProps {\n /** OOKI received from staking */\n ooki = new BigNumber(0)\n /** OOKI pending to received from staked vbzrx */\n ookiVesting = new BigNumber(0)\n /**\n * The part of bzrx staking rewards that is not really staking rewards but instead\n * comes from the staked vbzrx that have vested.\n */\n vestedOokiInRewards = new BigNumber(0)\n error: Error | null = null\n pendingSushiRewards = false\n pendingStakingRewards = false\n pendingVbzrxClaim = false\n /** User earns Sushi when staking Sushi LP tokens (SLP) */\n sushi = new BigNumber(0)\n /**\n * \"stablecoin\" is actually the balance of 3CRV tokens that user can claim.\n * (It's called stablecoin in the contracts)\n */\n stableCoin = new BigNumber(0)\n stableCoinVesting = new BigNumber(0)\n provider: FulcrumProvider\n stakingStore: StakingStore\n rootStore: RootStore\n /** Balance of BZRX that the user can claim from his vested BZRX */\n vestedVbzrx = new BigNumber(0)\n\n get canClaimStakingRewards() {\n return this.ooki.gt(0.01) || this.stableCoin.gt(0.01)\n }\n\n get canClaimSushiRewards() {\n return this.sushi.gt(0.01)\n }\n\n get canClaimVestedBZRX() {\n return this.vestedVbzrx.gt(0.01)\n }\n\n /**\n * BZRX rewards include vbzrx staked that have vested + actual rewards.\n * This is the actual staking reward part.\n * Note: under certain circumstances, the vestedOokiInRewards may be bigger\n * than the total rewards. If that happens we prevent having a negative value\n * and set it to 0.\n */\n get actualBzrxStakingRewards() {\n const amount = this.ooki.minus(this.vestedOokiInRewards)\n if (amount.isNegative()) {\n return new BigNumber(0)\n }\n return amount\n }\n\n /**\n * Helper to set the value of one prop through a mobx action.\n */\n set(prop: keyof IRewardsProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n async getAllRewards() {\n this.assign({ error: null, pendingStakingRewards: true })\n try {\n const fp = this.provider\n const rewards = await stakingUtils.getStakingRewards(fp)\n this.assign(rewards)\n const vestedOokiInRewards = await stakingUtils.getVestedOokiInRewards(\n fp,\n this.stakingStore.userBalances.staked.vbzrx\n )\n this.set('vestedOokiInRewards', vestedOokiInRewards)\n const vestedBzrx = await stakingUtils.getVestedBzrxBalance(fp)\n this.set('vestedVbzrx', vestedBzrx.div(10 ** 18))\n return rewards\n } catch (err) {\n const error = errorUtils.decorateError(err, {\n title: 'Failed to get rewards balances',\n })\n this.set('error', error)\n } finally {\n this.set('pendingStakingRewards', false)\n }\n }\n\n async claimStakingRewards(shouldRestake = false) {\n try {\n const { transactionStore } = this.rootStore\n this.assign({ error: null, pendingStakingRewards: true })\n const claimedAmounts = { ooki: this.ooki, stableCoin: this.stableCoin, sushi: this.sushi }\n const txSteps = stakingUtils.claimStakingRewards(this.provider, shouldRestake)\n const tx = await transactionStore.run('staking-claim', txSteps)\n if (tx.status === 'success') {\n this.assign({\n ooki: new BigNumber(0),\n stableCoin: new BigNumber(0),\n sushi: new BigNumber(0),\n })\n return claimedAmounts\n }\n } catch (err) {\n const error = errorUtils.decorateError(err, { title: 'Failed to claim rewards' })\n this.set('error', error)\n throw error\n } finally {\n this.set('pendingStakingRewards', false)\n }\n }\n\n /**\n * For users who hold vbzrx in their wallet and just want to claim their bzrx\n */\n async claimVestedBzrx() {\n try {\n const { transactionStore } = this.rootStore\n this.assign({ error: null, pendingVbzrxClaim: true })\n const txSteps = stakingUtils.claimVestedBZRX(this.provider)\n const bzrxAmount = this.vestedVbzrx\n const tx = await transactionStore.run('claim-vbzrx', txSteps)\n if (tx.status === 'success') {\n this.set('vestedVbzrx', new BigNumber(0))\n return bzrxAmount\n }\n } catch (err) {\n const error = errorUtils.decorateError(err, { title: 'Failed to claim vested BZRX' })\n this.set('error', error)\n } finally {\n this.set('pendingVbzrxClaim', false)\n }\n }\n\n async claimSushiRewards() {\n try {\n const { transactionStore } = this.rootStore\n this.assign({ error: null, pendingSushiRewards: true })\n const txSteps = stakingUtils.claimSushiRewards(this.provider)\n const sushiAmount = this.sushi\n const tx = await transactionStore.run('staking-claim', txSteps)\n if (tx.status === 'success') {\n this.set('sushi', new BigNumber(0))\n return sushiAmount\n }\n } catch (err) {\n const error = errorUtils.decorateError(err, { title: 'Failed to claim SUSHI' })\n this.set('error', error)\n } finally {\n this.assign({ pendingSushiRewards: false })\n }\n }\n\n clearBalances() {\n this.ooki = new BigNumber(0)\n this.ookiVesting = new BigNumber(0)\n this.stableCoin = new BigNumber(0)\n this.stableCoinVesting = new BigNumber(0)\n this.sushi = new BigNumber(0)\n this.vestedVbzrx = new BigNumber(0)\n }\n\n constructor(provider: FulcrumProvider, stakingStore: StakingStore) {\n this.provider = provider\n this.stakingStore = stakingStore\n this.rootStore = stakingStore.rootStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'app-lib/assetUtils'\nimport stakingUtils from 'app-lib/stakingUtils'\nimport errorUtils from 'bzx-common/src/lib/errorUtils'\nimport * as mobx from 'mobx'\nimport { FulcrumProvider } from '../../../../fulcrum/src/services/FulcrumProvider'\n\ntype allowanceProp = 'asset' | 'amount' | 'pending' | 'error'\n\nexport default class SpendingAllowance {\n private provider: FulcrumProvider\n public asset: Asset\n public amount: BigNumber = new BigNumber(0)\n public checked = false\n public pending = false\n public error: Error | null = null\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: allowanceProp, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n public assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n public async update(amount: BigNumber) {\n try {\n this.assign({ pending: true, error: null })\n await stakingUtils.setStakingAllowance(this.provider, this.asset, amount)\n this.amount = amount\n return this.amount\n } catch (err) {\n errorUtils.decorateError(err, { title: `Could not update allowance [${this.asset}]` })\n this.set('error', err)\n } finally {\n this.set('pending', false)\n }\n }\n\n constructor(asset: Asset, provider: FulcrumProvider) {\n this.provider = provider\n this.asset = asset\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport { Asset } from 'bzx-common/src/lib/assetUtils'\nimport errorUtils from 'app-lib/errorUtils'\nimport stakingUtils from 'app-lib/stakingUtils'\nimport { stakeableToken } from 'bzx-common/src/domain/staking/stakingTypes'\nimport * as mobx from 'mobx'\nimport RootStore from '../RootStore'\nimport SpendingAllowance from './SpendingAllowance'\nimport UserBalances from './UserBalances'\n\ntype StakingAllowancesProp = 'checkError'\n\nexport default class StakingAllowances {\n [name: string]: any\n private rootStore: RootStore\n private userBalances: UserBalances\n public ooki: SpendingAllowance\n public vbzrx: SpendingAllowance\n public iooki: SpendingAllowance\n public slp_ooki_eth: SpendingAllowance\n public checkError: Error | null = null\n\n public get error() {\n return (\n this.ooki.error ||\n this.vbzrx.error ||\n this.iooki.error ||\n this.slp_ooki_eth.error ||\n this.checkError ||\n null\n )\n }\n\n public get list() {\n return [this.ooki, this.vbzrx, this.iooki, this.slp_ooki_eth]\n }\n\n public get allowanceChecked() {\n return this.list.every((allowance) => allowance.checked)\n }\n\n public get needApprovalList() {\n const { wallet } = this.userBalances\n return this.list.filter((allowance) => {\n const token = allowance.asset.toLowerCase()\n return allowance.checked && wallet[token].gt(0.01) && allowance.amount.lt(wallet[token])\n })\n }\n\n /**\n * TODO: refactor, probably dont need both list as array or map\n */\n public get needApprovals(): Map {\n const map = new Map()\n this.needApprovalList.forEach((allowance) => {\n map.set(allowance.asset.toLocaleLowerCase() as stakeableToken, allowance)\n })\n return map\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: StakingAllowancesProp, value: any) {\n ;(this[prop] as any) = value\n }\n\n public clearError() {\n this.list.forEach((approval) => (approval.error = null))\n this.checkError = null\n }\n\n clearData() {\n const initState = { amount: new BigNumber(0), checked: false }\n this.ooki.assign(initState)\n this.vbzrx.assign(initState)\n this.iooki.assign(initState)\n this.slp_ooki_eth.assign(initState)\n this.clearError()\n }\n\n public async check() {\n try {\n this.set('checkError', null)\n const fp = this.rootStore.fulcrumProvider\n const result = await stakingUtils.getStakeableAllowances(fp)\n this.ooki.assign({ amount: result.ooki, checked: true })\n this.vbzrx.assign({ amount: result.vbzrx, checked: true })\n this.iooki.assign({ amount: result.iooki, checked: true })\n this.slp_ooki_eth.assign({ amount: result.slp_ooki_eth, checked: true })\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Could not check spending allowances' })\n this.set('checkError', err)\n }\n }\n\n constructor(userBalances: UserBalances, rootStore: RootStore) {\n this.userBalances = userBalances\n this.rootStore = rootStore\n this.ooki = new SpendingAllowance(Asset.OOKI, this.rootStore.fulcrumProvider)\n this.vbzrx = new SpendingAllowance(Asset.vBZRX, this.rootStore.fulcrumProvider)\n this.iooki = new SpendingAllowance(Asset.IOOKI, this.rootStore.fulcrumProvider)\n this.slp_ooki_eth = new SpendingAllowance(Asset.SLP_OOKI_ETH, this.rootStore.fulcrumProvider)\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n","// tslint:disable: max-classes-per-file\nimport { BigNumber } from '@0x/utils'\nimport { sleep } from 'app-lib/asyncUtils'\nimport stakingUtils from 'app-lib/stakingUtils'\nimport * as mobx from 'mobx'\nimport RootStore from '../RootStore'\n\ntype userBalanceProp = 'pendingWalletBalance' | 'pendingStakedBalance' | 'error'\n\nexport interface IStakingTokenBalances {\n ooki: BigNumber\n iooki: BigNumber\n vbzrx: BigNumber\n crv3: BigNumber\n slp_ooki_eth: BigNumber\n sushi: BigNumber\n}\n\nexport class TokenBalances implements IStakingTokenBalances {\n [name: string]: any\n public ooki = new BigNumber(0)\n public iooki = new BigNumber(0)\n public vbzrx = new BigNumber(0)\n public crv3 = new BigNumber(0)\n public slp_ooki_eth = new BigNumber(0)\n public sushi = new BigNumber(0)\n\n get isEmpty() {\n // Note: we dont count 3CRV or SUSHI because we dont use them for staking, it's just a reward\n return (\n this.ooki.isZero() && this.iooki.isZero() && this.slp_ooki_eth.isZero() && this.vbzrx.isZero()\n )\n }\n\n /**\n * An helper that tells if user wallet balances are enough to stake / unstake\n */\n get isWorthEnough() {\n return (\n this.ooki.gte(0.01) ||\n this.iooki.gte(0.01) ||\n this.slp_ooki_eth.gte(0.01) ||\n this.vbzrx.gte(0.01)\n )\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: keyof IStakingTokenBalances, value: BigNumber) {\n this[prop] = value\n }\n\n public add(amounts: Partial) {\n if (amounts.ooki) {\n this.ooki = this.ooki.plus(amounts.ooki)\n }\n if (amounts.vbzrx) {\n this.vbzrx = this.vbzrx.plus(amounts.vbzrx)\n }\n if (amounts.iooki) {\n this.iooki = this.iooki.plus(amounts.iooki)\n }\n if (amounts.crv3) {\n this.crv3 = this.crv3.plus(amounts.crv3)\n }\n if (amounts.slp_ooki_eth) {\n this.slp_ooki_eth = this.slp_ooki_eth.plus(amounts.slp_ooki_eth)\n }\n if (amounts.sushi) {\n this.sushi = this.sushi.plus(amounts.sushi)\n }\n }\n\n public substract(amounts: Partial) {\n if (amounts.ooki) {\n this.ooki = this.ooki.minus(amounts.ooki)\n }\n if (amounts.vbzrx) {\n this.vbzrx = this.vbzrx.minus(amounts.vbzrx)\n }\n if (amounts.iooki) {\n this.iooki = this.iooki.minus(amounts.iooki)\n }\n if (amounts.crv3) {\n this.crv3 = this.crv3.minus(amounts.crv3)\n }\n if (amounts.slp_ooki_eth) {\n this.slp_ooki_eth = this.slp_ooki_eth.minus(amounts.slp_ooki_eth)\n }\n if (amounts.sushi) {\n this.sushi = this.sushi.minus(amounts.sushi)\n }\n }\n\n public clearBalances() {\n this.ooki = new BigNumber(0)\n this.iooki = new BigNumber(0)\n this.vbzrx = new BigNumber(0)\n this.crv3 = new BigNumber(0)\n this.slp_ooki_eth = new BigNumber(0)\n this.sushi = new BigNumber(0)\n }\n\n public getCopy() {\n const balances = new TokenBalances()\n balances.set('ooki', new BigNumber(this.ooki))\n balances.set('vbzrx', new BigNumber(this.vbzrx))\n balances.set('iooki', new BigNumber(this.iooki))\n balances.set('crv3', new BigNumber(this.crv3))\n balances.set('slp_ooki_eth', new BigNumber(this.slp_ooki_eth))\n balances.set('sushi', new BigNumber(this.sushi))\n return balances\n }\n\n constructor() {\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n\nexport default class UserBalances {\n public rootStore: RootStore\n public wallet = new TokenBalances()\n public staked = new TokenBalances()\n public pendingWalletBalance = false\n public pendingStakedBalance = false\n public error: Error | null = null\n public loaded = false\n\n get total() {\n return {\n ooki: this.wallet.ooki.plus(this.staked.ooki),\n iooki: this.wallet.iooki.plus(this.staked.iooki),\n vbzrx: this.wallet.vbzrx.plus(this.staked.vbzrx),\n slp_ooki_eth: this.wallet.slp_ooki_eth.plus(this.staked.slp_ooki_eth),\n }\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: userBalanceProp, value: any) {\n this[prop] = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n public assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n public async refreshWalletbalances() {\n const fp = this.rootStore.fulcrumProvider\n this.set('pendingWalletBalance', true)\n const walletAmounts = await stakingUtils.getStakeableBalances(fp)\n this.set('pendingWalletBalance', false)\n mobx.runInAction(() => {\n this.wallet.ooki = walletAmounts.ooki.div(10 ** 18)\n this.wallet.vbzrx = walletAmounts.vbzrx.div(10 ** 18)\n this.wallet.iooki = walletAmounts.iooki.div(10 ** 18)\n this.wallet.slp_ooki_eth = walletAmounts.slp_ooki_eth.div(10 ** 18)\n })\n }\n\n public async refreshStakedBalances() {\n const fp = this.rootStore.fulcrumProvider\n this.set('pendingStakedBalance', true)\n const stakedAmounts = await stakingUtils.getStakedBalances(fp)\n this.set('pendingStakedBalance', false)\n mobx.runInAction(() => {\n this.staked.ooki = stakedAmounts.ooki.div(10 ** 18)\n this.staked.vbzrx = stakedAmounts.vbzrx.div(10 ** 18)\n this.staked.iooki = stakedAmounts.iooki.div(10 ** 18)\n this.staked.slp_ooki_eth = stakedAmounts.slp_ooki_eth.div(10 ** 18)\n })\n }\n\n /**\n * Get and store the staking specific tokens the user has in wallet and already staked.\n */\n public async getUserBalances() {\n try {\n await this.refreshWalletbalances()\n await sleep(1000) // Avoids breaking animation due to main thread blocked\n await this.refreshStakedBalances()\n return { wallet: this.wallet, staked: this.staked }\n } catch (err) {\n err.title = 'Failed to get balances'\n this.set('error', err)\n console.error(err)\n } finally {\n this.assign({ loaded: true, pendingStakedBalance: false, pendingWalletBalance: false })\n }\n }\n\n public clearBalances() {\n this.wallet.clearBalances()\n this.staked.clearBalances()\n this.loaded = false\n }\n\n public getCopy() {\n return {\n wallet: this.wallet.getCopy(),\n staked: this.staked.getCopy(),\n }\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport _ from 'lodash'\nimport * as mobx from 'mobx'\n\nexport interface ITokenAmounts {\n token: 'ooki' | 'iooki' | 'vbzrx' | 'crv' | 'sushi'\n amount: BigNumber\n staked: boolean\n}\n\nexport default class WalletUpdate {\n public from: ITokenAmounts[] = []\n public to: ITokenAmounts[] = []\n public diffs: ITokenAmounts[] = []\n\n /**\n * When this is called, this will trigger a reaction\n * Note that it might be refactored into a VM or something because it's a bit \"magical\"\n * This is used so that the UI can show a transition from one amount to another\n */\n public switchAmounts() {\n const _from = this.from\n this.from = this.to\n this.to = _from\n }\n\n constructor(amounts: { from: ITokenAmounts[]; to: ITokenAmounts[] }) {\n this.from = amounts.from\n this.to = amounts.to\n this.diffs = _.map(amounts.from, (tokenAmount) => {\n const to = amounts.to.find((_tokenAmount) => _tokenAmount.token === tokenAmount.token)\n return {\n token: tokenAmount.token,\n amount: to!.amount.minus(tokenAmount.amount),\n staked: tokenAmount.staked,\n }\n })\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport stakingUtils from 'app-lib/stakingUtils'\nimport { stakeableToken, unstakeableToken } from 'bzx-common/src/domain/staking/stakingTypes'\nimport { sleep } from 'bzx-common/src/lib/asyncUtils'\nimport errorUtils from 'bzx-common/src/lib/errorUtils'\nimport * as mobx from 'mobx'\nimport RootStore from '../../stores/RootStore'\nimport Dao from './Dao'\nimport Rewards from './Rewards'\nimport StakingAllowances from './StakingAllowances'\nimport UserBalances from './UserBalances'\nimport WalletUpdate, { ITokenAmounts } from './WalletUpdate'\n\ninterface IStakingStore {\n blockExplorerUrl: string\n rewards: Rewards\n rootStore: RootStore\n stakingAllowances: StakingAllowances\n stakingError: Error | null\n stakingPending: boolean\n userBalances: UserBalances\n walletUpdate: WalletUpdate | null\n votingPower: BigNumber\n}\n\nexport default class StakingStore implements IStakingStore {\n blockExplorerUrl = ''\n rewards: Rewards\n rootStore: RootStore\n stakingAllowances: StakingAllowances\n stakingError: Error | null = null\n stakingPending = false\n userBalances: UserBalances\n walletUpdate: WalletUpdate | null = null\n votingPower = new BigNumber(0)\n dao: Dao\n\n get error() {\n return (\n this.stakingError ||\n this.userBalances.error ||\n this.rewards.error ||\n this.stakingAllowances.error ||\n this.dao.error\n )\n }\n\n /**\n * Flag to know if the user has at least one token approved and enough of it in the wallet\n * to stake it.\n */\n get hasEnoughToStake() {\n return Object.values(stakeableToken).some((token) => {\n return (\n !this.stakingAllowances.needApprovals.get(token) && this.userBalances.wallet[token].gt(0.01)\n )\n })\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof IStakingStore, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n clearData() {\n this.userBalances.clearBalances()\n this.rewards.clearBalances()\n this.stakingAllowances.clearData()\n this.dao.clearData()\n }\n\n /**\n * Reset error state to null for any model that might have an error.\n * stakingStore.error computed value will be null as a result.\n */\n clearError() {\n this.stakingError = null\n this.userBalances.error = null\n this.rewards.error = null\n this.stakingAllowances.clearError()\n this.dao.clearError()\n }\n\n async stake(tokenAmounts: Map) {\n const { transactionStore, fulcrumProvider } = this.rootStore\n try {\n // TODO: need to adapt the verifyStake method to spending allowances\n // if (!stakingUtils.verifyStake(this.userBalances.wallet, tokenAmounts)) {\n // throw new Error('Staking amounts are invalid. Maybe trying to stake more than possible.')\n // }\n this.assign({ stakingPending: true, stakingError: null })\n const txSteps = stakingUtils.stake(fulcrumProvider, tokenAmounts)\n const tx = await transactionStore.run('staking', txSteps)\n if (tx.status === 'success') {\n this.userBalances.staked.add(Object.fromEntries(tokenAmounts))\n this.userBalances.wallet.substract(Object.fromEntries(tokenAmounts))\n }\n return tx\n } catch (err) {\n this.set('stakingError', errorUtils.decorateError(err, { title: 'Could not stake' }))\n throw err\n } finally {\n this.set('stakingPending', false)\n }\n }\n\n async unstake(tokenAmounts: Map) {\n const { transactionStore, fulcrumProvider } = this.rootStore\n try {\n // TODO: need to adapt the verifyStake method to spending allowances\n // if (!stakingUtils.verifyStake(this.userBalances.staked, tokenAmounts)) {\n // throw new Error('Staking amounts are invalid. Maybe trying to unstake more than possible.')\n // }\n this.assign({ stakingPending: true, stakingError: null })\n const txSteps = stakingUtils.unstake(fulcrumProvider, tokenAmounts)\n const tx = await transactionStore.run('unstake', txSteps)\n if (tx.status === 'success') {\n this.userBalances.wallet.add(Object.fromEntries(tokenAmounts))\n this.userBalances.staked.substract(Object.fromEntries(tokenAmounts))\n }\n } catch (err) {\n this.set('stakingError', errorUtils.decorateError(err, { title: 'Could not unstake' }))\n throw err\n } finally {\n this.set('stakingPending', false)\n }\n }\n\n /**\n * Updates the \"user wallet update\" model and sets a new wallet update diff.\n * (eg: useful to notify wallet change)\n * @param diff Amounts of tokens that are added or removed from the wallet\n */\n updateUserWallet(diff: ITokenAmounts[]) {\n const { wallet, staked } = this.userBalances.getCopy()\n const amounts = diff.reduce(\n (acc, tokenAmount) => {\n const balance = tokenAmount.staked ? staked : wallet\n acc.from.push({\n token: tokenAmount.token,\n amount: balance[tokenAmount.token],\n staked: tokenAmount.staked,\n })\n acc.to.push({\n token: tokenAmount.token,\n amount: balance[tokenAmount.token].plus(tokenAmount.amount),\n staked: tokenAmount.staked,\n })\n return acc\n },\n { from: [] as ITokenAmounts[], to: [] as ITokenAmounts[], diff: diff }\n )\n const walletUpdate = new WalletUpdate(amounts)\n this.walletUpdate = walletUpdate\n\n diff.forEach((tokenDiff) => {\n const destination = tokenDiff.staked ? this.userBalances.staked : this.userBalances.wallet\n destination.add({ [tokenDiff.token]: tokenDiff.amount })\n })\n }\n\n /**\n * Claim staking rewards and update user balances\n */\n async claimStakingRewards(shouldRestake = false) {\n await this.rewards.claimStakingRewards(shouldRestake)\n // Do NOT show wallet update at the moment; TODO: fix and reenable.\n // if (claimed) {\n // this.updateUserWallet([\n // { token: 'ooki', amount: claimed.ooki, staked: shouldRestake },\n // { token: 'crv', amount: claimed.stableCoin, staked: false },\n // { token: 'sushi', amount: claimed.sushi, staked: false },\n // ])\n // }\n }\n\n /**\n * Claim vested BZRX and update user balances\n */\n async claimVestedBzrx() {\n await this.rewards.claimVestedBzrx()\n // Do NOT show wallet update at the moment; TODO: fix and reenable.\n // if (ookiAmount) {\n // this.updateUserWallet([{ token: 'ooki', amount: ookiAmount, staked: false }])\n // }\n }\n\n /**\n * Refresh user wallet balances, spending approvals and rewards.\n *\n * There are some `sleep` calls in there because the UI thread is blocked by\n * crypto algorithms. It's not clear why, so, we should investigate when we have time.\n */\n async syncData() {\n const { chainId, isConnected } = this.rootStore.web3Connection\n if (chainId === 1 && isConnected) {\n await this.userBalances.getUserBalances()\n await sleep(500)\n await this.stakingAllowances.check()\n await sleep(500)\n await this.rewards.getAllRewards()\n await sleep(500)\n await this.rootStore.airdropStore.checkBalAirdrop()\n if (!this.userBalances.staked.isEmpty) {\n await this.dao.getOnchainProposals()\n }\n } else {\n this.clearData()\n }\n }\n\n constructor(rootStore: RootStore) {\n const { fulcrumProvider } = rootStore\n this.rootStore = rootStore\n this.rewards = new Rewards(fulcrumProvider, this)\n this.userBalances = new UserBalances(this.rootStore)\n this.stakingAllowances = new StakingAllowances(this.userBalances, this.rootStore)\n this.dao = new Dao(rootStore)\n this.dao.init()\n mobx.makeAutoObservable(this, { rootStore: false }, { autoBind: true, deep: false })\n }\n}\n","import bzxApi, {\n getTreasuryBalances,\n IAssetsStatsHistory,\n IChainStat,\n IChainTokenStat,\n} from 'app-lib/apis/bzxApi'\nimport { Asset } from 'app-lib/assetUtils'\nimport errorUtils from 'app-lib/errorUtils'\nimport protocolStatsUtils from 'app-lib/protocolStatsUtils'\nimport { chainConfigs, ChainId, supportedChains } from 'bzx-common/src/config/appConfig'\nimport ReserveDetails from 'bzx-common/src/domain/fulcrum/ReserveDetails'\nimport AsyncData from 'bzx-common/src/lib/mobx/AsyncData'\nimport { debounce, DebouncedFunc } from 'lodash'\nimport * as mobx from 'mobx'\nimport { BigNumber } from '@0x/utils'\nimport RootStore from '../RootStore'\nimport { Transaction } from '../TransactionStore'\nimport { IActivityInfo } from 'bzx-common/src/domain/txTypes'\nimport collectionUtils from 'bzx-common/src/lib/collectionUtils'\n\nexport interface TreasuryBalance {\n asset: Asset\n amount: BigNumber\n amountUSD: BigNumber\n}\n\nexport interface IStatsStoreProps {\n errorStatsInfo: Error | null\n tokenRowsData: ReserveDetails[]\n totalsRowData: ReserveDetails | null\n treasuryBalances: AsyncData\n storedEvents: boolean\n}\n\nexport interface ILatestActivity {\n chainId: ChainId\n txHash: string\n action: string\n value: BigNumber\n loanToken: Asset\n collateralToken: Asset\n leverage?: number\n}\n\nexport default class StatsStore implements IStatsStoreProps {\n errorStatsInfo: Error | null = null\n rootStore: RootStore\n storedEvents = false\n tokenRowsData: ReserveDetails[] = []\n totalsRowData: ReserveDetails | null = null\n transactions: Transaction[] = []\n refreshLatestActivityDebounced: DebouncedFunc<() => Promise>\n defaultQuantityEvents = 20\n periodChart = 1\n\n readonly treasuryBalances = new AsyncData([], getTreasuryBalances, { debounce: 300000 })\n\n /** Can fetch and update latest events per chain*/\n readonly latestProtocolEvents = new AsyncData(\n [],\n async (chainId: ChainId) => {\n const latestProtocolEvents = [...this.latestProtocolEvents.value] as IActivityInfo[]\n const result = !latestProtocolEvents.find((event) => chainId === event.chainId)\n ? await protocolStatsUtils.getLatestProtocolEvents(chainId)\n : []\n\n const newEvents = result\n .concat(latestProtocolEvents)\n .sort((a, b) => Number(b.timestamp) - Number(a.timestamp))\n\n // newEvents.reduce()\n\n return newEvents\n },\n {\n onError(err) {\n errorUtils.decorateError(err, { title: 'Could not get or update latest activity' })\n console.error(err)\n },\n }\n )\n\n /** Can fetch and update latest transactions for curret user*/\n readonly latestUserTransactions = new AsyncData(\n [],\n async () => {\n const { currentAccount } = this.rootStore.fulcrumProvider\n return protocolStatsUtils.getUserProtocolEvents(currentAccount)\n },\n {\n onError(err) {\n errorUtils.decorateError(err, { title: 'Could not get or update latest transactions' })\n console.error(err)\n },\n }\n )\n\n /** Can fetch events for selected user*/\n readonly selectedUserEvents = new AsyncData(\n [],\n async (selectedUser) => {\n return protocolStatsUtils.getUserProtocolEvents(selectedUser)\n },\n {\n onError(err) {\n errorUtils.decorateError(err, { title: 'Could not get events for selected user' })\n console.error(err)\n },\n }\n )\n\n /** Can fetch and update stats for all chains or a single chain */\n readonly stats: AsyncData = new AsyncData(\n [],\n async (chainId?: ChainId, opts?: { onChain: boolean }) => {\n const onChain = opts?.onChain || this.rootStore.settings.fetchRatesOnChain\n const fp = this.rootStore.fulcrumProvider\n // We make sure that only supported chain by the UI will be kept from the (api) response\n const chainStats = (await protocolStatsUtils.getChainStats(fp, chainId, { onChain })).filter(\n (stats) => supportedChains.includes(stats.chainId)\n )\n\n if (!chainId) {\n return chainStats\n }\n // if we fetched a single chain, we simply replace its data\n let newStats = [...this.stats.value]\n if (chainStats.length > 0) {\n newStats = newStats.filter((stat) => stat.chainId !== chainId).concat(chainStats)\n }\n return newStats\n },\n {\n onError(err) {\n errorUtils.decorateError(err, { title: 'Could not fetch stats info' })\n console.error(err)\n },\n }\n )\n\n readonly tvlData: AsyncData = new AsyncData(\n [],\n async (chainId?: ChainId) => {\n if (!chainId) {\n return []\n }\n const tvl = await bzxApi.getAssetStatsHistory(chainId)\n if (!tvl) {\n return []\n }\n return tvl\n },\n {\n onError(err) {\n errorUtils.decorateError(err, { title: 'Could not get or update tvl data' })\n console.error(err)\n },\n }\n )\n\n readonly assetStatsData: AsyncData<{ [key: string]: IAssetsStatsHistory[] }> = new AsyncData<{\n [key: string]: IAssetsStatsHistory[]\n }>(\n {},\n async (chainId?: ChainId) => {\n if (!chainId) {\n return {}\n }\n const history = await bzxApi.getAssetStatsHistory(chainId, true)\n if (!history) {\n return {}\n }\n // Group array of AssetsStatsHistory by token\n return collectionUtils.groupBy(history, ['token'])\n },\n {\n onError(err) {\n errorUtils.decorateError(err, { title: 'Could not get or update asset stats data' })\n console.error(err)\n },\n }\n )\n\n /** How much the treasury is worth in USD */\n get treasuryTotalUsd(): BigNumber {\n if (this.treasuryBalances.value.length === 0) {\n return new BigNumber(NaN)\n }\n return this.treasuryBalances.value.reduce((acc, token) => {\n return acc.plus(token.amountUSD)\n }, new BigNumber(0))\n }\n\n get currentChainStats(): IChainTokenStat[] {\n const { chainId } = this.rootStore.web3Connection\n const stats = this.stats.value.find((stat) => stat.chainId === chainId)\n return stats ? stats.stats : []\n }\n\n get bestLendAprs(): { chainId: ChainId; tokens: IChainTokenStat[] }[] {\n return this.stats.value\n .filter((chain) => chain.stats.length > 0) // May happen that a new chain is being added and has no stats yet\n .map((chainStats) => {\n const { chainId, stats } = chainStats\n const orderedCoins = stats.sort((a, b) => +b.supplyApr - +a.supplyApr)\n const { stables, others } = orderedCoins.reduce(\n (acc, coin) => {\n if (+coin.supplyApr >= 0.01) {\n const group = chainConfigs[chainId].stableCoins.includes(coin.tokenName)\n ? acc.stables\n : acc.others\n group.push(coin)\n }\n return acc\n },\n {\n stables: [],\n others: [],\n } as { stables: IChainTokenStat[]; others: IChainTokenStat[] }\n )\n const best = stables.slice(0, 3)\n return { chainId, tokens: best.concat(others.slice(0, 3 - best.length)) }\n })\n .filter((stat) => stat.tokens.length > 0)\n .sort((a, b) => +b.tokens[0].supplyApr - +a.tokens[0].supplyApr)\n }\n\n get error() {\n return this.stats.error || this.latestProtocolEvents.error || this.selectedUserEvents.error\n }\n\n /**\n * Refresh stats (total borrow, lent, aprs, etc) for the current chain onchain (not API)\n */\n refreshForCurrentChain() {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId) {\n return\n }\n return this.stats.fetch(chainId, { onChain: true })\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof IStatsStoreProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n /**\n * Reset error state to null for any model that might have an error.\n * stakingStore.error computed value will be null as a result.\n */\n clearError() {\n this.latestProtocolEvents.error = null\n this.stats.error = null\n this.assetStatsData.error = null\n this.tvlData.error = null\n this.selectedUserEvents.error = null\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(\n this,\n { rootStore: false, treasuryBalances: false, stats: false },\n { autoBind: true, deep: false }\n )\n this.refreshLatestActivityDebounced = debounce(\n () => {\n const { chainId } = this.rootStore.web3Connection\n this.latestProtocolEvents.reset()\n this.latestProtocolEvents.fetch(chainId)\n },\n // fetch events every 15 minutes\n 15 * 60 * 1000\n )\n }\n}\n","import { FulcrumProvider } from 'bzx-common/../fulcrum/src/services/FulcrumProvider'\nimport chainConfigs from 'bzx-common/src/config/chains'\nimport PositionEventsGroup from 'bzx-common/src/domain/fulcrum/PositionEventsGroup'\nimport assetUtils from 'bzx-common/src/lib/assetUtils'\nimport * as mobx from 'mobx'\nimport RootStore from '../RootStore'\nimport TradeStore from './TradeStore'\n\nexport interface IHistoryTokenProps {\n eventsGroup: PositionEventsGroup\n}\n\nexport default class HistoryToken implements IHistoryTokenProps {\n eventsGroup: PositionEventsGroup\n fulcrumProvider: FulcrumProvider\n rootStore: RootStore\n tradeStore: TradeStore\n\n get blockExplorerUrl() {\n return chainConfigs[this.fulcrumProvider.currentChainId].chainDetails.blockExplorer\n }\n\n get latestEvent() {\n return this.eventsGroup.events[this.eventsGroup.events.length - 1]\n }\n\n get otherEvents() {\n return this.eventsGroup.events.slice(0, -1).reverse()\n }\n\n get payTradingFeeTokenInfo() {\n return this.latestEvent && this.latestEvent.payTradingFeeEvent\n ? assetUtils.getCommon(this.latestEvent.payTradingFeeEvent.token)\n : undefined\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof IHistoryTokenProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n constructor(rootStore: RootStore, eventsGroup: PositionEventsGroup) {\n this.rootStore = rootStore\n this.tradeStore = rootStore.tradeStore\n this.fulcrumProvider = rootStore.fulcrumProvider\n this.eventsGroup = eventsGroup\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n }\n}\n","import oracleApi from 'app-lib/apis/oracleApi'\nimport assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { asyncRetry } from 'app-lib/asyncUtils'\nimport { DEX } from 'app-lib/dexSelector/types'\nimport errorUtils from 'app-lib/errorUtils'\nimport loanUtils from 'app-lib/loanUtils'\nimport numberUtils, { formatPrecision } from 'app-lib/numberUtils'\nimport swapPayloadUtils from 'app-lib/swapPayloadUtils'\nimport swapRateUtils from 'app-lib/swapRateUtils'\nimport tradeUtils, { getPairConfig, IPairConfigDetails } from 'app-lib/tradeUtils'\nimport {\n ChainId,\n getBlockExplorerAddressLink,\n isChainSupported,\n} from 'bzx-common/src/config/appConfig'\nimport { ITradeRequest, PositionType, TradeType } from 'bzx-common/src/domain/trade.types'\nimport { debounce, DebouncedFunc } from 'lodash'\nimport * as mobx from 'mobx'\nimport { BigNumber } from '@0x/utils'\nimport RootStore from '../RootStore'\nimport TradeStore from './TradeStore'\nimport { TransactionStatus } from '../TransactionStore'\nimport { TransactionType } from 'bzx-common/src/domain/txTypes'\n\nexport type NewPositionIssue =\n | 'INVALID_TRADE_AMOUNT'\n | 'LOW_LIQUIDITY'\n | 'NOT_CONNECTED'\n | 'NOT_ENOUGH_FUNDS'\n | 'ZERO_BALANCE'\n\nexport interface INewPositionProps {\n balancesError: Error | null\n balancesPending: boolean\n baseToken: Asset\n baseTokenBalance: BigNumber\n baseTokenPrice: BigNumber\n depositToken: Asset\n dex: DEX\n entryPrice: BigNumber\n exposureValue: BigNumber\n inputTradeAmount: string\n interestRate: BigNumber\n isLoading: boolean\n leverage: number\n liquidationPrice: BigNumber\n loanDataBytes: string\n maintenanceMargin: BigNumber\n marketLiquidity: BigNumber\n marketPair: { baseToken: Asset; quoteToken: Asset }\n maxLeverage: number\n maxTradeValue: BigNumber\n maxTradeValuePercent: number\n minInitialMargin: BigNumber\n needsApproval: boolean\n oraclePrice: BigNumber\n pairConfig?: IPairConfigDetails\n positionType: PositionType\n priceImpact: BigNumber\n quoteToken: Asset\n quoteTokenBalance: BigNumber\n tradeAmount: BigNumber\n}\n\nexport default class NewPositionSetup implements INewPositionProps {\n balancesError: Error | null = null\n balancesPending = false\n baseToken = Asset.WBTC\n baseTokenBalance = new BigNumber(0)\n baseTokenPrice = new BigNumber(NaN)\n depositToken: Asset = Asset.WBTC\n dex: DEX = DEX.SUSHI\n entryPrice = new BigNumber(NaN)\n exposureValue = new BigNumber(NaN)\n inputTradeAmount = ''\n interestRate = new BigNumber(NaN)\n isExpired = false // TODO\n isLoading = false\n leverage = 0\n liquidationPrice = new BigNumber(NaN)\n loanDataBytes = '0x'\n maintenanceMargin = new BigNumber(NaN)\n marketLiquidity = new BigNumber(0)\n marketPair = { baseToken: Asset.WBTC, quoteToken: Asset.USDT }\n maxLeverage = 5\n maxTradeValue = new BigNumber(0)\n maxTradeValuePercent = 0\n minInitialMargin = new BigNumber(NaN)\n needsApproval = false\n oraclePrice = new BigNumber(NaN)\n /** Config and metadata for the current selected market */\n pairConfig?: IPairConfigDetails\n positionType = PositionType.LONG\n priceImpact = new BigNumber(NaN)\n quoteToken = Asset.USDT\n quoteTokenBalance = new BigNumber(0)\n rootStore: RootStore\n syncDataDebounced: DebouncedFunc<() => Promise>\n tradeAmount = new BigNumber(0)\n tradeStore: TradeStore\n\n /** Help to prevent sending new position tx immediately one after another */\n get hasTxPending() {\n const txStatuses: TransactionStatus[] = ['sent', 'gas-check']\n const txTypes: TransactionType[] = ['trade-open-long', 'trade-open-short']\n return this.rootStore.transactionStore.transactions.some(\n (tx) => txStatuses.includes(tx.status) && txTypes.includes(tx.type)\n )\n }\n\n get isLong() {\n return this.positionType === PositionType.LONG\n }\n\n /**\n * 1x leverage is not allowed for Long\n */\n get minLeverage() {\n return this.isLong ? 1.1 : 1\n }\n\n /** Current setup mapped to a TradeRequest */\n get tradeRequest(): ITradeRequest {\n return {\n amount: this.tradeAmount,\n baseToken: this.baseToken,\n depositToken: this.depositToken,\n dex: this.dex,\n leverage: this.leverage,\n loanDataBytes: this.loanDataBytes,\n positionType: this.positionType,\n quoteToken: this.quoteToken,\n returnTokenIsCollateral: false, // mandatory because of ITradeRequest interface but not needed to open position\n tradeType: TradeType.OPEN_POSITION,\n positionValue: this.exposureValue.toNumber(),\n }\n }\n\n get depositTokenBalance() {\n return this.depositToken === this.baseToken ? this.baseTokenBalance : this.quoteTokenBalance\n }\n\n get loanToken() {\n return this.isLong ? this.quoteToken : this.baseToken\n }\n\n get issue(): NewPositionIssue | undefined {\n if (!this.inputTradeAmount) {\n return\n }\n const inputAmount = new BigNumber(this.inputTradeAmount)\n\n if (!this.rootStore.web3Connection.isConnected) {\n return 'NOT_CONNECTED'\n }\n\n if (inputAmount.isNaN() || this.tradeAmount.lt(0)) {\n return 'INVALID_TRADE_AMOUNT'\n }\n\n const lowLiquidity = this.marketLiquidity.lt(inputAmount)\n\n return this.depositTokenBalance && this.depositTokenBalance.isZero()\n ? 'ZERO_BALANCE'\n : lowLiquidity\n ? 'LOW_LIQUIDITY'\n : this.tradeAmount.gt(this.maxTradeValue)\n ? 'NOT_ENOUGH_FUNDS'\n : undefined\n }\n\n get loanIToken() {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId) {\n return\n }\n const info = assetUtils.getItokenInfo(chainId, this.loanToken)\n const explorerAddress = getBlockExplorerAddressLink(chainId, info.address)\n\n return { ...info, explorerAddress }\n }\n\n get isDisabled() {\n // people should be able to close but not open KNCL\n return this.baseToken === Asset.KNCL\n }\n\n clearError() {\n this.balancesError = null\n }\n\n resetData(props: Partial = {}) {\n this.assign({\n entryPrice: new BigNumber(NaN),\n exposureValue: new BigNumber(NaN),\n inputTradeAmount: '',\n interestRate: new BigNumber(NaN),\n liquidationPrice: new BigNumber(NaN),\n loanDataBytes: '0x',\n // maintenanceMargin: new BigNumber(NaN), need to better handle this\n marketLiquidity: new BigNumber(NaN),\n maxTradeValue: new BigNumber(0),\n maxTradeValuePercent: 0,\n minInitialMargin: new BigNumber(NaN),\n needsApproval: false,\n // oraclePrice: new BigNumber(NaN), need to better handle this\n priceImpact: new BigNumber(NaN),\n quoteTokenBalance: new BigNumber(0),\n tradeAmount: new BigNumber(0),\n ...props,\n })\n }\n\n setLeverage(value: number) {\n const leverage =\n value < this.minLeverage\n ? this.minLeverage\n : value > this.maxLeverage\n ? this.maxLeverage\n : numberUtils.round(value, 1)\n if (leverage !== this.leverage) {\n this.set('leverage', leverage)\n this.syncDataDebounced()\n }\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof INewPositionProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n async setLongShort(positionType: PositionType) {\n if (this.positionType !== positionType) {\n this.resetData({ positionType })\n await this.getMaxTradeValue(this.depositToken)\n this.syncDataDebounced()\n }\n }\n\n setDex(dex: DEX) {\n this.dex = dex\n this.syncDataDebounced()\n }\n\n setDepositToken(asset: Asset) {\n this.depositToken = asset\n this.getMaxTradeValue(asset)\n this.assign({ inputTradeAmount: '', tradeAmount: new BigNumber(0), maxTradeValuePercent: 0 })\n }\n\n setPair(marketPair: { baseToken: Asset; quoteToken: Asset }) {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId || !isChainSupported(chainId)) {\n return\n }\n const pairConfig = getPairConfig(marketPair, chainId)\n const { depositTokens, initialPositionType: positionType } = pairConfig\n const depositToken = depositTokens[0]\n this.resetData()\n this.assign({\n ...marketPair,\n pairConfig,\n marketPair,\n depositToken,\n leverage: pairConfig.leverageInitial,\n positionType,\n maxLeverage: pairConfig.leverageMax,\n dex: pairConfig.dexes[0],\n })\n this.getMaxTradeValue(depositToken)\n this.getOraclePrice()\n this.getLoanParams()\n }\n\n refreshForChain(chainId: ChainId) {\n const pair = this.rootStore.settings.activePairs[chainId]\n this.setPair(pair)\n }\n\n async checkApproval() {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId) {\n return\n }\n if (assetUtils.isNativeTokenForNetwork(chainId, this.depositToken)) {\n this.assign({ needsApproval: false })\n return\n }\n this.assign({ isLoading: true })\n const { spendingApprovals } = this.rootStore\n const spender = assetUtils.getITokenAddress(chainId, this.loanToken)\n const approval = await spendingApprovals.checkApproval(this.depositToken, spender)\n const needsApproval = this.depositTokenBalance.gt(approval.amount)\n this.assign({ needsApproval, isLoading: false })\n return needsApproval\n }\n\n async approveSpending() {\n if (!this.loanIToken) {\n return\n }\n this.assign({ isLoading: true })\n const success = await this.rootStore.spendingApprovals.setInfiniteApprovalForToken(\n this.depositToken,\n this.loanIToken.address\n )\n if (success) {\n this.assign({ needsApproval: false })\n }\n this.assign({ isLoading: false })\n }\n\n /**\n * Updates data such as exposure value, interest rate, price impact based on user input\n */\n async syncData() {\n const { fulcrumProvider } = this.rootStore\n const { chainId, isConnected } = this.rootStore.web3Connection\n if (!chainId || !isConnected) {\n return\n }\n const { tradeRequest } = this\n const { amount, leverage } = tradeRequest\n\n if (amount.isNaN() || amount.isZero()) {\n return\n }\n this.set('isLoading', true)\n const [loanDataBytes] = await this.getSwapData(tradeRequest)\n const { exposureValue, interestRate } = await tradeUtils.getEstimatedMarginDetails(\n fulcrumProvider,\n tradeRequest,\n { loanDataBytes }\n )\n this.assign({ exposureValue, interestRate })\n\n const { src, dest } = tradeUtils.getTradeTokens(chainId, tradeRequest)\n\n const collateralToPrincipalRate = await oracleApi.getSwapRate(\n fulcrumProvider,\n src.asset,\n dest.asset\n )\n\n const srcAmount =\n this.depositToken === src.asset\n ? amount.times(10 ** src.decimals)\n : amount\n .times(collateralToPrincipalRate.pow(-1))\n .times(10 ** src.decimals)\n .integerValue()\n\n const actualSwapRate = await swapRateUtils.getActualSwapRate(fulcrumProvider, {\n srcToken: src.asset,\n destToken: dest.asset,\n leverage,\n srcAmount,\n loanDataBytes,\n isAmountIn: true,\n })\n\n const priceImpact = await swapRateUtils.getTradeSlippageRate(fulcrumProvider, {\n srcToken: src.asset,\n destToken: dest.asset,\n amount: srcAmount.times(leverage),\n swapPriceTradeAmount: actualSwapRate.rate,\n loanDataBytes,\n isAmountIn: true,\n })\n\n const entryPrice = this.isLong ? actualSwapRate.rate.pow(-1) : actualSwapRate.rate\n\n this.assign({ entryPrice, priceImpact })\n this.getLiquidationPrice(tradeRequest, actualSwapRate.rate.pow(-1))\n this.set('isLoading', false)\n }\n\n setAmountByPercentage(maxTradeValuePercent: number) {\n const tradeAmount =\n maxTradeValuePercent === 100\n ? this.maxTradeValue\n : new BigNumber(formatPrecision(this.maxTradeValue.times(maxTradeValuePercent).div(100)))\n this.assign({ maxTradeValuePercent, tradeAmount, inputTradeAmount: tradeAmount.toFixed() })\n\n this.syncDataDebounced()\n }\n\n /** We let the user types whatever he wants but won't trigger anything if the input is invalid */\n setTradeAmount(input: string) {\n this.inputTradeAmount = input\n this.tradeAmount = new BigNumber(input)\n if (this.tradeAmount.isNaN()) {\n return\n }\n if (this.tradeAmount.gt(0)) {\n this.maxTradeValuePercent = this.tradeAmount\n .div(this.maxTradeValue)\n .times(100)\n .integerValue()\n .toNumber()\n this.syncDataDebounced()\n }\n }\n\n setTradeAmountToMax() {\n this.setAmountByPercentage(100)\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n async getOraclePrice(): Promise {\n const { baseToken, quoteToken } = this\n const oraclePrice = await oracleApi.getSwapRate(\n this.rootStore.fulcrumProvider,\n baseToken,\n quoteToken\n )\n this.assign({ oraclePrice })\n return oraclePrice\n }\n\n async getLoanParams() {\n const { maintenanceMargin, minInitialMargin } = await loanUtils.getLoanParams(\n this.rootStore.fulcrumProvider,\n this.baseToken,\n this.quoteToken,\n false\n )\n this.assign({ maintenanceMargin, minInitialMargin })\n }\n\n async getLiquidationPrice(tradeRequest: ITradeRequest, collateralToPrincipalRate?: BigNumber) {\n const { baseToken, quoteToken, maintenanceMargin } = this\n const fp = this.rootStore.fulcrumProvider\n\n if (typeof collateralToPrincipalRate === 'undefined') {\n const srcToken = this.isLong ? baseToken : quoteToken\n const destToken = this.isLong ? quoteToken : baseToken\n collateralToPrincipalRate = await oracleApi.getSwapRate(fp, srcToken, destToken)\n }\n\n const liquidationPrice = await tradeUtils.getLiquidationPrice(\n fp,\n tradeRequest,\n collateralToPrincipalRate,\n { maintenanceMargin }\n )\n\n this.assign({ liquidationPrice })\n }\n\n async openPosition() {\n this.assign({ isLoading: true })\n const { tradeRequest } = this\n let dexSelectorFailed = false\n\n try {\n await this.getSwapData(tradeRequest)\n } catch (err) {\n err.title = 'No route found for this trade'\n dexSelectorFailed = true\n this.rootStore.setError(err)\n }\n\n this.assign({ isLoading: false })\n\n if (dexSelectorFailed) {\n return\n }\n\n return this.rootStore.tradeStore.trade(tradeRequest)\n }\n\n /** Wallet balances and liquidity available */\n async getMaxTradeValue(depositToken: Asset) {\n const { fulcrumProvider } = this.rootStore\n try {\n this.assign({ balancesError: null, balancesPending: true })\n const { maxTradeValue, marketLiquidity, ...rest } = await asyncRetry(\n () =>\n tradeUtils.getMaxTradeValueToOpenPosition(fulcrumProvider, {\n baseToken: this.baseToken,\n quoteToken: this.quoteToken,\n positionType: this.positionType,\n depositToken,\n }),\n 2,\n 2000\n )\n const update: Partial = { maxTradeValue, marketLiquidity }\n const balance = depositToken === this.baseToken ? 'baseTokenBalance' : 'quoteTokenBalance'\n update[balance] = rest.depositTokenBalance\n this.assign(update)\n return update\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Wallet balance & liquidity unavailable' })\n this.assign({ balancesError: err })\n } finally {\n this.assign({ balancesPending: false })\n }\n }\n\n /**\n * Updates loanDatabytes and returns swapData\n *\n * Note that trying to get a route with amount 0 will throw an error, so this function should not\n * be called if the tradeRequest amount is 0.\n */\n async getSwapData(tradeRequest: ITradeRequest): Promise<[string, BigNumber]> {\n const { fulcrumProvider } = this.rootStore\n let swapData: [string, BigNumber] = [this.loanDataBytes, new BigNumber(0)]\n try {\n swapData = await swapPayloadUtils.getSwapDataForNewPosition(fulcrumProvider, tradeRequest)\n this.assign({ loanDataBytes: swapData[0] })\n } catch (err) {\n err.title = 'Failed to get swapData'\n this.rootStore.setError(err)\n }\n return swapData\n }\n\n noop(arg: any) {\n console.log(arg)\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n this.tradeStore = rootStore.tradeStore\n this.syncDataDebounced = debounce(() => this.syncData(), 500)\n mobx.makeAutoObservable(\n this,\n { rootStore: false, tradeStore: false },\n { deep: false, autoBind: true }\n )\n }\n}\n","import AsyncData from 'app-lib/mobx/AsyncData'\nimport { FulcrumProvider } from 'bzx-common/../fulcrum/src/services/FulcrumProvider'\nimport { chainConfigs } from 'bzx-common/src/config/appConfig'\nimport IBorrowedFundsState from 'bzx-common/src/domain/IBorrowedFundsState'\nimport ManageCollateralRequest from 'bzx-common/src/domain/ManageCollateralRequest'\nimport {\n IClosePositionRequest,\n IOpenPositionProps,\n IPendingPosition,\n ITradeRequest,\n PositionType,\n} from 'bzx-common/src/domain/trade.types'\nimport assetUtils, { Asset } from 'bzx-common/src/lib/assetUtils'\nimport errorUtils from 'bzx-common/src/lib/errorUtils'\nimport loanUtils from 'bzx-common/src/lib/loanUtils'\nimport tradeUtils from 'bzx-common/src/lib/tradeUtils'\nimport * as mobx from 'mobx'\nimport RootStore from '../../stores/RootStore'\nimport HistoryToken from './HistoryToken'\nimport NewPositionSetup from './NewPositionSetup'\nimport OpenPosition from './OpenPosition'\n\ninterface ITradeStoreProps {\n activePositionType: PositionType\n allOpenPositions: AsyncData\n errorHistory: Error | null\n errorPosition: Error | null\n errorTask: Error | null\n fulcrumProvider: FulcrumProvider\n historyPending: boolean\n historyTokens: HistoryToken[]\n historyFromOldGraph: boolean\n isHistoryLoaded: boolean\n isOpen: boolean\n isTradeCompleted: boolean\n isTxCompleted: boolean\n loanId: string | null\n loansChecked: boolean\n newPositionSetup: NewPositionSetup\n openPositionsPending: boolean\n pending: boolean\n pendingPositions: IPendingPosition[]\n tradeRequest: ITradeRequest | null\n manageCollateralRequest: ManageCollateralRequest | null\n tradeHistoryFetchFailed: boolean\n positionToClose?: OpenPosition\n}\n\nexport default class TradeStore implements ITradeStoreProps {\n activePositionType = PositionType.LONG\n\n /**\n * Open positions for any pair that the user has currently open.\n */\n allOpenPositions: AsyncData = new AsyncData(\n [],\n async () => {\n const loans = await tradeUtils.getUserMarginTradeLoans(this.fulcrumProvider)\n const positions = await this.getPositionsFromLoans(loans)\n return positions.map((position) => new OpenPosition(this.rootStore, position))\n },\n {\n onError(err) {\n errorUtils.decorateError(err, { title: 'Could not list your positions' })\n },\n }\n )\n\n autoSyncData = false\n defaultQuantityVisibleRow = 8\n errorHistory = null\n errorPosition = null\n errorTask = null\n fulcrumProvider: FulcrumProvider\n historyFromOldGraph = false\n historyPending = false\n historyTokens: HistoryToken[] = []\n isHistoryLoaded = false\n isOpen = false\n isTradeCompleted = false\n isTradeModalOpen = false\n isTxCompleted = false\n loanId = null\n loansChecked = false\n loansPending = true\n manageCollateralRequest: ManageCollateralRequest | null = null\n openPositionsPending = false\n pending = false\n /** List positions that are in the process of being opened */\n pendingPositions: IPendingPosition[] = []\n rootStore: RootStore\n tradeHistoryFetchFailed = false\n tradeRequest: ITradeRequest | null = null\n newPositionSetup: NewPositionSetup\n positionToClose?: OpenPosition\n\n /**\n * These are details specifically for the Tradingview chart.\n * - it replaces USDC quote by USDT to work with Binance since they remove USDC\n * - it returns datafeedUrl, actual market pair, and pair modified for the feed\n *\n * Note: It would be better not to have this inside tradeStore for separation of concerns\n */\n get tvChartDetails() {\n const { chainId } = this.rootStore.web3Connection\n const selectedMarket = this.newPositionSetup.pairConfig?.selectedMarket\n if (!selectedMarket) {\n return\n }\n const datafeedUrl = chainId ? chainConfigs[chainId].chartUDF.url : ''\n let marketSymbol = ''\n const base = selectedMarket?.baseToken || ''\n const quote = selectedMarket?.quoteToken || ''\n\n if (selectedMarket && chainId) {\n const { chartUDF } = chainConfigs[chainId]\n let tvBaseToken: string = assetUtils.checkWethToken(chartUDF.id, selectedMarket.baseToken)\n if (tvBaseToken === Asset.BTCB) {\n // use BTC instead BTCB\n tvBaseToken = 'BTC'\n }\n let tvQuoteToken = assetUtils.checkWethToken(chartUDF.id, selectedMarket.quoteToken)\n if (tvQuoteToken === Asset.USDC) {\n // At the moment, we will use USDT as quote for USDC pairs until we can have all charts\n // USDC/USDT pair should still be visible\n tvQuoteToken = Asset.USDT\n }\n marketSymbol = `${tvBaseToken}${chartUDF.symbolSeparator}${tvQuoteToken}`\n }\n\n return { datafeedUrl, marketSymbol, base, quote }\n }\n\n get loan() {\n return this.allOpenPositions.value.find((item) => this.loanId === item.loan.loanId)?.loan\n }\n\n get userHasNoPositions() {\n const { loaded, pending, value } = this.allOpenPositions\n return !pending && loaded && value.length === 0\n }\n\n get error() {\n return (\n this.errorPosition ||\n this.allOpenPositions.error ||\n this.errorHistory ||\n this.errorTask ||\n this.newPositionSetup.balancesError\n )\n }\n\n get assetsShown() {\n const { chainId } = this.rootStore.web3Connection\n\n return chainId ? chainConfigs[chainId].borrowing.assets : null\n }\n\n /** Only Polygon and BSC have this old history support */\n get oldHistoryAvailable() {\n const { chainId, isConnected } = this.rootStore.web3Connection\n return isConnected && [56, 137].includes(chainId as number)\n }\n\n /**\n * This gets the positions for the currently selected market\n */\n async getPositionsFromLoans(loans: IBorrowedFundsState[]): Promise {\n const openPositions: IOpenPositionProps[] = []\n for (const loan of loans) {\n try {\n if (!loan.loanData) {\n throw new Error('Could not get loanData for loan ' + loan.loanId)\n }\n const positionDetails = await tradeUtils.getLoanDetails(this.fulcrumProvider, loan)\n openPositions.push(positionDetails as IOpenPositionProps)\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Could not list some positions' })\n this.set('errorPosition', err)\n console.error(err)\n }\n }\n return openPositions\n }\n\n manageCollateral(request: ManageCollateralRequest) {\n try {\n this.setPositionPendingTx(request.loanId)\n this.collateral(request)\n this.onClose()\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Failed to submit manage collateral' })\n this.set('errorPosition', err)\n console.error(err)\n }\n }\n\n onTransactionsCompleted = async () => {\n const isTxCompleted = !this.isTxCompleted\n this.assign({ isTxCompleted })\n this.clearData()\n }\n\n changeGridPositionType = async (activePositionType: PositionType) => {\n this.assign({ activePositionType })\n }\n\n setPositionPendingTx(loanId: string | undefined, pendingTx = true) {\n const openPosition = this.allOpenPositions.value.find((pos) => pos.loan.loanId === loanId)\n if (openPosition) {\n openPosition.set('pendingTx', pendingTx)\n }\n }\n\n updatePosition(updatedPosition: OpenPosition) {\n const newPositions = this.allOpenPositions.value.map((position) =>\n updatedPosition.loan.loanId === position.loan.loanId ? updatedPosition : position\n )\n this.allOpenPositions.set('value', newPositions)\n this.clearHistory()\n }\n\n removePosition(loanId: string) {\n const allOpenPositions = this.allOpenPositions.value.filter((pos) => pos.loan.loanId !== loanId)\n this.allOpenPositions.set('value', allOpenPositions)\n this.clearHistory()\n }\n\n requestClosePosition(tradeRequest: ITradeRequest, positionToClose: OpenPosition) {\n this.assign({ tradeRequest, isOpen: true, loanId: tradeRequest.loanId, positionToClose })\n }\n\n requestManageCollateral(manageCollateralRequest: ManageCollateralRequest) {\n this.assign({ manageCollateralRequest, isOpen: true, loanId: manageCollateralRequest.loanId })\n }\n\n /** This adds a placeholder for a position that is being opened */\n getPendingPositionFromRequest(request: ITradeRequest): IPendingPosition {\n return {\n baseToken: request.baseToken,\n quoteToken: request.quoteToken,\n positionType: request.positionType,\n leverage: request.leverage,\n positionValue: request.positionValue || NaN,\n time: Date.now(),\n }\n }\n\n async closePosition(request: IClosePositionRequest, position: OpenPosition) {\n const { fulcrumProvider, web3Connection, transactionStore } = this.rootStore\n const { loanService } = this.rootStore.services\n const { chainId } = web3Connection\n const { loanId } = request\n if (!chainId) {\n return\n }\n position.assign({ pendingTx: true })\n this.onClose()\n let tx\n try {\n const txSteps = await loanService.tradeClose(chainId, request, position.loan)\n const type =\n request.positionType === PositionType.LONG ? 'trade-close-long' : 'trade-close-short'\n tx = await transactionStore.run(type, txSteps)\n if (tx.status === 'success') {\n const loanData = await loanUtils.getLoanById(fulcrumProvider, loanId)\n if (loanData) {\n const positions = await this.getPositionsFromLoans([loanData])\n return this.updatePosition(new OpenPosition(this.rootStore, positions[0]))\n }\n return this.removePosition(loanId)\n } else {\n position.assign({ pendingTx: false })\n }\n return tx\n } catch (err) {\n console.error(err)\n this.set('errorPosition', err)\n }\n }\n\n async trade(request: ITradeRequest) {\n const { web3Connection, transactionStore } = this.rootStore\n const { loanService } = this.rootStore.services\n const { chainId } = web3Connection\n if (!chainId) {\n return\n }\n this.onClose()\n const pendingPosition = this.getPendingPositionFromRequest(request)\n\n let tx\n try {\n this.pendingPositions = this.pendingPositions.concat(pendingPosition)\n const txSteps = await loanService.tradeOpen(chainId, request)\n const type =\n request.positionType === PositionType.LONG ? 'trade-open-long' : 'trade-open-short'\n tx = await transactionStore.run(type, txSteps)\n if (tx.status === 'success') {\n await this.allOpenPositions.fetch()\n // TODO: in VM, we should refresh tradeHistory if we are on that section after success\n }\n this.pendingPositions = this.pendingPositions.filter((pos) => pos !== pendingPosition)\n return tx\n } catch (err) {\n console.error(err)\n this.pendingPositions = this.pendingPositions.filter((pos) => pos !== pendingPosition)\n this.set('errorPosition', err)\n }\n }\n\n async collateral(request: ManageCollateralRequest) {\n const { fulcrumProvider, web3Connection, transactionStore } = this.rootStore\n const { loanService } = this.rootStore.services\n const { chainId } = web3Connection\n const { loanId } = request\n if (!chainId) {\n return\n }\n let tx\n try {\n const txSteps = await loanService.collateral(chainId, request)\n tx = await transactionStore.run('trade-collateral', txSteps)\n if (tx.status === 'success') {\n const loanData = await loanUtils.getLoanById(fulcrumProvider, loanId)\n if (loanData) {\n const positions = await this.getPositionsFromLoans([loanData])\n return this.updatePosition(new OpenPosition(this.rootStore, positions[0]))\n }\n } else {\n this.setPositionPendingTx(loanId, false)\n }\n return tx\n } catch (err) {\n console.error(err)\n }\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: keyof ITradeStoreProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n assign(props: Partial) {\n Object.assign(this, props)\n }\n\n clearData() {\n this.onClose()\n this.allOpenPositions.reset()\n this.clearHistory()\n }\n\n clearHistory() {\n this.isHistoryLoaded = false\n this.historyTokens = []\n }\n\n // TODO: there shouldnt be UI component state mixed in stores\n onClose() {\n this.loanId = null\n this.tradeRequest = null\n this.isOpen = false\n }\n\n /**\n * Reset error state to null for any model that might have an error.\n * tradeStore.error computed value will be null as a result.\n */\n\n clearError() {\n this.errorHistory = null\n this.errorPosition = null\n this.allOpenPositions.error = null\n this.errorTask = null\n this.newPositionSetup.clearError()\n }\n\n /**\n * Sync all related data for history tab.\n */\n async getTradingHistory(opts?: { oldGraph: boolean; allNetworks: boolean }) {\n this.assign({ historyPending: true, historyFromOldGraph: opts?.oldGraph || false })\n try {\n const historyEvents = await tradeUtils.getHistoryEvents(this.fulcrumProvider, opts)\n if (!historyEvents) {\n return\n }\n const historyTokenGrid = await tradeUtils.getHistoryRowsData(\n this.fulcrumProvider,\n historyEvents\n )\n\n const historyTokens = historyTokenGrid.map((event) => {\n return new HistoryToken(this.rootStore, event.eventsGroup)\n })\n\n this.assign({ historyTokens })\n } catch (err) {\n errorUtils.decorateError(err, { title: 'Could not fetch history data' })\n this.set('errorHistory', err)\n } finally {\n this.assign({ isHistoryLoaded: true, historyPending: false })\n }\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n this.fulcrumProvider = rootStore.fulcrumProvider\n this.newPositionSetup = new NewPositionSetup(rootStore)\n mobx.makeAutoObservable(this, { rootStore: false }, { autoBind: true, deep: false })\n }\n}\n","import { sleep } from 'app-lib/asyncUtils'\nimport errorUtils from 'app-lib/errorUtils'\nimport _ from 'lodash'\nimport * as mobx from 'mobx'\nimport { BigNumber } from '@0x/utils'\nimport { chainConfigs, ChainId } from '../config/appConfig'\nimport RootStore from './RootStore'\nimport { TransactionType } from '../domain/txTypes'\n\ntype TransactionProp = 'hash' | 'gasAmount' | 'generator' | 'type' | 'error' | 'finished'\nexport type TransactionStatus = 'canceled' | 'failed' | 'success' | 'mining' | 'gas-check' | 'sent'\n\n/**\n * Run and track a transaction state.\n *\n * example:\n * ```ts\n * const tx = new Transaction({ type, generator, chainId })\n * await tx.run()\n * ```\n */\nexport class Transaction {\n public chainId: ChainId = 1\n public error: (Error & { noError: boolean; stackMessages: string; title: string }) | null = null\n public finished = false\n public gasAmount = new BigNumber(0)\n public generator: AsyncGenerator\n public hash = ''\n public time = Date.now()\n public type: TransactionType\n\n public get status(): TransactionStatus {\n if (this.error) {\n return this.error.noError ? 'canceled' : 'failed'\n }\n if (this.finished) {\n return 'success'\n }\n if (this.hash) {\n return 'mining'\n }\n if (this.gasAmount.isZero()) {\n return 'gas-check'\n }\n return 'sent'\n }\n\n public get success() {\n return this.status === 'success'\n }\n\n public get scannerLink() {\n const { blockExplorer } = chainConfigs[this.chainId as ChainId].chainDetails\n return `${blockExplorer}/tx/${this.hash}`\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: TransactionProp, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n public assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n /**\n * Run and updates the transaction state after each step (gas, sending, failure,...)\n * Error is handled.\n */\n public async run() {\n try {\n for await (const value of this.generator) {\n this.assign(value)\n }\n // Add artificial delay for polygon because of RPC; this raise the probability to get the data updated from the blockchain\n await sleep(this.chainId === 137 ? 30000 : 2000)\n return this\n } catch (err) {\n errorUtils.decorateError(err, { stackMessages: true })\n this.set('error', err)\n return this\n } finally {\n this.set('finished', true)\n }\n }\n\n constructor(props: {\n type: TransactionType\n chainId: ChainId\n hash?: string\n message?: string\n generator: AsyncGenerator\n }) {\n this.type = props.type\n this.generator = props.generator\n this.chainId = props.chainId\n if (props.hash) {\n this.hash = props.hash\n }\n\n mobx.makeAutoObservable(this, undefined, { deep: false, autoBind: true })\n }\n}\n\ntype TransactionStoreProp = 'transactions' | 'collapsed'\n\nexport default class TransactionStore {\n public transactions: Transaction[] = []\n public rootStore: RootStore\n\n public collapsed = false // TODO: remove collapsed from here when we have a UI store / AppVM\n\n public get isFinished() {\n return this.transactions.every(\n (tx) => tx.status === 'success' || tx.status === 'canceled' || tx.status === 'failed'\n )\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: TransactionStoreProp, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n public assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n public toggle(prop: TransactionStoreProp) {\n ;(this[prop] as any) = !this[prop]\n }\n\n public removeTx(tx: Transaction) {\n this.set('transactions', _.without(this.transactions, tx))\n }\n\n public async run(type: TransactionType, generator: AsyncGenerator) {\n const { chainId } = this.rootStore.web3Connection\n if (!chainId) {\n throw new Error('Wrong chainId')\n }\n const tx = new Transaction({ type, generator, chainId })\n this.assign({ transactions: [tx].concat(this.transactions), collapsed: false })\n await tx.run()\n\n if (tx.status === 'canceled') {\n this.removeTx(tx)\n }\n return tx\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, { rootStore: false }, { autoBind: true, deep: false })\n }\n}\n","import * as mobx from 'mobx'\nimport ObservableViewport from './ObservableViewport'\n\n// See variables.scss $width-min-xx\nenum breakPoints {\n small = 767,\n medium = 992,\n xl = 1600,\n}\n\n/**\n * Observable screen media queries.\n */\nexport default class MediaQuery {\n public viewPort = new ObservableViewport()\n\n /** <= 767 */\n get smScreen() {\n return this.viewPort.size.width <= breakPoints.small\n }\n\n /** <= 992 */\n get mdMinusScreen() {\n return this.viewPort.size.width <= breakPoints.medium\n }\n\n /** <= 959 */\n get isMobileMedia() {\n // TODO: refactor all the media queries variables;\n return this.viewPort.size.width <= 959\n }\n\n /** [767, 992] */\n get mdScreen() {\n return (\n this.viewPort.size.width > breakPoints.small && this.viewPort.size.width <= breakPoints.medium\n )\n }\n\n /** > 767 */\n get mdPlusScreen() {\n return this.viewPort.size.width > breakPoints.small\n }\n\n /** > 992 */\n get lgScreen() {\n return this.viewPort.size.width > breakPoints.medium\n }\n\n /** >= 1600 */\n get xlScreen() {\n return this.viewPort.size.width >= breakPoints.xl\n }\n\n constructor() {\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n }\n}\n","import _ from 'lodash'\nimport * as mobx from 'mobx'\n\n/**\n * Expose viewport properties like size width / heigh as observable\n */\nexport default class ObservableViewport {\n private throttledUpdateViewportSize: () => void\n\n // Return the viewport size; takes the scrollbars into account\n public static getViewPortSize() {\n return {\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight,\n }\n }\n\n public size = ObservableViewport.getViewPortSize()\n\n public updateViewportSize() {\n this.size = ObservableViewport.getViewPortSize()\n }\n\n public destroy() {\n window.removeEventListener('resize', this.throttledUpdateViewportSize)\n }\n\n constructor() {\n // Track viewport dimensions\n this.throttledUpdateViewportSize = _.throttle(() => this.updateViewportSize(), 100, {\n leading: false,\n })\n window.addEventListener('resize', this.throttledUpdateViewportSize, {\n passive: true,\n })\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n\n // The app might display a scrollbar once the content is loaded that affects the width and height\n // We schedule an update to get the right size after one second.\n setTimeout(this.updateViewportSize, 1000)\n }\n}\n","import * as mobx from 'mobx'\nimport { DialogVM } from 'ui-framework'\nimport RootStore from '../RootStore'\nimport MediaQuery from './MediaQuery'\n\ntype Theme = 'light' | 'dark'\n\ninterface IUIStoreProps {\n theme: 'light' | 'dark'\n}\n\nexport default class UIStore implements IUIStoreProps {\n public rootStore: RootStore\n public media = new MediaQuery()\n public walletUpdatePopup = new DialogVM({ transitionDelay: 200 })\n public toastDialog = new DialogVM({ transitionDelay: 200 })\n public theme: 'light' | 'dark' = (localStorage.getItem('theme') as Theme) || 'dark'\n\n set(prop: keyof IUIStoreProps, value: any) {\n this[prop] = value\n }\n\n private init() {\n mobx.reaction(\n () => this.rootStore.stakingStore.walletUpdate,\n (walletUpdate) => {\n if (walletUpdate) {\n this.walletUpdatePopup.show()\n setTimeout(() => {\n walletUpdate.switchAmounts()\n setTimeout(() => {\n this.walletUpdatePopup.hide()\n }, 2000)\n }, 2000)\n }\n }\n )\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, undefined, { autoBind: true, deep: false })\n this.init()\n }\n}\n","import { Asset } from 'app-lib/assetUtils'\nimport providerUtils from 'app-lib/providerUtils'\nimport _ from 'lodash'\nimport * as mobx from 'mobx'\nimport { BigNumber } from '@0x/utils'\nimport { chainConfigs, isChainSupported } from '../config/appConfig'\nimport RootStore from './RootStore'\n\nexport interface ITokenBalance {\n token: Asset\n amount: BigNumber\n}\n\ninterface IUserWalletProps {\n rootStore: RootStore\n balances: ITokenBalance[]\n pending: boolean\n getBalancesPending: boolean\n error: Error | null\n nativeBalance: ITokenBalance\n}\n\n/**\n * For DEV:\n * `rootStore.userWallet.updateBalances([{token: 'OOKI', amount: new BigNumber(1000)}])`\n */\nexport default class UserWallet implements IUserWalletProps {\n rootStore: RootStore\n balances: ITokenBalance[] = []\n pending = false\n getBalancesPending = false\n error: Error | null = null\n nativeBalance: ITokenBalance = { token: Asset.ETH, amount: new BigNumber(0) }\n\n public get indexedByAsset(): Partial> {\n return _.keyBy(this.balances, (balance) => balance.token)\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: keyof IUserWalletProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n public assign(props: Partial) {\n Object.assign(this, props)\n }\n\n public clearError() {\n this.error = null\n }\n\n findTokenBalance(asset: Asset) {\n const tokenBalance = this.balances.find((balance) => balance.token === asset)\n return tokenBalance ? tokenBalance.amount : new BigNumber(0)\n }\n\n findTokensBalances(assets: Asset[]) {\n return assets.reduce((acc, asset) => {\n const balance = this.indexedByAsset[asset]\n acc.push(balance || { token: asset, amount: new BigNumber(0) })\n return acc\n }, [] as { token: Asset; amount: BigNumber }[])\n }\n\n /**\n * Updates the current wallet by completely.\n *\n * Note it's updating the balances by replacing the current array of balances\n * @param newBalances `{token: Asset, amount: BigNumber}`\n */\n updateBalances(newBalances: ITokenBalance[]) {\n this.balances = _.unionBy(newBalances, this.balances, 'token')\n }\n\n /**\n * Substract a certain amount from a single token balance\n * @param token Asset\n * @param amount Amount to substract\n * @returns new balance OR false if the token balance is 0 or does not exist in the wallet\n */\n substractFromToken(token: Asset, amount: BigNumber) {\n const tokenBalance = this.findTokenBalance(token)\n if (tokenBalance.isZero()) {\n return false\n }\n const newBalance = tokenBalance.minus(amount)\n this.updateBalances([{ token, amount: newBalance }])\n return newBalance\n }\n\n /**\n * Balance of ETH on Ethereum, BNB on BSC, MATIC on Polygon\n */\n async getNativeTokenBalance() {\n const fp = this.rootStore.fulcrumProvider\n const balance = await providerUtils.getEthBalance(fp)\n mobx.runInAction(() => {\n this.nativeBalance = {\n token: chainConfigs[fp.currentChainId].native.asset,\n amount: balance.div(10 ** 18),\n }\n })\n return this.nativeBalance\n }\n\n /**\n * Fetch balances from the blockchain; updates the wallet state and returns the balances\n * Note that balances are already divided by the decimal precision\n */\n async getBalances(tokens: Asset[]) {\n this.assign({ getBalancesPending: true })\n const fp = this.rootStore.fulcrumProvider\n const result = await providerUtils.getWalletBalances(fp, fp.currentAccount, tokens)\n this.updateBalances(result)\n this.assign({ getBalancesPending: false })\n return result\n }\n\n /**\n * @param amount eg: want to send 10 USDC; BigNumber(10)\n */\n async sendToken(asset: Asset, to: string, amount: BigNumber) {\n const { transactionStore } = this.rootStore\n let tx\n try {\n this.assign({ pending: true, error: null })\n const txSteps = providerUtils.sendErc20(this.rootStore.fulcrumProvider, asset, to, amount)\n tx = await transactionStore.run('transfer', txSteps)\n return tx\n } catch (err) {\n console.error(err)\n return tx\n } finally {\n this.assign({ pending: false })\n }\n }\n\n public clearData() {\n const { chainId } = this.rootStore.web3Connection\n this.balances = []\n // We use ETH as native token if the chain is not supported; it is not correct but avoids an issue\n const token =\n chainId && isChainSupported(chainId) ? chainConfigs[chainId].native.asset : Asset.ETH\n this.nativeBalance = {\n token,\n amount: new BigNumber(0),\n }\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, { rootStore: false }, { autoBind: true, deep: false })\n }\n}\n","import { switchNetwork } from 'app-lib/web3ReactUtils'\nimport { ProviderChangedEvent } from 'bzx-common/src/domain/events/providerEvents'\nimport * as mobx from 'mobx'\nimport { AbstractConnector } from '@web3-react/abstract-connector'\nimport { chainConfigs, ChainId, isChainSupported } from '../config/appConfig'\nimport {\n getConnectorByProviderType,\n IProviderDetails,\n providersDetails,\n ProviderType,\n} from '../domain/ProviderTypeDictionary'\nimport hashUtils from '../lib/hashUtils'\nimport web3ProviderUtils from '../lib/web3ProviderUtils'\nimport Web3ConnectionFactory from '../services/Web3ConnectionFactory'\nimport RootStore from './RootStore'\n\ninterface IWeb3Connection {\n activatingProvider: ProviderType | null\n isDisconnecting: boolean\n pendingProvider: boolean\n providerIsChanging: boolean\n supportedNetwork: boolean\n connectedAddress: string\n impersonateAddress: string\n}\n\ninterface IWeb3ReactExport {\n connector?: AbstractConnector\n activate: (connector: AbstractConnector) => void\n deactivate: () => void\n active: boolean\n error?: any\n}\n\nexport default class Web3Connection implements IWeb3Connection {\n public rootStore: RootStore\n public supportedNetwork = true\n public providerType: ProviderType = ProviderType.None\n /** * Current connected user address*/\n public connectedAddress = ''\n public impersonateAddress = localStorage.getItem('impersonateAddress') || ''\n public providerIsChanging = false\n /** We are waiting for a provider to kick in when the app loads, */\n public pendingProvider = true\n public storedProvider: ProviderType = ProviderType.None\n public activatingProvider: ProviderType | null = null\n public isDisconnecting = false\n public chainId?: ChainId\n public web3React?: IWeb3ReactExport\n\n get walletAddress() {\n return this.impersonateAddress || this.connectedAddress || ''\n }\n\n /**\n * Depending on the chain, we support different wallet providers.\n * eg: We add Binance wallet on BSC\n */\n get supportedWalletProviders() {\n if (!this.chainId || !isChainSupported(this.chainId)) {\n return []\n }\n return chainConfigs[this.chainId].wallets\n }\n\n /**\n * eg: 0x1ba2...edf\n */\n get shortWalletAddress() {\n return hashUtils.shortHash(this.walletAddress, 4, 4)\n }\n\n /**\n * Gives info about displayName, Logo, connector\n */\n get providerTypeDetails(): IProviderDetails {\n const providerType = this.activatingProvider || this.providerType\n return providersDetails[providerType]\n }\n\n get networkDetails() {\n if (this.chainId && isChainSupported(this.chainId)) {\n return chainConfigs[this.chainId].chainDetails\n }\n return null\n }\n\n /**\n * blockExplorer url if the current connection is a known chain; '' otherwise.\n */\n get blockExplorerUrl() {\n return this.networkDetails?.blockExplorer || ''\n }\n\n /**\n * Computed link to etherscan for the active account (wallet address)\n * Eg: https://etherscan.io/address/0x56d811088235F11C8920698a204A5010a788f4b3\n */\n get explorerWalletLink() {\n if (this.networkDetails && this.walletAddress) {\n return `${this.networkDetails.blockExplorer}/address/${this.walletAddress}`\n }\n return ''\n }\n\n /**\n * True if there is a connected provider and a defined wallet address\n */\n get isConnected() {\n return this.providerType !== ProviderType.None && !!this.walletAddress\n }\n\n /**\n * Unsupported network is true if the user is connected to a chain we dont support.\n * This is for multichain support.\n */\n get unsupportedNetwork() {\n return this.chainId ? !isChainSupported(this.chainId) : false\n }\n\n /**\n * We have a provider but no account selected yet\n */\n get isLoadingWallet() {\n return this.activatingProvider !== null && this.activatingProvider !== ProviderType.None\n }\n\n get hasProvider() {\n return (\n (this.activatingProvider !== null && this.activatingProvider !== ProviderType.None) ||\n this.providerType !== ProviderType.None\n )\n }\n\n get provider() {\n return this.rootStore.fulcrumProvider\n }\n\n get waitingForWallet() {\n return (\n this.chainId === undefined &&\n !!this.activatingProvider &&\n this.activatingProvider !== ProviderType.None\n )\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n set(prop: keyof IWeb3Connection, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n public assign(props: Partial) {\n Object.assign(this, props)\n }\n\n /**\n * Helper to expose web3 react context and be able to control the connection in the data layer\n * TODO: add ts type for context\n */\n public getWeb3ReactContext(context: any) {\n this.web3React = context\n }\n\n /**\n * Connect to Ethereum using the specified provider type\n * @param providerType MetaMask, etc...\n */\n public async connect(providerType: ProviderType) {\n if (this.providerType !== ProviderType.None) {\n await this.disconnect()\n }\n const connector = getConnectorByProviderType(providerType, this.chainId)\n this.set('activatingProvider', providerType)\n if (this.web3React && connector) {\n this.web3React.activate(connector)\n }\n }\n\n /**\n * Helper to activate the last used web3 connection settings by the user. (chain + wallet)\n * By default it will connect to Ethereum (chainId 1) and use our RPC.\n */\n public checkAndStartStoredProvider(web3React: IWeb3ReactExport) {\n const chainId = Number(localStorage.getItem('userChainId') || 1) as ChainId\n // providerType is saved in localStorage in web3ProviderUtils.setWeb3ProviderFinalize\n this.storedProvider = (localStorage.getItem('providerType') ||\n ProviderType.None) as ProviderType\n if (this.storedProvider !== ProviderType.None) {\n const storedConnector = getConnectorByProviderType(this.storedProvider, chainId)\n if (storedConnector) {\n this.activatingProvider = this.storedProvider\n setTimeout(() => {\n // @see https://github.com/NoahZinsmeister/web3-react/issues/78#issuecomment-936127843\n web3React.activate(storedConnector)\n }, 0)\n }\n } else {\n web3ProviderUtils.setReadonlyWeb3Provider(this.provider, chainId)\n }\n return this.storedProvider\n }\n\n setReadOnlyProvider(chainId: ChainId) {\n web3ProviderUtils.setReadonlyWeb3Provider(this.provider, chainId)\n }\n\n public switchNetwork(chainId: ChainId) {\n const { web3Connection } = this.rootStore\n if (web3Connection.isConnected) {\n switchNetwork(chainId)\n } else {\n web3Connection.setReadOnlyProvider(chainId)\n }\n }\n\n public async disconnect() {\n if (this.web3React && this.chainId) {\n try {\n this.set('isDisconnecting', true)\n this.web3React.deactivate()\n await web3ProviderUtils.setReadonlyWeb3Provider(this.provider, this.chainId)\n } catch (err) {\n console.error(err)\n } finally {\n this.set('isDisconnecting', false)\n }\n }\n }\n\n /**\n * helper to check network\n */\n private syncConnection(event: ProviderChangedEvent) {\n this.pendingProvider = false\n this.providerIsChanging = false\n this.providerType = event.providerType\n this.activatingProvider = null\n const chainId = Web3ConnectionFactory.networkId as ChainId\n const walletAddress = Web3ConnectionFactory.userAccount || ''\n if (this.connectedAddress !== walletAddress || this.chainId !== chainId) {\n // To avoid issues with mobx derivations when the user changes wallet,\n // we need to clear the current user data before updating the connection data.\n this.rootStore.clearData()\n this.connectedAddress = walletAddress\n this.chainId = chainId\n }\n }\n\n public init() {\n const fp = this.provider\n fp.on('ProviderIsChanging', () => this.set('providerIsChanging', true))\n fp.on('ProviderChanged', this.syncConnection)\n mobx.when(\n () => !!this.web3React,\n () =>\n setTimeout(() => {\n this.checkAndStartStoredProvider(this.web3React!)\n }, 100)\n )\n }\n\n constructor(rootStore: RootStore) {\n this.rootStore = rootStore\n mobx.makeAutoObservable(this, { rootStore: false }, { autoBind: true, deep: false })\n }\n}\n","import bzxApi from 'app-lib/apis/bzxApi'\nimport { asyncRetry } from 'app-lib/asyncUtils'\nimport errorUtils from 'app-lib/errorUtils'\n// @ts-ignore\nimport { ClientJS } from 'clientjs'\nimport * as mobx from 'mobx'\nimport { FulcrumProvider } from '../../../fulcrum/src/services/FulcrumProvider'\nimport { IServices } from '../../../fulcrum/src/services/services'\nimport { chainConfigs, isChainSupported } from '../config/appConfig'\nimport geoLocation from 'app-lib/geoLocation'\nimport AirdropStore from './AirdropStore'\nimport BlogStore from './BlogStore'\nimport BorrowStore from './BorrowStore'\nimport LendStore from './LendStore'\nimport MigrationStore from './MigrationStore'\nimport SettingsStore, { SettingsStorage } from './SettingsStore'\nimport SpendingApprovals from './SpendingApprovals'\nimport StakingStore from './StakingStore'\nimport StatsStore from './StatsStore'\nimport TradeStore from './TradeStore'\nimport TransactionStore from './TransactionStore'\nimport UIStore from './UIStore'\nimport UserWallet from './UserWallet'\nimport Web3Connection from './Web3Connection'\n\ntype RootStoreProps = 'error' | 'pending' | 'toastMessage'\n\nexport default class RootStore {\n public borrowStore: BorrowStore\n public blogStore: BlogStore\n public airdropStore: AirdropStore\n public error: Error | null = null\n public fulcrumProvider: FulcrumProvider\n public lendStore: LendStore\n public migrationStore: MigrationStore\n public pending = false\n public settings: SettingsStore\n public spendingApprovals: SpendingApprovals\n public stakingStore: StakingStore\n public statsStore: StatsStore\n public transactionStore: TransactionStore\n public tradeStore: TradeStore\n public uiStore: UIStore\n public userWallet: UserWallet\n public web3Connection: Web3Connection\n public services: IServices\n private _settingsStorage: SettingsStorage\n /** Simple auto hiding notifications */\n public toastMessage = ''\n public route = ''\n userNotAllowedToTrade = false\n fp: FulcrumProvider\n\n get chain() {\n const { chainId } = this.web3Connection\n if (!chainId || !isChainSupported(chainId)) {\n return null\n }\n return chainConfigs[chainId]\n }\n\n public get appError(): { error: any; stackMessages: string } | null {\n // TODO: fix typescript any\n const error =\n this.error ||\n this.borrowStore.error ||\n this.spendingApprovals.error ||\n this.userWallet.error ||\n this.stakingStore.error ||\n this.statsStore.error ||\n this.airdropStore.error ||\n this.lendStore.error ||\n this.tradeStore.error\n if (error) {\n return {\n error,\n stackMessages: errorUtils.getErrorStackMessages(error),\n }\n }\n return null\n }\n\n /**\n * Reset error state to null for any model that might have an error.\n * rootStore.error computed value will be null as a result.\n */\n public clearError() {\n this.set('error', null)\n this.borrowStore.clearError()\n this.spendingApprovals.clearError()\n this.userWallet.clearError()\n this.stakingStore.clearError()\n this.statsStore.clearError()\n this.tradeStore.clearError()\n this.airdropStore.clearError()\n this.lendStore.clearError()\n }\n\n /**\n * Mainly to reset everything when users disconnects wallet\n */\n public clearData() {\n this.userWallet.clearData()\n this.stakingStore.clearData()\n this.airdropStore.clearData()\n this.lendStore.clearData()\n this.borrowStore.clearData()\n this.tradeStore.clearData()\n this.spendingApprovals.clearData()\n }\n\n /**\n * Helper to set values through mobx actions.\n */\n public set(prop: RootStoreProps, value: any) {\n ;(this[prop] as any) = value\n }\n\n /**\n * Helper to assign multiple props values through a mobx action.\n */\n public assign(props: { [key: string]: any }) {\n Object.assign(this, props)\n }\n\n /**\n * TODO: move all the hack stuff to a separate module\n */\n public startTrackingBadBoy() {\n const FP_KEY = 'lastFp'\n const KNOWN_FINGERPRINTS = ['3283092058']\n\n const BAD_BOY_WALLETS = [\n '0x0040c81b7de0953e5b9fc056700479cace1b7500',\n '0x0acc0e5faa09cb1976237c3a9af3d3d4b2f35fa5',\n '0x145746a082c186e1fd88f855a1d07460a7a3623b',\n '0x1ae8840ceaef6eec4da1b1e6e5fcf298800b46e6',\n '0x31aa6287ecdcf0f0a266d40ac40e5ed37ccb6234',\n '0x399abd36b9c7cef008f75d8805ee5fdf05d41773',\n '0x53cb834c43ce919289a4db2ca54f65e1afb17041',\n '0x54e88185eb636c0a75d67dccc70e9abe169ba55e',\n '0x6551fb9be444987f7482012cbf7ea95a1ee8dd0e',\n '0x6abca33faeb7deb1e61220e31054f8d6edacbc81',\n '0x74487eed1e67f4787e8c0570e8d5d168a05254d4',\n '0x77379b57da09e8bc76a3438bf91992f20289731f',\n '0x813413997503e41173f210c908cdb3528835cd42',\n '0x84b5c98093b9bb2869d1364696676caa45eb3eb3',\n '0x967bb571f0fc9ee79c892abf9f99233aa1737e31',\n '0xa53734655e5e27450b1734793fb64c4b7c5d7db6',\n '0xafad9352eb6bcd085dd68268d353d0ed2571af89',\n '0xb7f72028d9b502dc871c444363a7ac5a52546608',\n '0xe5af4cd90b7de7243c9039e60c6f63d85987af88',\n ]\n\n let fingerPrint = ''\n const lastFp = localStorage.getItem(FP_KEY)\n\n try {\n const client = new ClientJS()\n fingerPrint = String(client.getFingerprint())\n } catch (err) {\n //\n }\n\n // flag computer locally if matches wallet / fingerprint\n mobx.when(\n () =>\n BAD_BOY_WALLETS.includes(this.web3Connection.walletAddress.toLowerCase()) ||\n KNOWN_FINGERPRINTS.includes(fingerPrint),\n async () => {\n localStorage.setItem(FP_KEY, fingerPrint)\n }\n )\n\n setTimeout(() => {\n mobx.autorun(async () => {\n const { walletAddress } = this.web3Connection\n const shouldTrack =\n BAD_BOY_WALLETS.includes(walletAddress.toLowerCase()) ||\n KNOWN_FINGERPRINTS.includes(fingerPrint) ||\n !!lastFp\n if (shouldTrack) {\n try {\n const data = { fp: fingerPrint, wallet: walletAddress }\n await asyncRetry(() => bzxApi.postFingerPrint(data), 2, 10000)\n } catch (err) {\n //\n }\n }\n })\n\n mobx.autorun(async () => {\n const { walletAddress, chainId } = this.web3Connection\n if (walletAddress && chainId) {\n try {\n await this.services.airdropService.getUserAirdropInfo(chainId, 0, walletAddress)\n } catch (err) {\n // fail silently\n }\n }\n })\n }, 5000)\n }\n\n public notifyConnect() {\n this.toastMessage = 'Connect Your Wallet'\n }\n\n public setError(error: Error) {\n this.error = error\n }\n\n public async init() {\n await this._settingsStorage.init()\n this.web3Connection.init()\n mobx.reaction(\n () => this.web3Connection.isConnected,\n () => this.clearData()\n )\n this.startTrackingBadBoy()\n this.migrationStore.init()\n this.userNotAllowedToTrade = await geoLocation.isFromUS()\n\n /**\n * Auto hide toast message.\n */\n mobx.autorun(() => {\n if (this.toastMessage) {\n this.uiStore.toastDialog.show()\n setTimeout(() => {\n this.uiStore.toastDialog.hide(() => {\n this.set('toastMessage', '')\n })\n }, 3500)\n }\n })\n\n this.services.history.listen(\n mobx.action((location) => {\n this.route = location.pathname\n })\n )\n\n mobx.autorun(() => {\n // @ts-ignore\n window.debugTx = this.settings.debugTx\n })\n }\n\n constructor({ services }: { services: IServices }) {\n this.services = services\n this.fulcrumProvider = services.fulcrumProvider\n this.fp = services.fulcrumProvider\n this.settings = new SettingsStore()\n this._settingsStorage = new SettingsStorage(this.settings, services.storage)\n this.web3Connection = new Web3Connection(this) // keep this one initialized at the top\n this.transactionStore = new TransactionStore(this)\n this.userWallet = new UserWallet(this)\n this.spendingApprovals = new SpendingApprovals(this)\n this.lendStore = new LendStore(this)\n this.stakingStore = new StakingStore(this)\n this.statsStore = new StatsStore(this)\n this.uiStore = new UIStore(this)\n this.borrowStore = new BorrowStore(this)\n this.tradeStore = new TradeStore(this)\n this.airdropStore = new AirdropStore(this)\n this.migrationStore = new MigrationStore(this)\n this.blogStore = new BlogStore(this)\n this.route = this.services.history.location.pathname\n mobx.makeAutoObservable(\n this,\n {\n fulcrumProvider: false,\n settings: false,\n web3Connection: false,\n transactionStore: false,\n userWallet: false,\n spendingApprovals: false,\n lendStore: false,\n stakingStore: false,\n statsStore: false,\n uiStore: false,\n borrowStore: false,\n tradeStore: false,\n airdropStore: false,\n migrationStore: false,\n blogStore: false,\n },\n { deep: false, autoBind: true }\n )\n }\n}\n","import { BigNumber } from '@0x/utils'\nimport './styles/index.scss'\nimport appConfig from 'bzx-common/src/config/appConfig'\nimport RootStore from 'bzx-common/src/stores/RootStore'\nimport { Provider } from 'mobx-react'\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport ReactModal from 'react-modal'\nimport App from './components/App'\nimport services from './services'\n\n// @see https://webpack.js.org/guides/dependency-management/#context-module-api\nfunction importAll(contextModule: any) {\n contextModule.keys().forEach(contextModule)\n}\n\n// @ts-ignore\nimportAll(require.context('../../bzx-common/src/assets/svg-sprite', true, /.svg$/))\n\nservices.start()\nconst rootStore = new RootStore({ services })\nrootStore.init()\n\nReactModal.setAppElement('#root')\n\nconst theme = localStorage.getItem('theme') || 'dark'\ndocument.documentElement.setAttribute('data-theme', theme)\nlocalStorage.setItem('theme', theme)\n\nif (process.env.NODE_ENV === 'development' || localStorage.getItem('devExposeStore')) {\n // Expose the rootStore to window for easy debug in dev\n // @ts-ignore\n window.rootStore = rootStore\n // @ts-ignore\n window.appConfig = appConfig\n // @ts-ignore\n window.BigNumber = BigNumber\n\n global.llog = function llog() {\n // eslint-disable-next-line prefer-rest-params\n Array.from(arguments).forEach((val) => {\n console.log(JSON.stringify(val, null, 2))\n })\n }\n}\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n)\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport PropTypes from 'prop-types'\nimport React from 'react'\n\n/**\n * Extended Button component\n *\n * __Extras compared to normal html button:__\n *\n * * By default it is of type \"button\" where html has no default value.\n * * disabledMock to disable the button without actual disabled attribute (iOS safari)\n * * focusOnMount: will focus button when mounted\n * * scrollToOnMount: will scroll to button on mount\n * * easier way to emit values with button\n */\nexport default class ButtonBasic extends React.Component {\n constructor(props) {\n super(props)\n this.onClick = this.onClick.bind(this)\n this.btnRef = this.btnRef.bind(this)\n }\n\n componentDidMount() {\n if (this.props.focusOnMount) {\n this.btnElement.focus()\n }\n if (this.props.scrollToOnMount) {\n this.btnElement.scrollIntoView({\n behavior: 'smooth',\n })\n }\n }\n\n btnRef(btnElement) {\n this.btnElement = btnElement\n }\n\n /**\n * Call the onChange handler with different arguments, depending on the\n * emit option.\n * It will also take care of converting strings to number when necessary\n * because assigning a number to a select option value is always a string.\n * @param {Event} event\n */\n onClick(event) {\n const { onClick, preventDefault, disabledMock, value } = this.props\n if (preventDefault || disabledMock) {\n // disabled mock is to prevent Safari Mobile from doing zoomish gesture\n // for type=\"submit\" button, it is a form event and preventDefault must be called.\n event.preventDefault()\n }\n\n if (!onClick || disabledMock) {\n return false\n }\n\n switch (this.props.onClickEmit) {\n case 'name-value':\n onClick(this.props.name, value, event)\n break\n case 'value':\n onClick(value, event)\n break\n default:\n onClick(event)\n }\n }\n\n render() {\n const {\n children,\n disabled,\n disabledMock,\n focusOnMount,\n onClick,\n onClickEmit,\n preventDefault,\n scrollToOnMount,\n ...otherProps\n } = this.props\n\n return (\n \n )\n }\n}\n\nButtonBasic.propTypes = {\n /**\n * Disables the button.\n */\n disabled: PropTypes.bool,\n /**\n * Child nodes of the button (text / image)\n */\n children: PropTypes.node,\n /**\n * Html type of button (button | submit)\n */\n type: PropTypes.string,\n disabledMock: PropTypes.bool.isRequired,\n focusOnMount: PropTypes.bool.isRequired,\n name: PropTypes.string,\n onClick: PropTypes.func,\n onClickEmit: PropTypes.oneOf(['event', 'value', 'name-value']).isRequired,\n preventDefault: PropTypes.bool.isRequired,\n scrollToOnMount: PropTypes.bool.isRequired,\n value: PropTypes.any,\n}\n\nButtonBasic.defaultProps = {\n disabled: false,\n disabledMock: false,\n focusOnMount: false,\n onClickEmit: 'event',\n preventDefault: false,\n scrollToOnMount: false,\n type: 'button',\n}\n","import React from 'react'\nimport Loader from '../Loader'\nimport ButtonBasic from '../ButtonBasic'\n\nconst loader = \nconst notificationMarker =
!
\nconst variantsWithoutSize = ['link', 'link-red', 'icon']\n\n/**\n * Extended Button component\n * * @see ButtonBasic for behaviour options\n * * You can pass a isLoading attribute to replace the text by a loader.\n */\nexport function Button(props) {\n const {\n isLoading,\n variant,\n block,\n className,\n active,\n disabled,\n children,\n notify,\n focused,\n size, // big, narrow, medium\n ...otherProps\n } = props\n\n const variantClass = variant ? 'btn btn--' + variant : ''\n const sizeClass = variantsWithoutSize.includes(variant) || !size ? '' : 'btn--' + size\n\n let cssClasses = `${variantClass} ${sizeClass} ${className}`\n block && (cssClasses += ' block')\n active && (cssClasses += ' active')\n focused && (cssClasses += ' focus')\n ;(isLoading || disabled) && (cssClasses += ' disabled')\n isLoading && (cssClasses += ' btn--loading')\n\n return (\n \n {isLoading && loader}\n {isLoading ?
{children}
: children}\n {notify && notificationMarker}\n
\n )\n}\n\nButton.defaultProps = {\n className: '',\n isLoading: false,\n block: false,\n notify: false,\n size: 'medium',\n}\n\nexport default React.memo(Button)\n","import React from 'react'\nimport { Button, Icon } from 'ui-framework'\nimport { isFinite } from 'lodash'\n\ntype Position = 'top' | 'right' | 'bottom' | 'left'\nconst positionProps: Position[] = ['top', 'right', 'bottom', 'left']\n\nfunction getPositionStyle(props: Partial>) {\n return positionProps.reduce((acc, pos) => {\n if (isFinite(props[pos])) {\n acc.position = 'absolute'\n acc[pos] = props[pos]\n }\n return acc\n }, {} as any)\n}\n\nexport function ButtonClose(props: any) {\n return (\n \n \n \n )\n}\n\nexport default React.memo(ButtonClose)\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport classNames from 'classnames'\nimport { omit } from 'lodash'\n\n/**\n * Display an icon from our sprites.\n *\n * __How to use?__\n *\n * Provide the name of the icon prefixed by a '#'.\n *\n * The default size is 32x32.\n * Avoid random sizes. You can use the \"small\" prop to have a 16x16 icon.\n *\n * There are multiple options to customize the icon and its background.\n */\nexport default function Icon(props) {\n let {\n small,\n height,\n width,\n color,\n size,\n top,\n left,\n white,\n display,\n bgCircle,\n bgColor,\n borderColor,\n bgPadding,\n verticalAlign,\n rendering,\n style,\n } = props\n\n const otherProps = omit(props, Icon.expectedProps)\n\n size = small ? 16 : size\n height = height || (size === 'auto' ? undefined : size)\n width = width || (size === 'auto' ? undefined : size)\n color = white ? '#fff' : color\n\n const cssClasses = {\n 'pos-rel': typeof top === 'number' || typeof left === 'number',\n icon: true,\n 'icon-inline': display === 'inline',\n 'icon-circle': bgCircle,\n }\n\n if (props.type) {\n cssClasses[`icon-${props.type}`] = true\n }\n\n const wrapperStyle = {\n ...(style || {}),\n ...{\n width: width,\n height: height,\n fontSize: 0, // needed because of character white space\n },\n }\n\n if (top) {\n wrapperStyle.top = top + 'px'\n }\n\n if (left) {\n wrapperStyle.left = left + 'px'\n }\n\n if (display === 'block') {\n wrapperStyle.display = 'block'\n }\n\n if (verticalAlign) {\n wrapperStyle.verticalAlign = verticalAlign\n }\n\n if (bgColor) {\n wrapperStyle.backgroundColor = bgColor || '#a0adad'\n }\n\n if (borderColor) {\n wrapperStyle.border = `1px solid ${borderColor}`\n }\n\n if (typeof bgPadding !== 'undefined') {\n wrapperStyle.padding = bgPadding + 'px'\n }\n\n if (props.className) {\n cssClasses[props.className] = true\n }\n\n const renderMode = {\n [rendering]: color,\n strokeWidth: (isNaN(size) ? 32 : size) / 32,\n }\n\n const svgStyle = {\n [rendering]: color,\n }\n\n /**\n * Set color variable\n */\n if (color !== 'currentColor') {\n svgStyle['--color'] = color\n }\n\n return (\n \n \n \n \n \n )\n}\n\n/**\n * Mainly used to extract any other props passed by the user\n * @type {Array}\n */\nIcon.expectedProps = [\n 'bgPadding',\n 'bgCircle',\n 'bgColor',\n 'borderColor',\n 'className',\n 'color',\n 'display',\n 'height',\n 'name',\n 'size',\n 'small',\n 'top',\n 'left',\n 'verticalAlign',\n 'white',\n 'width',\n 'render',\n 'style',\n]\n\nIcon.propTypes = {\n /**\n * The icon background becomes a circle.\n */\n bgCircle: PropTypes.bool,\n /**\n * The icon background color; valid html/hex color\n */\n bgColor: PropTypes.string,\n /**\n * Border around the icon\n */\n borderColor: PropTypes.string,\n /**\n * A padding is created between the icon and its wrapper. (Icon size is affected)\n */\n bgPadding: PropTypes.number,\n /**\n * Any CSS class\n */\n className: PropTypes.string,\n /**\n * Color of the icon; valid html/hex color. If not provided, the icon's fill attribute is excluded.\n */\n color: PropTypes.string,\n /**\n * The icon display type; inline-block by default\n */\n display: PropTypes.string,\n /**\n * The icon height. CSS value or number.\n */\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n /**\n * Name of the icon = name of the svg file\n */\n name: PropTypes.string,\n /**\n * Shorcut to set width and height to same size (square format). CSS value or number.\n */\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n /**\n * Use fill or stroke mode\n */\n rendering: PropTypes.oneOf(['fill', 'stroke']),\n /**\n * 16x16 size shortcut; use in general with text\n */\n small: PropTypes.bool,\n /**\n * top offset; helper to align with text by offseting the relative position\n */\n top: PropTypes.number,\n /**\n * left offset; helper to align with text by offseting the relative position\n */\n left: PropTypes.number,\n /**\n * verticalAlign; if you need a different inline alignment (top, baseline, ...)\n */\n verticalAlign: PropTypes.string,\n /**\n * white color shortcut\n */\n white: PropTypes.bool,\n /**\n * The icon width. CSS value or number.\n */\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n /**\n * ico-* CSS class\n */\n type: PropTypes.string,\n title: PropTypes.string,\n style: PropTypes.shape({}),\n}\n\nIcon.defaultProps = {\n size: 32,\n display: 'inline',\n rendering: 'fill',\n color: 'currentColor',\n}\n","import Clipboard from 'clipboard'\nimport _ from 'lodash'\nimport React, { PureComponent } from 'react'\nimport Button from '../Button'\nimport Icon from '../Icon'\n\nconst successIcon = \n\nconst failIcon = \n\ninterface IClipboardButtonProps {\n text: string\n color?: string\n top?: number\n}\n\ninterface IState {\n copied: '' | 'success' | 'fail'\n}\n\nexport default class ClipboardButton extends PureComponent {\n _clipboard?: Clipboard\n _element: any\n\n constructor(props: IClipboardButtonProps) {\n super(props)\n this.elRef = this.elRef.bind(this)\n this.state = {\n copied: '',\n }\n }\n\n componentWillUnmount() {\n this._clipboard && this._clipboard.destroy()\n }\n\n componentDidMount() {\n this._clipboard = new Clipboard(this._element, { text: () => this.props.text })\n }\n\n notifyCopy(successful: boolean) {\n this.setState({ copied: successful ? 'success' : 'fail' })\n\n setTimeout(() => {\n if (this._element) {\n this.setState({ copied: '' })\n }\n }, 3000)\n }\n\n elRef(element: any) {\n this._element = element\n if (element && this._element) {\n this._clipboard = new Clipboard(this._element, { text: () => this.props.text })\n this._clipboard.on('success', () => this.notifyCopy(true))\n this._clipboard.on('error', () => this.notifyCopy(false))\n } else {\n this._clipboard && this._clipboard.destroy()\n }\n }\n\n render() {\n if (!Clipboard.isSupported()) {\n return null\n }\n const { copied } = this.state\n const styles = _.isFinite(this.props.top)\n ? { position: 'relative', top: `${this.props.top}px` }\n : {}\n\n return (\n \n \n \n )\n }\n}\n","import ButtonBasic from '../ButtonBasic'\nimport Icon from '../Icon'\nimport React from 'react'\n\ninterface IButtonTHProps {\n [prop: string]: any\n sortBy: string\n sortOrder: 'asc' | 'desc'\n onClick: (sortBy: any) => void\n currentSortBy: string\n children?: React.ReactNode\n}\n\nexport function ButtonTH(props: IButtonTHProps) {\n const { sortBy, currentSortBy, sortOrder, onClick, children, className, ...otherProps } = props\n\n return (\n \n {children}\n \n \n )\n}\n\nexport default React.memo(ButtonTH)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { ButtonClose } from 'ui-framework'\n\n/**\n * Form component\n */\nexport function Form(props) {\n const { children, onCancel, onSubmit } = props\n\n return (\n
\n \n {children}\n \n )\n}\n\nForm.propTypes = {\n children: PropTypes.node,\n onSubmit: PropTypes.func,\n onCancel: PropTypes.func,\n}\n\nexport default React.memo(Form)\n","import React from 'react'\nimport Icon from '../Icon'\nimport Tooltip from '../Tooltip'\n\nexport function InfoTip(props: {\n children: React.ReactNode\n id: string\n place?: string\n icon?: string\n /** Control the vertical alignment of the icon */\n top?: number\n iconColor?: string\n delayShow?: number\n}) {\n const { children, id, place, icon, top, iconColor } = props\n const [tipId] = React.useState(Math.random() + id)\n return (\n <>\n \n \n {children}\n \n \n )\n}\n\nexport default React.memo(InfoTip)\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport PropTypes from 'prop-types'\nimport React, { Component } from 'react'\n\n/**\n * Extended input field\n *\n * Behaves like a normal html input field but decorated with behaviours\n * like auto select content when focused, etc.\n */\nexport default class InputBasic extends Component {\n constructor(props) {\n super(props)\n this.inputRef = this.inputRef.bind(this)\n this.onChange = this.onChange.bind(this)\n }\n\n componentDidMount() {\n if (this.props.focusOnMount) {\n this.inputField.focus()\n }\n if (this.props.scrollToOnMount) {\n this.inputField.scrollIntoView({\n behavior: 'smooth',\n })\n }\n }\n\n /**\n * Handle the native onChange event.\n */\n onChange(event) {\n var value = event.target.value\n const { type, onChange } = this.props\n\n if (type === 'number' || type === 'range' || Number.isFinite(this.props.value)) {\n if (value.length > 0) {\n const convertedValue = Number(value)\n if (!isNaN(convertedValue)) {\n value = convertedValue\n }\n }\n } else if (type === 'checkbox') {\n value = event.target.checked\n }\n\n switch (this.props.onChangeEmit) {\n case 'name-value':\n onChange(event.target.name, value, event)\n break\n case 'value':\n onChange(value, event)\n break\n default:\n onChange(event)\n }\n }\n\n selectContent(event) {\n event.target.select()\n }\n\n inputRef(input) {\n this.inputField = input\n }\n\n render() {\n const { focusOnMount, scrollToOnMount, onChange, onChangeEmit, selectOnFocus, ...otherProps } =\n this.props\n\n if (selectOnFocus) {\n otherProps.onFocus = this.selectContent\n }\n\n if (this.props.type === 'checkbox') {\n otherProps.checked = this.props.value\n }\n\n return \n }\n}\n\nInputBasic.propTypes = {\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.bool]),\n /**\n * Callback for the on blur event.\n */\n onBlur: PropTypes.func,\n /**\n * Callback for the on change event.\n */\n onChange: PropTypes.func,\n /**\n * Callback for the on focus event.\n */\n onFocus: PropTypes.func,\n /**\n * Will focus the input when it is mounted. Can be used to improve UX.\n */\n focusOnMount: PropTypes.bool,\n /**\n * Will scroll the viewport to the element when it is mounted\n */\n scrollToOnMount: PropTypes.bool,\n /**\n * Select the content automatically when the field is focused\n */\n selectOnFocus: PropTypes.bool,\n /**\n * Choose what the argument of the onChange callback will be.\n * - event: DOM event; like a normal input. onChange(event)\n * - value: onChange(event.target.value, event)\n * - name-value: onChange(event.target.name, event.target.value, event)\n */\n onChangeEmit: PropTypes.oneOf(['event', 'value', 'name-value']),\n /**\n * Valid html input type except checkbox\n */\n type: PropTypes.oneOf([\n 'email',\n 'text',\n 'password',\n 'tel',\n 'number',\n 'textarea',\n 'checkbox',\n 'range',\n ]),\n}\n\nInputBasic.defaultProps = {\n focusOnMount: false,\n scrollToOnMount: false,\n selectOnFocus: false,\n onChangeEmit: 'event',\n type: 'text',\n}\n","import PropTypes from 'prop-types'\nimport InputBasic from '../InputBasic'\nimport { Icon } from 'ui-framework'\nimport React, { useState } from 'react'\nimport Preloader from 'bzx-common/src/shared-components/Preloader'\n\nexport function Input(props) {\n const [isFocused, setIsFocused] = useState(false)\n const { className, discreet, icon, withLoader, isLoading, value, ...otherProps } = props\n let extraClass = `${discreet ? 'inputfield-discreet' : 'inputfield'} ${className || ''}`\n\n if (icon) {\n extraClass += ' input-icon--input-padding'\n return (\n
\n \n \n
\n )\n }\n\n if (withLoader) {\n const showLoader = !isFocused && isLoading\n const inputText = showLoader ? '' : value\n return (\n
\n setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n className={extraClass}\n {...otherProps}\n />\n {showLoader && (\n
\n \n
\n )}\n
\n )\n }\n\n return \n}\n\nInput.propTypes = {\n discreet: PropTypes.bool.isRequired,\n isLoading: PropTypes.bool.isRequired,\n className: PropTypes.string,\n id: PropTypes.string,\n name: PropTypes.string,\n style: PropTypes.shape({}),\n placeholder: PropTypes.string,\n value: PropTypes.any,\n onChange: PropTypes.func,\n type: PropTypes.string,\n onChangeEmit: PropTypes.oneOf(['event', 'value', 'name-value']),\n step: PropTypes.number,\n min: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n max: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n readOnly: PropTypes.bool,\n icon: PropTypes.string,\n withLoader: PropTypes.bool,\n focusOnMount: PropTypes.bool,\n disabled: PropTypes.bool,\n}\n\nInput.defaultProps = {\n discreet: false,\n isLoading: false,\n withLoader: false,\n}\n\nexport default React.memo(Input)\n","import React from 'react'\nimport ReactModal from 'react-modal'\n\ninterface IModalProps extends ReactModal.Props {\n children: React.ReactNode\n}\n\nexport default function Modal({\n children,\n overlayClassName,\n className,\n ...otherProps\n}: IModalProps) {\n return (\n \n {children}\n \n )\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React from 'react'\nimport RcSlider, { SliderProps } from 'rc-slider'\n\nconst percentMarks = {\n 0: '',\n 25: '',\n 50: '',\n 75: '',\n 100: '',\n}\n\nconst dayMarks = {\n 0: '',\n 91.25: '',\n 182.5: '',\n 273.75: '',\n 365: '',\n}\n\ninterface ISliderProps extends SliderProps {\n id?: string\n max: number\n name?: string\n onChangeNameValue?: (name: any, value: number) => void\n type?: 'colored'\n value: number\n valueOnHandle?: boolean\n withPercentMarks?: boolean\n}\n\nexport default class Slider extends React.Component {\n static defaultProps = {\n valueOnHandle: false,\n withPercentMarks: false,\n }\n\n constructor(props: any) {\n super(props)\n this.onChange = this.onChange.bind(this)\n }\n\n /**\n * Handle the native onChange event.\n */\n onChange(value: number) {\n if (this.props.onChange) {\n this.props.onChange(value)\n } else if (this.props.onChangeNameValue && this.props.name) {\n this.props.onChangeNameValue(this.props.name, value)\n }\n }\n render() {\n const {\n onChangeNameValue,\n onChange,\n valueOnHandle,\n withPercentMarks,\n className,\n type,\n ...otherProps\n } = this.props\n const percentSlider = this.props.value / this.props.max\n let cssClass = type === 'colored' ? 'colored-slider' : 'ooki-slider'\n const cssClassMark =\n type === 'colored'\n ? percentSlider < 1 / 3\n ? 'slider--first-third'\n : percentSlider < 2 / 3\n ? 'slider--second-third'\n : 'slider--third-third'\n : ''\n const rcSliderProps: any = {}\n valueOnHandle && (cssClass += ' value-on-handle')\n className && (cssClass += ` ${className}`)\n if (withPercentMarks && typeof this.props.max === 'number') {\n rcSliderProps.marks = {\n [this.props.max / 4]: '',\n [this.props.max / 2]: '',\n [(this.props.max / 4) * 3]: '',\n [this.props.max]: '',\n }\n cssClass += ' with-percent-marks'\n }\n\n return (\n \n )\n }\n}\n","import React, { Component } from 'react'\nimport { Slider, Button } from 'ui-framework'\n\ninterface ISliderPercentProps {\n className?: string\n onInsertMaxValue: (value: number) => void\n percentSlider: number\n maxSliderValue: number\n onAfterChange?: () => void\n}\n\nexport default class SliderPercent extends Component {\n private _input: HTMLInputElement | null = null\n\n constructor(props: ISliderPercentProps) {\n super(props)\n }\n public async componentDidMount() {\n if (this._input) {\n this._input.focus()\n }\n }\n\n public render() {\n const sliderValue = this.props.percentSlider * this.props.maxSliderValue\n return (\n
\n \n \n
\n )\n }\n\n public onChange = (value: number) => {\n this.props.onInsertMaxValue(value / this.props.maxSliderValue)\n }\n\n public onAfterChange = (value: number) => {\n if (this.props.onAfterChange) {\n this.props.onInsertMaxValue(value / this.props.maxSliderValue)\n this.props.onAfterChange()\n }\n }\n\n public setMaxPercent = () => {\n this.props.onInsertMaxValue(1)\n }\n}\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport RcSwitch from 'rc-switch'\n\n/**\n * A switch component that you can use instead of a checkbox.\n */\nexport default class Switch extends React.Component {\n constructor(props) {\n super(props)\n this.onChange = this.onChange.bind(this)\n }\n\n /**\n * Handle the native onChange event.\n */\n onChange(newValue) {\n const onChange = this.props.onChange\n\n switch (this.props.onChangeEmit) {\n case 'value':\n onChange(newValue, event)\n break\n case 'name-value':\n onChange(this.props.name, newValue, event)\n break\n default:\n onchange(event)\n }\n }\n\n render() {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { value, onChangeEmit, ...otherProps } = this.props\n return \n }\n}\n\nSwitch.propTypes = {\n /**\n * Optional name attribute. Useful with onChangeEmit = name-value.\n */\n name: PropTypes.string,\n /**\n * Callback function to fire when the switch is clicked\n */\n onChange: PropTypes.func.isRequired,\n /**\n * Choose what the argument of the onChange callback will be.\n * - value: onChange(event.target.value, event)\n * - name-value: onChange(event.target.name, event.target.value, event)\n */\n onChangeEmit: PropTypes.oneOf(['value', 'name-value']),\n /**\n * Switch value\n */\n value: PropTypes.bool.isRequired,\n /**\n * Disable the switch\n */\n disabled: PropTypes.bool,\n checkedChildren: PropTypes.node,\n unCheckedChildren: PropTypes.node,\n}\n\nSwitch.defaultProps = {\n checkedChildren: 'on',\n disabled: false,\n onChangeEmit: 'value',\n unCheckedChildren: 'off',\n}\n","import { useState, useRef } from 'react'\n\n/**\n * Find the matching minWidth mediaQuery in a list of queries and returns the associated value.\n *\n * eg: [[200, 'sm'], [300, 'md'], [400, 'lg']] -> if width === 325 -> returns 'md'\n */\nfunction getMqValue(mqs: { minWidth: [number, string][] }, width: number) {\n let matchingIndex = mqs.minWidth.findIndex((item) => item[0] > width)\n if (matchingIndex === 0 && width < mqs.minWidth[0][0]) {\n return ''\n }\n matchingIndex = matchingIndex === -1 ? mqs.minWidth.length - 1 : matchingIndex - 1\n return mqs.minWidth[matchingIndex][1]\n}\n\n/**\n * Observes an element dimension and returns a matching query value when its size changes.\n */\nexport default function useElementSizeQuery(mediaQueries: {\n minWidth: [number, string][]\n}): [{ minWidth: string }, (element: HTMLElement | null) => void] {\n const elementRef = useRef()\n const [media, setMedia] = useState({ minWidth: '' })\n const mediaRef = useRef({ minWidth: '' })\n\n const observer = useRef(\n new ResizeObserver((entries) => {\n const width = entries[0].contentBoxSize\n ? entries[0].contentBoxSize[0].inlineSize\n : entries[0].contentRect.width\n\n const newWidthValue = getMqValue(mediaQueries, width)\n if (newWidthValue !== mediaRef.current.minWidth) {\n const update = { minWidth: newWidthValue }\n mediaRef.current = update\n setMedia(update)\n }\n })\n )\n\n function setRef(ref: HTMLElement | null) {\n if (ref !== elementRef.current) {\n if (elementRef.current) {\n observer.current.unobserve(elementRef.current)\n }\n }\n if (ref) {\n observer.current.observe(ref)\n }\n elementRef.current = ref\n }\n\n return [media, setRef]\n}\n","/**\n * @param hash wallet / transaction hash\n * @param charsAtBeginning how many chars left at the beginning. default: 6\n * @param charsAtEnd how many chars left at the end. default: 4\n */\nfunction shortHash(hash: string, charsAtBeginning = 6, charsAtEnd = 4) {\n if (hash === '') {\n return ''\n }\n let shortenedHash = hash.substring(0, charsAtBeginning)\n if (charsAtBeginning + charsAtEnd < hash.length) {\n shortenedHash = shortenedHash + '…' + hash.substring(hash.length - charsAtEnd)\n }\n return shortenedHash\n}\n\nexport default {\n shortHash,\n}\n","export function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * Generic retry function of async operations depending on errors\n * @param task the call that should be made\n * @param attempts how many attempts\n * @param interval how much time between calls\n * @param shouldRetry a test that can check if a retry attempt should be done depending on the error\n */\nexport async function asyncRetry(\n task: () => Promise,\n attempts: number,\n interval: number,\n shouldRetry?: (error: Error) => boolean\n): Promise {\n try {\n const result = await task()\n return result\n } catch (err) {\n const retry = shouldRetry ? shouldRetry(err) : true\n if (retry && attempts > 0) {\n await sleep(interval)\n return asyncRetry(task, attempts - 1, interval, shouldRetry)\n } else {\n throw err\n }\n }\n}\n\nexport default {\n asyncRetry,\n sleep,\n}\n","import assetUtils, { Asset } from 'app-lib/assetUtils'\nimport { BigNumber } from '@0x/utils'\nimport { FulcrumProvider } from '../../../fulcrum/src/services/FulcrumProvider'\nimport appConfig, { stakingConfig } from '../config/appConfig'\nimport { ChainId } from '../config/chains/chainCommon'\nimport { stakeableToken, unstakeableToken } from '../domain/staking/stakingTypes'\nimport providerUtils from './providerUtils'\n\ninterface ITokenBalances {\n ooki: BigNumber\n vbzrx: BigNumber\n iooki: BigNumber\n slp_ooki_eth: BigNumber\n}\n\n/**\n * Checks if the amounts to be staked are valid.\n * @param userBalances The balances of unstaked tokens in user wallet\n * @param tokensToStake The amount of tokens to be staked\n */\nfunction verifyStake(userBalances: ITokenBalances, tokensToStake: ITokenBalances) {\n const { ooki, vbzrx, iooki, slp_ooki_eth } = tokensToStake\n\n // All zeros\n if (ooki.eq(0) && vbzrx.eq(0) && iooki.eq(0) && slp_ooki_eth.eq(0)) {\n return false\n }\n // Some negative\n if (ooki.isNegative() || vbzrx.isNegative() || iooki.isNegative() || slp_ooki_eth.isNegative()) {\n return false\n }\n // Some bigger than total balance\n if (\n ooki.gt(userBalances.ooki) ||\n vbzrx.gt(userBalances.vbzrx) ||\n iooki.gt(userBalances.iooki) ||\n slp_ooki_eth.gt(userBalances.slp_ooki_eth)\n ) {\n return false\n }\n return true\n}\n\n/**\n * An helper to get contracts and data related to staking easily.\n * - currentAccount can be '' so we dont want that\n * - need web3Wrapper to send transactions\n * Throws if any dependency is missing.\n */\nfunction getDependenciesStrict(provider: FulcrumProvider) {\n const deps = providerUtils.getDependenciesStrict(provider)\n const stakingContract = deps.contractsSource.getStakingContract()\n const voteDelegatorContract = deps.contractsSource.getVoteDelegatorContract()\n return { ...deps, stakingContract, voteDelegatorContract }\n}\n\n/**\n * Set the spending allowance of tokens by the staking contract (so that user can stake)\n * This is expected to be called for ooki, vbzrx, iooki and/or slp\n */\nasync function setStakingAllowance(\n provider: FulcrumProvider,\n asset: keyof typeof Asset,\n amount: BigNumber\n) {\n const { contractsSource, userAddress } = getDependenciesStrict(provider)\n const erc20Address = assetUtils.getAddress(provider.currentChainId, asset as Asset)\n const erc20Contract = contractsSource.getErc20Contract(erc20Address)\n\n const txHash = await erc20Contract\n .approve(stakingConfig.stakingContract, amount)\n .sendTransactionAsync({\n from: userAddress,\n })\n\n return providerUtils.waitForTransactionMined(provider, txHash)\n}\n\nasync function getVestedBzrxBalance(provider: FulcrumProvider) {\n const { contractsSource, userAddress } = getDependenciesStrict(provider)\n const vbzrxContract = contractsSource.getBzrxVestingContract()\n return vbzrxContract.vestedBalanceOf(userAddress).callAsync()\n}\n\n/**\n * Mostly for users who hold vbzrx in their wallet and just want to claim their bzrx\n */\nfunction claimVestedBZRX(provider: FulcrumProvider) {\n const { contractsSource } = getDependenciesStrict(provider)\n const vbzrxContract = contractsSource.getBzrxVestingContract()\n const tx = vbzrxContract.claim()\n return providerUtils.runTx(provider, tx, vbzrxContract)\n}\n\n/**\n * User gets 5 types of rewards (earnings)\n * `[ooki, stableCoin, ookiVesting, stableCoinVesting, sushi]`\n * NOTE 1: ooki amount is actually the sum of \"real\" staking rewards + vested staked vbzrx\n * NOTE 2: SUSHI rewards are coming from user having staked SLP (Sushi LP)\n */\nconst getStakingRewards = async (\n provider: FulcrumProvider\n): Promise<{\n ooki: BigNumber\n stableCoin: BigNumber\n ookiVesting: BigNumber\n stableCoinVesting: BigNumber\n sushi: BigNumber\n}> => {\n const { userAddress, stakingContract } = getDependenciesStrict(provider)\n\n // [ooki, stableCoin, ookiVesting, stableCoinVesting, sushi]\n const result = await stakingContract.earned(userAddress).callAsync({\n from: userAddress,\n })\n\n return {\n ooki: result[0].div(10 ** 18),\n stableCoin: result[1].div(10 ** 18),\n ookiVesting: result[2].div(10 ** 18), // TODO\n stableCoinVesting: result[3].div(10 ** 18),\n sushi: result[4].div(10 ** 18),\n }\n}\n\n/**\n * Part of the staking rewards that are actually vested OOKI coming from staked vbzrx\n */\nasync function getVestedOokiInRewards(provider: FulcrumProvider, vbzrxStaked: BigNumber) {\n const { userAddress, stakingContract, web3Wrapper } = getDependenciesStrict(provider)\n\n const vestingLastSyncTime = await stakingContract.vestingLastSync(userAddress).callAsync({\n from: userAddress,\n })\n /**\n * Note: it is better to use the blockchain time than the user browser local time\n */\n const lastBlockTime = await web3Wrapper.getBlockTimestampAsync('latest')\n const now = new BigNumber(lastBlockTime)\n\n const vestedOokiInRewards = now\n .minus(vestingLastSyncTime)\n .div(appConfig.vestingDurationAfterCliff)\n .times(vbzrxStaked)\n .times(10)\n\n return vestedOokiInRewards\n}\n\n/**\n * Returns the amount of staked tokens of a user.\n *\n * The amounts are in base units so they must be divided by 10 ** decimals\n * @param address the wallet of the user\n */\nasync function getStakedBalances(provider: FulcrumProvider) {\n const { stakingContract, userAddress } = getDependenciesStrict(provider)\n const [ooki, iooki, vbzrx, slp_ooki_eth] = await stakingContract\n .balanceOfByAssets(userAddress)\n .callAsync()\n return { ooki, iooki, vbzrx, slp_ooki_eth }\n}\n\n/**\n * Get addresses of the stakeable tokens.\n * Throws an error if there is a missing address\n */\nfunction getStakeableAddresses(chainId: ChainId) {\n return {\n ooki: assetUtils.getAddress(chainId, Asset.OOKI),\n vbzrx: assetUtils.getAddress(chainId, Asset.vBZRX),\n iooki: assetUtils.getAddress(chainId, Asset.IOOKI),\n slp_ooki_eth: assetUtils.getAddress(chainId, Asset.SLP_OOKI_ETH),\n }\n}\n\n/**\n * Get the staking specific tokens balances from a user wallet\n * @param userAddress user wallet\n */\nasync function getStakeableBalances(provider: FulcrumProvider) {\n const { helperContract, chainId, userAddress } = getDependenciesStrict(provider)\n const addresses = getStakeableAddresses(chainId)\n const [ooki, vbzrx, iooki, slp_ooki_eth] = await helperContract\n .balanceOf(\n [addresses.ooki, addresses.vbzrx, addresses.iooki, addresses.slp_ooki_eth],\n userAddress\n )\n .callAsync()\n\n return { ooki, vbzrx, iooki, slp_ooki_eth }\n}\n\n/**\n * Get the spending allowance for each stakeable asset for a user wallet\n * @param userAddress user wallet\n */\nasync function getStakeableAllowances(provider: FulcrumProvider) {\n const { helperContract, chainId, userAddress } = getDependenciesStrict(provider)\n const addresses = getStakeableAddresses(chainId)\n const [ooki, vbzrx, iooki, slp_ooki_eth] = await helperContract\n .allowance(\n [addresses.ooki, addresses.vbzrx, addresses.iooki, addresses.slp_ooki_eth],\n userAddress,\n stakingConfig.stakingContract\n )\n .callAsync()\n\n return { ooki, vbzrx, iooki, slp_ooki_eth }\n}\n\n/**\n * Send stake request.\n * Amounts should be in decimal base.\n * eg: if user wants to unstake 10 OOKI then ooki argument should be new BigNumber(10)\n * @param tokenAmounts amount of ooki, vbzrx, iooki and slp to stake\n */\nfunction stake(provider: FulcrumProvider, tokenAmounts: Map) {\n const { stakingContract, chainId } = getDependenciesStrict(provider)\n const stakeableAddresses = getStakeableAddresses(chainId)\n\n const { addresses, amounts } = Array.from(tokenAmounts).reduce(\n (acc, [token, amount]) => {\n acc.amounts.push(amount.times(10 ** 18))\n acc.addresses.push(stakeableAddresses[token])\n return acc\n },\n { addresses: [] as string[], amounts: [] as BigNumber[] }\n )\n\n const tx = stakingContract.stake(addresses, amounts)\n return providerUtils.runTx(provider, tx, stakingContract)\n}\n\n/**\n * Send unstake request.\n * Amounts should be in decimal base.\n * eg: if user wants to unstake 10 OOKI then ooki argument should be new BigNumber(10)\n * @param tokens amount of ooki, vbzrx and slp to stake\n */\nfunction unstake(provider: FulcrumProvider, tokenAmounts: Map) {\n const { stakingContract, chainId } = getDependenciesStrict(provider)\n const stakeableAddresses = getStakeableAddresses(chainId)\n\n const { addresses, amounts } = Array.from(tokenAmounts).reduce(\n (acc, [token, amount]) => {\n acc.amounts.push(amount.times(10 ** 18))\n acc.addresses.push(stakeableAddresses[token])\n return acc\n },\n { addresses: [] as string[], amounts: [] as BigNumber[] }\n )\n\n const tx = stakingContract.unstake(addresses, amounts)\n return providerUtils.runTx(provider, tx, stakingContract)\n}\n\n/**\n * Claims 3CRV and OOKI\n */\nfunction claimStakingRewards(provider: FulcrumProvider, shouldRestake = false) {\n const { stakingContract } = getDependenciesStrict(provider)\n const tx = stakingContract.claim(shouldRestake)\n return providerUtils.runTx(provider, tx, stakingContract)\n}\n\nfunction claimSushiRewards(provider: FulcrumProvider) {\n const { stakingContract } = getDependenciesStrict(provider)\n const tx = stakingContract.claimSushi()\n return providerUtils.runTx(provider, tx, stakingContract)\n}\n\nasync function getVotingPower(provider: FulcrumProvider) {\n const { stakingContract, userAddress } = getDependenciesStrict(provider)\n const votingPowerStaked = await stakingContract.votingFromStakedBalanceOf(userAddress).callAsync()\n const votingPowerTotal = await stakingContract.votingBalanceOfNow(userAddress).callAsync()\n return {\n votingPowerStaked: votingPowerStaked.div(10 ** 18),\n votingPowerTotal: votingPowerTotal.div(10 ** 18),\n }\n}\n\nasync function getGlobalStaked(provider: FulcrumProvider) {\n const { contractsSource } = providerUtils.getDependenciesStrictRead(provider)\n const { stakingContract, sushiPoolIdSLP } = stakingConfig\n const masterChefSushi = contractsSource.getMasterChefSushiContract()\n const globalStaked = await providerUtils.getWalletBalances(provider, stakingContract, [\n Asset.OOKI,\n Asset.vBZRX,\n Asset.IOOKI,\n ])\n const inSushi = await masterChefSushi\n .userInfo(new BigNumber(sushiPoolIdSLP), stakingContract)\n .callAsync()\n\n globalStaked.push({ token: Asset.SLP_OOKI_ETH, amount: inSushi.amount.div(10 ** 18) })\n return globalStaked\n}\n\nfunction getDelegate(provider: FulcrumProvider) {\n const { voteDelegatorContract, userAddress } = getDependenciesStrict(provider)\n return voteDelegatorContract.delegates(userAddress).callAsync()\n}\n\nfunction delegate(provider: FulcrumProvider, delegateAddress: string) {\n const { voteDelegatorContract } = getDependenciesStrict(provider)\n const tx = voteDelegatorContract.delegate(delegateAddress)\n return providerUtils.runTx(provider, tx, voteDelegatorContract)\n}\n\nexport default {\n claimStakingRewards,\n claimSushiRewards,\n claimVestedBZRX,\n delegate,\n getDelegate,\n getGlobalStaked,\n getStakeableAddresses,\n getStakeableAllowances,\n getStakeableBalances,\n getStakedBalances,\n getStakingRewards,\n getVestedBzrxBalance,\n getVestedOokiInRewards,\n getVotingPower,\n setStakingAllowance,\n stake,\n unstake,\n verifyStake,\n}\n"],"sourceRoot":""}