[
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "owner_",
                "type": "address"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "errorId_",
                "type": "uint256"
            }
        ],
        "name": "FluidDexError",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "errorId_",
                "type": "uint256"
            }
        ],
        "name": "FluidDexFactoryError",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "shares_",
                "type": "uint256"
            }
        ],
        "name": "FluidDexLiquidityOutput",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "token0Amt",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "token1Amt",
                "type": "uint256"
            }
        ],
        "name": "FluidDexPerfectLiquidityOutput",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "tokenAmt",
                "type": "uint256"
            }
        ],
        "name": "FluidDexSingleTokenOutput",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "amountOut",
                "type": "uint256"
            }
        ],
        "name": "FluidDexSwapResult",
        "type": "error"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "dex",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "uint256",
                "name": "dexId",
                "type": "uint256"
            }
        ],
        "name": "DexDeployed",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "deployer",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "bool",
                "name": "allowed",
                "type": "bool"
            }
        ],
        "name": "LogSetDeployer",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "dexAuth",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "bool",
                "name": "allowed",
                "type": "bool"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "dex",
                "type": "address"
            }
        ],
        "name": "LogSetDexAuth",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "dexDeploymentLogic",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "bool",
                "name": "allowed",
                "type": "bool"
            }
        ],
        "name": "LogSetDexDeploymentLogic",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "globalAuth",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "bool",
                "name": "allowed",
                "type": "bool"
            }
        ],
        "name": "LogSetGlobalAuth",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "user",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "newOwner",
                "type": "address"
            }
        ],
        "name": "OwnershipTransferred",
        "type": "event"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "dexDeploymentLogic_",
                "type": "address"
            },
            {
                "internalType": "bytes",
                "name": "dexDeploymentData_",
                "type": "bytes"
            }
        ],
        "name": "deployDex",
        "outputs": [
            {
                "internalType": "address",
                "name": "dex_",
                "type": "address"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "dexId_",
                "type": "uint256"
            }
        ],
        "name": "getDexAddress",
        "outputs": [
            {
                "internalType": "address",
                "name": "dex_",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "deployer_",
                "type": "address"
            }
        ],
        "name": "isDeployer",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "dex_",
                "type": "address"
            }
        ],
        "name": "isDex",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "dex_",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "dexAuth_",
                "type": "address"
            }
        ],
        "name": "isDexAuth",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "dexDeploymentLogic_",
                "type": "address"
            }
        ],
        "name": "isDexDeploymentLogic",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "globalAuth_",
                "type": "address"
            }
        ],
        "name": "isGlobalAuth",
        "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": "slot_",
                "type": "bytes32"
            }
        ],
        "name": "readFromStorage",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "result_",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "deployer_",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "allowed_",
                "type": "bool"
            }
        ],
        "name": "setDeployer",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "dex_",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "dexAuth_",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "allowed_",
                "type": "bool"
            }
        ],
        "name": "setDexAuth",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "deploymentLogic_",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "allowed_",
                "type": "bool"
            }
        ],
        "name": "setDexDeploymentLogic",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "globalAuth_",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "allowed_",
                "type": "bool"
            }
        ],
        "name": "setGlobalAuth",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "target_",
                "type": "address"
            },
            {
                "internalType": "bytes",
                "name": "data_",
                "type": "bytes"
            }
        ],
        "name": "spell",
        "outputs": [
            {
                "internalType": "bytes",
                "name": "response_",
                "type": "bytes"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "totalDexes",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "newOwner",
                "type": "address"
            }
        ],
        "name": "transferOwnership",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    }
]
