[
  {
    "inputs": [
      {
        "internalType": "contract IWETH",
        "name": "weth",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "AccessDenied",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "AdvanceNonceFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "AlreadyFilled",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ArbitraryStaticCallFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "BadPool",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "BadSignature",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ETHTransferFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "EmptyPools",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "EthDepositRejected",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "GetAmountCallFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "IncorrectDataLength",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InsufficientBalance",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidMsgValue",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidatedOrder",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MakingAmountExceeded",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MakingAmountTooLow",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyOneAmountShouldBeZero",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OrderExpired",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "PermitLengthTooLow",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "PredicateIsNotTrue",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "PrivateOrder",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RFQBadSignature",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RFQPrivateOrder",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RFQSwapWithZeroAmount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RFQZeroTargetIsForbidden",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ReentrancyDetected",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RemainingAmountIsZero",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ReservesCallFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ReturnAmountIsNotEnough",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SafePermitBadLength",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SafeTransferFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SafeTransferFromFailed",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      },
      {
        "internalType": "bytes",
        "name": "res",
        "type": "bytes"
      }
    ],
    "name": "SimulationResults",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SwapAmountTooLarge",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SwapWithZeroAmount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TakingAmountExceeded",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TakingAmountIncreased",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TakingAmountTooHigh",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TransferFromMakerToTakerFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TransferFromTakerToMakerFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "UnknownOrder",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "WrongAmount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "WrongGetter",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ZeroMinReturn",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ZeroReturnAmount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ZeroTargetIsForbidden",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "maker",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newNonce",
        "type": "uint256"
      }
    ],
    "name": "NonceIncreased",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "maker",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "orderHash",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "remainingRaw",
        "type": "uint256"
      }
    ],
    "name": "OrderCanceled",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "maker",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "orderHash",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "remaining",
        "type": "uint256"
      }
    ],
    "name": "OrderFilled",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "orderHash",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "makingAmount",
        "type": "uint256"
      }
    ],
    "name": "OrderFilledRFQ",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "uint8",
        "name": "amount",
        "type": "uint8"
      }
    ],
    "name": "advanceNonce",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "offsets",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "and",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "target",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "arbitraryStaticCall",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "salt",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "makerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "takerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "maker",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "receiver",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "allowedSender",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "makingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "takingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "offsets",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "interactions",
            "type": "bytes"
          }
        ],
        "internalType": "struct OrderLib.Order",
        "name": "order",
        "type": "tuple"
      }
    ],
    "name": "cancelOrder",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "orderRemaining",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "orderHash",
        "type": "bytes32"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "orderInfo",
        "type": "uint256"
      }
    ],
    "name": "cancelOrderRFQ",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "orderInfo",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "additionalMask",
        "type": "uint256"
      }
    ],
    "name": "cancelOrderRFQ",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "salt",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "makerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "takerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "maker",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "receiver",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "allowedSender",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "makingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "takingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "offsets",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "interactions",
            "type": "bytes"
          }
        ],
        "internalType": "struct OrderLib.Order",
        "name": "order",
        "type": "tuple"
      }
    ],
    "name": "checkPredicate",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IClipperExchangeInterface",
        "name": "clipperExchange",
        "type": "address"
      },
      {
        "internalType": "contract IERC20",
        "name": "srcToken",
        "type": "address"
      },
      {
        "internalType": "contract IERC20",
        "name": "dstToken",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "inputAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "outputAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "goodUntil",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "vs",
        "type": "bytes32"
      }
    ],
    "name": "clipperSwap",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "returnAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IClipperExchangeInterface",
        "name": "clipperExchange",
        "type": "address"
      },
      {
        "internalType": "address payable",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "contract IERC20",
        "name": "srcToken",
        "type": "address"
      },
      {
        "internalType": "contract IERC20",
        "name": "dstToken",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "inputAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "outputAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "goodUntil",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "vs",
        "type": "bytes32"
      }
    ],
    "name": "clipperSwapTo",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "returnAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IClipperExchangeInterface",
        "name": "clipperExchange",
        "type": "address"
      },
      {
        "internalType": "address payable",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "contract IERC20",
        "name": "srcToken",
        "type": "address"
      },
      {
        "internalType": "contract IERC20",
        "name": "dstToken",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "inputAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "outputAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "goodUntil",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "vs",
        "type": "bytes32"
      },
      {
        "internalType": "bytes",
        "name": "permit",
        "type": "bytes"
      }
    ],
    "name": "clipperSwapToWithPermit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "returnAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "destroy",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "eq",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "salt",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "makerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "takerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "maker",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "receiver",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "allowedSender",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "makingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "takingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "offsets",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "interactions",
            "type": "bytes"
          }
        ],
        "internalType": "struct OrderLib.Order",
        "name": "order",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "signature",
        "type": "bytes"
      },
      {
        "internalType": "bytes",
        "name": "interaction",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "makingAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "takingAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "skipPermitAndThresholdAmount",
        "type": "uint256"
      }
    ],
    "name": "fillOrder",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "info",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "makerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "takerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "maker",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "allowedSender",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "makingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "takingAmount",
            "type": "uint256"
          }
        ],
        "internalType": "struct OrderRFQLib.OrderRFQ",
        "name": "order",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "signature",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "flagsAndAmount",
        "type": "uint256"
      }
    ],
    "name": "fillOrderRFQ",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "info",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "makerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "takerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "maker",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "allowedSender",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "makingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "takingAmount",
            "type": "uint256"
          }
        ],
        "internalType": "struct OrderRFQLib.OrderRFQ",
        "name": "order",
        "type": "tuple"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "vs",
        "type": "bytes32"
      },
      {
        "internalType": "uint256",
        "name": "flagsAndAmount",
        "type": "uint256"
      }
    ],
    "name": "fillOrderRFQCompact",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "filledMakingAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "filledTakingAmount",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "orderHash",
        "type": "bytes32"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "info",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "makerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "takerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "maker",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "allowedSender",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "makingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "takingAmount",
            "type": "uint256"
          }
        ],
        "internalType": "struct OrderRFQLib.OrderRFQ",
        "name": "order",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "signature",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "flagsAndAmount",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "target",
        "type": "address"
      }
    ],
    "name": "fillOrderRFQTo",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "filledMakingAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "filledTakingAmount",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "orderHash",
        "type": "bytes32"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "info",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "makerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "takerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "maker",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "allowedSender",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "makingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "takingAmount",
            "type": "uint256"
          }
        ],
        "internalType": "struct OrderRFQLib.OrderRFQ",
        "name": "order",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "signature",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "flagsAndAmount",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "target",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "permit",
        "type": "bytes"
      }
    ],
    "name": "fillOrderRFQToWithPermit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "salt",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "makerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "takerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "maker",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "receiver",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "allowedSender",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "makingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "takingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "offsets",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "interactions",
            "type": "bytes"
          }
        ],
        "internalType": "struct OrderLib.Order",
        "name": "order_",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "signature",
        "type": "bytes"
      },
      {
        "internalType": "bytes",
        "name": "interaction",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "makingAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "takingAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "skipPermitAndThresholdAmount",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "target",
        "type": "address"
      }
    ],
    "name": "fillOrderTo",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "actualMakingAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "actualTakingAmount",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "orderHash",
        "type": "bytes32"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "salt",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "makerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "takerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "maker",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "receiver",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "allowedSender",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "makingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "takingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "offsets",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "interactions",
            "type": "bytes"
          }
        ],
        "internalType": "struct OrderLib.Order",
        "name": "order",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "signature",
        "type": "bytes"
      },
      {
        "internalType": "bytes",
        "name": "interaction",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "makingAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "takingAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "skipPermitAndThresholdAmount",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "target",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "permit",
        "type": "bytes"
      }
    ],
    "name": "fillOrderToWithPermit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "gt",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "salt",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "makerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "takerAsset",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "maker",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "receiver",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "allowedSender",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "makingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "takingAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "offsets",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "interactions",
            "type": "bytes"
          }
        ],
        "internalType": "struct OrderLib.Order",
        "name": "order",
        "type": "tuple"
      }
    ],
    "name": "hashOrder",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "increaseNonce",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "maker",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "slot",
        "type": "uint256"
      }
    ],
    "name": "invalidatorForOrderRFQ",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "lt",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "nonce",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "makerAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "makerNonce",
        "type": "uint256"
      }
    ],
    "name": "nonceEquals",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "offsets",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "or",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "orderHash",
        "type": "bytes32"
      }
    ],
    "name": "remaining",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "orderHash",
        "type": "bytes32"
      }
    ],
    "name": "remainingRaw",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32[]",
        "name": "orderHashes",
        "type": "bytes32[]"
      }
    ],
    "name": "remainingsRaw",
    "outputs": [
      {
        "internalType": "uint256[]",
        "name": "",
        "type": "uint256[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IERC20",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "rescueFunds",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "target",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "simulate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IAggregationExecutor",
        "name": "executor",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "contract IERC20",
            "name": "srcToken",
            "type": "address"
          },
          {
            "internalType": "contract IERC20",
            "name": "dstToken",
            "type": "address"
          },
          {
            "internalType": "address payable",
            "name": "srcReceiver",
            "type": "address"
          },
          {
            "internalType": "address payable",
            "name": "dstReceiver",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "amount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "minReturnAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "flags",
            "type": "uint256"
          }
        ],
        "internalType": "struct GenericRouter.SwapDescription",
        "name": "desc",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "permit",
        "type": "bytes"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "swap",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "returnAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "spentAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "time",
        "type": "uint256"
      }
    ],
    "name": "timestampBelow",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "timeNonceAccount",
        "type": "uint256"
      }
    ],
    "name": "timestampBelowAndNonceEquals",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "minReturn",
        "type": "uint256"
      },
      {
        "internalType": "uint256[]",
        "name": "pools",
        "type": "uint256[]"
      }
    ],
    "name": "uniswapV3Swap",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "returnAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "int256",
        "name": "amount0Delta",
        "type": "int256"
      },
      {
        "internalType": "int256",
        "name": "amount1Delta",
        "type": "int256"
      },
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }
    ],
    "name": "uniswapV3SwapCallback",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address payable",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "minReturn",
        "type": "uint256"
      },
      {
        "internalType": "uint256[]",
        "name": "pools",
        "type": "uint256[]"
      }
    ],
    "name": "uniswapV3SwapTo",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "returnAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address payable",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "contract IERC20",
        "name": "srcToken",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "minReturn",
        "type": "uint256"
      },
      {
        "internalType": "uint256[]",
        "name": "pools",
        "type": "uint256[]"
      },
      {
        "internalType": "bytes",
        "name": "permit",
        "type": "bytes"
      }
    ],
    "name": "uniswapV3SwapToWithPermit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "returnAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IERC20",
        "name": "srcToken",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "minReturn",
        "type": "uint256"
      },
      {
        "internalType": "uint256[]",
        "name": "pools",
        "type": "uint256[]"
      }
    ],
    "name": "unoswap",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "returnAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address payable",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "contract IERC20",
        "name": "srcToken",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "minReturn",
        "type": "uint256"
      },
      {
        "internalType": "uint256[]",
        "name": "pools",
        "type": "uint256[]"
      }
    ],
    "name": "unoswapTo",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "returnAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address payable",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "contract IERC20",
        "name": "srcToken",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "minReturn",
        "type": "uint256"
      },
      {
        "internalType": "uint256[]",
        "name": "pools",
        "type": "uint256[]"
      },
      {
        "internalType": "bytes",
        "name": "permit",
        "type": "bytes"
      }
    ],
    "name": "unoswapToWithPermit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "returnAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "stateMutability": "payable",
    "type": "receive"
  }
]