[
  {
    "type": "event",
    "name": "Buy",
    "inputs": [
      {
        "name": "buyer",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "tokenAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "collateralAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "refund",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "tradeFee",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "curveProgressBps",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "virtualCollateralReserves",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "virtualTokenReserves",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "collateralReserves",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "tokenReserves",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "MarketcapReached",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "NewBasememeTaxTokenParams",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "bondingCurve",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "collateralToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "mainPool",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "taxProcessor",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "dividendContract",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "taxRateBps",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "taxDuration",
        "type": "uint64",
        "indexed": false,
        "internalType": "uint64"
      },
      {
        "name": "antiFarmerDuration",
        "type": "uint64",
        "indexed": false,
        "internalType": "uint64"
      },
      {
        "name": "minBuyBackQuote",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "processorFeeRateCurve",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "processorFeeRateDex",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "processorMarketBps",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "processorDeflationBps",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "processorLpBps",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "processorDividendBps",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "minimumShareBalance",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "marketAddress",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "NewBasememeToken",
    "inputs": [
      {
        "name": "addr",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "bondingCurve",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "creator",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "signature",
        "type": "bytes",
        "indexed": false,
        "internalType": "bytes"
      },
      {
        "name": "platformReferrer",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "payoutRecipient",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "owner",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "nonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "name",
        "type": "string",
        "indexed": false,
        "internalType": "string"
      },
      {
        "name": "symbol",
        "type": "string",
        "indexed": false,
        "internalType": "string"
      },
      {
        "name": "tokenURI",
        "type": "string",
        "indexed": false,
        "internalType": "string"
      },
      {
        "name": "version",
        "type": "string",
        "indexed": false,
        "internalType": "string"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "NewBasememeTokenCurveParams",
    "inputs": [
      {
        "name": "addr",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "bondingCurve",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "initialTokenSupply",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "virtualCollateralReservesInitial",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "virtualTokenReservesInitial",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "feeBPS",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "mcLowerLimit",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "mcUpperLimit",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "tokensMigrationThreshold",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "fixedMigrationFee",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "poolCreationFee",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "firstBuyFee",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "targetCollectionAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "collateralToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "v4LpFee",
        "type": "uint24",
        "indexed": false,
        "internalType": "uint24"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "NewBasememeTokenDynamicParams",
    "inputs": [
      {
        "name": "addr",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "bondingCurve",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "profileId",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "targetRaise",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "sellBps",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "lockAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "virtualTokenReservesInitial",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "virtualCollateralReservesInitial",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "endPriceNum",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "endPriceDen",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "upperBelow",
        "type": "int24",
        "indexed": false,
        "internalType": "int24"
      },
      {
        "name": "lowerAbove",
        "type": "int24",
        "indexed": false,
        "internalType": "int24"
      },
      {
        "name": "lowBelowTick",
        "type": "int24",
        "indexed": false,
        "internalType": "int24"
      },
      {
        "name": "pairedToMigrateMin",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Sell",
    "inputs": [
      {
        "name": "seller",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "tokenAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "collateralAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "tradeFee",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "curveProgressBps",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "virtualCollateralReserves",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "virtualTokenReserves",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "collateralReserves",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "tokenReserves",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "V2Migrated",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "pairedToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "pair",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "tokenIn",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "pairedIn",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "liquidity",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "tokenDust",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "pairedDust",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "migrateFee",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "function",
    "name": "buyExactIn",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "buyExactInWithCollateral",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "buyExactOut",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "createBasememeTaxFactoryToken",
    "inputs": [
      {
        "name": "",
        "type": "tuple",
        "internalType": "struct IBasememeTaxFactoryImpl.CreateParams",
        "components": [
          {
            "name": "name",
            "type": "string",
            "internalType": "string"
          },
          {
            "name": "symbol",
            "type": "string",
            "internalType": "string"
          },
          {
            "name": "tokenURI",
            "type": "string",
            "internalType": "string"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "signature",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "tokenSalt",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "payoutRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "marketPayoutRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "marketVaultFactory",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "marketVaultData",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "collateralToken",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "targetRaise",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "lockBps",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "lockupDuration",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "vestingDuration",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "lockAdmin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taxRateBps",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "taxDuration",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "antiFarmerDuration",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "processorMarketBps",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "processorDeflationBps",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "processorLpBps",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "processorDividendBps",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "minimumShareBalance",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "createBasememeTaxFactoryTokenAndBuy",
    "inputs": [
      {
        "name": "",
        "type": "tuple",
        "internalType": "struct IBasememeTaxFactoryImpl.CreateParams",
        "components": [
          {
            "name": "name",
            "type": "string",
            "internalType": "string"
          },
          {
            "name": "symbol",
            "type": "string",
            "internalType": "string"
          },
          {
            "name": "tokenURI",
            "type": "string",
            "internalType": "string"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "signature",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "tokenSalt",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "payoutRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "marketPayoutRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "marketVaultFactory",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "marketVaultData",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "collateralToken",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "targetRaise",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "lockBps",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "lockupDuration",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "vestingDuration",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "lockAdmin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taxRateBps",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "taxDuration",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "antiFarmerDuration",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "processorMarketBps",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "processorDeflationBps",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "processorLpBps",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "processorDividendBps",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "minimumShareBalance",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "",
        "type": "tuple",
        "internalType": "struct IBasememeTaxFactoryImpl.BuyParams",
        "components": [
          {
            "name": "collateralAmountIn",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "tokenAmountMin",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "createBasememeTaxFactoryTokenBasic",
    "inputs": [
      {
        "name": "",
        "type": "tuple",
        "internalType": "struct IBasememeTaxFactoryImpl.BasicCreateParams",
        "components": [
          {
            "name": "name",
            "type": "string",
            "internalType": "string"
          },
          {
            "name": "symbol",
            "type": "string",
            "internalType": "string"
          },
          {
            "name": "tokenURI",
            "type": "string",
            "internalType": "string"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "signature",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "tokenSalt",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "payoutRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "collateralToken",
            "type": "address",
            "internalType": "address"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "migrate",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "readyForMigration",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "sellExactIn",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "sellExactOut",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "tokenToBondingCurve",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "tokenToCollateralToken",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  }
]
