{
  "contractName": "DepositFactory",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_systemAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "depositCloneAddress",
          "type": "address"
        }
      ],
      "name": "DepositCloneCreated",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feeRebateToken",
      "outputs": [
        {
          "internalType": "contract FeeRebateToken",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "masterDepositAddress",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tbtcSystem",
      "outputs": [
        {
          "internalType": "contract TBTCSystem",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tbtcToken",
      "outputs": [
        {
          "internalType": "contract TBTCToken",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "vendingMachineAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_masterDepositAddress",
          "type": "address"
        },
        {
          "internalType": "contract TBTCSystem",
          "name": "_tbtcSystem",
          "type": "address"
        },
        {
          "internalType": "contract TBTCToken",
          "name": "_tbtcToken",
          "type": "address"
        },
        {
          "internalType": "contract TBTCDepositToken",
          "name": "_tbtcDepositToken",
          "type": "address"
        },
        {
          "internalType": "contract FeeRebateToken",
          "name": "_feeRebateToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_vendingMachineAddress",
          "type": "address"
        }
      ],
      "name": "setExternalDependencies",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_lotSizeSatoshis",
          "type": "uint64"
        }
      ],
      "name": "createDeposit",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_systemAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"depositCloneAddress\",\"type\":\"address\"}],\"name\":\"DepositCloneCreated\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_lotSizeSatoshis\",\"type\":\"uint64\"}],\"name\":\"createDeposit\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeRebateToken\",\"outputs\":[{\"internalType\":\"contract FeeRebateToken\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"masterDepositAddress\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_masterDepositAddress\",\"type\":\"address\"},{\"internalType\":\"contract TBTCSystem\",\"name\":\"_tbtcSystem\",\"type\":\"address\"},{\"internalType\":\"contract TBTCToken\",\"name\":\"_tbtcToken\",\"type\":\"address\"},{\"internalType\":\"contract TBTCDepositToken\",\"name\":\"_tbtcDepositToken\",\"type\":\"address\"},{\"internalType\":\"contract FeeRebateToken\",\"name\":\"_feeRebateToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vendingMachineAddress\",\"type\":\"address\"}],\"name\":\"setExternalDependencies\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tbtcSystem\",\"outputs\":[{\"internalType\":\"contract TBTCSystem\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tbtcToken\",\"outputs\":[{\"internalType\":\"contract TBTCToken\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"vendingMachineAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"We avoid redeployment of deposit contract by using the clone factory. Proxy delegates calls to Deposit and therefore does not affect deposit state. This means that we only need to deploy the deposit contracts once. The factory provides clean state for every new deposit clone.\",\"methods\":{\"createDeposit(uint64)\":{\"details\":\"Calls `Deposit.initializeDeposit` to initialize the instance. Mints      the TDT to the function caller. (See `TBTCDepositToken` for more      info on TDTs). Reverts if new deposits are currently paused, if the      specified lot size is not currently permitted, or if the selection      of the signers fails for any reason. Also reverts if the bonds      collateralizing the deposit would not be enough to cover a refund      of the deposit creation fee, should the signer group fail to      complete its setup process.\",\"return\":\"The address of the new deposit.\"},\"setExternalDependencies(address,address,address,address,address,address)\":{\"details\":\"Set the required external variables.\",\"params\":{\"_feeRebateToken\":\"AFee Rebate Token contract.\",\"_masterDepositAddress\":\"The address of the master deposit contract.\",\"_tbtcDepositToken\":\"TBTC Deposit Token contract.\",\"_tbtcSystem\":\"Tbtc system contract.\",\"_tbtcToken\":\"TBTC token contract.\",\"_vendingMachineAddress\":\"Address of the Vending Machine contract.\"}}},\"title\":\"Deposit Factory\"},\"userdoc\":{\"methods\":{\"createDeposit(uint64)\":{\"notice\":\"Creates a new deposit instance and mints a TDT. This function is         currently the only way to create a new deposit.\"}},\"notice\":\"Factory for the creation of new deposit clones.\"}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/proxy/DepositFactory.sol\":\"DepositFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/DepositLog.sol\":{\"keccak256\":\"0xd2422abaf64bf2d28f4c0548bc31c3d0e4c5f3e4414486c149b773bea0c9db0a\",\"urls\":[\"bzz-raw://c4b0e3caea108ce67da5922906753dc1a1f87cee923e7c32260239150f2152bb\",\"dweb:/ipfs/QmcHcftf4M6ZyuFG725QiFGHuAtz6zDQZ9HCEaoP5Wb6Fd\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/Deposit.sol\":{\"keccak256\":\"0x4e25c6bfe874c5254659e99b5d87ad0bd6299468106c8f955e973a0431367dec\",\"urls\":[\"bzz-raw://c54c7e956fee91813946745f23d11062a9dd2c07d916979871f7468509295de4\",\"dweb:/ipfs/QmQ1qFjzq9uY7SmdUqzwNM7z8AAnCbji2joqkJYJSBaJyW\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositFunding.sol\":{\"keccak256\":\"0xe223f4e039e347d3eec8eea8d30d6f87f25ab3f8839e96b5da608c6a012db2c2\",\"urls\":[\"bzz-raw://48435948a4b232a3c610f7ac51e5c87a27aa10f92775bc95cd2068dd07b69a70\",\"dweb:/ipfs/Qmd7PeN1uovU8BqyrPuLkKf4U1DENt9S7hFr6G5cXFamim\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositLiquidation.sol\":{\"keccak256\":\"0x6ec98705ac0cfc20f2e94069ba88c74816c40283c47b3086cf619b69d8a15379\",\"urls\":[\"bzz-raw://981e7e1ababfe4bb7bb35251679f59d188348c416af29822794011a0e48f2cd3\",\"dweb:/ipfs/QmTpPQCYP3qzKdcMBLBZGRSM2X6rgR1CZmYDQ7SHP4pjrb\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositRedemption.sol\":{\"keccak256\":\"0xe40c0cbb443715c4f587b78f568348276fabae9a2f77645596367a1f65b1fae5\",\"urls\":[\"bzz-raw://310d07df39ad769b5ffca044a1a589686268d72ac36d568360da3a4a9ab16f93\",\"dweb:/ipfs/QmT9stQ2AVkF7i9nvDSTswhD6EkfNHVCtTmRENsVqYxwso\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositStates.sol\":{\"keccak256\":\"0x0b407fe4cfa56771c7cb0280e58c23e6c79089bb0f39ec9af83855103cfadce0\",\"urls\":[\"bzz-raw://b06c9ff8c10125cd7dcee7167fd081c95248c97c699a4dfc92bf65d68774f5f1\",\"dweb:/ipfs/QmcdTkj1XtJcPhF9pxr56xV4DW3SxGaaiE5PeGxbYVoHL3\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol\":{\"keccak256\":\"0xc18e532fc384f45567abcf7fbe7bccb885308d63ffeed41d9cf845573a289b98\",\"urls\":[\"bzz-raw://7250e8fce13326313e64d2f24e093bd51c9fdba939b8370f64a1fe820814275b\",\"dweb:/ipfs/QmVfX5w4xN6gxoqbdgPeeTbBvFtxxaNYWSknSY7JDtve2b\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/OutsourceDepositLogging.sol\":{\"keccak256\":\"0x8bddca84b4106ea5d865b5e19c0d49f3dc94a7e614c7403ae05074eda01d6ee9\",\"urls\":[\"bzz-raw://65b05f6e04ae46a16194db335ad21dd806d0b07ad571a126b6981896890c8a4c\",\"dweb:/ipfs/QmTF4RgELhXX7pooNKwW8qNY7Sr7dFY7vfueApjTMa99jt\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/external/IMedianizer.sol\":{\"keccak256\":\"0xbe5c1dbd0f097ed0ef72e2a61ab54de315685a835e7dc7f5d3404b5158189c67\",\"urls\":[\"bzz-raw://0519b1ce42540d07debfa8b62a52c6c44b309ea549cc4d3166d4fd821aec9b79\",\"dweb:/ipfs/QmYD2cojTyk2ZDrWrTKSthVUAPydzAgPrpRWeiwJyksPJV\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ISatWeiPriceFeed.sol\":{\"keccak256\":\"0x41bdcc0cfbd415d58fdc01cc54adeb832933f31895d1f9a26c8eab16518d6d96\",\"urls\":[\"bzz-raw://b4c69fdffa322a4276032fe2ee0cbb950c81afff7dcd78eb18dddabc4fe2d015\",\"dweb:/ipfs/QmaJUvL5HNChwyrNN82Es5vhVZ9pHwgdsj9uEcUhBFR43R\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITBTCSystem.sol\":{\"keccak256\":\"0xd8530ab1baddbdfbba6c1b03e547375afe79493b9948d645f94fc0da12ec953b\",\"urls\":[\"bzz-raw://713285a0a4d865a37f3770ce848c20f7277e1540c0a8aa43c2ae0966a7c3df9a\",\"dweb:/ipfs/QmaPiXxvySt9UDmQtVGidh8TQ4XJdxY2X61rEBd8346ELi\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITokenRecipient.sol\":{\"keccak256\":\"0x4ac6830ad44d0b0d70ebabc60150e9c915c7c0bd0129ef868d5d2cd8da0c32bd\",\"urls\":[\"bzz-raw://a5c6465285add41f07a951f90405800a8802e323ea11e9c7bdb5625ce109c7f7\",\"dweb:/ipfs/QmRf7B4WxsS7gbSwUotgQM633BQc2ye7rhYC1RNVFamBfp\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/proxy/CloneFactory.sol\":{\"keccak256\":\"0xdd6c92a00393f04b98d8749fe5e4235cfc2967d1486698a1b37db3dc6848f2f6\",\"urls\":[\"bzz-raw://ec57ffe219b198a4e494f950958e19455849e68a37d94545ddfdebb136ac17e4\",\"dweb:/ipfs/QmTcYbxJFdzdp75pcoTu83XdK1acK8rtWZNZEZz2E9HauH\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/proxy/DepositFactory.sol\":{\"keccak256\":\"0x21fa9b3591283735e7ae42a3b68f3c6cc2750b56b9727824e96a1786b2b17297\",\"urls\":[\"bzz-raw://07f3ffd287da573ff3d849fdd9826091b7e1f808a7cf6811727396c91de7124e\",\"dweb:/ipfs/QmShqBpzyx7gtopjV7wxpAZkdydduXuoThXotMjG5u7xe4\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/DepositFactoryAuthority.sol\":{\"keccak256\":\"0xd8e81ec58dea6a6bcc554e8c7e6c58898ab11a410c3f61224330cbe833992add\",\"urls\":[\"bzz-raw://9d2b23cf1e2f98eb77acf6ae62933e48494113e1d6091146459fd79a635f1dcf\",\"dweb:/ipfs/QmPK3nTmcrScDavDSXGHvonhfik3BJ55qhwSnUmhzL5QUE\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/FeeRebateToken.sol\":{\"keccak256\":\"0x3d9980b4b18be7e69364b93581d86d08dd2c66fc76b2f9f0af0b4911dc648318\",\"urls\":[\"bzz-raw://751dae1cd68c285a22b513d515074eb6704e11e00ba8196f360d47dc8551dd86\",\"dweb:/ipfs/QmRe5u8bjSd2CMvjgWMzpeea3VdcqEGwAP91zvjxgur8o8\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/KeepFactorySelection.sol\":{\"keccak256\":\"0x26d39ca282d933df1c349ab52be37c19af9f4f8d24f0fb25700ef221a8294d6f\",\"urls\":[\"bzz-raw://fc25c76e38172ca0e12f51aecc53ed498c3b1a6900b0f358f3404c5df22fc40b\",\"dweb:/ipfs/QmQvHwrufw7UaKkVmf15xvFXgSFYzNua2abFpQLjzibnV3\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCConstants.sol\":{\"keccak256\":\"0x74833fb25cf9f24716d563c8fad0fd6172d03577dc85ab4271ca4754285ee915\",\"urls\":[\"bzz-raw://62d37b71546ea52f0c86170b588b021a488785e8570f904f0d2bcfecee93f6a7\",\"dweb:/ipfs/QmePuD631VYpEproKbap8cPXmWeb5mYjU6bwEWnxKCVWbz\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCDepositToken.sol\":{\"keccak256\":\"0xd9238bbd83f5352706426103a0708ad7c00ffbd90340a4b3bab03d2c5371e48b\",\"urls\":[\"bzz-raw://f1fc94f00aeabd49bd0f8ecf372213e83c949454c28fa672a46dd12d9a0b4311\",\"dweb:/ipfs/QmaCzqi2g4GSvzHDDES61FauDmdTGGyZrCkK1BdxpMqYa3\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCSystem.sol\":{\"keccak256\":\"0x6f56aed8aa836939b416dacfd0ce1605c943d763647a5a75597781024248fe84\",\"urls\":[\"bzz-raw://2e1776056f6950ea5cd4893bbcd4418017cd3a417406c6c12c0714e93b8a3122\",\"dweb:/ipfs/QmaaTR6wcbxwPC4c6PNbCath2N4pmAKW2Q5ECY567HNwv4\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCSystemAuthority.sol\":{\"keccak256\":\"0xc072c71402f122e3ae148000b95559169cb39b8752977817f4f88b372e7d77dd\",\"urls\":[\"bzz-raw://9c91b71602bf36f66d6ab24156777a2ef18c027f09055232011f9012387e6c70\",\"dweb:/ipfs/QmYAEZ8ithnhVcdCt76mqeJg6P8ZY3VejsV7pQNvMMFqc2\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol\":{\"keccak256\":\"0x167b07029df8d350996d7f82d853437d1a2562401eeac98037c2eb4c5f295319\",\"urls\":[\"bzz-raw://7d2601ac8dcd5d59b3e479a61262de2162c96ed7ad1cd161331e2e4500b8346a\",\"dweb:/ipfs/QmWVjBSvHFg9W5zsSxgdpNSYKgfLa28fr3mPjjKQaDBxmk\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/VendingMachine.sol\":{\"keccak256\":\"0x26caaccd71277d1807d40553f4e7291307d4db9c292bc28a9d8cbee94b5c3e40\",\"urls\":[\"bzz-raw://b7ec73a87fe902bfc5d0fcda5fcc16d2dc025e685fc7b7876ec1a1da65cf0ede\",\"dweb:/ipfs/QmcBkU6Ze8T3ewqZZmUiniTKZkVaQTaNFejXXRgvfiTrPE\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/VendingMachineAuthority.sol\":{\"keccak256\":\"0x7ad8a2cee5e6bbc187d04b147dc0d2bc2ae12bb8c3680870be9013dd5543bfd6\",\"urls\":[\"bzz-raw://733f2370c788437b0034c40a8df07f4714009769ed8134a9c656e2a103996687\",\"dweb:/ipfs/Qma9LAGQDzyUvsbhLx3FUKRCx3FmnoZuMxG4SUdjLr8bRm\"]},\"@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol\":{\"keccak256\":\"0x8f1edc0a2dfb4d167d190989ebc1c4256664e50ec1f82dfaeb25fa5d4a76a35a\",\"urls\":[\"bzz-raw://e815868907cc082fee1e3964be7de12da2161863d68dd1532a74e3a97bacf533\",\"dweb:/ipfs/Qmd8DqutKSwxh38WWA1ydftNkiAxSD9sqxa7qf1asHKA8c\"]},\"@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeepFactory.sol\":{\"keccak256\":\"0x07ae883d2a0f5b7fe2c0b055206f565da51b04d1ca574ae4d4da3a19e6badcdb\",\"urls\":[\"bzz-raw://038b4f5b45b2d676ef7411b69cadd490d5789e3d245afd78aaa72177ce042572\",\"dweb:/ipfs/QmRaBYU4HCDSH33a3gpLN4t2TsyNaFRxLKv3WeAZEgk9Rr\"]},\"@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol\":{\"keccak256\":\"0x461cc52e40ba53e646f5c9505b992baa3d5b3c98ae5718561e61b3bc6c726d52\",\"urls\":[\"bzz-raw://90cf2e608b660671642a616ec044e2a39e8ceb7079315b6133ec978c47af9f98\",\"dweb:/ipfs/QmX4hyYS99RYWiQ7BwLXuvQpU5x62YbjJWLgYFwrPkYbzT\"]},\"@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol\":{\"keccak256\":\"0x43451fdb4c4d55c01122411a4cf89a5c544c2bd4b646ee1d1f306626275324bf\",\"urls\":[\"bzz-raw://db93f07c32fa294d416aaab1b19a205772f2a3fa573fd380e5641e7770193ccf\",\"dweb:/ipfs/QmVE4y8cFKWZGKEfTM9Q3YreAArpMTTALHNr2tcvcNDnbi\"]},\"@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol\":{\"keccak256\":\"0x2fcbfa2440f69e346d5e14d960b14498f6484f83713fe7cec1ecf4abea3835a1\",\"urls\":[\"bzz-raw://4a385ef55a53dd0dcd1b687a47dbf6785580883a0be0cb10c617c338a35f3a8b\",\"dweb:/ipfs/QmZp9AT146beL3SoETJCWsJ4zzAZQavy9oGCYPiwAofEtq\"]},\"@summa-tx/bitcoin-spv-sol/contracts/SafeMath.sol\":{\"keccak256\":\"0x22d34c04c68c2a77ee83e2ef3756f6e6bad6ad675560d777e612315d7eb83935\",\"urls\":[\"bzz-raw://b642c61be1d34e153e4f9cc139291fa26f4ecf31a3acc5b960aad20f4f689eeb\",\"dweb:/ipfs/QmWADdVTCSyvtgb76AxFFkAr9h9jbY57Mj5X6xiEqCqmMu\"]},\"@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol\":{\"keccak256\":\"0x9af3b3f36de63e95977f09548617989e391b3c511cf0383ee35cefd5da7d3bfd\",\"urls\":[\"bzz-raw://97ce025c7d18540e4c24578db61cc5e33828be8e9a82b5cb5f46c99212f75ed1\",\"dweb:/ipfs/QmRrdWnd95rgCZzeaNiU4KUcGe1j7oDBj7LatpXhUmjbEE\"]},\"@summa-tx/relay-sol/contracts/Interfaces.sol\":{\"keccak256\":\"0x6f2698f8aab5cee319f36d69438b6870496a5523e7ccac4b465cdb38661242fa\",\"urls\":[\"bzz-raw://7f854c72db81631d1df800ae0c5fb0a50dc9efd97b0e6593b063c9fb1c61ef9e\",\"dweb:/ipfs/QmUMSQhzYKRSkLTGcHekjqvw1mLpeUULZkfffRdN521NBg\"]},\"@summa-tx/relay-sol/contracts/Relay.sol\":{\"keccak256\":\"0x4a6d12fa6570e2c787f9dc234edae9c1eb326e78eb2c6384c84d2b6ba0a0ad7e\",\"urls\":[\"bzz-raw://fa5365dc5a8312d0305568dbf297964be13567a7879395bfc3e99be2510e4e10\",\"dweb:/ipfs/QmfGZz6iL45xPcwQTT3XFAqb7McuY89niBEvfbhy513moF\"]},\"openzeppelin-solidity/contracts/drafts/Counters.sol\":{\"keccak256\":\"0x5eb69360d3441ab2ee799bd7c007cccbffb0896f12b2dfe1456193e2aa180a11\",\"urls\":[\"bzz-raw://072e8b5a1b5acfc2acba9b6fb87d1dc57065aad44572617ad46b014074969eb3\",\"dweb:/ipfs/QmVTDHUriaxBJqiWCWgWC8vYaYYfXSz883LsowzTx1DcpK\"]},\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xac2eacd7e7762e275442f28f21d821544df5aae2ed7698af13be8c41b7005e2e\",\"urls\":[\"bzz-raw://8bdbefb642e7b08535c66bbf074e576cfef2300cdf910c1e0b211f6393833a28\",\"dweb:/ipfs/QmQhfx2Ufr8a2gFXm3KogL66xGgAuAWMwcamkWFKGG6Vya\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzz-raw://b40442c5b350b57b88a081a1eacd2bac962d4ecc1f029f5447a18986f08f6f14\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610\",\"dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0xf79fb10e8235770eb4aea7249034076a3cc9f9119ad944fc48705bae9c9d20dc\",\"urls\":[\"bzz-raw://cd3429aa9a4878dcf6c73faa32c3722f4013d4be012ece543b246faa6b50f55c\",\"dweb:/ipfs/QmS55hgTvNEAKinus19m65CB4wcymN8EiUPFpRx5tYJ1i2\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x852793a3c2f86d336a683b30d688ec3dcfc57451af5a2bf5975cda3b7191a901\",\"urls\":[\"bzz-raw://4f5b57664069671648fb81f55b0082faecdf1b2f159eec6b1fa6cef9b7d73bc5\",\"dweb:/ipfs/QmcyytaLs7zFdb4Uu7C5PmQRhQdB3wA3fUdkV6mkYfdDFH\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0xc61b3603089b09a730d8ca72e9133a496cc4405da40e9b87c12f073245d774bf\",\"urls\":[\"bzz-raw://de8bb0003d53de236913f0e0102e7a9d015e02098f2495edd000f207fe2be2f4\",\"dweb:/ipfs/QmbtwNwAJEehWWL7yGGyyMoenQvcqtz91pqLgQPpLRoLYC\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzz-raw://d0abb99bb8bfc2bc0a89902b8ed1dc0442ad08cc78cee64c291b3df6a27bcccc\",\"dweb:/ipfs/QmP5NaEwZthQeM2ESz4WTT3osrP7jhbvu7ocbttBi2JAw6\"]},\"openzeppelin-solidity/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0xf151df411bbf4eaef1fc8e8480cd10c2cd985f1a36517e63981517610213efc1\",\"urls\":[\"bzz-raw://2a277b3cc3a1a03af5c039bc75cd16bb2d23b529cb2564cc0bea1b1e0eb4dd68\",\"dweb:/ipfs/QmNRxggY8qmjjuLnxggRqE8uBueuCktLwi9YYHagWoaEJ8\"]},\"openzeppelin-solidity/contracts/token/ERC721/ERC721Metadata.sol\":{\"keccak256\":\"0xe5e28b1a405164faa98f8ecd8ed2b00907b89e3d58b2b2bb8ac8b12bc5714489\",\"urls\":[\"bzz-raw://0d5d3f0caa7e7ec91f8a2894e1a6a3513a0c79aa91a498ebf8fdbdd07c12286f\",\"dweb:/ipfs/QmP7r4jQMRxXb5JHy5V9bgMz5FmTezcSDd7ivyzJN88pTR\"]},\"openzeppelin-solidity/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xce48937a8007c580b8e2e35705738c922dd17540de89ebee6df06d2917a3f9fc\",\"urls\":[\"bzz-raw://1d117265103ee3efcd454d3aafb3e79a115f9bca6dec78a1229558eb30d14d05\",\"dweb:/ipfs/QmTm5Z1c7zzPiG3Cfj1eBMB23AeiEFGgvmTFQVaeEWXVCw\"]},\"openzeppelin-solidity/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0x2b2b99dc7fe8fcd1f9427d00822b99cbc683dc21f5dd7532bd7e2281fd2c2ca2\",\"urls\":[\"bzz-raw://a8024c00e34efaf328f9592e76823c79f25fa0f6006bdf4a1e7fea204afd4773\",\"dweb:/ipfs/QmZns9jTr7843njq3J2iL2LLoWXK5mdzN1bDGd9GL3ahhD\"]},\"openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xadbfb7028fb0f851dc848a48b9e54e7c89ffd2c2edc12fa4ba9bb383dfaa83d9\",\"urls\":[\"bzz-raw://90dceab42713246639100b87d6650037d68e4a2ab2dd4b5768c3ed35d6b3a4a0\",\"dweb:/ipfs/QmQ42UW5nchMoYP9bU9F1AJga5chG8j92fCPkURpiDKsCu\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1\",\"urls\":[\"bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf\",\"dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506040516105633803806105638339818101604052602081101561003357600080fd5b5051600080546001600160a01b039092166001600160a01b03199092169190911790556104fe806100656000396000f3fe6080604052600436106100705760003560e01c8063b7947b401161004e578063b7947b40146100d0578063bbe2bbd5146100f7578063c3e26d9914610154578063e5d3d7141461016957610070565b80630873c713146100755780633fd8a4a4146100a65780639da1e244146100bb575b600080fd5b34801561008157600080fd5b5061008a61017e565b604080516001600160a01b039092168252519081900360200190f35b3480156100b257600080fd5b5061008a61018d565b3480156100c757600080fd5b5061008a61019c565b61008a600480360360208110156100e657600080fd5b503567ffffffffffffffff166101ab565b34801561010357600080fd5b50610152600480360360c081101561011a57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a001351661037f565b005b34801561016057600080fd5b5061008a610437565b34801561017557600080fd5b5061008a610446565b6006546001600160a01b031681565b6003546001600160a01b031681565b6001546001600160a01b031681565b60015460009081906101c5906001600160a01b0316610455565b604080516001600160a01b038316815290519192507f1d6e7961301df0f19b325bf7669f5b932069b5ad8f9b71292351c7bed17cf4f1919081900360200190a1600254604080516340c10f1960e01b81523360048201526001600160a01b038481166024830152915191909216916340c10f1991604480830192600092919082900301818387803b15801561025957600080fd5b505af115801561026d573d6000803e3d6000fd5b50506040805163189acdbd60e31b815230600482015290518493506001600160a01b038416925063c4d66de89160248082019260009290919082900301818387803b1580156102bb57600080fd5b505af11580156102cf573d6000803e3d6000fd5b5050600354600480546002546005546006546040805163a81e63f760e01b81526001600160a01b039788169681019690965293861660248601529185166044850152841660648401528316608483015267ffffffffffffffff891660a483015251918516935063a81e63f79250349160c480830192600092919082900301818588803b15801561035e57600080fd5b505af1158015610372573d6000803e3d6000fd5b5094979650505050505050565b6000546001600160a01b031633146103c85760405162461bcd60e51b81526004018080602001828103825260228152602001806104a86022913960400191505060405180910390fd5b600180546001600160a01b03199081166001600160a01b0398891617909155600280548216948816949094179093556003805484169587169590951790945560048054831693861693909317909255600580548216928516929092179091556006805490911691909216179055565b6005546001600160a01b031681565b6004546001600160a01b031681565b6000808260601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f094935050505056fe43616c6c6572206d757374206265207462746353797374656d20636f6e7472616374a265627a7a72315820b821668b2f65a3da48c1964167a6d750294a005027564a9bd78ffd33842ab87b64736f6c63430005110032",
  "deployedBytecode": "0x6080604052600436106100705760003560e01c8063b7947b401161004e578063b7947b40146100d0578063bbe2bbd5146100f7578063c3e26d9914610154578063e5d3d7141461016957610070565b80630873c713146100755780633fd8a4a4146100a65780639da1e244146100bb575b600080fd5b34801561008157600080fd5b5061008a61017e565b604080516001600160a01b039092168252519081900360200190f35b3480156100b257600080fd5b5061008a61018d565b3480156100c757600080fd5b5061008a61019c565b61008a600480360360208110156100e657600080fd5b503567ffffffffffffffff166101ab565b34801561010357600080fd5b50610152600480360360c081101561011a57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a001351661037f565b005b34801561016057600080fd5b5061008a610437565b34801561017557600080fd5b5061008a610446565b6006546001600160a01b031681565b6003546001600160a01b031681565b6001546001600160a01b031681565b60015460009081906101c5906001600160a01b0316610455565b604080516001600160a01b038316815290519192507f1d6e7961301df0f19b325bf7669f5b932069b5ad8f9b71292351c7bed17cf4f1919081900360200190a1600254604080516340c10f1960e01b81523360048201526001600160a01b038481166024830152915191909216916340c10f1991604480830192600092919082900301818387803b15801561025957600080fd5b505af115801561026d573d6000803e3d6000fd5b50506040805163189acdbd60e31b815230600482015290518493506001600160a01b038416925063c4d66de89160248082019260009290919082900301818387803b1580156102bb57600080fd5b505af11580156102cf573d6000803e3d6000fd5b5050600354600480546002546005546006546040805163a81e63f760e01b81526001600160a01b039788169681019690965293861660248601529185166044850152841660648401528316608483015267ffffffffffffffff891660a483015251918516935063a81e63f79250349160c480830192600092919082900301818588803b15801561035e57600080fd5b505af1158015610372573d6000803e3d6000fd5b5094979650505050505050565b6000546001600160a01b031633146103c85760405162461bcd60e51b81526004018080602001828103825260228152602001806104a86022913960400191505060405180910390fd5b600180546001600160a01b03199081166001600160a01b0398891617909155600280548216948816949094179093556003805484169587169590951790945560048054831693861693909317909255600580548216928516929092179091556006805490911691909216179055565b6005546001600160a01b031681565b6004546001600160a01b031681565b6000808260601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f094935050505056fe43616c6c6572206d757374206265207462746353797374656d20636f6e7472616374a265627a7a72315820b821668b2f65a3da48c1964167a6d750294a005027564a9bd78ffd33842ab87b64736f6c63430005110032",
  "sourceMap": "690:3153:15:-;;;1105:101;8:9:-1;5:2;;;30:1;27;20:12;5:2;1105:101:15;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1105:101:15;435:17:25;:38;;-1:-1:-1;;;;;435:38:25;;;-1:-1:-1;;;;;;435:38:25;;;;;;;;;690:3153:15;;;;;;",
  "deployedSourceMap": "690:3153:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1062:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1062:36:15;;;:::i;:::-;;;;-1:-1:-1;;;;;1062:36:15;;;;;;;;;;;;;;954:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;954:28:15;;;:::i;866:43::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;866:43:15;;;:::i;3117:724::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3117:724:15;;;;:::i;1700:567::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1700:567:15;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;1700:567:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1020:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1020:36:15;;;:::i;988:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;988:26:15;;;:::i;1062:36::-;;;-1:-1:-1;;;;;1062:36:15;;:::o;954:28::-;;;-1:-1:-1;;;;;954:28:15;;:::o;866:43::-;;;-1:-1:-1;;;;;866:43:15;;:::o;3117:724::-;3273:20;;3215:7;;;;3261:33;;-1:-1:-1;;;;;3273:20:15;3261:11;:33::i;:::-;3309;;;-1:-1:-1;;;;;3309:33:15;;;;;;3238:56;;-1:-1:-1;3309:33:15;;;;;;;;;;3370:16;;3353:108;;;-1:-1:-1;;;3353:108:15;;3406:10;3353:108;;;;-1:-1:-1;;;;;3430:21:15;;;3353:108;;;;;;3370:16;;;;;3353:39;;:108;;;;;3370:16;;3353:108;;;;;;;3370:16;;3353:108;;;5:2:-1;;;;30:1;27;20:12;5:2;3353:108:15;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3539:33:15;;;-1:-1:-1;;;3539:33:15;;3566:4;3539:33;;;;;;3514:12;;-1:-1:-1;;;;;;3539:18:15;;;-1:-1:-1;3539:18:15;;:33;;;;;3472:15;;3539:33;;;;;;;;3472:15;3539:18;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;3539:33:15;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3638:10:15;;3662:9;;;3685:16;;3715:14;;3743:21;;3582:222;;;-1:-1:-1;;;3582:222:15;;-1:-1:-1;;;;;3638:10:15;;;3582:222;;;;;;;3662:9;;;3582:222;;;;3685:16;;;3582:222;;;;3715:14;;3582:222;;;;3743:21;;3582:222;;;;;;;;;;;;:25;;;;-1:-1:-1;3582:25:15;;-1:-1:-1;3614:9:15;;3582:222;;;;;3638:10;;3582:222;;;;;;;3614:9;3582:25;:222;;;5:2:-1;;;;30:1;27;20:12;5:2;3582:222:15;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;3822:12:15;;3117:724;-1:-1:-1;;;;;;;3117:724:15:o;1700:567::-;647:17:25;;-1:-1:-1;;;;;647:17:25;633:10;:31;612:112;;;;-1:-1:-1;;;612:112:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2006:20:15;:44;;-1:-1:-1;;;;;;2006:44:15;;;-1:-1:-1;;;;;2006:44:15;;;;;;;2060:16;:36;;;;;;;;;;;;;;2106:10;:24;;;;;;;;;;;;;;2140:9;:22;;;;;;;;;;;;;;2172:14;:32;;;;;;;;;;;;;;2214:21;:46;;;;;;;;;;;;1700:567::o;1020:36::-;;;-1:-1:-1;;;;;1020:36:15;;:::o;988:26::-;;;-1:-1:-1;;;;;988:26:15;;:::o;1460:577:14:-;1515:14;1541:19;1571:6;1563:15;;1541:37;;1630:4;1624:11;-1:-1:-1;;;1672:5:14;1648:127;1813:11;1806:4;1799:5;1795:16;1788:37;-1:-1:-1;;;1873:4:14;1866:5;1862:16;1838:138;2016:4;2009:5;2006:1;1999:22;1989:32;1597:434;-1:-1:-1;;;;1597:434:14:o",
  "source": "pragma solidity 0.5.17;\n\nimport \"./CloneFactory.sol\";\nimport \"../deposit/Deposit.sol\";\nimport \"../system/TBTCSystem.sol\";\nimport \"../system/TBTCToken.sol\";\nimport \"../system/FeeRebateToken.sol\";\nimport \"../system/TBTCSystemAuthority.sol\";\nimport {TBTCDepositToken} from \"../system/TBTCDepositToken.sol\";\n\n/// @title Deposit Factory\n/// @notice Factory for the creation of new deposit clones.\n/// @dev We avoid redeployment of deposit contract by using the clone factory.\n/// Proxy delegates calls to Deposit and therefore does not affect deposit state.\n/// This means that we only need to deploy the deposit contracts once.\n/// The factory provides clean state for every new deposit clone.\ncontract DepositFactory is CloneFactory, TBTCSystemAuthority {\n    // Holds the address of the deposit contract\n    // which will be used as a master contract for cloning.\n    address payable public masterDepositAddress;\n    TBTCDepositToken tbtcDepositToken;\n    TBTCSystem public tbtcSystem;\n    TBTCToken public tbtcToken;\n    FeeRebateToken public feeRebateToken;\n    address public vendingMachineAddress;\n\n    constructor(address _systemAddress)\n        public\n        TBTCSystemAuthority(_systemAddress)\n    {}\n\n    /// @dev                          Set the required external variables.\n    /// @param _masterDepositAddress  The address of the master deposit contract.\n    /// @param _tbtcSystem            Tbtc system contract.\n    /// @param _tbtcToken             TBTC token contract.\n    /// @param _tbtcDepositToken      TBTC Deposit Token contract.\n    /// @param _feeRebateToken        AFee Rebate Token contract.\n    /// @param _vendingMachineAddress Address of the Vending Machine contract.\n    function setExternalDependencies(\n        address payable _masterDepositAddress,\n        TBTCSystem _tbtcSystem,\n        TBTCToken _tbtcToken,\n        TBTCDepositToken _tbtcDepositToken,\n        FeeRebateToken _feeRebateToken,\n        address _vendingMachineAddress\n    ) external onlyTbtcSystem {\n        masterDepositAddress = _masterDepositAddress;\n        tbtcDepositToken = _tbtcDepositToken;\n        tbtcSystem = _tbtcSystem;\n        tbtcToken = _tbtcToken;\n        feeRebateToken = _feeRebateToken;\n        vendingMachineAddress = _vendingMachineAddress;\n    }\n\n    event DepositCloneCreated(address depositCloneAddress);\n\n    /// @notice Creates a new deposit instance and mints a TDT. This function is\n    ///         currently the only way to create a new deposit.\n    /// @dev Calls `Deposit.initializeDeposit` to initialize the instance. Mints\n    ///      the TDT to the function caller. (See `TBTCDepositToken` for more\n    ///      info on TDTs). Reverts if new deposits are currently paused, if the\n    ///      specified lot size is not currently permitted, or if the selection\n    ///      of the signers fails for any reason. Also reverts if the bonds\n    ///      collateralizing the deposit would not be enough to cover a refund\n    ///      of the deposit creation fee, should the signer group fail to\n    ///      complete its setup process.\n    /// @return The address of the new deposit.\n    function createDeposit(uint64 _lotSizeSatoshis)\n        external\n        payable\n        returns (address)\n    {\n        address cloneAddress = createClone(masterDepositAddress);\n        emit DepositCloneCreated(cloneAddress);\n\n        TBTCDepositToken(tbtcDepositToken).mint(\n            msg.sender,\n            uint256(cloneAddress)\n        );\n\n        Deposit deposit = Deposit(address(uint160(cloneAddress)));\n        deposit.initialize(address(this));\n        deposit.initializeDeposit.value(msg.value)(\n            tbtcSystem,\n            tbtcToken,\n            tbtcDepositToken,\n            feeRebateToken,\n            vendingMachineAddress,\n            _lotSizeSatoshis\n        );\n\n        return cloneAddress;\n    }\n}\n",
  "sourcePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/proxy/DepositFactory.sol",
  "ast": {
    "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/proxy/DepositFactory.sol",
    "exportedSymbols": {
      "DepositFactory": [
        5910
      ]
    },
    "id": 5911,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5765,
        "literals": [
          "solidity",
          "0.5",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:15"
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/proxy/CloneFactory.sol",
        "file": "./CloneFactory.sol",
        "id": 5766,
        "nodeType": "ImportDirective",
        "scope": 5911,
        "sourceUnit": 5764,
        "src": "25:28:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/Deposit.sol",
        "file": "../deposit/Deposit.sol",
        "id": 5767,
        "nodeType": "ImportDirective",
        "scope": 5911,
        "sourceUnit": 1135,
        "src": "54:32:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCSystem.sol",
        "file": "../system/TBTCSystem.sol",
        "id": 5768,
        "nodeType": "ImportDirective",
        "scope": 5911,
        "sourceUnit": 8373,
        "src": "87:34:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol",
        "file": "../system/TBTCToken.sol",
        "id": 5769,
        "nodeType": "ImportDirective",
        "scope": 5911,
        "sourceUnit": 8562,
        "src": "122:33:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/FeeRebateToken.sol",
        "file": "../system/FeeRebateToken.sol",
        "id": 5770,
        "nodeType": "ImportDirective",
        "scope": 5911,
        "sourceUnit": 6301,
        "src": "156:38:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCSystemAuthority.sol",
        "file": "../system/TBTCSystemAuthority.sol",
        "id": 5771,
        "nodeType": "ImportDirective",
        "scope": 5911,
        "sourceUnit": 8400,
        "src": "195:43:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCDepositToken.sol",
        "file": "../system/TBTCDepositToken.sol",
        "id": 5773,
        "nodeType": "ImportDirective",
        "scope": 5911,
        "sourceUnit": 6845,
        "src": "239:64:15",
        "symbolAliases": [
          {
            "foreign": 5772,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5774,
              "name": "CloneFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5763,
              "src": "717:12:15",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CloneFactory_$5763",
                "typeString": "contract CloneFactory"
              }
            },
            "id": 5775,
            "nodeType": "InheritanceSpecifier",
            "src": "717:12:15"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5776,
              "name": "TBTCSystemAuthority",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8399,
              "src": "731:19:15",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TBTCSystemAuthority_$8399",
                "typeString": "contract TBTCSystemAuthority"
              }
            },
            "id": 5777,
            "nodeType": "InheritanceSpecifier",
            "src": "731:19:15"
          }
        ],
        "contractDependencies": [
          5763,
          8399
        ],
        "contractKind": "contract",
        "documentation": "@title Deposit Factory\n @notice Factory for the creation of new deposit clones.\n @dev We avoid redeployment of deposit contract by using the clone factory.\n Proxy delegates calls to Deposit and therefore does not affect deposit state.\n This means that we only need to deploy the deposit contracts once.\n The factory provides clean state for every new deposit clone.",
        "fullyImplemented": true,
        "id": 5910,
        "linearizedBaseContracts": [
          5910,
          8399,
          5763
        ],
        "name": "DepositFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 5779,
            "name": "masterDepositAddress",
            "nodeType": "VariableDeclaration",
            "scope": 5910,
            "src": "866:43:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 5778,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "866:15:15",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5781,
            "name": "tbtcDepositToken",
            "nodeType": "VariableDeclaration",
            "scope": 5910,
            "src": "915:33:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
              "typeString": "contract TBTCDepositToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 5780,
              "name": "TBTCDepositToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6844,
              "src": "915:16:15",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                "typeString": "contract TBTCDepositToken"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 5783,
            "name": "tbtcSystem",
            "nodeType": "VariableDeclaration",
            "scope": 5910,
            "src": "954:28:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_TBTCSystem_$8372",
              "typeString": "contract TBTCSystem"
            },
            "typeName": {
              "contractScope": null,
              "id": 5782,
              "name": "TBTCSystem",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8372,
              "src": "954:10:15",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TBTCSystem_$8372",
                "typeString": "contract TBTCSystem"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5785,
            "name": "tbtcToken",
            "nodeType": "VariableDeclaration",
            "scope": 5910,
            "src": "988:26:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_TBTCToken_$8561",
              "typeString": "contract TBTCToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 5784,
              "name": "TBTCToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8561,
              "src": "988:9:15",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TBTCToken_$8561",
                "typeString": "contract TBTCToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5787,
            "name": "feeRebateToken",
            "nodeType": "VariableDeclaration",
            "scope": 5910,
            "src": "1020:36:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
              "typeString": "contract FeeRebateToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 5786,
              "name": "FeeRebateToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6300,
              "src": "1020:14:15",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                "typeString": "contract FeeRebateToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 5789,
            "name": "vendingMachineAddress",
            "nodeType": "VariableDeclaration",
            "scope": 5910,
            "src": "1062:36:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 5788,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1062:7:15",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5797,
              "nodeType": "Block",
              "src": "1204:2:15",
              "statements": []
            },
            "documentation": null,
            "id": 5798,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 5794,
                    "name": "_systemAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5791,
                    "src": "1184:14:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 5795,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5793,
                  "name": "TBTCSystemAuthority",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8399,
                  "src": "1164:19:15",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_TBTCSystemAuthority_$8399_$",
                    "typeString": "type(contract TBTCSystemAuthority)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1164:35:15"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5791,
                  "name": "_systemAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 5798,
                  "src": "1117:22:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1117:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1116:24:15"
            },
            "returnParameters": {
              "id": 5796,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1204:0:15"
            },
            "scope": 5910,
            "src": "1105:101:15",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5839,
              "nodeType": "Block",
              "src": "1996:271:15",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5815,
                      "name": "masterDepositAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5779,
                      "src": "2006:20:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5816,
                      "name": "_masterDepositAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5800,
                      "src": "2029:21:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "2006:44:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 5818,
                  "nodeType": "ExpressionStatement",
                  "src": "2006:44:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5821,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5819,
                      "name": "tbtcDepositToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5781,
                      "src": "2060:16:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                        "typeString": "contract TBTCDepositToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5820,
                      "name": "_tbtcDepositToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5806,
                      "src": "2079:17:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                        "typeString": "contract TBTCDepositToken"
                      }
                    },
                    "src": "2060:36:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                      "typeString": "contract TBTCDepositToken"
                    }
                  },
                  "id": 5822,
                  "nodeType": "ExpressionStatement",
                  "src": "2060:36:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5823,
                      "name": "tbtcSystem",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5783,
                      "src": "2106:10:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TBTCSystem_$8372",
                        "typeString": "contract TBTCSystem"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5824,
                      "name": "_tbtcSystem",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5802,
                      "src": "2119:11:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TBTCSystem_$8372",
                        "typeString": "contract TBTCSystem"
                      }
                    },
                    "src": "2106:24:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TBTCSystem_$8372",
                      "typeString": "contract TBTCSystem"
                    }
                  },
                  "id": 5826,
                  "nodeType": "ExpressionStatement",
                  "src": "2106:24:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5829,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5827,
                      "name": "tbtcToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5785,
                      "src": "2140:9:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TBTCToken_$8561",
                        "typeString": "contract TBTCToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5828,
                      "name": "_tbtcToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5804,
                      "src": "2152:10:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TBTCToken_$8561",
                        "typeString": "contract TBTCToken"
                      }
                    },
                    "src": "2140:22:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TBTCToken_$8561",
                      "typeString": "contract TBTCToken"
                    }
                  },
                  "id": 5830,
                  "nodeType": "ExpressionStatement",
                  "src": "2140:22:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5831,
                      "name": "feeRebateToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5787,
                      "src": "2172:14:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                        "typeString": "contract FeeRebateToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5832,
                      "name": "_feeRebateToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5808,
                      "src": "2189:15:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                        "typeString": "contract FeeRebateToken"
                      }
                    },
                    "src": "2172:32:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                      "typeString": "contract FeeRebateToken"
                    }
                  },
                  "id": 5834,
                  "nodeType": "ExpressionStatement",
                  "src": "2172:32:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5835,
                      "name": "vendingMachineAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5789,
                      "src": "2214:21:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5836,
                      "name": "_vendingMachineAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5810,
                      "src": "2238:22:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2214:46:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5838,
                  "nodeType": "ExpressionStatement",
                  "src": "2214:46:15"
                }
              ]
            },
            "documentation": "@dev                          Set the required external variables.\n @param _masterDepositAddress  The address of the master deposit contract.\n @param _tbtcSystem            Tbtc system contract.\n @param _tbtcToken             TBTC token contract.\n @param _tbtcDepositToken      TBTC Deposit Token contract.\n @param _feeRebateToken        AFee Rebate Token contract.\n @param _vendingMachineAddress Address of the Vending Machine contract.",
            "id": 5840,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5813,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5812,
                  "name": "onlyTbtcSystem",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8398,
                  "src": "1981:14:15",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1981:14:15"
              }
            ],
            "name": "setExternalDependencies",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5811,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5800,
                  "name": "_masterDepositAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 5840,
                  "src": "1742:37:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 5799,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1742:15:15",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5802,
                  "name": "_tbtcSystem",
                  "nodeType": "VariableDeclaration",
                  "scope": 5840,
                  "src": "1789:22:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_TBTCSystem_$8372",
                    "typeString": "contract TBTCSystem"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5801,
                    "name": "TBTCSystem",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8372,
                    "src": "1789:10:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TBTCSystem_$8372",
                      "typeString": "contract TBTCSystem"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5804,
                  "name": "_tbtcToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 5840,
                  "src": "1821:20:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_TBTCToken_$8561",
                    "typeString": "contract TBTCToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5803,
                    "name": "TBTCToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8561,
                    "src": "1821:9:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TBTCToken_$8561",
                      "typeString": "contract TBTCToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5806,
                  "name": "_tbtcDepositToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 5840,
                  "src": "1851:34:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                    "typeString": "contract TBTCDepositToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5805,
                    "name": "TBTCDepositToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6844,
                    "src": "1851:16:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                      "typeString": "contract TBTCDepositToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5808,
                  "name": "_feeRebateToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 5840,
                  "src": "1895:30:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                    "typeString": "contract FeeRebateToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5807,
                    "name": "FeeRebateToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6300,
                    "src": "1895:14:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                      "typeString": "contract FeeRebateToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5810,
                  "name": "_vendingMachineAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 5840,
                  "src": "1935:30:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5809,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1935:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1732:239:15"
            },
            "returnParameters": {
              "id": 5814,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1996:0:15"
            },
            "scope": 5910,
            "src": "1700:567:15",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 5844,
            "name": "DepositCloneCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5843,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5842,
                  "indexed": false,
                  "name": "depositCloneAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 5844,
                  "src": "2299:27:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5841,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2299:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2298:29:15"
            },
            "src": "2273:55:15"
          },
          {
            "body": {
              "id": 5908,
              "nodeType": "Block",
              "src": "3228:613:15",
              "statements": [
                {
                  "assignments": [
                    5852
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5852,
                      "name": "cloneAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 5908,
                      "src": "3238:20:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5851,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3238:7:15",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5856,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5854,
                        "name": "masterDepositAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5779,
                        "src": "3273:20:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5853,
                      "name": "createClone",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5745,
                      "src": "3261:11:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$",
                        "typeString": "function (address) returns (address)"
                      }
                    },
                    "id": 5855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3261:33:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3238:56:15"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5858,
                        "name": "cloneAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5852,
                        "src": "3329:12:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5857,
                      "name": "DepositCloneCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5844,
                      "src": "3309:19:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3309:33:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5860,
                  "nodeType": "EmitStatement",
                  "src": "3304:38:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 5865,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18360,
                          "src": "3406:3:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3406:10:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5868,
                            "name": "cloneAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5852,
                            "src": "3438:12:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 5867,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3430:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3430:21:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5862,
                            "name": "tbtcDepositToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5781,
                            "src": "3370:16:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                              "typeString": "contract TBTCDepositToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                              "typeString": "contract TBTCDepositToken"
                            }
                          ],
                          "id": 5861,
                          "name": "TBTCDepositToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6844,
                          "src": "3353:16:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TBTCDepositToken_$6844_$",
                            "typeString": "type(contract TBTCDepositToken)"
                          }
                        },
                        "id": 5863,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3353:34:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                          "typeString": "contract TBTCDepositToken"
                        }
                      },
                      "id": 5864,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6798,
                      "src": "3353:39:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 5870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3353:108:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5871,
                  "nodeType": "ExpressionStatement",
                  "src": "3353:108:15"
                },
                {
                  "assignments": [
                    5873
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5873,
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "scope": 5908,
                      "src": "3472:15:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Deposit_$1134",
                        "typeString": "contract Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5872,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1134,
                        "src": "3472:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Deposit_$1134",
                          "typeString": "contract Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5881,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5877,
                                "name": "cloneAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5852,
                                "src": "3514:12:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 5876,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3506:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": "uint160"
                            },
                            "id": 5878,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3506:21:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "id": 5875,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3498:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 5879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3498:30:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 5874,
                      "name": "Deposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1134,
                      "src": "3490:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Deposit_$1134_$",
                        "typeString": "type(contract Deposit)"
                      }
                    },
                    "id": 5880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3490:39:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Deposit_$1134",
                      "typeString": "contract Deposit"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3472:57:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5886,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18478,
                            "src": "3566:4:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DepositFactory_$5910",
                              "typeString": "contract DepositFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DepositFactory_$5910",
                              "typeString": "contract DepositFactory"
                            }
                          ],
                          "id": 5885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3558:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 5887,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3558:13:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5882,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5873,
                        "src": "3539:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Deposit_$1134",
                          "typeString": "contract Deposit"
                        }
                      },
                      "id": 5884,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6233,
                      "src": "3539:18:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 5888,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3539:33:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5889,
                  "nodeType": "ExpressionStatement",
                  "src": "3539:33:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5898,
                        "name": "tbtcSystem",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5783,
                        "src": "3638:10:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TBTCSystem_$8372",
                          "typeString": "contract TBTCSystem"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5899,
                        "name": "tbtcToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5785,
                        "src": "3662:9:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TBTCToken_$8561",
                          "typeString": "contract TBTCToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5900,
                        "name": "tbtcDepositToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5781,
                        "src": "3685:16:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                          "typeString": "contract TBTCDepositToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5901,
                        "name": "feeRebateToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5787,
                        "src": "3715:14:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                          "typeString": "contract FeeRebateToken"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5902,
                        "name": "vendingMachineAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5789,
                        "src": "3743:21:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5903,
                        "name": "_lotSizeSatoshis",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5846,
                        "src": "3778:16:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_TBTCSystem_$8372",
                          "typeString": "contract TBTCSystem"
                        },
                        {
                          "typeIdentifier": "t_contract$_TBTCToken_$8561",
                          "typeString": "contract TBTCToken"
                        },
                        {
                          "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                          "typeString": "contract TBTCDepositToken"
                        },
                        {
                          "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                          "typeString": "contract FeeRebateToken"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 5895,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18360,
                            "src": "3614:3:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 5896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3614:9:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 5890,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5873,
                            "src": "3582:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Deposit_$1134",
                              "typeString": "contract Deposit"
                            }
                          },
                          "id": 5893,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "initializeDeposit",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1097,
                          "src": "3582:25:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_payable$_t_contract$_ITBTCSystem_$5511_$_t_contract$_TBTCToken_$8561_$_t_contract$_IERC721_$18287_$_t_contract$_FeeRebateToken_$6300_$_t_address_$_t_uint64_$returns$__$",
                            "typeString": "function (contract ITBTCSystem,contract TBTCToken,contract IERC721,contract FeeRebateToken,address,uint64) payable external"
                          }
                        },
                        "id": 5894,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3582:31:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_setvalue_pure$_t_uint256_$returns$_t_function_external_payable$_t_contract$_ITBTCSystem_$5511_$_t_contract$_TBTCToken_$8561_$_t_contract$_IERC721_$18287_$_t_contract$_FeeRebateToken_$6300_$_t_address_$_t_uint64_$returns$__$value_$",
                          "typeString": "function (uint256) pure returns (function (contract ITBTCSystem,contract TBTCToken,contract IERC721,contract FeeRebateToken,address,uint64) payable external)"
                        }
                      },
                      "id": 5897,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3582:42:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_contract$_ITBTCSystem_$5511_$_t_contract$_TBTCToken_$8561_$_t_contract$_IERC721_$18287_$_t_contract$_FeeRebateToken_$6300_$_t_address_$_t_uint64_$returns$__$value",
                        "typeString": "function (contract ITBTCSystem,contract TBTCToken,contract IERC721,contract FeeRebateToken,address,uint64) payable external"
                      }
                    },
                    "id": 5904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3582:222:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5905,
                  "nodeType": "ExpressionStatement",
                  "src": "3582:222:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5906,
                    "name": "cloneAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5852,
                    "src": "3822:12:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 5850,
                  "id": 5907,
                  "nodeType": "Return",
                  "src": "3815:19:15"
                }
              ]
            },
            "documentation": "@notice Creates a new deposit instance and mints a TDT. This function is\n         currently the only way to create a new deposit.\n @dev Calls `Deposit.initializeDeposit` to initialize the instance. Mints\n      the TDT to the function caller. (See `TBTCDepositToken` for more\n      info on TDTs). Reverts if new deposits are currently paused, if the\n      specified lot size is not currently permitted, or if the selection\n      of the signers fails for any reason. Also reverts if the bonds\n      collateralizing the deposit would not be enough to cover a refund\n      of the deposit creation fee, should the signer group fail to\n      complete its setup process.\n @return The address of the new deposit.",
            "id": 5909,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createDeposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5846,
                  "name": "_lotSizeSatoshis",
                  "nodeType": "VariableDeclaration",
                  "scope": 5909,
                  "src": "3140:23:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 5845,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3140:6:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3139:25:15"
            },
            "returnParameters": {
              "id": 5850,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5849,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5909,
                  "src": "3215:7:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5848,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3215:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3214:9:15"
            },
            "scope": 5910,
            "src": "3117:724:15",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 5911,
        "src": "690:3153:15"
      }
    ],
    "src": "0:3844:15"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/proxy/DepositFactory.sol",
      "exportedSymbols": {
        "DepositFactory": [
          5910
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.5",
            ".17"
          ]
        },
        "id": 5765,
        "name": "PragmaDirective",
        "src": "0:23:15"
      },
      {
        "attributes": {
          "SourceUnit": 5764,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/proxy/CloneFactory.sol",
          "file": "./CloneFactory.sol",
          "scope": 5911,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5766,
        "name": "ImportDirective",
        "src": "25:28:15"
      },
      {
        "attributes": {
          "SourceUnit": 1135,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/Deposit.sol",
          "file": "../deposit/Deposit.sol",
          "scope": 5911,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5767,
        "name": "ImportDirective",
        "src": "54:32:15"
      },
      {
        "attributes": {
          "SourceUnit": 8373,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCSystem.sol",
          "file": "../system/TBTCSystem.sol",
          "scope": 5911,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5768,
        "name": "ImportDirective",
        "src": "87:34:15"
      },
      {
        "attributes": {
          "SourceUnit": 8562,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol",
          "file": "../system/TBTCToken.sol",
          "scope": 5911,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5769,
        "name": "ImportDirective",
        "src": "122:33:15"
      },
      {
        "attributes": {
          "SourceUnit": 6301,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/FeeRebateToken.sol",
          "file": "../system/FeeRebateToken.sol",
          "scope": 5911,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5770,
        "name": "ImportDirective",
        "src": "156:38:15"
      },
      {
        "attributes": {
          "SourceUnit": 8400,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCSystemAuthority.sol",
          "file": "../system/TBTCSystemAuthority.sol",
          "scope": 5911,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5771,
        "name": "ImportDirective",
        "src": "195:43:15"
      },
      {
        "attributes": {
          "SourceUnit": 6845,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCDepositToken.sol",
          "file": "../system/TBTCDepositToken.sol",
          "scope": 5911,
          "symbolAliases": [
            {
              "foreign": 5772,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 5773,
        "name": "ImportDirective",
        "src": "239:64:15"
      },
      {
        "attributes": {
          "contractDependencies": [
            5763,
            8399
          ],
          "contractKind": "contract",
          "documentation": "@title Deposit Factory\n @notice Factory for the creation of new deposit clones.\n @dev We avoid redeployment of deposit contract by using the clone factory.\n Proxy delegates calls to Deposit and therefore does not affect deposit state.\n This means that we only need to deploy the deposit contracts once.\n The factory provides clean state for every new deposit clone.",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            5910,
            8399,
            5763
          ],
          "name": "DepositFactory",
          "scope": 5911
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "CloneFactory",
                  "referencedDeclaration": 5763,
                  "type": "contract CloneFactory"
                },
                "id": 5774,
                "name": "UserDefinedTypeName",
                "src": "717:12:15"
              }
            ],
            "id": 5775,
            "name": "InheritanceSpecifier",
            "src": "717:12:15"
          },
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "TBTCSystemAuthority",
                  "referencedDeclaration": 8399,
                  "type": "contract TBTCSystemAuthority"
                },
                "id": 5776,
                "name": "UserDefinedTypeName",
                "src": "731:19:15"
              }
            ],
            "id": 5777,
            "name": "InheritanceSpecifier",
            "src": "731:19:15"
          },
          {
            "attributes": {
              "constant": false,
              "name": "masterDepositAddress",
              "scope": 5910,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address payable",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "payable",
                  "type": "address payable"
                },
                "id": 5778,
                "name": "ElementaryTypeName",
                "src": "866:15:15"
              }
            ],
            "id": 5779,
            "name": "VariableDeclaration",
            "src": "866:43:15"
          },
          {
            "attributes": {
              "constant": false,
              "name": "tbtcDepositToken",
              "scope": 5910,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract TBTCDepositToken",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "TBTCDepositToken",
                  "referencedDeclaration": 6844,
                  "type": "contract TBTCDepositToken"
                },
                "id": 5780,
                "name": "UserDefinedTypeName",
                "src": "915:16:15"
              }
            ],
            "id": 5781,
            "name": "VariableDeclaration",
            "src": "915:33:15"
          },
          {
            "attributes": {
              "constant": false,
              "name": "tbtcSystem",
              "scope": 5910,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract TBTCSystem",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "TBTCSystem",
                  "referencedDeclaration": 8372,
                  "type": "contract TBTCSystem"
                },
                "id": 5782,
                "name": "UserDefinedTypeName",
                "src": "954:10:15"
              }
            ],
            "id": 5783,
            "name": "VariableDeclaration",
            "src": "954:28:15"
          },
          {
            "attributes": {
              "constant": false,
              "name": "tbtcToken",
              "scope": 5910,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract TBTCToken",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "TBTCToken",
                  "referencedDeclaration": 8561,
                  "type": "contract TBTCToken"
                },
                "id": 5784,
                "name": "UserDefinedTypeName",
                "src": "988:9:15"
              }
            ],
            "id": 5785,
            "name": "VariableDeclaration",
            "src": "988:26:15"
          },
          {
            "attributes": {
              "constant": false,
              "name": "feeRebateToken",
              "scope": 5910,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract FeeRebateToken",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "FeeRebateToken",
                  "referencedDeclaration": 6300,
                  "type": "contract FeeRebateToken"
                },
                "id": 5786,
                "name": "UserDefinedTypeName",
                "src": "1020:14:15"
              }
            ],
            "id": 5787,
            "name": "VariableDeclaration",
            "src": "1020:36:15"
          },
          {
            "attributes": {
              "constant": false,
              "name": "vendingMachineAddress",
              "scope": 5910,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 5788,
                "name": "ElementaryTypeName",
                "src": "1062:7:15"
              }
            ],
            "id": 5789,
            "name": "VariableDeclaration",
            "src": "1062:36:15"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "scope": 5910,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_systemAddress",
                      "scope": 5798,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5790,
                        "name": "ElementaryTypeName",
                        "src": "1117:7:15"
                      }
                    ],
                    "id": 5791,
                    "name": "VariableDeclaration",
                    "src": "1117:22:15"
                  }
                ],
                "id": 5792,
                "name": "ParameterList",
                "src": "1116:24:15"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5796,
                "name": "ParameterList",
                "src": "1204:0:15"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 8399,
                      "type": "type(contract TBTCSystemAuthority)",
                      "value": "TBTCSystemAuthority"
                    },
                    "id": 5793,
                    "name": "Identifier",
                    "src": "1164:19:15"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 5791,
                      "type": "address",
                      "value": "_systemAddress"
                    },
                    "id": 5794,
                    "name": "Identifier",
                    "src": "1184:14:15"
                  }
                ],
                "id": 5795,
                "name": "ModifierInvocation",
                "src": "1164:35:15"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 5797,
                "name": "Block",
                "src": "1204:2:15"
              }
            ],
            "id": 5798,
            "name": "FunctionDefinition",
            "src": "1105:101:15"
          },
          {
            "attributes": {
              "documentation": "@dev                          Set the required external variables.\n @param _masterDepositAddress  The address of the master deposit contract.\n @param _tbtcSystem            Tbtc system contract.\n @param _tbtcToken             TBTC token contract.\n @param _tbtcDepositToken      TBTC Deposit Token contract.\n @param _feeRebateToken        AFee Rebate Token contract.\n @param _vendingMachineAddress Address of the Vending Machine contract.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setExternalDependencies",
              "scope": 5910,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_masterDepositAddress",
                      "scope": 5840,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address payable",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "payable",
                          "type": "address payable"
                        },
                        "id": 5799,
                        "name": "ElementaryTypeName",
                        "src": "1742:15:15"
                      }
                    ],
                    "id": 5800,
                    "name": "VariableDeclaration",
                    "src": "1742:37:15"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_tbtcSystem",
                      "scope": 5840,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract TBTCSystem",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "TBTCSystem",
                          "referencedDeclaration": 8372,
                          "type": "contract TBTCSystem"
                        },
                        "id": 5801,
                        "name": "UserDefinedTypeName",
                        "src": "1789:10:15"
                      }
                    ],
                    "id": 5802,
                    "name": "VariableDeclaration",
                    "src": "1789:22:15"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_tbtcToken",
                      "scope": 5840,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract TBTCToken",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "TBTCToken",
                          "referencedDeclaration": 8561,
                          "type": "contract TBTCToken"
                        },
                        "id": 5803,
                        "name": "UserDefinedTypeName",
                        "src": "1821:9:15"
                      }
                    ],
                    "id": 5804,
                    "name": "VariableDeclaration",
                    "src": "1821:20:15"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_tbtcDepositToken",
                      "scope": 5840,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract TBTCDepositToken",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "TBTCDepositToken",
                          "referencedDeclaration": 6844,
                          "type": "contract TBTCDepositToken"
                        },
                        "id": 5805,
                        "name": "UserDefinedTypeName",
                        "src": "1851:16:15"
                      }
                    ],
                    "id": 5806,
                    "name": "VariableDeclaration",
                    "src": "1851:34:15"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_feeRebateToken",
                      "scope": 5840,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract FeeRebateToken",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "FeeRebateToken",
                          "referencedDeclaration": 6300,
                          "type": "contract FeeRebateToken"
                        },
                        "id": 5807,
                        "name": "UserDefinedTypeName",
                        "src": "1895:14:15"
                      }
                    ],
                    "id": 5808,
                    "name": "VariableDeclaration",
                    "src": "1895:30:15"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_vendingMachineAddress",
                      "scope": 5840,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5809,
                        "name": "ElementaryTypeName",
                        "src": "1935:7:15"
                      }
                    ],
                    "id": 5810,
                    "name": "VariableDeclaration",
                    "src": "1935:30:15"
                  }
                ],
                "id": 5811,
                "name": "ParameterList",
                "src": "1732:239:15"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5814,
                "name": "ParameterList",
                "src": "1996:0:15"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 8398,
                      "type": "modifier ()",
                      "value": "onlyTbtcSystem"
                    },
                    "id": 5812,
                    "name": "Identifier",
                    "src": "1981:14:15"
                  }
                ],
                "id": 5813,
                "name": "ModifierInvocation",
                "src": "1981:14:15"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address payable"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5779,
                              "type": "address payable",
                              "value": "masterDepositAddress"
                            },
                            "id": 5815,
                            "name": "Identifier",
                            "src": "2006:20:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5800,
                              "type": "address payable",
                              "value": "_masterDepositAddress"
                            },
                            "id": 5816,
                            "name": "Identifier",
                            "src": "2029:21:15"
                          }
                        ],
                        "id": 5817,
                        "name": "Assignment",
                        "src": "2006:44:15"
                      }
                    ],
                    "id": 5818,
                    "name": "ExpressionStatement",
                    "src": "2006:44:15"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract TBTCDepositToken"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5781,
                              "type": "contract TBTCDepositToken",
                              "value": "tbtcDepositToken"
                            },
                            "id": 5819,
                            "name": "Identifier",
                            "src": "2060:16:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5806,
                              "type": "contract TBTCDepositToken",
                              "value": "_tbtcDepositToken"
                            },
                            "id": 5820,
                            "name": "Identifier",
                            "src": "2079:17:15"
                          }
                        ],
                        "id": 5821,
                        "name": "Assignment",
                        "src": "2060:36:15"
                      }
                    ],
                    "id": 5822,
                    "name": "ExpressionStatement",
                    "src": "2060:36:15"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract TBTCSystem"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5783,
                              "type": "contract TBTCSystem",
                              "value": "tbtcSystem"
                            },
                            "id": 5823,
                            "name": "Identifier",
                            "src": "2106:10:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5802,
                              "type": "contract TBTCSystem",
                              "value": "_tbtcSystem"
                            },
                            "id": 5824,
                            "name": "Identifier",
                            "src": "2119:11:15"
                          }
                        ],
                        "id": 5825,
                        "name": "Assignment",
                        "src": "2106:24:15"
                      }
                    ],
                    "id": 5826,
                    "name": "ExpressionStatement",
                    "src": "2106:24:15"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract TBTCToken"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5785,
                              "type": "contract TBTCToken",
                              "value": "tbtcToken"
                            },
                            "id": 5827,
                            "name": "Identifier",
                            "src": "2140:9:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5804,
                              "type": "contract TBTCToken",
                              "value": "_tbtcToken"
                            },
                            "id": 5828,
                            "name": "Identifier",
                            "src": "2152:10:15"
                          }
                        ],
                        "id": 5829,
                        "name": "Assignment",
                        "src": "2140:22:15"
                      }
                    ],
                    "id": 5830,
                    "name": "ExpressionStatement",
                    "src": "2140:22:15"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract FeeRebateToken"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5787,
                              "type": "contract FeeRebateToken",
                              "value": "feeRebateToken"
                            },
                            "id": 5831,
                            "name": "Identifier",
                            "src": "2172:14:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5808,
                              "type": "contract FeeRebateToken",
                              "value": "_feeRebateToken"
                            },
                            "id": 5832,
                            "name": "Identifier",
                            "src": "2189:15:15"
                          }
                        ],
                        "id": 5833,
                        "name": "Assignment",
                        "src": "2172:32:15"
                      }
                    ],
                    "id": 5834,
                    "name": "ExpressionStatement",
                    "src": "2172:32:15"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5789,
                              "type": "address",
                              "value": "vendingMachineAddress"
                            },
                            "id": 5835,
                            "name": "Identifier",
                            "src": "2214:21:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5810,
                              "type": "address",
                              "value": "_vendingMachineAddress"
                            },
                            "id": 5836,
                            "name": "Identifier",
                            "src": "2238:22:15"
                          }
                        ],
                        "id": 5837,
                        "name": "Assignment",
                        "src": "2214:46:15"
                      }
                    ],
                    "id": 5838,
                    "name": "ExpressionStatement",
                    "src": "2214:46:15"
                  }
                ],
                "id": 5839,
                "name": "Block",
                "src": "1996:271:15"
              }
            ],
            "id": 5840,
            "name": "FunctionDefinition",
            "src": "1700:567:15"
          },
          {
            "attributes": {
              "anonymous": false,
              "documentation": null,
              "name": "DepositCloneCreated"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "depositCloneAddress",
                      "scope": 5844,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5841,
                        "name": "ElementaryTypeName",
                        "src": "2299:7:15"
                      }
                    ],
                    "id": 5842,
                    "name": "VariableDeclaration",
                    "src": "2299:27:15"
                  }
                ],
                "id": 5843,
                "name": "ParameterList",
                "src": "2298:29:15"
              }
            ],
            "id": 5844,
            "name": "EventDefinition",
            "src": "2273:55:15"
          },
          {
            "attributes": {
              "documentation": "@notice Creates a new deposit instance and mints a TDT. This function is\n         currently the only way to create a new deposit.\n @dev Calls `Deposit.initializeDeposit` to initialize the instance. Mints\n      the TDT to the function caller. (See `TBTCDepositToken` for more\n      info on TDTs). Reverts if new deposits are currently paused, if the\n      specified lot size is not currently permitted, or if the selection\n      of the signers fails for any reason. Also reverts if the bonds\n      collateralizing the deposit would not be enough to cover a refund\n      of the deposit creation fee, should the signer group fail to\n      complete its setup process.\n @return The address of the new deposit.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "createDeposit",
              "scope": 5910,
              "stateMutability": "payable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_lotSizeSatoshis",
                      "scope": 5909,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 5845,
                        "name": "ElementaryTypeName",
                        "src": "3140:6:15"
                      }
                    ],
                    "id": 5846,
                    "name": "VariableDeclaration",
                    "src": "3140:23:15"
                  }
                ],
                "id": 5847,
                "name": "ParameterList",
                "src": "3139:25:15"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 5909,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5848,
                        "name": "ElementaryTypeName",
                        "src": "3215:7:15"
                      }
                    ],
                    "id": 5849,
                    "name": "VariableDeclaration",
                    "src": "3215:7:15"
                  }
                ],
                "id": 5850,
                "name": "ParameterList",
                "src": "3214:9:15"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        5852
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "cloneAddress",
                          "scope": 5908,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 5851,
                            "name": "ElementaryTypeName",
                            "src": "3238:7:15"
                          }
                        ],
                        "id": 5852,
                        "name": "VariableDeclaration",
                        "src": "3238:20:15"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5745,
                              "type": "function (address) returns (address)",
                              "value": "createClone"
                            },
                            "id": 5853,
                            "name": "Identifier",
                            "src": "3261:11:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5779,
                              "type": "address payable",
                              "value": "masterDepositAddress"
                            },
                            "id": 5854,
                            "name": "Identifier",
                            "src": "3273:20:15"
                          }
                        ],
                        "id": 5855,
                        "name": "FunctionCall",
                        "src": "3261:33:15"
                      }
                    ],
                    "id": 5856,
                    "name": "VariableDeclarationStatement",
                    "src": "3238:56:15"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5844,
                              "type": "function (address)",
                              "value": "DepositCloneCreated"
                            },
                            "id": 5857,
                            "name": "Identifier",
                            "src": "3309:19:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5852,
                              "type": "address",
                              "value": "cloneAddress"
                            },
                            "id": 5858,
                            "name": "Identifier",
                            "src": "3329:12:15"
                          }
                        ],
                        "id": 5859,
                        "name": "FunctionCall",
                        "src": "3309:33:15"
                      }
                    ],
                    "id": 5860,
                    "name": "EmitStatement",
                    "src": "3304:38:15"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "mint",
                              "referencedDeclaration": 6798,
                              "type": "function (address,uint256) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "contract TBTCDepositToken",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                                          "typeString": "contract TBTCDepositToken"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6844,
                                      "type": "type(contract TBTCDepositToken)",
                                      "value": "TBTCDepositToken"
                                    },
                                    "id": 5861,
                                    "name": "Identifier",
                                    "src": "3353:16:15"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5781,
                                      "type": "contract TBTCDepositToken",
                                      "value": "tbtcDepositToken"
                                    },
                                    "id": 5862,
                                    "name": "Identifier",
                                    "src": "3370:16:15"
                                  }
                                ],
                                "id": 5863,
                                "name": "FunctionCall",
                                "src": "3353:34:15"
                              }
                            ],
                            "id": 5864,
                            "name": "MemberAccess",
                            "src": "3353:39:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18360,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 5865,
                                "name": "Identifier",
                                "src": "3406:3:15"
                              }
                            ],
                            "id": 5866,
                            "name": "MemberAccess",
                            "src": "3406:10:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)",
                                  "value": "uint256"
                                },
                                "id": 5867,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3430:7:15"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5852,
                                  "type": "address",
                                  "value": "cloneAddress"
                                },
                                "id": 5868,
                                "name": "Identifier",
                                "src": "3438:12:15"
                              }
                            ],
                            "id": 5869,
                            "name": "FunctionCall",
                            "src": "3430:21:15"
                          }
                        ],
                        "id": 5870,
                        "name": "FunctionCall",
                        "src": "3353:108:15"
                      }
                    ],
                    "id": 5871,
                    "name": "ExpressionStatement",
                    "src": "3353:108:15"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5873
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "deposit",
                          "scope": 5908,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract Deposit",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Deposit",
                              "referencedDeclaration": 1134,
                              "type": "contract Deposit"
                            },
                            "id": 5872,
                            "name": "UserDefinedTypeName",
                            "src": "3472:7:15"
                          }
                        ],
                        "id": 5873,
                        "name": "VariableDeclaration",
                        "src": "3472:15:15"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract Deposit",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1134,
                              "type": "type(contract Deposit)",
                              "value": "Deposit"
                            },
                            "id": 5874,
                            "name": "Identifier",
                            "src": "3490:7:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 5875,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3498:7:15"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint160",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint160)",
                                      "value": "uint160"
                                    },
                                    "id": 5876,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3506:7:15"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5852,
                                      "type": "address",
                                      "value": "cloneAddress"
                                    },
                                    "id": 5877,
                                    "name": "Identifier",
                                    "src": "3514:12:15"
                                  }
                                ],
                                "id": 5878,
                                "name": "FunctionCall",
                                "src": "3506:21:15"
                              }
                            ],
                            "id": 5879,
                            "name": "FunctionCall",
                            "src": "3498:30:15"
                          }
                        ],
                        "id": 5880,
                        "name": "FunctionCall",
                        "src": "3490:39:15"
                      }
                    ],
                    "id": 5881,
                    "name": "VariableDeclarationStatement",
                    "src": "3472:57:15"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "initialize",
                              "referencedDeclaration": 6233,
                              "type": "function (address) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5873,
                                  "type": "contract Deposit",
                                  "value": "deposit"
                                },
                                "id": 5882,
                                "name": "Identifier",
                                "src": "3539:7:15"
                              }
                            ],
                            "id": 5884,
                            "name": "MemberAccess",
                            "src": "3539:18:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_DepositFactory_$5910",
                                      "typeString": "contract DepositFactory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 5885,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3558:7:15"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18478,
                                  "type": "contract DepositFactory",
                                  "value": "this"
                                },
                                "id": 5886,
                                "name": "Identifier",
                                "src": "3566:4:15"
                              }
                            ],
                            "id": 5887,
                            "name": "FunctionCall",
                            "src": "3558:13:15"
                          }
                        ],
                        "id": 5888,
                        "name": "FunctionCall",
                        "src": "3539:33:15"
                      }
                    ],
                    "id": 5889,
                    "name": "ExpressionStatement",
                    "src": "3539:33:15"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_TBTCSystem_$8372",
                                  "typeString": "contract TBTCSystem"
                                },
                                {
                                  "typeIdentifier": "t_contract$_TBTCToken_$8561",
                                  "typeString": "contract TBTCToken"
                                },
                                {
                                  "typeIdentifier": "t_contract$_TBTCDepositToken_$6844",
                                  "typeString": "contract TBTCDepositToken"
                                },
                                {
                                  "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                                  "typeString": "contract FeeRebateToken"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "function (contract ITBTCSystem,contract TBTCToken,contract IERC721,contract FeeRebateToken,address,uint64) payable external",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "value",
                                  "referencedDeclaration": null,
                                  "type": "function (uint256) pure returns (function (contract ITBTCSystem,contract TBTCToken,contract IERC721,contract FeeRebateToken,address,uint64) payable external)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "initializeDeposit",
                                      "referencedDeclaration": 1097,
                                      "type": "function (contract ITBTCSystem,contract TBTCToken,contract IERC721,contract FeeRebateToken,address,uint64) payable external"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5873,
                                          "type": "contract Deposit",
                                          "value": "deposit"
                                        },
                                        "id": 5890,
                                        "name": "Identifier",
                                        "src": "3582:7:15"
                                      }
                                    ],
                                    "id": 5893,
                                    "name": "MemberAccess",
                                    "src": "3582:25:15"
                                  }
                                ],
                                "id": 5894,
                                "name": "MemberAccess",
                                "src": "3582:31:15"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "value",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18360,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 5895,
                                    "name": "Identifier",
                                    "src": "3614:3:15"
                                  }
                                ],
                                "id": 5896,
                                "name": "MemberAccess",
                                "src": "3614:9:15"
                              }
                            ],
                            "id": 5897,
                            "name": "FunctionCall",
                            "src": "3582:42:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5783,
                              "type": "contract TBTCSystem",
                              "value": "tbtcSystem"
                            },
                            "id": 5898,
                            "name": "Identifier",
                            "src": "3638:10:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5785,
                              "type": "contract TBTCToken",
                              "value": "tbtcToken"
                            },
                            "id": 5899,
                            "name": "Identifier",
                            "src": "3662:9:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5781,
                              "type": "contract TBTCDepositToken",
                              "value": "tbtcDepositToken"
                            },
                            "id": 5900,
                            "name": "Identifier",
                            "src": "3685:16:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5787,
                              "type": "contract FeeRebateToken",
                              "value": "feeRebateToken"
                            },
                            "id": 5901,
                            "name": "Identifier",
                            "src": "3715:14:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5789,
                              "type": "address",
                              "value": "vendingMachineAddress"
                            },
                            "id": 5902,
                            "name": "Identifier",
                            "src": "3743:21:15"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5846,
                              "type": "uint64",
                              "value": "_lotSizeSatoshis"
                            },
                            "id": 5903,
                            "name": "Identifier",
                            "src": "3778:16:15"
                          }
                        ],
                        "id": 5904,
                        "name": "FunctionCall",
                        "src": "3582:222:15"
                      }
                    ],
                    "id": 5905,
                    "name": "ExpressionStatement",
                    "src": "3582:222:15"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5850
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5852,
                          "type": "address",
                          "value": "cloneAddress"
                        },
                        "id": 5906,
                        "name": "Identifier",
                        "src": "3822:12:15"
                      }
                    ],
                    "id": 5907,
                    "name": "Return",
                    "src": "3815:19:15"
                  }
                ],
                "id": 5908,
                "name": "Block",
                "src": "3228:613:15"
              }
            ],
            "id": 5909,
            "name": "FunctionDefinition",
            "src": "3117:724:15"
          }
        ],
        "id": 5910,
        "name": "ContractDefinition",
        "src": "690:3153:15"
      }
    ],
    "id": 5911,
    "name": "SourceUnit",
    "src": "0:3844:15"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {},
      "address": "0xd10c33cbFF1DD603F9f03B0aE9d414676C736F71",
      "transactionHash": "0x337fcbac3cfae044db154240ec415ae95974b045e9fef941a157bfabe318e358"
    }
  },
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T12:02:26.774Z",
  "networkType": "ethereum",
  "devdoc": {
    "details": "We avoid redeployment of deposit contract by using the clone factory. Proxy delegates calls to Deposit and therefore does not affect deposit state. This means that we only need to deploy the deposit contracts once. The factory provides clean state for every new deposit clone.",
    "methods": {
      "createDeposit(uint64)": {
        "details": "Calls `Deposit.initializeDeposit` to initialize the instance. Mints      the TDT to the function caller. (See `TBTCDepositToken` for more      info on TDTs). Reverts if new deposits are currently paused, if the      specified lot size is not currently permitted, or if the selection      of the signers fails for any reason. Also reverts if the bonds      collateralizing the deposit would not be enough to cover a refund      of the deposit creation fee, should the signer group fail to      complete its setup process.",
        "return": "The address of the new deposit."
      },
      "setExternalDependencies(address,address,address,address,address,address)": {
        "details": "Set the required external variables.",
        "params": {
          "_feeRebateToken": "AFee Rebate Token contract.",
          "_masterDepositAddress": "The address of the master deposit contract.",
          "_tbtcDepositToken": "TBTC Deposit Token contract.",
          "_tbtcSystem": "Tbtc system contract.",
          "_tbtcToken": "TBTC token contract.",
          "_vendingMachineAddress": "Address of the Vending Machine contract."
        }
      }
    },
    "title": "Deposit Factory"
  },
  "userdoc": {
    "methods": {
      "createDeposit(uint64)": {
        "notice": "Creates a new deposit instance and mints a TDT. This function is         currently the only way to create a new deposit."
      }
    },
    "notice": "Factory for the creation of new deposit clones."
  }
}