[
    {
        "anonymous": false,
        "inputs": [],
        "name": "BasketStatusChanged",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": false,
                "internalType": "address[]",
                "name": "bAssets",
                "type": "address[]"
            },
            {
                "indexed": false,
                "internalType": "uint256[]",
                "name": "maxWeights",
                "type": "uint256[]"
            }
        ],
        "name": "BasketWeightsUpdated",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "bAsset",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "address",
                "name": "integrator",
                "type": "address"
            }
        ],
        "name": "BassetAdded",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "bAsset",
                "type": "address"
            }
        ],
        "name": "BassetRemoved",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "bAsset",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "enum MassetStructs.BassetStatus",
                "name": "status",
                "type": "uint8"
            }
        ],
        "name": "BassetStatusChanged",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": false,
                "internalType": "address",
                "name": "account",
                "type": "address"
            }
        ],
        "name": "Paused",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "bAsset",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "bool",
                "name": "enabled",
                "type": "bool"
            }
        ],
        "name": "TransferFeeEnabled",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": false,
                "internalType": "address",
                "name": "account",
                "type": "address"
            }
        ],
        "name": "Unpaused",
        "type": "event"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "basket",
        "outputs": [
            {
                "internalType": "uint8",
                "name": "maxBassets",
                "type": "uint8"
            },
            {
                "internalType": "bool",
                "name": "undergoingRecol",
                "type": "bool"
            },
            {
                "internalType": "bool",
                "name": "failed",
                "type": "bool"
            },
            {
                "internalType": "uint256",
                "name": "collateralisationRatio",
                "type": "uint256"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "name": "integrations",
        "outputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "mAsset",
        "outputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "nexus",
        "outputs": [
            {
                "internalType": "contract INexus",
                "name": "",
                "type": "address"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [],
        "name": "pause",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "paused",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [],
        "name": "unpause",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "address",
                "name": "_nexus",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_mAsset",
                "type": "address"
            },
            {
                "internalType": "address[]",
                "name": "_bAssets",
                "type": "address[]"
            },
            {
                "internalType": "address[]",
                "name": "_integrators",
                "type": "address[]"
            },
            {
                "internalType": "uint256[]",
                "name": "_weights",
                "type": "uint256[]"
            },
            {
                "internalType": "bool[]",
                "name": "_hasTransferFees",
                "type": "bool[]"
            }
        ],
        "name": "initialize",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "uint8",
                "name": "_bAssetIndex",
                "type": "uint8"
            },
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "_increaseAmount",
                "type": "uint256"
            }
        ],
        "name": "increaseVaultBalance",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "uint8[]",
                "name": "_bAssetIndices",
                "type": "uint8[]"
            },
            {
                "internalType": "address[]",
                "name": "",
                "type": "address[]"
            },
            {
                "internalType": "uint256[]",
                "name": "_increaseAmount",
                "type": "uint256[]"
            }
        ],
        "name": "increaseVaultBalances",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "uint8",
                "name": "_bAssetIndex",
                "type": "uint8"
            },
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "_decreaseAmount",
                "type": "uint256"
            }
        ],
        "name": "decreaseVaultBalance",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "uint8[]",
                "name": "_bAssetIndices",
                "type": "uint8[]"
            },
            {
                "internalType": "address[]",
                "name": "",
                "type": "address[]"
            },
            {
                "internalType": "uint256[]",
                "name": "_decreaseAmount",
                "type": "uint256[]"
            }
        ],
        "name": "decreaseVaultBalances",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [],
        "name": "collectInterest",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "interestCollected",
                "type": "uint256"
            },
            {
                "internalType": "uint256[]",
                "name": "gains",
                "type": "uint256[]"
            }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "address",
                "name": "_bAsset",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_integration",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "_isTransferFeeCharged",
                "type": "bool"
            }
        ],
        "name": "addBasset",
        "outputs": [
            {
                "internalType": "uint8",
                "name": "index",
                "type": "uint8"
            }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "address[]",
                "name": "_bAssets",
                "type": "address[]"
            },
            {
                "internalType": "uint256[]",
                "name": "_weights",
                "type": "uint256[]"
            }
        ],
        "name": "setBasketWeights",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "address",
                "name": "_bAsset",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "_flag",
                "type": "bool"
            }
        ],
        "name": "setTransferFeesFlag",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "address",
                "name": "_assetToRemove",
                "type": "address"
            }
        ],
        "name": "removeBasset",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "getBasket",
        "outputs": [
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "address",
                                "name": "addr",
                                "type": "address"
                            },
                            {
                                "internalType": "enum MassetStructs.BassetStatus",
                                "name": "status",
                                "type": "uint8"
                            },
                            {
                                "internalType": "bool",
                                "name": "isTransferFeeCharged",
                                "type": "bool"
                            },
                            {
                                "internalType": "uint256",
                                "name": "ratio",
                                "type": "uint256"
                            },
                            {
                                "internalType": "uint256",
                                "name": "maxWeight",
                                "type": "uint256"
                            },
                            {
                                "internalType": "uint256",
                                "name": "vaultBalance",
                                "type": "uint256"
                            }
                        ],
                        "internalType": "struct MassetStructs.Basset[]",
                        "name": "bassets",
                        "type": "tuple[]"
                    },
                    {
                        "internalType": "uint8",
                        "name": "maxBassets",
                        "type": "uint8"
                    },
                    {
                        "internalType": "bool",
                        "name": "undergoingRecol",
                        "type": "bool"
                    },
                    {
                        "internalType": "bool",
                        "name": "failed",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint256",
                        "name": "collateralisationRatio",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct MassetStructs.Basket",
                "name": "b",
                "type": "tuple"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "address",
                "name": "_bAsset",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            },
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "name": "prepareForgeBasset",
        "outputs": [
            {
                "internalType": "bool",
                "name": "isValid",
                "type": "bool"
            },
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "address",
                                "name": "addr",
                                "type": "address"
                            },
                            {
                                "internalType": "enum MassetStructs.BassetStatus",
                                "name": "status",
                                "type": "uint8"
                            },
                            {
                                "internalType": "bool",
                                "name": "isTransferFeeCharged",
                                "type": "bool"
                            },
                            {
                                "internalType": "uint256",
                                "name": "ratio",
                                "type": "uint256"
                            },
                            {
                                "internalType": "uint256",
                                "name": "maxWeight",
                                "type": "uint256"
                            },
                            {
                                "internalType": "uint256",
                                "name": "vaultBalance",
                                "type": "uint256"
                            }
                        ],
                        "internalType": "struct MassetStructs.Basset",
                        "name": "bAsset",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "integrator",
                        "type": "address"
                    },
                    {
                        "internalType": "uint8",
                        "name": "index",
                        "type": "uint8"
                    }
                ],
                "internalType": "struct MassetStructs.BassetDetails",
                "name": "bInfo",
                "type": "tuple"
            }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "internalType": "address",
                "name": "_input",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_output",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "_isMint",
                "type": "bool"
            }
        ],
        "name": "prepareSwapBassets",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            },
            {
                "internalType": "string",
                "name": "",
                "type": "string"
            },
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "address",
                                "name": "addr",
                                "type": "address"
                            },
                            {
                                "internalType": "enum MassetStructs.BassetStatus",
                                "name": "status",
                                "type": "uint8"
                            },
                            {
                                "internalType": "bool",
                                "name": "isTransferFeeCharged",
                                "type": "bool"
                            },
                            {
                                "internalType": "uint256",
                                "name": "ratio",
                                "type": "uint256"
                            },
                            {
                                "internalType": "uint256",
                                "name": "maxWeight",
                                "type": "uint256"
                            },
                            {
                                "internalType": "uint256",
                                "name": "vaultBalance",
                                "type": "uint256"
                            }
                        ],
                        "internalType": "struct MassetStructs.Basset",
                        "name": "bAsset",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "integrator",
                        "type": "address"
                    },
                    {
                        "internalType": "uint8",
                        "name": "index",
                        "type": "uint8"
                    }
                ],
                "internalType": "struct MassetStructs.BassetDetails",
                "name": "",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "address",
                                "name": "addr",
                                "type": "address"
                            },
                            {
                                "internalType": "enum MassetStructs.BassetStatus",
                                "name": "status",
                                "type": "uint8"
                            },
                            {
                                "internalType": "bool",
                                "name": "isTransferFeeCharged",
                                "type": "bool"
                            },
                            {
                                "internalType": "uint256",
                                "name": "ratio",
                                "type": "uint256"
                            },
                            {
                                "internalType": "uint256",
                                "name": "maxWeight",
                                "type": "uint256"
                            },
                            {
                                "internalType": "uint256",
                                "name": "vaultBalance",
                                "type": "uint256"
                            }
                        ],
                        "internalType": "struct MassetStructs.Basset",
                        "name": "bAsset",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "integrator",
                        "type": "address"
                    },
                    {
                        "internalType": "uint8",
                        "name": "index",
                        "type": "uint8"
                    }
                ],
                "internalType": "struct MassetStructs.BassetDetails",
                "name": "",
                "type": "tuple"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "address[]",
                "name": "_bAssets",
                "type": "address[]"
            },
            {
                "internalType": "uint256[]",
                "name": "",
                "type": "uint256[]"
            },
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "name": "prepareForgeBassets",
        "outputs": [
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "isValid",
                        "type": "bool"
                    },
                    {
                        "components": [
                            {
                                "internalType": "address",
                                "name": "addr",
                                "type": "address"
                            },
                            {
                                "internalType": "enum MassetStructs.BassetStatus",
                                "name": "status",
                                "type": "uint8"
                            },
                            {
                                "internalType": "bool",
                                "name": "isTransferFeeCharged",
                                "type": "bool"
                            },
                            {
                                "internalType": "uint256",
                                "name": "ratio",
                                "type": "uint256"
                            },
                            {
                                "internalType": "uint256",
                                "name": "maxWeight",
                                "type": "uint256"
                            },
                            {
                                "internalType": "uint256",
                                "name": "vaultBalance",
                                "type": "uint256"
                            }
                        ],
                        "internalType": "struct MassetStructs.Basset[]",
                        "name": "bAssets",
                        "type": "tuple[]"
                    },
                    {
                        "internalType": "address[]",
                        "name": "integrators",
                        "type": "address[]"
                    },
                    {
                        "internalType": "uint8[]",
                        "name": "indexes",
                        "type": "uint8[]"
                    }
                ],
                "internalType": "struct MassetStructs.ForgePropsMulti",
                "name": "props",
                "type": "tuple"
            }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "prepareRedeemMulti",
        "outputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "colRatio",
                        "type": "uint256"
                    },
                    {
                        "components": [
                            {
                                "internalType": "address",
                                "name": "addr",
                                "type": "address"
                            },
                            {
                                "internalType": "enum MassetStructs.BassetStatus",
                                "name": "status",
                                "type": "uint8"
                            },
                            {
                                "internalType": "bool",
                                "name": "isTransferFeeCharged",
                                "type": "bool"
                            },
                            {
                                "internalType": "uint256",
                                "name": "ratio",
                                "type": "uint256"
                            },
                            {
                                "internalType": "uint256",
                                "name": "maxWeight",
                                "type": "uint256"
                            },
                            {
                                "internalType": "uint256",
                                "name": "vaultBalance",
                                "type": "uint256"
                            }
                        ],
                        "internalType": "struct MassetStructs.Basset[]",
                        "name": "bAssets",
                        "type": "tuple[]"
                    },
                    {
                        "internalType": "address[]",
                        "name": "integrators",
                        "type": "address[]"
                    },
                    {
                        "internalType": "uint8[]",
                        "name": "indexes",
                        "type": "uint8[]"
                    }
                ],
                "internalType": "struct MassetStructs.RedeemPropsMulti",
                "name": "props",
                "type": "tuple"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "getBassets",
        "outputs": [
            {
                "components": [
                    {
                        "internalType": "address",
                        "name": "addr",
                        "type": "address"
                    },
                    {
                        "internalType": "enum MassetStructs.BassetStatus",
                        "name": "status",
                        "type": "uint8"
                    },
                    {
                        "internalType": "bool",
                        "name": "isTransferFeeCharged",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint256",
                        "name": "ratio",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maxWeight",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "vaultBalance",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct MassetStructs.Basset[]",
                "name": "bAssets",
                "type": "tuple[]"
            },
            {
                "internalType": "uint256",
                "name": "len",
                "type": "uint256"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "internalType": "address",
                "name": "_bAsset",
                "type": "address"
            }
        ],
        "name": "getBasset",
        "outputs": [
            {
                "components": [
                    {
                        "internalType": "address",
                        "name": "addr",
                        "type": "address"
                    },
                    {
                        "internalType": "enum MassetStructs.BassetStatus",
                        "name": "status",
                        "type": "uint8"
                    },
                    {
                        "internalType": "bool",
                        "name": "isTransferFeeCharged",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint256",
                        "name": "ratio",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maxWeight",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "vaultBalance",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct MassetStructs.Basset",
                "name": "bAsset",
                "type": "tuple"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "internalType": "address",
                "name": "_bAsset",
                "type": "address"
            }
        ],
        "name": "getBassetIntegrator",
        "outputs": [
            {
                "internalType": "address",
                "name": "integrator",
                "type": "address"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "address",
                "name": "_bAsset",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "_belowPeg",
                "type": "bool"
            }
        ],
        "name": "handlePegLoss",
        "outputs": [
            {
                "internalType": "bool",
                "name": "alreadyActioned",
                "type": "bool"
            }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "address",
                "name": "_bAsset",
                "type": "address"
            }
        ],
        "name": "negateIsolation",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "address",
                "name": "_bAsset",
                "type": "address"
            }
        ],
        "name": "failBasset",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    }
]
