{"version":3,"sources":["jsdelivr-header.js","/npm/@pancakeswap/smart-router@7.2.4/dist/evm.js"],"names":[],"mappings":"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GV,KAAM,qBACN,QAAS,GACT,gBAAiB,UACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,YAGV,KAAM,6BACN,QAAS,GACT,gBAAiB,UACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,aAAc,QACd,KAAM,OACN,KAAM,UAGV,KAAM,sBACN,QAAS,CACP,CACE,aAAc,QACd,KAAM,SACN,KAAM,UAGV,gBAAiB,UACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,SACN,KAAM,YAGV,KAAM,kBACN,QAAS,CACP,CACE,aAAc,oCACd,KAAM,GACN,KAAM,UAGV,gBAAiB,aACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,SACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,SACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,UACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,aACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,aACN,KAAM,YAGV,aAAc,iDACd,KAAM,SACN,KAAM,UAGV,KAAM,oBACN,QAAS,CACP,CACE,aAAc,QACd,KAAM,SACN,KAAM,UAGV,gBAAiB,UACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,SACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,SACN,KAAM,WAER,CACE,aAAc,SACd,KAAM,MACN,KAAM,UAER,CACE,aAAc,QACd,KAAM,YACN,KAAM,SAER,CACE,aAAc,QACd,KAAM,YACN,KAAM,SAER,CACE,aAAc,UACd,KAAM,aACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,aACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,YACN,KAAM,YAGV,aAAc,oCACd,KAAM,SACN,KAAM,UAGV,KAAM,OACN,QAAS,CACP,CACE,aAAc,QACd,KAAM,SACN,KAAM,UAGV,gBAAiB,UACjB,KAAM,aAKV,SAAS,OAAO,GACd,OAAO,OAAO,KAAK,G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xB,aAAc,YACd,KAAM,CAAC,EAAU,IAErB,GAEE,kBAAoB,mBACxB,kBAAkB,IAAM,qBAGxB,IAAI,oCAAsC,CACxC,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,QACN,KAAM,YAGV,KAAM,OACN,QAAS,GACT,gBAAiB,UACjB,KAAM,YAER,CACE,OAAQ,GACR,KAAM,YACN,QAAS,GACT,gBAAiB,UACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,gBACN,KAAM,YAGV,KAAM,aACN,QAAS,GACT,gBAAiB,UACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,gBACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,YACN,KAAM,YAGV,KAAM,aACN,QAAS,GACT,gBAAiB,UACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,gBACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,UACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,eACN,KAAM,YAGV,KAAM,oBACN,QAAS,GACT,gBAAiB,UACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,gBACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,YACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,UACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,eACN,KAAM,YAGV,KAAM,oBACN,QAAS,GACT,gBAAiB,UACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,gBACN,KAAM,YAGV,KAAM,cACN,QAAS,GACT,gBAAiB,UACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,gBACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,YACN,KAAM,YAGV,KAAM,cACN,QAAS,G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ACd,KAAM,iBACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,SACN,KAAM,YAGV,gBAAiB,aACjB,KAAM,eAER,CACE,OAAQ,GACR,KAAM,QACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,YAGV,gBAAiB,OACjB,KAAM,YAER,CACE,OAAQ,GACR,KAAM,WACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,YAGV,gBAAiB,OACjB,KAAM,YAER,CACE,OAAQ,GACR,KAAM,UACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,YAGV,gBAAiB,OACjB,KAAM,YAER,CACE,OAAQ,GACR,KAAM,gBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,YAGV,gBAAiB,OACjB,KAAM,YAER,CACE,OAAQ,GACR,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,YAGV,gBAAiB,OACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,eACN,KAAM,UAER,CACE,aAAc,SACd,KAAM,eACN,KAAM,UAER,CACE,aAAc,QACd,KAAM,OACN,KAAM,UAGV,KAAM,wBACN,QAAS,GACT,gBAAiB,OACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,aAAc,QACd,KAAM,OACN,KAAM,SAER,CACE,aAAc,YACd,KAAM,OACN,KAAM,aAER,CACE,aAAc,UACd,KAAM,WACN,KAAM,YAGV,KAAM,kBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,YACN,KAAM,WAER,CACE,aAAc,YACd,KAAM,0BACN,KAAM,aAER,CACE,aAAc,WACd,KAAM,gCACN,KAAM,YAER,CACE,aAAc,UACd,KAAM,oBACN,KAAM,YAGV,gBAAiB,aACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,UACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,WACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,WACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,OACN,KAAM,YAGV,aAAc,+DACd,KAAM,SACN,KAAM,UAGV,KAAM,8BACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,YACN,KAAM,YAGV,gBAAiB,OACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,UACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,WACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,WACN,KAAM,YAGV,aAAc,2DACd,KAAM,SACN,KAAM,UAGV,KAAM,0BACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,YACN,KAAM,YAGV,gBAAiB,OACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,UACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,WACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,WACN,KAAM,WAER,CACE,aAAc,SACd,KAAM,MACN,KAAM,UAER,CACE,aAAc,UACd,KAAM,oBACN,KAAM,YAGV,aAAc,2DACd,KAAM,SACN,KAAM,UAGV,KAAM,0BACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,YACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,oBACN,KAAM,WAER,CACE,aAAc,SACd,KAAM,0BACN,KAAM,UAER,CACE,aAAc,UACd,KAAM,cACN,KAAM,YAGV,gBAAiB,aACjB,KAAM,aAKN,YAAc,CAChB,CACE,OAAQ,CACN,CACE,aAAc,QACd,KAAM,OACN,KAAM,SAER,CACE,aAAc,UACd,KAAM,WACN,KAAM,YAGV,KAAM,kBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,YACN,KAAM,WAER,CACE,aAAc,YACd,KAAM,wBACN,KAAM,aAER,CACE,aAAc,WACd,KAAM,8BACN,KAAM,YAER,CACE,aAAc,UACd,KAAM,cACN,KAAM,YAGV,gBAAiB,aACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,UACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,WACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,WACN,KAAM,WAER,CACE,aAAc,SACd,KAAM,MACN,KAAM,UAER,CACE,aAAc,UACd,KAAM,oBACN,KAAM,YAGV,aAAc,+CACd,KAAM,SACN,KAAM,UAGV,KAAM,wBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,YACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,oBACN,KAAM,WAER,CACE,aAAc,SACd,KAAM,0BACN,KAAM,UAER,CACE,aAAc,UACd,KAAM,cACN,KAAM,YAGV,gBAAiB,aACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,aAAc,QACd,KAAM,OACN,KAAM,SAER,CACE,aAAc,UACd,KAAM,YACN,KAAM,YAGV,KAAM,mBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,WACN,KAAM,WAER,CACE,aAAc,YACd,KAAM,wBACN,KAAM,aAER,CACE,aAAc,WACd,KAAM,8BACN,KAAM,YAER,CACE,aAAc,UACd,KAAM,cACN,KAAM,YAGV,gBAAiB,aACjB,KAAM,YAER,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,UACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,WACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,SACN,KAAM,WAER,CACE,aAAc,SACd,KAAM,MACN,KAAM,UAER,CACE,aAAc,UACd,KAAM,oBACN,KAAM,YAGV,aAAc,gDACd,KAAM,SACN,KAAM,UAGV,KAAM,yBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,WACN,KAAM,WAER,CACE,aAAc,UACd,KAAM,oBACN,KAAM,WAER,CACE,aAAc,SACd,KAAM,0BACN,KAAM,UAER,CACE,aAAc,UACd,KAAM,cACN,KAAM,YAGV,gBAAiB,aACjB,KAAM,aAGV,SAAS,gCAAgC,GACvC,OAAO,KAAK,WACV,IAAI,WACF,EAAM,MAAM,KAAK,IACf,GAAI,SAAS,GACX,OAAO,EAET,GAAI,SAAS,GACX,OAAO,EAET,GAAI,aAAa,GACf,OAAO,EAET,GAAI,iBAAiB,GACnB,OAAO,EAET,GAAI,kBAAkB,GACpB,OAAO,EAET,MAAM,IAAI,MAAM,0BAA0B,IAAI,KAItD,CACA,S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","file":"/npm/@pancakeswap/smart-router@7.2.4/dist/evm.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@pancakeswap/smart-router@7.2.4/dist/evm.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nvar chunkGYU5FW7D_js = require('./chunk-GYU5FW7D.js');\nvar chains = require('@pancakeswap/chains');\nvar sdk = require('@pancakeswap/sdk');\nvar viem = require('viem');\nvar infinitySdk = require('@pancakeswap/infinity-sdk');\nvar multicall = require('@pancakeswap/multicall');\nvar swapSdkCore = require('@pancakeswap/swap-sdk-core');\nvar gauges = require('@pancakeswap/gauges');\nvar tokens = require('@pancakeswap/tokens');\nvar flatMap = require('lodash/flatMap.js');\nvar memoize2 = require('lodash/memoize.js');\nvar uniqBy = require('lodash/uniqBy.js');\nvar stableSwapSdk = require('@pancakeswap/stable-swap-sdk');\nvar v3Sdk = require('@pancakeswap/v3-sdk');\nvar invariant6 = require('tiny-invariant');\nvar debug = require('debug');\nvar mapValues = require('lodash/mapValues.js');\nvar FixedReverseHeap = require('mnemonist/fixed-reverse-heap.js');\nvar Queue = require('mnemonist/queue.js');\nvar graphqlRequest = require('graphql-request');\nvar tokenLists = require('@pancakeswap/token-lists');\nvar retry = require('async-retry');\nvar stats = require('stats-lite');\nvar zod = require('zod');\nvar sum = require('lodash/sum.js');\nvar chunk = require('lodash/chunk.js');\n\nfunction _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }\n\nvar flatMap__default = /*#__PURE__*/_interopDefault(flatMap);\nvar memoize2__default = /*#__PURE__*/_interopDefault(memoize2);\nvar uniqBy__default = /*#__PURE__*/_interopDefault(uniqBy);\nvar invariant6__default = /*#__PURE__*/_interopDefault(invariant6);\nvar debug__default = /*#__PURE__*/_interopDefault(debug);\nvar mapValues__default = /*#__PURE__*/_interopDefault(mapValues);\nvar FixedReverseHeap__default = /*#__PURE__*/_interopDefault(FixedReverseHeap);\nvar Queue__default = /*#__PURE__*/_interopDefault(Queue);\nvar retry__default = /*#__PURE__*/_interopDefault(retry);\nvar stats__default = /*#__PURE__*/_interopDefault(stats);\nvar sum__default = /*#__PURE__*/_interopDefault(sum);\nvar chunk__default = /*#__PURE__*/_interopDefault(chunk);\n\n// evm/abis/FeeOnTransferDetector.ts\nvar feeOnTransferDetectorAbi = [\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"_factoryV2\",\n        type: \"address\"\n      }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\"\n  },\n  {\n    inputs: [],\n    name: \"PairLookupFailed\",\n    type: \"error\"\n  },\n  {\n    inputs: [],\n    name: \"SameToken\",\n    type: \"error\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address[]\",\n        name: \"tokens\",\n        type: \"address[]\"\n      },\n      {\n        internalType: \"address\",\n        name: \"baseToken\",\n        type: \"address\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amountToBorrow\",\n        type: \"uint256\"\n      }\n    ],\n    name: \"batchValidate\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"buyFeeBps\",\n            type: \"uint256\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"sellFeeBps\",\n            type: \"uint256\"\n          }\n        ],\n        internalType: \"struct TokenFees[]\",\n        name: \"fotResults\",\n        type: \"tuple[]\"\n      }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount0\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\"\n      }\n    ],\n    name: \"pancakeCall\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\"\n      },\n      {\n        internalType: \"address\",\n        name: \"baseToken\",\n        type: \"address\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amountToBorrow\",\n        type: \"uint256\"\n      }\n    ],\n    name: \"validate\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"buyFeeBps\",\n            type: \"uint256\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"sellFeeBps\",\n            type: \"uint256\"\n          }\n        ],\n        internalType: \"struct TokenFees\",\n        name: \"fotResult\",\n        type: \"tuple\"\n      }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  }\n];\n\n// evm/fot.ts\nvar feeOnTransferDetectorAddresses = {\n  [chains.ChainId.ETHEREUM]: \"0xe9200516a475b9e6FD4D1c452858097F345A6760\",\n  [chains.ChainId.SEPOLIA]: \"0xD8b14F915b1b4b1c4EE4bF8321Bea018E72E5cf3\",\n  [chains.ChainId.BSC]: \"0x003BD52f589F23346E03fA431209C29cD599d693\",\n  [chains.ChainId.BSC_TESTNET]: \"0xE83BD854c1fBf54424b4d914163BF855aB1131Aa\",\n  [chains.ChainId.ARBITRUM_ONE]: \"0xD8b14F915b1b4b1c4EE4bF8321Bea018E72E5cf3\",\n  [chains.ChainId.ARBITRUM_SEPOLIA]: \"0xD8b14F915b1b4b1c4EE4bF8321Bea018E72E5cf3\",\n  [chains.ChainId.POLYGON_ZKEVM]: \"0xe9200516a475b9e6FD4D1c452858097F345A6760\",\n  [chains.ChainId.POLYGON_ZKEVM_TESTNET]: \"0xbc60A0d9536B6F75b1FfE18b47364ED684EA0260\",\n  [chains.ChainId.BASE]: \"0xD8b14F915b1b4b1c4EE4bF8321Bea018E72E5cf3\",\n  [chains.ChainId.BASE_SEPOLIA]: \"0xD8b14F915b1b4b1c4EE4bF8321Bea018E72E5cf3\",\n  [chains.ChainId.ZKSYNC]: \"0xED87D01674199355CEfC05648d17E037306d7962\",\n  [chains.ChainId.ZKSYNC_TESTNET]: \"0x869505373d830104130F95c1E7d578dE7E58C0a8\",\n  [chains.ChainId.LINEA]: \"0xD8b14F915b1b4b1c4EE4bF8321Bea018E72E5cf3\",\n  [chains.ChainId.LINEA_TESTNET]: \"0x3412378f17B1b44E8bcFD157EcE1a4f59DA5A77a\"\n};\nvar getFeeOnTransferDetectorContract = (publicClient) => {\n  if (publicClient.chain && publicClient.chain.id in feeOnTransferDetectorAddresses) {\n    return viem.getContract({\n      abi: feeOnTransferDetectorAbi,\n      address: feeOnTransferDetectorAddresses[publicClient.chain.id],\n      client: publicClient\n    });\n  }\n  return null;\n};\nvar AMOUNT = 100000n;\nasync function fetchTokenFeeOnTransfer(publicClient, tokenAddress) {\n  if (!publicClient.chain) {\n    throw new Error(\"Chain not found\");\n  }\n  const contract = getFeeOnTransferDetectorContract(publicClient);\n  const baseToken = sdk.WNATIVE[publicClient.chain.id];\n  if (!contract) {\n    throw new Error(\"Fee on transfer detector contract not found\");\n  }\n  if (!baseToken) {\n    throw new Error(\"Base token not found\");\n  }\n  if (tokenAddress.toLowerCase() === baseToken.address.toLowerCase()) {\n    throw new Error(\"Token is base token\");\n  }\n  return contract.simulate.validate([tokenAddress, baseToken.address, AMOUNT]);\n}\nasync function fetchTokenFeeOnTransferBatch(publicClient, tokens) {\n  if (!publicClient.chain) {\n    throw new Error(\"Chain not found\");\n  }\n  const contract = getFeeOnTransferDetectorContract(publicClient);\n  if (!contract) {\n    throw new Error(\"Fee on transfer detector contract not found\");\n  }\n  const baseToken = sdk.WNATIVE[publicClient.chain.id];\n  if (!baseToken) {\n    throw new Error(\"Base token not found\");\n  }\n  const tokensWithoutBaseToken = tokens.filter(\n    (token) => token.address.toLowerCase() !== baseToken.address.toLowerCase()\n  );\n  return publicClient.multicall({\n    allowFailure: true,\n    contracts: tokensWithoutBaseToken.map(\n      (token) => ({\n        address: contract.address,\n        abi: feeOnTransferDetectorAbi,\n        functionName: \"validate\",\n        args: [token.address, baseToken.address, AMOUNT]\n      })\n    )\n  });\n}\n\n// evm/infinity-router/index.ts\nvar infinity_router_exports = {};\nchunkGYU5FW7D_js.__export(infinity_router_exports, {\n  APISchema: () => schema_exports,\n  Transformer: () => transformer_exports2,\n  fillClPoolsWithTicks: () => fillClPoolsWithTicks,\n  fillPoolsWithBins: () => fillPoolsWithBins,\n  getBestTrade: () => getBestTrade2,\n  getInfinityBinCandidatePools: () => getInfinityBinCandidatePools,\n  getInfinityBinCandidatePoolsWithoutBins: () => getInfinityBinCandidatePoolsWithoutBins,\n  getInfinityBinPoolsWithoutBins: () => getInfinityBinPoolsWithoutBins,\n  getInfinityCandidatePools: () => getInfinityCandidatePools,\n  getInfinityCandidatePoolsLite: () => getInfinityCandidatePoolsLite,\n  getInfinityClCandidatePools: () => getInfinityClCandidatePools,\n  getInfinityClCandidatePoolsWithoutTicks: () => getInfinityClCandidatePoolsWithoutTicks,\n  getInfinityClPoolsWithoutTicks: () => getInfinityClPoolsWithoutTicks,\n  getV3CandidatePools: () => getV3CandidatePools2,\n  getV3Pools: () => getV3Pools,\n  log: () => log2,\n  logger: () => logger2,\n  metric: () => metric2\n});\nfunction getAmountDistribution(amount, distributionPercent) {\n  const percents = [];\n  const amounts = [];\n  for (let i = 1; i <= 100 / distributionPercent; i++) {\n    percents.push(i * distributionPercent);\n    amounts.push(amount.multiply(new sdk.Fraction(i * distributionPercent, 100)));\n  }\n  return [percents, amounts];\n}\n\n// ../utils/viem/parseUnits.ts\nfunction parseUnits(value, decimals) {\n  let [integer, fraction = \"0\"] = value.split(\".\");\n  const negative = integer.startsWith(\"-\");\n  if (negative)\n    integer = integer.slice(1);\n  fraction = fraction.replace(/(0+)$/, \"\");\n  if (decimals === 0) {\n    if (Math.round(Number(`.${fraction}`)) === 1)\n      integer = `${BigInt(integer) + 1n}`;\n    fraction = \"\";\n  } else if (fraction.length > decimals) {\n    const [left, unit, right] = [\n      fraction.slice(0, decimals - 1),\n      fraction.slice(decimals - 1, decimals),\n      fraction.slice(decimals)\n    ];\n    const rounded = Math.round(Number(`${unit}.${right}`));\n    if (rounded > 9)\n      fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, \"0\");\n    else\n      fraction = `${left}${rounded}`;\n    if (fraction.length > decimals) {\n      fraction = fraction.slice(1);\n      integer = `${BigInt(integer) + 1n}`;\n    }\n    fraction = fraction.slice(0, decimals);\n  } else {\n    fraction = fraction.padEnd(decimals, \"0\");\n  }\n  return BigInt(`${negative ? \"-\" : \"\"}${integer}${fraction}`);\n}\n\n// ../utils/tryParseAmount.ts\nfunction tryParseAmount(value, currency) {\n  if (!value || !currency) {\n    return void 0;\n  }\n  try {\n    const typedValueParsed = parseUnits(value, currency.decimals).toString();\n    if (typedValueParsed !== \"0\") {\n      return swapSdkCore.CurrencyAmount.fromRawAmount(currency, BigInt(typedValueParsed));\n    }\n  } catch (error) {\n    console.debug(`Failed to parse input amount: \"${value}\"`, error);\n  }\n  return void 0;\n}\nvar tryParseAmount_default = tryParseAmount;\n\n// evm/v3-router/types/infinityMixedQuoter.ts\nvar InfinityMixedQuoterActions = /* @__PURE__ */ ((InfinityMixedQuoterActions2) => {\n  InfinityMixedQuoterActions2[InfinityMixedQuoterActions2[\"SS_2_EXACT_INPUT_SINGLE\"] = 0] = \"SS_2_EXACT_INPUT_SINGLE\";\n  InfinityMixedQuoterActions2[InfinityMixedQuoterActions2[\"SS_3_EXACT_INPUT_SINGLE\"] = 1] = \"SS_3_EXACT_INPUT_SINGLE\";\n  InfinityMixedQuoterActions2[InfinityMixedQuoterActions2[\"V2_EXACT_INPUT_SINGLE\"] = 2] = \"V2_EXACT_INPUT_SINGLE\";\n  InfinityMixedQuoterActions2[InfinityMixedQuoterActions2[\"V3_EXACT_INPUT_SINGLE\"] = 3] = \"V3_EXACT_INPUT_SINGLE\";\n  InfinityMixedQuoterActions2[InfinityMixedQuoterActions2[\"INFI_CL_EXACT_INPUT_SINGLE\"] = 4] = \"INFI_CL_EXACT_INPUT_SINGLE\";\n  InfinityMixedQuoterActions2[InfinityMixedQuoterActions2[\"INFI_BIN_EXACT_INPUT_SINGLE\"] = 5] = \"INFI_BIN_EXACT_INPUT_SINGLE\";\n  return InfinityMixedQuoterActions2;\n})(InfinityMixedQuoterActions || {});\n\n// evm/v3-router/types/pool.ts\nvar PoolType = /* @__PURE__ */ ((PoolType2) => {\n  PoolType2[PoolType2[\"V2\"] = 0] = \"V2\";\n  PoolType2[PoolType2[\"V3\"] = 1] = \"V3\";\n  PoolType2[PoolType2[\"STABLE\"] = 2] = \"STABLE\";\n  PoolType2[PoolType2[\"InfinityCL\"] = 3] = \"InfinityCL\";\n  PoolType2[PoolType2[\"InfinityBIN\"] = 4] = \"InfinityBIN\";\n  return PoolType2;\n})(PoolType || {});\n\n// evm/v3-router/types/route.ts\nvar RouteType = /* @__PURE__ */ ((RouteType2) => {\n  RouteType2[RouteType2[\"V2\"] = 0] = \"V2\";\n  RouteType2[RouteType2[\"V3\"] = 1] = \"V3\";\n  RouteType2[RouteType2[\"STABLE\"] = 2] = \"STABLE\";\n  RouteType2[RouteType2[\"MIXED\"] = 3] = \"MIXED\";\n  RouteType2[RouteType2[\"MM\"] = 4] = \"MM\";\n  RouteType2[RouteType2[\"InfinityCL\"] = 5] = \"InfinityCL\";\n  RouteType2[RouteType2[\"InfinityBIN\"] = 6] = \"InfinityBIN\";\n  return RouteType2;\n})(RouteType || {});\n\n// evm/v3-router/utils/pool.ts\nfunction isV2Pool(pool) {\n  return pool.type === 0 /* V2 */;\n}\nfunction isV3Pool(pool) {\n  return pool.type === 1 /* V3 */;\n}\nfunction isStablePool(pool) {\n  return pool.type === 2 /* STABLE */ && pool.balances.length >= 2;\n}\nfunction isInfinityBinPool(pool) {\n  return pool.type === 4 /* InfinityBIN */;\n}\nfunction isInfinityClPool(pool) {\n  return pool.type === 3 /* InfinityCL */;\n}\nfunction involvesCurrency(pool, currency) {\n  const token = currency.wrapped;\n  if (isV2Pool(pool)) {\n    const { reserve0, reserve1 } = pool;\n    return reserve0.currency.equals(token) || reserve1.currency.equals(token);\n  }\n  if (isV3Pool(pool)) {\n    const { token0, token1 } = pool;\n    return token0.equals(token) || token1.equals(token);\n  }\n  if (isInfinityClPool(pool) || isInfinityBinPool(pool)) {\n    const { currency0, currency1 } = pool;\n    return currency0.equals(currency) || currency1.equals(currency) || currency0.wrapped.equals(token) || currency1.wrapped.equals(token);\n  }\n  if (isStablePool(pool)) {\n    const { balances } = pool;\n    return balances.some((b) => b.currency.equals(token));\n  }\n  return false;\n}\nfunction getOutputCurrency(pool, currencyIn) {\n  const tokenIn = currencyIn.wrapped;\n  if (isV2Pool(pool)) {\n    const { reserve0, reserve1 } = pool;\n    return reserve0.currency.equals(tokenIn) ? reserve1.currency : reserve0.currency;\n  }\n  if (isV3Pool(pool)) {\n    const { token0, token1 } = pool;\n    return token0.equals(tokenIn) ? token1 : token0;\n  }\n  if (isStablePool(pool)) {\n    const { balances } = pool;\n    return balances[0].currency.equals(tokenIn) ? balances[1].currency : balances[0].currency;\n  }\n  if (isInfinityClPool(pool) || isInfinityBinPool(pool)) {\n    const { currency0, currency1 } = pool;\n    return currency0.wrapped.equals(tokenIn) ? currency1 : currency0;\n  }\n  throw new Error(\"Cannot get output currency by invalid pool\");\n}\nvar computeV3PoolAddress = memoize2__default.default(\n  v3Sdk.computePoolAddress,\n  ({ deployerAddress, tokenA, tokenB, fee }) => `${tokenA.chainId}_${deployerAddress}_${tokenA.address}_${tokenB.address}_${fee}`\n);\nvar computeV2PoolAddress = memoize2__default.default(\n  sdk.Pair.getAddress,\n  (tokenA, tokenB) => `${tokenA.chainId}_${tokenA.address}_${tokenB.address}`\n);\nvar getPoolAddress = (pool) => {\n  if (isStablePool(pool) || isV3Pool(pool)) {\n    return pool.address;\n  }\n  if (isV2Pool(pool)) {\n    const { reserve0, reserve1 } = pool;\n    return computeV2PoolAddress(reserve0.currency.wrapped, reserve1.currency.wrapped);\n  }\n  if (isInfinityBinPool(pool) || isInfinityClPool(pool)) {\n    return pool.id;\n  }\n  return \"\";\n};\nfunction getTokenPrice(pool, base, quote) {\n  if (isV3Pool(pool)) {\n    const { token0, token1, fee, liquidity, sqrtRatioX96, tick } = pool;\n    const v3Pool = new v3Sdk.Pool(token0.wrapped, token1.wrapped, fee, sqrtRatioX96, liquidity, tick);\n    return v3Pool.priceOf(base.wrapped);\n  }\n  if (isInfinityClPool(pool)) {\n    const { currency0, currency1, fee, liquidity, sqrtRatioX96, tick } = pool;\n    const v3Pool = new v3Sdk.Pool(currency0.asToken, currency1.asToken, fee, sqrtRatioX96, liquidity, tick);\n    const baseToken = currency0.wrapped.equals(base.wrapped) ? currency0.asToken : base.wrapped;\n    const tokenPrice = v3Pool.priceOf(baseToken);\n    const [baseCurrency, quoteCurrency] = baseToken.equals(currency0.asToken) ? [currency0, currency1] : [currency1, currency0];\n    return new sdk.Price(baseCurrency, quoteCurrency, tokenPrice.denominator, tokenPrice.numerator);\n  }\n  if (isInfinityBinPool(pool)) {\n    const { activeId, binStep, currency0, currency1 } = pool;\n    return infinitySdk.getBinPoolTokenPrice(\n      {\n        currencyX: currency0,\n        currencyY: currency1,\n        binStep: BigInt(binStep),\n        activeId: BigInt(activeId)\n      },\n      base\n    );\n  }\n  if (isV2Pool(pool)) {\n    const pair = new sdk.Pair(pool.reserve0.wrapped, pool.reserve1.wrapped);\n    return pair.priceOf(base.wrapped);\n  }\n  if (isStablePool(pool)) {\n    const { amplifier, balances, fee } = pool;\n    const baseIn = tryParseAmount_default(\"1\", base);\n    if (!baseIn) {\n      throw new Error(`Cannot parse amount for ${base.symbol}`);\n    }\n    const quoteOut = stableSwapSdk.getSwapOutput({\n      amplifier,\n      balances,\n      fee,\n      outputCurrency: quote,\n      amount: baseIn\n    });\n    return new sdk.Price({\n      baseAmount: baseIn,\n      quoteAmount: quoteOut\n    });\n  }\n  return new sdk.Price(base, quote, 1n, 0n);\n}\n\n// evm/v3-router/utils/encodeInfinityRouteToPath.ts\nfunction encodeInfinityRouteToPath(route, exactOutput) {\n  if (route.pools.some((p) => !isInfinityClPool(p) && !isInfinityBinPool(p))) {\n    throw new Error(\"Failed to encode path keys. Invalid Infinity pool found in route.\");\n  }\n  const currencyStart = exactOutput ? route.output : route.input;\n  const pools = exactOutput ? [...route.pools].reverse() : route.pools;\n  const { path } = pools.reduce(\n    ({ baseCurrency, path: path2 }, pool) => {\n      const isInfinityCl = isInfinityClPool(pool);\n      const isInfinityBin = isInfinityBinPool(pool);\n      if (!isInfinityCl && !isInfinityBin)\n        throw new Error(`Invalid Infinity pool ${pool}`);\n      const quoteCurrency = getOutputCurrency(pool, baseCurrency);\n      const hooksRegistration = pool.hooksRegistrationBitmap !== void 0 ? infinitySdk.decodeHooksRegistration(pool.hooksRegistrationBitmap) : void 0;\n      const parameters = infinitySdk.encodePoolParameters(\n        isInfinityCl ? {\n          tickSpacing: pool.tickSpacing,\n          hooksRegistration\n        } : {\n          binStep: pool.binStep,\n          hooksRegistration\n        }\n      );\n      return {\n        baseCurrency: quoteCurrency,\n        path: [\n          ...path2,\n          {\n            intermediateCurrency: swapSdkCore.getCurrencyAddress(quoteCurrency),\n            fee: infinitySdk.isDynamicFeeHook(pool.currency0.chainId, pool.hooks) ? infinitySdk.DYNAMIC_FEE_FLAG : pool.fee,\n            hooks: pool.hooks ?? viem.zeroAddress,\n            poolManager: pool.poolManager,\n            hookData: \"0x\",\n            parameters\n          }\n        ]\n      };\n    },\n    { baseCurrency: currencyStart, path: [] }\n  );\n  return exactOutput ? path.reverse() : path;\n}\nfunction encodeMixedRouteToPath(route, exactOutput) {\n  const firstInputToken = route.input.wrapped;\n  const { path, types } = route.pools.reduce(\n    ({ inputToken, path: path2, types: types2 }, pool, index) => {\n      const outputToken = getOutputCurrency(pool, inputToken).wrapped;\n      const fee = isV3Pool(pool) ? pool.fee : chunkGYU5FW7D_js.V2_FEE_PATH_PLACEHOLDER;\n      if (index === 0) {\n        return {\n          inputToken: outputToken,\n          types: [\"address\", \"uint24\", \"address\"],\n          path: [inputToken.address, fee, outputToken.address]\n        };\n      }\n      return {\n        inputToken: outputToken,\n        types: [...types2, \"uint24\", \"address\"],\n        path: [...path2, fee, outputToken.address]\n      };\n    },\n    { inputToken: firstInputToken, path: [], types: [] }\n  );\n  return exactOutput ? viem.encodePacked(types.reverse(), path.reverse()) : viem.encodePacked(types, path);\n}\n\n// evm/v3-router/utils/getCurrenciesOfPool.ts\nfunction getCurrenciesOfPool(pool) {\n  if (isV2Pool(pool)) {\n    const { reserve0, reserve1 } = pool;\n    return [reserve0.currency, reserve1.currency];\n  }\n  if (isV3Pool(pool)) {\n    const { token0, token1 } = pool;\n    return [token0, token1];\n  }\n  if (isStablePool(pool)) {\n    const { balances } = pool;\n    return balances.map((b) => b.currency);\n  }\n  if (isInfinityClPool(pool) || isInfinityBinPool(pool)) {\n    const { currency0, currency1 } = pool;\n    return [currency0, currency1];\n  }\n  throw new Error(\"Cannot get tokens by invalid pool\");\n}\nfunction getExecutionPrice(trade) {\n  if (!trade) {\n    return void 0;\n  }\n  const { inputAmount, outputAmount } = trade;\n  if (inputAmount.quotient === sdk.ZERO || outputAmount.quotient === sdk.ZERO) {\n    return void 0;\n  }\n  return new sdk.Price(inputAmount.currency, outputAmount.currency, inputAmount.quotient, outputAmount.quotient);\n}\nfunction getNativeWrappedToken(chainId) {\n  return sdk.WNATIVE[chainId] ?? null;\n}\n\n// evm/v3-router/utils/getOutputOfPools.ts\nvar getOutputOfPools = (pools, firstInputToken) => {\n  const { inputToken: outputToken } = pools.reduce(\n    ({ inputToken }, pool) => {\n      if (!involvesCurrency(pool, inputToken))\n        throw new Error(\"PATH\");\n      const output = getOutputCurrency(pool, inputToken);\n      return {\n        inputToken: output\n      };\n    },\n    { inputToken: firstInputToken }\n  );\n  return outputToken;\n};\nfunction buildBaseRoute(pools, currencyIn, currencyOut) {\n  const path = [currencyIn];\n  let prevIn = path[0];\n  let routeType = null;\n  const updateRouteType = (pool, currentRouteType) => {\n    if (currentRouteType === null) {\n      return getRouteTypeFromPool(pool);\n    }\n    if (currentRouteType === 3 /* MIXED */ || currentRouteType !== getRouteTypeFromPool(pool)) {\n      return 3 /* MIXED */;\n    }\n    return currentRouteType;\n  };\n  const lastPool = pools[pools.length - 1];\n  for (const pool of pools) {\n    routeType = updateRouteType(pool, routeType);\n    if (pool === lastPool) {\n      path.push(currencyOut);\n      continue;\n    }\n    prevIn = getOutputCurrency(pool, prevIn);\n    path.push(prevIn);\n  }\n  if (routeType === null) {\n    throw new Error(`Invalid route type when constructing base route`);\n  }\n  return {\n    path,\n    pools,\n    type: routeType,\n    input: currencyIn,\n    output: currencyOut\n  };\n}\nfunction getRouteTypeFromPool(pool) {\n  switch (pool.type) {\n    case 0 /* V2 */:\n      return 0 /* V2 */;\n    case 1 /* V3 */:\n      return 1 /* V3 */;\n    case 2 /* STABLE */:\n      return 2 /* STABLE */;\n    case 3 /* InfinityCL */:\n      return 5 /* InfinityCL */;\n    case 4 /* InfinityBIN */:\n      return 6 /* InfinityBIN */;\n    default:\n      return 3 /* MIXED */;\n  }\n}\nfunction getRouteTypeByPools(pools) {\n  let routeType;\n  for (const p of pools) {\n    if (routeType === void 0) {\n      routeType = getRouteTypeFromPool(p);\n      continue;\n    }\n    if (routeType === 3 /* MIXED */ || routeType !== getRouteTypeFromPool(p)) {\n      routeType = 3 /* MIXED */;\n      continue;\n    }\n  }\n  invariant6__default.default(routeType !== void 0, \"INVALID_ROUTE_TYPE\");\n  return routeType;\n}\nfunction getQuoteCurrency({ input, output }, baseCurrency) {\n  return baseCurrency.equals(input) ? output : input;\n}\nfunction wrapPrice(price) {\n  return new sdk.Price(price.baseCurrency.wrapped, price.quoteCurrency.wrapped, price.denominator, price.numerator);\n}\nfunction getMidPrice({ path, pools }) {\n  let i = 0;\n  let price = null;\n  const currencyIn = path[0];\n  const currencyOut = path[path.length - 1];\n  for (const pool of pools) {\n    const input = path[i];\n    const output = path[i + 1];\n    const poolPrice = wrapPrice(getTokenPrice(pool, input, output));\n    price = price ? price.multiply(poolPrice) : poolPrice;\n    i += 1;\n  }\n  if (!price) {\n    throw new Error(\"Get mid price failed\");\n  }\n  return new sdk.Price(currencyIn, currencyOut, price.denominator, price.numerator);\n}\n\n// evm/v3-router/utils/getPriceImpact.ts\nfunction getPriceImpact(trade) {\n  let spotOutputAmount = sdk.CurrencyAmount.fromRawAmount(trade.outputAmount.currency, 0);\n  for (const route of trade.routes) {\n    const { inputAmount } = route;\n    const midPrice = getMidPrice(route);\n    spotOutputAmount = spotOutputAmount.add(\n      sdk.CurrencyAmount.fromRawAmount(trade.outputAmount.currency, midPrice.wrapped.quote(inputAmount.wrapped).quotient)\n    );\n  }\n  if (spotOutputAmount.equalTo(0)) {\n    return sdk.ONE_HUNDRED_PERCENT;\n  }\n  const priceImpact = spotOutputAmount.subtract(trade.outputAmount).divide(spotOutputAmount);\n  return new sdk.Percent(priceImpact.numerator, priceImpact.denominator);\n}\n\n// evm/v3-router/utils/getUsdGasToken.ts\nfunction getUsdGasToken(chainId) {\n  return chunkGYU5FW7D_js.usdGasTokensByChain[chainId]?.[0] ?? null;\n}\n\n// evm/v3-router/utils/isCurrenciesSameChain.ts\nfunction isCurrenciesSameChain(...currencies) {\n  const chainId = currencies[0]?.chainId;\n  for (const currency of currencies) {\n    if (currency.chainId !== chainId) {\n      return false;\n    }\n  }\n  return true;\n}\nvar SCOPE_PREFIX = \"smart-router\";\nvar SCOPE = {\n  metric: \"metric\",\n  log: \"log\",\n  error: \"error\"\n};\nvar log_ = debug__default.default(SCOPE_PREFIX);\nvar metric = log_.extend(SCOPE.metric);\nvar log = log_.extend(SCOPE.log);\nvar logger = {\n  metric,\n  log,\n  error: debug__default.default(SCOPE_PREFIX).extend(SCOPE.error),\n  enable: (namespace) => {\n    let namespaces = namespace;\n    if (namespace.includes(\",\")) {\n      namespaces = namespace.split(\",\").map((ns) => `${SCOPE_PREFIX}:${ns}`).join(\",\");\n    } else {\n      namespaces = `${SCOPE_PREFIX}:${namespace}`;\n    }\n    debug__default.default.enable(namespaces);\n  }\n};\nfunction maximumAmountIn(trade, slippage, amountIn = trade.inputAmount) {\n  if (trade.tradeType === sdk.TradeType.EXACT_INPUT) {\n    return amountIn;\n  }\n  const slippageAdjustedAmountIn = new sdk.Fraction(sdk.ONE).add(slippage).multiply(amountIn.quotient).quotient;\n  return sdk.CurrencyAmount.fromRawAmount(amountIn.currency, slippageAdjustedAmountIn);\n}\nfunction minimumAmountOut(trade, slippage, amountOut = trade.outputAmount) {\n  if (trade.tradeType === sdk.TradeType.EXACT_OUTPUT) {\n    return amountOut;\n  }\n  const slippageAdjustedAmountOut = new sdk.Fraction(sdk.ONE).add(slippage).invert().multiply(amountOut.quotient).quotient;\n  return sdk.CurrencyAmount.fromRawAmount(amountOut.currency, slippageAdjustedAmountOut);\n}\n\n// evm/v3-router/utils/partitionMixedRouteByProtocol.ts\nvar partitionMixedRouteByProtocol = (route) => {\n  const acc = [];\n  let left = 0;\n  let right = 0;\n  while (right < route.pools.length) {\n    if (route.pools[left].type !== route.pools[right].type) {\n      acc.push(route.pools.slice(left, right));\n      left = right;\n    }\n    right++;\n    if (right === route.pools.length) {\n      acc.push(route.pools.slice(left, right));\n    }\n  }\n  return acc;\n};\n\n// evm/abis/ISwapRouter02.ts\nvar swapRouter02Abi = [\n  {\n    inputs: [\n      { internalType: \"address\", name: \"_factoryV2\", type: \"address\" },\n      { internalType: \"address\", name: \"_deployer\", type: \"address\" },\n      { internalType: \"address\", name: \"_factoryV3\", type: \"address\" },\n      { internalType: \"address\", name: \"_positionManager\", type: \"address\" },\n      { internalType: \"address\", name: \"_stableFactory\", type: \"address\" },\n      { internalType: \"address\", name: \"_stableInfo\", type: \"address\" },\n      { internalType: \"address\", name: \"_WETH9\", type: \"address\" }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\"\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: true, internalType: \"address\", name: \"previousOwner\", type: \"address\" },\n      { indexed: true, internalType: \"address\", name: \"newOwner\", type: \"address\" }\n    ],\n    name: \"OwnershipTransferred\",\n    type: \"event\"\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: true, internalType: \"address\", name: \"factory\", type: \"address\" },\n      { indexed: true, internalType: \"address\", name: \"info\", type: \"address\" }\n    ],\n    name: \"SetStableSwap\",\n    type: \"event\"\n  },\n  {\n    inputs: [],\n    name: \"WETH9\",\n    outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [{ internalType: \"address\", name: \"token\", type: \"address\" }],\n    name: \"approveMax\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [{ internalType: \"address\", name: \"token\", type: \"address\" }],\n    name: \"approveMaxMinusOne\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [{ internalType: \"address\", name: \"token\", type: \"address\" }],\n    name: \"approveZeroThenMax\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [{ internalType: \"address\", name: \"token\", type: \"address\" }],\n    name: \"approveZeroThenMaxMinusOne\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [{ internalType: \"bytes\", name: \"data\", type: \"bytes\" }],\n    name: \"callPositionManager\",\n    outputs: [{ internalType: \"bytes\", name: \"result\", type: \"bytes\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"bytes[]\", name: \"paths\", type: \"bytes[]\" },\n      { internalType: \"uint128[]\", name: \"amounts\", type: \"uint128[]\" },\n      { internalType: \"uint24\", name: \"maximumTickDivergence\", type: \"uint24\" },\n      { internalType: \"uint32\", name: \"secondsAgo\", type: \"uint32\" }\n    ],\n    name: \"checkOracleSlippage\",\n    outputs: [],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"bytes\", name: \"path\", type: \"bytes\" },\n      { internalType: \"uint24\", name: \"maximumTickDivergence\", type: \"uint24\" },\n      { internalType: \"uint32\", name: \"secondsAgo\", type: \"uint32\" }\n    ],\n    name: \"checkOracleSlippage\",\n    outputs: [],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"deployer\",\n    outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"bytes\", name: \"path\", type: \"bytes\" },\n          { internalType: \"address\", name: \"recipient\", type: \"address\" },\n          { internalType: \"uint256\", name: \"amountIn\", type: \"uint256\" },\n          { internalType: \"uint256\", name: \"amountOutMinimum\", type: \"uint256\" }\n        ],\n        internalType: \"struct IV3SwapRouter.ExactInputParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"exactInput\",\n    outputs: [{ internalType: \"uint256\", name: \"amountOut\", type: \"uint256\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"address\", name: \"tokenIn\", type: \"address\" },\n          { internalType: \"address\", name: \"tokenOut\", type: \"address\" },\n          { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n          { internalType: \"address\", name: \"recipient\", type: \"address\" },\n          { internalType: \"uint256\", name: \"amountIn\", type: \"uint256\" },\n          { internalType: \"uint256\", name: \"amountOutMinimum\", type: \"uint256\" },\n          { internalType: \"uint160\", name: \"sqrtPriceLimitX96\", type: \"uint160\" }\n        ],\n        internalType: \"struct IV3SwapRouter.ExactInputSingleParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"exactInputSingle\",\n    outputs: [{ internalType: \"uint256\", name: \"amountOut\", type: \"uint256\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"address[]\", name: \"path\", type: \"address[]\" },\n      { internalType: \"uint256[]\", name: \"flag\", type: \"uint256[]\" },\n      { internalType: \"uint256\", name: \"amountIn\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n      { internalType: \"address\", name: \"to\", type: \"address\" }\n    ],\n    name: \"exactInputStableSwap\",\n    outputs: [{ internalType: \"uint256\", name: \"amountOut\", type: \"uint256\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"bytes\", name: \"path\", type: \"bytes\" },\n          { internalType: \"address\", name: \"recipient\", type: \"address\" },\n          { internalType: \"uint256\", name: \"amountOut\", type: \"uint256\" },\n          { internalType: \"uint256\", name: \"amountInMaximum\", type: \"uint256\" }\n        ],\n        internalType: \"struct IV3SwapRouter.ExactOutputParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"exactOutput\",\n    outputs: [{ internalType: \"uint256\", name: \"amountIn\", type: \"uint256\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"address\", name: \"tokenIn\", type: \"address\" },\n          { internalType: \"address\", name: \"tokenOut\", type: \"address\" },\n          { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n          { internalType: \"address\", name: \"recipient\", type: \"address\" },\n          { internalType: \"uint256\", name: \"amountOut\", type: \"uint256\" },\n          { internalType: \"uint256\", name: \"amountInMaximum\", type: \"uint256\" },\n          { internalType: \"uint160\", name: \"sqrtPriceLimitX96\", type: \"uint160\" }\n        ],\n        internalType: \"struct IV3SwapRouter.ExactOutputSingleParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"exactOutputSingle\",\n    outputs: [{ internalType: \"uint256\", name: \"amountIn\", type: \"uint256\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"address[]\", name: \"path\", type: \"address[]\" },\n      { internalType: \"uint256[]\", name: \"flag\", type: \"uint256[]\" },\n      { internalType: \"uint256\", name: \"amountOut\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"amountInMax\", type: \"uint256\" },\n      { internalType: \"address\", name: \"to\", type: \"address\" }\n    ],\n    name: \"exactOutputStableSwap\",\n    outputs: [{ internalType: \"uint256\", name: \"amountIn\", type: \"uint256\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"factory\",\n    outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"factoryV2\",\n    outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"address\", name: \"token\", type: \"address\" },\n      { internalType: \"uint256\", name: \"amount\", type: \"uint256\" }\n    ],\n    name: \"getApprovalType\",\n    outputs: [{ internalType: \"enum IApproveAndCall.ApprovalType\", name: \"\", type: \"uint8\" }],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"address\", name: \"token0\", type: \"address\" },\n          { internalType: \"address\", name: \"token1\", type: \"address\" },\n          { internalType: \"uint256\", name: \"tokenId\", type: \"uint256\" },\n          { internalType: \"uint256\", name: \"amount0Min\", type: \"uint256\" },\n          { internalType: \"uint256\", name: \"amount1Min\", type: \"uint256\" }\n        ],\n        internalType: \"struct IApproveAndCall.IncreaseLiquidityParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"increaseLiquidity\",\n    outputs: [{ internalType: \"bytes\", name: \"result\", type: \"bytes\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"address\", name: \"token0\", type: \"address\" },\n          { internalType: \"address\", name: \"token1\", type: \"address\" },\n          { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n          { internalType: \"int24\", name: \"tickLower\", type: \"int24\" },\n          { internalType: \"int24\", name: \"tickUpper\", type: \"int24\" },\n          { internalType: \"uint256\", name: \"amount0Min\", type: \"uint256\" },\n          { internalType: \"uint256\", name: \"amount1Min\", type: \"uint256\" },\n          { internalType: \"address\", name: \"recipient\", type: \"address\" }\n        ],\n        internalType: \"struct IApproveAndCall.MintParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"mint\",\n    outputs: [{ internalType: \"bytes\", name: \"result\", type: \"bytes\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"bytes32\", name: \"previousBlockhash\", type: \"bytes32\" },\n      { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" }\n    ],\n    name: \"multicall\",\n    outputs: [{ internalType: \"bytes[]\", name: \"\", type: \"bytes[]\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"uint256\", name: \"deadline\", type: \"uint256\" },\n      { internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" }\n    ],\n    name: \"multicall\",\n    outputs: [{ internalType: \"bytes[]\", name: \"\", type: \"bytes[]\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [{ internalType: \"bytes[]\", name: \"data\", type: \"bytes[]\" }],\n    name: \"multicall\",\n    outputs: [{ internalType: \"bytes[]\", name: \"results\", type: \"bytes[]\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"owner\",\n    outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"int256\", name: \"amount0Delta\", type: \"int256\" },\n      { internalType: \"int256\", name: \"amount1Delta\", type: \"int256\" },\n      { internalType: \"bytes\", name: \"_data\", type: \"bytes\" }\n    ],\n    name: \"pancakeV3SwapCallback\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"positionManager\",\n    outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"address\", name: \"token\", type: \"address\" },\n      { internalType: \"uint256\", name: \"value\", type: \"uint256\" }\n    ],\n    name: \"pull\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  { inputs: [], name: \"refundETH\", outputs: [], stateMutability: \"payable\", type: \"function\" },\n  { inputs: [], name: \"renounceOwnership\", outputs: [], stateMutability: \"nonpayable\", type: \"function\" },\n  {\n    inputs: [\n      { internalType: \"address\", name: \"token\", type: \"address\" },\n      { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"deadline\", type: \"uint256\" },\n      { internalType: \"uint8\", name: \"v\", type: \"uint8\" },\n      { internalType: \"bytes32\", name: \"r\", type: \"bytes32\" },\n      { internalType: \"bytes32\", name: \"s\", type: \"bytes32\" }\n    ],\n    name: \"selfPermit\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"address\", name: \"token\", type: \"address\" },\n      { internalType: \"uint256\", name: \"nonce\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"expiry\", type: \"uint256\" },\n      { internalType: \"uint8\", name: \"v\", type: \"uint8\" },\n      { internalType: \"bytes32\", name: \"r\", type: \"bytes32\" },\n      { internalType: \"bytes32\", name: \"s\", type: \"bytes32\" }\n    ],\n    name: \"selfPermitAllowed\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"address\", name: \"token\", type: \"address\" },\n      { internalType: \"uint256\", name: \"nonce\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"expiry\", type: \"uint256\" },\n      { internalType: \"uint8\", name: \"v\", type: \"uint8\" },\n      { internalType: \"bytes32\", name: \"r\", type: \"bytes32\" },\n      { internalType: \"bytes32\", name: \"s\", type: \"bytes32\" }\n    ],\n    name: \"selfPermitAllowedIfNecessary\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"address\", name: \"token\", type: \"address\" },\n      { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"deadline\", type: \"uint256\" },\n      { internalType: \"uint8\", name: \"v\", type: \"uint8\" },\n      { internalType: \"bytes32\", name: \"r\", type: \"bytes32\" },\n      { internalType: \"bytes32\", name: \"s\", type: \"bytes32\" }\n    ],\n    name: \"selfPermitIfNecessary\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"address\", name: \"_factory\", type: \"address\" },\n      { internalType: \"address\", name: \"_info\", type: \"address\" }\n    ],\n    name: \"setStableSwap\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"stableSwapFactory\",\n    outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"stableSwapInfo\",\n    outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"uint256\", name: \"amountIn\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n      { internalType: \"address[]\", name: \"path\", type: \"address[]\" },\n      { internalType: \"address\", name: \"to\", type: \"address\" }\n    ],\n    name: \"swapExactTokensForTokens\",\n    outputs: [{ internalType: \"uint256\", name: \"amountOut\", type: \"uint256\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"uint256\", name: \"amountOut\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"amountInMax\", type: \"uint256\" },\n      { internalType: \"address[]\", name: \"path\", type: \"address[]\" },\n      { internalType: \"address\", name: \"to\", type: \"address\" }\n    ],\n    name: \"swapTokensForExactTokens\",\n    outputs: [{ internalType: \"uint256\", name: \"amountIn\", type: \"uint256\" }],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"address\", name: \"token\", type: \"address\" },\n      { internalType: \"uint256\", name: \"amountMinimum\", type: \"uint256\" },\n      { internalType: \"address\", name: \"recipient\", type: \"address\" }\n    ],\n    name: \"sweepToken\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"address\", name: \"token\", type: \"address\" },\n      { internalType: \"uint256\", name: \"amountMinimum\", type: \"uint256\" }\n    ],\n    name: \"sweepToken\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"address\", name: \"token\", type: \"address\" },\n      { internalType: \"uint256\", name: \"amountMinimum\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"feeBips\", type: \"uint256\" },\n      { internalType: \"address\", name: \"feeRecipient\", type: \"address\" }\n    ],\n    name: \"sweepTokenWithFee\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"address\", name: \"token\", type: \"address\" },\n      { internalType: \"uint256\", name: \"amountMinimum\", type: \"uint256\" },\n      { internalType: \"address\", name: \"recipient\", type: \"address\" },\n      { internalType: \"uint256\", name: \"feeBips\", type: \"uint256\" },\n      { internalType: \"address\", name: \"feeRecipient\", type: \"address\" }\n    ],\n    name: \"sweepTokenWithFee\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n    name: \"transferOwnership\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"uint256\", name: \"amountMinimum\", type: \"uint256\" },\n      { internalType: \"address\", name: \"recipient\", type: \"address\" }\n    ],\n    name: \"unwrapWETH9\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"uint256\", name: \"amountMinimum\", type: \"uint256\" },\n      { internalType: \"address\", name: \"recipient\", type: \"address\" },\n      { internalType: \"uint256\", name: \"feeBips\", type: \"uint256\" },\n      { internalType: \"address\", name: \"feeRecipient\", type: \"address\" }\n    ],\n    name: \"unwrapWETH9WithFee\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      { internalType: \"uint256\", name: \"amountMinimum\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"feeBips\", type: \"uint256\" },\n      { internalType: \"address\", name: \"feeRecipient\", type: \"address\" }\n    ],\n    name: \"unwrapWETH9WithFee\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [{ internalType: \"uint256\", name: \"value\", type: \"uint256\" }],\n    name: \"wrapETH\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  { stateMutability: \"payable\", type: \"receive\" }\n];\n\n// evm/abis/IApproveAndCall.ts\nvar approveAndCallAbi = [\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\"\n      }\n    ],\n    name: \"approveMax\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\"\n      }\n    ],\n    name: \"approveMaxMinusOne\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\"\n      }\n    ],\n    name: \"approveZeroThenMax\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\"\n      }\n    ],\n    name: \"approveZeroThenMaxMinusOne\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\"\n      }\n    ],\n    name: \"callPositionManager\",\n    outputs: [\n      {\n        internalType: \"bytes\",\n        name: \"result\",\n        type: \"bytes\"\n      }\n    ],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\"\n      }\n    ],\n    name: \"getApprovalType\",\n    outputs: [\n      {\n        internalType: \"enum IApproveAndCall.ApprovalType\",\n        name: \"\",\n        type: \"uint8\"\n      }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"token0\",\n            type: \"address\"\n          },\n          {\n            internalType: \"address\",\n            name: \"token1\",\n            type: \"address\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"tokenId\",\n            type: \"uint256\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount0Min\",\n            type: \"uint256\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount1Min\",\n            type: \"uint256\"\n          }\n        ],\n        internalType: \"struct IApproveAndCall.IncreaseLiquidityParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"increaseLiquidity\",\n    outputs: [\n      {\n        internalType: \"bytes\",\n        name: \"result\",\n        type: \"bytes\"\n      }\n    ],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"token0\",\n            type: \"address\"\n          },\n          {\n            internalType: \"address\",\n            name: \"token1\",\n            type: \"address\"\n          },\n          {\n            internalType: \"uint24\",\n            name: \"fee\",\n            type: \"uint24\"\n          },\n          {\n            internalType: \"int24\",\n            name: \"tickLower\",\n            type: \"int24\"\n          },\n          {\n            internalType: \"int24\",\n            name: \"tickUpper\",\n            type: \"int24\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount0Min\",\n            type: \"uint256\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount1Min\",\n            type: \"uint256\"\n          },\n          {\n            internalType: \"address\",\n            name: \"recipient\",\n            type: \"address\"\n          }\n        ],\n        internalType: \"struct IApproveAndCall.MintParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"mint\",\n    outputs: [\n      {\n        internalType: \"bytes\",\n        name: \"result\",\n        type: \"bytes\"\n      }\n    ],\n    stateMutability: \"payable\",\n    type: \"function\"\n  }\n];\n\n// evm/v3-router/utils/approveAndCall.ts\nfunction isMint(options) {\n  return Object.keys(options).some((k) => k === \"recipient\");\n}\nvar _ApproveAndCall = class {\n  /**\n   * Cannot be constructed.\n   */\n  // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n  constructor() {\n  }\n  static encodeApproveMax(token) {\n    return viem.encodeFunctionData({\n      abi: _ApproveAndCall.ABI,\n      functionName: \"approveMax\",\n      args: [token.address]\n    });\n  }\n  static encodeApproveMaxMinusOne(token) {\n    return viem.encodeFunctionData({\n      abi: _ApproveAndCall.ABI,\n      functionName: \"approveMaxMinusOne\",\n      args: [token.address]\n    });\n  }\n  static encodeApproveZeroThenMax(token) {\n    return viem.encodeFunctionData({\n      abi: _ApproveAndCall.ABI,\n      functionName: \"approveZeroThenMax\",\n      args: [token.address]\n    });\n  }\n  static encodeApproveZeroThenMaxMinusOne(token) {\n    return viem.encodeFunctionData({\n      abi: _ApproveAndCall.ABI,\n      functionName: \"approveZeroThenMaxMinusOne\",\n      args: [token.address]\n    });\n  }\n  static encodeCallPositionManager(calldatas) {\n    invariant6__default.default(calldatas.length > 0, \"NULL_CALLDATA\");\n    if (calldatas.length === 1) {\n      return viem.encodeFunctionData({\n        abi: _ApproveAndCall.ABI,\n        functionName: \"callPositionManager\",\n        args: calldatas\n      });\n    }\n    const encodedMulticall = viem.encodeFunctionData({\n      abi: v3Sdk.NonfungiblePositionManager.ABI,\n      functionName: \"multicall\",\n      args: [calldatas]\n    });\n    return viem.encodeFunctionData({\n      abi: _ApproveAndCall.ABI,\n      functionName: \"callPositionManager\",\n      args: [encodedMulticall]\n    });\n  }\n  /**\n   * Encode adding liquidity to a position in the nft manager contract\n   * @param position Forcasted position with expected amount out from swap\n   * @param minimalPosition Forcasted position with custom minimal token amounts\n   * @param addLiquidityOptions Options for adding liquidity\n   * @param slippageTolerance Defines maximum slippage\n   */\n  static encodeAddLiquidity(position, minimalPosition, addLiquidityOptions, slippageTolerance) {\n    let { amount0: amount0Min, amount1: amount1Min } = position.mintAmountsWithSlippage(slippageTolerance);\n    if (minimalPosition.amount0.quotient < amount0Min) {\n      amount0Min = minimalPosition.amount0.quotient;\n    }\n    if (minimalPosition.amount1.quotient < amount1Min) {\n      amount1Min = minimalPosition.amount1.quotient;\n    }\n    if (isMint(addLiquidityOptions)) {\n      return viem.encodeFunctionData({\n        abi: _ApproveAndCall.ABI,\n        functionName: \"mint\",\n        args: [\n          {\n            token0: position.pool.token0.address,\n            token1: position.pool.token1.address,\n            fee: position.pool.fee,\n            tickLower: position.tickLower,\n            tickUpper: position.tickUpper,\n            amount0Min,\n            amount1Min,\n            recipient: addLiquidityOptions.recipient\n          }\n        ]\n      });\n    }\n    return viem.encodeFunctionData({\n      abi: _ApproveAndCall.ABI,\n      functionName: \"increaseLiquidity\",\n      args: [\n        {\n          token0: position.pool.token0.address,\n          token1: position.pool.token1.address,\n          amount0Min,\n          amount1Min,\n          tokenId: BigInt(addLiquidityOptions.tokenId)\n        }\n      ]\n    });\n  }\n  static encodeApprove(token, approvalType) {\n    switch (approvalType) {\n      case 1 /* MAX */:\n        return _ApproveAndCall.encodeApproveMax(token.wrapped);\n      case 2 /* MAX_MINUS_ONE */:\n        return _ApproveAndCall.encodeApproveMaxMinusOne(token.wrapped);\n      case 3 /* ZERO_THEN_MAX */:\n        return _ApproveAndCall.encodeApproveZeroThenMax(token.wrapped);\n      case 4 /* ZERO_THEN_MAX_MINUS_ONE */:\n        return _ApproveAndCall.encodeApproveZeroThenMaxMinusOne(token.wrapped);\n      default:\n        throw new Error(\"Error: invalid ApprovalType\");\n    }\n  }\n};\nvar ApproveAndCall = _ApproveAndCall;\nApproveAndCall.ABI = approveAndCallAbi;\n\n// evm/abis/IMulticallExtended.ts\nvar multicallExtendedAbi = [\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"previousBlockhash\",\n        type: \"bytes32\"\n      },\n      {\n        internalType: \"bytes[]\",\n        name: \"data\",\n        type: \"bytes[]\"\n      }\n    ],\n    name: \"multicall\",\n    outputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"results\",\n        type: \"bytes[]\"\n      }\n    ],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"deadline\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"bytes[]\",\n        name: \"data\",\n        type: \"bytes[]\"\n      }\n    ],\n    name: \"multicall\",\n    outputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"results\",\n        type: \"bytes[]\"\n      }\n    ],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"data\",\n        type: \"bytes[]\"\n      }\n    ],\n    name: \"multicall\",\n    outputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"results\",\n        type: \"bytes[]\"\n      }\n    ],\n    stateMutability: \"payable\",\n    type: \"function\"\n  }\n];\n\n// evm/v3-router/utils/multicallExtended.ts\nfunction validateAndParseBytes32(bytes32) {\n  if (!bytes32.match(/^0x[0-9a-fA-F]{64}$/)) {\n    throw new Error(`${bytes32} is not valid bytes32.`);\n  }\n  return bytes32.toLowerCase();\n}\nvar _MulticallExtended = class {\n  /**\n   * Cannot be constructed.\n   */\n  // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n  constructor() {\n  }\n  static encodeMulticall(calldatas, validation) {\n    if (typeof validation === \"undefined\") {\n      return v3Sdk.Multicall.encodeMulticall(calldatas);\n    }\n    if (!Array.isArray(calldatas)) {\n      calldatas = [calldatas];\n    }\n    if (typeof validation === \"string\" && validation.startsWith(\"0x\")) {\n      const previousBlockhash = validateAndParseBytes32(validation);\n      return viem.encodeFunctionData({\n        abi: _MulticallExtended.ABI,\n        functionName: \"multicall\",\n        args: [previousBlockhash, calldatas]\n      });\n    }\n    const deadline = BigInt(validation);\n    return viem.encodeFunctionData({\n      abi: _MulticallExtended.ABI,\n      functionName: \"multicall\",\n      args: [deadline, calldatas]\n    });\n  }\n};\nvar MulticallExtended = _MulticallExtended;\nMulticallExtended.ABI = multicallExtendedAbi;\n\n// evm/abis/IPeripheryPaymentsWithFeeExtended.ts\nvar peripheryPaymentsWithFeeExtendedAbi = [\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\"\n      }\n    ],\n    name: \"pull\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"refundETH\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amountMinimum\",\n        type: \"uint256\"\n      }\n    ],\n    name: \"sweepToken\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amountMinimum\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\"\n      }\n    ],\n    name: \"sweepToken\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amountMinimum\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"feeBips\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"address\",\n        name: \"feeRecipient\",\n        type: \"address\"\n      }\n    ],\n    name: \"sweepTokenWithFee\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amountMinimum\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"feeBips\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"address\",\n        name: \"feeRecipient\",\n        type: \"address\"\n      }\n    ],\n    name: \"sweepTokenWithFee\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountMinimum\",\n        type: \"uint256\"\n      }\n    ],\n    name: \"unwrapWETH9\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountMinimum\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\"\n      }\n    ],\n    name: \"unwrapWETH9\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountMinimum\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"feeBips\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"address\",\n        name: \"feeRecipient\",\n        type: \"address\"\n      }\n    ],\n    name: \"unwrapWETH9WithFee\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountMinimum\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"feeBips\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"address\",\n        name: \"feeRecipient\",\n        type: \"address\"\n      }\n    ],\n    name: \"unwrapWETH9WithFee\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\"\n      }\n    ],\n    name: \"wrapETH\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\"\n  }\n];\n\n// evm/v3-router/utils/paymentsExtended.ts\nfunction encodeFeeBips(fee) {\n  return fee.multiply(1e4).quotient;\n}\nvar _PaymentsExtended = class {\n  /**\n   * Cannot be constructed.\n   */\n  // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n  constructor() {\n  }\n  static encodeUnwrapWETH9(amountMinimum, recipient, feeOptions) {\n    if (typeof recipient === \"string\") {\n      return v3Sdk.Payments.encodeUnwrapWETH9(amountMinimum, recipient, feeOptions);\n    }\n    if (!!feeOptions) {\n      const feeBips = encodeFeeBips(feeOptions.fee);\n      const feeRecipient = sdk.validateAndParseAddress(feeOptions.recipient);\n      return viem.encodeFunctionData({\n        abi: _PaymentsExtended.ABI,\n        functionName: \"unwrapWETH9WithFee\",\n        args: [amountMinimum, feeBips, feeRecipient]\n      });\n    }\n    return viem.encodeFunctionData({\n      abi: _PaymentsExtended.ABI,\n      functionName: \"unwrapWETH9\",\n      args: [amountMinimum]\n    });\n  }\n  static encodeSweepToken(token, amountMinimum, recipient, feeOptions) {\n    if (typeof recipient === \"string\") {\n      return v3Sdk.Payments.encodeSweepToken(token, amountMinimum, recipient, feeOptions);\n    }\n    if (!!feeOptions) {\n      const feeBips = encodeFeeBips(feeOptions.fee);\n      const feeRecipient = sdk.validateAndParseAddress(feeOptions.recipient);\n      return viem.encodeFunctionData({\n        abi: _PaymentsExtended.ABI,\n        functionName: \"sweepTokenWithFee\",\n        args: [token.address, amountMinimum, feeBips, feeRecipient]\n      });\n    }\n    return viem.encodeFunctionData({\n      abi: _PaymentsExtended.ABI,\n      functionName: \"sweepToken\",\n      args: [token.address, amountMinimum]\n    });\n  }\n  static encodePull(token, amount) {\n    return viem.encodeFunctionData({ abi: _PaymentsExtended.ABI, functionName: \"pull\", args: [token.address, amount] });\n  }\n  static encodeWrapETH(amount) {\n    return viem.encodeFunctionData({ abi: _PaymentsExtended.ABI, functionName: \"wrapETH\", args: [amount] });\n  }\n};\nvar PaymentsExtended = _PaymentsExtended;\nPaymentsExtended.ABI = peripheryPaymentsWithFeeExtendedAbi;\n\n// evm/v3-router/utils/swapRouter.ts\nvar ZERO2 = 0n;\nvar REFUND_ETH_PRICE_IMPACT_THRESHOLD = new sdk.Percent(50n, 100n);\nvar _SwapRouter = class {\n  /**\n   * Cannot be constructed.\n   */\n  // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n  constructor() {\n  }\n  /**\n   * @notice Generates the calldata for a Swap with a V2 Route.\n   * @param trade The V2Trade to encode.\n   * @param options SwapOptions to use for the trade.\n   * @param routerMustCustody Flag for whether funds should be sent to the router\n   * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check\n   * @returns A string array of calldatas for the trade.\n   */\n  static encodeV2Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck) {\n    const amountIn = maximumAmountIn(trade, options.slippageTolerance).quotient;\n    const amountOut = minimumAmountOut(trade, options.slippageTolerance).quotient;\n    const route = trade.routes[0];\n    const path = route.path.map((token) => token.wrapped.address);\n    const recipient = routerMustCustody ? chunkGYU5FW7D_js.ADDRESS_THIS : typeof options.recipient === \"undefined\" ? chunkGYU5FW7D_js.MSG_SENDER : sdk.validateAndParseAddress(options.recipient);\n    if (trade.tradeType === sdk.TradeType.EXACT_INPUT) {\n      const exactInputParams = [amountIn, performAggregatedSlippageCheck ? 0n : amountOut, path, recipient];\n      return viem.encodeFunctionData({\n        abi: _SwapRouter.ABI,\n        functionName: \"swapExactTokensForTokens\",\n        args: exactInputParams\n      });\n    }\n    const exactOutputParams = [amountOut, amountIn, path, recipient];\n    return viem.encodeFunctionData({\n      abi: _SwapRouter.ABI,\n      functionName: \"swapTokensForExactTokens\",\n      args: exactOutputParams\n    });\n  }\n  /**\n   * @notice Generates the calldata for a Swap with a Stable Route.\n   * @param trade The Trade to encode.\n   * @param options SwapOptions to use for the trade.\n   * @param routerMustCustody Flag for whether funds should be sent to the router\n   * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check\n   * @returns A string array of calldatas for the trade.\n   */\n  static encodeStableSwap(trade, options, routerMustCustody, performAggregatedSlippageCheck) {\n    const amountIn = maximumAmountIn(trade, options.slippageTolerance).quotient;\n    const amountOut = minimumAmountOut(trade, options.slippageTolerance).quotient;\n    if (trade.routes.length > 1 || trade.routes[0].pools.some((p) => !isStablePool(p))) {\n      throw new Error(\"Unsupported trade to encode\");\n    }\n    const route = trade.routes[0];\n    const path = route.path.map((token) => token.wrapped.address);\n    const flags = route.pools.map((p) => BigInt(p.balances.length));\n    const recipient = routerMustCustody ? chunkGYU5FW7D_js.ADDRESS_THIS : typeof options.recipient === \"undefined\" ? chunkGYU5FW7D_js.MSG_SENDER : sdk.validateAndParseAddress(options.recipient);\n    if (trade.tradeType === sdk.TradeType.EXACT_INPUT) {\n      const exactInputParams = [\n        path,\n        flags,\n        amountIn,\n        performAggregatedSlippageCheck ? 0n : amountOut,\n        recipient\n      ];\n      return viem.encodeFunctionData({\n        abi: _SwapRouter.ABI,\n        functionName: \"exactInputStableSwap\",\n        args: exactInputParams\n      });\n    }\n    const exactOutputParams = [path, flags, amountOut, amountIn, recipient];\n    return viem.encodeFunctionData({\n      abi: _SwapRouter.ABI,\n      functionName: \"exactOutputStableSwap\",\n      args: exactOutputParams\n    });\n  }\n  /**\n   * @notice Generates the calldata for a Swap with a V3 Route.\n   * @param trade The V3Trade to encode.\n   * @param options SwapOptions to use for the trade.\n   * @param routerMustCustody Flag for whether funds should be sent to the router\n   * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check\n   * @returns A string array of calldatas for the trade.\n   */\n  static encodeV3Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck) {\n    const calldatas = [];\n    for (const route of trade.routes) {\n      const { inputAmount, outputAmount, pools, path } = route;\n      const amountIn = maximumAmountIn(trade, options.slippageTolerance, inputAmount).quotient;\n      const amountOut = minimumAmountOut(trade, options.slippageTolerance, outputAmount).quotient;\n      const singleHop = pools.length === 1;\n      const recipient = routerMustCustody ? chunkGYU5FW7D_js.ADDRESS_THIS : typeof options.recipient === \"undefined\" ? chunkGYU5FW7D_js.MSG_SENDER : sdk.validateAndParseAddress(options.recipient);\n      if (singleHop) {\n        if (trade.tradeType === sdk.TradeType.EXACT_INPUT) {\n          const exactInputSingleParams = {\n            tokenIn: path[0].wrapped.address,\n            tokenOut: path[1].wrapped.address,\n            fee: pools[0].fee,\n            recipient,\n            amountIn,\n            amountOutMinimum: performAggregatedSlippageCheck ? 0n : amountOut,\n            sqrtPriceLimitX96: 0n\n          };\n          calldatas.push(\n            viem.encodeFunctionData({\n              abi: _SwapRouter.ABI,\n              functionName: \"exactInputSingle\",\n              args: [exactInputSingleParams]\n            })\n          );\n        } else {\n          const exactOutputSingleParams = {\n            tokenIn: path[0].wrapped.address,\n            tokenOut: path[1].wrapped.address,\n            fee: pools[0].fee,\n            recipient,\n            amountOut,\n            amountInMaximum: amountIn,\n            sqrtPriceLimitX96: 0n\n          };\n          calldatas.push(\n            viem.encodeFunctionData({\n              abi: _SwapRouter.ABI,\n              functionName: \"exactOutputSingle\",\n              args: [exactOutputSingleParams]\n            })\n          );\n        }\n      } else {\n        const pathStr = encodeMixedRouteToPath(\n          { ...route, input: inputAmount.currency, output: outputAmount.currency },\n          trade.tradeType === sdk.TradeType.EXACT_OUTPUT\n        );\n        if (trade.tradeType === sdk.TradeType.EXACT_INPUT) {\n          const exactInputParams = {\n            path: pathStr,\n            recipient,\n            amountIn,\n            amountOutMinimum: performAggregatedSlippageCheck ? 0n : amountOut\n          };\n          calldatas.push(\n            viem.encodeFunctionData({\n              abi: _SwapRouter.ABI,\n              functionName: \"exactInput\",\n              args: [exactInputParams]\n            })\n          );\n        } else {\n          const exactOutputParams = {\n            path: pathStr,\n            recipient,\n            amountOut,\n            amountInMaximum: amountIn\n          };\n          calldatas.push(\n            viem.encodeFunctionData({\n              abi: _SwapRouter.ABI,\n              functionName: \"exactOutput\",\n              args: [exactOutputParams]\n            })\n          );\n        }\n      }\n    }\n    return calldatas;\n  }\n  /**\n   * @notice Generates the calldata for a MixedRouteSwap. Since single hop routes are not MixedRoutes, we will instead generate\n   *         them via the existing encodeV3Swap and encodeV2Swap methods.\n   * @param trade The MixedRouteTrade to encode.\n   * @param options SwapOptions to use for the trade.\n   * @param routerMustCustody Flag for whether funds should be sent to the router\n   * @param performAggregatedSlippageCheck Flag for whether we want to perform an aggregated slippage check\n   * @returns A string array of calldatas for the trade.\n   */\n  static encodeMixedRouteSwap(trade, options, routerMustCustody, performAggregatedSlippageCheck) {\n    let calldatas = [];\n    const isExactIn = trade.tradeType === sdk.TradeType.EXACT_INPUT;\n    for (const route of trade.routes) {\n      const { inputAmount, outputAmount, pools } = route;\n      const amountIn = maximumAmountIn(trade, options.slippageTolerance, inputAmount).quotient;\n      const amountOut = minimumAmountOut(trade, options.slippageTolerance, outputAmount).quotient;\n      const singleHop = pools.length === 1;\n      const recipient = routerMustCustody ? chunkGYU5FW7D_js.ADDRESS_THIS : typeof options.recipient === \"undefined\" ? chunkGYU5FW7D_js.MSG_SENDER : sdk.validateAndParseAddress(options.recipient);\n      const mixedRouteIsAllV3 = (r) => {\n        return r.pools.every(isV3Pool);\n      };\n      const mixedRouteIsAllV2 = (r) => {\n        return r.pools.every(isV2Pool);\n      };\n      const mixedRouteIsAllStable = (r) => {\n        return r.pools.every(isStablePool);\n      };\n      if (singleHop) {\n        if (mixedRouteIsAllV3(route)) {\n          calldatas = [\n            ...calldatas,\n            ..._SwapRouter.encodeV3Swap(\n              {\n                ...trade,\n                routes: [route],\n                inputAmount,\n                outputAmount\n              },\n              options,\n              routerMustCustody,\n              performAggregatedSlippageCheck\n            )\n          ];\n        } else if (mixedRouteIsAllV2(route)) {\n          calldatas = [\n            ...calldatas,\n            _SwapRouter.encodeV2Swap(\n              {\n                ...trade,\n                routes: [route],\n                inputAmount,\n                outputAmount\n              },\n              options,\n              routerMustCustody,\n              performAggregatedSlippageCheck\n            )\n          ];\n        } else if (mixedRouteIsAllStable(route)) {\n          calldatas = [\n            ...calldatas,\n            _SwapRouter.encodeStableSwap(\n              {\n                ...trade,\n                routes: [route],\n                inputAmount,\n                outputAmount\n              },\n              options,\n              routerMustCustody,\n              performAggregatedSlippageCheck\n            )\n          ];\n        } else {\n          throw new Error(\"Unsupported route to encode\");\n        }\n      } else {\n        const sections = partitionMixedRouteByProtocol(route);\n        const isLastSectionInRoute = (i) => {\n          return i === sections.length - 1;\n        };\n        let outputToken;\n        let inputToken = inputAmount.currency.wrapped;\n        for (let i = 0; i < sections.length; i++) {\n          const section = sections[i];\n          outputToken = getOutputOfPools(section, inputToken);\n          const newRoute = buildBaseRoute([...section], inputToken, outputToken);\n          inputToken = outputToken.wrapped;\n          const lastSectionInRoute = isLastSectionInRoute(i);\n          const recipientAddress = lastSectionInRoute ? recipient : chunkGYU5FW7D_js.ADDRESS_THIS;\n          const inAmount = i === 0 ? amountIn : 0n;\n          const outAmount = !lastSectionInRoute ? 0n : amountOut;\n          if (mixedRouteIsAllV3(newRoute)) {\n            const pathStr = encodeMixedRouteToPath(newRoute, !isExactIn);\n            if (isExactIn) {\n              const exactInputParams = {\n                path: pathStr,\n                recipient: recipientAddress,\n                amountIn: inAmount,\n                amountOutMinimum: outAmount\n              };\n              calldatas.push(\n                viem.encodeFunctionData({\n                  abi: _SwapRouter.ABI,\n                  functionName: \"exactInput\",\n                  args: [exactInputParams]\n                })\n              );\n            } else {\n              const exactOutputParams = {\n                path: pathStr,\n                recipient,\n                amountOut: outAmount,\n                amountInMaximum: inAmount\n              };\n              calldatas.push(\n                viem.encodeFunctionData({\n                  abi: _SwapRouter.ABI,\n                  functionName: \"exactOutput\",\n                  args: [exactOutputParams]\n                })\n              );\n            }\n          } else if (mixedRouteIsAllV2(newRoute)) {\n            const path = newRoute.path.map((token) => token.wrapped.address);\n            if (isExactIn) {\n              const exactInputParams = [\n                inAmount,\n                // amountIn\n                outAmount,\n                // amountOutMin\n                path,\n                // path\n                recipientAddress\n                // to\n              ];\n              calldatas.push(\n                viem.encodeFunctionData({\n                  abi: _SwapRouter.ABI,\n                  functionName: \"swapExactTokensForTokens\",\n                  args: exactInputParams\n                })\n              );\n            } else {\n              const exactOutputParams = [outAmount, inAmount, path, recipientAddress];\n              calldatas.push(\n                viem.encodeFunctionData({\n                  abi: _SwapRouter.ABI,\n                  functionName: \"swapTokensForExactTokens\",\n                  args: exactOutputParams\n                })\n              );\n            }\n          } else if (mixedRouteIsAllStable(newRoute)) {\n            const path = newRoute.path.map((token) => token.wrapped.address);\n            const flags = newRoute.pools.map((pool) => BigInt(pool.balances.length));\n            if (isExactIn) {\n              const exactInputParams = [\n                path,\n                // path\n                flags,\n                // stable pool types\n                inAmount,\n                // amountIn\n                outAmount,\n                // amountOutMin\n                recipientAddress\n                // to\n              ];\n              calldatas.push(\n                viem.encodeFunctionData({\n                  abi: _SwapRouter.ABI,\n                  functionName: \"exactInputStableSwap\",\n                  args: exactInputParams\n                })\n              );\n            } else {\n              const exactOutputParams = [path, flags, outAmount, inAmount, recipientAddress];\n              calldatas.push(\n                viem.encodeFunctionData({\n                  abi: _SwapRouter.ABI,\n                  functionName: \"exactOutputStableSwap\",\n                  args: exactOutputParams\n                })\n              );\n            }\n          } else {\n            throw new Error(\"Unsupported route\");\n          }\n        }\n      }\n    }\n    return calldatas;\n  }\n  static encodeSwaps(anyTrade, options, isSwapAndAdd) {\n    const trades = !Array.isArray(anyTrade) ? [anyTrade] : anyTrade;\n    const numberOfTrades = trades.reduce((numOfTrades, trade) => numOfTrades + trade.routes.length, 0);\n    const sampleTrade = trades[0];\n    invariant6__default.default(\n      trades.every((trade) => trade.inputAmount.currency.equals(sampleTrade.inputAmount.currency)),\n      \"TOKEN_IN_DIFF\"\n    );\n    invariant6__default.default(\n      trades.every((trade) => trade.outputAmount.currency.equals(sampleTrade.outputAmount.currency)),\n      \"TOKEN_OUT_DIFF\"\n    );\n    invariant6__default.default(\n      trades.every((trade) => trade.tradeType === sampleTrade.tradeType),\n      \"TRADE_TYPE_DIFF\"\n    );\n    const calldatas = [];\n    const inputIsNative = sampleTrade.inputAmount.currency.isNative;\n    const outputIsNative = sampleTrade.outputAmount.currency.isNative;\n    const performAggregatedSlippageCheck = sampleTrade.tradeType === sdk.TradeType.EXACT_INPUT && numberOfTrades > 2;\n    const routerMustCustody = outputIsNative || !!options.fee || !!isSwapAndAdd || performAggregatedSlippageCheck;\n    if (options.inputTokenPermit) {\n      invariant6__default.default(sampleTrade.inputAmount.currency.isToken, \"NON_TOKEN_PERMIT\");\n      calldatas.push(v3Sdk.SelfPermit.encodePermit(sampleTrade.inputAmount.currency, options.inputTokenPermit));\n    }\n    for (const trade of trades) {\n      if (trade.routes.length === 1 && trade.routes[0].type === 0 /* V2 */) {\n        calldatas.push(_SwapRouter.encodeV2Swap(trade, options, routerMustCustody, performAggregatedSlippageCheck));\n      } else if (trade.routes.every((r) => r.type === 1 /* V3 */)) {\n        for (const calldata of _SwapRouter.encodeV3Swap(\n          trade,\n          options,\n          routerMustCustody,\n          performAggregatedSlippageCheck\n        )) {\n          calldatas.push(calldata);\n        }\n      } else {\n        for (const calldata of _SwapRouter.encodeMixedRouteSwap(\n          trade,\n          options,\n          routerMustCustody,\n          performAggregatedSlippageCheck\n        )) {\n          calldatas.push(calldata);\n        }\n      }\n    }\n    const ZERO_IN = sdk.CurrencyAmount.fromRawAmount(sampleTrade.inputAmount.currency, 0);\n    const ZERO_OUT = sdk.CurrencyAmount.fromRawAmount(sampleTrade.outputAmount.currency, 0);\n    const minAmountOut = trades.reduce(\n      (sum2, trade) => sum2.add(minimumAmountOut(trade, options.slippageTolerance)),\n      ZERO_OUT\n    );\n    const quoteAmountOut = trades.reduce(\n      (sum2, trade) => sum2.add(trade.outputAmount),\n      ZERO_OUT\n    );\n    const totalAmountIn = trades.reduce(\n      (sum2, trade) => sum2.add(maximumAmountIn(trade, options.slippageTolerance)),\n      ZERO_IN\n    );\n    return {\n      calldatas,\n      sampleTrade,\n      routerMustCustody,\n      inputIsNative,\n      outputIsNative,\n      totalAmountIn,\n      minimumAmountOut: minAmountOut,\n      quoteAmountOut\n    };\n  }\n  /**\n   * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.\n   * @param trades to produce call parameters for\n   * @param options options for the call parameters\n   */\n  static swapCallParameters(trades, options) {\n    const {\n      calldatas,\n      sampleTrade,\n      routerMustCustody,\n      inputIsNative,\n      outputIsNative,\n      totalAmountIn,\n      minimumAmountOut: minAmountOut\n    } = _SwapRouter.encodeSwaps(trades, options);\n    if (routerMustCustody) {\n      if (outputIsNative) {\n        calldatas.push(PaymentsExtended.encodeUnwrapWETH9(minAmountOut.quotient, options.recipient, options.fee));\n      } else {\n        calldatas.push(\n          PaymentsExtended.encodeSweepToken(\n            sampleTrade.outputAmount.currency.wrapped,\n            minAmountOut.quotient,\n            options.recipient,\n            options.fee\n          )\n        );\n      }\n    }\n    if (inputIsNative && (sampleTrade.tradeType === sdk.TradeType.EXACT_OUTPUT || _SwapRouter.riskOfPartialFill(trades))) {\n      calldatas.push(v3Sdk.Payments.encodeRefundETH());\n    }\n    return {\n      calldata: MulticallExtended.encodeMulticall(calldatas, options.deadlineOrPreviousBlockhash),\n      value: v3Sdk.toHex(inputIsNative ? totalAmountIn.quotient : ZERO2)\n    };\n  }\n  /**\n   * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.\n   * @param trades to produce call parameters for\n   * @param options options for the call parameters\n   */\n  static swapAndAddCallParameters(trades, options, position, addLiquidityOptions, tokenInApprovalType, tokenOutApprovalType) {\n    const {\n      calldatas,\n      inputIsNative,\n      outputIsNative,\n      sampleTrade,\n      totalAmountIn: totalAmountSwapped,\n      quoteAmountOut,\n      minimumAmountOut: minAmountOut\n    } = _SwapRouter.encodeSwaps(trades, options, true);\n    if (options.outputTokenPermit) {\n      invariant6__default.default(quoteAmountOut.currency.isToken, \"NON_TOKEN_PERMIT_OUTPUT\");\n      calldatas.push(v3Sdk.SelfPermit.encodePermit(quoteAmountOut.currency, options.outputTokenPermit));\n    }\n    const {\n      inputAmount: {\n        currency: { chainId }\n      }\n    } = sampleTrade;\n    const zeroForOne = position.pool.token0.wrapped.address === totalAmountSwapped.currency.wrapped.address;\n    const { positionAmountIn, positionAmountOut } = _SwapRouter.getPositionAmounts(position, zeroForOne);\n    const tokenIn = inputIsNative ? sdk.WNATIVE[chainId] : positionAmountIn.currency.wrapped;\n    const tokenOut = outputIsNative ? sdk.WNATIVE[chainId] : positionAmountOut.currency.wrapped;\n    const amountOutRemaining = positionAmountOut.subtract(quoteAmountOut.wrapped);\n    if (amountOutRemaining.greaterThan(sdk.CurrencyAmount.fromRawAmount(positionAmountOut.currency, 0))) {\n      if (outputIsNative) {\n        calldatas.push(PaymentsExtended.encodeWrapETH(amountOutRemaining.quotient));\n      } else {\n        calldatas.push(PaymentsExtended.encodePull(tokenOut, amountOutRemaining.quotient));\n      }\n    }\n    if (inputIsNative) {\n      calldatas.push(PaymentsExtended.encodeWrapETH(positionAmountIn.quotient));\n    } else {\n      calldatas.push(PaymentsExtended.encodePull(tokenIn, positionAmountIn.quotient));\n    }\n    if (tokenInApprovalType !== 0 /* NOT_REQUIRED */)\n      calldatas.push(ApproveAndCall.encodeApprove(tokenIn, tokenInApprovalType));\n    if (tokenOutApprovalType !== 0 /* NOT_REQUIRED */)\n      calldatas.push(ApproveAndCall.encodeApprove(tokenOut, tokenOutApprovalType));\n    const minimalPosition = v3Sdk.Position.fromAmounts({\n      pool: position.pool,\n      tickLower: position.tickLower,\n      tickUpper: position.tickUpper,\n      amount0: zeroForOne ? position.amount0.quotient.toString() : minAmountOut.quotient.toString(),\n      amount1: zeroForOne ? minAmountOut.quotient.toString() : position.amount1.quotient.toString(),\n      useFullPrecision: false\n    });\n    calldatas.push(\n      ApproveAndCall.encodeAddLiquidity(position, minimalPosition, addLiquidityOptions, options.slippageTolerance)\n    );\n    if (inputIsNative) {\n      calldatas.push(PaymentsExtended.encodeUnwrapWETH9(ZERO2));\n    } else {\n      calldatas.push(PaymentsExtended.encodeSweepToken(tokenIn, ZERO2));\n    }\n    if (outputIsNative) {\n      calldatas.push(PaymentsExtended.encodeUnwrapWETH9(ZERO2));\n    } else {\n      calldatas.push(PaymentsExtended.encodeSweepToken(tokenOut, ZERO2));\n    }\n    let value;\n    if (inputIsNative) {\n      value = totalAmountSwapped.wrapped.add(positionAmountIn.wrapped).quotient;\n    } else if (outputIsNative) {\n      value = amountOutRemaining.quotient;\n    } else {\n      value = ZERO2;\n    }\n    return {\n      calldata: MulticallExtended.encodeMulticall(calldatas, options.deadlineOrPreviousBlockhash),\n      value: v3Sdk.toHex(value.toString())\n    };\n  }\n  // if price impact is very high, there's a chance of hitting max/min prices resulting in a partial fill of the swap\n  static riskOfPartialFill(trades) {\n    if (Array.isArray(trades)) {\n      return trades.some((trade) => {\n        return _SwapRouter.v3TradeWithHighPriceImpact(trade);\n      });\n    }\n    return _SwapRouter.v3TradeWithHighPriceImpact(trades);\n  }\n  static v3TradeWithHighPriceImpact(trade) {\n    return !(trade.routes.length === 1 && trade.routes[0].type === 0 /* V2 */) && getPriceImpact(trade).greaterThan(REFUND_ETH_PRICE_IMPACT_THRESHOLD);\n  }\n  static getPositionAmounts(position, zeroForOne) {\n    const { amount0, amount1 } = position.mintAmounts;\n    const currencyAmount0 = sdk.CurrencyAmount.fromRawAmount(position.pool.token0, amount0);\n    const currencyAmount1 = sdk.CurrencyAmount.fromRawAmount(position.pool.token1, amount1);\n    const [positionAmountIn, positionAmountOut] = zeroForOne ? [currencyAmount0, currencyAmount1] : [currencyAmount1, currencyAmount0];\n    return { positionAmountIn, positionAmountOut };\n  }\n};\nvar SwapRouter = _SwapRouter;\nSwapRouter.ABI = swapRouter02Abi;\n\n// evm/v3-router/utils/transformer.ts\nvar transformer_exports = {};\nchunkGYU5FW7D_js.__export(transformer_exports, {\n  parseBinPoolBinReserves: () => parseBinPoolBinReserves,\n  parseCurrency: () => parseCurrency,\n  parseCurrencyAmount: () => parseCurrencyAmount,\n  parsePool: () => parsePool,\n  parseRoute: () => parseRoute,\n  parseTick: () => parseTick,\n  parseTrade: () => parseTrade,\n  serializeBinPoolBinReserves: () => serializeBinPoolBinReserves,\n  serializeCurrency: () => serializeCurrency,\n  serializeCurrencyAmount: () => serializeCurrencyAmount,\n  serializePool: () => serializePool,\n  serializeRoute: () => serializeRoute,\n  serializeTick: () => serializeTick,\n  serializeTrade: () => serializeTrade\n});\nvar ONE_HUNDRED = 100n;\nfunction serializeCurrency(currency) {\n  return {\n    address: currency.isNative ? v3Sdk.ADDRESS_ZERO : currency.wrapped.address,\n    decimals: currency.decimals,\n    symbol: currency.symbol\n  };\n}\nfunction serializeCurrencyAmount(amount) {\n  return {\n    currency: serializeCurrency(amount.currency),\n    value: amount.quotient.toString()\n  };\n}\nfunction serializeTick(tick) {\n  return {\n    index: tick.index,\n    liquidityNet: String(tick.liquidityNet),\n    liquidityGross: String(tick.liquidityGross)\n  };\n}\nfunction serializePool(pool) {\n  if (isV2Pool(pool)) {\n    return {\n      ...pool,\n      reserve0: serializeCurrencyAmount(pool.reserve0),\n      reserve1: serializeCurrencyAmount(pool.reserve1)\n    };\n  }\n  if (isV3Pool(pool)) {\n    return {\n      ...pool,\n      token0: serializeCurrency(pool.token0),\n      token1: serializeCurrency(pool.token1),\n      liquidity: pool.liquidity.toString(),\n      sqrtRatioX96: pool.sqrtRatioX96.toString(),\n      token0ProtocolFee: pool.token0ProtocolFee.toFixed(0),\n      token1ProtocolFee: pool.token1ProtocolFee.toFixed(0),\n      ticks: pool.ticks?.map(serializeTick),\n      reserve0: pool.reserve0 && serializeCurrencyAmount(pool.reserve0),\n      reserve1: pool.reserve1 && serializeCurrencyAmount(pool.reserve1)\n    };\n  }\n  if (isStablePool(pool)) {\n    return {\n      ...pool,\n      balances: pool.balances.map(serializeCurrencyAmount),\n      amplifier: pool.amplifier.toString(),\n      fee: pool.fee.toSignificant(6)\n    };\n  }\n  if (isInfinityClPool(pool)) {\n    return {\n      ...pool,\n      currency0: serializeCurrency(pool.currency0),\n      currency1: serializeCurrency(pool.currency1),\n      liquidity: pool.liquidity.toString(),\n      sqrtRatioX96: pool.sqrtRatioX96.toString(),\n      ticks: pool.ticks?.map(serializeTick),\n      reserve0: pool.reserve0 && serializeCurrencyAmount(pool.reserve0),\n      reserve1: pool.reserve1 && serializeCurrencyAmount(pool.reserve1)\n    };\n  }\n  if (isInfinityBinPool(pool)) {\n    return {\n      ...pool,\n      reserveOfBin: serializeBinPoolBinReserves(pool.reserveOfBin),\n      currency0: serializeCurrency(pool.currency0),\n      currency1: serializeCurrency(pool.currency1),\n      reserve0: pool.reserve0 && serializeCurrencyAmount(pool.reserve0),\n      reserve1: pool.reserve1 && serializeCurrencyAmount(pool.reserve1)\n    };\n  }\n  throw new Error(\"Cannot serialize unsupoorted pool\");\n}\nfunction serializeBinPoolBinReserves(reserveOfBin) {\n  if (!reserveOfBin)\n    return void 0;\n  const binIds = Object.keys(reserveOfBin);\n  const binReserves = {};\n  for (const b of binIds) {\n    const binId = Number(b);\n    binReserves[binId] = {\n      reserveX: String(reserveOfBin[binId].reserveX),\n      reserveY: String(reserveOfBin[binId].reserveY)\n    };\n  }\n  return binReserves;\n}\nfunction parseBinPoolBinReserves(reserveOfBin) {\n  if (!reserveOfBin)\n    return void 0;\n  const binIds = Object.keys(reserveOfBin);\n  const binReserves = {};\n  for (const b of binIds) {\n    const binId = Number(b);\n    binReserves[binId] = {\n      reserveX: BigInt(reserveOfBin[binId].reserveX),\n      reserveY: BigInt(reserveOfBin[binId].reserveY)\n    };\n  }\n  return binReserves;\n}\nfunction serializeRoute(route) {\n  return {\n    ...route,\n    pools: route.pools.map(serializePool),\n    path: route.path.map(serializeCurrency),\n    inputAmount: serializeCurrencyAmount(route.inputAmount),\n    outputAmount: serializeCurrencyAmount(route.outputAmount)\n  };\n}\nfunction serializeTrade(trade) {\n  return {\n    ...trade,\n    inputAmount: serializeCurrencyAmount(trade.inputAmount),\n    outputAmount: serializeCurrencyAmount(trade.outputAmount),\n    routes: trade.routes.map(serializeRoute),\n    gasEstimate: trade.gasEstimate.toString(),\n    gasEstimateInUSD: trade.gasEstimateInUSD && serializeCurrencyAmount(trade.gasEstimateInUSD)\n  };\n}\nfunction parseTick(tick) {\n  return new v3Sdk.Tick(tick);\n}\nfunction parseCurrency(chainId, currency) {\n  if (currency.address === v3Sdk.ADDRESS_ZERO) {\n    return sdk.Native.onChain(chainId);\n  }\n  const { address, decimals, symbol } = currency;\n  return new sdk.ERC20Token(chainId, address, decimals, symbol);\n}\nfunction parseCurrencyAmount(chainId, amount) {\n  return sdk.CurrencyAmount.fromRawAmount(parseCurrency(chainId, amount.currency), amount.value);\n}\nfunction parsePool(chainId, pool) {\n  if (pool.type === 0 /* V2 */) {\n    return {\n      ...pool,\n      reserve0: parseCurrencyAmount(chainId, pool.reserve0),\n      reserve1: parseCurrencyAmount(chainId, pool.reserve1)\n    };\n  }\n  if (pool.type === 1 /* V3 */) {\n    return {\n      ...pool,\n      token0: parseCurrency(chainId, pool.token0),\n      token1: parseCurrency(chainId, pool.token1),\n      liquidity: BigInt(pool.liquidity),\n      sqrtRatioX96: BigInt(pool.sqrtRatioX96),\n      token0ProtocolFee: new sdk.Percent(pool.token0ProtocolFee, ONE_HUNDRED),\n      token1ProtocolFee: new sdk.Percent(pool.token1ProtocolFee, ONE_HUNDRED),\n      ticks: pool.ticks?.map(parseTick),\n      reserve0: pool.reserve0 && parseCurrencyAmount(chainId, pool.reserve0),\n      reserve1: pool.reserve1 && parseCurrencyAmount(chainId, pool.reserve1)\n    };\n  }\n  if (pool.type === 2 /* STABLE */) {\n    return {\n      ...pool,\n      balances: pool.balances.map((b) => parseCurrencyAmount(chainId, b)),\n      amplifier: BigInt(pool.amplifier),\n      fee: new sdk.Percent(parseFloat(pool.fee) * 1e6, ONE_HUNDRED * 1000000n)\n    };\n  }\n  if (pool.type === 3 /* InfinityCL */) {\n    return {\n      ...pool,\n      currency0: parseCurrency(chainId, pool.currency0),\n      currency1: parseCurrency(chainId, pool.currency1),\n      liquidity: BigInt(pool.liquidity),\n      sqrtRatioX96: BigInt(pool.sqrtRatioX96),\n      ticks: pool.ticks?.map(parseTick),\n      reserve0: pool.reserve0 && parseCurrencyAmount(chainId, pool.reserve0),\n      reserve1: pool.reserve1 && parseCurrencyAmount(chainId, pool.reserve1)\n    };\n  }\n  if (pool.type === 4 /* InfinityBIN */) {\n    return {\n      ...pool,\n      reserveOfBin: parseBinPoolBinReserves(pool.reserveOfBin),\n      currency0: parseCurrency(chainId, pool.currency0),\n      currency1: parseCurrency(chainId, pool.currency1),\n      reserve0: pool.reserve0 && parseCurrencyAmount(chainId, pool.reserve0),\n      reserve1: pool.reserve1 && parseCurrencyAmount(chainId, pool.reserve1)\n    };\n  }\n  throw new Error(\"Cannot parse unsupoorted pool\");\n}\nfunction parseRoute(chainId, route) {\n  return {\n    ...route,\n    pools: route.pools.map((p) => parsePool(chainId, p)),\n    path: route.path.map((c) => parseCurrency(chainId, c)),\n    inputAmount: parseCurrencyAmount(chainId, route.inputAmount),\n    outputAmount: parseCurrencyAmount(chainId, route.outputAmount)\n  };\n}\nfunction parseTrade(chainId, trade) {\n  return {\n    ...trade,\n    inputAmount: parseCurrencyAmount(chainId, trade.inputAmount),\n    outputAmount: parseCurrencyAmount(chainId, trade.outputAmount),\n    routes: trade.routes.map((r) => parseRoute(chainId, r)),\n    gasEstimate: trade.gasEstimate ? BigInt(trade.gasEstimate) : 0n,\n    gasEstimateInUSD: trade.gasEstimateInUSD && parseCurrencyAmount(chainId, trade.gasEstimateInUSD)\n  };\n}\n\n// evm/v3-router/functions/getPairCombinations.ts\nvar getToken = memoize2__default.default(\n  (chainId, address) => {\n    if (!chainId || !address) {\n      return void 0;\n    }\n    const tokens$1 = tokens.getTokensByChain(chainId);\n    for (const token of tokens$1) {\n      if (token.address.toLowerCase() === address.toLowerCase()) {\n        return token;\n      }\n    }\n    return void 0;\n  },\n  (chainId, address) => `${chainId}_${address}`\n);\nfunction isTokenInCommonBases(token) {\n  return Boolean(token && chunkGYU5FW7D_js.BASES_TO_CHECK_TRADES_AGAINST[token.chainId]?.find((t) => t.equals(token)));\n}\nfunction createTokenBasesFromGaugesGetter() {\n  const getCurrencyIdentifier = (c) => `${c?.chainId}_${c?.wrapped.address}_${c?.isNative}`;\n  const cache = {};\n  return async function getTokenBasesFromGauges2(currency) {\n    const id = getCurrencyIdentifier(currency);\n    if (!id)\n      return [];\n    if (cache[id])\n      return cache[id];\n    const chainId = currency?.chainId;\n    const address = currency?.wrapped.address;\n    const gauges$1 = await gauges.safeGetGaugesByChain(chainId);\n    const bases = /* @__PURE__ */ new Set();\n    const addTokenToBases = (token) => token && !isTokenInCommonBases(token) && bases.add(token);\n    const addTokensToBases = (tokens) => tokens.forEach(addTokenToBases);\n    const isCurrentToken = (addr) => addr.toLowerCase() === address?.toLowerCase();\n    if (currency && chainId && isTokenInCommonBases(currency.wrapped)) {\n      cache[id] = [];\n      return cache[id];\n    }\n    for (const gauge of gauges$1) {\n      const { type } = gauge;\n      if (type === gauges.GaugeType.V2 || type === gauges.GaugeType.V3) {\n        const { token0Address, token1Address } = gauge;\n        if (isCurrentToken(token0Address)) {\n          addTokenToBases(getToken(chainId, token1Address));\n        }\n        if (isCurrentToken(token1Address)) {\n          addTokenToBases(getToken(chainId, token0Address));\n        }\n        continue;\n      }\n      if (type === gauges.GaugeType.StableSwap) {\n        const { tokenAddresses } = gauge;\n        const index = tokenAddresses.findIndex(isCurrentToken);\n        if (index < 0) {\n          continue;\n        }\n        addTokensToBases(\n          [...tokenAddresses.slice(0, index), ...tokenAddresses.slice(index + 1)].map((addr) => getToken(chainId, addr)).filter((token) => Boolean(token))\n        );\n      }\n    }\n    const baseList = Array.from(bases);\n    log(\n      `[ADDITIONAL_BASES] Token ${currency?.symbol}, bases from guages: [${baseList.map((base) => base.symbol).join(\",\")}]`\n    );\n    cache[id] = baseList;\n    return baseList;\n  };\n}\nvar getTokenBasesFromGauges = createTokenBasesFromGaugesGetter();\nvar resolver = (currencyA, currencyB) => {\n  if (!currencyA || !currencyB || currencyA.chainId !== currencyB.chainId || currencyA.wrapped.equals(currencyB.wrapped)) {\n    return `${currencyA?.chainId}_${currencyA?.wrapped?.address}_${currencyB?.wrapped?.address}`;\n  }\n  const [token0, token1] = currencyA.wrapped.sortsBefore(currencyB.wrapped) ? [currencyA.wrapped, currencyB.wrapped] : [currencyB.wrapped, currencyA.wrapped];\n  return `${token0.chainId}_${token0.address}_${token1.address}`;\n};\nasync function getAdditionalCheckAgainstBaseTokens(currencyA, currencyB) {\n  const chainId = currencyA?.chainId;\n  const additionalBases = {\n    ...chainId ? chunkGYU5FW7D_js.ADDITIONAL_BASES[chainId] ?? {} : {}\n  };\n  const uniq = (tokens) => uniqBy__default.default(tokens, (t) => t.address);\n  const additionalA = currencyA && chainId ? uniq([...additionalBases[currencyA.wrapped.address] || [], ...await getTokenBasesFromGauges(currencyA)]) ?? [] : [];\n  const additionalB = currencyB && chainId ? uniq([...additionalBases[currencyB.wrapped.address] || [], ...await getTokenBasesFromGauges(currencyB)]) ?? [] : [];\n  return [...additionalA, ...additionalB];\n}\nvar getCheckAgainstBaseTokens = memoize2__default.default(\n  async (currencyA, currencyB) => {\n    const chainId = currencyA?.chainId;\n    if (!chainId || !currencyA || !currencyB || !isCurrenciesSameChain(currencyA, currencyB)) {\n      return [];\n    }\n    const [tokenA, tokenB] = chainId ? [chunkGYU5FW7D_js.wrappedCurrency(currencyA, chainId), chunkGYU5FW7D_js.wrappedCurrency(currencyB, chainId)] : [void 0, void 0];\n    if (!tokenA || !tokenB) {\n      return [];\n    }\n    const common = chunkGYU5FW7D_js.BASES_TO_CHECK_TRADES_AGAINST[chainId] ?? [];\n    return [...common, ...await getAdditionalCheckAgainstBaseTokens(currencyA, currencyB)];\n  },\n  resolver\n);\nvar getPairCombinations = memoize2__default.default(\n  async (currencyA, currencyB) => {\n    const chainId = currencyA?.chainId;\n    if (!chainId || !currencyA || !currencyB || !isCurrenciesSameChain(currencyA, currencyB)) {\n      return [];\n    }\n    const [tokenA, tokenB] = chainId ? [chunkGYU5FW7D_js.wrappedCurrency(currencyA, chainId), chunkGYU5FW7D_js.wrappedCurrency(currencyB, chainId)] : [void 0, void 0];\n    if (!tokenA || !tokenB) {\n      return [];\n    }\n    const bases = await getCheckAgainstBaseTokens(currencyA, currencyB);\n    const basePairs = flatMap__default.default(\n      bases,\n      (base) => bases.map((otherBase) => [base, otherBase])\n    );\n    return [\n      // the direct pair\n      [tokenA, tokenB],\n      // token A against all bases\n      ...bases.map((base) => [tokenA, base]),\n      // token B against all bases\n      ...bases.map((base) => [tokenB, base]),\n      // each base against all bases\n      ...basePairs\n    ].filter((tokens) => Boolean(tokens[0] && tokens[1])).filter(([t0, t1]) => !t0.equals(t1)).filter(([tokenA_, tokenB_]) => {\n      if (!chainId)\n        return true;\n      const customBases = chunkGYU5FW7D_js.CUSTOM_BASES[chainId];\n      const customBasesA = customBases?.[tokenA_.wrapped.address];\n      const customBasesB = customBases?.[tokenB_.wrapped.address];\n      if (!customBasesA && !customBasesB)\n        return true;\n      if (customBasesA && !customBasesA.find((base) => tokenB_.equals(base)))\n        return false;\n      if (customBasesB && !customBasesB.find((base) => tokenA_.equals(base)))\n        return false;\n      return true;\n    });\n  },\n  resolver\n);\n\n// ../utils/RemoteLogger.ts\nvar ENABLED = process.env.NODE_ENV === \"development\";\nvar _RemoteLogger = class {\n  constructor(_id) {\n    this.logs = [];\n    this.id = \"\";\n    this.createTime = (/* @__PURE__ */ new Date()).getTime();\n    this.id = _id;\n  }\n  debug(log3, indent = 0) {\n    if (ENABLED && this.id !== \"__dummy__\") {\n      const indentStr = \"  \".repeat(indent);\n      this.logs.push(`${indentStr}${log3}`);\n    }\n  }\n  metric(log3, indent = 0) {\n    if (ENABLED && this.id !== \"__dummy__\") {\n      const indentStr = \"  \".repeat(indent);\n      const time = (/* @__PURE__ */ new Date()).getTime() - this.createTime;\n      this.logs.push(`[${time}ms]${indentStr}${log3}`);\n    }\n  }\n  debugJson(obj, indent = 0) {\n    if (ENABLED && this.id !== \"__dummy__\") {\n      try {\n        const str = JSON.stringify(obj, (_, value) => typeof value === \"bigint\" ? value.toString() : value, 2);\n        const lines = str.split(\"\\n\");\n        const indentStr = \"  \".repeat(indent);\n        const logs = lines.map((line) => `${indentStr}${line}`);\n        this.logs.push(...logs);\n      } catch (e) {\n        this.logs.push(`Error in json, ${e}`);\n      }\n    }\n  }\n  async flush() {\n    if (ENABLED && this.id !== \"__dummy__\") {\n      try {\n        const origin = self.origin || window.location.origin;\n        await fetch(`${origin}/api/logger`, {\n          method: \"POST\",\n          headers: {\n            \"Content-Type\": \"application/json\"\n          },\n          body: JSON.stringify({\n            id: this.id,\n            logs: this.logs\n          })\n        });\n      } catch (ex) {\n      }\n    }\n  }\n  static getLogger(id) {\n    if (!id) {\n      return new _RemoteLogger(\"__dummy__\");\n    }\n    if (!_RemoteLogger.__loggers.has(id)) {\n      _RemoteLogger.__loggers.set(id, new _RemoteLogger(id));\n    }\n    return _RemoteLogger.__loggers.get(id);\n  }\n  static generateUniqId(topic) {\n    const t = (/* @__PURE__ */ new Date()).getTime();\n    const rnd = Math.floor(Math.random() * 1e6);\n    return `${topic}-${t}-${rnd}`;\n  }\n};\nvar RemoteLogger = _RemoteLogger;\nRemoteLogger.__loggers = /* @__PURE__ */ new Map();\nvar logPools = (quoteId, pools, indent = 1) => {\n  const logger3 = RemoteLogger.getLogger(quoteId);\n  for (const pool of pools) {\n    logger3.debug(poolInfoStr(pool), indent);\n  }\n};\nvar poolInfoStr = (pool) => {\n  switch (pool.type) {\n    case 1 /* V3 */:\n      return `[V3] id=${pool.address}, ${pool.token0.symbol}/${pool.token1.symbol}`;\n    case 0 /* V2 */: {\n      const id = sdk.Pair.getAddress(pool.reserve0.currency.wrapped, pool.reserve1.currency.wrapped);\n      return `[V2] id=${id}, ${pool.reserve0.currency.symbol}/${pool.reserve1.currency.symbol}`;\n    }\n    case 2 /* STABLE */:\n      return `[Stable] id=${pool.address}, ${pool.balances[0].currency.symbol}/${pool.balances[1].currency.symbol}`;\n    case 4 /* InfinityBIN */:\n      return `[InfinityBIN] id=${pool.id}, ${pool.currency0.symbol}/${pool.currency1.symbol}`;\n    case 3 /* InfinityCL */:\n      return `[InfinityCL] id=${pool.id}, ${pool.currency0.symbol}/${pool.currency1.symbol}`;\n    default:\n      throw new Error(\"Unknown pool type\");\n  }\n};\nvar logRoutes = (quoteId, routes, indent = 1) => {\n  for (const [i, route] of Object.entries(routes)) {\n    const logger3 = RemoteLogger.getLogger(quoteId);\n    const { type, pools, input, output } = route;\n    logger3.debug(`- #${i} ${RouteType[type]}, pools=${pools.length}, ${input.symbol}/${output.symbol}`, indent);\n    logPools(quoteId, pools, indent + 1);\n  }\n};\n\n// evm/v3-router/functions/getBestRouteCombinationByQuotes.ts\nfunction getBestRouteCombinationByQuotes(amount, quoteCurrency, routesWithQuote, tradeType, config, quoteId) {\n  const logger3 = RemoteLogger.getLogger(quoteId);\n  const chainId = amount.currency.chainId;\n  const percents = [];\n  const percentToQuotes = {};\n  for (const routeWithQuote of routesWithQuote) {\n    if (!percentToQuotes[routeWithQuote.percent]) {\n      percentToQuotes[routeWithQuote.percent] = [];\n      percents.push(routeWithQuote.percent);\n    }\n    percentToQuotes[routeWithQuote.percent].push(routeWithQuote);\n  }\n  logger3.debug(\"--- percentToQuotes ---\");\n  logger3.debugJson(\n    mapValues__default.default(percentToQuotes, (x) => {\n      return x.map((y) => {\n        return {\n          pools: y.pools.map((pool) => poolInfoStr(pool)),\n          quoteAdjustedForGas: y.quoteAdjustedForGas.info()\n        };\n      });\n    }),\n    2\n  );\n  logger3.debug(\"--- END percentToQuotes ---\");\n  const swapRoute = getBestSwapRouteBy(\n    tradeType,\n    percentToQuotes,\n    percents.sort((a, b) => a - b),\n    chainId,\n    (rq) => rq.quoteAdjustedForGas,\n    config,\n    quoteId\n  );\n  if (!swapRoute) {\n    logger3.debug(`Could not find a valid swap route`);\n    return null;\n  }\n  const { routes: routeAmounts } = swapRoute;\n  const totalAmount = routeAmounts.reduce(\n    (total, routeAmount) => total.add(routeAmount.amount),\n    sdk.CurrencyAmount.fromRawAmount(routeAmounts[0].amount.currency, 0)\n  );\n  const missingAmount = amount.subtract(totalAmount);\n  if (missingAmount.greaterThan(0)) {\n    logger3.debug(\n      `Optimal route's amounts did not equal exactIn/exactOut total. Adding missing amount to last route in array. missingAmount=${missingAmount.quotient.toString()}`\n    );\n    routeAmounts[routeAmounts.length - 1].amount = routeAmounts[routeAmounts.length - 1].amount.add(missingAmount);\n  }\n  logger3.debug(`Found best swap route. ${routeAmounts.length} split.`);\n  const _log = {\n    routes: routeAmounts,\n    numSplits: routeAmounts.length,\n    amount: amount.toExact(),\n    quote: swapRoute.quote.toExact(),\n    quoteGasAdjusted: swapRoute.quoteGasAdjusted.toFixed(Math.min(swapRoute.quoteGasAdjusted.currency.decimals, 2)),\n    estimatedGasUSD: swapRoute.estimatedGasUsedUSD.toFixed(\n      Math.min(swapRoute.estimatedGasUsedUSD.currency.decimals, 2)\n    ),\n    estimatedGasToken: swapRoute.estimatedGasUsedQuoteToken.toFixed(\n      Math.min(swapRoute.estimatedGasUsedQuoteToken.currency.decimals, 2)\n    )\n  };\n  logger3.debugJson(_log);\n  const { routes, quote: quoteAmount, estimatedGasUsed, estimatedGasUsedUSD } = swapRoute;\n  const quote = sdk.CurrencyAmount.fromRawAmount(quoteCurrency, quoteAmount.quotient);\n  const isExactIn = tradeType === sdk.TradeType.EXACT_INPUT;\n  return {\n    routes: routes.map(({ type, amount: routeAmount, quote: routeQuoteAmount, pools, path, percent }) => {\n      const routeQuote = sdk.CurrencyAmount.fromRawAmount(quoteCurrency, routeQuoteAmount.quotient);\n      return {\n        percent,\n        type,\n        pools,\n        path,\n        inputAmount: isExactIn ? routeAmount : routeQuote,\n        outputAmount: isExactIn ? routeQuote : routeAmount\n      };\n    }),\n    gasEstimate: estimatedGasUsed,\n    gasEstimateInUSD: estimatedGasUsedUSD,\n    inputAmount: isExactIn ? amount : quote,\n    outputAmount: isExactIn ? quote : amount\n  };\n}\nfunction getBestSwapRouteBy(tradeType, percentToQuotes, percents, chainId, by, { maxSplits = 4, minSplits = 0 }, quoteId) {\n  const logger3 = RemoteLogger.getLogger(quoteId);\n  const percentToSortedQuotes = mapValues__default.default(percentToQuotes, (routeQuotes) => {\n    return routeQuotes.sort((routeQuoteA, routeQuoteB) => {\n      if (tradeType === sdk.TradeType.EXACT_INPUT) {\n        return by(routeQuoteA).greaterThan(by(routeQuoteB)) ? -1 : 1;\n      }\n      return by(routeQuoteA).lessThan(by(routeQuoteB)) ? -1 : 1;\n    });\n  });\n  const quoteCompFn = tradeType === sdk.TradeType.EXACT_INPUT ? (a, b) => a.greaterThan(b) : (a, b) => a.lessThan(b);\n  const sumFn = (currencyAmounts) => {\n    let sum2 = currencyAmounts[0];\n    for (let i = 1; i < currencyAmounts.length; i++) {\n      sum2 = sum2.add(currencyAmounts[i]);\n    }\n    return sum2;\n  };\n  let bestQuote;\n  let bestSwap;\n  const bestSwapsPerSplit = new FixedReverseHeap__default.default(\n    Array,\n    (a, b) => {\n      return quoteCompFn(a.quote, b.quote) ? -1 : 1;\n    },\n    3\n  );\n  if (!percentToSortedQuotes[100] || minSplits > 1) {\n    logger3.debug(`Did not find a valid route without any splits. Continuing search anyway`);\n  } else {\n    bestQuote = by(percentToSortedQuotes[100][0]);\n    bestSwap = [percentToSortedQuotes[100][0]];\n    logger3.debug(\"---bestQuote---\");\n    logger3.debugJson(bestQuote, 3);\n    logger3.debug(\"---bestSwap---\");\n    logger3.debugJson(bestSwap, 3);\n    for (const routeWithQuote of percentToSortedQuotes[100].slice(0, 5)) {\n      bestSwapsPerSplit.push({\n        quote: by(routeWithQuote),\n        routes: [routeWithQuote]\n      });\n    }\n  }\n  logger3.debug(\"--- start BFS ---\");\n  const queue = new Queue__default.default();\n  for (let i = percents.length; i >= 0; i--) {\n    const percent = percents[i];\n    if (!percentToSortedQuotes[percent]) {\n      continue;\n    }\n    queue.enqueue({\n      curRoutes: [percentToSortedQuotes[percent][0]],\n      percentIndex: i,\n      remainingPercent: 100 - percent,\n      special: false\n    });\n    if (!percentToSortedQuotes[percent] || !percentToSortedQuotes[percent][1]) {\n      continue;\n    }\n    queue.enqueue({\n      curRoutes: [percentToSortedQuotes[percent][1]],\n      percentIndex: i,\n      remainingPercent: 100 - percent,\n      special: true\n    });\n  }\n  let splits = 1;\n  while (queue.size > 0) {\n    logger3.debug(`bfs loop: queue.size=${queue.size}, splits=${splits}`, 2);\n    logger3.debugJson(\n      {\n        top3: Array.from(bestSwapsPerSplit.consume()).map(\n          (q) => `${q.quote.toExact()} (${q.routes.map(\n            (r) => `${r.percent}% ${r.amount.toExact()} ${r.pools.map((p) => {\n              if (isV2Pool(p)) {\n                return `V2 ${p.reserve0.currency.symbol}-${p.reserve1.currency.symbol}`;\n              }\n              if (isV3Pool(p)) {\n                return `V3 fee ${p.fee} ${p.token0.symbol}-${p.token1.symbol}`;\n              }\n              if (isStablePool(p)) {\n                return `Stable ${p.balances.map((b) => b.currency).join(\"-\")}`;\n              }\n              return `Unsupported pool ${p}`;\n            }).join(\", \")} ${r.quote.toExact()}`\n          ).join(\", \")})`\n        ),\n        onQueue: queue.size\n      },\n      2\n    );\n    bestSwapsPerSplit.clear();\n    let layer = queue.size;\n    splits++;\n    if (splits >= 3 && bestSwap && bestSwap.length < splits - 1) {\n      break;\n    }\n    if (splits > maxSplits) {\n      logger3.debug(`Max splits ${maxSplits} reached. Stopping search.`);\n      break;\n    }\n    while (layer > 0) {\n      layer--;\n      const { remainingPercent, curRoutes, percentIndex, special } = queue.dequeue();\n      logger3.debug(`dequeue remainingPercent=${remainingPercent}%, percentIndex=${percentIndex}`, 3);\n      logger3.debug(routesStr(curRoutes), 3);\n      for (let i = percentIndex; i >= 0; i--) {\n        const percentA = percents[i];\n        if (percentA > remainingPercent) {\n          continue;\n        }\n        if (!percentToSortedQuotes[percentA]) {\n          continue;\n        }\n        const candidateRoutesA = percentToSortedQuotes[percentA];\n        const routeWithQuoteA = findFirstRouteNotUsingUsedPools(curRoutes, candidateRoutesA);\n        if (!routeWithQuoteA) {\n          continue;\n        }\n        const remainingPercentNew = remainingPercent - percentA;\n        const curRoutesNew = [...curRoutes, routeWithQuoteA];\n        if (remainingPercentNew === 0 && splits >= minSplits) {\n          const quotesNew = curRoutesNew.map((r) => by(r));\n          const quoteNew = sumFn(quotesNew);\n          const gasCostL1QuoteToken2 = sdk.CurrencyAmount.fromRawAmount(quoteNew.currency, 0);\n          const quoteAfterL1Adjust = tradeType === sdk.TradeType.EXACT_INPUT ? quoteNew.subtract(gasCostL1QuoteToken2) : quoteNew.add(gasCostL1QuoteToken2);\n          bestSwapsPerSplit.push({\n            quote: quoteAfterL1Adjust,\n            routes: curRoutesNew\n          });\n          if (!bestQuote || quoteCompFn(quoteAfterL1Adjust, bestQuote)) {\n            bestQuote = quoteAfterL1Adjust;\n            bestSwap = curRoutesNew;\n          }\n        } else {\n          queue.enqueue({\n            curRoutes: curRoutesNew,\n            remainingPercent: remainingPercentNew,\n            percentIndex: i,\n            special\n          });\n        }\n      }\n    }\n  }\n  if (!bestSwap) {\n    logger3.debug(`Could not find a valid swap`);\n    return null;\n  }\n  let quoteGasAdjusted = sumFn(bestSwap.map((routeWithValidQuote) => routeWithValidQuote.quoteAdjustedForGas));\n  const estimatedGasUsed = bestSwap.map((routeWithValidQuote) => routeWithValidQuote.gasEstimate).reduce((sum2, routeWithValidQuote) => sum2 + routeWithValidQuote, 0n);\n  if (!chunkGYU5FW7D_js.usdGasTokensByChain[chainId] || !chunkGYU5FW7D_js.usdGasTokensByChain[chainId][0]) {\n    throw new Error(`Could not find a USD token for computing gas costs on ${chainId}`);\n  }\n  const usdToken = chunkGYU5FW7D_js.usdGasTokensByChain[chainId][0];\n  const usdTokenDecimals = usdToken.decimals;\n  const gasCostsL1ToL2 = {\n    gasUsedL1: 0n,\n    gasCostL1USD: sdk.CurrencyAmount.fromRawAmount(usdToken, 0),\n    gasCostL1QuoteToken: sdk.CurrencyAmount.fromRawAmount(\n      // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n      bestSwap[0]?.quote.currency,\n      0\n    )\n  };\n  const { gasCostL1USD, gasCostL1QuoteToken } = gasCostsL1ToL2;\n  const estimatedGasUsedUSDs = bestSwap.map((routeWithValidQuote) => {\n    const decimalsDiff = usdTokenDecimals - routeWithValidQuote.gasCostInUSD.currency.decimals;\n    if (decimalsDiff === 0) {\n      return sdk.CurrencyAmount.fromRawAmount(usdToken, routeWithValidQuote.gasCostInUSD.quotient);\n    }\n    return sdk.CurrencyAmount.fromRawAmount(\n      usdToken,\n      routeWithValidQuote.gasCostInUSD.quotient * 10n ** BigInt(decimalsDiff)\n    );\n  });\n  let estimatedGasUsedUSD = sumFn(estimatedGasUsedUSDs);\n  if (!estimatedGasUsedUSD.currency.equals(gasCostL1USD.currency)) {\n    const decimalsDiff = usdTokenDecimals - gasCostL1USD.currency.decimals;\n    estimatedGasUsedUSD = estimatedGasUsedUSD.add(\n      sdk.CurrencyAmount.fromRawAmount(usdToken, gasCostL1USD.quotient * 10n ** BigInt(decimalsDiff))\n    );\n  } else {\n    estimatedGasUsedUSD = estimatedGasUsedUSD.add(gasCostL1USD);\n  }\n  const estimatedGasUsedQuoteToken = sumFn(\n    bestSwap.map((routeWithValidQuote) => routeWithValidQuote.gasCostInToken)\n  ).add(gasCostL1QuoteToken);\n  const quote = sumFn(bestSwap.map((routeWithValidQuote) => routeWithValidQuote.quote));\n  if (tradeType === sdk.TradeType.EXACT_INPUT) {\n    const quoteGasAdjustedForL1 = quoteGasAdjusted.subtract(gasCostL1QuoteToken);\n    quoteGasAdjusted = quoteGasAdjustedForL1;\n  } else {\n    const quoteGasAdjustedForL1 = quoteGasAdjusted.add(gasCostL1QuoteToken);\n    quoteGasAdjusted = quoteGasAdjustedForL1;\n  }\n  const routeWithQuotes = bestSwap.sort(\n    (routeAmountA, routeAmountB) => routeAmountB.amount.greaterThan(routeAmountA.amount) ? 1 : -1\n  );\n  return {\n    quote,\n    quoteGasAdjusted,\n    estimatedGasUsed,\n    estimatedGasUsedUSD,\n    estimatedGasUsedQuoteToken,\n    routes: routeWithQuotes\n  };\n}\nvar findFirstRouteNotUsingUsedPools = (usedRoutes, candidateRouteQuotes) => {\n  const poolAddressSet = /* @__PURE__ */ new Set();\n  const usedPoolAddresses = flatMap__default.default(usedRoutes, ({ pools }) => pools.map(getPoolAddress));\n  for (const poolAddress of usedPoolAddresses) {\n    poolAddressSet.add(poolAddress);\n  }\n  for (const routeQuote of candidateRouteQuotes) {\n    const { pools } = routeQuote;\n    const poolAddresses = pools.map(getPoolAddress);\n    if (poolAddresses.some((poolAddress) => poolAddressSet.has(poolAddress))) {\n      continue;\n    }\n    return routeQuote;\n  }\n  return null;\n};\nvar routesStr = (routes) => {\n  return routes.map((route) => {\n    return route.pools.map((p) => PoolType[p.type]).join(\", \");\n  }).join(\";\");\n};\n\n// evm/v3-router/providers/poolProviders/poolProviderWithCache.ts\nfunction createPoolProviderWithCache(provider) {\n  return provider;\n}\nfunction formatFraction(fraction, precision = 6, rounding = void 0) {\n  if (!fraction || fraction.denominator === 0n) {\n    return void 0;\n  }\n  if (precision === 0 || fraction.greaterThan(10n ** BigInt(precision))) {\n    return fraction.toFixed(0);\n  }\n  return fraction.toSignificant(precision, void 0, rounding);\n}\nfunction formatPrice(price, precision) {\n  if (!price) {\n    return void 0;\n  }\n  return formatFraction(price?.asFraction.multiply(price?.scalar), precision);\n}\n\n// evm/utils/withFallback.ts\nfunction withTimeout(fn, duration) {\n  return function callWithTimeout(...args) {\n    return Promise.race([\n      fn(...args),\n      new Promise((_, reject) => {\n        setTimeout(() => reject(new Error(`Request timeout ${duration}ms`)), duration);\n      })\n    ]);\n  };\n}\nfunction withFallback(calls) {\n  return async function asyncCall(...args) {\n    const numOfCalls = calls.length;\n    if (numOfCalls === 0) {\n      throw new Error(\"No valid calls\");\n    }\n    for (const [index, { timeout = 2e3, asyncFn }] of calls.entries()) {\n      const fn = index < numOfCalls - 1 ? withTimeout(asyncFn, timeout) : asyncFn;\n      try {\n        const result = await fn(...args);\n        return result;\n      } catch (e) {\n        if (index === numOfCalls - 1) {\n          throw e;\n        }\n        console.warn(`Call failed with error %O, try next fallback`, e);\n      }\n    }\n    throw new Error(\"Unexpected end of call\");\n  };\n}\nfunction createAsyncCallWithFallbacks(defaultCall, options) {\n  const { fallbacks = [], fallbackTimeout: timeout = 3e3 } = options || {};\n  return withFallback(\n    [defaultCall, ...fallbacks].map((asyncFn) => ({\n      asyncFn,\n      timeout\n    }))\n  );\n}\nvar tokenPriceQuery = graphqlRequest.gql`\n  query getTokens($pageSize: Int!, $tokenAddrs: [ID!]) {\n    tokens(first: $pageSize, where: { id_in: $tokenAddrs }) {\n      id\n      derivedUSD\n    }\n  }\n`;\nfunction createCommonTokenPriceProvider(getTokenPrices) {\n  return async function getCommonTokenPrices2({ currencyA, currencyB, ...rest }) {\n    const baseTokens = await getCheckAgainstBaseTokens(currencyA, currencyB);\n    if (!baseTokens) {\n      return null;\n    }\n    const map = /* @__PURE__ */ new Map();\n    const idToToken = {};\n    const addresses = baseTokens.map((t) => {\n      const address = viem.getAddress(t.address);\n      idToToken[address] = t;\n      return address;\n    });\n    const tokenPrices = await getTokenPrices({ addresses, chainId: currencyA?.chainId, ...rest });\n    for (const { address, priceUSD } of tokenPrices) {\n      const token = idToToken[viem.getAddress(address)];\n      if (token) {\n        map.set(token.wrapped.address, parseFloat(priceUSD) || 0);\n      }\n    }\n    return map;\n  };\n}\nvar getTokenUsdPricesBySubgraph = async ({\n  addresses,\n  chainId,\n  provider\n}) => {\n  const client = provider?.({ chainId });\n  if (!client) {\n    throw new Error(\"No valid subgraph data provider\");\n  }\n  const { tokens: tokenPrices } = await client.request(\n    tokenPriceQuery,\n    {\n      pageSize: 1e3,\n      tokenAddrs: addresses.map((addr) => addr.toLocaleLowerCase())\n    }\n  );\n  return tokenPrices.map(({ id, derivedUSD }) => ({\n    address: id,\n    priceUSD: derivedUSD\n  }));\n};\nvar getCommonTokenPricesBySubgraph = createCommonTokenPriceProvider(getTokenUsdPricesBySubgraph);\nvar createGetTokenPriceFromLlmaWithCache = ({\n  endpoint\n}) => {\n  const cache = /* @__PURE__ */ new Map();\n  return async ({ addresses, chainId }) => {\n    if (!chainId || !chains.getLlamaChainName(chainId)) {\n      return [];\n    }\n    const [cachedResults, addressesToFetch] = addresses.reduce(\n      ([cachedAddrs, newAddrs], address) => {\n        const cached = cache.get(address);\n        if (!cached) {\n          newAddrs.push(address);\n        } else {\n          cachedAddrs.push(cached);\n        }\n        return [cachedAddrs, newAddrs];\n      },\n      [[], []]\n    );\n    if (!addressesToFetch.length) {\n      return cachedResults;\n    }\n    const list = addressesToFetch.map((address) => `${chains.getLlamaChainName(chainId)}:${address.toLocaleLowerCase()}`).join(\",\");\n    const result = await fetch(`${endpoint}/${list}`).then(\n      (res) => res.json()\n    );\n    const { coins = {} } = result;\n    return [\n      ...cachedResults,\n      ...Object.entries(coins).map(([key, value]) => {\n        const [, address] = key.split(\":\");\n        const tokenPrice = { address, priceUSD: value.price };\n        cache.set(viem.getAddress(address), tokenPrice);\n        return tokenPrice;\n      })\n    ];\n  };\n};\nvar getCommonTokenPricesByLlma = createCommonTokenPriceProvider(\n  createGetTokenPriceFromLlmaWithCache({\n    endpoint: \"https://coins.llama.fi/prices/current\"\n  })\n);\nvar getCommonTokenPricesByWalletApi = createCommonTokenPriceProvider(\n  createGetTokenPriceFromLlmaWithCache({\n    endpoint: \"https://wallet-api.pancakeswap.com/v1/prices\"\n  })\n);\nvar getCommonTokenPrices = withFallback([\n  {\n    asyncFn: ({ currencyA, currencyB }) => getCommonTokenPricesByLlma({ currencyA, currencyB }),\n    timeout: 3e3\n  },\n  {\n    asyncFn: ({ currencyA, currencyB }) => getCommonTokenPricesByWalletApi({ currencyA, currencyB }),\n    timeout: 3e3\n  },\n  {\n    asyncFn: ({ currencyA, currencyB, v3SubgraphProvider }) => getCommonTokenPricesBySubgraph({ currencyA, currencyB, provider: v3SubgraphProvider })\n  }\n]);\nvar getV2PoolsOnChain = createOnChainPoolFactory({\n  abi: chunkGYU5FW7D_js.pancakePairABI,\n  getPossiblePoolMetas: async ([currencyA, currencyB]) => [\n    { id: computeV2PoolAddress(currencyA.wrapped, currencyB.wrapped), currencyA, currencyB }\n  ],\n  buildPoolInfoCalls: ({ id: address }) => [\n    {\n      address,\n      functionName: \"getReserves\",\n      args: []\n    }\n  ],\n  buildPool: ({ currencyA, currencyB }, [reserves]) => {\n    if (!reserves) {\n      return null;\n    }\n    const [reserve0, reserve1] = reserves;\n    const [token0, token1] = currencyA.wrapped.sortsBefore(currencyB.wrapped) ? [currencyA, currencyB] : [currencyB, currencyA];\n    return {\n      type: 0 /* V2 */,\n      reserve0: sdk.CurrencyAmount.fromRawAmount(token0, reserve0.toString()),\n      reserve1: sdk.CurrencyAmount.fromRawAmount(token1, reserve1.toString())\n    };\n  }\n});\nvar getStablePoolsOnChain = createOnChainPoolFactory({\n  abi: chunkGYU5FW7D_js.stableSwapPairABI,\n  getPossiblePoolMetas: async ([currencyA, currencyB]) => {\n    const poolConfigs = await stableSwapSdk.getStableSwapPools(currencyA.chainId);\n    return poolConfigs.filter(({ token, quoteToken }) => {\n      const tokenA = tokenLists.deserializeToken(token);\n      const tokenB = tokenLists.deserializeToken(quoteToken);\n      return tokenA.equals(currencyA.wrapped) && tokenB.equals(currencyB.wrapped) || tokenA.equals(currencyB.wrapped) && tokenB.equals(currencyA.wrapped);\n    }).map(({ stableSwapAddress }) => ({\n      id: stableSwapAddress,\n      currencyA,\n      currencyB\n    }));\n  },\n  buildPoolInfoCalls: ({ id: address }) => [\n    {\n      address,\n      functionName: \"balances\",\n      args: [0]\n    },\n    {\n      address,\n      functionName: \"balances\",\n      args: [1]\n    },\n    {\n      address,\n      functionName: \"A\",\n      args: []\n    },\n    {\n      address,\n      functionName: \"fee\",\n      args: []\n    },\n    {\n      address,\n      functionName: \"FEE_DENOMINATOR\",\n      args: []\n    }\n  ],\n  buildPool: ({ currencyA, currencyB, id: address }, [balance0, balance1, a, fee, feeDenominator]) => {\n    if (!balance0 || !balance1 || !a || !fee || !feeDenominator) {\n      return null;\n    }\n    const [token0, token1] = currencyA.wrapped.sortsBefore(currencyB.wrapped) ? [currencyA, currencyB] : [currencyB, currencyA];\n    return {\n      address,\n      type: 2 /* STABLE */,\n      balances: [\n        sdk.CurrencyAmount.fromRawAmount(token0, balance0.toString()),\n        sdk.CurrencyAmount.fromRawAmount(token1, balance1.toString())\n      ],\n      amplifier: BigInt(a.toString()),\n      fee: new sdk.Percent(BigInt(fee.toString()), BigInt(feeDenominator.toString()))\n    };\n  }\n});\nvar getV3PoolsWithoutTicksOnChain = createOnChainPoolFactory({\n  abi: v3Sdk.pancakeV3PoolABI,\n  getPossiblePoolMetas: async ([currencyA, currencyB]) => {\n    const deployerAddress = v3Sdk.DEPLOYER_ADDRESSES[currencyA.chainId];\n    if (!deployerAddress) {\n      return [];\n    }\n    return [v3Sdk.FeeAmount.LOWEST, v3Sdk.FeeAmount.LOW, v3Sdk.FeeAmount.MEDIUM, v3Sdk.FeeAmount.HIGH].map((fee) => ({\n      id: computeV3PoolAddress({\n        deployerAddress,\n        tokenA: currencyA.wrapped,\n        tokenB: currencyB.wrapped,\n        fee\n      }),\n      currencyA,\n      currencyB,\n      fee\n    }));\n  },\n  buildPoolInfoCalls: ({ id: address, currencyA, currencyB }) => [\n    {\n      address,\n      functionName: \"liquidity\"\n    },\n    {\n      address,\n      functionName: \"slot0\"\n    },\n    {\n      abi: sdk.erc20Abi,\n      address: currencyA.wrapped.address,\n      functionName: \"balanceOf\",\n      args: [address]\n    },\n    {\n      abi: sdk.erc20Abi,\n      address: currencyB.wrapped.address,\n      functionName: \"balanceOf\",\n      args: [address]\n    }\n  ],\n  buildPool: ({ currencyA, currencyB, fee, id: address }, [liquidity, slot0, balanceA, balanceB]) => {\n    if (!slot0) {\n      return null;\n    }\n    const [sqrtPriceX96, tick, , , , feeProtocol] = slot0;\n    const sorted = currencyA.wrapped.sortsBefore(currencyB.wrapped);\n    const [balance0, balance1] = sorted ? [balanceA, balanceB] : [balanceB, balanceA];\n    const [token0, token1] = sorted ? [currencyA, currencyB] : [currencyB, currencyA];\n    const [token0ProtocolFee, token1ProtocolFee] = v3Sdk.parseProtocolFees(feeProtocol);\n    return {\n      type: 1 /* V3 */,\n      token0,\n      token1,\n      reserve0: sdk.CurrencyAmount.fromRawAmount(token0, balance0),\n      reserve1: sdk.CurrencyAmount.fromRawAmount(token1, balance1),\n      fee,\n      liquidity: BigInt(liquidity.toString()),\n      sqrtRatioX96: BigInt(sqrtPriceX96.toString()),\n      tick: Number(tick),\n      address,\n      token0ProtocolFee,\n      token1ProtocolFee\n    };\n  }\n});\nfunction createOnChainPoolFactory({ abi, getPossiblePoolMetas, buildPoolInfoCalls, buildPool }) {\n  return async function poolFactory(pairs, provider, _blockNumber) {\n    if (!provider) {\n      throw new Error(\"No valid onchain data provider\");\n    }\n    const chainId = pairs[0]?.[0]?.chainId;\n    const client = provider({ chainId });\n    if (!chainId || !client) {\n      return [];\n    }\n    const poolAddressSet = /* @__PURE__ */ new Set();\n    const poolMetas = [];\n    const allPossibleMetas = await Promise.all(pairs.map((pair) => getPossiblePoolMetas(pair)));\n    for (const possiblePoolMetas of allPossibleMetas) {\n      for (const meta of possiblePoolMetas) {\n        if (!poolAddressSet.has(meta.id)) {\n          poolMetas.push(meta);\n          poolAddressSet.add(meta.id);\n        }\n      }\n    }\n    let calls = [];\n    let poolCallSize = 0;\n    for (const meta of poolMetas) {\n      const poolCalls = buildPoolInfoCalls(meta);\n      if (!poolCallSize) {\n        poolCallSize = poolCalls.length;\n      }\n      if (!poolCallSize || poolCallSize !== poolCalls.length) {\n        throw new Error(\"Inconsistent pool data call\");\n      }\n      calls = [...calls, ...poolCalls];\n    }\n    if (!calls.length) {\n      return [];\n    }\n    const results = await client.multicall({\n      contracts: calls.map((call) => ({\n        abi: call.abi || abi,\n        address: call.address,\n        functionName: call.functionName,\n        args: call.args\n      })),\n      allowFailure: true\n    });\n    const pools = [];\n    for (let i = 0; i < poolMetas.length; i += 1) {\n      const poolResults = results.slice(i * poolCallSize, (i + 1) * poolCallSize);\n      const pool = buildPool(\n        poolMetas[i],\n        poolResults.map((result) => result.result)\n      );\n      if (pool) {\n        pools.push(pool);\n      }\n    }\n    return pools;\n  };\n}\nvar DEFAULT_POOL_SELECTOR_CONFIG = {\n  topN: 2,\n  topNDirectSwaps: 2,\n  topNTokenInOut: 2,\n  topNSecondHop: 1,\n  topNWithEachBaseToken: 3,\n  topNWithBaseToken: 3\n};\nvar INFINITY_DEFAULT_POOL_SELECTOR_CONFIG = {\n  [chains.ChainId.BSC]: {\n    topN: 1,\n    topNDirectSwaps: 1,\n    topNTokenInOut: 1,\n    topNSecondHop: 1,\n    topNWithEachBaseToken: 1,\n    topNWithBaseToken: 1\n  },\n  [chains.ChainId.BSC_TESTNET]: {\n    topN: 1,\n    topNDirectSwaps: 1,\n    topNTokenInOut: 1,\n    topNSecondHop: 1,\n    topNWithEachBaseToken: 1,\n    topNWithBaseToken: 1\n  },\n  [chains.ChainId.ETHEREUM]: {\n    topN: 1,\n    topNDirectSwaps: 1,\n    topNTokenInOut: 1,\n    topNSecondHop: 1,\n    topNWithEachBaseToken: 1,\n    topNWithBaseToken: 1\n  },\n  [chains.ChainId.GOERLI]: {\n    topN: 1,\n    topNDirectSwaps: 1,\n    topNTokenInOut: 1,\n    topNSecondHop: 1,\n    topNWithEachBaseToken: 1,\n    topNWithBaseToken: 1\n  }\n};\nvar V3_DEFAULT_POOL_SELECTOR_CONFIG = {\n  [chains.ChainId.BSC]: {\n    topN: 2,\n    topNDirectSwaps: 2,\n    topNTokenInOut: 2,\n    topNSecondHop: 1,\n    topNWithEachBaseToken: 3,\n    topNWithBaseToken: 4\n  },\n  [chains.ChainId.BSC_TESTNET]: {\n    topN: 2,\n    topNDirectSwaps: 2,\n    topNTokenInOut: 2,\n    topNSecondHop: 1,\n    topNWithEachBaseToken: 3,\n    topNWithBaseToken: 4\n  },\n  [chains.ChainId.ETHEREUM]: {\n    topN: 2,\n    topNDirectSwaps: 2,\n    topNTokenInOut: 2,\n    topNSecondHop: 1,\n    topNWithEachBaseToken: 3,\n    topNWithBaseToken: 4\n  },\n  [chains.ChainId.GOERLI]: {\n    topN: 2,\n    topNDirectSwaps: 2,\n    topNTokenInOut: 2,\n    topNSecondHop: 1,\n    topNWithEachBaseToken: 3,\n    topNWithBaseToken: 4\n  }\n};\nvar V2_DEFAULT_POOL_SELECTOR_CONFIG = {\n  [chains.ChainId.BSC]: {\n    topN: 3,\n    topNDirectSwaps: 2,\n    topNTokenInOut: 2,\n    topNSecondHop: 1,\n    topNWithEachBaseToken: 3,\n    topNWithBaseToken: 3\n  },\n  [chains.ChainId.BSC_TESTNET]: {\n    topN: 3,\n    topNDirectSwaps: 2,\n    topNTokenInOut: 2,\n    topNSecondHop: 1,\n    topNWithEachBaseToken: 3,\n    topNWithBaseToken: 3\n  },\n  [chains.ChainId.ETHEREUM]: {\n    topN: 3,\n    topNDirectSwaps: 2,\n    topNTokenInOut: 2,\n    topNSecondHop: 1,\n    topNWithEachBaseToken: 3,\n    topNWithBaseToken: 3\n  },\n  [chains.ChainId.GOERLI]: {\n    topN: 3,\n    topNDirectSwaps: 2,\n    topNTokenInOut: 2,\n    topNSecondHop: 1,\n    topNWithEachBaseToken: 3,\n    topNWithBaseToken: 3\n  }\n};\nvar V3_TOKEN_POOL_SELECTOR_CONFIG = {\n  [chains.ChainId.BSC]: {\n    [tokens.bscTokens.ankr.address]: {\n      topNTokenInOut: 4\n    },\n    [tokens.bscTokens.ankrbnb.address]: {\n      topNTokenInOut: 4\n    },\n    [tokens.bscTokens.ankrETH.address]: {\n      topNTokenInOut: 4\n    },\n    [tokens.bscTokens.wbeth.address]: {\n      topNSecondHop: 3\n    }\n  }\n};\nvar V2_TOKEN_POOL_SELECTOR_CONFIG = {\n  [chains.ChainId.BSC]: {\n    // GEM\n    \"0x701F1ed50Aa5e784B8Fb89d1Ba05cCCd627839a7\": {\n      topNTokenInOut: 4\n    }\n  }\n};\nvar ROUTE_CONFIG_BY_CHAIN = {\n  [chains.ChainId.POLYGON_ZKEVM]: {\n    distributionPercent: 50\n  },\n  [chains.ChainId.ZKSYNC]: {\n    distributionPercent: 20\n  },\n  [chains.ChainId.BASE]: {\n    distributionPercent: 10\n  }\n};\n\n// evm/v3-router/utils/mergePoolSelectorConfig.ts\nfunction mergePoolSelectorConfig(baseConfig, customConfig) {\n  if (!customConfig) {\n    return baseConfig;\n  }\n  const merged = { ...baseConfig };\n  const keys = Object.keys(merged);\n  for (const key of keys) {\n    merged[key] = Math.max(merged[key], customConfig[key] || 0);\n  }\n  return merged;\n}\n\n// evm/v3-router/utils/getPoolSelectorConfig.ts\nfunction poolSelectorConfigFactory(poolSelecorConfigMap, tokenPoolSelectorConfigMap) {\n  return function getPoolSelectorConfig(currencyA, currencyB) {\n    const chainId = currencyA?.chainId;\n    if (!chainId || !poolSelecorConfigMap[chainId]) {\n      return DEFAULT_POOL_SELECTOR_CONFIG;\n    }\n    const additionalConfigA = tokenPoolSelectorConfigMap[chainId]?.[currencyA?.wrapped?.address || \"0x\"];\n    const additionalConfigB = tokenPoolSelectorConfigMap[chainId]?.[currencyB?.wrapped?.address || \"0x\"];\n    return mergePoolSelectorConfig(\n      mergePoolSelectorConfig(poolSelecorConfigMap[chainId], additionalConfigA),\n      additionalConfigB\n    );\n  };\n}\nvar getV3PoolSelectorConfig = poolSelectorConfigFactory(\n  V3_DEFAULT_POOL_SELECTOR_CONFIG,\n  V3_TOKEN_POOL_SELECTOR_CONFIG\n);\nvar getV2PoolSelectorConfig = poolSelectorConfigFactory(\n  V2_DEFAULT_POOL_SELECTOR_CONFIG,\n  V2_TOKEN_POOL_SELECTOR_CONFIG\n);\nvar getInfinityPoolSelectorConfig = poolSelectorConfigFactory(INFINITY_DEFAULT_POOL_SELECTOR_CONFIG, {});\n\n// evm/v3-router/providers/poolProviders/poolTvlSelectors.ts\nvar sortByTvl = (a, b) => a.tvlUSD >= b.tvlUSD ? -1 : 1;\nfunction poolSelectorFactory({\n  getPoolSelectorConfig,\n  getToken0,\n  getToken1,\n  getPoolAddress: getPoolAddress2\n}) {\n  return function tvlSelector(currencyA, currencyB, unorderedPoolsWithTvl) {\n    const POOL_SELECTION_CONFIG = getPoolSelectorConfig(currencyA, currencyB);\n    if (!currencyA || !currencyB || !unorderedPoolsWithTvl.length) {\n      return [];\n    }\n    const poolsFromSubgraph = unorderedPoolsWithTvl.sort(sortByTvl);\n    const { chainId } = getToken0(poolsFromSubgraph[0]);\n    const baseTokens = chunkGYU5FW7D_js.BASES_TO_CHECK_TRADES_AGAINST[chainId] ?? [];\n    const poolSet = /* @__PURE__ */ new Set();\n    const addToPoolSet = (pools2) => {\n      for (const pool of pools2) {\n        poolSet.add(getPoolAddress2(pool));\n      }\n    };\n    const topByBaseWithTokenIn = baseTokens.map((token) => {\n      return poolsFromSubgraph.filter((subgraphPool) => {\n        return getToken0(subgraphPool).wrapped.equals(token) && getToken1(subgraphPool).wrapped.equals(currencyA.wrapped) || getToken1(subgraphPool).wrapped.equals(token) && getToken0(subgraphPool).wrapped.equals(currencyA.wrapped);\n      }).sort(sortByTvl).slice(0, POOL_SELECTION_CONFIG.topNWithEachBaseToken);\n    }).reduce((acc, cur) => {\n      acc.push(...cur);\n      return acc;\n    }, []).sort(sortByTvl).slice(0, POOL_SELECTION_CONFIG.topNWithBaseToken);\n    addToPoolSet(topByBaseWithTokenIn);\n    const topByBaseWithTokenOut = baseTokens.map((token) => {\n      return poolsFromSubgraph.filter((subgraphPool) => {\n        if (poolSet.has(getPoolAddress2(subgraphPool))) {\n          return false;\n        }\n        return getToken0(subgraphPool).wrapped.equals(token) && getToken1(subgraphPool).wrapped.equals(currencyB.wrapped) || getToken1(subgraphPool).wrapped.equals(token) && getToken0(subgraphPool).wrapped.equals(currencyB.wrapped);\n      }).sort(sortByTvl).slice(0, POOL_SELECTION_CONFIG.topNWithEachBaseToken);\n    }).reduce((acc, cur) => {\n      acc.push(...cur);\n      return acc;\n    }, []).sort(sortByTvl).slice(0, POOL_SELECTION_CONFIG.topNWithBaseToken);\n    addToPoolSet(topByBaseWithTokenOut);\n    const top2DirectPools = poolsFromSubgraph.filter((subgraphPool) => {\n      if (poolSet.has(getPoolAddress2(subgraphPool))) {\n        return false;\n      }\n      return getToken0(subgraphPool).wrapped.equals(currencyA.wrapped) && getToken1(subgraphPool).wrapped.equals(currencyB.wrapped) || getToken1(subgraphPool).wrapped.equals(currencyA.wrapped) && getToken0(subgraphPool).wrapped.equals(currencyB.wrapped);\n    }).slice(0, POOL_SELECTION_CONFIG.topNDirectSwaps);\n    addToPoolSet(top2DirectPools);\n    const nativeToken = sdk.WNATIVE[chainId];\n    const top2EthBaseTokenPool = nativeToken ? poolsFromSubgraph.filter((subgraphPool) => {\n      if (poolSet.has(getPoolAddress2(subgraphPool))) {\n        return false;\n      }\n      return getToken0(subgraphPool).wrapped.equals(nativeToken) && getToken1(subgraphPool).wrapped.equals(currencyA.wrapped) || getToken1(subgraphPool).wrapped.equals(nativeToken) && getToken0(subgraphPool).wrapped.equals(currencyA.wrapped);\n    }).slice(0, 1) : [];\n    addToPoolSet(top2EthBaseTokenPool);\n    const top2EthQuoteTokenPool = nativeToken ? poolsFromSubgraph.filter((subgraphPool) => {\n      if (poolSet.has(getPoolAddress2(subgraphPool))) {\n        return false;\n      }\n      return getToken0(subgraphPool).wrapped.equals(nativeToken) && getToken1(subgraphPool).wrapped.equals(currencyB.wrapped) || getToken1(subgraphPool).wrapped.equals(nativeToken) && getToken0(subgraphPool).wrapped.equals(currencyB.wrapped);\n    }).slice(0, 1) : [];\n    addToPoolSet(top2EthQuoteTokenPool);\n    const topByTVL = poolsFromSubgraph.slice(0, POOL_SELECTION_CONFIG.topN).filter((pool) => !poolSet.has(getPoolAddress2(pool)));\n    addToPoolSet(topByTVL);\n    const topByTVLUsingTokenBase = poolsFromSubgraph.filter((subgraphPool) => {\n      if (poolSet.has(getPoolAddress2(subgraphPool))) {\n        return false;\n      }\n      return getToken0(subgraphPool).wrapped.equals(currencyA.wrapped) || getToken1(subgraphPool).wrapped.equals(currencyA.wrapped);\n    }).slice(0, POOL_SELECTION_CONFIG.topNTokenInOut);\n    addToPoolSet(topByTVLUsingTokenBase);\n    const topByTVLUsingTokenQuote = poolsFromSubgraph.filter((subgraphPool) => {\n      if (poolSet.has(getPoolAddress2(subgraphPool))) {\n        return false;\n      }\n      return getToken0(subgraphPool).wrapped.equals(currencyB.wrapped) || getToken1(subgraphPool).wrapped.equals(currencyB.wrapped);\n    }).slice(0, POOL_SELECTION_CONFIG.topNTokenInOut);\n    addToPoolSet(topByTVLUsingTokenQuote);\n    const getTopByTVLUsingTokenSecondHops = (base, tokenToCompare) => base.map((subgraphPool) => {\n      return getToken0(subgraphPool).wrapped.equals(tokenToCompare.wrapped) ? getToken1(subgraphPool) : getToken0(subgraphPool);\n    }).map((secondHopToken) => {\n      return poolsFromSubgraph.filter((subgraphPool) => {\n        if (poolSet.has(getPoolAddress2(subgraphPool))) {\n          return false;\n        }\n        return getToken0(subgraphPool).wrapped.equals(secondHopToken.wrapped) || getToken1(subgraphPool).wrapped.equals(secondHopToken.wrapped);\n      });\n    }).reduce((acc, cur) => {\n      acc.push(...cur);\n      return acc;\n    }, []).reduce((acc, cur) => {\n      if (!acc.some((p) => p === cur)) {\n        acc.push(cur);\n      }\n      return acc;\n    }, []).sort(sortByTvl).slice(0, POOL_SELECTION_CONFIG.topNSecondHop);\n    const topByTVLUsingTokenInSecondHops = getTopByTVLUsingTokenSecondHops(\n      [...topByTVLUsingTokenBase, ...topByBaseWithTokenIn],\n      currencyA\n    );\n    addToPoolSet(topByTVLUsingTokenInSecondHops);\n    const topByTVLUsingTokenOutSecondHops = getTopByTVLUsingTokenSecondHops(\n      [...topByTVLUsingTokenQuote, ...topByBaseWithTokenOut],\n      currencyB\n    );\n    addToPoolSet(topByTVLUsingTokenOutSecondHops);\n    const pools = [\n      ...topByBaseWithTokenIn,\n      ...topByBaseWithTokenOut,\n      ...top2DirectPools,\n      ...top2EthBaseTokenPool,\n      ...top2EthQuoteTokenPool,\n      ...topByTVL,\n      ...topByTVLUsingTokenBase,\n      ...topByTVLUsingTokenQuote,\n      ...topByTVLUsingTokenInSecondHops,\n      ...topByTVLUsingTokenOutSecondHops\n    ];\n    return pools.map(({ tvlUSD, ...rest }) => rest);\n  };\n}\nvar v3PoolTvlSelector = poolSelectorFactory({\n  getPoolSelectorConfig: getV3PoolSelectorConfig,\n  getToken0: (p) => p.token0,\n  getToken1: (p) => p.token1,\n  getPoolAddress: (p) => p.address\n});\nvar v2PoolTvlSelector = poolSelectorFactory({\n  getPoolSelectorConfig: getV2PoolSelectorConfig,\n  getToken0: (p) => p.reserve0.currency,\n  getToken1: (p) => p.reserve1.currency,\n  getPoolAddress: (p) => getPoolAddress(p) || \"0x\"\n});\nvar infinityPoolTvlSelector = poolSelectorFactory({\n  getPoolSelectorConfig: getInfinityPoolSelectorConfig,\n  getToken0: (p) => p.currency0,\n  getToken1: (p) => p.currency1,\n  getPoolAddress: (p) => p.id\n});\nfunction subgraphPoolProviderFactory({\n  id,\n  getPoolMetas,\n  getPoolsFromSubgraph\n}) {\n  return async function subgraphPoolProvider({\n    provider,\n    pairs\n  }) {\n    if (!provider) {\n      throw new Error(\"No valid subgraph data provider\");\n    }\n    const chainId = pairs[0]?.[0]?.chainId;\n    if (!chainId) {\n      return [];\n    }\n    const client = provider({ chainId });\n    if (!client) {\n      logger.error(\"No subgraph client found for chainId\", chainId);\n      return [];\n    }\n    metric(`SUBGRAPH_POOLS_START(${id})`, pairs);\n    const metaMap = /* @__PURE__ */ new Map();\n    for (const pair of pairs) {\n      const metas = getPoolMetas(pair);\n      for (const meta of metas) {\n        metaMap.set(meta.id.toLocaleLowerCase(), meta);\n      }\n    }\n    const addresses = Array.from(metaMap.keys());\n    const pools = await getPoolsFromSubgraph({\n      addresses,\n      getPoolMetaByAddress: (address) => metaMap.get(address.toLocaleLowerCase()) ?? null,\n      client\n    });\n    metric(`SUBGRAPH_POOLS_END(${id})`, pools);\n    return pools.filter((p) => !!p);\n  };\n}\nvar getV3PoolMeta = memoize2__default.default(\n  ([currencyA, currencyB, feeAmount]) => ({\n    id: v3Sdk.Pool.getAddress(currencyA.wrapped, currencyB.wrapped, feeAmount),\n    currencyA,\n    currencyB,\n    fee: feeAmount\n  }),\n  ([currencyA, currencyB, feeAmount]) => {\n    if (currencyA.wrapped.equals(currencyB.wrapped)) {\n      return [currencyA.chainId, currencyA.wrapped.address, feeAmount].join(\"_\");\n    }\n    const [token0, token1] = currencyA.wrapped.sortsBefore(currencyB.wrapped) ? [currencyA.wrapped, currencyB.wrapped] : [currencyB.wrapped, currencyA.wrapped];\n    return [token0.chainId, token0.address, token1.address, feeAmount].join(\"_\");\n  }\n);\nvar getV3PoolMetas = memoize2__default.default(\n  (pair) => [v3Sdk.FeeAmount.LOWEST, v3Sdk.FeeAmount.LOW, v3Sdk.FeeAmount.MEDIUM, v3Sdk.FeeAmount.HIGH].map((fee) => getV3PoolMeta([...pair, fee])),\n  ([currencyA, currencyB]) => {\n    if (currencyA.wrapped.equals(currencyB.wrapped)) {\n      return [currencyA.chainId, currencyA.wrapped.address].join(\"_\");\n    }\n    const [token0, token1] = currencyA.wrapped.sortsBefore(currencyB.wrapped) ? [currencyA.wrapped, currencyB.wrapped] : [currencyB.wrapped, currencyA.wrapped];\n    return [token0.chainId, token0.address, token1.address].join(\"_\");\n  }\n);\nvar queryV3Pools = graphqlRequest.gql`\n  query getPools($pageSize: Int!, $poolAddrs: [String]) {\n    pools(first: $pageSize, where: { id_in: $poolAddrs }) {\n      id\n      tick\n      sqrtPrice\n      feeTier\n      liquidity\n      feeProtocol\n      totalValueLockedUSD\n    }\n  }\n`;\nvar getV3PoolSubgraph = subgraphPoolProviderFactory({\n  id: \"V3\",\n  getPoolMetas: getV3PoolMetas,\n  getPoolsFromSubgraph: async ({ addresses, getPoolMetaByAddress, client }) => {\n    const { pools: poolsFromSubgraph } = await client.request(queryV3Pools, {\n      pageSize: 1e3,\n      poolAddrs: addresses\n    });\n    return poolsFromSubgraph.map(({ id, liquidity, sqrtPrice, tick, totalValueLockedUSD, feeProtocol }) => {\n      const meta = getPoolMetaByAddress(id);\n      if (!meta) {\n        return null;\n      }\n      const { fee, currencyA, currencyB, id: address } = meta;\n      const [token0, token1] = currencyA.wrapped.sortsBefore(currencyB.wrapped) ? [currencyA, currencyB] : [currencyB, currencyA];\n      const [token0ProtocolFee, token1ProtocolFee] = v3Sdk.parseProtocolFees(feeProtocol);\n      return {\n        type: 1 /* V3 */,\n        fee,\n        token0,\n        token1,\n        liquidity: BigInt(liquidity),\n        sqrtRatioX96: BigInt(sqrtPrice),\n        tick: Number(tick),\n        address,\n        tvlUSD: BigInt(Number.parseInt(totalValueLockedUSD)),\n        token0ProtocolFee,\n        token1ProtocolFee\n      };\n    });\n  }\n});\nvar queryV2Pools = graphqlRequest.gql`\n  query getPools($pageSize: Int!, $poolAddrs: [ID!]) {\n    pairs(first: $pageSize, where: { id_in: $poolAddrs }) {\n      id\n      reserve0\n      reserve1\n      reserveUSD\n    }\n  }\n`;\nvar getV2PoolSubgraph = subgraphPoolProviderFactory({\n  id: \"V2\",\n  getPoolMetas: ([currencyA, currencyB]) => [\n    {\n      currencyA,\n      currencyB,\n      id: computeV2PoolAddress(currencyA.wrapped, currencyB.wrapped)\n    }\n  ],\n  getPoolsFromSubgraph: async ({ addresses, getPoolMetaByAddress, client }) => {\n    const { pairs: poolsFromSubgraph } = await client.request(queryV2Pools, {\n      pageSize: 1e3,\n      poolAddrs: addresses\n    });\n    return poolsFromSubgraph.map(({ id, reserveUSD, reserve0, reserve1 }) => {\n      const meta = getPoolMetaByAddress(id);\n      if (!meta) {\n        return null;\n      }\n      const { currencyA, currencyB, id: address } = meta;\n      const [token0, token1] = currencyA.wrapped.sortsBefore(currencyB.wrapped) ? [currencyA, currencyB] : [currencyB, currencyA];\n      const reserve0Amount = tryParseAmount_default(reserve0, token0);\n      const reserve1Amount = tryParseAmount_default(reserve1, token1);\n      if (!reserve0Amount || !reserve1Amount) {\n        return null;\n      }\n      return {\n        address,\n        type: 0 /* V2 */,\n        reserve0: reserve0Amount,\n        reserve1: reserve1Amount,\n        tvlUSD: BigInt(Number.parseInt(reserveUSD))\n      };\n    });\n  }\n});\nfunction subgraphAllPoolsQueryFactory({\n  getPoolsFromSubgraph,\n  getPoolId: getPoolId3\n}) {\n  return async function getAllPools({\n    provider,\n    chainId,\n    pageSize = 1e3\n  }) {\n    if (!provider || !chainId) {\n      throw new Error(\"No valid subgraph data provider\");\n    }\n    const client = provider({ chainId });\n    if (!client) {\n      throw new Error(`No subgraph client found for chainId ${chainId}`);\n    }\n    let hasMorePools = true;\n    let lastId = \"\";\n    let pools = [];\n    while (hasMorePools) {\n      const poolsAtCurrentPage = await getPoolsFromSubgraph({ client, lastId, pageSize, chainId });\n      if (poolsAtCurrentPage.length < pageSize) {\n        hasMorePools = false;\n        pools = [...pools, ...poolsAtCurrentPage];\n        break;\n      }\n      lastId = getPoolId3(poolsAtCurrentPage[poolsAtCurrentPage.length - 1]);\n      pools = [...pools, ...poolsAtCurrentPage];\n    }\n    return pools;\n  };\n}\nvar queryAllV3Pools = graphqlRequest.gql`\n  query getPools($pageSize: Int!, $id: String) {\n    pools(first: $pageSize, where: { id_gt: $id }) {\n      id\n      tick\n      token0 {\n        symbol\n        id\n        decimals\n      }\n      token1 {\n        symbol\n        id\n        decimals\n      }\n      sqrtPrice\n      feeTier\n      liquidity\n      feeProtocol\n      totalValueLockedUSD\n    }\n  }\n`;\nvar getAllV3PoolsFromSubgraph = subgraphAllPoolsQueryFactory({\n  id: \"getAllV3PoolsFromSubgraph\",\n  getPoolsFromSubgraph: async ({ lastId, pageSize, client, chainId }) => {\n    const { pools: poolsFromSubgraph } = await client.request(\n      queryAllV3Pools,\n      {\n        pageSize,\n        id: lastId\n      }\n    );\n    return poolsFromSubgraph.map(\n      ({ id, liquidity, sqrtPrice, tick, totalValueLockedUSD, feeProtocol, token0, token1, feeTier }) => {\n        const [token0ProtocolFee, token1ProtocolFee] = v3Sdk.parseProtocolFees(feeProtocol);\n        return {\n          type: 1 /* V3 */,\n          fee: Number(feeTier),\n          token0: new sdk.Token(chainId, viem.getAddress(token0.id), Number(token0.decimals), token0.symbol),\n          token1: new sdk.Token(chainId, viem.getAddress(token1.id), Number(token1.decimals), token1.symbol),\n          liquidity: BigInt(liquidity),\n          sqrtRatioX96: BigInt(sqrtPrice),\n          tick: Number(tick),\n          address: viem.getAddress(id),\n          tvlUSD: BigInt(Number.parseInt(totalValueLockedUSD)),\n          token0ProtocolFee,\n          token1ProtocolFee\n        };\n      }\n    );\n  },\n  getPoolId: (p) => p.address\n});\n\n// evm/v3-router/providers/poolProviders/getV2CandidatePools.ts\nfunction createV2PoolsProviderByCommonTokenPrices(getCommonTokenPrices2) {\n  return async function getV2Pools({\n    currencyA,\n    currencyB,\n    pairs: providedPairs,\n    onChainProvider,\n    blockNumber,\n    ...rest\n  }) {\n    const pairs = providedPairs || await getPairCombinations(currencyA, currencyB);\n    const [poolsFromOnChain, baseTokenUsdPrices] = await Promise.all([\n      getV2PoolsOnChain(pairs, onChainProvider, blockNumber),\n      getCommonTokenPrices2({ currencyA, currencyB, ...rest })\n    ]);\n    if (!poolsFromOnChain) {\n      throw new Error(\"Failed to get v2 candidate pools\");\n    }\n    if (!baseTokenUsdPrices) {\n      logger.log(\"Failed to get base token prices\");\n      return poolsFromOnChain.map((pool) => {\n        return {\n          ...pool,\n          tvlUSD: BigInt(0),\n          address: getPoolAddress(pool)\n        };\n      });\n    }\n    return poolsFromOnChain.map((pool) => {\n      const getAmountUsd = (amount) => {\n        if (amount.equalTo(sdk.ZERO)) {\n          return 0;\n        }\n        const price = baseTokenUsdPrices.get(amount.currency.wrapped.address);\n        if (price !== void 0) {\n          return parseFloat(amount.toExact()) * price;\n        }\n        const againstAmount = pool.reserve0.currency.equals(amount.currency) ? pool.reserve1 : pool.reserve0;\n        const againstUsdPrice = baseTokenUsdPrices.get(againstAmount.currency.wrapped.address);\n        if (againstUsdPrice) {\n          const poolPrice = new sdk.Price({ baseAmount: amount, quoteAmount: againstAmount });\n          return parseFloat(amount.toExact()) * parseFloat(formatPrice(poolPrice, 6) || \"0\");\n        }\n        return 0;\n      };\n      return {\n        ...pool,\n        tvlUSD: BigInt(Math.floor(getAmountUsd(pool.reserve0) + getAmountUsd(pool.reserve1))),\n        address: getPoolAddress(pool)\n      };\n    });\n  };\n}\nvar getV2PoolsWithTvlByCommonTokenPrices = createV2PoolsProviderByCommonTokenPrices(getCommonTokenPrices);\nfunction createGetV2CandidatePools(defaultGetV2Pools, options) {\n  const getV2PoolsWithFallbacks = createAsyncCallWithFallbacks(defaultGetV2Pools, options);\n  return async function getV2Pools(params) {\n    const { currencyA, currencyB } = params;\n    const pools = await getV2PoolsWithFallbacks(params);\n    return v2PoolTvlSelector(currencyA, currencyB, pools);\n  };\n}\nasync function getV2CandidatePools(params) {\n  const fallbacks = [\n    async ({ pairs: providedPairs, currencyA, currencyB, v2SubgraphProvider }) => {\n      const pairs = providedPairs || await getPairCombinations(currencyA, currencyB);\n      return getV2PoolSubgraph({ provider: v2SubgraphProvider, pairs });\n    }\n  ];\n  const getV2PoolsWithFallbacks = createGetV2CandidatePools(getV2PoolsWithTvlByCommonTokenPrices, {\n    fallbacks,\n    fallbackTimeout: 3e3\n  });\n  return getV2PoolsWithFallbacks(params);\n}\nvar getV3PoolTvl = memoize2__default.default(\n  (pools, poolAddress) => {\n    const poolWithTvl = pools.find((p) => p.address === poolAddress);\n    return poolWithTvl?.tvlUSD || 0n;\n  },\n  (_, poolAddress) => poolAddress\n);\nvar v3PoolsOnChainProviderFactory = (tvlReferenceProvider) => {\n  return async function getV3PoolsWithTvlFromOnChain2(params) {\n    const { currencyA, currencyB, pairs: providedPairs, onChainProvider, blockNumber } = params;\n    const pairs = providedPairs || await getPairCombinations(currencyA, currencyB);\n    const [fromOnChain, tvlReference] = await Promise.allSettled([\n      getV3PoolsWithoutTicksOnChain(pairs, onChainProvider, blockNumber),\n      tvlReferenceProvider(params)\n    ]);\n    if (fromOnChain.status === \"fulfilled\" && tvlReference.status === \"fulfilled\") {\n      const { value: poolsFromOnChain } = fromOnChain;\n      const { value: poolTvlReferences } = tvlReference;\n      if (!Array.isArray(poolTvlReferences)) {\n        throw new Error(\"Failed to get tvl references\");\n      }\n      return poolsFromOnChain.map((pool) => {\n        const tvlUSD = BigInt(getV3PoolTvl(poolTvlReferences, pool.address));\n        return {\n          ...pool,\n          tvlUSD\n        };\n      });\n    }\n    throw new Error(`Getting v3 pools failed. Onchain ${fromOnChain.status}, tvl references ${tvlReference.status}`);\n  };\n};\nvar getV3PoolsWithTvlFromOnChain = v3PoolsOnChainProviderFactory(async (params) => {\n  const { currencyA, currencyB, pairs: providedPairs, subgraphProvider } = params;\n  const pairs = providedPairs || await getPairCombinations(currencyA, currencyB);\n  return getV3PoolSubgraph({ provider: subgraphProvider, pairs });\n});\nvar createFallbackTvlRefGetter = () => {\n  const cache = /* @__PURE__ */ new Map();\n  return async (params) => {\n    const { currencyA } = params;\n    if (!currencyA?.chainId) {\n      throw new Error(`Cannot get tvl references at chain ${currencyA?.chainId}`);\n    }\n    const cached = cache.get(currencyA.chainId);\n    if (cached) {\n      return cached;\n    }\n    const res = await fetch(`https://routing-api.pancakeswap.com/v0/v3-pools-tvl/${currencyA.chainId}`);\n    const refs = await res.json();\n    cache.set(currencyA.chainId, refs);\n    return refs;\n  };\n};\nvar getV3PoolsWithTvlFromOnChainFallback = v3PoolsOnChainProviderFactory(createFallbackTvlRefGetter());\nvar getV3PoolsWithTvlFromOnChainStaticFallback = v3PoolsOnChainProviderFactory(() => Promise.resolve([]));\nfunction createGetV3CandidatePools(defaultGetV3Pools, options) {\n  const getV3PoolsWithFallbacks = createAsyncCallWithFallbacks(defaultGetV3Pools, options);\n  return async function getV3Pools2(params) {\n    const { currencyA, currencyB } = params;\n    const pools = await getV3PoolsWithFallbacks(params);\n    return v3PoolTvlSelector(currencyA, currencyB, pools);\n  };\n}\nasync function getV3CandidatePools(params) {\n  const { subgraphFallback = true, staticFallback = true, fallbackTimeout, ...rest } = params;\n  const fallbacks = [];\n  if (subgraphFallback) {\n    fallbacks.push(getV3PoolsWithTvlFromOnChain);\n    fallbacks.push(async (p) => {\n      const { currencyA, currencyB, pairs: providedPairs, subgraphProvider } = p;\n      const pairs = providedPairs || await getPairCombinations(currencyA, currencyB);\n      return getV3PoolSubgraph({ provider: subgraphProvider, pairs });\n    });\n  }\n  if (staticFallback) {\n    fallbacks.push(getV3PoolsWithTvlFromOnChainStaticFallback);\n  }\n  const getV3PoolsWithFallback = createGetV3CandidatePools(getV3PoolsWithTvlFromOnChainFallback, {\n    fallbacks,\n    fallbackTimeout\n  });\n  return getV3PoolsWithFallback(rest);\n}\n\n// evm/v3-router/providers/poolProviders/getStableCandidatePools.ts\nasync function getStableCandidatePools(params) {\n  const { onChainProvider, currencyA, currencyB, pairs: providedPairs, blockNumber } = params;\n  const pairs = providedPairs || await getPairCombinations(currencyA, currencyB);\n  return getStablePoolsOnChain(pairs, onChainProvider, blockNumber);\n}\n\n// evm/v3-router/providers/poolProviders/getCandidatePools.ts\nasync function getCandidatePools({\n  protocols = [1 /* V3 */, 0 /* V2 */, 2 /* STABLE */],\n  v2SubgraphProvider,\n  v3SubgraphProvider,\n  ...rest\n}) {\n  const { currencyA } = rest;\n  const chainId = currencyA?.chainId;\n  if (!chainId) {\n    return [];\n  }\n  const poolSets = await Promise.all(\n    protocols.map((protocol) => {\n      if (protocol === 0 /* V2 */) {\n        return getV2CandidatePools({ ...rest, v2SubgraphProvider, v3SubgraphProvider });\n      }\n      if (protocol === 1 /* V3 */) {\n        return getV3CandidatePools({ ...rest, subgraphProvider: v3SubgraphProvider });\n      }\n      return getStableCandidatePools(rest);\n    })\n  );\n  return poolSets.reduce((acc, cur) => {\n    acc.push(...cur);\n    return acc;\n  }, []);\n}\n\n// evm/v3-router/providers/poolProviders/hybridPoolProvider.ts\nfunction createHybridPoolProvider({\n  onChainProvider,\n  v2SubgraphProvider,\n  v3SubgraphProvider\n}) {\n  const hybridPoolProvider = {\n    getCandidatePools: async (params) => {\n      return getCandidatePools({ ...params, onChainProvider, v2SubgraphProvider, v3SubgraphProvider });\n    }\n  };\n  return createPoolProviderWithCache(hybridPoolProvider);\n}\n\n// evm/v3-router/providers/poolProviders/staticPoolProvider.ts\nfunction createStaticPoolProvider(pools) {\n  const defaultAllowedProtocols = [0 /* V2 */, 2 /* STABLE */, 1 /* V3 */];\n  return {\n    getCandidatePools: async ({ protocols = defaultAllowedProtocols, pairs }) => {\n      if (!pools) {\n        return [];\n      }\n      if (!pairs) {\n        return pools.filter((pool) => protocols.includes(pool.type));\n      }\n      const relatedPools = [];\n      for (const [currencyA, currencyB] of pairs) {\n        for (const pool of pools) {\n          if (involvesCurrency(pool, currencyA) && involvesCurrency(pool, currencyB) && protocols.includes(pool.type)) {\n            relatedPools.push(pool);\n          }\n        }\n      }\n      return relatedPools;\n    }\n  };\n}\n\n// evm/v3-router/providers/poolProviders/index.ts\nfunction createPoolProvider(config) {\n  const hybridPoolProvider = createHybridPoolProvider(config);\n  return hybridPoolProvider;\n}\nfunction createOffChainQuoteProvider() {\n  const createGetRoutesWithQuotes = (isExactIn = true) => {\n    const getV2Quote = createGetV2Quote(isExactIn);\n    const getStableQuote = createGetStableQuote(isExactIn);\n    const getV3Quote = createGetV3Quote(isExactIn);\n    function* each(pools) {\n      let i = isExactIn ? 0 : pools.length - 1;\n      const hasNext = () => isExactIn ? i < pools.length : i >= 0;\n      while (hasNext()) {\n        yield [pools[i], i];\n        if (isExactIn) {\n          i += 1;\n        } else {\n          i -= 1;\n        }\n      }\n    }\n    const adjustQuoteForGas = (quote, gasCostInToken) => {\n      if (isExactIn) {\n        return quote.subtract(gasCostInToken);\n      }\n      return quote.add(gasCostInToken);\n    };\n    return async function getRoutesWithQuotes(routes, { gasModel }) {\n      const routesWithQuote = [];\n      for (const route of routes) {\n        try {\n          const { pools, amount, output, input } = route;\n          const quoteCurrency = amount.currency.wrapped.equals(input.wrapped) ? output : input;\n          let quote = amount;\n          const initializedTickCrossedList = Array(pools.length).fill(0);\n          let quoteSuccess = true;\n          for (const [pool, i] of each(pools)) {\n            if (isV2Pool(pool)) {\n              ;\n              [quote] = getV2Quote(pool, quote);\n              continue;\n            }\n            if (isStablePool(pool)) {\n              ;\n              [quote] = getStableQuote(pool, quote);\n              continue;\n            }\n            if (isV3Pool(pool)) {\n              const v3QuoteResult = await getV3Quote(pool, quote);\n              if (!v3QuoteResult || v3QuoteResult.quote.quotient === sdk.ZERO) {\n                quoteSuccess = false;\n                break;\n              }\n              const { quote: v3Quote, numOfTicksCrossed } = v3QuoteResult;\n              quote = v3Quote;\n              initializedTickCrossedList[i] = numOfTicksCrossed;\n            }\n          }\n          if (!quoteSuccess) {\n            continue;\n          }\n          const finalQuote = sdk.CurrencyAmount.fromRawAmount(quoteCurrency, quote.quotient);\n          const { gasEstimate, gasCostInUSD, gasCostInToken } = gasModel.estimateGasCost(\n            {\n              ...route,\n              quote: finalQuote\n            },\n            { initializedTickCrossedList }\n          );\n          routesWithQuote.push({\n            ...route,\n            quote: finalQuote,\n            quoteAdjustedForGas: adjustQuoteForGas(finalQuote, gasCostInToken),\n            gasEstimate,\n            gasCostInUSD,\n            gasCostInToken\n          });\n        } catch (e) {\n        }\n      }\n      return routesWithQuote;\n    };\n  };\n  return {\n    getRouteWithQuotesExactIn: createGetRoutesWithQuotes(true),\n    getRouteWithQuotesExactOut: createGetRoutesWithQuotes(false)\n  };\n}\nfunction createGetV2Quote(isExactIn = true) {\n  return function getV2Quote(p, amount) {\n    const { reserve0, reserve1 } = p;\n    const pair = new sdk.Pair(reserve0.wrapped, reserve1.wrapped);\n    const [quote, newPair] = isExactIn ? pair.getOutputAmount(amount.wrapped) : pair.getInputAmount(amount.wrapped);\n    const newPool = { ...p, reserve0: newPair.reserve0, reserve1: newPair.reserve1 };\n    return [quote, newPool];\n  };\n}\nfunction createGetStableQuote(isExactIn = true) {\n  const getQuote = isExactIn ? stableSwapSdk.getQuoteExactIn : stableSwapSdk.getQuoteExactOut;\n  return function getStableQuote(pool, amount) {\n    const { amplifier, balances, fee } = pool;\n    const [quote, { balances: newBalances }] = getQuote({\n      amount,\n      balances,\n      amplifier,\n      outputCurrency: getOutputCurrency(pool, amount.currency),\n      fee\n    });\n    return [quote, { ...pool, balances: newBalances }];\n  };\n}\nfunction createGetV3Quote(isExactIn = true) {\n  return async function getV3Quote(pool, amount) {\n    const { token0, token1, fee, sqrtRatioX96, liquidity, ticks, tick } = pool;\n    if (!ticks?.length) {\n      return null;\n    }\n    try {\n      const v3Pool = new v3Sdk.Pool(token0.wrapped, token1.wrapped, fee, sqrtRatioX96, liquidity, tick, ticks);\n      const [quote, poolAfter] = isExactIn ? await v3Pool.getOutputAmount(amount.wrapped) : await v3Pool.getInputAmountByExactOut(amount.wrapped);\n      if (quote.quotient <= 0n) {\n        return null;\n      }\n      const { tickCurrent: tickAfter } = poolAfter;\n      const newPool = {\n        ...pool,\n        tick: tickAfter,\n        sqrtRatioX96: poolAfter.sqrtRatioX96,\n        liquidity: poolAfter.liquidity\n      };\n      const numOfTicksCrossed = v3Sdk.TickList.countInitializedTicksCrossed(ticks, tick, tickAfter);\n      return {\n        quote,\n        numOfTicksCrossed,\n        pool: newPool\n      };\n    } catch (e) {\n      return null;\n    }\n  };\n}\nfunction createPoolQuoteGetter(isExactIn = true) {\n  const getV2Quote = createGetV2Quote(isExactIn);\n  const getStableQuote = createGetStableQuote(isExactIn);\n  const getV3Quote = createGetV3Quote(isExactIn);\n  return async function getPoolQuote(pool, amount) {\n    if (isV2Pool(pool)) {\n      const [quote, newPool] = getV2Quote(pool, amount);\n      return { quote, pool, poolAfter: newPool };\n    }\n    if (isV3Pool(pool)) {\n      const quote = await getV3Quote(pool, amount);\n      return quote ? { quote: quote.quote, pool, poolAfter: quote.pool } : void 0;\n    }\n    if (isStablePool(pool)) {\n      const [quote, newPool] = getStableQuote(pool, amount);\n      return { quote, pool, poolAfter: newPool };\n    }\n    return void 0;\n  };\n}\n\n// ../utils/abortControl.ts\nfunction isAbortError(error) {\n  return error instanceof Error && error.name === \"AbortError\";\n}\n\n// evm/abis/IBinQuoter.ts\nvar binQuoterAbi = [\n  {\n    inputs: [{ internalType: \"address\", name: \"_poolManager\", type: \"address\" }],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\"\n  },\n  { inputs: [{ internalType: \"PoolId\", name: \"poolId\", type: \"bytes32\" }], name: \"NotEnoughLiquidity\", type: \"error\" },\n  { inputs: [], name: \"NotSelf\", type: \"error\" },\n  { inputs: [], name: \"NotVault\", type: \"error\" },\n  { inputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }], name: \"QuoteSwap\", type: \"error\" },\n  { inputs: [], name: \"UnexpectedCallSuccess\", type: \"error\" },\n  {\n    inputs: [{ internalType: \"bytes\", name: \"revertData\", type: \"bytes\" }],\n    name: \"UnexpectedRevertBytes\",\n    type: \"error\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"Currency\", name: \"exactCurrency\", type: \"address\" },\n          {\n            components: [\n              { internalType: \"Currency\", name: \"intermediateCurrency\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PathKey[]\",\n            name: \"path\",\n            type: \"tuple[]\"\n          },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"_quoteExactInput\",\n    outputs: [{ internalType: \"bytes\", name: \"\", type: \"bytes\" }],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            components: [\n              { internalType: \"Currency\", name: \"currency0\", type: \"address\" },\n              { internalType: \"Currency\", name: \"currency1\", type: \"address\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PoolKey\",\n            name: \"poolKey\",\n            type: \"tuple\"\n          },\n          { internalType: \"bool\", name: \"zeroForOne\", type: \"bool\" },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" },\n          { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactSingleParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"_quoteExactInputSingle\",\n    outputs: [{ internalType: \"bytes\", name: \"\", type: \"bytes\" }],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"Currency\", name: \"exactCurrency\", type: \"address\" },\n          {\n            components: [\n              { internalType: \"Currency\", name: \"intermediateCurrency\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PathKey[]\",\n            name: \"path\",\n            type: \"tuple[]\"\n          },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"_quoteExactOutput\",\n    outputs: [{ internalType: \"bytes\", name: \"\", type: \"bytes\" }],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            components: [\n              { internalType: \"Currency\", name: \"currency0\", type: \"address\" },\n              { internalType: \"Currency\", name: \"currency1\", type: \"address\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PoolKey\",\n            name: \"poolKey\",\n            type: \"tuple\"\n          },\n          { internalType: \"bool\", name: \"zeroForOne\", type: \"bool\" },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" },\n          { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactSingleParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"_quoteExactOutputSingle\",\n    outputs: [{ internalType: \"bytes\", name: \"\", type: \"bytes\" }],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [{ internalType: \"bytes\", name: \"data\", type: \"bytes\" }],\n    name: \"lockAcquired\",\n    outputs: [{ internalType: \"bytes\", name: \"\", type: \"bytes\" }],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"poolManager\",\n    outputs: [{ internalType: \"contract IBinPoolManager\", name: \"\", type: \"address\" }],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"Currency\", name: \"exactCurrency\", type: \"address\" },\n          {\n            components: [\n              { internalType: \"Currency\", name: \"intermediateCurrency\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PathKey[]\",\n            name: \"path\",\n            type: \"tuple[]\"\n          },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactInput\",\n    outputs: [\n      { internalType: \"uint256\", name: \"amountOut\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"gasEstimate\", type: \"uint256\" }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            components: [\n              { internalType: \"Currency\", name: \"currency0\", type: \"address\" },\n              { internalType: \"Currency\", name: \"currency1\", type: \"address\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PoolKey\",\n            name: \"poolKey\",\n            type: \"tuple\"\n          },\n          { internalType: \"bool\", name: \"zeroForOne\", type: \"bool\" },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" },\n          { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactSingleParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactInputSingle\",\n    outputs: [\n      { internalType: \"uint256\", name: \"amountOut\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"gasEstimate\", type: \"uint256\" }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"Currency\", name: \"exactCurrency\", type: \"address\" },\n          {\n            components: [\n              { internalType: \"Currency\", name: \"intermediateCurrency\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PathKey[]\",\n            name: \"path\",\n            type: \"tuple[]\"\n          },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactOutput\",\n    outputs: [\n      { internalType: \"uint256\", name: \"amountIn\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"gasEstimate\", type: \"uint256\" }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            components: [\n              { internalType: \"Currency\", name: \"currency0\", type: \"address\" },\n              { internalType: \"Currency\", name: \"currency1\", type: \"address\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PoolKey\",\n            name: \"poolKey\",\n            type: \"tuple\"\n          },\n          { internalType: \"bool\", name: \"zeroForOne\", type: \"bool\" },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" },\n          { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactSingleParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactOutputSingle\",\n    outputs: [\n      { internalType: \"uint256\", name: \"amountIn\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"gasEstimate\", type: \"uint256\" }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"vault\",\n    outputs: [{ internalType: \"contract IVault\", name: \"\", type: \"address\" }],\n    stateMutability: \"view\",\n    type: \"function\"\n  }\n];\n\n// evm/abis/ICLQuoter.ts\nvar clQuoterAbi = [\n  {\n    inputs: [{ internalType: \"address\", name: \"_poolManager\", type: \"address\" }],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\"\n  },\n  { inputs: [{ internalType: \"PoolId\", name: \"poolId\", type: \"bytes32\" }], name: \"NotEnoughLiquidity\", type: \"error\" },\n  { inputs: [], name: \"NotSelf\", type: \"error\" },\n  { inputs: [], name: \"NotVault\", type: \"error\" },\n  { inputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }], name: \"QuoteSwap\", type: \"error\" },\n  { inputs: [], name: \"UnexpectedCallSuccess\", type: \"error\" },\n  {\n    inputs: [{ internalType: \"bytes\", name: \"revertData\", type: \"bytes\" }],\n    name: \"UnexpectedRevertBytes\",\n    type: \"error\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"Currency\", name: \"exactCurrency\", type: \"address\" },\n          {\n            components: [\n              { internalType: \"Currency\", name: \"intermediateCurrency\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PathKey[]\",\n            name: \"path\",\n            type: \"tuple[]\"\n          },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"_quoteExactInput\",\n    outputs: [{ internalType: \"bytes\", name: \"\", type: \"bytes\" }],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            components: [\n              { internalType: \"Currency\", name: \"currency0\", type: \"address\" },\n              { internalType: \"Currency\", name: \"currency1\", type: \"address\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PoolKey\",\n            name: \"poolKey\",\n            type: \"tuple\"\n          },\n          { internalType: \"bool\", name: \"zeroForOne\", type: \"bool\" },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" },\n          { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactSingleParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"_quoteExactInputSingle\",\n    outputs: [{ internalType: \"bytes\", name: \"\", type: \"bytes\" }],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"Currency\", name: \"exactCurrency\", type: \"address\" },\n          {\n            components: [\n              { internalType: \"Currency\", name: \"intermediateCurrency\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PathKey[]\",\n            name: \"path\",\n            type: \"tuple[]\"\n          },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"_quoteExactOutput\",\n    outputs: [{ internalType: \"bytes\", name: \"\", type: \"bytes\" }],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            components: [\n              { internalType: \"Currency\", name: \"currency0\", type: \"address\" },\n              { internalType: \"Currency\", name: \"currency1\", type: \"address\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PoolKey\",\n            name: \"poolKey\",\n            type: \"tuple\"\n          },\n          { internalType: \"bool\", name: \"zeroForOne\", type: \"bool\" },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" },\n          { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactSingleParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"_quoteExactOutputSingle\",\n    outputs: [{ internalType: \"bytes\", name: \"\", type: \"bytes\" }],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [{ internalType: \"bytes\", name: \"data\", type: \"bytes\" }],\n    name: \"lockAcquired\",\n    outputs: [{ internalType: \"bytes\", name: \"\", type: \"bytes\" }],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"poolManager\",\n    outputs: [{ internalType: \"contract ICLPoolManager\", name: \"\", type: \"address\" }],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"Currency\", name: \"exactCurrency\", type: \"address\" },\n          {\n            components: [\n              { internalType: \"Currency\", name: \"intermediateCurrency\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PathKey[]\",\n            name: \"path\",\n            type: \"tuple[]\"\n          },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactInput\",\n    outputs: [\n      { internalType: \"uint256\", name: \"amountOut\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"gasEstimate\", type: \"uint256\" }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            components: [\n              { internalType: \"Currency\", name: \"currency0\", type: \"address\" },\n              { internalType: \"Currency\", name: \"currency1\", type: \"address\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PoolKey\",\n            name: \"poolKey\",\n            type: \"tuple\"\n          },\n          { internalType: \"bool\", name: \"zeroForOne\", type: \"bool\" },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" },\n          { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactSingleParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactInputSingle\",\n    outputs: [\n      { internalType: \"uint256\", name: \"amountOut\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"gasEstimate\", type: \"uint256\" }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          { internalType: \"Currency\", name: \"exactCurrency\", type: \"address\" },\n          {\n            components: [\n              { internalType: \"Currency\", name: \"intermediateCurrency\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PathKey[]\",\n            name: \"path\",\n            type: \"tuple[]\"\n          },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactOutput\",\n    outputs: [\n      { internalType: \"uint256\", name: \"amountIn\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"gasEstimate\", type: \"uint256\" }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            components: [\n              { internalType: \"Currency\", name: \"currency0\", type: \"address\" },\n              { internalType: \"Currency\", name: \"currency1\", type: \"address\" },\n              { internalType: \"contract IHooks\", name: \"hooks\", type: \"address\" },\n              { internalType: \"contract IPoolManager\", name: \"poolManager\", type: \"address\" },\n              { internalType: \"uint24\", name: \"fee\", type: \"uint24\" },\n              { internalType: \"bytes32\", name: \"parameters\", type: \"bytes32\" }\n            ],\n            internalType: \"struct PoolKey\",\n            name: \"poolKey\",\n            type: \"tuple\"\n          },\n          { internalType: \"bool\", name: \"zeroForOne\", type: \"bool\" },\n          { internalType: \"uint128\", name: \"exactAmount\", type: \"uint128\" },\n          { internalType: \"bytes\", name: \"hookData\", type: \"bytes\" }\n        ],\n        internalType: \"struct IQuoter.QuoteExactSingleParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactOutputSingle\",\n    outputs: [\n      { internalType: \"uint256\", name: \"amountIn\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"gasEstimate\", type: \"uint256\" }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"vault\",\n    outputs: [{ internalType: \"contract IVault\", name: \"\", type: \"address\" }],\n    stateMutability: \"view\",\n    type: \"function\"\n  }\n];\n\n// evm/abis/IInfinityMixedRouteQuoter.ts\nvar infinityMixedRouteQuoterAbi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      { name: \"_factoryV3\", type: \"address\", internalType: \"address\" },\n      { name: \"_factoryV2\", type: \"address\", internalType: \"address\" },\n      { name: \"_factoryStable\", type: \"address\", internalType: \"address\" },\n      { name: \"_WETH9\", type: \"address\", internalType: \"address\" },\n      { name: \"_clQuoter\", type: \"address\", internalType: \"contract ICLQuoter\" },\n      { name: \"_binQuoter\", type: \"address\", internalType: \"contract IBinQuoter\" }\n    ],\n    stateMutability: \"nonpayable\"\n  },\n  {\n    type: \"function\",\n    name: \"WETH9\",\n    inputs: [],\n    outputs: [{ name: \"\", type: \"address\", internalType: \"address\" }],\n    stateMutability: \"view\"\n  },\n  {\n    type: \"function\",\n    name: \"binQuoter\",\n    inputs: [],\n    outputs: [{ name: \"\", type: \"address\", internalType: \"contract IBinQuoter\" }],\n    stateMutability: \"view\"\n  },\n  {\n    type: \"function\",\n    name: \"clQuoter\",\n    inputs: [],\n    outputs: [{ name: \"\", type: \"address\", internalType: \"contract ICLQuoter\" }],\n    stateMutability: \"view\"\n  },\n  {\n    type: \"function\",\n    name: \"factoryStable\",\n    inputs: [],\n    outputs: [{ name: \"\", type: \"address\", internalType: \"address\" }],\n    stateMutability: \"view\"\n  },\n  {\n    type: \"function\",\n    name: \"factoryV2\",\n    inputs: [],\n    outputs: [{ name: \"\", type: \"address\", internalType: \"address\" }],\n    stateMutability: \"view\"\n  },\n  {\n    type: \"function\",\n    name: \"factoryV3\",\n    inputs: [],\n    outputs: [{ name: \"\", type: \"address\", internalType: \"address\" }],\n    stateMutability: \"view\"\n  },\n  {\n    type: \"function\",\n    name: \"multicall\",\n    inputs: [{ name: \"data\", type: \"bytes[]\", internalType: \"bytes[]\" }],\n    outputs: [{ name: \"results\", type: \"bytes[]\", internalType: \"bytes[]\" }],\n    stateMutability: \"payable\"\n  },\n  {\n    type: \"function\",\n    name: \"pancakeV3SwapCallback\",\n    inputs: [\n      { name: \"amount0Delta\", type: \"int256\", internalType: \"int256\" },\n      { name: \"amount1Delta\", type: \"int256\", internalType: \"int256\" },\n      { name: \"data\", type: \"bytes\", internalType: \"bytes\" }\n    ],\n    outputs: [],\n    stateMutability: \"view\"\n  },\n  {\n    type: \"function\",\n    name: \"quoteExactInputSingleStable\",\n    inputs: [\n      {\n        name: \"params\",\n        type: \"tuple\",\n        internalType: \"struct IMixedQuoter.QuoteExactInputSingleStableParams\",\n        components: [\n          { name: \"tokenIn\", type: \"address\", internalType: \"address\" },\n          { name: \"tokenOut\", type: \"address\", internalType: \"address\" },\n          { name: \"amountIn\", type: \"uint256\", internalType: \"uint256\" },\n          { name: \"flag\", type: \"uint256\", internalType: \"uint256\" }\n        ]\n      }\n    ],\n    outputs: [\n      { name: \"amountOut\", type: \"uint256\", internalType: \"uint256\" },\n      { name: \"gasEstimate\", type: \"uint256\", internalType: \"uint256\" }\n    ],\n    stateMutability: \"view\"\n  },\n  {\n    type: \"function\",\n    name: \"quoteExactInputSingleV2\",\n    inputs: [\n      {\n        name: \"params\",\n        type: \"tuple\",\n        internalType: \"struct IMixedQuoter.QuoteExactInputSingleV2Params\",\n        components: [\n          { name: \"tokenIn\", type: \"address\", internalType: \"address\" },\n          { name: \"tokenOut\", type: \"address\", internalType: \"address\" },\n          { name: \"amountIn\", type: \"uint256\", internalType: \"uint256\" }\n        ]\n      }\n    ],\n    outputs: [\n      { name: \"amountOut\", type: \"uint256\", internalType: \"uint256\" },\n      { name: \"gasEstimate\", type: \"uint256\", internalType: \"uint256\" }\n    ],\n    stateMutability: \"view\"\n  },\n  {\n    type: \"function\",\n    name: \"quoteExactInputSingleV3\",\n    inputs: [\n      {\n        name: \"params\",\n        type: \"tuple\",\n        internalType: \"struct IMixedQuoter.QuoteExactInputSingleV3Params\",\n        components: [\n          { name: \"tokenIn\", type: \"address\", internalType: \"address\" },\n          { name: \"tokenOut\", type: \"address\", internalType: \"address\" },\n          { name: \"amountIn\", type: \"uint256\", internalType: \"uint256\" },\n          { name: \"fee\", type: \"uint24\", internalType: \"uint24\" },\n          { name: \"sqrtPriceLimitX96\", type: \"uint160\", internalType: \"uint160\" }\n        ]\n      }\n    ],\n    outputs: [\n      { name: \"amountOut\", type: \"uint256\", internalType: \"uint256\" },\n      { name: \"sqrtPriceX96After\", type: \"uint160\", internalType: \"uint160\" },\n      { name: \"initializedTicksCrossed\", type: \"uint32\", internalType: \"uint32\" },\n      { name: \"gasEstimate\", type: \"uint256\", internalType: \"uint256\" }\n    ],\n    stateMutability: \"nonpayable\"\n  },\n  {\n    type: \"function\",\n    name: \"quoteMixedExactInput\",\n    inputs: [\n      { name: \"paths\", type: \"address[]\", internalType: \"address[]\" },\n      { name: \"actions\", type: \"bytes\", internalType: \"bytes\" },\n      { name: \"params\", type: \"bytes[]\", internalType: \"bytes[]\" },\n      { name: \"amountIn\", type: \"uint256\", internalType: \"uint256\" }\n    ],\n    outputs: [\n      { name: \"amountOut\", type: \"uint256\", internalType: \"uint256\" },\n      { name: \"gasEstimate\", type: \"uint256\", internalType: \"uint256\" }\n    ],\n    stateMutability: \"nonpayable\"\n  },\n  {\n    type: \"function\",\n    name: \"quoteMixedExactInputSharedContext\",\n    inputs: [\n      { name: \"paths\", type: \"address[]\", internalType: \"address[]\" },\n      { name: \"actions\", type: \"bytes\", internalType: \"bytes\" },\n      { name: \"params\", type: \"bytes[]\", internalType: \"bytes[]\" },\n      { name: \"amountIn\", type: \"uint256\", internalType: \"uint256\" }\n    ],\n    outputs: [\n      { name: \"amountOut\", type: \"uint256\", internalType: \"uint256\" },\n      { name: \"gasEstimate\", type: \"uint256\", internalType: \"uint256\" }\n    ],\n    stateMutability: \"nonpayable\"\n  },\n  { type: \"error\", name: \"INVALID_ADDRESS\", inputs: [] },\n  { type: \"error\", name: \"INVALID_SWAP_DIRECTION\", inputs: [] },\n  { type: \"error\", name: \"InputLengthMismatch\", inputs: [] },\n  { type: \"error\", name: \"InvalidPath\", inputs: [] },\n  { type: \"error\", name: \"InvalidPoolKeyCurrency\", inputs: [] },\n  { type: \"error\", name: \"NoActions\", inputs: [] },\n  {\n    type: \"error\",\n    name: \"SafeCastOverflowedUintDowncast\",\n    inputs: [\n      { name: \"bits\", type: \"uint8\", internalType: \"uint8\" },\n      { name: \"value\", type: \"uint256\", internalType: \"uint256\" }\n    ]\n  },\n  {\n    type: \"error\",\n    name: \"SafeCastOverflowedUintToInt\",\n    inputs: [{ name: \"value\", type: \"uint256\", internalType: \"uint256\" }]\n  },\n  { type: \"error\", name: \"UnsupportedAction\", inputs: [{ name: \"action\", type: \"uint256\", internalType: \"uint256\" }] }\n];\n\n// evm/abis/IMixedRouteQuoterV1.ts\nvar mixedRouteQuoterV1ABI = [\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"_deployer\",\n        type: \"address\"\n      },\n      {\n        internalType: \"address\",\n        name: \"_factory\",\n        type: \"address\"\n      },\n      {\n        internalType: \"address\",\n        name: \"_factoryV2\",\n        type: \"address\"\n      },\n      {\n        internalType: \"address\",\n        name: \"_factoryStable\",\n        type: \"address\"\n      },\n      {\n        internalType: \"address\",\n        name: \"_WETH9\",\n        type: \"address\"\n      }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\"\n  },\n  {\n    inputs: [],\n    name: \"WETH9\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\"\n      }\n    ],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"deployer\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\"\n      }\n    ],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"factory\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\"\n      }\n    ],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"factoryStable\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\"\n      }\n    ],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [],\n    name: \"factoryV2\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\"\n      }\n    ],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"int256\",\n        name: \"amount0Delta\",\n        type: \"int256\"\n      },\n      {\n        internalType: \"int256\",\n        name: \"amount1Delta\",\n        type: \"int256\"\n      },\n      {\n        internalType: \"bytes\",\n        name: \"path\",\n        type: \"bytes\"\n      }\n    ],\n    name: \"pancakeV3SwapCallback\",\n    outputs: [],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"path\",\n        type: \"bytes\"\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"flag\",\n        type: \"uint256[]\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amountIn\",\n        type: \"uint256\"\n      }\n    ],\n    name: \"quoteExactInput\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountOut\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"uint160[]\",\n        name: \"v3SqrtPriceX96AfterList\",\n        type: \"uint160[]\"\n      },\n      {\n        internalType: \"uint32[]\",\n        name: \"v3InitializedTicksCrossedList\",\n        type: \"uint32[]\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"v3SwapGasEstimate\",\n        type: \"uint256\"\n      }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"tokenIn\",\n            type: \"address\"\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenOut\",\n            type: \"address\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountIn\",\n            type: \"uint256\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"flag\",\n            type: \"uint256\"\n          }\n        ],\n        internalType: \"struct IMixedRouteQuoterV1.QuoteExactInputSingleStableParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactInputSingleStable\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountOut\",\n        type: \"uint256\"\n      }\n    ],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"tokenIn\",\n            type: \"address\"\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenOut\",\n            type: \"address\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountIn\",\n            type: \"uint256\"\n          }\n        ],\n        internalType: \"struct IMixedRouteQuoterV1.QuoteExactInputSingleV2Params\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactInputSingleV2\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountOut\",\n        type: \"uint256\"\n      }\n    ],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"tokenIn\",\n            type: \"address\"\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenOut\",\n            type: \"address\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountIn\",\n            type: \"uint256\"\n          },\n          {\n            internalType: \"uint24\",\n            name: \"fee\",\n            type: \"uint24\"\n          },\n          {\n            internalType: \"uint160\",\n            name: \"sqrtPriceLimitX96\",\n            type: \"uint160\"\n          }\n        ],\n        internalType: \"struct IMixedRouteQuoterV1.QuoteExactInputSingleV3Params\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactInputSingleV3\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountOut\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"uint160\",\n        name: \"sqrtPriceX96After\",\n        type: \"uint160\"\n      },\n      {\n        internalType: \"uint32\",\n        name: \"initializedTicksCrossed\",\n        type: \"uint32\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"gasEstimate\",\n        type: \"uint256\"\n      }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  }\n];\n\n// evm/abis/IQuoterV2.ts\nvar quoterV2ABI = [\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"path\",\n        type: \"bytes\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amountIn\",\n        type: \"uint256\"\n      }\n    ],\n    name: \"quoteExactInput\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountOut\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"uint160[]\",\n        name: \"sqrtPriceX96AfterList\",\n        type: \"uint160[]\"\n      },\n      {\n        internalType: \"uint32[]\",\n        name: \"initializedTicksCrossedList\",\n        type: \"uint32[]\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"gasEstimate\",\n        type: \"uint256\"\n      }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"tokenIn\",\n            type: \"address\"\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenOut\",\n            type: \"address\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amountIn\",\n            type: \"uint256\"\n          },\n          {\n            internalType: \"uint24\",\n            name: \"fee\",\n            type: \"uint24\"\n          },\n          {\n            internalType: \"uint160\",\n            name: \"sqrtPriceLimitX96\",\n            type: \"uint160\"\n          }\n        ],\n        internalType: \"struct IQuoterV2.QuoteExactInputSingleParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactInputSingle\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountOut\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"uint160\",\n        name: \"sqrtPriceX96After\",\n        type: \"uint160\"\n      },\n      {\n        internalType: \"uint32\",\n        name: \"initializedTicksCrossed\",\n        type: \"uint32\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"gasEstimate\",\n        type: \"uint256\"\n      }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"path\",\n        type: \"bytes\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amountOut\",\n        type: \"uint256\"\n      }\n    ],\n    name: \"quoteExactOutput\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountIn\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"uint160[]\",\n        name: \"sqrtPriceX96AfterList\",\n        type: \"uint160[]\"\n      },\n      {\n        internalType: \"uint32[]\",\n        name: \"initializedTicksCrossedList\",\n        type: \"uint32[]\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"gasEstimate\",\n        type: \"uint256\"\n      }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"tokenIn\",\n            type: \"address\"\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenOut\",\n            type: \"address\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount\",\n            type: \"uint256\"\n          },\n          {\n            internalType: \"uint24\",\n            name: \"fee\",\n            type: \"uint24\"\n          },\n          {\n            internalType: \"uint160\",\n            name: \"sqrtPriceLimitX96\",\n            type: \"uint160\"\n          }\n        ],\n        internalType: \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n        name: \"params\",\n        type: \"tuple\"\n      }\n    ],\n    name: \"quoteExactOutputSingle\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amountIn\",\n        type: \"uint256\"\n      },\n      {\n        internalType: \"uint160\",\n        name: \"sqrtPriceX96After\",\n        type: \"uint160\"\n      },\n      {\n        internalType: \"uint32\",\n        name: \"initializedTicksCrossed\",\n        type: \"uint32\"\n      },\n      {\n        internalType: \"uint256\",\n        name: \"gasEstimate\",\n        type: \"uint256\"\n      }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  }\n];\nfunction encodeInfinityMixedRouteActions(route) {\n  return viem.bytesToHex(\n    new Uint8Array(\n      route.pools.map((p) => {\n        if (isV2Pool(p)) {\n          return 2 /* V2_EXACT_INPUT_SINGLE */;\n        }\n        if (isV3Pool(p)) {\n          return 3 /* V3_EXACT_INPUT_SINGLE */;\n        }\n        if (isStablePool(p)) {\n          return 0 /* SS_2_EXACT_INPUT_SINGLE */;\n        }\n        if (isInfinityClPool(p)) {\n          return 4 /* INFI_CL_EXACT_INPUT_SINGLE */;\n        }\n        if (isInfinityBinPool(p)) {\n          return 5 /* INFI_BIN_EXACT_INPUT_SINGLE */;\n        }\n        throw new Error(`Unrecognized pool type ${p}`);\n      })\n    )\n  );\n}\nfunction getPoolCurrencies(pool) {\n  if (isV2Pool(pool)) {\n    return [pool.reserve0.currency, pool.reserve1.currency];\n  }\n  if (isV3Pool(pool)) {\n    return [pool.token0, pool.token1];\n  }\n  if (isStablePool(pool)) {\n    return pool.balances.map((b) => b.currency);\n  }\n  if (isInfinityClPool(pool) || isInfinityBinPool(pool)) {\n    return [pool.currency0, pool.currency1];\n  }\n  throw new Error(\"Failed to get pool currencies. Unrecognized pool type\");\n}\nfunction encodeInfinityMixedRouteCurrencyPath(route) {\n  const { pools } = route;\n  const currencyStart = route.path[0];\n  const pathStart = swapSdkCore.getMatchedCurrency(currencyStart, getPoolCurrencies(pools[0]));\n  if (!pathStart) {\n    throw new Error(\"Failed to encode path keys. Invalid start currency.\");\n  }\n  const { path } = pools.reduce(\n    ({ baseCurrency, path: path2 }, p) => {\n      const quoteCurrency = getOutputCurrency(p, baseCurrency);\n      return {\n        baseCurrency: quoteCurrency,\n        path: [...path2, swapSdkCore.getCurrencyAddress(quoteCurrency)]\n      };\n    },\n    { baseCurrency: pathStart, path: [swapSdkCore.getCurrencyAddress(pathStart)] }\n  );\n  return path;\n}\nvar infinityRouteParamsAbi = [\n  {\n    components: [\n      {\n        components: [\n          { name: \"currency0\", type: \"address\" },\n          { name: \"currency1\", type: \"address\" },\n          { name: \"hooks\", type: \"address\" },\n          { name: \"poolManager\", type: \"address\" },\n          { name: \"fee\", type: \"uint24\" },\n          { name: \"parameters\", type: \"bytes32\" }\n        ],\n        name: \"poolKey\",\n        type: \"tuple\"\n      },\n      { name: \"hookData\", type: \"bytes\" }\n    ],\n    name: \"params\",\n    type: \"tuple\"\n  }\n];\nfunction encodeInfinityMixedRouteParams(route) {\n  return route.pools.map((p) => {\n    if (isV2Pool(p) || isStablePool(p)) {\n      return \"0x\";\n    }\n    if (isV3Pool(p)) {\n      return viem.encodeAbiParameters(viem.parseAbiParameters(\"uint24\"), [p.fee]);\n    }\n    if (isInfinityClPool(p)) {\n      const poolKey = {\n        currency0: swapSdkCore.getCurrencyAddress(p.currency0),\n        currency1: swapSdkCore.getCurrencyAddress(p.currency1),\n        fee: infinitySdk.isDynamicFeeHook(p.currency0.chainId, p.hooks) ? infinitySdk.DYNAMIC_FEE_FLAG : p.fee,\n        hooks: p.hooks,\n        poolManager: p.poolManager,\n        parameters: {\n          tickSpacing: p.tickSpacing,\n          hooksRegistration: p.hooksRegistrationBitmap !== void 0 ? infinitySdk.decodeHooksRegistration(p.hooksRegistrationBitmap) : void 0\n        }\n      };\n      return viem.encodeAbiParameters(infinityRouteParamsAbi, [\n        {\n          poolKey: infinitySdk.encodePoolKey(poolKey),\n          hookData: \"0x\"\n        }\n      ]);\n    }\n    if (isInfinityBinPool(p)) {\n      const poolKey = {\n        currency0: swapSdkCore.getCurrencyAddress(p.currency0),\n        currency1: swapSdkCore.getCurrencyAddress(p.currency1),\n        fee: infinitySdk.isDynamicFeeHook(p.currency0.chainId, p.hooks) ? infinitySdk.DYNAMIC_FEE_FLAG : p.fee,\n        hooks: p.hooks,\n        poolManager: p.poolManager,\n        parameters: {\n          binStep: Number(p.binStep),\n          hooksRegistration: p.hooksRegistrationBitmap !== void 0 ? infinitySdk.decodeHooksRegistration(p.hooksRegistrationBitmap) : void 0\n        }\n      };\n      return viem.encodeAbiParameters(infinityRouteParamsAbi, [\n        {\n          poolKey: infinitySdk.encodePoolKey(poolKey),\n          hookData: \"0x\"\n        }\n      ]);\n    }\n    throw new Error(`Invalid pool type ${p}`);\n  });\n}\n\n// evm/abis/InterfaceMulticall.ts\nvar InterfaceMulticall_default = [\n  {\n    inputs: [],\n    name: \"getCurrentBlockTimestamp\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"timestamp\",\n        type: \"uint256\"\n      }\n    ],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\"\n      }\n    ],\n    name: \"getEthBalance\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"balance\",\n        type: \"uint256\"\n      }\n    ],\n    stateMutability: \"view\",\n    type: \"function\"\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"target\",\n            type: \"address\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"gasLimit\",\n            type: \"uint256\"\n          },\n          {\n            internalType: \"bytes\",\n            name: \"callData\",\n            type: \"bytes\"\n          }\n        ],\n        internalType: \"struct PancakeInterfaceMulticall.Call[]\",\n        name: \"calls\",\n        type: \"tuple[]\"\n      }\n    ],\n    name: \"multicall\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"blockNumber\",\n        type: \"uint256\"\n      },\n      {\n        components: [\n          {\n            internalType: \"bool\",\n            name: \"success\",\n            type: \"bool\"\n          },\n          {\n            internalType: \"uint256\",\n            name: \"gasUsed\",\n            type: \"uint256\"\n          },\n          {\n            internalType: \"bytes\",\n            name: \"returnData\",\n            type: \"bytes\"\n          }\n        ],\n        internalType: \"struct PancakeInterfaceMulticall.Result[]\",\n        name: \"returnData\",\n        type: \"tuple[]\"\n      }\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\"\n  }\n];\n\n// evm/v3-router/providers/multicallProvider.ts\nvar IMulticallProvider = class {\n};\n\n// evm/v3-router/providers/multicallSwapProvider.ts\nvar PancakeMulticallProvider = class extends IMulticallProvider {\n  constructor(chainId, provider, gasLimitPerCall = 1e6) {\n    super();\n    this.chainId = chainId;\n    this.provider = provider;\n    this.gasLimitPerCall = gasLimitPerCall;\n    this.provider = provider;\n  }\n  async callSameFunctionOnMultipleContracts(params) {\n    const { addresses, functionName, functionParams, abi, additionalConfig } = params;\n    const gasLimitPerCall = additionalConfig?.gasLimitPerCall ?? this.gasLimitPerCall;\n    const callData = viem.encodeFunctionData({\n      abi,\n      functionName,\n      args: functionParams\n    });\n    const calls = addresses.map((address) => {\n      return {\n        target: address,\n        callData,\n        gasLimit: BigInt(gasLimitPerCall)\n      };\n    });\n    const { results: result, blockNumber } = await multicall.multicallByGasLimit(calls, {\n      gasLimit: additionalConfig?.gasLimit,\n      gasBuffer: additionalConfig?.gasBuffer,\n      dropUnexecutedCalls: additionalConfig?.dropUnexecutedCalls,\n      chainId: this.chainId,\n      client: this.provider,\n      signal: additionalConfig?.signal\n    });\n    const results = [];\n    const gasUsedForSuccess = [];\n    const gasUsedForFail = [];\n    for (const { result: callResult, success, gasUsed } of result) {\n      if (callResult === \"0x\" || !success) {\n        results.push({\n          success: false,\n          returnData: callResult\n        });\n        gasUsedForFail.push(Number(gasUsed));\n        continue;\n      }\n      try {\n        results.push({\n          success: true,\n          result: viem.decodeFunctionResult({\n            abi,\n            functionName,\n            data: callResult\n          })\n        });\n        gasUsedForSuccess.push(Number(gasUsed));\n      } catch (e) {\n        results.push({\n          success: false,\n          returnData: callResult\n        });\n      }\n    }\n    return {\n      blockNumber,\n      results,\n      approxGasUsedPerSuccessCall: stats__default.default.percentile(gasUsedForSuccess, 99),\n      approxGasUsedPerFailCall: stats__default.default.percentile(gasUsedForFail, 99)\n    };\n  }\n  async callSameFunctionOnContractWithMultipleParams(params) {\n    const { address, functionName, functionParams, abi, additionalConfig, account } = params;\n    const gasLimitPerCall = additionalConfig?.gasLimitPerCall ?? this.gasLimitPerCall;\n    const calls = functionParams.map((functionParam) => {\n      const callData = viem.encodeFunctionData({\n        abi,\n        functionName,\n        args: functionParam\n      });\n      return {\n        target: address,\n        callData,\n        gasLimit: BigInt(gasLimitPerCall)\n      };\n    });\n    const { results: result, blockNumber } = await multicall.multicallByGasLimit(calls, {\n      gasLimit: additionalConfig?.gasLimit,\n      gasBuffer: additionalConfig?.gasBuffer,\n      dropUnexecutedCalls: additionalConfig?.dropUnexecutedCalls,\n      chainId: this.chainId,\n      client: this.provider,\n      signal: additionalConfig?.signal,\n      account\n    });\n    const results = [];\n    const gasUsedForSuccess = [];\n    const gasUsedForFail = [];\n    for (const { result: callResult, success, gasUsed } of result) {\n      if (callResult === \"0x\" || !success) {\n        results.push({\n          success: false,\n          returnData: callResult\n        });\n        gasUsedForFail.push(Number(gasUsed));\n        continue;\n      }\n      try {\n        results.push({\n          success: true,\n          result: viem.decodeFunctionResult({\n            abi,\n            functionName,\n            data: callResult\n          })\n        });\n        gasUsedForSuccess.push(Number(gasUsed));\n      } catch (e) {\n        results.push({\n          success: false,\n          returnData: callResult\n        });\n      }\n    }\n    return {\n      blockNumber,\n      results,\n      approxGasUsedPerSuccessCall: stats__default.default.percentile(gasUsedForSuccess, 99),\n      approxGasUsedPerFailCall: stats__default.default.percentile(gasUsedForFail, 99)\n    };\n  }\n  async callMultipleFunctionsOnSameContract(params) {\n    const { address, functionNames, functionParams, additionalConfig, abi } = params;\n    const gasLimitPerCall = additionalConfig?.gasLimitPerCall ?? this.gasLimitPerCall;\n    const calls = functionNames.map((functionName, i) => {\n      const callData = viem.encodeFunctionData({\n        abi,\n        functionName,\n        args: functionParams ? functionParams[i] : []\n      });\n      return {\n        target: address,\n        callData,\n        gasLimit: BigInt(gasLimitPerCall)\n      };\n    });\n    const { results: result, blockNumber } = await multicall.multicallByGasLimit(calls, {\n      gasLimit: additionalConfig?.gasLimit,\n      gasBuffer: additionalConfig?.gasBuffer,\n      dropUnexecutedCalls: additionalConfig?.dropUnexecutedCalls,\n      chainId: this.chainId,\n      client: this.provider,\n      signal: additionalConfig?.signal\n    });\n    const results = [];\n    const gasUsedForSuccess = [];\n    const gasUsedForFail = [];\n    for (const [i, { result: callResult, success, gasUsed }] of result.entries()) {\n      if (callResult === \"0x\" || !success) {\n        results.push({\n          success: false,\n          returnData: callResult\n        });\n        gasUsedForFail.push(Number(gasUsed));\n        continue;\n      }\n      try {\n        results.push({\n          success: true,\n          result: viem.decodeFunctionResult({\n            abi,\n            functionName: functionNames[i],\n            data: callResult\n          })\n        });\n        gasUsedForSuccess.push(Number(gasUsed));\n      } catch (e) {\n        results.push({\n          success: false,\n          returnData: callResult\n        });\n      }\n    }\n    return {\n      blockNumber,\n      results,\n      approxGasUsedPerSuccessCall: stats__default.default.percentile(gasUsedForSuccess, 99),\n      approxGasUsedPerFailCall: stats__default.default.percentile(gasUsedForFail, 99)\n    };\n  }\n};\nPancakeMulticallProvider.abi = InterfaceMulticall_default;\n\n// evm/v3-router/providers/onChainQuoteProvider.ts\nvar DEFAULT_BATCH_RETRIES = 2;\nvar SUCCESS_RATE_CONFIG = {\n  [chains.ChainId.BSC_TESTNET]: 0.1,\n  [chains.ChainId.BSC]: 0.1,\n  [chains.ChainId.ETHEREUM]: 0.1,\n  [chains.ChainId.GOERLI]: 0.1,\n  [chains.ChainId.ARBITRUM_ONE]: 0.1,\n  [chains.ChainId.ARBITRUM_GOERLI]: 0.1,\n  [chains.ChainId.POLYGON_ZKEVM]: 0.01,\n  [chains.ChainId.POLYGON_ZKEVM_TESTNET]: 0,\n  [chains.ChainId.ZKSYNC]: 0.2,\n  [chains.ChainId.ZKSYNC_TESTNET]: 0.1,\n  [chains.ChainId.LINEA]: 0.1,\n  [chains.ChainId.LINEA_TESTNET]: 0.1,\n  [chains.ChainId.OPBNB]: 0.1,\n  [chains.ChainId.OPBNB_TESTNET]: 0.1,\n  [chains.ChainId.BASE]: 0.1,\n  [chains.ChainId.BASE_TESTNET]: 0.1,\n  [chains.ChainId.SCROLL_SEPOLIA]: 0.1,\n  [chains.ChainId.SEPOLIA]: 0.1,\n  [chains.ChainId.ARBITRUM_SEPOLIA]: 0.1,\n  [chains.ChainId.BASE_SEPOLIA]: 0.1,\n  [chains.ChainId.MONAD_TESTNET]: 0.1\n};\nvar BlockConflictError = class extends Error {\n  constructor() {\n    super(...arguments);\n    this.name = \"BlockConflictError\";\n  }\n};\nvar SuccessRateError = class extends Error {\n  constructor() {\n    super(...arguments);\n    this.name = \"SuccessRateError\";\n  }\n};\nvar ProviderBlockHeaderError = class extends Error {\n  constructor() {\n    super(...arguments);\n    this.name = \"ProviderBlockHeaderError\";\n  }\n};\nvar ProviderTimeoutError = class extends Error {\n  constructor() {\n    super(...arguments);\n    this.name = \"ProviderTimeoutError\";\n  }\n};\nvar ProviderGasError = class extends Error {\n  constructor() {\n    super(...arguments);\n    this.name = \"ProviderGasError\";\n  }\n};\nvar retryControllerFactory = ({ retries }) => {\n  const errors = [];\n  let remainingRetries = retries || 0;\n  return {\n    shouldRetry: (error) => !isAbortError(error) && remainingRetries > 0 && errors.every((err) => err.name !== error.name),\n    onRetry: (error) => {\n      errors.push(error);\n      remainingRetries -= 1;\n    },\n    getErrorsOnPreviousRetries: () => errors\n  };\n};\nvar defaultAdjustQuoteForGas = ({ isExactIn, quote, gasCostInToken }) => isExactIn ? quote.subtract(gasCostInToken) : quote.add(gasCostInToken);\nfunction onChainQuoteProviderFactory({ getQuoteFunctionName, getQuoterAddress, abi, getCallInputs }) {\n  return function createOnChainQuoteProvider({\n    onChainProvider,\n    gasLimit,\n    multicallConfigs: multicallConfigsOverride,\n    onAdjustQuoteForGas = defaultAdjustQuoteForGas,\n    account\n  }) {\n    const createGetRoutesWithQuotes = (isExactIn = true) => {\n      const functionName = getQuoteFunctionName(isExactIn);\n      const adjustQuoteForGas = ({ quote, gasCostInToken }) => onAdjustQuoteForGas({ quote, gasCostInToken, isExactIn });\n      return async function getRoutesWithQuote(routes, { blockNumber: blockNumberFromConfig, gasModel, retry: retryOptions, signal, quoteId }) {\n        const logger3 = RemoteLogger.getLogger(quoteId);\n        if (!routes.length) {\n          return [];\n        }\n        const {\n          amount: {\n            currency: { chainId }\n          }\n        } = routes[0];\n        const quoterAddress = getQuoterAddress(chainId);\n        const minSuccessRate = SUCCESS_RATE_CONFIG[chainId];\n        const multicallConfigs = multicallConfigsOverride?.[chainId] || chunkGYU5FW7D_js.BATCH_MULTICALL_CONFIGS[chainId] || chunkGYU5FW7D_js.BATCH_MULTICALL_CONFIGS[chains.ChainId.ETHEREUM];\n        const {\n          defaultConfig: { gasLimitPerCall: defaultGasLimitPerCall, dropUnexecutedCalls }\n        } = multicallConfigs;\n        const chainProvider = onChainProvider({ chainId });\n        const providerConfig = { blockNumber: blockNumberFromConfig };\n        const multicall2Provider = new PancakeMulticallProvider(chainId, chainProvider, defaultGasLimitPerCall);\n        const inputs = routes.map((route) => getCallInputs(route, isExactIn));\n        logger3.debug(`Try quoter with Inputs: ${inputs.length}`, 3);\n        logger3.debug(`:${quoterAddress} ${functionName}`, 3);\n        logger3.debugJson(inputs[0], 3);\n        const retryOptionsWithDefault = {\n          retries: DEFAULT_BATCH_RETRIES,\n          minTimeout: 25,\n          maxTimeout: 250,\n          ...retryOptions\n        };\n        const { shouldRetry, onRetry } = retryControllerFactory(retryOptionsWithDefault);\n        async function getQuotes({ gasLimitPerCall }) {\n          try {\n            const { results, blockNumber, approxGasUsedPerSuccessCall } = await multicall2Provider.callSameFunctionOnContractWithMultipleParams({\n              address: quoterAddress,\n              abi,\n              functionName,\n              functionParams: inputs,\n              providerConfig,\n              account,\n              additionalConfig: {\n                dropUnexecutedCalls,\n                gasLimitPerCall,\n                gasLimit,\n                signal\n              }\n            });\n            const successRateError = validateSuccessRate(results, minSuccessRate);\n            if (successRateError) {\n              throw successRateError;\n            }\n            return {\n              results,\n              blockNumber,\n              approxGasUsedPerSuccessCall\n            };\n          } catch (err) {\n            if (err instanceof SuccessRateError || err instanceof BlockConflictError || isAbortError(err)) {\n              throw err;\n            }\n            const slicedErrMsg = err.message.slice(0, 500);\n            if (err.message.includes(\"header not found\")) {\n              throw new ProviderBlockHeaderError(slicedErrMsg);\n            }\n            if (err.message.includes(\"timeout\")) {\n              throw new ProviderTimeoutError(`Request had ${inputs.length} inputs. ${slicedErrMsg}`);\n            }\n            if (err.message.includes(\"out of gas\")) {\n              throw new ProviderGasError(slicedErrMsg);\n            }\n            throw new Error(`Unknown error from provider: ${slicedErrMsg}`);\n          }\n        }\n        const quoteResult = await retry__default.default(async (bail) => {\n          try {\n            const quotes = await getQuotes({\n              gasLimitPerCall: defaultGasLimitPerCall\n            });\n            return quotes;\n          } catch (e) {\n            logger3.debug(`Error getting quotes: ${e}`, 2);\n            const error = e instanceof Error ? e : new Error(`Unexpected error type ${e}`);\n            if (!shouldRetry(error)) {\n              return bail(error);\n            }\n            if (error instanceof SuccessRateError) {\n              onRetry(error);\n              const { successRateFailureOverrides } = multicallConfigs;\n              return getQuotes({\n                gasLimitPerCall: successRateFailureOverrides.gasLimitPerCall\n              });\n            }\n            if (error instanceof ProviderGasError) {\n              onRetry(error);\n              const { gasErrorFailureOverride } = multicallConfigs;\n              return getQuotes({\n                gasLimitPerCall: gasErrorFailureOverride.gasLimitPerCall\n              });\n            }\n            throw error;\n          }\n        }, retryOptionsWithDefault);\n        if (!quoteResult) {\n          logger3.debug(`Empty quote result`, 2);\n          logger3.debugJson(quoteResult, 2);\n          throw new Error(`Unexpected empty quote result ${quoteResult}`);\n        }\n        const { results: quoteResults } = quoteResult;\n        const routesWithQuote = processQuoteResults(quoteResults, routes, gasModel, adjustQuoteForGas);\n        return routesWithQuote;\n      };\n    };\n    return {\n      getRouteWithQuotesExactIn: createGetRoutesWithQuotes(true),\n      getRouteWithQuotesExactOut: createGetRoutesWithQuotes(false)\n    };\n  };\n}\nfunction validateSuccessRate(allResults, quoteMinSuccessRate) {\n  const numResults = allResults.length;\n  const numSuccessResults = allResults.filter((result) => result.success).length;\n  const successRate = 1 * numSuccessResults / numResults;\n  if (successRate < quoteMinSuccessRate) {\n    return new SuccessRateError(`Quote success rate below threshold of ${quoteMinSuccessRate}: ${successRate}`);\n  }\n  return void 0;\n}\nfunction processQuoteResults(quoteResults, routes, gasModel, adjustQuoteForGas) {\n  const routesWithQuote = [];\n  for (let i = 0; i < quoteResults.length; i += 1) {\n    const route = routes[i];\n    const quoteResult = quoteResults[i];\n    if (!quoteResult) {\n      continue;\n    }\n    const { success } = quoteResult;\n    if (!success) {\n      continue;\n    }\n    const [quoteRaw] = quoteResult.result;\n    const initializedTickCrossedList = quoteResult.result.length === 4 ? quoteResult.result[2] : [];\n    const quoteCurrency = getQuoteCurrency(route, route.amount.currency);\n    const quote = swapSdkCore.CurrencyAmount.fromRawAmount(quoteCurrency, quoteRaw.toString());\n    const { gasEstimate, gasCostInToken, gasCostInUSD } = gasModel.estimateGasCost(\n      {\n        ...route,\n        quote\n      },\n      { initializedTickCrossedList }\n    );\n    routesWithQuote.push({\n      ...route,\n      quote,\n      quoteAdjustedForGas: adjustQuoteForGas({ quote, gasCostInToken }),\n      // sqrtPriceX96AfterList: quoteResult.result[1],\n      gasEstimate,\n      gasCostInToken,\n      gasCostInUSD\n    });\n  }\n  return routesWithQuote;\n}\nvar createMixedRouteOnChainQuoteProvider = onChainQuoteProviderFactory({\n  getQuoterAddress: (chainId) => chunkGYU5FW7D_js.MIXED_ROUTE_QUOTER_ADDRESSES[chainId],\n  getQuoteFunctionName: () => \"quoteExactInput\",\n  abi: mixedRouteQuoterV1ABI,\n  getCallInputs: (route, isExactIn) => [\n    encodeMixedRouteToPath(route, !isExactIn),\n    route.pools.map((pool) => {\n      if (isV3Pool(pool)) {\n        return 0;\n      }\n      if (isV2Pool(pool)) {\n        return 1;\n      }\n      if (isStablePool(pool)) {\n        if (pool.balances.length === 2) {\n          return 2;\n        }\n        if (pool.balances.length === 3) {\n          return 3;\n        }\n      }\n      return -1;\n    }).filter((index) => index >= 0),\n    `0x${route.amount.quotient.toString(16)}`\n  ]\n});\nvar createV3OnChainQuoteProvider = onChainQuoteProviderFactory({\n  getQuoterAddress: (chainId) => chunkGYU5FW7D_js.V3_QUOTER_ADDRESSES[chainId],\n  getQuoteFunctionName: (isExactIn) => isExactIn ? \"quoteExactInput\" : \"quoteExactOutput\",\n  abi: quoterV2ABI,\n  getCallInputs: (route, isExactIn) => [\n    encodeMixedRouteToPath(route, !isExactIn),\n    `0x${route.amount.quotient.toString(16)}`\n  ]\n});\nvar createInfinityClOnChainQuoteProvider = onChainQuoteProviderFactory({\n  getQuoterAddress: (chainId) => infinitySdk.INFI_CL_QUOTER_ADDRESSES[chainId],\n  getQuoteFunctionName: (isExactIn) => isExactIn ? \"quoteExactInput\" : \"quoteExactOutput\",\n  abi: clQuoterAbi,\n  getCallInputs: (route, isExactIn) => {\n    const firstPool = route.pools[isExactIn ? 0 : route.pools.length - 1];\n    const baseCurrency = swapSdkCore.getMatchedCurrency(isExactIn ? route.input : route.output, [\n      firstPool.currency0,\n      firstPool.currency1\n    ]);\n    if (!baseCurrency) {\n      throw new Error(\"CL_ONCHAIN_QUOTER_CALL_INPUTS: INVALID_POOL\");\n    }\n    const exactCurrency = swapSdkCore.getCurrencyAddress(baseCurrency);\n    return [\n      {\n        exactCurrency,\n        path: encodeInfinityRouteToPath(route, !isExactIn),\n        exactAmount: `0x${route.amount.quotient.toString(16)}`\n      }\n    ];\n  }\n});\nvar createMixedRouteOnChainQuoteProviderV2 = onChainQuoteProviderFactory({\n  getQuoterAddress: (chainId) => infinitySdk.INFI_MIXED_QUOTER_ADDRESSES[chainId],\n  getQuoteFunctionName: () => \"quoteMixedExactInput\",\n  abi: infinityMixedRouteQuoterAbi,\n  getCallInputs: (route) => [\n    encodeInfinityMixedRouteCurrencyPath(route),\n    encodeInfinityMixedRouteActions(route),\n    encodeInfinityMixedRouteParams(route),\n    `0x${route.amount.quotient.toString(16)}`\n  ]\n});\nvar createInfinityBinOnChainQuoteProvider = onChainQuoteProviderFactory({\n  getQuoterAddress: (chainId) => infinitySdk.INFI_BIN_QUOTER_ADDRESSES[chainId],\n  getQuoteFunctionName: (isExactIn) => isExactIn ? \"quoteExactInput\" : \"quoteExactOutput\",\n  abi: binQuoterAbi,\n  getCallInputs: (route, isExactIn) => {\n    const firstPool = route.pools[isExactIn ? 0 : route.pools.length - 1];\n    const baseCurrency = swapSdkCore.getMatchedCurrency(isExactIn ? route.input : route.output, [\n      firstPool.currency0,\n      firstPool.currency1\n    ]);\n    if (!baseCurrency) {\n      throw new Error(\"BIN_ONCHAIN_QUOTER_CALL_INPUTS: INVALID_POOL\");\n    }\n    const exactCurrency = swapSdkCore.getCurrencyAddress(baseCurrency);\n    return [\n      {\n        exactCurrency,\n        path: encodeInfinityRouteToPath(route, !isExactIn),\n        exactAmount: `0x${route.amount.quotient.toString(16)}`\n      }\n    ];\n  }\n});\n\n// evm/v3-router/providers/quoteProviders.ts\nfunction createQuoteProvider(config) {\n  const { onChainProvider, multicallConfigs, gasLimit, account } = config;\n  const offChainQuoteProvider = createOffChainQuoteProvider();\n  const mixedRouteOnChainQuoteProviderV1 = createMixedRouteOnChainQuoteProvider({\n    onChainProvider,\n    multicallConfigs,\n    gasLimit,\n    account\n  });\n  const mixedRouteOnChainQuoteProviderV2 = createMixedRouteOnChainQuoteProviderV2({\n    onChainProvider,\n    multicallConfigs,\n    gasLimit,\n    account\n  });\n  const v3OnChainQuoteProvider = createV3OnChainQuoteProvider({ onChainProvider, multicallConfigs, gasLimit, account });\n  const infinityClOnChainQuoteProvider = createInfinityClOnChainQuoteProvider({\n    onChainProvider,\n    multicallConfigs,\n    gasLimit,\n    account\n  });\n  const infinityBinOnChainQuoteProvider = createInfinityBinOnChainQuoteProvider({\n    onChainProvider,\n    multicallConfigs,\n    gasLimit,\n    account\n  });\n  const createGetRouteWithQuotes = (isExactIn = true) => {\n    const getOffChainQuotes = isExactIn ? offChainQuoteProvider.getRouteWithQuotesExactIn : offChainQuoteProvider.getRouteWithQuotesExactOut;\n    const getV3Quotes = isExactIn ? v3OnChainQuoteProvider.getRouteWithQuotesExactIn : v3OnChainQuoteProvider.getRouteWithQuotesExactOut;\n    const getInfinityClQuotes = isExactIn ? infinityClOnChainQuoteProvider.getRouteWithQuotesExactIn : infinityClOnChainQuoteProvider.getRouteWithQuotesExactOut;\n    const getInfinityBinQuotes = isExactIn ? infinityBinOnChainQuoteProvider.getRouteWithQuotesExactIn : infinityBinOnChainQuoteProvider.getRouteWithQuotesExactOut;\n    const createMixedRouteQuoteFetcher = (chainId) => {\n      const mixedRouteOnChainQuoteProvider = infinitySdk.INFINITY_SUPPORTED_CHAINS.includes(chainId) ? mixedRouteOnChainQuoteProviderV2 : mixedRouteOnChainQuoteProviderV1;\n      return isExactIn ? mixedRouteOnChainQuoteProvider.getRouteWithQuotesExactIn : mixedRouteOnChainQuoteProvider.getRouteWithQuotesExactOut;\n    };\n    return async function getRoutesWithQuotes(routes, { blockNumber, gasModel, signal, quoteId }) {\n      const { chainId } = routes[0]?.input || {};\n      const getMixedRouteQuotes = createMixedRouteQuoteFetcher(chainId);\n      const infinityClRoutes = [];\n      const infinityBinRoutes = [];\n      const v3SingleHopRoutes = [];\n      const v3MultihopRoutes = [];\n      const mixedRoutesHaveV3Pool = [];\n      const routesCanQuoteOffChain = [];\n      for (const route of routes) {\n        if (route.type === 0 /* V2 */ || route.type === 2 /* STABLE */) {\n          routesCanQuoteOffChain.push(route);\n          continue;\n        }\n        if (route.type === 1 /* V3 */) {\n          if (route.pools.length === 1) {\n            v3SingleHopRoutes.push(route);\n            continue;\n          }\n          v3MultihopRoutes.push(route);\n          continue;\n        }\n        if (route.type === 5 /* InfinityCL */) {\n          if (isExactIn) {\n            mixedRoutesHaveV3Pool.push(route);\n            continue;\n          }\n          infinityClRoutes.push(route);\n          continue;\n        }\n        if (route.type === 6 /* InfinityBIN */) {\n          if (isExactIn) {\n            mixedRoutesHaveV3Pool.push(route);\n            continue;\n          }\n          infinityBinRoutes.push(route);\n          continue;\n        }\n        const { pools } = route;\n        if (pools.some((pool) => isV3Pool(pool) || isInfinityClPool(pool) || isInfinityBinPool(pool))) {\n          mixedRoutesHaveV3Pool.push(route);\n          continue;\n        }\n        routesCanQuoteOffChain.push(route);\n      }\n      logQuoters(\n        quoteId,\n        routesCanQuoteOffChain,\n        mixedRoutesHaveV3Pool,\n        v3SingleHopRoutes,\n        v3MultihopRoutes,\n        infinityClRoutes,\n        infinityBinRoutes\n      );\n      const results = await Promise.allSettled([\n        getOffChainQuotes(routesCanQuoteOffChain, { blockNumber, gasModel, signal, quoteId }),\n        getMixedRouteQuotes(mixedRoutesHaveV3Pool, { blockNumber, gasModel, retry: { retries: 0 }, signal, quoteId }),\n        getV3Quotes(v3SingleHopRoutes, { blockNumber, gasModel, signal, quoteId }),\n        getV3Quotes(v3MultihopRoutes, { blockNumber, gasModel, retry: { retries: 1 }, signal, quoteId }),\n        getInfinityClQuotes(infinityClRoutes, { blockNumber, gasModel, signal, quoteId }),\n        getInfinityBinQuotes(infinityBinRoutes, { blockNumber, gasModel, signal, quoteId })\n      ]);\n      if (results.every((result) => result.status === \"rejected\")) {\n        throw new Error(results.map((result) => result.reason).join(\",\"));\n      }\n      return results.filter((result) => result.status === \"fulfilled\").reduce((acc, cur) => [...acc, ...cur.value], []);\n    };\n  };\n  return {\n    getRouteWithQuotesExactIn: createGetRouteWithQuotes(true),\n    getRouteWithQuotesExactOut: createGetRouteWithQuotes(false),\n    getConfig: () => config\n  };\n}\nfunction logQuoters(quoteId, routesCanQuoteOffChain, mixedRoutesHaveV3Pool, v3SingleHopRoutes, v3MultihopRoutes, infinityClRoutes, infinityBinRoutes) {\n  const logger3 = RemoteLogger.getLogger(quoteId);\n  if (routesCanQuoteOffChain.length) {\n    logger3.debug(`try getOffChainQuotes=${routesCanQuoteOffChain.length}`, 2);\n  }\n  if (mixedRoutesHaveV3Pool.length) {\n    logger3.debug(`try getMixedRouteQuotes=${mixedRoutesHaveV3Pool.length}`, 2);\n  }\n  if (v3SingleHopRoutes.length) {\n    logger3.debug(`try getV3Quotes=${v3SingleHopRoutes.length}`, 2);\n  }\n  if (v3MultihopRoutes.length) {\n    logger3.debug(`try getV3Quotes=${v3MultihopRoutes.length}`, 2);\n  }\n  if (infinityClRoutes.length) {\n    logger3.debug(`try getInfinityClQuotes=${infinityClRoutes.length}`, 2);\n  }\n  if (infinityBinRoutes.length) {\n    logger3.debug(`try getInfinityBinQuotes=${infinityBinRoutes.length}`, 2);\n  }\n}\n\n// evm/infinity-router/constants/v3PoolFetchGasLimit.ts\nvar DEFAULT_FETCH_CONFIG = {\n  gasLimit: 3000000n,\n  retryGasMultiplier: 2\n};\nvar INFI_BIN_POOL_FETCH_CONFIG = {\n  gasLimit: 300000n,\n  retryGasMultiplier: 2\n};\nvar V3_POOL_FETCH_CONFIG = {};\nvar INFI_POOL_FETCH_CONFIG = {};\nfunction getV3PoolFetchConfig(chainId) {\n  return V3_POOL_FETCH_CONFIG[chainId] || DEFAULT_FETCH_CONFIG;\n}\nfunction getInfinityPoolFetchConfig(chainId) {\n  return INFI_POOL_FETCH_CONFIG[chainId] || INFI_BIN_POOL_FETCH_CONFIG;\n}\n\n// evm/infinity-router/queries/getInfinityBinPools.ts\nasync function getInfinityBinCandidatePools({\n  currencyA,\n  currencyB,\n  clientProvider,\n  gasLimit\n}) {\n  const pools = await getInfinityBinCandidatePoolsWithoutBins({\n    currencyA,\n    currencyB,\n    clientProvider\n  });\n  if (!pools.length) {\n    return [];\n  }\n  return fillPoolsWithBins({\n    pools,\n    clientProvider,\n    gasLimit\n  });\n}\nasync function getInfinityBinCandidatePoolsWithoutBins({\n  currencyA,\n  currencyB,\n  clientProvider\n}) {\n  if (!currencyA || !currencyB) {\n    throw new Error(`Invalid currencyA ${currencyA} or currencyB ${currencyB}`);\n  }\n  const native = sdk.Native.onChain(currencyA?.chainId);\n  const wnative = native.wrapped;\n  const pairs = await getPairCombinations(currencyA, currencyB);\n  const pairsWithNative = [...pairs];\n  for (const pair of pairs) {\n    const index = pair.findIndex((c) => c.wrapped.equals(wnative));\n    if (index >= 0) {\n      const pairWithNative = [...pair];\n      pairWithNative[index] = native;\n      pairsWithNative.push(pairWithNative);\n    }\n  }\n  return getInfinityBinPoolsWithoutBins(pairsWithNative, clientProvider);\n}\nvar getInfinityBinPoolsWithoutBins = createOnChainPoolFactory({\n  abi: infinitySdk.BinPoolManagerAbi,\n  getPossiblePoolMetas: async ([currencyA, currencyB]) => {\n    const { chainId } = currencyA;\n    if (!infinitySdk.isInfinitySupported(chainId))\n      throw new Error(`Failed to get bin pools. Infinity not supported on chain ${chainId}`);\n    const [currency0, currency1] = swapSdkCore.sortCurrencies([currencyA, currencyB]);\n    const poolIdList = /* @__PURE__ */ new Set();\n    const metas = [];\n    const binPresets = chunkGYU5FW7D_js.BIN_PRESETS_BY_CHAIN[chainId];\n    for (const { fee, binStep } of binPresets) {\n      const hookPresets = chunkGYU5FW7D_js.BIN_HOOK_PRESETS_BY_CHAIN[chainId];\n      for (const { address: hooks, registrationBitmap, poolKeyOverride } of hookPresets) {\n        const poolKey = {\n          currency0: swapSdkCore.getCurrencyAddress(currency0),\n          currency1: swapSdkCore.getCurrencyAddress(currency1),\n          fee,\n          parameters: {\n            binStep,\n            hooksRegistration: registrationBitmap !== void 0 ? infinitySdk.decodeHooksRegistration(registrationBitmap) : void 0\n          },\n          poolManager: infinitySdk.INFI_BIN_POOL_MANAGER_ADDRESSES[chainId],\n          hooks,\n          ...poolKeyOverride ?? {}\n        };\n        const id = infinitySdk.getPoolId(poolKey);\n        if (poolIdList.has(id)) {\n          continue;\n        }\n        poolIdList.add(id);\n        metas.push({\n          currencyA,\n          currencyB,\n          fee,\n          binStep,\n          hooks,\n          poolManager: poolKey.poolManager,\n          id,\n          hooksRegistrationBitmap: registrationBitmap,\n          ...poolKeyOverride\n        });\n      }\n    }\n    return metas;\n  },\n  buildPoolInfoCalls: ({ id, poolManager: address }) => [\n    {\n      address,\n      functionName: \"getSlot0\",\n      args: [id]\n    }\n  ],\n  buildPool: ({ currencyA, currencyB, id, binStep, poolManager, hooks, hooksRegistrationBitmap }, [slot0]) => {\n    if (!slot0 || !slot0[0]) {\n      return null;\n    }\n    const [activeId, protocolFee, lpFee] = slot0;\n    const [currency0, currency1] = swapSdkCore.sortCurrencies([currencyA, currencyB]);\n    return {\n      id,\n      type: 4 /* InfinityBIN */,\n      currency0,\n      currency1,\n      fee: lpFee,\n      protocolFee,\n      activeId,\n      binStep,\n      poolManager,\n      hooks,\n      hooksRegistrationBitmap\n    };\n  }\n});\nfunction getBinIdList({\n  activeId,\n  binStep,\n  priceRange,\n  ...rest\n}) {\n  const price = infinitySdk.getPriceFromId(activeId, binStep);\n  const [idLower, idUpper] = [\n    infinitySdk.getIdFromPrice(price * (1 - priceRange), binStep),\n    infinitySdk.getIdFromPrice(price * (1 + priceRange), binStep)\n  ];\n  const binIds = [];\n  for (let i = idLower; i <= idUpper; i += 1) {\n    binIds.push({\n      ...rest,\n      binId: i\n    });\n  }\n  return binIds;\n}\nasync function fillPoolsWithBins({\n  pools,\n  clientProvider,\n  gasLimit,\n  priceRange = 0.05\n}) {\n  if (!pools.length) {\n    return [];\n  }\n  const chainId = pools[0]?.currency0.chainId;\n  const client = clientProvider?.({ chainId });\n  if (!client) {\n    throw new Error(\"Fill pools with ticks failed. No valid public client or tick lens found.\");\n  }\n  const { gasLimit: gasLimitPerCall, retryGasMultiplier } = getInfinityPoolFetchConfig(chainId);\n  const binIds = pools.map(\n    ({ binStep, activeId }, i) => getBinIdList({ activeId, binStep, poolIndex: i, priceRange })\n  ).reduce((acc, cur) => {\n    acc.push(...cur);\n    return acc;\n  }, []);\n  const res = await multicall.multicallByGasLimit(\n    binIds.map(({ poolIndex, binId }) => ({\n      target: pools[poolIndex].poolManager,\n      callData: viem.encodeFunctionData({\n        abi: infinitySdk.BinPoolManagerAbi,\n        args: [pools[poolIndex].id, binId],\n        functionName: \"getBin\"\n      }),\n      gasLimit: gasLimitPerCall / 20n\n      // get Bin is small\n    })),\n    {\n      chainId,\n      client,\n      gasLimit,\n      retryFailedCallsWithGreaterLimit: {\n        gasLimitMultiplier: retryGasMultiplier\n      }\n    }\n  );\n  const poolsWithBins = pools.map((p) => ({ ...p }));\n  for (const [index, result] of res.results.entries()) {\n    const { poolIndex, binId } = binIds[index];\n    const pool = poolsWithBins[poolIndex];\n    const data = result.success ? viem.decodeFunctionResult({\n      abi: infinitySdk.BinPoolManagerAbi,\n      functionName: \"getBin\",\n      data: result.result\n    }) : void 0;\n    if (!data) {\n      continue;\n    }\n    const [reserveX, reserveY] = data;\n    if (reserveX === 0n && reserveY === 0n) {\n      continue;\n    }\n    const binReserve = {\n      reserveX,\n      reserveY\n    };\n    if (!pool.reserveOfBin) {\n      pool.reserveOfBin = {\n        [binId]: binReserve\n      };\n      continue;\n    }\n    pool.reserveOfBin[binId] = binReserve;\n  }\n  return poolsWithBins.filter((p) => p.reserveOfBin);\n}\n\n// evm/abis/IInfinityCLTickLens.ts\nvar infinityCLTickLensAbi = [\n  {\n    type: \"constructor\",\n    inputs: [{ name: \"_poolManager\", type: \"address\", internalType: \"contract ICLPoolManager\" }],\n    stateMutability: \"nonpayable\"\n  },\n  {\n    type: \"function\",\n    name: \"getPopulatedTicksInWord\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"tuple\",\n        internalType: \"struct PoolKey\",\n        components: [\n          { name: \"currency0\", type: \"address\", internalType: \"Currency\" },\n          { name: \"currency1\", type: \"address\", internalType: \"Currency\" },\n          { name: \"hooks\", type: \"address\", internalType: \"contract IHooks\" },\n          { name: \"poolManager\", type: \"address\", internalType: \"contract IPoolManager\" },\n          { name: \"fee\", type: \"uint24\", internalType: \"uint24\" },\n          { name: \"parameters\", type: \"bytes32\", internalType: \"bytes32\" }\n        ]\n      },\n      { name: \"tickBitmapIndex\", type: \"int16\", internalType: \"int16\" }\n    ],\n    outputs: [\n      {\n        name: \"populatedTicks\",\n        type: \"tuple[]\",\n        internalType: \"struct ITickLens.PopulatedTick[]\",\n        components: [\n          { name: \"tick\", type: \"int24\", internalType: \"int24\" },\n          { name: \"liquidityNet\", type: \"int128\", internalType: \"int128\" },\n          { name: \"liquidityGross\", type: \"uint128\", internalType: \"uint128\" }\n        ]\n      }\n    ],\n    stateMutability: \"view\"\n  },\n  {\n    type: \"function\",\n    name: \"getPopulatedTicksInWord\",\n    inputs: [\n      { name: \"id\", type: \"bytes32\", internalType: \"PoolId\" },\n      { name: \"tickBitmapIndex\", type: \"int16\", internalType: \"int16\" }\n    ],\n    outputs: [\n      {\n        name: \"populatedTicks\",\n        type: \"tuple[]\",\n        internalType: \"struct ITickLens.PopulatedTick[]\",\n        components: [\n          { name: \"tick\", type: \"int24\", internalType: \"int24\" },\n          { name: \"liquidityNet\", type: \"int128\", internalType: \"int128\" },\n          { name: \"liquidityGross\", type: \"uint128\", internalType: \"uint128\" }\n        ]\n      }\n    ],\n    stateMutability: \"view\"\n  },\n  {\n    type: \"function\",\n    name: \"poolManager\",\n    inputs: [],\n    outputs: [{ name: \"\", type: \"address\", internalType: \"contract ICLPoolManager\" }],\n    stateMutability: \"view\"\n  },\n  { type: \"error\", name: \"PoolNotInitialized\", inputs: [] }\n];\n\n// evm/infinity-router/queries/getInfinityClPools.ts\nasync function getInfinityClCandidatePools({\n  currencyA,\n  currencyB,\n  clientProvider,\n  gasLimit\n}) {\n  const pools = await getInfinityClCandidatePoolsWithoutTicks({\n    currencyA,\n    currencyB,\n    clientProvider\n  });\n  return fillClPoolsWithTicks({\n    pools,\n    clientProvider,\n    gasLimit\n  });\n}\nasync function getInfinityClCandidatePoolsWithoutTicks({\n  currencyA,\n  currencyB,\n  clientProvider\n}) {\n  if (!currencyA || !currencyB) {\n    throw new Error(`Invalid currencyA ${currencyA} or currencyB ${currencyB}`);\n  }\n  const native = sdk.Native.onChain(currencyA?.chainId);\n  const wnative = native.wrapped;\n  const pairs = await getPairCombinations(currencyA, currencyB);\n  const pairsWithNative = [...pairs];\n  for (const pair of pairs) {\n    const index = pair.findIndex((c) => c.wrapped.equals(wnative));\n    if (index >= 0) {\n      const pairWithNative = [...pair];\n      pairWithNative[index] = native;\n      pairsWithNative.push(pairWithNative);\n    }\n  }\n  return getInfinityClPoolsWithoutTicks(pairsWithNative, clientProvider);\n}\nvar getInfinityClPoolsWithoutTicks = createOnChainPoolFactory({\n  abi: infinitySdk.CLPoolManagerAbi,\n  getPossiblePoolMetas: async ([currencyA, currencyB]) => {\n    const { chainId } = currencyA;\n    if (!infinitySdk.isInfinitySupported(chainId))\n      throw new Error(`Failed to get cl pools. Infinity not supported on chain ${chainId}`);\n    const [currency0, currency1] = swapSdkCore.sortCurrencies([currencyA, currencyB]);\n    const poolIdList = /* @__PURE__ */ new Set();\n    const metas = [];\n    const presets = chunkGYU5FW7D_js.CL_PRESETS_BY_CHAIN[chainId];\n    const hookPresets = chunkGYU5FW7D_js.CL_HOOK_PRESETS_BY_CHAIN[chainId];\n    for (const { fee, tickSpacing } of presets) {\n      for (const { address: hooks, registrationBitmap, poolKeyOverride } of hookPresets) {\n        const poolKey = {\n          currency0: swapSdkCore.getCurrencyAddress(currency0),\n          currency1: swapSdkCore.getCurrencyAddress(currency1),\n          fee,\n          parameters: {\n            tickSpacing,\n            hooksRegistration: registrationBitmap !== void 0 ? infinitySdk.decodeHooksRegistration(registrationBitmap) : void 0\n          },\n          poolManager: infinitySdk.INFI_CL_POOL_MANAGER_ADDRESSES[chainId],\n          hooks,\n          ...poolKeyOverride ?? {}\n        };\n        const id = infinitySdk.getPoolId(poolKey);\n        if (poolIdList.has(id)) {\n          continue;\n        }\n        poolIdList.add(id);\n        metas.push({\n          currencyA,\n          currencyB,\n          fee,\n          tickSpacing,\n          hooks,\n          poolManager: poolKey.poolManager,\n          id,\n          hooksRegistrationBitmap: registrationBitmap,\n          ...poolKeyOverride\n        });\n      }\n    }\n    return metas;\n  },\n  buildPoolInfoCalls: ({ id, poolManager: address }) => [\n    {\n      address,\n      functionName: \"getLiquidity\",\n      args: [id]\n    },\n    {\n      address,\n      functionName: \"getSlot0\",\n      args: [id]\n    }\n  ],\n  buildPool: ({ currencyA, currencyB, id, tickSpacing, poolManager, hooks, hooksRegistrationBitmap }, [liquidity, slot0]) => {\n    if (!slot0 || !slot0[0]) {\n      return null;\n    }\n    const [sqrtPriceX96, tick, protocolFee, lpFee] = slot0;\n    const [currency0, currency1] = swapSdkCore.sortCurrencies([currencyA, currencyB]);\n    const whitelistHook = infinitySdk.findHook(hooks, currencyA.wrapped.chainId);\n    return {\n      id,\n      type: 3 /* InfinityCL */,\n      currency0,\n      currency1,\n      fee: whitelistHook?.defaultFee ?? lpFee,\n      protocolFee,\n      liquidity: BigInt(liquidity.toString()),\n      sqrtRatioX96: BigInt(sqrtPriceX96.toString()),\n      tick: Number(tick),\n      tickSpacing,\n      poolManager,\n      hooks,\n      hooksRegistrationBitmap\n    };\n  }\n});\nfunction getBitmapIndex(tick, tickSpacing) {\n  return Math.floor(tick / tickSpacing / 256);\n}\nfunction createBitmapIndexListBuilder(tickRange) {\n  return function buildBitmapIndexList3({ currentTick, tickSpacing, ...rest }) {\n    const minIndex = getBitmapIndex(currentTick - tickRange, tickSpacing);\n    const maxIndex = getBitmapIndex(currentTick + tickRange, tickSpacing);\n    return Array.from(Array(maxIndex - minIndex + 1), (_, i) => ({\n      bitmapIndex: minIndex + i,\n      ...rest\n    }));\n  };\n}\nvar buildBitmapIndexList = createBitmapIndexListBuilder(10);\nasync function fillClPoolsWithTicks({\n  pools,\n  clientProvider,\n  gasLimit\n}) {\n  if (pools.length === 0) {\n    return [];\n  }\n  const chainId = pools[0]?.currency0.chainId;\n  const tickLensAddress = infinitySdk.INFI_CL_TICK_LENS_ADDRESSES[chainId];\n  const client = clientProvider?.({ chainId });\n  if (!client || !tickLensAddress) {\n    throw new Error(\"Fill pools with ticks failed. No valid public client or tick lens found.\");\n  }\n  const { gasLimit: gasLimitPerCall, retryGasMultiplier } = getV3PoolFetchConfig(chainId);\n  const bitmapIndexes = pools.map(\n    ({ tick, tickSpacing }, i) => buildBitmapIndexList({ currentTick: tick, tickSpacing, poolIndex: i })\n  ).reduce((acc, cur) => {\n    acc.push(...cur);\n    return acc;\n  }, []);\n  const res = await multicall.multicallByGasLimit(\n    bitmapIndexes.map(({ poolIndex, bitmapIndex }) => ({\n      target: tickLensAddress,\n      callData: viem.encodeFunctionData({\n        abi: infinityCLTickLensAbi,\n        args: [pools[poolIndex].id, bitmapIndex],\n        functionName: \"getPopulatedTicksInWord\"\n      }),\n      gasLimit: gasLimitPerCall\n    })),\n    {\n      chainId,\n      client,\n      gasLimit,\n      retryFailedCallsWithGreaterLimit: {\n        gasLimitMultiplier: retryGasMultiplier\n      }\n    }\n  );\n  const poolsWithTicks = pools.map((p) => ({ ...p }));\n  for (const [index, result] of res.results.entries()) {\n    const { poolIndex } = bitmapIndexes[index];\n    const pool = poolsWithTicks[poolIndex];\n    const data = result.success ? viem.decodeFunctionResult({\n      abi: infinityCLTickLensAbi,\n      functionName: \"getPopulatedTicksInWord\",\n      data: result.result\n    }) : void 0;\n    const newTicks = data?.map(\n      ({ tick, liquidityNet, liquidityGross }) => new v3Sdk.Tick({\n        index: tick,\n        liquidityNet,\n        liquidityGross\n      })\n    ).reverse();\n    if (!newTicks) {\n      continue;\n    }\n    pool.ticks = [...pool.ticks || [], ...newTicks];\n  }\n  return poolsWithTicks.filter((p) => p.ticks?.length);\n}\n\n// ../utils/lru.ts\nvar LRU = class {\n  constructor({ maxSize = 1e3, maxAge = 0 }) {\n    this.map = /* @__PURE__ */ new Map();\n    this.maxSize = maxSize;\n    this.maxAge = maxAge;\n  }\n  has(key) {\n    return this.get(key) !== void 0;\n  }\n  get(key) {\n    const entry = this.map.get(key);\n    if (!entry)\n      return void 0;\n    if (this.maxAge > 0 && Date.now() - entry.createTime > this.maxAge) {\n      this.map.delete(key);\n      return void 0;\n    }\n    this.map.delete(key);\n    this.map.set(key, entry);\n    return entry.value;\n  }\n  set(key, value) {\n    const entry = {\n      value,\n      createTime: Date.now()\n    };\n    if (this.map.has(key)) {\n      this.map.delete(key);\n    }\n    this.map.set(key, entry);\n    if (this.map.size > this.maxSize) {\n      const oldestKey = this.map.keys().next().value;\n      if (!oldestKey) {\n        return;\n      }\n      this.map.delete(oldestKey);\n    }\n  }\n  delete(key) {\n    this.map.delete(key);\n  }\n  clear() {\n    this.map.clear();\n  }\n  get size() {\n    return this.map.size;\n  }\n};\n\n// ../utils/promise.ts\nasync function takeFirstFulfilled(promises) {\n  const errors = [];\n  return new Promise((resolve, reject) => {\n    let rejectionCount = 0;\n    promises.forEach(async (promise, index) => {\n      try {\n        const result = await promise;\n        resolve({\n          result,\n          index\n        });\n      } catch (err) {\n        errors[index] = err;\n        rejectionCount++;\n        if (rejectionCount === promises.length) {\n          const msgs = `${errors.map((x) => x.toString()).join(\"\\n\\n\")}`;\n          reject(new Error(`All promises were rejected: ${msgs}`));\n        }\n      }\n    });\n  });\n}\n\n// ../utils/cacheByLRU.ts\nfunction defaultIsValid(val) {\n  if (typeof val === \"undefined\" || val === \"\") {\n    return false;\n  }\n  if (Array.isArray(val)) {\n    return val.length > 0;\n  }\n  if (typeof val === \"object\") {\n    return Object.keys(val).length > 0;\n  }\n  return true;\n}\nfunction calcCacheKey(args, epoch) {\n  const json = viem.stringify(args);\n  const r = viem.keccak256(`0x${json}@${epoch}`);\n  return r;\n}\nvar DAY = 24 * 60 * 60 * 1e3;\nfunction persistKey(cacheKey, persist) {\n  const bucket = Math.floor(Date.now() / DAY);\n  return `${bucket}/${persist.name}/${persist.version}/${cacheKey}`;\n}\nvar identity = (args) => args;\nvar cacheInstanceId = 1;\nvar cacheByLRU = (fn, {\n  ttl,\n  key,\n  maxCacheSize,\n  persist,\n  isValid,\n  maxAge,\n  rejectWhenNoCache,\n  usingStaleValue = true,\n  requestTimeout,\n  cacheNextEpochOnHalfTTS\n}) => {\n  cacheInstanceId++;\n  const cache = new LRU({\n    maxAge: Math.max(ttl * 2, maxAge || 0),\n    maxSize: maxCacheSize || 1e3\n  });\n  const fetchR2Cache = persist ? cacheByLRU(_fetchR2Cache, {\n    ttl\n  }) : void 0;\n  const keyFunction = key || identity;\n  async function ensurePersist(cacheKey, promise) {\n    if (fetchR2Cache && persist) {\n      const r2Promise = fetchR2Cache(persistKey(cacheKey, persist));\n      const { result: value } = await takeFirstFulfilled([r2Promise, promise]);\n      return value;\n    }\n    return promise;\n  }\n  const epochs = [];\n  const cachedFn = async (...args) => {\n    const epoch = Date.now() / ttl;\n    const epochId = Math.floor(epoch);\n    const contentCacheKey = calcCacheKey(keyFunction(args), 0);\n    const cacheForEpoch = (epochId2) => {\n      const cacheKey = calcCacheKey(keyFunction(args), epochId2);\n      if (cache.has(cacheKey)) {\n        return cache.get(cacheKey);\n      }\n      const caller = requestTimeout ? withTimeout2(fn, requestTimeout) : fn;\n      const promise = ensurePersist(cacheKey, caller(...args));\n      const item = {\n        promise,\n        resolved: void 0,\n        createTime: Date.now(),\n        epochId: epochId2\n      };\n      const epoch2 = {\n        createTime: item.createTime,\n        cacheKey,\n        contentCacheKey\n      };\n      epochs.push(epoch2);\n      cache.set(cacheKey, item);\n      item.promise = item.promise.then((result) => {\n        if (!result) {\n          cache.delete(cacheKey);\n          return result;\n        }\n        if (!(isValid || defaultIsValid)(result)) {\n          cache.delete(cacheKey);\n          return result;\n        }\n        item.resolved = result;\n        if (persist) {\n          const jsonResult = viem.stringify(result);\n          if (result && jsonResult !== \"{}\" && jsonResult !== \"[]\") {\n            const pkey = persistKey(cacheKey, persist);\n            uploadR2(pkey, result).then((updated) => {\n              if (updated) {\n                console.log(`[persist] cache succ: https://proofs.pancakeswap.com/cache/${pkey}, ${cacheKey}`);\n              }\n            }).catch((ex) => {\n              console.error(`[persist] Failed to persist cache cache-size=${jsonResult.length}`, ex);\n            });\n          }\n        }\n        return result;\n      }).catch((error) => {\n        console.error(\"Cache promise failed\", error);\n        cache.delete(cacheKey);\n        throw error;\n      });\n      return item;\n    };\n    const current = cacheForEpoch(epochId);\n    if (cacheNextEpochOnHalfTTS) {\n      const next = epochId + 1;\n      const exceedHalfTTS = epoch - epochId > 0.5;\n      if (exceedHalfTTS) {\n        cacheForEpoch(next);\n      }\n    }\n    if (current.resolved) {\n      return current.promise;\n    }\n    if (usingStaleValue) {\n      for (let i = epochs.length - 2; i >= 0; i--) {\n        const epoch2 = epochs[i];\n        if (maxAge && epoch2.createTime + maxAge < Date.now()) {\n          continue;\n        }\n        if (epoch2.contentCacheKey !== contentCacheKey) {\n          continue;\n        }\n        const epochCache = cache.get(epoch2.cacheKey);\n        if (epochCache && epochCache.resolved) {\n          return epochCache.promise;\n        }\n      }\n    }\n    if (rejectWhenNoCache) {\n      throw new Error(\n        `No cache found: total=${epochs.length}, current=${current.epochId},  cacheInstanceId=${cacheInstanceId}`\n      );\n    }\n    return current.promise;\n  };\n  return cachedFn;\n};\nasync function existsR2(key) {\n  try {\n    const resp = await fetch(`https://obj-cache.pancakeswap.com/cache/${key}`, {\n      method: \"HEAD\"\n    });\n    return resp.ok;\n  } catch (ex) {\n    return false;\n  }\n}\nasync function uploadR2(key, value) {\n  if (!process.env.OBJECT_CACHE_SECRET) {\n    return false;\n  }\n  if (await existsR2(key)) {\n    return false;\n  }\n  await fetch(`https://obj-cache.pancakeswap.com`, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${process.env.OBJECT_CACHE_SECRET}`\n    },\n    body: JSON.stringify({ key, value })\n  });\n  return true;\n}\nasync function _fetchR2Cache(key) {\n  const resp = await fetch(`https://proofs.pancakeswap.com/cache/${key}`);\n  console.log(`[fetch] cache https://proofs.pancakeswap.com/cache/${key}`);\n  if (resp.ok) {\n    return resp.json();\n  }\n  throw new Error(`Failed to fetch cache`);\n}\nfunction withTimeout2(fn, ms) {\n  return async (...args) => {\n    let timer;\n    const timeoutPromise = new Promise((_, reject) => {\n      timer = setTimeout(() => {\n        reject(new Error(`Operation timed out after ${ms}ms`));\n      }, ms);\n    });\n    try {\n      return await Promise.race([fn(...args), timeoutPromise]);\n    } finally {\n      clearTimeout(timer);\n    }\n  };\n}\nvar fetchAllPoolsTVL = cacheByLRU(\n  async (chainId) => {\n    const chainName = chains.getChainName(chainId);\n    const url = `/api/infinity/pools?chain=${chainName}&protocol=infinityCl&protocol=infinityBin`;\n    const res = await fetch(url);\n    if (!res.ok) {\n      throw new Error(`Failed to get infinity pools tvl reference. ${res.statusText}`);\n    }\n    const resp = await res.json();\n    const refs = resp.data;\n    const map = {};\n    for (const ref of refs) {\n      map[ref.id] = ref;\n    }\n    return map;\n  },\n  {\n    ttl: 1e4,\n    maxCacheSize: 100\n  }\n);\nvar getInfinityTvlReference = (params) => {\n  return fetchAllPoolsTVL(params.currencyA.chainId);\n};\nvar getInfinityPoolTvl = (map, poolId) => {\n  const ref = map[poolId];\n  const tvlUsd = BigInt(ref ? ref.tvlUSD : 0n);\n  return tvlUsd;\n};\nfunction getValidToken(chainId, token) {\n  try {\n    const raw = {\n      address: viem.checksumAddress(token.id),\n      decimals: token.decimals,\n      symbol: token.symbol\n    };\n    return parseCurrency(chainId, raw);\n  } catch (ex) {\n    console.warn(\"invalid token\", token, ex);\n    throw ex;\n  }\n}\nfunction normalizeTvlUSD(tvlUSD) {\n  const val = Number(tvlUSD);\n  return Number.isFinite(val) ? Math.ceil(val).toString() : \"0\";\n}\nfunction toLocalInfinityPool(remote, chainId) {\n  const { id, protocol, feeTier, protocolFee, hookAddress, tvlUSD } = remote;\n  const type = protocol === \"infinityCl\" ? 3 /* InfinityCL */ : 4 /* InfinityBIN */;\n  const relatedHook = infinitySdk.hooksList[chainId].find((hook) => hook.address.toLowerCase() === hookAddress?.toLocaleLowerCase());\n  const currency0 = getValidToken(chainId, remote.token0);\n  const currency1 = getValidToken(chainId, remote.token1);\n  const bnTvlUsd = BigInt(normalizeTvlUSD(tvlUSD));\n  const pool = {\n    id: viem.checksumAddress(id),\n    type,\n    fee: feeTier,\n    protocolFee,\n    hooks: hookAddress ? viem.checksumAddress(hookAddress) : void 0,\n    hooksRegistrationBitmap: relatedHook ? infinitySdk.encodeHooksRegistration(relatedHook.hooksRegistration) : void 0,\n    poolManager: type === 3 /* InfinityCL */ ? infinitySdk.INFI_CL_POOL_MANAGER_ADDRESSES[chainId] : infinitySdk.INFI_BIN_POOL_MANAGER_ADDRESSES[chainId],\n    currency0,\n    currency1,\n    tvlUSD: bnTvlUsd\n  };\n  if (pool.type === 3 /* InfinityCL */) {\n    const remoteClPool = remote;\n    return {\n      ...pool,\n      type: 3 /* InfinityCL */,\n      liquidity: BigInt(remoteClPool.liquidity),\n      sqrtRatioX96: BigInt(remoteClPool.sqrtPrice),\n      tick: remoteClPool.tick,\n      ticks: remoteClPool.ticks ? remoteClPool.ticks.map((x) => parseTick(x)) : [],\n      tickSpacing: Number(remoteClPool.tickSpacing)\n    };\n  }\n  if (pool.type === 4 /* InfinityBIN */) {\n    const removeBinPool = remote;\n    const binPool = {\n      ...pool,\n      type: 4 /* InfinityBIN */,\n      binStep: removeBinPool.binStep,\n      activeId: removeBinPool.activeId,\n      reserveOfBin: parseBinPoolBinReserves(removeBinPool.reserveOfBin)\n    };\n    return binPool;\n  }\n  throw new Error(`Unknown pool type: ${type}`);\n}\n\n// evm/infinity-router/queries/getInfinityPools.ts\nvar getInfinityCandidatePools = async (params) => {\n  const pools = await getInfinityCandidatePoolsLite(params);\n  const clPools = pools.filter((pool) => pool.type === 3 /* InfinityCL */);\n  const binPools = pools.filter((pool) => pool.type === 4 /* InfinityBIN */);\n  const [poolWithTicks, poolWithBins] = await Promise.all([\n    fillClPoolsWithTicks({\n      pools: clPools,\n      clientProvider: params.clientProvider,\n      gasLimit: params.gasLimit\n    }),\n    fillPoolsWithBins({\n      pools: binPools,\n      clientProvider: params.clientProvider,\n      gasLimit: params.gasLimit\n    })\n  ]);\n  return [...poolWithTicks, ...poolWithBins];\n};\nasync function fetchPoolsOnChain(params) {\n  const isTestnet = params.currencyA?.chainId === chains.ChainId.BSC_TESTNET;\n  const [clPools, binPools, tvlMap] = await Promise.all([\n    getInfinityClCandidatePoolsWithoutTicks(params),\n    getInfinityBinCandidatePoolsWithoutBins(params),\n    isTestnet ? {} : getInfinityTvlReference(params)\n  ]);\n  const pools = [...clPools, ...binPools];\n  const poolsWithTvl = pools.map((pool) => {\n    return {\n      ...pool,\n      tvlUSD: isTestnet ? 0 : getInfinityPoolTvl(tvlMap, pool.id)\n    };\n  });\n  return poolsWithTvl;\n}\nvar fetchPoolsApi = cacheByLRU(\n  async (params) => {\n    const { currencyA, currencyB } = params;\n    const chainId = currencyA?.chainId;\n    const chain = chains.getChainName(chainId);\n    const pools = await fetchInfinityPoolsFromApi(currencyA, currencyB, chain);\n    return pools;\n  },\n  {\n    ttl: 5e3,\n    key: (args) => {\n      const params = args[0];\n      const chainId = params.currencyA?.chainId;\n      return [\n        chainId,\n        swapSdkCore.getCurrencyAddress(params.currencyA),\n        swapSdkCore.getCurrencyAddress(params.currencyB),\n        params.currencyA?.chainId,\n        params.currencyB?.chainId\n      ];\n    }\n  }\n);\nasync function fetchPools(params) {\n  const chainId = params.currencyA?.chainId;\n  const isTestnet = chainId === chains.ChainId.BSC_TESTNET;\n  const requests = isTestnet ? [fetchPoolsOnChain] : [fetchPoolsApi, fetchPoolsOnChain];\n  for (const requestFN of requests) {\n    try {\n      const pools = await requestFN(params);\n      if (pools.length > 0) {\n        return pools;\n      }\n    } catch (error) {\n      console.warn(`Error fetching infinity pools from ${requestFN.name}:`, error);\n    }\n  }\n  throw new Error(\"No pools found\");\n}\nvar getInfinityCandidatePoolsLite = async (params) => {\n  const pools = await fetchPools(params);\n  const filtered = infinityPoolTvlSelector(params.currencyA, params.currencyB, pools);\n  return filtered;\n};\nasync function fetchInfinityPoolsFromApi(currencyA, currencyB, chainName) {\n  const addressA = swapSdkCore.getCurrencyAddress(currencyA);\n  const addressB = swapSdkCore.getCurrencyAddress(currencyB);\n  const url = `${process.env.NEXT_PUBLIC_EXPLORE_API_ENDPOINT}/cached/pools/candidates/infinity/${chainName}/${addressA}/${addressB}`;\n  const response = await fetch(url);\n  if (!response.ok) {\n    throw new Error(`Error fetching infinity pools: ${response.statusText}`);\n  }\n  const data = await response.json();\n  const filtered = data.map((pool) => toLocalInfinityPool(pool, currencyA.chainId)).filter((x) => x);\n  return filtered;\n}\n\n// evm/abis/ITickLens.ts\nvar tickLensAbi = [\n  {\n    inputs: [\n      { internalType: \"address\", name: \"pool\", type: \"address\" },\n      { internalType: \"int16\", name: \"tickBitmapIndex\", type: \"int16\" }\n    ],\n    name: \"getPopulatedTicksInWord\",\n    outputs: [\n      {\n        components: [\n          { internalType: \"int24\", name: \"tick\", type: \"int24\" },\n          { internalType: \"int128\", name: \"liquidityNet\", type: \"int128\" },\n          { internalType: \"uint128\", name: \"liquidityGross\", type: \"uint128\" }\n        ],\n        internalType: \"struct ITickLens.PopulatedTick[]\",\n        name: \"populatedTicks\",\n        type: \"tuple[]\"\n      }\n    ],\n    stateMutability: \"view\",\n    type: \"function\"\n  }\n];\n\n// evm/infinity-router/queries/getV3Pools.ts\nasync function getV3CandidatePools2({\n  currencyA,\n  currencyB,\n  clientProvider,\n  gasLimit\n}) {\n  const pairs = await getPairCombinations(currencyA, currencyB);\n  return getV3Pools({ pairs, clientProvider, gasLimit });\n}\nasync function getV3Pools({ pairs, clientProvider, gasLimit }) {\n  const pools = await getV3PoolsWithoutTicksOnChain(pairs || [], clientProvider);\n  if (!pools.length) {\n    return pools;\n  }\n  return fillPoolsWithTicks({ pools, clientProvider, gasLimit });\n}\nfunction getBitmapIndex2(tick, tickSpacing) {\n  return Math.floor(tick / tickSpacing / 256);\n}\nfunction createBitmapIndexListBuilder2(tickRange) {\n  return function buildBitmapIndexList3({ currentTick, fee, ...rest }) {\n    const tickSpacing = v3Sdk.TICK_SPACINGS[fee];\n    const minIndex = getBitmapIndex2(currentTick - tickRange, tickSpacing);\n    const maxIndex = getBitmapIndex2(currentTick + tickRange, tickSpacing);\n    return Array.from(Array(maxIndex - minIndex + 1), (_, i) => ({\n      bitmapIndex: minIndex + i,\n      ...rest\n    }));\n  };\n}\nvar buildBitmapIndexList2 = createBitmapIndexListBuilder2(1e3);\nasync function fillPoolsWithTicks({ pools, clientProvider, gasLimit }) {\n  const chainId = pools[0]?.token0.chainId;\n  const tickLensAddress = chunkGYU5FW7D_js.V3_TICK_LENS_ADDRESSES[chainId];\n  const client = clientProvider?.({ chainId });\n  if (!client || !tickLensAddress) {\n    throw new Error(\"Fill pools with ticks failed. No valid public client or tick lens found.\");\n  }\n  const { gasLimit: gasLimitPerCall, retryGasMultiplier } = getV3PoolFetchConfig(chainId);\n  const bitmapIndexes = pools.map(({ tick, fee }, i) => buildBitmapIndexList2({ currentTick: tick, fee, poolIndex: i })).reduce((acc, cur) => {\n    acc.push(...cur);\n    return acc;\n  }, []);\n  const res = await multicall.multicallByGasLimit(\n    bitmapIndexes.map(({ poolIndex, bitmapIndex }) => ({\n      target: tickLensAddress,\n      callData: viem.encodeFunctionData({\n        abi: tickLensAbi,\n        args: [pools[poolIndex].address, bitmapIndex],\n        functionName: \"getPopulatedTicksInWord\"\n      }),\n      gasLimit: gasLimitPerCall\n    })),\n    {\n      chainId,\n      client,\n      gasLimit,\n      retryFailedCallsWithGreaterLimit: {\n        gasLimitMultiplier: retryGasMultiplier\n      }\n    }\n  );\n  const poolsWithTicks = pools.map((p) => ({ ...p }));\n  for (const [index, result] of res.results.entries()) {\n    const { poolIndex } = bitmapIndexes[index];\n    const pool = poolsWithTicks[poolIndex];\n    const data = result.success ? viem.decodeFunctionResult({\n      abi: tickLensAbi,\n      functionName: \"getPopulatedTicksInWord\",\n      data: result.result\n    }) : void 0;\n    const newTicks = data?.map(\n      ({ tick, liquidityNet, liquidityGross }) => new v3Sdk.Tick({\n        index: tick,\n        liquidityNet,\n        liquidityGross\n      })\n    ).reverse();\n    if (!newTicks) {\n      continue;\n    }\n    pool.ticks = [...pool.ticks || [], ...newTicks];\n  }\n  return poolsWithTicks.filter((p) => p.ticks?.length);\n}\n\n// evm/infinity-router/schema.ts\nvar schema_exports = {};\nchunkGYU5FW7D_js.__export(schema_exports, {\n  zPools: () => zPools,\n  zRouterPostParams: () => zRouterPostParams\n});\nvar zChainId = zod.z.nativeEnum(chains.ChainId);\nvar zFee = zod.z.number();\nvar zTradeType = zod.z.nativeEnum(sdk.TradeType);\nvar zAddress = zod.z.custom((val) => /^0x[a-fA-F0-9]{40}$/.test(val));\nvar zBigNumber = zod.z.string().regex(/^[0-9]+$/);\nvar zSignedBigInt = zod.z.string().regex(/^-?[0-9]+$/);\nvar zHex = zod.z.custom((val) => /^0x[a-fA-F0-9]*$/.test(val));\nvar zHooksRegistrationBitmap = zod.z.number().or(zHex);\nvar zCurrency = zod.z.object({\n  address: zAddress,\n  decimals: zod.z.number(),\n  symbol: zod.z.string()\n}).required();\nvar zTick = zod.z.object({\n  index: zod.z.number(),\n  liquidityGross: zSignedBigInt,\n  liquidityNet: zSignedBigInt\n}).required();\nvar zCurrencyAmountBase = zod.z.object({\n  currency: zCurrency.required(),\n  value: zBigNumber\n});\nvar zCurrencyAmountOptional = zCurrencyAmountBase.optional();\nvar zCurrencyAmount = zCurrencyAmountBase.required();\nvar zV2Pool = zod.z.object({\n  type: zod.z.literal(0 /* V2 */),\n  reserve0: zCurrencyAmount,\n  reserve1: zCurrencyAmount\n}).required();\nvar zV3Pool = zod.z.object({\n  type: zod.z.literal(1 /* V3 */),\n  token0: zCurrency,\n  token1: zCurrency,\n  fee: zFee,\n  liquidity: zBigNumber,\n  sqrtRatioX96: zBigNumber,\n  tick: zod.z.number(),\n  address: zAddress,\n  token0ProtocolFee: zod.z.string(),\n  token1ProtocolFee: zod.z.string(),\n  reserve0: zCurrencyAmountOptional,\n  reserve1: zCurrencyAmountOptional,\n  ticks: zod.z.array(zTick).optional()\n}).required({\n  type: true,\n  token0: true,\n  token1: true,\n  fee: true,\n  liquidity: true,\n  sqrtRatioX96: true,\n  tick: true,\n  address: true,\n  token0ProtocolFee: true,\n  token1ProtocolFee: true\n});\nvar zStablePool = zod.z.object({\n  type: zod.z.literal(2 /* STABLE */),\n  balances: zod.z.array(zCurrencyAmount),\n  amplifier: zBigNumber,\n  fee: zod.z.string(),\n  address: zAddress\n}).required();\nvar zInfinityClPool = zod.z.object({\n  type: zod.z.literal(3 /* InfinityCL */),\n  currency0: zCurrency,\n  currency1: zCurrency,\n  fee: zFee,\n  liquidity: zBigNumber,\n  sqrtRatioX96: zBigNumber,\n  tick: zod.z.number(),\n  tickSpacing: zod.z.number(),\n  poolManager: zAddress,\n  id: zHex\n}).required().extend({\n  protocolFee: zFee.optional(),\n  reserve0: zCurrencyAmountOptional,\n  reserve1: zCurrencyAmountOptional,\n  hooks: zAddress.optional(),\n  hooksRegistrationBitmap: zHooksRegistrationBitmap.optional(),\n  ticks: zod.z.array(zTick).optional()\n});\nvar zBinReserves = zod.z.object({\n  reserveX: zBigNumber,\n  reserveY: zBigNumber\n}).required();\nvar zInfinityBinPool = zod.z.object({\n  type: zod.z.literal(4 /* InfinityBIN */),\n  currency0: zCurrency,\n  currency1: zCurrency,\n  fee: zFee,\n  activeId: zod.z.number(),\n  binStep: zod.z.number(),\n  poolManager: zAddress,\n  id: zHex\n}).required().extend({\n  protocolFee: zFee.optional(),\n  reserve0: zCurrencyAmountOptional,\n  reserve1: zCurrencyAmountOptional,\n  hooks: zAddress.optional(),\n  hooksRegistrationBitmap: zHooksRegistrationBitmap.optional(),\n  reserveOfBin: zod.z.record(zBigNumber, zBinReserves).optional()\n});\nvar zPools = zod.z.array(zod.z.union([zV3Pool, zV2Pool, zStablePool, zInfinityClPool, zInfinityBinPool]));\nvar zRouterPostParams = zod.z.object({\n  chainId: zChainId,\n  tradeType: zTradeType,\n  amount: zCurrencyAmount,\n  currency: zCurrency,\n  candidatePools: zPools,\n  gasPriceWei: zBigNumber.optional(),\n  maxHops: zod.z.number().optional(),\n  maxSplits: zod.z.number().optional()\n}).required({\n  chainId: true,\n  tradeType: true,\n  amount: true,\n  currency: true,\n  candidatePools: true\n});\nfunction estimateGasCost({ pool, poolAfter }) {\n  if (isV2Pool(pool)) {\n    return chunkGYU5FW7D_js.BASE_SWAP_COST_V2;\n  }\n  if (isV3Pool(pool) && isV3Pool(poolAfter)) {\n    const { ticks, token0, tick } = pool;\n    invariant6__default.default(ticks !== void 0, \"[Estimate gas]: No valid tick list found\");\n    const { tick: tickAfter } = poolAfter;\n    const { chainId } = token0;\n    const numOfTicksCrossed = v3Sdk.TickList.countInitializedTicksCrossed(ticks, tick, tickAfter);\n    const tickGasUse = chunkGYU5FW7D_js.COST_PER_INIT_TICK(chainId) * BigInt(numOfTicksCrossed);\n    return chunkGYU5FW7D_js.BASE_SWAP_COST_V3(chainId) + chunkGYU5FW7D_js.COST_PER_HOP_V3(chainId) + tickGasUse;\n  }\n  if (isStablePool(pool)) {\n    return chunkGYU5FW7D_js.BASE_SWAP_COST_STABLE_SWAP;\n  }\n  throw new Error(\"[Estimate gas]: Unknown pool type\");\n}\n\n// evm/infinity-router/pool.ts\nfunction getCurrencyPairs(p) {\n  if (isV3Pool(p)) {\n    return [[p.token0, p.token1]];\n  }\n  if (isV2Pool(p)) {\n    return [[p.reserve0.currency, p.reserve1.currency]];\n  }\n  if (isStablePool(p)) {\n    const currencies = p.balances.map((b) => b.currency);\n    const pairs = [];\n    for (let i = 0; i < currencies.length; i++) {\n      for (let j = i + 1; j < currencies.length; j++) {\n        pairs.push([currencies[i], currencies[j]]);\n      }\n    }\n    return pairs;\n  }\n  throw new Error(\"[Get currency pairs]: Unknown pool type\");\n}\nfunction getReserve(p, currency) {\n  if (isV3Pool(p)) {\n    return p.token0.equals(currency.wrapped) ? p.reserve0 : p.reserve1;\n  }\n  if (isV2Pool(p)) {\n    return p.reserve0.currency.wrapped.equals(currency.wrapped) ? p.reserve0 : p.reserve1;\n  }\n  if (isStablePool(p)) {\n    return p.balances.find((b) => b.currency.wrapped.equals(currency.wrapped));\n  }\n  throw new Error(\"[Get reserve]: Unknown pool type\");\n}\n\n// evm/infinity-router/utils/groupPoolsPyType.ts\nfunction groupPoolsByType(pools) {\n  const poolsByType = /* @__PURE__ */ new Map();\n  for (const pool of pools) {\n    poolsByType.set(pool.type, [...poolsByType.get(pool.type) || [], pool]);\n  }\n  return Array.from(poolsByType.values());\n}\nfunction getBetterTrade(tradeA, tradeB) {\n  if (!tradeA && !tradeB)\n    return void 0;\n  if (!tradeA && tradeB)\n    return tradeB;\n  if (tradeA && !tradeB)\n    return tradeA;\n  const isExactIn = tradeA.tradeType === sdk.TradeType.EXACT_INPUT;\n  if (isExactIn) {\n    if (tradeB.outputAmountWithGasAdjusted.greaterThan(tradeA.outputAmountWithGasAdjusted)) {\n      return tradeB;\n    }\n    return tradeA;\n  }\n  if (tradeB.inputAmountWithGasAdjusted.lessThan(tradeA.inputAmountWithGasAdjusted)) {\n    return tradeB;\n  }\n  return tradeA;\n}\n\n// evm/infinity-router/graph/edge.ts\nfunction getNeighbour(e, v) {\n  return e.vertice0.currency.equals(v.currency) ? e.vertice1 : e.vertice0;\n}\nfunction createPriceCalculator({ graph, quote, gasPriceWei }) {\n  const { chainId } = quote.currency;\n  const priceMap = /* @__PURE__ */ new Map();\n  const processedVert = /* @__PURE__ */ new Set();\n  const edgeWeight = /* @__PURE__ */ new Map();\n  let nextEdges = [];\n  const getWeight = (e) => {\n    const weight = edgeWeight.get(e);\n    if (weight === void 0) {\n      throw new Error(`Invalid weight for edge ${e}`);\n    }\n    return weight;\n  };\n  priceMap.set(quote, new sdk.Price(quote.currency, quote.currency, 1, 1));\n  nextEdges = getNextEdges(quote);\n  processedVert.add(quote);\n  while (nextEdges.length) {\n    const bestEdge = nextEdges.pop();\n    const [vFrom, vTo] = processedVert.has(bestEdge.vertice1) ? [bestEdge.vertice1, bestEdge.vertice0] : [bestEdge.vertice0, bestEdge.vertice1];\n    if (processedVert.has(vTo))\n      continue;\n    const p = getTokenPrice(bestEdge.pool, vTo.currency, vFrom.currency);\n    const vFromQuotePrice = getQuotePrice(vFrom);\n    invariant6__default.default(vFromQuotePrice !== void 0, \"Invalid quote price\");\n    priceMap.set(vTo, p.multiply(vFromQuotePrice));\n    nextEdges = getNextEdges(vTo);\n    processedVert.add(vTo);\n  }\n  const native = sdk.Native.onChain(chainId).wrapped;\n  const nativeVertice = graph.getVertice(native);\n  if (!nativeVertice) {\n    throw new Error(\"No valid native currency price found\");\n  }\n  const nativePriceInQuote = getQuotePrice(nativeVertice);\n  const gasPriceInQuote = nativePriceInQuote?.quote(sdk.CurrencyAmount.fromRawAmount(native, gasPriceWei));\n  if (!gasPriceInQuote) {\n    throw new Error(\"Failed to get gas price in quote\");\n  }\n  function getNextEdges(v) {\n    const price = priceMap.get(v);\n    if (!price) {\n      throw new Error(\"Invalid price\");\n    }\n    const newEdges = v.edges.filter((e) => {\n      if (processedVert.has(getNeighbour(e, v))) {\n        return false;\n      }\n      const tokenReserve = getReserve(e.pool, v.currency);\n      invariant6__default.default(tokenReserve !== void 0, \"Unexpected empty token reserve\");\n      const liquidity = price.quote(tokenReserve).quotient;\n      edgeWeight.set(e, liquidity);\n      return true;\n    });\n    newEdges.sort((e1, e2) => Number(getWeight(e1) - getWeight(e2)));\n    const res = [];\n    while (nextEdges.length && newEdges.length) {\n      if (getWeight(nextEdges[0]) < getWeight(newEdges[0])) {\n        res.push(nextEdges.shift());\n      } else {\n        res.push(newEdges.shift());\n      }\n    }\n    return [...res, ...nextEdges, ...newEdges];\n  }\n  function getPrice(base, targetQuote) {\n    const basePrice = getQuotePrice(base);\n    const quotePrice = getQuotePrice(targetQuote);\n    return basePrice && quotePrice ? basePrice.multiply(quotePrice.invert()) : void 0;\n  }\n  function getQuotePrice(base) {\n    return priceMap.get(base);\n  }\n  function getGasPriceInBase(base) {\n    const basePrice = getQuotePrice(base);\n    return gasPriceInQuote ? basePrice?.invert().quote(gasPriceInQuote) : void 0;\n  }\n  return {\n    graph,\n    getGasPriceInBase,\n    getQuotePrice,\n    getPrice\n  };\n}\n\n// evm/infinity-router/graph/route.ts\nfunction isSameRoute(one, another) {\n  if (one.pools.length !== another.pools.length) {\n    return false;\n  }\n  for (const [index, p] of one.pools.entries()) {\n    if (p.type !== another.pools[index].type) {\n      return false;\n    }\n    if (getPoolAddress(p) !== getPoolAddress(another.pools[index])) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction mergeRoute(one, another) {\n  return {\n    ...one,\n    inputAmount: one.inputAmount.add(another.inputAmount),\n    outputAmount: one.outputAmount.add(another.outputAmount),\n    gasUseEstimateQuote: another.gasUseEstimateQuote ? one.gasUseEstimateQuote?.add(another.gasUseEstimateQuote) : one.gasUseEstimateQuote,\n    gasUseEstimate: one.gasUseEstimate + another.gasUseEstimate,\n    inputAmountWithGasAdjusted: another.inputAmountWithGasAdjusted ? one.inputAmountWithGasAdjusted?.add(another.inputAmountWithGasAdjusted) : one.inputAmountWithGasAdjusted,\n    outputAmountWithGasAdjusted: another.outputAmountWithGasAdjusted ? one.outputAmountWithGasAdjusted?.add(another.outputAmountWithGasAdjusted) : one.outputAmountWithGasAdjusted,\n    percent: one.percent + another.percent\n  };\n}\n\n// evm/infinity-router/graph/graph.ts\nfunction getEdgeKey(p, vertA, vertB) {\n  const [vert0, vert1] = vertA.currency.wrapped.sortsBefore(vertB.currency.wrapped) ? [vertA, vertB] : [vertB, vertA];\n  return `${vert0.currency.chainId}-${vert0.currency.wrapped.address}-${vert1.currency.wrapped.address}-${getPoolAddress(p)}`;\n}\nfunction cloneGraph(graph) {\n  const pools = graph.edges.map((e) => e.pool);\n  return createGraph({ pools });\n}\nfunction createGraph({ pools, graph }) {\n  if (graph) {\n    return cloneGraph(graph);\n  }\n  if (!pools) {\n    throw new Error(\"[Create graph]: Invalid pools\");\n  }\n  const verticeMap = /* @__PURE__ */ new Map();\n  const edgeMap = /* @__PURE__ */ new Map();\n  for (const p of pools) {\n    const pairs = getCurrencyPairs(p);\n    for (const [currency0, currency1] of pairs) {\n      const vertice0 = createVertice(currency0);\n      const vertice1 = createVertice(currency1);\n      const edge = createEdge(p, vertice0, vertice1);\n      if (!vertice0.edges.includes(edge))\n        vertice0.edges.push(edge);\n      if (!vertice1.edges.includes(edge))\n        vertice1.edges.push(edge);\n    }\n  }\n  function getVertice(c) {\n    return verticeMap.get(c.wrapped.address);\n  }\n  function getEdge(p, vert0, vert1) {\n    return edgeMap.get(getEdgeKey(p, vert0, vert1));\n  }\n  function createVertice(c) {\n    const vert = getVertice(c);\n    if (vert) {\n      return vert;\n    }\n    const vertice = { currency: c, edges: [] };\n    verticeMap.set(c.wrapped.address, vertice);\n    return vertice;\n  }\n  function createEdge(p, vertice0, vertice1) {\n    const edgeKey = getEdgeKey(p, vertice0, vertice1);\n    if (!edgeKey) {\n      throw new Error(`Create edge failed. Cannot get valid edge key for ${p}`);\n    }\n    const e = edgeMap.get(edgeKey);\n    if (e) {\n      return e;\n    }\n    const edge = {\n      vertice0,\n      vertice1,\n      pool: p\n    };\n    edgeMap.set(edgeKey, edge);\n    return edge;\n  }\n  const hasValidRouteToVerticeWithinHops = memoize2__default.default(\n    (vertice, target, hops, visitedVertices) => {\n      if (vertice === target) {\n        return true;\n      }\n      if (hops <= 0) {\n        return false;\n      }\n      const visited = visitedVertices || /* @__PURE__ */ new Set();\n      visited.add(vertice);\n      for (const edge of vertice.edges) {\n        const nextVertice = getNeighbour(edge, vertice);\n        if (nextVertice && !visited.has(nextVertice)) {\n          if (hasValidRouteToVerticeWithinHops(nextVertice, target, hops - 1, visited)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    },\n    (v1, v2, hops) => `${v1.currency.chainId}-${v1.currency.wrapped.address}-${v2.currency.wrapped.address}-${hops}`\n  );\n  return {\n    vertices: Array.from(verticeMap.values()),\n    edges: Array.from(edgeMap.values()),\n    getVertice,\n    getEdge,\n    hasValidRouteToVerticeWithinHops,\n    applySwap: async ({ isExactIn, route }) => {\n      const getPoolQuote = createPoolQuoteGetter(isExactIn);\n      function* loopPools() {\n        let i = isExactIn ? 0 : route.pools.length - 1;\n        const getNext = () => isExactIn ? i + 1 : i - 1;\n        const hasNext = isExactIn ? () => i < route.pools.length : () => i >= 0;\n        for (; hasNext(); i = getNext()) {\n          yield i;\n        }\n      }\n      const amount = isExactIn ? route.inputAmount : route.outputAmount;\n      invariant6__default.default(amount !== void 0, \"[Apply swap]: Invalid base amount\");\n      let quote = amount;\n      let gasCost = 0n;\n      for (const i of loopPools()) {\n        const vertA = getVertice(route.path[i]);\n        const vertB = getVertice(route.path[i + 1]);\n        const p = route.pools[i];\n        invariant6__default.default(\n          vertA !== void 0 && vertB !== void 0 && p !== void 0,\n          \"[Apply swap]: Invalid vertice and pool\"\n        );\n        const edge = getEdge(p, vertA, vertB);\n        invariant6__default.default(edge !== void 0, \"[Apply swap]: No valid edge found\");\n        const quoteResult = await getPoolQuote(edge.pool, quote);\n        invariant6__default.default(quoteResult !== void 0, \"[Apply swap]: Failed to get quote\");\n        edge.pool = quoteResult.poolAfter;\n        quote = quoteResult.quote;\n        gasCost += estimateGasCost(quoteResult);\n      }\n      return {\n        amount,\n        quote,\n        gasCost\n      };\n    }\n  };\n}\nfunction getStreamedAmounts(amount, streams) {\n  const streamSum = Array.isArray(streams) ? streams.reduce((sum3, s) => sum3 + s, 0) : streams;\n  const streamDistributions = Array.isArray(streams) ? streams.map((stream) => new sdk.Fraction(stream, streamSum)) : Array.from({ length: streams }).map(() => new sdk.Fraction(1, streamSum));\n  const numOfStreams = streamDistributions.length;\n  let sum2 = new sdk.Fraction(0);\n  const amounts = [];\n  for (const [index, stream] of streamDistributions.entries()) {\n    const streamAmount = index === numOfStreams - 1 ? amount.subtract(amount.multiply(sum2)) : amount.multiply(stream);\n    const revisedStream = index === numOfStreams - 1 ? new sdk.Fraction(1).subtract(sum2) : stream;\n    const percent = Number(formatFraction(revisedStream) || 0) * 100;\n    amounts.push({ amount: streamAmount, percent });\n    sum2 = sum2.add(stream);\n  }\n  return amounts;\n}\nvar getGasCostInCurrency = ({\n  priceCalculator,\n  gasCost,\n  currency\n}) => {\n  const v = priceCalculator.graph.getVertice(currency);\n  const gasPriceInCurrency = v && priceCalculator.getGasPriceInBase(v);\n  const gasCostInCurrencyRaw = gasPriceInCurrency?.multiply(gasCost);\n  return sdk.CurrencyAmount.fromRawAmount(currency, gasCostInCurrencyRaw?.quotient || 0);\n};\nasync function findBestTrade(params) {\n  const { tradeType, candidatePools, ...rest } = params;\n  const isExactIn = tradeType === sdk.TradeType.EXACT_INPUT;\n  if (isExactIn) {\n    return getBestTrade(params);\n  }\n  const poolsByType = groupPoolsByType(candidatePools).filter((pools) => !isStablePool(pools[0]));\n  const trades = await Promise.allSettled(\n    poolsByType.map((pools) => getBestTrade({ tradeType, candidatePools: pools, ...rest }))\n  );\n  let bestTrade;\n  for (const result of trades) {\n    if (result.status === \"rejected\") {\n      continue;\n    }\n    const { value: trade } = result;\n    if (!trade) {\n      continue;\n    }\n    if (!bestTrade) {\n      bestTrade = trade;\n      continue;\n    }\n    bestTrade = getBetterTrade(bestTrade, trade);\n  }\n  return bestTrade;\n}\nasync function getBestTrade({\n  amount: totalAmount,\n  candidatePools,\n  quoteCurrency,\n  gasPriceWei,\n  streams,\n  graph: graphOverride,\n  tradeType,\n  maxHops = 3\n}) {\n  const isExactIn = tradeType === sdk.TradeType.EXACT_INPUT;\n  const baseCurrency = totalAmount.currency;\n  const inputCurrency = isExactIn ? baseCurrency : quoteCurrency;\n  const outputCurrency = isExactIn ? quoteCurrency : baseCurrency;\n  const graph = graphOverride || createGraph({ pools: candidatePools });\n  const amounts = getStreamedAmounts(totalAmount, streams);\n  const getPoolQuote = createPoolQuoteGetter(isExactIn);\n  const gasPrice = BigInt(typeof gasPriceWei === \"function\" ? await gasPriceWei() : gasPriceWei);\n  const start = graph.getVertice(baseCurrency);\n  const finish = graph.getVertice(quoteCurrency);\n  if (!start || !finish) {\n    throw new Error(`Invalid start vertice or finish vertice. Start ${start}, finish ${finish}`);\n  }\n  const priceCalculator = createPriceCalculator({ quote: start, gasPriceWei: gasPrice, graph });\n  const adjustQuoteByGas = (quote, gasCostInQuote) => isExactIn ? quote.subtract(gasCostInQuote) : quote.add(gasCostInQuote);\n  const isQuoteBetter = (quote, compareTo) => isExactIn ? quote.greaterThan(compareTo) : quote.lessThan(compareTo);\n  const getInputAmount = (amount, quote) => isExactIn ? amount : quote;\n  const getOutputAmount = (amount, quote) => isExactIn ? quote : amount;\n  const getQuoteAmount = (r) => isExactIn ? r.outputAmount : r.inputAmount;\n  const buildTrade = (g, routes2) => {\n    const {\n      gasUseEstimate,\n      quoteAmount,\n      gasUseEstimateQuote,\n      gasUseEstimateBase,\n      inputAmountWithGasAdjusted,\n      outputAmountWithGasAdjusted\n    } = routes2.reduce(\n      (result, r) => {\n        return {\n          gasUseEstimate: result.gasUseEstimate + r.gasUseEstimate,\n          quoteAmount: result.quoteAmount.add(getQuoteAmount(r)),\n          gasUseEstimateBase: result.gasUseEstimateBase.add(r.gasUseEstimateBase),\n          gasUseEstimateQuote: result.gasUseEstimateQuote.add(r.gasUseEstimateQuote),\n          inputAmountWithGasAdjusted: result.inputAmountWithGasAdjusted.add(r.inputAmountWithGasAdjusted),\n          outputAmountWithGasAdjusted: result.outputAmountWithGasAdjusted.add(r.outputAmountWithGasAdjusted)\n        };\n      },\n      {\n        gasUseEstimate: 0n,\n        quoteAmount: sdk.CurrencyAmount.fromRawAmount(quoteCurrency, 0),\n        gasUseEstimateBase: sdk.CurrencyAmount.fromRawAmount(baseCurrency, 0),\n        gasUseEstimateQuote: sdk.CurrencyAmount.fromRawAmount(quoteCurrency, 0),\n        inputAmountWithGasAdjusted: sdk.CurrencyAmount.fromRawAmount(inputCurrency, 0),\n        outputAmountWithGasAdjusted: sdk.CurrencyAmount.fromRawAmount(outputCurrency, 0)\n      }\n    );\n    return {\n      gasUseEstimate,\n      gasUseEstimateQuote,\n      gasUseEstimateBase,\n      inputAmountWithGasAdjusted,\n      outputAmountWithGasAdjusted,\n      inputAmount: getInputAmount(totalAmount, quoteAmount),\n      outputAmount: getOutputAmount(totalAmount, quoteAmount),\n      tradeType,\n      graph: g,\n      routes: routes2\n    };\n  };\n  async function findBestRoute(amount) {\n    invariant6__default.default(start !== void 0 && finish !== void 0, \"Invalid start/finish vertice\");\n    const bestResult = /* @__PURE__ */ new Map();\n    const processedVert = /* @__PURE__ */ new Set();\n    bestResult.set(start, {\n      hops: 0,\n      bestAmount: amount,\n      gasSpent: 0n\n    });\n    const nextVertList = [start];\n    const getHops = (vert) => bestResult.get(vert)?.hops || 0;\n    const getBestAmount = (vert) => bestResult.get(vert)?.bestAmount;\n    const getBestQuote = (vert) => bestResult.get(vert)?.bestQuote;\n    const getBestSource = (vert) => bestResult.get(vert)?.bestSource;\n    const getGasSpent = (vert) => bestResult.get(vert)?.gasSpent || 0n;\n    const getNextVert = () => {\n      let vert;\n      let bestQuote;\n      let bestVertIndex;\n      for (const [i, vertice] of nextVertList.entries()) {\n        const currentBestQuote = getBestQuote(vertice);\n        if (vert === void 0 || bestQuote === void 0 || currentBestQuote && isQuoteBetter(currentBestQuote, bestQuote)) {\n          vert = vertice;\n          bestQuote = currentBestQuote;\n          bestVertIndex = i;\n        }\n      }\n      return { vert, index: bestVertIndex };\n    };\n    const getBestRoute = (vert) => {\n      const pools = [];\n      const path = [vert.currency];\n      for (let v = finish; getBestSource(v); v = getNeighbour(getBestSource(v), v)) {\n        const bestSource = getBestSource(v);\n        invariant6__default.default(bestSource !== void 0, \"Invalid best source\");\n        const neighbour = getNeighbour(bestSource, v);\n        if (isExactIn) {\n          pools.unshift(bestSource.pool);\n          path.unshift(neighbour?.currency);\n        } else {\n          pools.push(bestSource.pool);\n          path.push(neighbour?.currency);\n        }\n      }\n      const gasCost = getGasSpent(vert);\n      const quoteAmountRaw = getBestAmount(vert);\n      invariant6__default.default(quoteAmountRaw !== void 0, \"Invalid quote amount\");\n      const quoteAmount = sdk.CurrencyAmount.fromRawAmount(quoteCurrency, quoteAmountRaw.quotient);\n      const gasUseEstimateBase = getGasCostInCurrency({ priceCalculator, gasCost, currency: baseCurrency });\n      const gasUseEstimateQuote = getGasCostInCurrency({ priceCalculator, gasCost, currency: quoteCurrency });\n      const quoteAmountWithGasAdjusted = sdk.CurrencyAmount.fromRawAmount(\n        quoteCurrency,\n        gasUseEstimateQuote ? adjustQuoteByGas(quoteAmount, gasUseEstimateQuote).quotient : 0\n      );\n      const { type } = buildBaseRoute(pools, start.currency, finish.currency);\n      return {\n        type,\n        path,\n        pools,\n        gasUseEstimate: gasCost,\n        inputAmount: getInputAmount(amount, quoteAmount),\n        outputAmount: getOutputAmount(amount, quoteAmount),\n        inputAmountWithGasAdjusted: getInputAmount(amount, quoteAmountWithGasAdjusted),\n        outputAmountWithGasAdjusted: getOutputAmount(amount, quoteAmountWithGasAdjusted),\n        gasUseEstimateQuote,\n        gasUseEstimateBase\n      };\n    };\n    for (; ; ) {\n      const { vert, index } = getNextVert();\n      if (!vert || index === void 0)\n        return void 0;\n      if (vert === finish) {\n        return getBestRoute(vert);\n      }\n      nextVertList.splice(index, 1);\n      const currentHop = getHops(vert);\n      for (const e of vert.edges) {\n        const v2 = vert === e.vertice0 ? e.vertice1 : e.vertice0;\n        if (processedVert.has(v2))\n          continue;\n        if (!graph.hasValidRouteToVerticeWithinHops(v2, finish, maxHops - currentHop - 1)) {\n          continue;\n        }\n        try {\n          const bestAmount = getBestAmount(vert);\n          invariant6__default.default(bestAmount !== void 0, \"Invalid amount\");\n          const quoteResult = await getPoolQuote(e.pool, bestAmount);\n          invariant6__default.default(quoteResult !== void 0, \"Invalid quote result\");\n          const { quote } = quoteResult;\n          const gasPriceInV2 = priceCalculator.getGasPriceInBase(v2);\n          invariant6__default.default(gasPriceInV2 !== void 0, \"Invalid gas price in v2\");\n          const gasSpent = estimateGasCost(quoteResult) + getGasSpent(vert);\n          const price = priceCalculator.getPrice(v2, finish);\n          invariant6__default.default(\n            price !== void 0,\n            `Failed to get price, base ${v2.currency.symbol}, quote ${finish.currency.symbol}`\n          );\n          const gasSpentInQuote = price.quote(gasPriceInV2.multiply(gasSpent));\n          const newQuote = adjustQuoteByGas(price.quote(quote), gasSpentInQuote);\n          const bestSource = getBestSource(v2);\n          const v2BestQuote = getBestQuote(v2);\n          if (!bestSource)\n            nextVertList.push(v2);\n          if (!bestSource || !v2BestQuote || isQuoteBetter(newQuote, v2BestQuote)) {\n            bestResult.set(v2, {\n              hops: currentHop + 1,\n              gasSpent,\n              bestAmount: quote,\n              bestSource: e,\n              bestQuote: newQuote\n            });\n          }\n        } catch (_err) {\n          continue;\n        }\n      }\n      processedVert.add(vert);\n    }\n  }\n  let routeMerged = false;\n  const routes = [];\n  for (const { amount, percent } of amounts) {\n    const route = await findBestRoute(amount);\n    invariant6__default.default(\n      route !== void 0,\n      `No valid route found for base amount ${amount.toExact()} ${amount.currency.symbol} and quote currency ${quoteCurrency.symbol}`\n    );\n    await graph.applySwap({ route, isExactIn });\n    const newRoute = {\n      ...route,\n      percent\n    };\n    const index = routes.findIndex((r) => isSameRoute(r, newRoute));\n    if (index < 0) {\n      routes.push(newRoute);\n    } else {\n      routes[index] = mergeRoute(routes[index], newRoute);\n      routeMerged = true;\n    }\n  }\n  if (!routes.length) {\n    return void 0;\n  }\n  if (!routeMerged) {\n    return buildTrade(graph, routes);\n  }\n  const finalGraph = createGraph({ graph: graphOverride, pools: candidatePools });\n  const s = finalGraph.getVertice(baseCurrency);\n  invariant6__default.default(s !== void 0, \"[Graph rebuild]: Invalid start vertice\");\n  const pc = createPriceCalculator({ quote: s, gasPriceWei: gasPrice, graph: finalGraph });\n  const finalRoutes = [];\n  for (const r of routes) {\n    const { amount, quote: quoteRaw, gasCost } = await finalGraph.applySwap({ isExactIn, route: r });\n    const quote = sdk.CurrencyAmount.fromRawAmount(quoteCurrency, quoteRaw.quotient);\n    const gasUseEstimateBase = getGasCostInCurrency({ priceCalculator: pc, gasCost, currency: baseCurrency });\n    const gasUseEstimateQuote = getGasCostInCurrency({ priceCalculator: pc, gasCost, currency: quoteCurrency });\n    const quoteAmountWithGasAdjusted = sdk.CurrencyAmount.fromRawAmount(\n      quoteCurrency,\n      gasUseEstimateQuote ? adjustQuoteByGas(quote, gasUseEstimateQuote).quotient : 0\n    );\n    finalRoutes.push({\n      ...r,\n      gasUseEstimate: gasCost,\n      inputAmount: getInputAmount(amount, quote),\n      outputAmount: getOutputAmount(amount, quote),\n      inputAmountWithGasAdjusted: getInputAmount(amount, quoteAmountWithGasAdjusted),\n      outputAmountWithGasAdjusted: getOutputAmount(amount, quoteAmountWithGasAdjusted),\n      gasUseEstimateQuote,\n      gasUseEstimateBase\n    });\n  }\n  return buildTrade(finalGraph, finalRoutes);\n}\n\n// evm/infinity-router/trade.ts\nvar DEFAULT_STREAM = 10;\nfunction getBestStreamsConfig(trade) {\n  const maxStreams = 100;\n  if (!trade) {\n    return DEFAULT_STREAM;\n  }\n  const priceImpact = getPriceImpact(trade);\n  if (!priceImpact) {\n    return DEFAULT_STREAM;\n  }\n  const { gasUseEstimateBase, inputAmount, outputAmount } = trade;\n  if (!gasUseEstimateBase) {\n    return DEFAULT_STREAM;\n  }\n  const amount = trade.tradeType === sdk.TradeType.EXACT_INPUT ? inputAmount : outputAmount;\n  const bestFlowAmount = Math.sqrt(\n    Number(gasUseEstimateBase.toExact()) * Number(amount.toExact()) / Number(formatFraction(priceImpact.asFraction))\n  );\n  const streams = Math.round(Number(amount.toExact()) / bestFlowAmount);\n  if (!Number.isFinite(streams)) {\n    return DEFAULT_STREAM;\n  }\n  return Math.max(1, Math.min(streams, maxStreams));\n}\nasync function getBestTrade2(amount, quoteCurrency, tradeType, { candidatePools, gasPriceWei, maxHops, maxSplits }) {\n  const splitDisabled = maxSplits !== void 0 && maxSplits === 0;\n  let bestTrade;\n  try {\n    bestTrade = await findBestTrade({\n      tradeType,\n      amount,\n      quoteCurrency,\n      gasPriceWei,\n      candidatePools,\n      maxHops,\n      streams: 1\n    });\n  } catch (e) {\n    if (splitDisabled) {\n      throw e;\n    }\n    bestTrade = await findBestTrade({\n      tradeType,\n      amount,\n      quoteCurrency,\n      gasPriceWei,\n      candidatePools,\n      maxHops,\n      streams: DEFAULT_STREAM\n    });\n  }\n  if (splitDisabled) {\n    return bestTrade;\n  }\n  const streams = getBestStreamsConfig(bestTrade);\n  if (streams === 1) {\n    return bestTrade;\n  }\n  const bestTradeWithStreams = await findBestTrade({\n    tradeType,\n    amount,\n    quoteCurrency,\n    gasPriceWei,\n    candidatePools,\n    maxHops,\n    streams\n  });\n  return getBetterTrade(bestTrade, bestTradeWithStreams);\n}\n\n// evm/infinity-router/transformer.ts\nvar transformer_exports2 = {};\nchunkGYU5FW7D_js.__export(transformer_exports2, {\n  parseRoute: () => parseRoute2,\n  parseTrade: () => parseTrade2,\n  serializeRoute: () => serializeRoute2,\n  serializeTrade: () => serializeTrade2\n});\nfunction serializeRoute2(route) {\n  return {\n    ...route,\n    pools: route.pools.map(serializePool),\n    path: route.path.map(serializeCurrency),\n    inputAmount: serializeCurrencyAmount(route.inputAmount),\n    outputAmount: serializeCurrencyAmount(route.outputAmount),\n    gasUseEstimate: String(route.gasUseEstimate),\n    gasUseEstimateBase: serializeCurrencyAmount(route.gasUseEstimateBase),\n    gasUseEstimateQuote: serializeCurrencyAmount(route.gasUseEstimateQuote),\n    inputAmountWithGasAdjusted: serializeCurrencyAmount(route.inputAmountWithGasAdjusted),\n    outputAmountWithGasAdjusted: serializeCurrencyAmount(route.outputAmountWithGasAdjusted)\n  };\n}\nfunction parseRoute2(chainId, route) {\n  return {\n    ...route,\n    pools: route.pools.map((p) => parsePool(chainId, p)),\n    path: route.path.map((c) => parseCurrency(chainId, c)),\n    inputAmount: parseCurrencyAmount(chainId, route.inputAmount),\n    outputAmount: parseCurrencyAmount(chainId, route.outputAmount),\n    gasUseEstimate: BigInt(route.gasUseEstimate),\n    gasUseEstimateBase: parseCurrencyAmount(chainId, route.gasUseEstimateBase),\n    gasUseEstimateQuote: parseCurrencyAmount(chainId, route.gasUseEstimateQuote),\n    inputAmountWithGasAdjusted: parseCurrencyAmount(chainId, route.inputAmountWithGasAdjusted),\n    outputAmountWithGasAdjusted: parseCurrencyAmount(chainId, route.outputAmountWithGasAdjusted)\n  };\n}\nfunction serializeTrade2(trade) {\n  const { graph: _graph, ...rest } = trade;\n  return {\n    ...rest,\n    inputAmount: serializeCurrencyAmount(trade.inputAmount),\n    outputAmount: serializeCurrencyAmount(trade.outputAmount),\n    routes: trade.routes.map(serializeRoute2),\n    gasUseEstimate: trade.gasUseEstimate.toString(),\n    gasUseEstimateBase: serializeCurrencyAmount(trade.gasUseEstimateBase),\n    gasUseEstimateQuote: serializeCurrencyAmount(trade.gasUseEstimateQuote),\n    inputAmountWithGasAdjusted: serializeCurrencyAmount(trade.inputAmountWithGasAdjusted),\n    outputAmountWithGasAdjusted: serializeCurrencyAmount(trade.outputAmountWithGasAdjusted)\n  };\n}\nfunction parseTrade2(chainId, trade) {\n  return {\n    ...trade,\n    tradeType: trade.tradeType,\n    inputAmount: parseCurrencyAmount(chainId, trade.inputAmount),\n    outputAmount: parseCurrencyAmount(chainId, trade.outputAmount),\n    routes: trade.routes.map((r) => parseRoute2(chainId, r)),\n    gasUseEstimate: trade.gasUseEstimate ? BigInt(trade.gasUseEstimate) : 0n,\n    gasUseEstimateBase: parseCurrencyAmount(chainId, trade.gasUseEstimateBase),\n    gasUseEstimateQuote: parseCurrencyAmount(chainId, trade.gasUseEstimateQuote),\n    inputAmountWithGasAdjusted: parseCurrencyAmount(chainId, trade.inputAmountWithGasAdjusted),\n    outputAmountWithGasAdjusted: parseCurrencyAmount(chainId, trade.outputAmountWithGasAdjusted)\n  };\n}\nvar SCOPE_PREFIX2 = \"infinity-router\";\nvar SCOPE2 = {\n  metric: \"metric\",\n  log: \"log\",\n  error: \"error\"\n};\nvar log_2 = debug__default.default(SCOPE_PREFIX2);\nvar metric2 = log_2.extend(SCOPE2.metric);\nvar log2 = log_2.extend(SCOPE2.log);\nvar logger2 = {\n  metric: metric2,\n  log: log2,\n  error: debug__default.default(SCOPE_PREFIX2).extend(SCOPE2.error),\n  enable: (namespace) => {\n    let namespaces = namespace;\n    if (namespace.includes(\",\")) {\n      namespaces = namespace.split(\",\").map((ns) => `${SCOPE_PREFIX2}:${ns}`).join(\",\");\n    } else {\n      namespaces = `${SCOPE_PREFIX2}:${namespace}`;\n    }\n    debug__default.default.enable(namespaces);\n  }\n};\n\n// evm/v3-router/smartRouter.ts\nvar smartRouter_exports = {};\nchunkGYU5FW7D_js.__export(smartRouter_exports, {\n  APISchema: () => schema_exports2,\n  PancakeMulticallProvider: () => PancakeMulticallProvider,\n  Transformer: () => transformer_exports,\n  buildBaseRoute: () => buildBaseRoute,\n  createCommonTokenPriceProvider: () => createCommonTokenPriceProvider,\n  createGetV2CandidatePools: () => createGetV2CandidatePools,\n  createGetV3CandidatePools: () => createGetV3CandidatePools,\n  createGetV3CandidatePoolsWithFallbacks: () => createGetV3CandidatePools,\n  createHybridPoolProvider: () => createHybridPoolProvider,\n  createOffChainQuoteProvider: () => createOffChainQuoteProvider,\n  createOnChainPoolFactory: () => createOnChainPoolFactory,\n  createPoolProvider: () => createPoolProvider,\n  createPoolQuoteGetter: () => createPoolQuoteGetter,\n  createQuoteProvider: () => createQuoteProvider,\n  createStaticPoolProvider: () => createStaticPoolProvider,\n  createV2PoolsProviderByCommonTokenPrices: () => createV2PoolsProviderByCommonTokenPrices,\n  encodeInfinityRouteToPath: () => encodeInfinityRouteToPath,\n  encodeMixedRouteToPath: () => encodeMixedRouteToPath,\n  getAllV3PoolsFromSubgraph: () => getAllV3PoolsFromSubgraph,\n  getBestTrade: () => getBestTrade3,\n  getCandidatePools: () => getCandidatePools,\n  getCheckAgainstBaseTokens: () => getCheckAgainstBaseTokens,\n  getCommonTokenPrices: () => getCommonTokenPrices,\n  getCommonTokenPricesByLlma: () => getCommonTokenPricesByLlma,\n  getCommonTokenPricesBySubgraph: () => getCommonTokenPricesBySubgraph,\n  getCommonTokenPricesByWalletApi: () => getCommonTokenPricesByWalletApi,\n  getCurrenciesOfPool: () => getCurrenciesOfPool,\n  getExecutionPrice: () => getExecutionPrice,\n  getMidPrice: () => getMidPrice,\n  getOutputCurrency: () => getOutputCurrency,\n  getOutputOfPools: () => getOutputOfPools,\n  getPairCombinations: () => getPairCombinations,\n  getPoolAddress: () => getPoolAddress,\n  getPriceImpact: () => getPriceImpact,\n  getStableCandidatePools: () => getStableCandidatePools,\n  getStablePoolsOnChain: () => getStablePoolsOnChain,\n  getTokenUsdPricesBySubgraph: () => getTokenUsdPricesBySubgraph,\n  getV2CandidatePools: () => getV2CandidatePools,\n  getV2PoolSubgraph: () => getV2PoolSubgraph,\n  getV2PoolsOnChain: () => getV2PoolsOnChain,\n  getV2PoolsWithTvlByCommonTokenPrices: () => getV2PoolsWithTvlByCommonTokenPrices,\n  getV3CandidatePools: () => getV3CandidatePools,\n  getV3PoolSubgraph: () => getV3PoolSubgraph,\n  getV3PoolsWithTvlFromOnChain: () => getV3PoolsWithTvlFromOnChain,\n  getV3PoolsWithTvlFromOnChainFallback: () => getV3PoolsWithTvlFromOnChainFallback,\n  getV3PoolsWithTvlFromOnChainStaticFallback: () => getV3PoolsWithTvlFromOnChainStaticFallback,\n  getV3PoolsWithoutTicksOnChain: () => getV3PoolsWithoutTicksOnChain,\n  infinityPoolTvlSelector: () => infinityPoolTvlSelector,\n  involvesCurrency: () => involvesCurrency,\n  isInfinityBinPool: () => isInfinityBinPool,\n  isInfinityClPool: () => isInfinityClPool,\n  isStablePool: () => isStablePool,\n  isV2Pool: () => isV2Pool,\n  isV3Pool: () => isV3Pool,\n  log: () => log,\n  logger: () => logger,\n  maximumAmountIn: () => maximumAmountIn,\n  metric: () => metric,\n  minimumAmountOut: () => minimumAmountOut,\n  partitionMixedRouteByProtocol: () => partitionMixedRouteByProtocol,\n  v2PoolSubgraphSelection: () => v2PoolTvlSelector,\n  v2PoolTvlSelector: () => v2PoolTvlSelector,\n  v3PoolSubgraphSelection: () => v3PoolTvlSelector,\n  v3PoolTvlSelector: () => v3PoolTvlSelector,\n  v3PoolsOnChainProviderFactory: () => v3PoolsOnChainProviderFactory\n});\n\n// ../utils/Graph.ts\nvar Graph = class {\n  constructor(getVertexKey) {\n    this.adjacencyMap = /* @__PURE__ */ new Map();\n    this.vertexMap = /* @__PURE__ */ new Map();\n    this.getVertexKey = getVertexKey;\n  }\n  addVertex(vertex) {\n    const key = this.getVertexKey(vertex);\n    if (!this.adjacencyMap.has(key)) {\n      this.adjacencyMap.set(key, []);\n      this.vertexMap.set(key, vertex);\n    }\n  }\n  addEdge(from, to, edge, cost = 1) {\n    this.addVertex(from);\n    this.addVertex(to);\n    const fromKey = this.getVertexKey(from);\n    const neighbors = this.adjacencyMap.get(fromKey);\n    const existingNeighbor = neighbors.find((n) => this.getVertexKey(n.node) === this.getVertexKey(to));\n    if (existingNeighbor) {\n      existingNeighbor.edges.push({ edge, cost });\n    } else {\n      neighbors.push({\n        node: to,\n        edges: [{ edge, cost }]\n      });\n    }\n  }\n  findPaths(from, to, type = \"dijkstra\", maxHops = Infinity) {\n    switch (type) {\n      case \"dijkstra\":\n        return this.dijkstra(from, to, maxHops);\n      case \"dfs\":\n        return this.dfsAllPaths(from, to, maxHops);\n      default:\n        throw new Error(`Unsupported algorithm type: ${type}`);\n    }\n  }\n  dfsAllPaths(from, to, maxHops) {\n    const fromKey = this.getVertexKey(from);\n    const toKey = this.getVertexKey(to);\n    const results = [];\n    const visited = /* @__PURE__ */ new Set();\n    const dfs = (currentKey, path, edges, cost) => {\n      if (path.length > maxHops + 1)\n        return;\n      if (currentKey === toKey) {\n        results.push({\n          path: path.map((key) => this.vertexMap.get(key)),\n          edges: [...edges],\n          totalCost: cost\n        });\n        return;\n      }\n      visited.add(currentKey);\n      const neighbors = this.adjacencyMap.get(currentKey) || [];\n      for (const neighbor of neighbors) {\n        const neighborKey = this.getVertexKey(neighbor.node);\n        if (!visited.has(neighborKey)) {\n          for (const { edge, cost: edgeCost } of neighbor.edges) {\n            dfs(neighborKey, [...path, neighborKey], [...edges, edge], cost + edgeCost);\n          }\n        }\n      }\n      visited.delete(currentKey);\n    };\n    dfs(fromKey, [fromKey], [], 0);\n    return results;\n  }\n  dijkstra(from, to, maxHops) {\n    const fromKey = this.getVertexKey(from);\n    const toKey = this.getVertexKey(to);\n    const bestCost = /* @__PURE__ */ new Map();\n    const queue = [{ vertexKey: fromKey, cost: 0, path: [fromKey], edges: [] }];\n    const results = [];\n    while (queue.length > 0) {\n      queue.sort((a, b) => a.cost - b.cost);\n      const current = queue.shift();\n      if ((bestCost.get(current.vertexKey) ?? Infinity) < current.cost)\n        continue;\n      bestCost.set(current.vertexKey, current.cost);\n      if (current.vertexKey === toKey && current.path.length <= maxHops + 1) {\n        results.push(current);\n        continue;\n      }\n      if (current.path.length > maxHops + 1)\n        continue;\n      const neighbors = this.adjacencyMap.get(current.vertexKey) || [];\n      for (const neighbor of neighbors) {\n        const neighborKey = this.getVertexKey(neighbor.node);\n        for (const { edge, cost } of neighbor.edges) {\n          const newCost = current.cost + cost;\n          if ((bestCost.get(neighborKey) ?? Infinity) > newCost) {\n            queue.push({\n              vertexKey: neighborKey,\n              cost: newCost,\n              path: [...current.path, neighborKey],\n              edges: [...current.edges, edge]\n            });\n          }\n        }\n      }\n    }\n    return results.map((res) => ({\n      path: res.path.map((key) => this.vertexMap.get(key)),\n      edges: res.edges,\n      totalCost: res.cost\n    }));\n  }\n};\n\n// evm/v3-router/functions/computeAllRoutesNew.ts\nfunction computeAllRoutesNew(input, output, candidatePools, maxHops = 3, quoteId) {\n  const logger3 = RemoteLogger.getLogger(quoteId);\n  logger3.metric(`computeAllRoutesNew`, 1);\n  const graph = new Graph((c) => c.wrapped.address);\n  candidatePools.forEach((pool) => {\n    const currencies = getCurrenciesOfPool(pool);\n    const tokenA = currencies[0];\n    const tokenB = currencies[1];\n    graph.addEdge(tokenA, tokenB, pool);\n    graph.addEdge(tokenB, tokenA, pool);\n    logger3.debug(`add pool ${poolInfoStr(pool)}`);\n  });\n  const paths = graph.findPaths(input, output, \"dfs\", maxHops);\n  const routes = paths.map(({ edges }) => buildBaseRoute(edges, input, output));\n  logger3.metric(`route find`, 1);\n  return routes;\n}\nfunction getTokenPriceByNumber(baseCurrency, quoteCurrency, price) {\n  const quoteAmount = tryParseAmount_default(String(price), baseCurrency);\n  const baseAmount = tryParseAmount_default(\"1\", quoteCurrency);\n  if (!baseAmount || !quoteAmount) {\n    return void 0;\n  }\n  return new sdk.Price({ baseAmount, quoteAmount });\n}\nasync function createGasModel({\n  gasPriceWei,\n  poolProvider,\n  quoteCurrency,\n  blockNumber,\n  quoteCurrencyUsdPrice,\n  nativeCurrencyUsdPrice\n}) {\n  const { chainId } = quoteCurrency;\n  const usdToken = getUsdGasToken(chainId);\n  if (!usdToken) {\n    throw new Error(`No valid usd token found on chain ${chainId}`);\n  }\n  const nativeWrappedToken = getNativeWrappedToken(chainId);\n  if (!nativeWrappedToken) {\n    throw new Error(`Unsupported chain ${chainId}. Native wrapped token not found.`);\n  }\n  const gasPrice = BigInt(typeof gasPriceWei === \"function\" ? await gasPriceWei() : gasPriceWei);\n  const [usdPool, nativePool] = await Promise.all([\n    getHighestLiquidityUSDPool(poolProvider, chainId, blockNumber),\n    getHighestLiquidityNativePool(poolProvider, quoteCurrency, blockNumber)\n  ]);\n  const priceInUsd = quoteCurrencyUsdPrice ? getTokenPriceByNumber(usdToken, quoteCurrency, quoteCurrencyUsdPrice) : void 0;\n  const nativePriceInUsd = nativeCurrencyUsdPrice ? getTokenPriceByNumber(usdToken, nativeWrappedToken, nativeCurrencyUsdPrice) : void 0;\n  const priceInNative = priceInUsd && nativePriceInUsd ? nativePriceInUsd.multiply(priceInUsd.invert()) : void 0;\n  const estimateGasCost2 = ({ pools }, { initializedTickCrossedList }) => {\n    const isQuoteNative = nativeWrappedToken.equals(quoteCurrency.wrapped);\n    const totalInitializedTicksCrossed = BigInt(Math.max(1, sum__default.default(initializedTickCrossedList)));\n    const poolTypeSet = /* @__PURE__ */ new Set();\n    let baseGasUse = 0n;\n    for (const pool of pools) {\n      const { type } = pool;\n      if (isV2Pool(pool)) {\n        if (!poolTypeSet.has(type)) {\n          baseGasUse += chunkGYU5FW7D_js.BASE_SWAP_COST_V2;\n          poolTypeSet.add(type);\n          continue;\n        }\n        baseGasUse += chunkGYU5FW7D_js.COST_PER_EXTRA_HOP_V2;\n        continue;\n      }\n      if (isV3Pool(pool)) {\n        if (!poolTypeSet.has(type)) {\n          baseGasUse += chunkGYU5FW7D_js.BASE_SWAP_COST_V3(chainId);\n          poolTypeSet.add(type);\n        }\n        baseGasUse += chunkGYU5FW7D_js.COST_PER_HOP_V3(chainId);\n        continue;\n      }\n      if (isStablePool(pool)) {\n        if (!poolTypeSet.has(type)) {\n          baseGasUse += chunkGYU5FW7D_js.BASE_SWAP_COST_STABLE_SWAP;\n          poolTypeSet.add(type);\n          continue;\n        }\n        baseGasUse += chunkGYU5FW7D_js.COST_PER_EXTRA_HOP_STABLE_SWAP;\n        continue;\n      }\n    }\n    const tickGasUse = chunkGYU5FW7D_js.COST_PER_INIT_TICK(chainId) * totalInitializedTicksCrossed;\n    const uninitializedTickGasUse = chunkGYU5FW7D_js.COST_PER_UNINIT_TICK * 0n;\n    baseGasUse = baseGasUse + tickGasUse + uninitializedTickGasUse;\n    const baseGasCostWei = gasPrice * baseGasUse;\n    const totalGasCostNativeCurrency = sdk.CurrencyAmount.fromRawAmount(nativeWrappedToken, baseGasCostWei);\n    let gasCostInToken = sdk.CurrencyAmount.fromRawAmount(quoteCurrency.wrapped, 0);\n    let gasCostInUSD = sdk.CurrencyAmount.fromRawAmount(usdToken, 0);\n    try {\n      if (isQuoteNative) {\n        gasCostInToken = totalGasCostNativeCurrency;\n      }\n      if (!isQuoteNative) {\n        const price = priceInNative || nativePool && getTokenPrice(nativePool, nativeWrappedToken, quoteCurrency.wrapped);\n        if (price) {\n          gasCostInToken = price.quote(totalGasCostNativeCurrency);\n        }\n      }\n      const nativeTokenUsdPrice = nativePriceInUsd || usdPool && getTokenPrice(usdPool, nativeWrappedToken, usdToken);\n      if (nativeTokenUsdPrice) {\n        gasCostInUSD = nativeTokenUsdPrice.quote(totalGasCostNativeCurrency);\n      }\n    } catch (e) {\n    }\n    return {\n      gasEstimate: baseGasUse,\n      gasCostInToken: isQuoteNative && quoteCurrency.isNative ? sdk.CurrencyAmount.fromRawAmount(sdk.Native.onChain(chainId), gasCostInToken.quotient) : gasCostInToken,\n      gasCostInUSD\n    };\n  };\n  return {\n    estimateGasCost: estimateGasCost2\n  };\n}\nasync function getHighestLiquidityNativePool(poolProvider, currency, blockNumber) {\n  const nativeWrappedToken = getNativeWrappedToken(currency.chainId);\n  if (!nativeWrappedToken || currency.wrapped.equals(nativeWrappedToken)) {\n    return null;\n  }\n  const pools = await poolProvider.getCandidatePools({\n    blockNumber,\n    pairs: [[nativeWrappedToken, currency]],\n    currencyA: nativeWrappedToken,\n    currencyB: currency\n  });\n  return pools[0] ?? null;\n}\nasync function getHighestLiquidityUSDPool(poolProvider, chainId, blockNumber) {\n  const usdToken = getUsdGasToken(chainId);\n  const nativeWrappedToken = getNativeWrappedToken(chainId);\n  if (!usdToken || !nativeWrappedToken) {\n    return null;\n  }\n  const pools = await poolProvider.getCandidatePools({\n    blockNumber,\n    pairs: [[nativeWrappedToken, usdToken]],\n    currencyA: nativeWrappedToken,\n    currencyB: usdToken\n  });\n  return pools[0] ?? null;\n}\nasync function getRoutesWithValidQuote({\n  amount,\n  baseRoutes,\n  distributionPercent = 5,\n  quoteProvider,\n  tradeType,\n  blockNumber,\n  gasModel,\n  quoterOptimization = true,\n  signal,\n  quoteId\n}) {\n  const logger3 = RemoteLogger.getLogger(quoteId);\n  logger3.debug(\"run getRoutesWithValidQuote\");\n  const [percents, amounts] = getAmountDistribution(amount, distributionPercent);\n  const routesWithoutQuote = amounts.reduce(\n    (acc, curAmount, i) => [\n      ...acc,\n      ...baseRoutes.map((r) => ({\n        ...r,\n        amount: curAmount,\n        percent: percents[i]\n      }))\n    ],\n    []\n  );\n  logger3.debug(`quote calls=${routesWithoutQuote.length}`, 2);\n  for (const route of routesWithoutQuote) {\n    logger3.debug(\n      `quote call, ${route.percent}% ${route.pools.map((x) => getPoolAddress(x)).join(\",\")} ${route.input.symbol} ${route.output.symbol} ${route.amount.quotient}`,\n      3\n    );\n  }\n  const getRoutesWithQuote = tradeType === sdk.TradeType.EXACT_INPUT ? quoteProvider.getRouteWithQuotesExactIn : quoteProvider.getRouteWithQuotesExactOut;\n  if (!quoterOptimization) {\n    return getRoutesWithQuote(routesWithoutQuote, { blockNumber, gasModel, signal, quoteId });\n  }\n  logger3.debug(\"via quote optimization\", 2);\n  const requestCallback = typeof window === \"undefined\" ? setTimeout : window.requestIdleCallback || window.setTimeout;\n  logger3.debug(`Get quotes from ${routesWithoutQuote.length} routes routesWithoutQuote`, 2);\n  const getQuotes = (routes) => new Promise((resolve, reject) => {\n    requestCallback(async () => {\n      try {\n        const result2 = await getRoutesWithQuote(routes, { blockNumber, gasModel, signal });\n        resolve(result2);\n      } catch (e) {\n        reject(e);\n      }\n    });\n  });\n  const chunks = chunk__default.default(routesWithoutQuote, 10);\n  const result = await Promise.all(chunks.map(getQuotes));\n  const quotes = result.reduce((acc, cur) => {\n    acc.push(...cur);\n    return acc;\n  }, []);\n  logger3.debug(`Get quotes success, got, ${quotes.length}`);\n  return quotes;\n}\n\n// evm/v3-router/getBestTrade.ts\nasync function getBestTrade3(amount, currency, tradeType, config) {\n  const logger3 = RemoteLogger.getLogger(config.quoteId);\n  logger3.debug(\n    `[SmartRouter] getBestTrade ${config.quoteId}, [${sdk.TradeType[tradeType]}] input=${amount.toExact()} ${currency.symbol} maxSplits=${config.maxSplits} maxHops=${config.maxHops}`\n  );\n  try {\n    const { blockNumber: blockNumberFromConfig } = config;\n    const blockNumber = typeof blockNumberFromConfig === \"function\" ? await blockNumberFromConfig() : blockNumberFromConfig;\n    const bestRoutes = await getBestRoutes(\n      amount,\n      currency,\n      tradeType,\n      {\n        ...config,\n        blockNumber\n      },\n      config.quoteId\n    );\n    if (!bestRoutes || bestRoutes.outputAmount.equalTo(sdk.ZERO)) {\n      logger3.debug(\"No valid route found\");\n      throw new Error(\"Cannot find a valid swap route\");\n    }\n    const { routes, gasEstimateInUSD, gasEstimate, inputAmount, outputAmount } = bestRoutes;\n    const trade = {\n      tradeType,\n      routes,\n      gasEstimate,\n      gasEstimateInUSD,\n      inputAmount,\n      outputAmount,\n      blockNumber\n    };\n    logger3.debug(`find trade`);\n    return trade;\n  } catch (ex) {\n    logger3.debug(`Error in getBestTrade ${ex}`);\n    throw ex;\n  } finally {\n    logger3.flush();\n  }\n}\nasync function getBestRoutes(amount, currency, tradeType, routeConfig, quoteId) {\n  const { chainId } = currency;\n  const {\n    maxHops = 3,\n    maxSplits = 4,\n    distributionPercent = 5,\n    poolProvider,\n    quoteProvider,\n    blockNumber,\n    gasPriceWei,\n    allowedPoolTypes,\n    quoterOptimization,\n    quoteCurrencyUsdPrice,\n    nativeCurrencyUsdPrice,\n    signal\n  } = {\n    ...routeConfig,\n    ...ROUTE_CONFIG_BY_CHAIN[chainId] || {}\n  };\n  const logger3 = RemoteLogger.getLogger(quoteId);\n  const isExactIn = tradeType === sdk.TradeType.EXACT_INPUT;\n  const inputCurrency = isExactIn ? amount.currency : currency;\n  const outputCurrency = isExactIn ? currency : amount.currency;\n  const candidatePools = await poolProvider?.getCandidatePools({\n    currencyA: amount.currency,\n    currencyB: currency,\n    blockNumber,\n    protocols: allowedPoolTypes,\n    signal\n  });\n  logger3.debug(`Candidate pools: ${candidatePools.length}, maxSplits=${maxSplits}, maxHops=${maxHops}`);\n  logPools(quoteId, candidatePools, 2);\n  let baseRoutes = computeAllRoutesNew(inputCurrency, outputCurrency, candidatePools, maxHops, quoteId);\n  if (tradeType === sdk.TradeType.EXACT_OUTPUT) {\n    baseRoutes = baseRoutes.filter(({ type }) => type !== 3 /* MIXED */);\n  }\n  logger3.debug(`Discovered ${baseRoutes.length} Base routes, maxShow = 10`);\n  logRoutes(quoteId, baseRoutes.slice(0, 10), 2);\n  const gasModel = await createGasModel({\n    gasPriceWei,\n    poolProvider,\n    quoteCurrency: currency,\n    blockNumber,\n    quoteCurrencyUsdPrice,\n    nativeCurrencyUsdPrice\n  });\n  const routesWithValidQuote = await getRoutesWithValidQuote({\n    amount,\n    baseRoutes,\n    distributionPercent,\n    quoteProvider,\n    tradeType,\n    blockNumber,\n    gasModel,\n    quoterOptimization,\n    quoteId,\n    signal\n  });\n  logger3.debug(`valid route=${routesWithValidQuote.length}, maxShow=100`);\n  return getBestRouteCombinationByQuotes(amount, currency, routesWithValidQuote, tradeType, { maxSplits }, quoteId);\n}\n\n// evm/v3-router/schema.ts\nvar schema_exports2 = {};\nchunkGYU5FW7D_js.__export(schema_exports2, {\n  zPools: () => zPools2,\n  zRouterGetParams: () => zRouterGetParams,\n  zRouterPostParams: () => zRouterPostParams2\n});\nvar zChainId2 = zod.z.nativeEnum(chains.ChainId);\nvar zFee2 = zod.z.number();\nvar zTradeType2 = zod.z.nativeEnum(sdk.TradeType);\nvar zPoolType = zod.z.nativeEnum(PoolType);\nvar zPoolTypes = zod.z.array(zPoolType);\nvar zAddress2 = zod.z.custom((val) => /^0x[a-fA-F0-9]{40}$/.test(val));\nvar zHex2 = zod.z.custom((val) => /^0x[a-fA-F0-9]*$/.test(val));\nvar zHooksRegistrationBitmap2 = zod.z.number().or(zHex2);\nvar zBigNumber2 = zod.z.string().regex(/^[0-9]+$/);\nvar zCurrency2 = zod.z.object({\n  address: zAddress2,\n  decimals: zod.z.number(),\n  symbol: zod.z.string()\n}).required();\nvar zCurrencyAmount2 = zod.z.object({\n  currency: zCurrency2.required(),\n  value: zBigNumber2\n}).required();\nvar zV2Pool2 = zod.z.object({\n  type: zod.z.literal(0 /* V2 */),\n  reserve0: zCurrencyAmount2,\n  reserve1: zCurrencyAmount2\n}).required();\nvar zV3Pool2 = zod.z.object({\n  type: zod.z.literal(1 /* V3 */),\n  token0: zCurrency2,\n  token1: zCurrency2,\n  fee: zFee2,\n  liquidity: zBigNumber2,\n  sqrtRatioX96: zBigNumber2,\n  tick: zod.z.number(),\n  address: zAddress2,\n  token0ProtocolFee: zod.z.string(),\n  token1ProtocolFee: zod.z.string()\n}).required();\nvar zStablePool2 = zod.z.object({\n  type: zod.z.literal(2 /* STABLE */),\n  balances: zod.z.array(zCurrencyAmount2),\n  amplifier: zBigNumber2,\n  fee: zod.z.string(),\n  address: zAddress2\n}).required();\nvar zInfinityClPool2 = zod.z.object({\n  type: zod.z.literal(3 /* InfinityCL */),\n  currency0: zCurrency2,\n  currency1: zCurrency2,\n  fee: zFee2,\n  liquidity: zBigNumber2,\n  sqrtRatioX96: zBigNumber2,\n  tick: zod.z.number(),\n  tickSpacing: zod.z.number(),\n  poolManager: zAddress2,\n  id: zHex2\n}).required().extend({\n  protocolFee: zFee2.optional(),\n  hooks: zAddress2.optional(),\n  hooksRegistrationBitmap: zHooksRegistrationBitmap2.optional()\n});\nvar zInfinityBinPool2 = zod.z.object({\n  type: zod.z.literal(4 /* InfinityBIN */),\n  currency0: zCurrency2,\n  currency1: zCurrency2,\n  fee: zFee2,\n  activeId: zod.z.number(),\n  binStep: zod.z.number(),\n  poolManager: zAddress2,\n  id: zHex2\n}).required().extend({\n  protocolFee: zFee2.optional(),\n  hooks: zAddress2.optional(),\n  hooksRegistrationBitmap: zHooksRegistrationBitmap2.optional()\n});\nvar zPools2 = zod.z.array(zod.z.union([zV2Pool2, zV3Pool2, zStablePool2, zInfinityClPool2, zInfinityBinPool2]));\nvar zRouterGetParams = zod.z.object({\n  chainId: zChainId2,\n  tradeType: zTradeType2,\n  amount: zCurrencyAmount2,\n  currency: zCurrency2,\n  gasPriceWei: zBigNumber2.optional(),\n  maxHops: zod.z.number().optional(),\n  maxSplits: zod.z.number().optional(),\n  blockNumber: zBigNumber2.optional(),\n  poolTypes: zPoolTypes.optional()\n}).required({\n  chainId: true,\n  tradeType: true,\n  amount: true,\n  currency: true,\n  candidatePools: true\n});\nvar zRouterPostParams2 = zod.z.object({\n  chainId: zChainId2,\n  tradeType: zTradeType2,\n  amount: zCurrencyAmount2,\n  currency: zCurrency2,\n  candidatePools: zPools2,\n  gasPriceWei: zBigNumber2.optional(),\n  maxHops: zod.z.number().optional(),\n  maxSplits: zod.z.number().optional(),\n  blockNumber: zBigNumber2.optional(),\n  poolTypes: zPoolTypes.optional(),\n  onChainQuoterGasLimit: zBigNumber2.optional(),\n  nativeCurrencyUsdPrice: zod.z.number().optional(),\n  quoteCurrencyUsdPrice: zod.z.number().optional(),\n  account: zAddress2.optional()\n}).required({\n  chainId: true,\n  tradeType: true,\n  amount: true,\n  currency: true,\n  candidatePools: true\n});\n\nObject.defineProperty(exports, 'ADDITIONAL_BASES', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.ADDITIONAL_BASES; }\n});\nObject.defineProperty(exports, 'ADDRESS_THIS', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.ADDRESS_THIS; }\n});\nObject.defineProperty(exports, 'BASES_TO_CHECK_TRADES_AGAINST', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.BASES_TO_CHECK_TRADES_AGAINST; }\n});\nObject.defineProperty(exports, 'BASE_SWAP_COST_STABLE_SWAP', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.BASE_SWAP_COST_STABLE_SWAP; }\n});\nObject.defineProperty(exports, 'BASE_SWAP_COST_V2', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.BASE_SWAP_COST_V2; }\n});\nObject.defineProperty(exports, 'BASE_SWAP_COST_V3', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.BASE_SWAP_COST_V3; }\n});\nObject.defineProperty(exports, 'BATCH_MULTICALL_CONFIGS', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.BATCH_MULTICALL_CONFIGS; }\n});\nObject.defineProperty(exports, 'BETTER_TRADE_LESS_HOPS_THRESHOLD', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.BETTER_TRADE_LESS_HOPS_THRESHOLD; }\n});\nObject.defineProperty(exports, 'BIG_INT_TEN', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.BIG_INT_TEN; }\n});\nObject.defineProperty(exports, 'BIN_HOOK_PRESETS_BY_CHAIN', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.BIN_HOOK_PRESETS_BY_CHAIN; }\n});\nObject.defineProperty(exports, 'BIN_PRESETS_BY_CHAIN', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.BIN_PRESETS_BY_CHAIN; }\n});\nObject.defineProperty(exports, 'BIPS_BASE', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.BIPS_BASE; }\n});\nObject.defineProperty(exports, 'CL_HOOK_PRESETS_BY_CHAIN', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.CL_HOOK_PRESETS_BY_CHAIN; }\n});\nObject.defineProperty(exports, 'CL_PRESETS', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.CL_PRESETS; }\n});\nObject.defineProperty(exports, 'CL_PRESETS_BY_CHAIN', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.CL_PRESETS_BY_CHAIN; }\n});\nObject.defineProperty(exports, 'COST_PER_EXTRA_HOP_STABLE_SWAP', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.COST_PER_EXTRA_HOP_STABLE_SWAP; }\n});\nObject.defineProperty(exports, 'COST_PER_EXTRA_HOP_V2', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.COST_PER_EXTRA_HOP_V2; }\n});\nObject.defineProperty(exports, 'COST_PER_HOP_V3', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.COST_PER_HOP_V3; }\n});\nObject.defineProperty(exports, 'COST_PER_INIT_TICK', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.COST_PER_INIT_TICK; }\n});\nObject.defineProperty(exports, 'COST_PER_UNINIT_TICK', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.COST_PER_UNINIT_TICK; }\n});\nObject.defineProperty(exports, 'CUSTOM_BASES', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.CUSTOM_BASES; }\n});\nObject.defineProperty(exports, 'EMPTY_HOOK', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.EMPTY_HOOK; }\n});\nObject.defineProperty(exports, 'InfinityFeeTier', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.InfinityFeeTier; }\n});\nObject.defineProperty(exports, 'MIN_BNB', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.MIN_BNB; }\n});\nObject.defineProperty(exports, 'MIXED_ROUTE_QUOTER_ADDRESSES', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.MIXED_ROUTE_QUOTER_ADDRESSES; }\n});\nObject.defineProperty(exports, 'MSG_SENDER', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.MSG_SENDER; }\n});\nObject.defineProperty(exports, 'SMART_ROUTER_ADDRESSES', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.SMART_ROUTER_ADDRESSES; }\n});\nObject.defineProperty(exports, 'STABLE_SWAP_INFO_ADDRESS', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.STABLE_SWAP_INFO_ADDRESS; }\n});\nObject.defineProperty(exports, 'V2_FEE_PATH_PLACEHOLDER', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.V2_FEE_PATH_PLACEHOLDER; }\n});\nObject.defineProperty(exports, 'V2_ROUTER_ADDRESS', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.V2_ROUTER_ADDRESS; }\n});\nObject.defineProperty(exports, 'V3_QUOTER_ADDRESSES', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.V3_QUOTER_ADDRESSES; }\n});\nObject.defineProperty(exports, 'V3_TICK_LENS_ADDRESSES', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.V3_TICK_LENS_ADDRESSES; }\n});\nObject.defineProperty(exports, 'usdGasTokensByChain', {\n  enumerable: true,\n  get: function () { return chunkGYU5FW7D_js.usdGasTokensByChain; }\n});\nexports.InfinityMixedQuoterActions = InfinityMixedQuoterActions;\nexports.InfinityRouter = infinity_router_exports;\nexports.PoolType = PoolType;\nexports.RouteType = RouteType;\nexports.SmartRouter = smartRouter_exports;\nexports.SwapRouter = SwapRouter;\nexports.Transformer = transformer_exports;\nexports.feeOnTransferDetectorAddresses = feeOnTransferDetectorAddresses;\nexports.fetchTokenFeeOnTransfer = fetchTokenFeeOnTransfer;\nexports.fetchTokenFeeOnTransferBatch = fetchTokenFeeOnTransferBatch;\nexports.getPoolAddress = getPoolAddress;\nexports.getRouteTypeByPools = getRouteTypeByPools;\n"]}