{
  "contractName": "Deposit",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lotSizeSatoshis",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lotSizeTbtc",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "signerFeeTbtc",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currentState",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "inActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "keepAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "remainingTerm",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "collateralizationPercentage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initialCollateralizedPercent",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "undercollateralizedThresholdPercent",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "severelyUndercollateralizedThresholdPercent",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "utxoValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "fundingInfo",
      "outputs": [
        {
          "internalType": "bytes8",
          "name": "utxoValueBytes",
          "type": "bytes8"
        },
        {
          "internalType": "uint256",
          "name": "fundedAt",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "utxoOutpoint",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "auctionValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "withdrawableAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifySignerSetupFailed",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "retrieveSignerPubkey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyFundingTimedOut",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_abortOutputScript",
          "type": "bytes"
        }
      ],
      "name": "requestFunderAbort",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_signedDigest",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_preimage",
          "type": "bytes"
        }
      ],
      "name": "provideFundingECDSAFraudProof",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_txVersion",
          "type": "bytes4"
        },
        {
          "internalType": "bytes",
          "name": "_txInputVector",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_txOutputVector",
          "type": "bytes"
        },
        {
          "internalType": "bytes4",
          "name": "_txLocktime",
          "type": "bytes4"
        },
        {
          "internalType": "uint8",
          "name": "_fundingOutputIndex",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "_merkleProof",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_txIndexInBlock",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_bitcoinHeaders",
          "type": "bytes"
        }
      ],
      "name": "provideBTCFundingProof",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyCourtesyCall",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "exitCourtesyCall",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyCourtesyCallExpired",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyUndercollateralizedLiquidation",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_signedDigest",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_preimage",
          "type": "bytes"
        }
      ],
      "name": "provideECDSAFraudProof",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyRedemptionSignatureTimedOut",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyRedemptionProofTimedOut",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "purchaseSignerBondsAtAuction",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_redeemer",
          "type": "address"
        }
      ],
      "name": "getRedemptionTbtcRequirement",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_redeemer",
          "type": "address"
        }
      ],
      "name": "getOwnerRedemptionTbtcRequirement",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes8",
          "name": "_outputValueBytes",
          "type": "bytes8"
        },
        {
          "internalType": "bytes",
          "name": "_redeemerOutputScript",
          "type": "bytes"
        }
      ],
      "name": "requestRedemption",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        }
      ],
      "name": "provideRedemptionSignature",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes8",
          "name": "_previousOutputValueBytes",
          "type": "bytes8"
        },
        {
          "internalType": "bytes8",
          "name": "_newOutputValueBytes",
          "type": "bytes8"
        }
      ],
      "name": "increaseRedemptionFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_txVersion",
          "type": "bytes4"
        },
        {
          "internalType": "bytes",
          "name": "_txInputVector",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_txOutputVector",
          "type": "bytes"
        },
        {
          "internalType": "bytes4",
          "name": "_txLocktime",
          "type": "bytes4"
        },
        {
          "internalType": "bytes",
          "name": "_merkleProof",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_txIndexInBlock",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_bitcoinHeaders",
          "type": "bytes"
        }
      ],
      "name": "provideRedemptionProof",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ITBTCSystem",
          "name": "_tbtcSystem",
          "type": "address"
        },
        {
          "internalType": "contract TBTCToken",
          "name": "_tbtcToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC721",
          "name": "_tbtcDepositToken",
          "type": "address"
        },
        {
          "internalType": "contract FeeRebateToken",
          "name": "_feeRebateToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_vendingMachineAddress",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "_lotSizeSatoshis",
          "type": "uint64"
        }
      ],
      "name": "initializeDeposit",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes8",
          "name": "_outputValueBytes",
          "type": "bytes8"
        },
        {
          "internalType": "bytes",
          "name": "_redeemerOutputScript",
          "type": "bytes"
        },
        {
          "internalType": "address payable",
          "name": "_finalRecipient",
          "type": "address"
        }
      ],
      "name": "transferAndRequestRedemption",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "withdrawFunds",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":true,\"inputs\":[],\"name\":\"auctionValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"collateralizationPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currentState\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"exitCourtesyCall\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundingInfo\",\"outputs\":[{\"internalType\":\"bytes8\",\"name\":\"utxoValueBytes\",\"type\":\"bytes8\"},{\"internalType\":\"uint256\",\"name\":\"fundedAt\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"utxoOutpoint\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_redeemer\",\"type\":\"address\"}],\"name\":\"getOwnerRedemptionTbtcRequirement\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_redeemer\",\"type\":\"address\"}],\"name\":\"getRedemptionTbtcRequirement\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"inActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes8\",\"name\":\"_previousOutputValueBytes\",\"type\":\"bytes8\"},{\"internalType\":\"bytes8\",\"name\":\"_newOutputValueBytes\",\"type\":\"bytes8\"}],\"name\":\"increaseRedemptionFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialCollateralizedPercent\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ITBTCSystem\",\"name\":\"_tbtcSystem\",\"type\":\"address\"},{\"internalType\":\"contract TBTCToken\",\"name\":\"_tbtcToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC721\",\"name\":\"_tbtcDepositToken\",\"type\":\"address\"},{\"internalType\":\"contract FeeRebateToken\",\"name\":\"_feeRebateToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vendingMachineAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_lotSizeSatoshis\",\"type\":\"uint64\"}],\"name\":\"initializeDeposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"keepAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lotSizeSatoshis\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lotSizeTbtc\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifyCourtesyCall\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifyCourtesyCallExpired\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifyFundingTimedOut\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifyRedemptionProofTimedOut\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifyRedemptionSignatureTimedOut\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifySignerSetupFailed\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifyUndercollateralizedLiquidation\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_txVersion\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"_txInputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_txOutputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"_txLocktime\",\"type\":\"bytes4\"},{\"internalType\":\"uint8\",\"name\":\"_fundingOutputIndex\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"_merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_txIndexInBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_bitcoinHeaders\",\"type\":\"bytes\"}],\"name\":\"provideBTCFundingProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_signedDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_preimage\",\"type\":\"bytes\"}],\"name\":\"provideECDSAFraudProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_signedDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_preimage\",\"type\":\"bytes\"}],\"name\":\"provideFundingECDSAFraudProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_txVersion\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"_txInputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_txOutputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"_txLocktime\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"_merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_txIndexInBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_bitcoinHeaders\",\"type\":\"bytes\"}],\"name\":\"provideRedemptionProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"provideRedemptionSignature\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"purchaseSignerBondsAtAuction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"remainingTerm\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_abortOutputScript\",\"type\":\"bytes\"}],\"name\":\"requestFunderAbort\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes8\",\"name\":\"_outputValueBytes\",\"type\":\"bytes8\"},{\"internalType\":\"bytes\",\"name\":\"_redeemerOutputScript\",\"type\":\"bytes\"}],\"name\":\"requestRedemption\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"retrieveSignerPubkey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"severelyUndercollateralizedThresholdPercent\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signerFeeTbtc\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes8\",\"name\":\"_outputValueBytes\",\"type\":\"bytes8\"},{\"internalType\":\"bytes\",\"name\":\"_redeemerOutputScript\",\"type\":\"bytes\"},{\"internalType\":\"address payable\",\"name\":\"_finalRecipient\",\"type\":\"address\"}],\"name\":\"transferAndRequestRedemption\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"undercollateralizedThresholdPercent\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"utxoValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdrawFunds\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"withdrawableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract presents a public API that exposes the following      libraries:  ///       - `DepositFunding`       - `DepositLiquidaton`       - `DepositRedemption`,       - `DepositStates`       - `DepositUtils`       - `OutsourceDepositLogging`       - `TBTCConstants`  ///      Where these libraries require deposit state, this contract's state      variable `self` is used. `self` is a struct of type      `DepositUtils.Deposit` that contains all aspects of the deposit state      itself.\",\"methods\":{\"auctionValue()\":{\"details\":\"This call will revert if the deposit is not in a state where an      auction is currently in progress.\",\"return\":\"The value in wei that would be received in exchange for the         deposit's lot size in TBTC if `purchaseSignerBondsAtAuction`         were called at the time this function is called.\"},\"collateralizationPercentage()\":{\"details\":\"This value represents the percentage of the backing BTC value the      signers currently must hold as bond.\",\"return\":\"The current collateralization level for this deposit.\"},\"constructor\":{\"details\":\"Deposit should only be _constructed_ once. New deposits are created      using the `DepositFactory.createDeposit` method, and are clones of      the constructed deposit. The factory will set the initial values      for a new clone using `initializeDeposit`.\"},\"currentState()\":{\"details\":\"We implement this because contracts don't handle foreign enums      well. See `DepositStates` for more info on states.\",\"return\":\"The 0-indexed state from the DepositStates enum.\"},\"exitCourtesyCall()\":{\"details\":\"This call will revert if collateral is still below the      undercollateralized threshold according to the price feed.\"},\"fundingInfo()\":{\"details\":\"This call will revert if the deposit is not in a state where the      funding info should be valid. In particular, before funding proof      is successfully submitted (i.e. in states START,      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), none of      these values are set or valid.\",\"return\":\"A tuple of (uxtoValueBytes, fundedAt, uxtoOutpoint).\"},\"getOwnerRedemptionTbtcRequirement(address)\":{\"params\":{\"_redeemer\":\"The assumed owner of the deposit's TDT .\"},\"return\":\"The amount in TBTC needed to redeem the deposit.\"},\"getRedemptionTbtcRequirement(address)\":{\"details\":\"This call will revert if redemption is not possible by _redeemer.\",\"params\":{\"_redeemer\":\"The deposit redeemer whose TBTC requirement is being        requested.\"},\"return\":\"The amount in TBTC needed by the `_redeemer` to redeem the         deposit.\"},\"inActive()\":{\"return\":\"True if state is ACTIVE, false otherwise.\"},\"increaseRedemptionFee(bytes8,bytes8)\":{\"details\":\"This call will revert if the fee is already at its maximum, or if      the new requested fee is not a multiple of the initial requested      fee. Transaction fees can only be bumped by the amount of the      initial requested fee. Calling this sends the deposit back to      the `AWAITING_WITHDRAWAL_SIGNATURE` state and requires the signers      to `provideRedemptionSignature` for the new output value in a      timely fashion.\",\"params\":{\"_newOutputValueBytes\":\"The new output's value.\",\"_previousOutputValueBytes\":\"The previous output's value.\"}},\"initialCollateralizedPercent()\":{\"details\":\"This value represents the percentage of the backing BTC value      the signers hold initially. It is set at creation time.\",\"return\":\"The initial collateralization level for this deposit.\"},\"initialize(address)\":{\"details\":\"Since this function is not access-controlled, it should be called      transactionally with contract instantiation. In cases where a      regular contract directly inherits from DepositFactoryAuthority,      that should happen in the constructor. In cases where the inheritor      is binstead used via a clone factory, the same function that      creates a new clone should also trigger initialization.\"},\"initializeDeposit(address,address,address,address,address,uint64)\":{\"details\":\"Initializes a new deposit clone with the base state for the      deposit.\",\"params\":{\"_feeRebateToken\":\"`FeeRebateToken` (FRT) contract. More info in        `FeeRebateToken`.\",\"_lotSizeSatoshis\":\"The minimum amount of satoshi the funder is                         required to send. This is also the amount of                         TBTC the TDT holder will be eligible to mint:                         (10**7 satoshi == 0.1 BTC == 0.1 TBTC).\",\"_tbtcDepositToken\":\"`TBTCDepositToken` (TDT) contract. More info in        `TBTCDepositToken`.\",\"_tbtcSystem\":\"`TBTCSystem` contract. More info in `TBTCSystem`.\",\"_tbtcToken\":\"`TBTCToken` contract. More info in TBTCToken`.\",\"_vendingMachineAddress\":\"`VendingMachine` address. More info in        `VendingMachine`.\"}},\"keepAddress()\":{\"details\":\"The keep contract address is saved on Deposit initialization.\",\"return\":\"Address of the Keep contract.\"},\"lotSizeSatoshis()\":{\"return\":\"uint64 lot size in satoshis.\"},\"lotSizeTbtc()\":{\"details\":\"This is the same as lotSizeSatoshis(), but is multiplied to scale      to 18 decimal places.\",\"return\":\"uint256 lot size in TBTC precision (max 18 decimal places).\"},\"notifyCourtesyCall()\":{\"details\":\"This call will revert if the signers are not in fact      undercollateralized according to the price feed. After      TBTCConstants.COURTESY_CALL_DURATION, courtesy call times out and      regular abort liquidation occurs; see      `notifyCourtesyTimedOut`.\"},\"notifyCourtesyCallExpired()\":{\"details\":\"This call will revert if the courtesy call period has not in fact      expired or is not in the courtesy call state. Courtesy call      expiration is treated as an abort, and is handled by seizing signer      bonds and putting them up for auction for the lot size amount in      TBTC (see `purchaseSignerBondsAtAuction`). Emits a      LiquidationStarted event. The caller is captured as the liquidation      initiator, and is eligible for 50% of any bond left after the      auction is completed.\"},\"notifyFundingTimedOut()\":{\"details\":\"This is considered a funder fault, and the funder's payment for      opening the deposit is not refunded. Emits a SetupFailed event.      Reverts if the funding timeout has not yet elapsed, or if the      deposit is not currently awaiting funding proof.\"},\"notifyRedemptionProofTimedOut()\":{\"details\":\"This call will revert if the deposit is not currently awaiting a      signature or if the allotted time has not yet elapsed. This is      considered an abort, and is punished by seizing signer bonds and      putting them up for auction for the lot size amount in TBTC (see      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.      The caller is captured as the liquidation initiator, and      is eligible for 50% of any bond left after the auction is     completed.\"},\"notifyRedemptionSignatureTimedOut()\":{\"details\":\"This is considered an abort, and is punished by seizing signer      bonds and putting them up for auction. Emits a LiquidationStarted      event and a Liquidated event and sends the full signer bond to the      redeemer. Reverts if the deposit is not currently awaiting a      signature or if the allotted time has not yet elapsed. The caller      is captured as the liquidation initiator, and is eligible for 50%      of any bond left after the auction is completed.\"},\"notifySignerSetupFailed()\":{\"details\":\"This is considered a signer fault, and the signers' bonds are used      to make the deposit setup fee available for withdrawal by the TDT      holder as a refund. The remainder of the signers' bonds are      returned to the bonding pool and the signers are released from any      further responsibilities. Reverts if the deposit is not awaiting      signer setup or if the signing group formation timeout has not      elapsed.\"},\"notifyUndercollateralizedLiquidation()\":{\"details\":\"Calls out to the system for oracle info.This call will revert if the signers are not in fact severely      undercollateralized according to the price feed. Severe      undercollateralization is treated as an abort, and is handled by      seizing signer bonds and putting them up for auction in exchange      for the lot size amount in TBTC (see      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.      The caller is captured as the liquidation initiator, and is      eligible for 50% of any bond left after the auction is completed.\"},\"provideBTCFundingProof(bytes4,bytes,bytes,bytes4,uint8,bytes,uint256,bytes)\":{\"details\":\"Takes a pre-parsed transaction and calculates values needed to      verify funding.\",\"params\":{\"_bitcoinHeaders\":\"Single bytestring of 80-byte bitcoin headers,        lowest height first.\",\"_fundingOutputIndex\":\"Index of funding output in _txOutputVector        (0-indexed).\",\"_merkleProof\":\"The merkle proof of transaction inclusion in a        block.\",\"_txIndexInBlock\":\"Transaction index in the block (0-indexed).\",\"_txInputVector\":\"All transaction inputs prepended by the number of        inputs encoded as a VarInt, max 0xFC(252) inputs.\",\"_txLocktime\":\"Final 4 bytes of the transaction.\",\"_txOutputVector\":\"All transaction outputs prepended by the number         of outputs encoded as a VarInt, max 0xFC(252) outputs.\",\"_txVersion\":\"Transaction version number (4-byte little-endian).\"}},\"provideECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)\":{\"details\":\"This call will revert if the underlying keep cannot verify that      there was fraud. Fraud is handled by seizing signer bonds and      putting them up for auction in exchange for the lot size amount in      TBTC (see `purchaseSignerBondsAtAuction`). Emits a      LiquidationStarted event. The caller is captured as the liquidation      initiator, and is eligible for any bond left after the auction is      completed.\",\"params\":{\"_preimage\":\"The sha256 preimage of the digest.\",\"_r\":\"Signature R value.\",\"_s\":\"Signature S value.\",\"_signedDigest\":\"The digest signed by the signature (v,r,s) tuple.\",\"_v\":\"Signature recovery value.\"}},\"provideFundingECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)\":{\"details\":\"Calls out to the keep to verify if there was fraud.\",\"params\":{\"_preimage\":\"The sha256 preimage of the digest.\",\"_r\":\"Signature R value.\",\"_s\":\"Signature S value.\",\"_signedDigest\":\"The digest signed by the signature (v,r,s) tuple.\",\"_v\":\"Signature recovery value.\"}},\"provideRedemptionProof(bytes4,bytes,bytes,bytes4,bytes,uint256,bytes)\":{\"details\":\"Takes a pre-parsed transaction and calculates values needed to      verify funding. Signers can have their bonds seized if this is not      called within `TBTCConstants.REDEMPTION_PROOF_TIMEOUT` seconds of      a redemption signature being provided.\",\"params\":{\"_bitcoinHeaders\":\"Single bytestring of 80-byte bitcoin headers,        lowest height first.\",\"_merkleProof\":\"The merkle proof of transaction inclusion in a        block.\",\"_txIndexInBlock\":\"Transaction index in the block (0-indexed).\",\"_txInputVector\":\"All transaction inputs prepended by the number of        inputs encoded as a VarInt, max 0xFC(252) inputs.\",\"_txLocktime\":\"Final 4 bytes of the transaction.\",\"_txOutputVector\":\"All transaction outputs prepended by the number         of outputs encoded as a VarInt, max 0xFC(252) outputs.\",\"_txVersion\":\"Transaction version number (4-byte little-endian).\"}},\"provideRedemptionSignature(uint8,bytes32,bytes32)\":{\"details\":\"The signers will be penalized if this function is not called      correctly within `TBTCConstants.REDEMPTION_SIGNATURE_TIMEOUT`      seconds of a redemption request or fee increase being received.\",\"params\":{\"_r\":\"Signature R value.\",\"_s\":\"Signature S value. Should be in the low half of secp256k1        curve's order.\",\"_v\":\"Signature recovery value.\"}},\"purchaseSignerBondsAtAuction()\":{\"details\":\"The amount of ETH given for the transferred TBTC can be read using      the `auctionValue` function; note, however, that the function's      value is only static during the specific block it is queried, as it      varies by block timestamp.\"},\"remainingTerm()\":{\"details\":\"The value accuracy is not guaranteed since block.timestmap can be      lightly manipulated by miners.\",\"return\":\"The remaining term of the deposit in seconds. 0 if already at         term.\"},\"requestFunderAbort(bytes)\":{\"details\":\"This is a self-admitted funder fault, and is only be callable by      the TDT holder. This function emits the FunderAbortRequested event,      but stores no additional state.\",\"params\":{\"_abortOutputScript\":\"The output script the funder wishes to request        a return of their UTXO to.\"}},\"requestRedemption(bytes8,bytes)\":{\"details\":\"The amount of TBTC needed to redeem can be looked up using the      `getRedemptionTbtcRequirement` or `getOwnerRedemptionTbtcRequirement`      functions.\",\"params\":{\"_outputValueBytes\":\"The 8-byte little-endian output size. The         difference between this value and the lot size of the deposit         will be paid as a fee to the Bitcoin miners when the signed         transaction is broadcast.\",\"_redeemerOutputScript\":\"The redeemer's length-prefixed output         script.\"}},\"retrieveSignerPubkey()\":{\"details\":\"Stores the pubkey as 2 bytestrings, X and Y. Emits a      RegisteredPubkey event with the two components. Reverts if the      deposit is not awaiting signer setup, if the generated public key      is unset or has incorrect length, or if the public key has a 0      X or Y value.\"},\"severelyUndercollateralizedThresholdPercent()\":{\"details\":\"This collateralization level is critical. If the collateralization      level falls below this percentage the Deposit can get liquidated.      This value represents the percentage of the backing BTC value the      signers must hold as bond in order to not be severely      undercollateralized. It is set at creation time. Note that the      value for new deposits in TBTCSystem can be changed by governance,      but the value for a particular deposit is static once the deposit      is created.\",\"return\":\"The severely undercollateralized level for this deposit.\"},\"signerFeeTbtc()\":{\"details\":\"This is the one-time fee required by the signers to perform the      tasks needed to maintain a decentralized and trustless model for      tBTC. It is a percentage of the deposit's lot size.\",\"return\":\"Fee amount in TBTC.\"},\"transferAndRequestRedemption(bytes8,bytes,address)\":{\"details\":\"Performs the same action as requestRedemption, but transfers      ownership of the deposit to the specified _finalRecipient. Used as      a utility helper for the vending machine's shortcut      TBTC->redemption path.\",\"params\":{\"_finalRecipient\":\"The address to receive the TDT and later be recorded as deposit redeemer.\",\"_outputValueBytes\":\"The 8-byte little-endian output size.\",\"_redeemerOutputScript\":\"The redeemer's length-prefixed output script.\"}},\"undercollateralizedThresholdPercent()\":{\"details\":\"This collateralization level is semi-critical. If the      collateralization level falls below this percentage the Deposit can      be courtesy-called by calling `notifyCourtesyCall`. This value      represents the percentage of the backing BTC value the signers must      hold as bond in order to not be undercollateralized. It is set at      creation time. Note that the value for new deposits in TBTCSystem      can be changed by governance, but the value for a particular      deposit is static once the deposit is created.\",\"return\":\"The undercollateralized level for this deposit.\"},\"utxoValue()\":{\"details\":\"This call will revert if the deposit is not in a state where the      UTXO info should be valid. In particular, before funding proof is      successfully submitted (i.e. in states START,      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), this value      would not be valid.\",\"return\":\"The value of the funding UTXO in satoshis.\"},\"withdrawFunds()\":{\"details\":\"Withdrawals can only happen when a contract is in an end-state.\"},\"withdrawableAmount()\":{\"details\":\"Generally ETH is only available to withdraw after the deposit      reaches a closed state. The amount reported is for the sender, and      can be withdrawn using `withdrawFunds` if the deposit is in an end      state.\",\"return\":\"The withdraw allowance in wei.\"}},\"title\":\"tBTC Deposit\"},\"userdoc\":{\"methods\":{\"auctionValue()\":{\"notice\":\"Calculates the amount of value at auction right now.\"},\"collateralizationPercentage()\":{\"notice\":\"Get the current collateralization level for this Deposit.\"},\"currentState()\":{\"notice\":\"Get the integer representing the current state.\"},\"exitCourtesyCall()\":{\"notice\":\"Notify the contract that the signers' bond value has recovered         enough to be considered sufficiently collateralized.\"},\"fundingInfo()\":{\"notice\":\"Returns information associated with the funding UXTO.\"},\"getOwnerRedemptionTbtcRequirement(address)\":{\"notice\":\"Get TBTC amount required for redemption assuming _redeemer         is this deposit's owner (TDT holder).\"},\"getRedemptionTbtcRequirement(address)\":{\"notice\":\"Get TBTC amount required for redemption by a specified         _redeemer.\"},\"inActive()\":{\"notice\":\"Check if the Deposit is in ACTIVE state.\"},\"increaseRedemptionFee(bytes8,bytes8)\":{\"notice\":\"Anyone may request a signature for a transaction with an         increased Bitcoin transaction fee.\"},\"initialCollateralizedPercent()\":{\"notice\":\"Get the initial collateralization level for this Deposit.\"},\"initialize(address)\":{\"notice\":\"Set the address of the System contract on contract         initialization.\"},\"initializeDeposit(address,address,address,address,address,uint64)\":{\"notice\":\"This function can only be called by the deposit factory; use         `DepositFactory.createDeposit` to create a new deposit.\"},\"keepAddress()\":{\"notice\":\"Get the contract address of the BondedECDSAKeep associated with         this Deposit.\"},\"lotSizeSatoshis()\":{\"notice\":\"Get this deposit's BTC lot size in satoshis.\"},\"lotSizeTbtc()\":{\"notice\":\"Get this deposit's lot size in TBTC.\"},\"notifyCourtesyCall()\":{\"notice\":\"Notify the contract that the signers are undercollateralized.\"},\"notifyCourtesyCallExpired()\":{\"notice\":\"Notify the contract that the courtesy period has expired and the         deposit should move into liquidation.\"},\"notifyFundingTimedOut()\":{\"notice\":\"Notify the contract that the funding phase of the deposit has         timed out if `provideBTCFundingProof` is not successfully called         within the allotted time. Any sent BTC is left under control of         the signer group, and the funder can use `requestFunderAbort` to         request an at-signer-discretion return of any BTC sent to a         deposit that has been notified of a funding timeout.\"},\"notifyRedemptionProofTimedOut()\":{\"notice\":\"Notify the contract that the deposit has failed to receive a         redemption proof in the allotted time.\"},\"notifyRedemptionSignatureTimedOut()\":{\"notice\":\"Notify the contract that the signers have failed to produce a         signature for a redemption request in the allotted time.\"},\"notifySignerSetupFailed()\":{\"notice\":\"Notify the contract that signing group setup has timed out if         retrieveSignerPubkey is not successfully called within the         allotted time.\"},\"notifyUndercollateralizedLiquidation()\":{\"notice\":\"Notify the contract that the signers are undercollateralized.\"},\"provideBTCFundingProof(bytes4,bytes,bytes,bytes4,uint8,bytes,uint256,bytes)\":{\"notice\":\"Anyone may submit a funding proof to the deposit showing that         a transaction was submitted and sufficiently confirmed on the         Bitcoin chain transferring the deposit lot size's amount of BTC         to the signer-controlled private key corresopnding to this         deposit. This will move the deposit into an active state.\"},\"provideECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)\":{\"notice\":\"Anyone can provide a signature corresponding to the signers'         public key that was not requested to prove fraud. A redemption         request and a redemption fee increase are the only ways to         request a signature from the signers.\"},\"provideFundingECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)\":{\"notice\":\"Anyone can provide a signature corresponding to the signers'         public key to prove fraud during funding. Note that during         funding no signature has been requested from the signers, so         any signature is effectively fraud.\"},\"provideRedemptionProof(bytes4,bytes,bytes,bytes4,bytes,uint256,bytes)\":{\"notice\":\"Anyone may submit a redemption proof to the deposit showing that         a transaction was submitted and sufficiently confirmed on the         Bitcoin chain transferring the deposit lot size's amount of BTC         from the signer-controlled private key corresponding to this         deposit to the requested redemption output script. This will         move the deposit into a redeemed state.\"},\"provideRedemptionSignature(uint8,bytes32,bytes32)\":{\"notice\":\"Anyone may provide a withdrawal signature if it was requested.\"},\"purchaseSignerBondsAtAuction()\":{\"notice\":\"Closes an auction and purchases the signer bonds by transferring         the lot size in TBTC to the redeemer, if there is one, or to the         TDT holder if not. Any bond amount that is not currently up for         auction is either made available for the liquidation initiator         to withdraw (for fraud) or split 50-50 between the initiator and         the signers (for abort or collateralization issues).\"},\"remainingTerm()\":{\"notice\":\"Retrieve the remaining term of the deposit in seconds.\"},\"requestFunderAbort(bytes)\":{\"notice\":\"Requests a funder abort for a failed-funding deposit; that is,         requests the return of a sent UTXO to _abortOutputScript. It         imposes no requirements on the signing group. Signers should         send their UTXO to the requested output script, but do so at         their discretion and with no penalty for failing to do so. This         can be used for example when a UTXO is sent that is the wrong         size for the lot.\"},\"requestRedemption(bytes8,bytes)\":{\"notice\":\"Requests redemption of this deposit, meaning the transmission,         by the signers, of the deposit's UTXO to the specified Bitocin         output script. Requires approving the deposit to spend the         amount of TBTC needed to redeem.\"},\"retrieveSignerPubkey()\":{\"notice\":\"Notify the contract that the ECDSA keep has generated a public         key so the deposit contract can pull it in.\"},\"severelyUndercollateralizedThresholdPercent()\":{\"notice\":\"Get the severe undercollateralization level for this Deposit.\"},\"signerFeeTbtc()\":{\"notice\":\"Get the signer fee for this deposit, in TBTC.\"},\"transferAndRequestRedemption(bytes8,bytes,address)\":{\"notice\":\"This function can only be called by the vending machine.\"},\"undercollateralizedThresholdPercent()\":{\"notice\":\"Get the undercollateralization level for this Deposit.\"},\"utxoValue()\":{\"notice\":\"Get the value of the funding UTXO.\"},\"withdrawFunds()\":{\"notice\":\"Withdraw the ETH balance of the deposit allotted to the caller.\"},\"withdrawableAmount()\":{\"notice\":\"Get caller's ETH withdraw allowance.\"}},\"notice\":\"This is the main contract for tBTC. It is the state machine that         (through various libraries) handles bitcoin funding, bitcoin-spv         proofs, redemption, liquidation, and fraud logic.\"}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/Deposit.sol\":\"Deposit\"},\"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/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/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/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/TBTCToken.sol\":{\"keccak256\":\"0x167b07029df8d350996d7f82d853437d1a2562401eeac98037c2eb4c5f295319\",\"urls\":[\"bzz-raw://7d2601ac8dcd5d59b3e479a61262de2162c96ed7ad1cd161331e2e4500b8346a\",\"dweb:/ipfs/QmWVjBSvHFg9W5zsSxgdpNSYKgfLa28fr3mPjjKQaDBxmk\"]},\"/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\"]},\"@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\"]},\"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/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": "0x60806040526000805460ff191690553480156200001b57600080fd5b506200003463deadbeef6001600160e01b036200003a16565b620000f4565b6001600160a01b038116620000815760405162461bcd60e51b8152600401808060200182810382526023815260200180620032ed6023913960400191505060405180910390fd5b60005460ff1615620000c55760405162461bcd60e51b8152600401808060200182810382526025815260200180620033106025913960400191505060405180910390fd5b6000805460ff196001600160a01b0390931661010002610100600160a81b031990911617919091166001179055565b6131e980620001046000396000f3fe60806040526004361061022f5760003560e01c806391d165e31161012e578063c4d66de8116100ab578063d9f74b0e1161006f578063d9f74b0e14610b8e578063dba4915314610e01578063ea3db25014610eb0578063f97a02fa14610ec5578063fb7c592a14610eee5761022f565b8063c4d66de8146107be578063d02fd958146107f1578063d459c41614610824578063d5eef97114610a8f578063d8d0233014610b5b5761022f565b8063994aa931116100f2578063994aa93114610642578063a81e63f714610704578063b4bd2e7a1461075b578063ba34683914610770578063c4159559146107855761022f565b806391d165e3146105b2578063946fbf4c146105c7578063951303f5146105dc57806396aab311146105f15780639894d734146106065761022f565b80632c735daa116101bc5780636e4668be116101805780636e4668be1461052c57806376ef55101461054157806385df153d1461055657806387a90d801461056b57806390a2f687146105805761022f565b80632c735daa146103f05780632d0994421461040557806335bc0ebe146104d15780634f706e44146104e65780636c3b0114146104fb5761022f565b806313f654df1161020357806313f654df1461038757806324600fc31461039c578063259b1ea3146103b1578063287b32e5146103c65780632b0bc981146103db5761022f565b806249ce751461026e578063058d37031461031f5780630c3f6acf146103465780630d5889f41461035b575b361561026c5760405162461bcd60e51b815260040180806020018281038252603b81526020018061300a603b913960400191505060405180910390fd5b005b34801561027a57600080fd5b5061026c6004803603602081101561029157600080fd5b810190602081018135600160201b8111156102ab57600080fd5b8201836020820111156102bd57600080fd5b803590602001918460018302840111600160201b831117156102de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610fbb945050505050565b34801561032b57600080fd5b50610334611156565b60408051918252519081900360200190f35b34801561035257600080fd5b506103346111db565b34801561036757600080fd5b506103706111eb565b6040805161ffff9092168252519081900360200190f35b34801561039357600080fd5b506103346111fc565b3480156103a857600080fd5b5061026c611309565b3480156103bd57600080fd5b5061026c611315565b3480156103d257600080fd5b5061026c611381565b3480156103e757600080fd5b5061026c6113d3565b3480156103fc57600080fd5b5061026c611425565b34801561041157600080fd5b5061026c600480360360a081101561042857600080fd5b60ff8235169160208101359160408201359160608101359181019060a081016080820135600160201b81111561045d57600080fd5b82018360208201111561046f57600080fd5b803590602001918460018302840111600160201b8311171561049057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611477945050505050565b3480156104dd57600080fd5b50610334611578565b3480156104f257600080fd5b5061026c6115cc565b34801561050757600080fd5b5061051061161e565b604080516001600160a01b039092168252519081900360200190f35b34801561053857600080fd5b5061033461162d565b34801561054d57600080fd5b50610370611681565b34801561056257600080fd5b5061037061168b565b34801561057757600080fd5b5061033461169b565b34801561058c57600080fd5b506105956117a9565b6040805167ffffffffffffffff9092168252519081900360200190f35b3480156105be57600080fd5b5061026c6117c0565b3480156105d357600080fd5b50610334611812565b3480156105e857600080fd5b50610334611866565b3480156105fd57600080fd5b5061026c611877565b34801561061257600080fd5b5061026c6004803603604081101561062957600080fd5b506001600160c01b0319813581169160200135166118c9565b34801561064e57600080fd5b5061026c6004803603604081101561066557600080fd5b6001600160c01b03198235169190810190604081016020820135600160201b81111561069057600080fd5b8201836020820111156106a257600080fd5b803590602001918460018302840111600160201b831117156106c357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061194f945050505050565b61026c600480360360c081101561071a57600080fd5b5080356001600160a01b03908116916020810135821691604082013581169160608101358216916080820135169060a0013567ffffffffffffffff16611a21565b34801561076757600080fd5b5061026c611b88565b34801561077c57600080fd5b5061026c611bda565b34801561079157600080fd5b5061026c600480360360608110156107a857600080fd5b5060ff8135169060208101359060400135611c2c565b3480156107ca57600080fd5b5061026c600480360360208110156107e157600080fd5b50356001600160a01b0316611cb2565b3480156107fd57600080fd5b506103346004803603602081101561081457600080fd5b50356001600160a01b0316611d68565b34801561083057600080fd5b5061026c600480360360e081101561084757600080fd5b6001600160e01b03198235169190810190604081016020820135600160201b81111561087257600080fd5b82018360208201111561088457600080fd5b803590602001918460018302840111600160201b831117156108a557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156108f757600080fd5b82018360208201111561090957600080fd5b803590602001918460018302840111600160201b8311171561092a57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160e01b0319853516959094909350604081019250602001359050600160201b81111561098e57600080fd5b8201836020820111156109a057600080fd5b803590602001918460018302840111600160201b831117156109c157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b811115610a1b57600080fd5b820183602082011115610a2d57600080fd5b803590602001918460018302840111600160201b83111715610a4e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d89945050505050565b348015610a9b57600080fd5b5061026c600480360360a0811015610ab257600080fd5b60ff8235169160208101359160408201359160608101359181019060a081016080820135600160201b811115610ae757600080fd5b820183602082011115610af957600080fd5b803590602001918460018302840111600160201b83111715610b1a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611fcb945050505050565b348015610b6757600080fd5b5061033460048036036020811015610b7e57600080fd5b50356001600160a01b031661205d565b348015610b9a57600080fd5b5061026c6004803603610100811015610bb257600080fd5b6001600160e01b03198235169190810190604081016020820135600160201b811115610bdd57600080fd5b820183602082011115610bef57600080fd5b803590602001918460018302840111600160201b83111715610c1057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610c6257600080fd5b820183602082011115610c7457600080fd5b803590602001918460018302840111600160201b83111715610c9557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160e01b03198535169560ff60208701351695919450925060608101915060400135600160201b811115610d0057600080fd5b820183602082011115610d1257600080fd5b803590602001918460018302840111600160201b83111715610d3357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b811115610d8d57600080fd5b820183602082011115610d9f57600080fd5b803590602001918460018302840111600160201b83111715610dc057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612072945050505050565b348015610e0d57600080fd5b50610e166122c2565b60405180846001600160c01b0319166001600160c01b031916815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610e73578181015183820152602001610e5b565b50505050905090810190601f168015610ea05780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610ebc57600080fd5b5061026c612428565b348015610ed157600080fd5b50610eda61247a565b604080519115158252519081900360200190f35b348015610efa57600080fd5b5061026c60048036036060811015610f1157600080fd5b6001600160c01b03198235169190810190604081016020820135600160201b811115610f3c57600080fd5b820183602082011115610f4e57600080fd5b803590602001918460018302840111600160201b83111715610f6f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506124ce9050565b6040805163ad91ce1f60e01b8152600160048201529051339173__DepositUtils__________________________9163ad91ce1f91602480820192602092909190829003018186803b15801561101057600080fd5b505af4158015611024573d6000803e3d6000fd5b505050506040513d602081101561103a57600080fd5b50516001600160a01b0316146110815760405162461bcd60e51b81526004018080602001828103825260288152602001806130456028913960400191505060405180910390fd5b60408051635f3c5d8960e01b81526001600482018181526024830193845284516044840152845173__DepositFunding________________________94635f3c5d8994879392606490910190602085019080838360005b838110156110f05781810151838201526020016110d8565b50505050905090810190601f16801561111d5780820380516001836020036101000a031916815260200191505b50935050505060006040518083038186803b15801561113b57600080fd5b505af415801561114f573d6000803e3d6000fd5b5050505050565b6000600173__DepositUtils__________________________63a880784890916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156111aa57600080fd5b505af41580156111be573d6000803e3d6000fd5b505050506040513d60208110156111d457600080fd5b5051905090565b600554600160e01b900460ff1690565b600654600160201b900461ffff1690565b6000600173__DepositStates_________________________63fb0611ff90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561125057600080fd5b505af4158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b50516112b75760405162461bcd60e51b815260040180806020018281038252602981526020018061315f6029913960400191505060405180910390fd5b604080516350ef3aa160e01b815260016004820152905173__DepositUtils__________________________916350ef3aa1916024808301926020929190829003018186803b1580156111aa57600080fd5b61131360016125f5565b565b6040805163426e16c160e01b815260016004820152905173__DepositFunding________________________9163426e16c1916024808301926000929190829003018186803b15801561136757600080fd5b505af415801561137b573d6000803e3d6000fd5b50505050565b6040805163077aceb960e31b815260016004820152905173__DepositLiquidation____________________91633bd675c8916024808301926000929190829003018186803b15801561136757600080fd5b6040805163439b7be160e11b815260016004820152905173__DepositRedemption_____________________91638736f7c2916024808301926000929190829003018186803b15801561136757600080fd5b60408051631754228360e11b815260016004820152905173__DepositLiquidation____________________91632ea84506916024808301926000929190829003018186803b15801561136757600080fd5b600173__DepositFunding________________________63fb12d9df909187878787876040518763ffffffff1660e01b8152600401808781526020018660ff1660ff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561150a5781810151838201526020016114f2565b50505050905090810190601f1680156115375780820380516001836020036101000a031916815260200191505b5097505050505050505060006040518083038186803b15801561155957600080fd5b505af415801561156d573d6000803e3d6000fd5b505050505050505050565b6000600173__DepositUtils__________________________6391f88c8590916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156111aa57600080fd5b604080516361f036d360e01b815260016004820152905173__DepositFunding________________________916361f036d3916024808301926000929190829003018186803b15801561136757600080fd5b600b546001600160a01b031690565b6000600173__DepositLiquidation____________________63e86e97b690916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156111aa57600080fd5b60065461ffff1690565b60065462010000900461ffff1690565b6000600173__DepositStates_________________________6348312fa390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156116ef57600080fd5b505af4158015611703573d6000803e3d6000fd5b505050506040513d602081101561171957600080fd5b5051156117575760405162461bcd60e51b8152600401808060200182810382526041815260200180612f7a6041913960600191505060405180910390fd5b60408051631ec664f560e21b815260016004820152905173__DepositUtils__________________________91637b1993d4916024808301926020929190829003018186803b1580156111aa57600080fd5b600554600160a01b900467ffffffffffffffff1690565b60408051634e40547560e11b815260016004820152905173__DepositLiquidation____________________91639c80a8ea916024808301926000929190829003018186803b15801561136757600080fd5b6000600173__DepositUtils__________________________637949c2d290916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156111aa57600080fd5b60006118726001612812565b905090565b6040805163a221542160e01b815260016004820152905173__DepositLiquidation____________________9163a2215421916024808301926000929190829003018186803b15801561136757600080fd5b60408051632d0c21bf60e01b8152600160048201526001600160c01b0319808516602483015283166044820152905173__DepositRedemption_____________________91632d0c21bf916064808301926000929190829003018186803b15801561193357600080fd5b505af4158015611947573d6000803e3d6000fd5b505050505050565b604051632cac94ef60e01b81526001600482018181526001600160c01b03198516602484015260606044840190815284516064850152845173__DepositRedemption_____________________94632cac94ef94938893889391929091608490910190602085019080838360005b838110156119d55781810151838201526020016119bd565b50505050905090810190601f168015611a025780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038186803b15801561193357600080fd5b60005460ff16611a625760405162461bcd60e51b815260040180806020018281038252602d815260200180613188602d913960400191505060405180910390fd5b60005461010090046001600160a01b03163314611ab05760405162461bcd60e51b81526004018080602001828103825260268152602001806131396026913960400191505060405180910390fd5b600180546001600160a01b03199081166001600160a01b03898116919091178355600280548316898316179055600380548316888316179055600480548316878316178155600580549093169186169190911790915560408051632851e9dd60e01b81529182019290925267ffffffffffffffff83166024820152905173__DepositFunding________________________91632851e9dd916044808301926000929190829003018186803b158015611b6857600080fd5b505af4158015611b7c573d6000803e3d6000fd5b50505050505050505050565b604080516324e8e19960e21b815260016004820152905173__DepositLiquidation____________________916393a38664916024808301926000929190829003018186803b15801561136757600080fd5b604080516304bfa27760e01b815260016004820152905173__DepositRedemption_____________________916304bfa277916024808301926000929190829003018186803b15801561136757600080fd5b60408051631e3435d560e11b81526001600482015260ff851660248201526044810184905260648101839052905173__DepositRedemption_____________________91633c686baa916084808301926000929190829003018186803b158015611c9557600080fd5b505af4158015611ca9573d6000803e3d6000fd5b50505050505050565b6001600160a01b038116611cf75760405162461bcd60e51b8152600401808060200182810382526023815260200180612fbb6023913960400191505060405180910390fd5b60005460ff1615611d395760405162461bcd60e51b81526004018080602001828103825260258152602001806131146025913960400191505060405180910390fd5b6000805460ff196001600160a01b0390931661010002610100600160a81b031990911617919091166001179055565b600080611d7d6001848363ffffffff61282916565b5090925050505b919050565b604051636c7e2b9d60e01b81526001600482018181526001600160e01b0319808b1660248501528716608484015260c48301859052610100604484019081528951610104850152895173__DepositRedemption_____________________94636c7e2b9d94938d938d938d938d938d938d938d93606481019160a482019160e48101916101249091019060208d019080838360005b83811015611e36578181015183820152602001611e1e565b50505050905090810190601f168015611e635780820380516001836020036101000a031916815260200191505b5085810384528a5181528a516020918201918c019080838360005b83811015611e96578181015183820152602001611e7e565b50505050905090810190601f168015611ec35780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b83811015611ef6578181015183820152602001611ede565b50505050905090810190601f168015611f235780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015611f56578181015183820152602001611f3e565b50505050905090810190601f168015611f835780820380516001836020036101000a031916815260200191505b509c5050505050505050505050505060006040518083038186803b158015611faa57600080fd5b505af4158015611fbe573d6000803e3d6000fd5b5050505050505050505050565b600173__DepositLiquidation____________________634941676c909187878787876040518763ffffffff1660e01b8152600401808781526020018660ff1660ff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360008381101561150a5781810151838201526020016114f2565b600080611d7d6001848163ffffffff61282916565b60405163d745519360e01b81526001600482018181526001600160e01b0319808c1660248501528816608484015260ff871660a484015260e48301859052610120604484019081528a516101248501528a5173__DepositFunding________________________9463d745519394938e938e938e938e938e938e938e938e939291606482019160c4810191610104820191610144019060208e019080838360005b8381101561212b578181015183820152602001612113565b50505050905090810190601f1680156121585780820380516001836020036101000a031916815260200191505b5085810384528b5181528b516020918201918d019080838360005b8381101561218b578181015183820152602001612173565b50505050905090810190601f1680156121b85780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b838110156121eb5781810151838201526020016121d3565b50505050905090810190601f1680156122185780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b8381101561224b578181015183820152602001612233565b50505050905090810190601f1680156122785780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060006040518083038186803b1580156122a057600080fd5b505af41580156122b4573d6000803e3d6000fd5b505050505050505050505050565b6000806060600173__DepositStates_________________________6348312fa390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561231957600080fd5b505af415801561232d573d6000803e3d6000fd5b505050506040513d602081101561234357600080fd5b5051156123815760405162461bcd60e51b8152600401808060200182810382526041815260200180612f7a6041913960600191505060405180910390fd5b60165460175460188054604080516020601f6002600019600187161561010002019095169490940493840181900481028201810190925282815260c09590951b949183918301828280156124165780601f106123eb57610100808354040283529160200191612416565b820191906000526020600020905b8154815290600101906020018083116123f957829003601f168201915b50505050509050925092509250909192565b60408051632ec8740960e21b815260016004820152905173__DepositFunding________________________9163bb21d024916024808301926000929190829003018186803b15801561136757600080fd5b6000600173__DepositStates_________________________630f2c635590916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156111aa57600080fd5b6005546001600160a01b031633146125175760405162461bcd60e51b815260040180806020018281038252603e8152602001806130d6603e913960400191505060405180910390fd5b604051630d806ee760e41b81526001600482018181526001600160c01b0319861660248401526001600160a01b038416606484015260806044840190815285516084850152855173__DepositRedemption_____________________9463d806ee70949389938993899360a40190602086019080838360005b838110156125a8578181015183820152602001612590565b50505050905090810190601f1680156125d55780820380516001836020036101000a031916815260200191505b509550505050505060006040518083038186803b158015611c9557600080fd5b336000908152601882016020908152604091829020548251635a33257560e01b8152600481018590529251909273__DepositStates_________________________92635a33257592602480840193829003018186803b15801561265857600080fd5b505af415801561266c573d6000803e3d6000fd5b505050506040513d602081101561268257600080fd5b50516126d5576040805162461bcd60e51b815260206004820152601b60248201527f436f6e7472616374206e6f7420796574207465726d696e617465640000000000604482015290519081900360640190fd5b60008111612720576040805162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015290519081900360640190fd5b80471015612775576040805162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e6365000000604482015290519081900360640190fd5b3360008181526018840160205260408082208290555190919083908381818185875af1925050503d80600081146127c8576040519150601f19603f3d011682016040523d82523d6000602084013e6127cd565b606091505b505090508061280d5760405162461bcd60e51b815260040180806020018281038252602c815260200180612fde602c913960400191505060405180910390fd5b505050565b336000908152601882016020526040902054919050565b60008060008084806128545750856001600160a01b031661284988612aa0565b6001600160a01b0316145b905060008061286289612b1f565b1180156128e957508773__DepositStates_________________________63761275bf90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156128bb57600080fd5b505af41580156128cf573d6000803e3d6000fd5b505050506040513d60208110156128e557600080fd5b5051155b905081806128f5575080155b6129305760405162461bcd60e51b815260040180806020018281038252604881526020018061306d6048913960600191505060405180910390fd5b60008061293c8a612bd1565b6001600160a01b0316141590506000886001600160a01b031661295e8b612bd1565b6001600160a01b031614905060006129758b612cd6565b905060006129868286868987612d02565b90506129aa8161299e6129988f612d50565b89612de1565b9063ffffffff612df816565b60018d0154604080516370a0823160e01b81523060048201529051929b506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156129fd57600080fd5b505afa158015612a11573d6000803e3d6000fd5b505050506040513d6020811015612a2757600080fd5b50519050808a1115612a4a57612a438a8263ffffffff612e5916565b9950612a4f565b600099505b858015612a595750845b8015612a63575083155b15612a6c578297505b612a8e88612a828581858f63ffffffff612df816565b9063ffffffff612e5916565b98505050505050505093509350939050565b6002810154604080516331a9108f60e11b815230600482015290516000926001600160a01b031691636352211e916024808301926020929190829003018186803b158015612aed57600080fd5b505afa158015612b01573d6000803e3d6000fd5b505050506040513d6020811015612b1757600080fd5b505192915050565b600080612ba673__TBTCConstants_________________________63d565d1f16040518163ffffffff1660e01b815260040160206040518083038186803b158015612b6957600080fd5b505af4158015612b7d573d6000803e3d6000fd5b505050506040513d6020811015612b9357600080fd5b505160168501549063ffffffff612df816565b905080421015612bc857612bc0814263ffffffff612e5916565b915050611d84565b50600092915050565b600381015460408051634f558e7960e01b8152306004820152905160009283926001600160a01b0390911691634f558e7991602480820192602092909190829003018186803b158015612c2357600080fd5b505afa158015612c37573d6000803e3d6000fd5b505050506040513d6020811015612c4d57600080fd5b505115612cd0576003830154604080516331a9108f60e11b815230600482015290516001600160a01b0390921691636352211e91602480820192602092909190829003018186803b158015612ca157600080fd5b505afa158015612cb5573d6000803e3d6000fd5b505050506040513d6020811015612ccb57600080fd5b505190505b92915050565b6004810154600090612cd090600160e81b900461ffff16612cf684612d50565b9063ffffffff612eb616565b600080858015612d0f5750845b8015612d19575082155b905060008680612d265750855b80612d2e5750845b905060008115612d3b5788015b8215612d445788015b98975050505050505050565b6000612cd073__TBTCConstants_________________________63ae9eb1276040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9957600080fd5b505af4158015612dad573d6000803e3d6000fd5b505050506040513d6020811015612dc357600080fd5b50516004840154600160a01b900467ffffffffffffffff1690612f20565b60008115612df157506000612cd0565b5090919050565b600082820183811015612e52576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082821115612eb0576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000808211612f0c576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b6000828481612f1757fe5b04949350505050565b600082612f2f57506000612cd0565b82820282848281612f3c57fe5b0414612e525760405162461bcd60e51b81526004018080602001828103825260218152602001806130b56021913960400191505060405180910390fdfe4465706f73697420686173206e6f7420796574206265656e2066756e64656420616e6420686173206e6f20617661696c61626c652066756e64696e6720696e666f466163746f72792063616e6e6f7420626520746865207a65726f20616464726573732e4661696c656420746f2073656e6420776974686472617761626c6520616d6f756e7420746f2073656e6465724465706f73697420636f6e7472616374207761732063616c6c6564207769746820756e6b6e6f776e2066756e6374696f6e2073656c6563746f722e4f6e6c792054445420686f6c6465722063616e20726571756573742066756e6465722061626f72744f6e6c792054445420686f6c6465722063616e2072656465656d20756e6c657373206465706f7369742069732061742d7465726d206f7220696e20434f5552544553595f43414c4c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f6e6c79207468652076656e64696e67206d616368696e652063616e2063616c6c207472616e73666572416e6452657175657374526564656d7074696f6e466163746f72792063616e206f6e6c7920626520696e697469616c697a6564206f6e63652e43616c6c6572206d757374206265206465706f736974466163746f727920636f6e74726163744465706f73697420686173206e6f2066756e64732063757272656e746c792061742061756374696f6e466163746f727920696e697469616c697a6174696f6e206d7573742068617665206265656e2063616c6c65642ea265627a7a72315820b9ad64f30246e8b9b3b755c2b6ee88405c53307bf84f386d24089b5bc603b26064736f6c63430005110032466163746f72792063616e6e6f7420626520746865207a65726f20616464726573732e466163746f72792063616e206f6e6c7920626520696e697469616c697a6564206f6e63652e",
  "deployedBytecode": "0x60806040526004361061022f5760003560e01c806391d165e31161012e578063c4d66de8116100ab578063d9f74b0e1161006f578063d9f74b0e14610b8e578063dba4915314610e01578063ea3db25014610eb0578063f97a02fa14610ec5578063fb7c592a14610eee5761022f565b8063c4d66de8146107be578063d02fd958146107f1578063d459c41614610824578063d5eef97114610a8f578063d8d0233014610b5b5761022f565b8063994aa931116100f2578063994aa93114610642578063a81e63f714610704578063b4bd2e7a1461075b578063ba34683914610770578063c4159559146107855761022f565b806391d165e3146105b2578063946fbf4c146105c7578063951303f5146105dc57806396aab311146105f15780639894d734146106065761022f565b80632c735daa116101bc5780636e4668be116101805780636e4668be1461052c57806376ef55101461054157806385df153d1461055657806387a90d801461056b57806390a2f687146105805761022f565b80632c735daa146103f05780632d0994421461040557806335bc0ebe146104d15780634f706e44146104e65780636c3b0114146104fb5761022f565b806313f654df1161020357806313f654df1461038757806324600fc31461039c578063259b1ea3146103b1578063287b32e5146103c65780632b0bc981146103db5761022f565b806249ce751461026e578063058d37031461031f5780630c3f6acf146103465780630d5889f41461035b575b361561026c5760405162461bcd60e51b815260040180806020018281038252603b81526020018061300a603b913960400191505060405180910390fd5b005b34801561027a57600080fd5b5061026c6004803603602081101561029157600080fd5b810190602081018135600160201b8111156102ab57600080fd5b8201836020820111156102bd57600080fd5b803590602001918460018302840111600160201b831117156102de57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610fbb945050505050565b34801561032b57600080fd5b50610334611156565b60408051918252519081900360200190f35b34801561035257600080fd5b506103346111db565b34801561036757600080fd5b506103706111eb565b6040805161ffff9092168252519081900360200190f35b34801561039357600080fd5b506103346111fc565b3480156103a857600080fd5b5061026c611309565b3480156103bd57600080fd5b5061026c611315565b3480156103d257600080fd5b5061026c611381565b3480156103e757600080fd5b5061026c6113d3565b3480156103fc57600080fd5b5061026c611425565b34801561041157600080fd5b5061026c600480360360a081101561042857600080fd5b60ff8235169160208101359160408201359160608101359181019060a081016080820135600160201b81111561045d57600080fd5b82018360208201111561046f57600080fd5b803590602001918460018302840111600160201b8311171561049057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611477945050505050565b3480156104dd57600080fd5b50610334611578565b3480156104f257600080fd5b5061026c6115cc565b34801561050757600080fd5b5061051061161e565b604080516001600160a01b039092168252519081900360200190f35b34801561053857600080fd5b5061033461162d565b34801561054d57600080fd5b50610370611681565b34801561056257600080fd5b5061037061168b565b34801561057757600080fd5b5061033461169b565b34801561058c57600080fd5b506105956117a9565b6040805167ffffffffffffffff9092168252519081900360200190f35b3480156105be57600080fd5b5061026c6117c0565b3480156105d357600080fd5b50610334611812565b3480156105e857600080fd5b50610334611866565b3480156105fd57600080fd5b5061026c611877565b34801561061257600080fd5b5061026c6004803603604081101561062957600080fd5b506001600160c01b0319813581169160200135166118c9565b34801561064e57600080fd5b5061026c6004803603604081101561066557600080fd5b6001600160c01b03198235169190810190604081016020820135600160201b81111561069057600080fd5b8201836020820111156106a257600080fd5b803590602001918460018302840111600160201b831117156106c357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061194f945050505050565b61026c600480360360c081101561071a57600080fd5b5080356001600160a01b03908116916020810135821691604082013581169160608101358216916080820135169060a0013567ffffffffffffffff16611a21565b34801561076757600080fd5b5061026c611b88565b34801561077c57600080fd5b5061026c611bda565b34801561079157600080fd5b5061026c600480360360608110156107a857600080fd5b5060ff8135169060208101359060400135611c2c565b3480156107ca57600080fd5b5061026c600480360360208110156107e157600080fd5b50356001600160a01b0316611cb2565b3480156107fd57600080fd5b506103346004803603602081101561081457600080fd5b50356001600160a01b0316611d68565b34801561083057600080fd5b5061026c600480360360e081101561084757600080fd5b6001600160e01b03198235169190810190604081016020820135600160201b81111561087257600080fd5b82018360208201111561088457600080fd5b803590602001918460018302840111600160201b831117156108a557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156108f757600080fd5b82018360208201111561090957600080fd5b803590602001918460018302840111600160201b8311171561092a57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160e01b0319853516959094909350604081019250602001359050600160201b81111561098e57600080fd5b8201836020820111156109a057600080fd5b803590602001918460018302840111600160201b831117156109c157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b811115610a1b57600080fd5b820183602082011115610a2d57600080fd5b803590602001918460018302840111600160201b83111715610a4e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d89945050505050565b348015610a9b57600080fd5b5061026c600480360360a0811015610ab257600080fd5b60ff8235169160208101359160408201359160608101359181019060a081016080820135600160201b811115610ae757600080fd5b820183602082011115610af957600080fd5b803590602001918460018302840111600160201b83111715610b1a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611fcb945050505050565b348015610b6757600080fd5b5061033460048036036020811015610b7e57600080fd5b50356001600160a01b031661205d565b348015610b9a57600080fd5b5061026c6004803603610100811015610bb257600080fd5b6001600160e01b03198235169190810190604081016020820135600160201b811115610bdd57600080fd5b820183602082011115610bef57600080fd5b803590602001918460018302840111600160201b83111715610c1057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610c6257600080fd5b820183602082011115610c7457600080fd5b803590602001918460018302840111600160201b83111715610c9557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160e01b03198535169560ff60208701351695919450925060608101915060400135600160201b811115610d0057600080fd5b820183602082011115610d1257600080fd5b803590602001918460018302840111600160201b83111715610d3357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b811115610d8d57600080fd5b820183602082011115610d9f57600080fd5b803590602001918460018302840111600160201b83111715610dc057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612072945050505050565b348015610e0d57600080fd5b50610e166122c2565b60405180846001600160c01b0319166001600160c01b031916815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610e73578181015183820152602001610e5b565b50505050905090810190601f168015610ea05780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610ebc57600080fd5b5061026c612428565b348015610ed157600080fd5b50610eda61247a565b604080519115158252519081900360200190f35b348015610efa57600080fd5b5061026c60048036036060811015610f1157600080fd5b6001600160c01b03198235169190810190604081016020820135600160201b811115610f3c57600080fd5b820183602082011115610f4e57600080fd5b803590602001918460018302840111600160201b83111715610f6f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506124ce9050565b6040805163ad91ce1f60e01b8152600160048201529051339173__DepositUtils__________________________9163ad91ce1f91602480820192602092909190829003018186803b15801561101057600080fd5b505af4158015611024573d6000803e3d6000fd5b505050506040513d602081101561103a57600080fd5b50516001600160a01b0316146110815760405162461bcd60e51b81526004018080602001828103825260288152602001806130456028913960400191505060405180910390fd5b60408051635f3c5d8960e01b81526001600482018181526024830193845284516044840152845173__DepositFunding________________________94635f3c5d8994879392606490910190602085019080838360005b838110156110f05781810151838201526020016110d8565b50505050905090810190601f16801561111d5780820380516001836020036101000a031916815260200191505b50935050505060006040518083038186803b15801561113b57600080fd5b505af415801561114f573d6000803e3d6000fd5b5050505050565b6000600173__DepositUtils__________________________63a880784890916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156111aa57600080fd5b505af41580156111be573d6000803e3d6000fd5b505050506040513d60208110156111d457600080fd5b5051905090565b600554600160e01b900460ff1690565b600654600160201b900461ffff1690565b6000600173__DepositStates_________________________63fb0611ff90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561125057600080fd5b505af4158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b50516112b75760405162461bcd60e51b815260040180806020018281038252602981526020018061315f6029913960400191505060405180910390fd5b604080516350ef3aa160e01b815260016004820152905173__DepositUtils__________________________916350ef3aa1916024808301926020929190829003018186803b1580156111aa57600080fd5b61131360016125f5565b565b6040805163426e16c160e01b815260016004820152905173__DepositFunding________________________9163426e16c1916024808301926000929190829003018186803b15801561136757600080fd5b505af415801561137b573d6000803e3d6000fd5b50505050565b6040805163077aceb960e31b815260016004820152905173__DepositLiquidation____________________91633bd675c8916024808301926000929190829003018186803b15801561136757600080fd5b6040805163439b7be160e11b815260016004820152905173__DepositRedemption_____________________91638736f7c2916024808301926000929190829003018186803b15801561136757600080fd5b60408051631754228360e11b815260016004820152905173__DepositLiquidation____________________91632ea84506916024808301926000929190829003018186803b15801561136757600080fd5b600173__DepositFunding________________________63fb12d9df909187878787876040518763ffffffff1660e01b8152600401808781526020018660ff1660ff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561150a5781810151838201526020016114f2565b50505050905090810190601f1680156115375780820380516001836020036101000a031916815260200191505b5097505050505050505060006040518083038186803b15801561155957600080fd5b505af415801561156d573d6000803e3d6000fd5b505050505050505050565b6000600173__DepositUtils__________________________6391f88c8590916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156111aa57600080fd5b604080516361f036d360e01b815260016004820152905173__DepositFunding________________________916361f036d3916024808301926000929190829003018186803b15801561136757600080fd5b600b546001600160a01b031690565b6000600173__DepositLiquidation____________________63e86e97b690916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156111aa57600080fd5b60065461ffff1690565b60065462010000900461ffff1690565b6000600173__DepositStates_________________________6348312fa390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156116ef57600080fd5b505af4158015611703573d6000803e3d6000fd5b505050506040513d602081101561171957600080fd5b5051156117575760405162461bcd60e51b8152600401808060200182810382526041815260200180612f7a6041913960600191505060405180910390fd5b60408051631ec664f560e21b815260016004820152905173__DepositUtils__________________________91637b1993d4916024808301926020929190829003018186803b1580156111aa57600080fd5b600554600160a01b900467ffffffffffffffff1690565b60408051634e40547560e11b815260016004820152905173__DepositLiquidation____________________91639c80a8ea916024808301926000929190829003018186803b15801561136757600080fd5b6000600173__DepositUtils__________________________637949c2d290916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156111aa57600080fd5b60006118726001612812565b905090565b6040805163a221542160e01b815260016004820152905173__DepositLiquidation____________________9163a2215421916024808301926000929190829003018186803b15801561136757600080fd5b60408051632d0c21bf60e01b8152600160048201526001600160c01b0319808516602483015283166044820152905173__DepositRedemption_____________________91632d0c21bf916064808301926000929190829003018186803b15801561193357600080fd5b505af4158015611947573d6000803e3d6000fd5b505050505050565b604051632cac94ef60e01b81526001600482018181526001600160c01b03198516602484015260606044840190815284516064850152845173__DepositRedemption_____________________94632cac94ef94938893889391929091608490910190602085019080838360005b838110156119d55781810151838201526020016119bd565b50505050905090810190601f168015611a025780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038186803b15801561193357600080fd5b60005460ff16611a625760405162461bcd60e51b815260040180806020018281038252602d815260200180613188602d913960400191505060405180910390fd5b60005461010090046001600160a01b03163314611ab05760405162461bcd60e51b81526004018080602001828103825260268152602001806131396026913960400191505060405180910390fd5b600180546001600160a01b03199081166001600160a01b03898116919091178355600280548316898316179055600380548316888316179055600480548316878316178155600580549093169186169190911790915560408051632851e9dd60e01b81529182019290925267ffffffffffffffff83166024820152905173__DepositFunding________________________91632851e9dd916044808301926000929190829003018186803b158015611b6857600080fd5b505af4158015611b7c573d6000803e3d6000fd5b50505050505050505050565b604080516324e8e19960e21b815260016004820152905173__DepositLiquidation____________________916393a38664916024808301926000929190829003018186803b15801561136757600080fd5b604080516304bfa27760e01b815260016004820152905173__DepositRedemption_____________________916304bfa277916024808301926000929190829003018186803b15801561136757600080fd5b60408051631e3435d560e11b81526001600482015260ff851660248201526044810184905260648101839052905173__DepositRedemption_____________________91633c686baa916084808301926000929190829003018186803b158015611c9557600080fd5b505af4158015611ca9573d6000803e3d6000fd5b50505050505050565b6001600160a01b038116611cf75760405162461bcd60e51b8152600401808060200182810382526023815260200180612fbb6023913960400191505060405180910390fd5b60005460ff1615611d395760405162461bcd60e51b81526004018080602001828103825260258152602001806131146025913960400191505060405180910390fd5b6000805460ff196001600160a01b0390931661010002610100600160a81b031990911617919091166001179055565b600080611d7d6001848363ffffffff61282916565b5090925050505b919050565b604051636c7e2b9d60e01b81526001600482018181526001600160e01b0319808b1660248501528716608484015260c48301859052610100604484019081528951610104850152895173__DepositRedemption_____________________94636c7e2b9d94938d938d938d938d938d938d938d93606481019160a482019160e48101916101249091019060208d019080838360005b83811015611e36578181015183820152602001611e1e565b50505050905090810190601f168015611e635780820380516001836020036101000a031916815260200191505b5085810384528a5181528a516020918201918c019080838360005b83811015611e96578181015183820152602001611e7e565b50505050905090810190601f168015611ec35780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b83811015611ef6578181015183820152602001611ede565b50505050905090810190601f168015611f235780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015611f56578181015183820152602001611f3e565b50505050905090810190601f168015611f835780820380516001836020036101000a031916815260200191505b509c5050505050505050505050505060006040518083038186803b158015611faa57600080fd5b505af4158015611fbe573d6000803e3d6000fd5b5050505050505050505050565b600173__DepositLiquidation____________________634941676c909187878787876040518763ffffffff1660e01b8152600401808781526020018660ff1660ff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360008381101561150a5781810151838201526020016114f2565b600080611d7d6001848163ffffffff61282916565b60405163d745519360e01b81526001600482018181526001600160e01b0319808c1660248501528816608484015260ff871660a484015260e48301859052610120604484019081528a516101248501528a5173__DepositFunding________________________9463d745519394938e938e938e938e938e938e938e938e939291606482019160c4810191610104820191610144019060208e019080838360005b8381101561212b578181015183820152602001612113565b50505050905090810190601f1680156121585780820380516001836020036101000a031916815260200191505b5085810384528b5181528b516020918201918d019080838360005b8381101561218b578181015183820152602001612173565b50505050905090810190601f1680156121b85780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b838110156121eb5781810151838201526020016121d3565b50505050905090810190601f1680156122185780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b8381101561224b578181015183820152602001612233565b50505050905090810190601f1680156122785780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060006040518083038186803b1580156122a057600080fd5b505af41580156122b4573d6000803e3d6000fd5b505050505050505050505050565b6000806060600173__DepositStates_________________________6348312fa390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561231957600080fd5b505af415801561232d573d6000803e3d6000fd5b505050506040513d602081101561234357600080fd5b5051156123815760405162461bcd60e51b8152600401808060200182810382526041815260200180612f7a6041913960600191505060405180910390fd5b60165460175460188054604080516020601f6002600019600187161561010002019095169490940493840181900481028201810190925282815260c09590951b949183918301828280156124165780601f106123eb57610100808354040283529160200191612416565b820191906000526020600020905b8154815290600101906020018083116123f957829003601f168201915b50505050509050925092509250909192565b60408051632ec8740960e21b815260016004820152905173__DepositFunding________________________9163bb21d024916024808301926000929190829003018186803b15801561136757600080fd5b6000600173__DepositStates_________________________630f2c635590916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156111aa57600080fd5b6005546001600160a01b031633146125175760405162461bcd60e51b815260040180806020018281038252603e8152602001806130d6603e913960400191505060405180910390fd5b604051630d806ee760e41b81526001600482018181526001600160c01b0319861660248401526001600160a01b038416606484015260806044840190815285516084850152855173__DepositRedemption_____________________9463d806ee70949389938993899360a40190602086019080838360005b838110156125a8578181015183820152602001612590565b50505050905090810190601f1680156125d55780820380516001836020036101000a031916815260200191505b509550505050505060006040518083038186803b158015611c9557600080fd5b336000908152601882016020908152604091829020548251635a33257560e01b8152600481018590529251909273__DepositStates_________________________92635a33257592602480840193829003018186803b15801561265857600080fd5b505af415801561266c573d6000803e3d6000fd5b505050506040513d602081101561268257600080fd5b50516126d5576040805162461bcd60e51b815260206004820152601b60248201527f436f6e7472616374206e6f7420796574207465726d696e617465640000000000604482015290519081900360640190fd5b60008111612720576040805162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015290519081900360640190fd5b80471015612775576040805162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e6365000000604482015290519081900360640190fd5b3360008181526018840160205260408082208290555190919083908381818185875af1925050503d80600081146127c8576040519150601f19603f3d011682016040523d82523d6000602084013e6127cd565b606091505b505090508061280d5760405162461bcd60e51b815260040180806020018281038252602c815260200180612fde602c913960400191505060405180910390fd5b505050565b336000908152601882016020526040902054919050565b60008060008084806128545750856001600160a01b031661284988612aa0565b6001600160a01b0316145b905060008061286289612b1f565b1180156128e957508773__DepositStates_________________________63761275bf90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156128bb57600080fd5b505af41580156128cf573d6000803e3d6000fd5b505050506040513d60208110156128e557600080fd5b5051155b905081806128f5575080155b6129305760405162461bcd60e51b815260040180806020018281038252604881526020018061306d6048913960600191505060405180910390fd5b60008061293c8a612bd1565b6001600160a01b0316141590506000886001600160a01b031661295e8b612bd1565b6001600160a01b031614905060006129758b612cd6565b905060006129868286868987612d02565b90506129aa8161299e6129988f612d50565b89612de1565b9063ffffffff612df816565b60018d0154604080516370a0823160e01b81523060048201529051929b506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156129fd57600080fd5b505afa158015612a11573d6000803e3d6000fd5b505050506040513d6020811015612a2757600080fd5b50519050808a1115612a4a57612a438a8263ffffffff612e5916565b9950612a4f565b600099505b858015612a595750845b8015612a63575083155b15612a6c578297505b612a8e88612a828581858f63ffffffff612df816565b9063ffffffff612e5916565b98505050505050505093509350939050565b6002810154604080516331a9108f60e11b815230600482015290516000926001600160a01b031691636352211e916024808301926020929190829003018186803b158015612aed57600080fd5b505afa158015612b01573d6000803e3d6000fd5b505050506040513d6020811015612b1757600080fd5b505192915050565b600080612ba673__TBTCConstants_________________________63d565d1f16040518163ffffffff1660e01b815260040160206040518083038186803b158015612b6957600080fd5b505af4158015612b7d573d6000803e3d6000fd5b505050506040513d6020811015612b9357600080fd5b505160168501549063ffffffff612df816565b905080421015612bc857612bc0814263ffffffff612e5916565b915050611d84565b50600092915050565b600381015460408051634f558e7960e01b8152306004820152905160009283926001600160a01b0390911691634f558e7991602480820192602092909190829003018186803b158015612c2357600080fd5b505afa158015612c37573d6000803e3d6000fd5b505050506040513d6020811015612c4d57600080fd5b505115612cd0576003830154604080516331a9108f60e11b815230600482015290516001600160a01b0390921691636352211e91602480820192602092909190829003018186803b158015612ca157600080fd5b505afa158015612cb5573d6000803e3d6000fd5b505050506040513d6020811015612ccb57600080fd5b505190505b92915050565b6004810154600090612cd090600160e81b900461ffff16612cf684612d50565b9063ffffffff612eb616565b600080858015612d0f5750845b8015612d19575082155b905060008680612d265750855b80612d2e5750845b905060008115612d3b5788015b8215612d445788015b98975050505050505050565b6000612cd073__TBTCConstants_________________________63ae9eb1276040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9957600080fd5b505af4158015612dad573d6000803e3d6000fd5b505050506040513d6020811015612dc357600080fd5b50516004840154600160a01b900467ffffffffffffffff1690612f20565b60008115612df157506000612cd0565b5090919050565b600082820183811015612e52576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082821115612eb0576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000808211612f0c576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b6000828481612f1757fe5b04949350505050565b600082612f2f57506000612cd0565b82820282848281612f3c57fe5b0414612e525760405162461bcd60e51b81526004018080602001828103825260218152602001806130b56021913960400191505060405180910390fdfe4465706f73697420686173206e6f7420796574206265656e2066756e64656420616e6420686173206e6f20617661696c61626c652066756e64696e6720696e666f466163746f72792063616e6e6f7420626520746865207a65726f20616464726573732e4661696c656420746f2073656e6420776974686472617761626c6520616d6f756e7420746f2073656e6465724465706f73697420636f6e7472616374207761732063616c6c6564207769746820756e6b6e6f776e2066756e6374696f6e2073656c6563746f722e4f6e6c792054445420686f6c6465722063616e20726571756573742066756e6465722061626f72744f6e6c792054445420686f6c6465722063616e2072656465656d20756e6c657373206465706f7369742069732061742d7465726d206f7220696e20434f5552544553595f43414c4c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f6e6c79207468652076656e64696e67206d616368696e652063616e2063616c6c207472616e73666572416e6452657175657374526564656d7074696f6e466163746f72792063616e206f6e6c7920626520696e697469616c697a6564206f6e63652e43616c6c6572206d757374206265206465706f736974466163746f727920636f6e74726163744465706f73697420686173206e6f2066756e64732063757272656e746c792061742061756374696f6e466163746f727920696e697469616c697a6174696f6e206d7573742068617665206265656e2063616c6c65642ea265627a7a72315820b9ad64f30246e8b9b3b755c2b6ee88405c53307bf84f386d24089b5bc603b26064736f6c63430005110032",
  "sourceMap": "1690:30656:2:-;;;342:5:18;313:34;;-1:-1:-1;;313:34:18;;;2327:216:2;5:2:-1;;;;30:1;27;20:12;5:2;-1:-1;2505:31:2;2524:10;-1:-1:-1;;;;;2505:10:2;:31;:::i;:::-;1690:30656;;947:271:18;-1:-1:-1;;;;;1010:22:18;;1002:70;;;;-1:-1:-1;;;1002:70:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1091:12;;;;1090:13;1082:63;;;;-1:-1:-1;;;1082:63:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:15;:26;;-1:-1:-1;;;;;;;1156:26:18;;;;;-1:-1:-1;;;;;;1156:26:18;;;;1192:19;;;;1156:15;1192:19;;;947:271::o;1690:30656:2:-;;;;;;;",
  "deployedSourceMap": "1690:30656:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2662:8;:20;2641:126;;;;-1:-1:-1;;;2641:126:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1690:30656;13593:316;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13593:316:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13593:316:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;13593:316:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13593:316:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;13593:316:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13593:316:2;;-1:-1:-1;13593:316:2;;-1:-1:-1;;;;;13593:316:2:i;3744:101::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3744:101:2;;;:::i;:::-;;;;;;;;;;;;;;;;4120:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4120:106:2;;;:::i;7628:186::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7628:186:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9801:224;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9801:224:2;;;:::i;32273:71::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32273:71:2;;;:::i;12671:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12671:87:2;;;:::i;17725:77::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17725:77:2;;;:::i;21463:111::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21463:111:2;;;:::i;23124:101::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23124:101:2;;;:::i;14518:389::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14518:389:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14518:389:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;14518:389:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14518:389:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14518:389:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14518:389:2;;-1:-1:-1;14518:389:2;;-1:-1:-1;;;;;14518:389:2:i;5067:101::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5067:101:2;;;:::i;11264:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11264:91:2;;;:::i;4672:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4672:95:2;;;:::i;:::-;;;;-1:-1:-1;;;;;4672:95:2;;;;;;;;;;;;;;5447:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5447:129:2;;;:::i;5870:128::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5870:128:2;;;:::i;6736:170::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6736:170:2;;;:::i;8259:233::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8259:233:2;;;:::i;2972:102::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2972:102:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18509:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18509:95:2;;;:::i;3323:97::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3323:97:2;;;:::i;10386:114::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10386:114:2;;;:::i;17350:81::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17350:81:2;;;:::i;26995:251::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26995:251:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;;26995:251:2;;;;;;;;;;:::i;25321:256::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25321:256:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25321:256:2;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;25321:256:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25321:256:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;25321:256:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;25321:256:2;;-1:-1:-1;25321:256:2;;-1:-1:-1;;;;;25321:256:2:i;30413:556::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;30413:556:2;;-1:-1:-1;;;;;30413:556:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19324:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19324:117:2;;;:::i;22266:103::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22266:103:2;;;:::i;26075:169::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26075:169:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26075:169:2;;;;;;;;;;;;;;:::i;947:271:18:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;947:271:18;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;947:271:18;-1:-1:-1;;;;;947:271:18;;:::i;23698:255:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23698:255:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23698:255:2;-1:-1:-1;;;;;23698:255:2;;:::i;28706:582::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28706:582:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;28706:582:2;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28706:582:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28706:582:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;28706:582:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28706:582:2;;;;;;;;-1:-1:-1;28706:582:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;28706:582:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28706:582:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;28706:582:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28706:582:2;;-1:-1:-1;;;;;;28706:582:2;;;;;;;;-1:-1:-1;28706:582:2;;;;-1:-1:-1;28706:582:2;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;28706:582:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28706:582:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;28706:582:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28706:582:2;;;;;;;;;-1:-1:-1;28706:582:2;;;;-1:-1:-1;28706:582:2;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;28706:582:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28706:582:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;28706:582:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28706:582:2;;-1:-1:-1;28706:582:2;;-1:-1:-1;;;;;28706:582:2:i;20472:305::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20472:305:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;20472:305:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;20472:305:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20472:305:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;20472:305:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;20472:305:2;;-1:-1:-1;20472:305:2;;-1:-1:-1;;;;;20472:305:2:i;24219:259::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24219:259:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24219:259:2;-1:-1:-1;;;;;24219:259:2;;:::i;16227:650::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16227:650:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;16227:650:2;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;16227:650:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:650:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;16227:650:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:650:2;;;;;;;;-1:-1:-1;16227:650:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;16227:650:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:650:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;16227:650:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:650:2;;-1:-1:-1;;;;;;16227:650:2;;;;;;;;;;;;;-1:-1:-1;16227:650:2;-1:-1:-1;16227:650:2;;;;-1:-1:-1;16227:650:2;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;16227:650:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:650:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;16227:650:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:650:2;;;;;;;;;-1:-1:-1;16227:650:2;;;;-1:-1:-1;16227:650:2;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;16227:650:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:650:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;16227:650:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:650:2;;-1:-1:-1;16227:650:2;;-1:-1:-1;;;;;16227:650:2:i;8977:407::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8977:407:2;;;:::i;:::-;;;;;-1:-1:-1;;;;;8977:407:2;;-1:-1:-1;;;;;8977:407:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8977:407:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11824:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11824:85:2;;;:::i;4347:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4347:88:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;31569:541;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31569:541:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;31569:541:2;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;31569:541:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31569:541:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;31569:541:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31569:541:2;;-1:-1:-1;;;31569:541:2;;-1:-1:-1;;;;;31569:541:2;;-1:-1:-1;31569:541:2;;-1:-1:-1;31569:541:2:i;13593:316::-;13749:19;;;-1:-1:-1;;;13749:19:2;;:4;:19;;;;;;13772:10;;13749:17;;;;:19;;;;;;;;;;;;;;;:17;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;13749:19:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13749:19:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13749:19:2;-1:-1:-1;;;;;13749:33:2;;13728:120;;;;-1:-1:-1;;;13728:120:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13859:43;;;-1:-1:-1;;;13859:43:2;;:4;:43;;;;;;;;;;;;;;;;;;;;:23;;;;13883:18;;13859:43;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13859:43:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13859:43:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13859:43:2;;;;13593:316;:::o;3744:101::-;3792:7;3818:4;:18;;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3818:20:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3818:20:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3818:20:2;;-1:-1:-1;3744:101:2;:::o;4120:106::-;4201:17;;-1:-1:-1;;;4201:17:2;;;;;4120:106::o;7628:186::-;7759:48;;-1:-1:-1;;;7759:48:2;;;;;7628:186::o;9801:224::-;9848:7;9888:4;:24;;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9888:26:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9888:26:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9888:26:2;9867:114;;;;-1:-1:-1;;;9867:114:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9999:19;;;-1:-1:-1;;;9999:19:2;;:4;:19;;;;;;:17;;;;:19;;;;;;;;;;;;;;:17;:19;;;5:2:-1;;;;30:1;27;20:12;32273:71:2;32317:20;:4;:18;:20::i;:::-;32273:71::o;12671:87::-;12723:28;;;-1:-1:-1;;;12723:28:2;;:4;:28;;;;;;:26;;;;:28;;;;;-1:-1:-1;;12723:28:2;;;;;;;:26;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;12723:28:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12723:28:2;;;;12671:87::o;17725:77::-;17772:23;;;-1:-1:-1;;;17772:23:2;;:4;:23;;;;;;:21;;;;:23;;;;;-1:-1:-1;;17772:23:2;;;;;;;:21;:23;;;5:2:-1;;;;30:1;27;20:12;21463:111:2;21527:40;;;-1:-1:-1;;;21527:40:2;;:4;:40;;;;;;:38;;;;:40;;;;;-1:-1:-1;;21527:40:2;;;;;;;:38;:40;;;5:2:-1;;;;30:1;27;20:12;23124:101:2;23183:35;;;-1:-1:-1;;;23183:35:2;;:4;:35;;;;;;:33;;;;:35;;;;;-1:-1:-1;;23183:35:2;;;;;;;:33;:35;;;5:2:-1;;;;30:1;27;20:12;14518:389:2;14758:4;:34;;;;14806:2;14822;14838;14854:13;14881:9;14758:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14758:142:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14758:142:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14758:142:2;;;;14518:389;;;;;:::o;5067:101::-;5115:7;5141:4;:18;;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;11264:91:2;11318:30;;;-1:-1:-1;;;11318:30:2;;:4;:30;;;;;;:28;;;;:30;;;;;-1:-1:-1;;11318:30:2;;;;;;;:28;:30;;;5:2:-1;;;;30:1;27;20:12;4672:95:2;4744:16;;-1:-1:-1;;;;;4744:16:2;4672:95;:::o;5447:129::-;5509:7;5535:4;:32;;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5870:128:2;5958:33;;;;5870:128;:::o;6736:170::-;6859:40;;;;;;;;6736:170::o;8259:233::-;8303:7;8344:4;:14;;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8344:16:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8344:16:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8344:16:2;8343:17;8322:129;;;;-1:-1:-1;;;8322:129:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8469:16;;;-1:-1:-1;;;8469:16:2;;:4;:16;;;;;;:14;;;;:16;;;;;;;;;;;;;;:14;:16;;;5:2:-1;;;;30:1;27;20:12;2972:102:2;3047:20;;-1:-1:-1;;;3047:20:2;;;;;2972:102::o;18509:95::-;18565:32;;;-1:-1:-1;;;18565:32:2;;:4;:32;;;;;;:30;;;;:32;;;;;-1:-1:-1;;18565:32:2;;;;;;;:30;:32;;;5:2:-1;;;;30:1;27;20:12;3323:97:2;3369:7;3395:4;:16;;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;10386:114:2;10439:7;10465:28;:4;:26;:28::i;:::-;10458:35;;10386:114;:::o;17350:81::-;17399:25;;;-1:-1:-1;;;17399:25:2;;:4;:25;;;;;;:23;;;;:25;;;;;-1:-1:-1;;17399:25:2;;;;;;;:23;:25;;;5:2:-1;;;;30:1;27;20:12;26995:251:2;27130:109;;;-1:-1:-1;;;27130:109:2;;:4;:109;;;;-1:-1:-1;;;;;;27130:109:2;;;;;;;;;;;;;;;:26;;;;:109;;;;;-1:-1:-1;;27130:109:2;;;;;;;:26;:109;;;5:2:-1;;;;30:1;27;20:12;5:2;27130:109:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27130:109:2;;;;26995:251;;:::o;25321:256::-;25506:64;;-1:-1:-1;;;25506:64:2;;:4;:64;;;;;;-1:-1:-1;;;;;;25506:64:2;;;;;;;;;;;;;;;;;;;;;:22;;;;:4;25529:17;;25548:21;;25506:64;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;25506:64:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;30413:556:2;1364:12:18;;;;1356:70;;;;-1:-1:-1;;;1356:70:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1471:15;;;;;-1:-1:-1;;;;;1471:15:18;1457:10;:29;1436:114;;;;-1:-1:-1;;;1436:114:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30694:4:2;:29;;-1:-1:-1;;;;;;30694:29:2;;;-1:-1:-1;;;;;30694:29:2;;;;;;;;;30733:14;:27;;;;;;;;;;30770:21;:41;;;;;;;;;;30821:19;:37;;;;;;;;;;30868:26;:51;;;;;;;;;;;;;;;30929:33;;;-1:-1:-1;;;30929:33:2;;;;;;;;;;;;;;;;;;:15;;;;:33;;;;;-1:-1:-1;;30929:33:2;;;;;;;:15;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;30929:33:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30929:33:2;;;;30413:556;;;;;;:::o;19324:117::-;19391:43;;;-1:-1:-1;;;19391:43:2;;:4;:43;;;;;;:41;;;;:43;;;;;-1:-1:-1;;19391:43:2;;;;;;;:41;:43;;;5:2:-1;;;;30:1;27;20:12;22266:103:2;22326:36;;;-1:-1:-1;;;22326:36:2;;:4;:36;;;;;;:34;;;;:36;;;;;-1:-1:-1;;22326:36:2;;;;;;;:34;:36;;;5:2:-1;;;;30:1;27;20:12;26075:169:2;26194:43;;;-1:-1:-1;;;26194:43:2;;:4;:43;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;;:43;;;;;-1:-1:-1;;26194:43:2;;;;;;;:31;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;26194:43:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26194:43:2;;;;26075:169;;;:::o;947:271:18:-;-1:-1:-1;;;;;1010:22:18;;1002:70;;;;-1:-1:-1;;;1002:70:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1091:12;;;;1090:13;1082:63;;;;-1:-1:-1;;;1082:63:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:15;:26;;-1:-1:-1;;;;;;;1156:26:18;;;;;-1:-1:-1;;;;;;1156:26:18;;;;1192:19;;;;1156:15;1192:19;;;947:271::o;23698:255:2:-;23802:7;;23865:53;:4;23901:9;23802:7;23865:53;:35;:53;:::i;:::-;-1:-1:-1;23825:93:2;;-1:-1:-1;;;23698:255:2;;;;:::o;28706:582::-;29054:227;;-1:-1:-1;;;29054:227:2;;:4;:227;;;;;;-1:-1:-1;;;;;;29054:227:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;;:4;29095:10;;29119:14;;29147:15;;29176:11;;29201:12;;29227:15;;29256;;29054:227;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29054:227:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29054:227:2;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29054:227:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29054:227:2;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29054:227:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29054:227:2;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29054:227:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29054:227:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29054:227:2;;;;28706:582;;;;;;;:::o;20472:305::-;20705:4;:27;;;;20733:2;20737;20741;20745:13;20760:9;20705:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;24219:259:2;24328:7;;24391:52;24438:4;24427:9;24438:4;24391:52;:35;:52;:::i;16227:650::-;16610:260;;-1:-1:-1;;;16610:260:2;;:4;:260;;;;;;-1:-1:-1;;;;;;16610:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;;:4;16651:10;;16675:14;;16703:15;;16732:11;;16757:19;;16790:12;;16816:15;;16845;;16610:260;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16610:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16610:260:2;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16610:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16610:260:2;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16610:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16610:260:2;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16610:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16610:260:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16610:260:2;;;;16227:650;;;;;;;;:::o;8977:407::-;9060:21;9095:16;9125:25;9197:4;:14;;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9197:16:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9197:16:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9197:16:2;9196:17;9175:129;;;;-1:-1:-1;;;9175:129:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9323:19;;9344:13;;9359:17;9315:62;;;;;;;;-1:-1:-1;;9323:4:2;9315:62;;;9323:19;9315:62;;;;;;;;;;;;;;;;;;;;;;;;;;;9323:19;;;;;;9315:62;9359:17;;9315:62;;9359:17;9315:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8977:407;;;:::o;11824:85::-;11875:27;;;-1:-1:-1;;;11875:27:2;;:4;:27;;;;;;:25;;;;:27;;;;;-1:-1:-1;;11875:27:2;;;;;;;:25;:27;;;5:2:-1;;;;30:1;27;20:12;4347:88:2;4390:4;4413;:13;;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;31569:541:2;31841:26;;-1:-1:-1;;;;;31841:26:2;31827:10;:40;31806:149;;;;-1:-1:-1;;;31806:149:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31965:138;;-1:-1:-1;;;31965:138:2;;:4;:138;;;;;;-1:-1:-1;;;;;;31965:138:2;;;;;;-1:-1:-1;;;;;31965:138:2;;;;;;;;;;;;;;;;;;;;;:33;;;;:4;32012:17;;32043:21;;32078:15;;31965:138;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31965:138:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;21389:660:7;21507:10;21464:17;21484:34;;;:22;;;:34;;;;;;;;;;21537:15;;-1:-1:-1;;;21537:15:7;;;;;;;;;;21484:34;;21537:13;;;;:15;;;;;;;;;;:13;:15;;;5:2:-1;;;;30:1;27;20:12;5:2;21537:15:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21537:15:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21537:15:7;21529:55;;;;;-1:-1:-1;;;21529:55:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;21614:1;21602:9;:13;21594:45;;;;;-1:-1:-1;;;21594:45:7;;;;;;;;;;;;-1:-1:-1;;;21594:45:7;;;;;;;;;;;;;;;21695:9;21670:21;:34;;21649:110;;;;;-1:-1:-1;;;21649:110:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;21835:10;21849:1;21812:34;;;:22;;;:34;;;;;;:38;;;21937:36;21849:1;;21835:10;21959:9;;21849:1;21937:36;21849:1;21937:36;21959:9;21835:10;21937:36;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;21923:50:7;;;21991:2;21983:59;;;;-1:-1:-1;;;21983:59:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21389:660;;;:::o;22172:182::-;22336:10;22283:7;22313:34;;;:22;;;:34;;;;;;22172:182;;;:::o;24892:2373::-;25104:21;25139:23;25176;25224:21;25260:23;:56;;;;25307:9;-1:-1:-1;;;;;25287:29:7;:16;25300:2;25287:12;:16::i;:::-;-1:-1:-1;;;;;25287:29:7;;25260:56;25224:92;;25326:12;25361:1;25341:17;25355:2;25341:13;:17::i;:::-;:21;:45;;;;;25367:2;:17;;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25367:19:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25367:19:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25367:19:7;25366:20;25341:45;25326:60;;25418:16;:28;;;;25439:7;25438:8;25418:28;25397:147;;;;-1:-1:-1;;;25397:147:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25555:14;;25572:24;25593:2;25572:20;:24::i;:::-;-1:-1:-1;;;;;25572:38:7;;;25555:55;;25620:21;25672:9;-1:-1:-1;;;;;25644:37:7;:24;25665:2;25644:20;:24::i;:::-;-1:-1:-1;;;;;25644:37:7;;25620:61;;25691:17;25711;25725:2;25711:13;:17::i;:::-;25691:37;;25739:17;25771:189;25817:9;25844:7;25869:9;25896:16;25930;25771:28;:189::i;:::-;25739:221;;26085:126;26201:9;26085:98;26128:15;26140:2;26128:11;:15::i;:::-;26157:16;26085:29;:98::i;:::-;:115;:126;:115;:126;:::i;:::-;26346:12;;;;:37;;;-1:-1:-1;;;26346:37:7;;26377:4;26346:37;;;;;;26069:142;;-1:-1:-1;26328:15:7;;-1:-1:-1;;;;;26346:12:7;;;;:22;;:37;;;;;;;;;;;;;;;:12;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;26346:37:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26346:37:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26346:37:7;;-1:-1:-1;26397:23:7;;;26393:144;;;26452:26;:13;26470:7;26452:26;:17;:26;:::i;:::-;26436:42;;26393:144;;;26525:1;26509:17;;26393:144;26931:7;:20;;;;;26942:9;26931:20;:41;;;;;26956:16;26955:17;26931:41;26927:99;;;27006:9;26988:27;;26927:99;27107:84;27166:15;27107:41;27138:9;27107:41;:7;27119:13;27107:26;:11;:26;:::i;:::-;:30;:41;:30;:41;:::i;:84::-;27089:102;-1:-1:-1;;;;;;;;24892:2373:7;;;;;;;:::o;19001:243::-;19171:19;;;;:51;;;-1:-1:-1;;;19171:51:7;;19215:4;19171:51;;;;;;19088:15;;-1:-1:-1;;;;;19171:19:7;;:27;;:51;;;;;;;;;;;;;;:19;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;19171:51:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19171:51:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19171:51:7;;19001:243;-1:-1:-1;;19001:243:7:o;12092:320::-;12193:7;12216:17;12236:47;12252:13;:28;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12252:30:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12252:30:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12252:30:7;12236:11;;;;;:47;:15;:47;:::i;:::-;12216:67;;12315:9;12297:15;:27;12293:95;;;12347:30;:9;12361:15;12347:30;:13;:30;:::i;:::-;12340:37;;;;;12293:95;-1:-1:-1;12404:1:7;;12092:320;-1:-1:-1;;12092:320:7:o;18359:410::-;18531:17;;;;:48;;;-1:-1:-1;;;18531:48:7;;18572:4;18531:48;;;;;;18454:15;;;;-1:-1:-1;;;;;18531:17:7;;;;:24;;:48;;;;;;;;;;;;;;;:17;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;18531:48:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18531:48:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18531:48:7;18527:190;;;18642:17;;;;:49;;;-1:-1:-1;;;18642:49:7;;18684:4;18642:49;;;;;;-1:-1:-1;;;;;18642:17:7;;;;:25;;:49;;;;;;;;;;;;;;;:17;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;18642:49:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18642:49:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18642:49:7;;-1:-1:-1;18527:190:7;18749:11;18359:410;-1:-1:-1;;18359:410:7:o;13961:137::-;14071:19;;;;14025:7;;14051:40;;-1:-1:-1;;;14071:19:7;;;;14051:15;14071:19;14051:11;:15::i;:::-;:19;:40;:19;:40;:::i;28270:1072::-;28476:7;28679:28;28722:8;:22;;;;;28734:10;28722:22;:44;;;;;28749:17;28748:18;28722:44;28679:87;;28777:22;28814:8;:190;;;;28994:10;28814:190;:298;;;;29095:17;28814:298;28777:335;-1:-1:-1;29123:17:7;29154:70;;;;29191:22;;29154:70;29237:23;29233:76;;;29276:22;;29233:76;29326:9;28270:1072;-1:-1:-1;;;;;;;;28270:1072:7:o;13589:155::-;13651:7;13677:60;13700:13;:34;:36;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13700:36:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13700:36:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13700:36:7;13677:18;;;;-1:-1:-1;;;13677:18:7;;;;;:22;:60::i;27557:232::-;27683:7;27706:17;27702:56;;;-1:-1:-1;27746:1:7;27739:8;;27702:56;-1:-1:-1;27774:8:7;;27557:232;-1:-1:-1;27557:232:7:o;834:176:60:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:60:o;1274:179::-;1332:7;1364:1;1359;:6;;1351:49;;;;;-1:-1:-1;;;1351:49:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1422:5:60;;;1274:179::o;2606:326::-;2664:7;2761:1;2757;:5;2749:44;;;;;-1:-1:-1;;;2749:44:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:9;2819:1;2815;:5;;;;;;;2606:326;-1:-1:-1;;;;2606:326:60:o;1693:458::-;1751:7;1991:6;1987:45;;-1:-1:-1;2020:1:60;2013:8;;1987:45;2054:5;;;2058:1;2054;:5;:1;2077:5;;;;;:10;2069:56;;;;-1:-1:-1;;;2069:56:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity 0.5.17;\n\nimport {DepositLiquidation} from \"./DepositLiquidation.sol\";\nimport {DepositUtils} from \"./DepositUtils.sol\";\nimport {DepositFunding} from \"./DepositFunding.sol\";\nimport {DepositRedemption} from \"./DepositRedemption.sol\";\nimport {DepositStates} from \"./DepositStates.sol\";\nimport {ITBTCSystem} from \"../interfaces/ITBTCSystem.sol\";\nimport {\n    IERC721\n} from \"openzeppelin-solidity/contracts/token/ERC721/IERC721.sol\";\nimport {TBTCToken} from \"../system/TBTCToken.sol\";\nimport {FeeRebateToken} from \"../system/FeeRebateToken.sol\";\n\nimport \"../system/DepositFactoryAuthority.sol\";\n\n// solium-disable function-order\n// Below, a few functions must be public to allow bytes memory parameters, but\n// their being so triggers errors because public functions should be grouped\n// below external functions. Since these would be external if it were possible,\n// we ignore the issue.\n\n/// @title  tBTC Deposit\n/// @notice This is the main contract for tBTC. It is the state machine that\n///         (through various libraries) handles bitcoin funding, bitcoin-spv\n///         proofs, redemption, liquidation, and fraud logic.\n/// @dev This contract presents a public API that exposes the following\n///      libraries:\n///\n///       - `DepositFunding`\n///       - `DepositLiquidaton`\n///       - `DepositRedemption`,\n///       - `DepositStates`\n///       - `DepositUtils`\n///       - `OutsourceDepositLogging`\n///       - `TBTCConstants`\n///\n///      Where these libraries require deposit state, this contract's state\n///      variable `self` is used. `self` is a struct of type\n///      `DepositUtils.Deposit` that contains all aspects of the deposit state\n///      itself.\ncontract Deposit is DepositFactoryAuthority {\n    using DepositRedemption for DepositUtils.Deposit;\n    using DepositFunding for DepositUtils.Deposit;\n    using DepositLiquidation for DepositUtils.Deposit;\n    using DepositUtils for DepositUtils.Deposit;\n    using DepositStates for DepositUtils.Deposit;\n\n    DepositUtils.Deposit self;\n\n    /// @dev Deposit should only be _constructed_ once. New deposits are created\n    ///      using the `DepositFactory.createDeposit` method, and are clones of\n    ///      the constructed deposit. The factory will set the initial values\n    ///      for a new clone using `initializeDeposit`.\n    constructor() public {\n        // The constructed Deposit will never be used, so the deposit factory\n        // address can be anything. Clones are updated as per above.\n        initialize(address(0xdeadbeef));\n    }\n\n    /// @notice Deposits do not accept arbitrary ETH.\n    function() external payable {\n        require(\n            msg.data.length == 0,\n            \"Deposit contract was called with unknown function selector.\"\n        );\n    }\n\n    //----------------------------- METADATA LOOKUP ------------------------------//\n\n    /// @notice Get this deposit's BTC lot size in satoshis.\n    /// @return uint64 lot size in satoshis.\n    function lotSizeSatoshis() external view returns (uint64) {\n        return self.lotSizeSatoshis;\n    }\n\n    /// @notice Get this deposit's lot size in TBTC.\n    /// @dev This is the same as lotSizeSatoshis(), but is multiplied to scale\n    ///      to 18 decimal places.\n    /// @return uint256 lot size in TBTC precision (max 18 decimal places).\n    function lotSizeTbtc() external view returns (uint256) {\n        return self.lotSizeTbtc();\n    }\n\n    /// @notice Get the signer fee for this deposit, in TBTC.\n    /// @dev This is the one-time fee required by the signers to perform the\n    ///      tasks needed to maintain a decentralized and trustless model for\n    ///      tBTC. It is a percentage of the deposit's lot size.\n    /// @return Fee amount in TBTC.\n    function signerFeeTbtc() external view returns (uint256) {\n        return self.signerFeeTbtc();\n    }\n\n    /// @notice Get the integer representing the current state.\n    /// @dev We implement this because contracts don't handle foreign enums\n    ///      well. See `DepositStates` for more info on states.\n    /// @return The 0-indexed state from the DepositStates enum.\n    function currentState() external view returns (uint256) {\n        return uint256(self.currentState);\n    }\n\n    /// @notice Check if the Deposit is in ACTIVE state.\n    /// @return True if state is ACTIVE, false otherwise.\n    function inActive() external view returns (bool) {\n        return self.inActive();\n    }\n\n    /// @notice Get the contract address of the BondedECDSAKeep associated with\n    ///         this Deposit.\n    /// @dev The keep contract address is saved on Deposit initialization.\n    /// @return Address of the Keep contract.\n    function keepAddress() external view returns (address) {\n        return self.keepAddress;\n    }\n\n    /// @notice Retrieve the remaining term of the deposit in seconds.\n    /// @dev The value accuracy is not guaranteed since block.timestmap can be\n    ///      lightly manipulated by miners.\n    /// @return The remaining term of the deposit in seconds. 0 if already at\n    ///         term.\n    function remainingTerm() external view returns (uint256) {\n        return self.remainingTerm();\n    }\n\n    /// @notice Get the current collateralization level for this Deposit.\n    /// @dev This value represents the percentage of the backing BTC value the\n    ///      signers currently must hold as bond.\n    /// @return The current collateralization level for this deposit.\n    function collateralizationPercentage() external view returns (uint256) {\n        return self.collateralizationPercentage();\n    }\n\n    /// @notice Get the initial collateralization level for this Deposit.\n    /// @dev This value represents the percentage of the backing BTC value\n    ///      the signers hold initially. It is set at creation time.\n    /// @return The initial collateralization level for this deposit.\n    function initialCollateralizedPercent() external view returns (uint16) {\n        return self.initialCollateralizedPercent;\n    }\n\n    /// @notice Get the undercollateralization level for this Deposit.\n    /// @dev This collateralization level is semi-critical. If the\n    ///      collateralization level falls below this percentage the Deposit can\n    ///      be courtesy-called by calling `notifyCourtesyCall`. This value\n    ///      represents the percentage of the backing BTC value the signers must\n    ///      hold as bond in order to not be undercollateralized. It is set at\n    ///      creation time. Note that the value for new deposits in TBTCSystem\n    ///      can be changed by governance, but the value for a particular\n    ///      deposit is static once the deposit is created.\n    /// @return The undercollateralized level for this deposit.\n    function undercollateralizedThresholdPercent()\n        external\n        view\n        returns (uint16)\n    {\n        return self.undercollateralizedThresholdPercent;\n    }\n\n    /// @notice Get the severe undercollateralization level for this Deposit.\n    /// @dev This collateralization level is critical. If the collateralization\n    ///      level falls below this percentage the Deposit can get liquidated.\n    ///      This value represents the percentage of the backing BTC value the\n    ///      signers must hold as bond in order to not be severely\n    ///      undercollateralized. It is set at creation time. Note that the\n    ///      value for new deposits in TBTCSystem can be changed by governance,\n    ///      but the value for a particular deposit is static once the deposit\n    ///      is created.\n    /// @return The severely undercollateralized level for this deposit.\n    function severelyUndercollateralizedThresholdPercent()\n        external\n        view\n        returns (uint16)\n    {\n        return self.severelyUndercollateralizedThresholdPercent;\n    }\n\n    /// @notice Get the value of the funding UTXO.\n    /// @dev This call will revert if the deposit is not in a state where the\n    ///      UTXO info should be valid. In particular, before funding proof is\n    ///      successfully submitted (i.e. in states START,\n    ///      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), this value\n    ///      would not be valid.\n    /// @return The value of the funding UTXO in satoshis.\n    function utxoValue() external view returns (uint256) {\n        require(\n            !self.inFunding(),\n            \"Deposit has not yet been funded and has no available funding info\"\n        );\n\n        return self.utxoValue();\n    }\n\n    /// @notice Returns information associated with the funding UXTO.\n    /// @dev This call will revert if the deposit is not in a state where the\n    ///      funding info should be valid. In particular, before funding proof\n    ///      is successfully submitted (i.e. in states START,\n    ///      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), none of\n    ///      these values are set or valid.\n    /// @return A tuple of (uxtoValueBytes, fundedAt, uxtoOutpoint).\n    function fundingInfo()\n        external\n        view\n        returns (\n            bytes8 utxoValueBytes,\n            uint256 fundedAt,\n            bytes memory utxoOutpoint\n        )\n    {\n        require(\n            !self.inFunding(),\n            \"Deposit has not yet been funded and has no available funding info\"\n        );\n\n        return (self.utxoValueBytes, self.fundedAt, self.utxoOutpoint);\n    }\n\n    /// @notice Calculates the amount of value at auction right now.\n    /// @dev This call will revert if the deposit is not in a state where an\n    ///      auction is currently in progress.\n    /// @return The value in wei that would be received in exchange for the\n    ///         deposit's lot size in TBTC if `purchaseSignerBondsAtAuction`\n    ///         were called at the time this function is called.\n    function auctionValue() external view returns (uint256) {\n        require(\n            self.inSignerLiquidation(),\n            \"Deposit has no funds currently at auction\"\n        );\n\n        return self.auctionValue();\n    }\n\n    /// @notice Get caller's ETH withdraw allowance.\n    /// @dev Generally ETH is only available to withdraw after the deposit\n    ///      reaches a closed state. The amount reported is for the sender, and\n    ///      can be withdrawn using `withdrawFunds` if the deposit is in an end\n    ///      state.\n    /// @return The withdraw allowance in wei.\n    function withdrawableAmount() external view returns (uint256) {\n        return self.getWithdrawableAmount();\n    }\n\n    //------------------------------ FUNDING FLOW --------------------------------//\n\n    /// @notice Notify the contract that signing group setup has timed out if\n    ///         retrieveSignerPubkey is not successfully called within the\n    ///         allotted time.\n    /// @dev This is considered a signer fault, and the signers' bonds are used\n    ///      to make the deposit setup fee available for withdrawal by the TDT\n    ///      holder as a refund. The remainder of the signers' bonds are\n    ///      returned to the bonding pool and the signers are released from any\n    ///      further responsibilities. Reverts if the deposit is not awaiting\n    ///      signer setup or if the signing group formation timeout has not\n    ///      elapsed.\n    function notifySignerSetupFailed() external {\n        self.notifySignerSetupFailed();\n    }\n\n    /// @notice Notify the contract that the ECDSA keep has generated a public\n    ///         key so the deposit contract can pull it in.\n    /// @dev Stores the pubkey as 2 bytestrings, X and Y. Emits a\n    ///      RegisteredPubkey event with the two components. Reverts if the\n    ///      deposit is not awaiting signer setup, if the generated public key\n    ///      is unset or has incorrect length, or if the public key has a 0\n    ///      X or Y value.\n    function retrieveSignerPubkey() external {\n        self.retrieveSignerPubkey();\n    }\n\n    /// @notice Notify the contract that the funding phase of the deposit has\n    ///         timed out if `provideBTCFundingProof` is not successfully called\n    ///         within the allotted time. Any sent BTC is left under control of\n    ///         the signer group, and the funder can use `requestFunderAbort` to\n    ///         request an at-signer-discretion return of any BTC sent to a\n    ///         deposit that has been notified of a funding timeout.\n    /// @dev This is considered a funder fault, and the funder's payment for\n    ///      opening the deposit is not refunded. Emits a SetupFailed event.\n    ///      Reverts if the funding timeout has not yet elapsed, or if the\n    ///      deposit is not currently awaiting funding proof.\n    function notifyFundingTimedOut() external {\n        self.notifyFundingTimedOut();\n    }\n\n    /// @notice Requests a funder abort for a failed-funding deposit; that is,\n    ///         requests the return of a sent UTXO to _abortOutputScript. It\n    ///         imposes no requirements on the signing group. Signers should\n    ///         send their UTXO to the requested output script, but do so at\n    ///         their discretion and with no penalty for failing to do so. This\n    ///         can be used for example when a UTXO is sent that is the wrong\n    ///         size for the lot.\n    /// @dev This is a self-admitted funder fault, and is only be callable by\n    ///      the TDT holder. This function emits the FunderAbortRequested event,\n    ///      but stores no additional state.\n    /// @param _abortOutputScript The output script the funder wishes to request\n    ///        a return of their UTXO to.\n    function requestFunderAbort(bytes memory _abortOutputScript) public {\n        // not external to allow bytes memory parameters\n        require(\n            self.depositOwner() == msg.sender,\n            \"Only TDT holder can request funder abort\"\n        );\n\n        self.requestFunderAbort(_abortOutputScript);\n    }\n\n    /// @notice Anyone can provide a signature corresponding to the signers'\n    ///         public key to prove fraud during funding. Note that during\n    ///         funding no signature has been requested from the signers, so\n    ///         any signature is effectively fraud.\n    /// @dev Calls out to the keep to verify if there was fraud.\n    /// @param _v Signature recovery value.\n    /// @param _r Signature R value.\n    /// @param _s Signature S value.\n    /// @param _signedDigest The digest signed by the signature (v,r,s) tuple.\n    /// @param _preimage The sha256 preimage of the digest.\n    function provideFundingECDSAFraudProof(\n        uint8 _v,\n        bytes32 _r,\n        bytes32 _s,\n        bytes32 _signedDigest,\n        bytes memory _preimage\n    ) public {\n        // not external to allow bytes memory parameters\n        self.provideFundingECDSAFraudProof(\n            _v,\n            _r,\n            _s,\n            _signedDigest,\n            _preimage\n        );\n    }\n\n    /// @notice Anyone may submit a funding proof to the deposit showing that\n    ///         a transaction was submitted and sufficiently confirmed on the\n    ///         Bitcoin chain transferring the deposit lot size's amount of BTC\n    ///         to the signer-controlled private key corresopnding to this\n    ///         deposit. This will move the deposit into an active state.\n    /// @dev Takes a pre-parsed transaction and calculates values needed to\n    ///      verify funding.\n    /// @param _txVersion Transaction version number (4-byte little-endian).\n    /// @param _txInputVector All transaction inputs prepended by the number of\n    ///        inputs encoded as a VarInt, max 0xFC(252) inputs.\n    /// @param _txOutputVector All transaction outputs prepended by the number\n    ///         of outputs encoded as a VarInt, max 0xFC(252) outputs.\n    /// @param _txLocktime Final 4 bytes of the transaction.\n    /// @param _fundingOutputIndex Index of funding output in _txOutputVector\n    ///        (0-indexed).\n    /// @param _merkleProof The merkle proof of transaction inclusion in a\n    ///        block.\n    /// @param _txIndexInBlock Transaction index in the block (0-indexed).\n    /// @param _bitcoinHeaders Single bytestring of 80-byte bitcoin headers,\n    ///        lowest height first.\n    function provideBTCFundingProof(\n        bytes4 _txVersion,\n        bytes memory _txInputVector,\n        bytes memory _txOutputVector,\n        bytes4 _txLocktime,\n        uint8 _fundingOutputIndex,\n        bytes memory _merkleProof,\n        uint256 _txIndexInBlock,\n        bytes memory _bitcoinHeaders\n    ) public {\n        // not external to allow bytes memory parameters\n        self.provideBTCFundingProof(\n            _txVersion,\n            _txInputVector,\n            _txOutputVector,\n            _txLocktime,\n            _fundingOutputIndex,\n            _merkleProof,\n            _txIndexInBlock,\n            _bitcoinHeaders\n        );\n    }\n\n    //---------------------------- LIQUIDATION FLOW ------------------------------//\n\n    /// @notice Notify the contract that the signers are undercollateralized.\n    /// @dev This call will revert if the signers are not in fact\n    ///      undercollateralized according to the price feed. After\n    ///      TBTCConstants.COURTESY_CALL_DURATION, courtesy call times out and\n    ///      regular abort liquidation occurs; see\n    ///      `notifyCourtesyTimedOut`.\n    function notifyCourtesyCall() external {\n        self.notifyCourtesyCall();\n    }\n\n    /// @notice Notify the contract that the signers' bond value has recovered\n    ///         enough to be considered sufficiently collateralized.\n    /// @dev This call will revert if collateral is still below the\n    ///      undercollateralized threshold according to the price feed.\n    function exitCourtesyCall() external {\n        self.exitCourtesyCall();\n    }\n\n    /// @notice Notify the contract that the courtesy period has expired and the\n    ///         deposit should move into liquidation.\n    /// @dev This call will revert if the courtesy call period has not in fact\n    ///      expired or is not in the courtesy call state. Courtesy call\n    ///      expiration is treated as an abort, and is handled by seizing signer\n    ///      bonds and putting them up for auction for the lot size amount in\n    ///      TBTC (see `purchaseSignerBondsAtAuction`). Emits a\n    ///      LiquidationStarted event. The caller is captured as the liquidation\n    ///      initiator, and is eligible for 50% of any bond left after the\n    ///      auction is completed.\n    function notifyCourtesyCallExpired() external {\n        self.notifyCourtesyCallExpired();\n    }\n\n    /// @notice Notify the contract that the signers are undercollateralized.\n    /// @dev Calls out to the system for oracle info.\n    /// @dev This call will revert if the signers are not in fact severely\n    ///      undercollateralized according to the price feed. Severe\n    ///      undercollateralization is treated as an abort, and is handled by\n    ///      seizing signer bonds and putting them up for auction in exchange\n    ///      for the lot size amount in TBTC (see\n    ///      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.\n    ///      The caller is captured as the liquidation initiator, and is\n    ///      eligible for 50% of any bond left after the auction is completed.\n    function notifyUndercollateralizedLiquidation() external {\n        self.notifyUndercollateralizedLiquidation();\n    }\n\n    /// @notice Anyone can provide a signature corresponding to the signers'\n    ///         public key that was not requested to prove fraud. A redemption\n    ///         request and a redemption fee increase are the only ways to\n    ///         request a signature from the signers.\n    /// @dev This call will revert if the underlying keep cannot verify that\n    ///      there was fraud. Fraud is handled by seizing signer bonds and\n    ///      putting them up for auction in exchange for the lot size amount in\n    ///      TBTC (see `purchaseSignerBondsAtAuction`). Emits a\n    ///      LiquidationStarted event. The caller is captured as the liquidation\n    ///      initiator, and is eligible for any bond left after the auction is\n    ///      completed.\n    /// @param  _v Signature recovery value.\n    /// @param  _r Signature R value.\n    /// @param  _s Signature S value.\n    /// @param _signedDigest The digest signed by the signature (v,r,s) tuple.\n    /// @param _preimage The sha256 preimage of the digest.\n    function provideECDSAFraudProof(\n        uint8 _v,\n        bytes32 _r,\n        bytes32 _s,\n        bytes32 _signedDigest,\n        bytes memory _preimage\n    ) public {\n        // not external to allow bytes memory parameters\n        self.provideECDSAFraudProof(_v, _r, _s, _signedDigest, _preimage);\n    }\n\n    /// @notice Notify the contract that the signers have failed to produce a\n    ///         signature for a redemption request in the allotted time.\n    /// @dev This is considered an abort, and is punished by seizing signer\n    ///      bonds and putting them up for auction. Emits a LiquidationStarted\n    ///      event and a Liquidated event and sends the full signer bond to the\n    ///      redeemer. Reverts if the deposit is not currently awaiting a\n    ///      signature or if the allotted time has not yet elapsed. The caller\n    ///      is captured as the liquidation initiator, and is eligible for 50%\n    ///      of any bond left after the auction is completed.\n    function notifyRedemptionSignatureTimedOut() external {\n        self.notifyRedemptionSignatureTimedOut();\n    }\n\n    /// @notice Notify the contract that the deposit has failed to receive a\n    ///         redemption proof in the allotted time.\n    /// @dev This call will revert if the deposit is not currently awaiting a\n    ///      signature or if the allotted time has not yet elapsed. This is\n    ///      considered an abort, and is punished by seizing signer bonds and\n    ///      putting them up for auction for the lot size amount in TBTC (see\n    ///      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.\n    ///      The caller is captured as the liquidation initiator, and\n    ///      is eligible for 50% of any bond left after the auction is\n    ///     completed.\n    function notifyRedemptionProofTimedOut() external {\n        self.notifyRedemptionProofTimedOut();\n    }\n\n    /// @notice Closes an auction and purchases the signer bonds by transferring\n    ///         the lot size in TBTC to the redeemer, if there is one, or to the\n    ///         TDT holder if not. Any bond amount that is not currently up for\n    ///         auction is either made available for the liquidation initiator\n    ///         to withdraw (for fraud) or split 50-50 between the initiator and\n    ///         the signers (for abort or collateralization issues).\n    /// @dev The amount of ETH given for the transferred TBTC can be read using\n    ///      the `auctionValue` function; note, however, that the function's\n    ///      value is only static during the specific block it is queried, as it\n    ///      varies by block timestamp.\n    function purchaseSignerBondsAtAuction() external {\n        self.purchaseSignerBondsAtAuction();\n    }\n\n    //---------------------------- REDEMPTION FLOW -------------------------------//\n\n    /// @notice Get TBTC amount required for redemption by a specified\n    ///         _redeemer.\n    /// @dev This call will revert if redemption is not possible by _redeemer.\n    /// @param _redeemer The deposit redeemer whose TBTC requirement is being\n    ///        requested.\n    /// @return The amount in TBTC needed by the `_redeemer` to redeem the\n    ///         deposit.\n    function getRedemptionTbtcRequirement(address _redeemer)\n        external\n        view\n        returns (uint256)\n    {\n        (uint256 tbtcPayment, , ) =\n            self.calculateRedemptionTbtcAmounts(_redeemer, false);\n        return tbtcPayment;\n    }\n\n    /// @notice Get TBTC amount required for redemption assuming _redeemer\n    ///         is this deposit's owner (TDT holder).\n    /// @param _redeemer The assumed owner of the deposit's TDT .\n    /// @return The amount in TBTC needed to redeem the deposit.\n    function getOwnerRedemptionTbtcRequirement(address _redeemer)\n        external\n        view\n        returns (uint256)\n    {\n        (uint256 tbtcPayment, , ) =\n            self.calculateRedemptionTbtcAmounts(_redeemer, true);\n        return tbtcPayment;\n    }\n\n    /// @notice Requests redemption of this deposit, meaning the transmission,\n    ///         by the signers, of the deposit's UTXO to the specified Bitocin\n    ///         output script. Requires approving the deposit to spend the\n    ///         amount of TBTC needed to redeem.\n    /// @dev The amount of TBTC needed to redeem can be looked up using the\n    ///      `getRedemptionTbtcRequirement` or `getOwnerRedemptionTbtcRequirement`\n    ///      functions.\n    /// @param  _outputValueBytes The 8-byte little-endian output size. The\n    ///         difference between this value and the lot size of the deposit\n    ///         will be paid as a fee to the Bitcoin miners when the signed\n    ///         transaction is broadcast.\n    /// @param  _redeemerOutputScript The redeemer's length-prefixed output\n    ///         script.\n    function requestRedemption(\n        bytes8 _outputValueBytes,\n        bytes memory _redeemerOutputScript\n    ) public {\n        // not external to allow bytes memory parameters\n        self.requestRedemption(_outputValueBytes, _redeemerOutputScript);\n    }\n\n    /// @notice Anyone may provide a withdrawal signature if it was requested.\n    /// @dev The signers will be penalized if this function is not called\n    ///      correctly within `TBTCConstants.REDEMPTION_SIGNATURE_TIMEOUT`\n    ///      seconds of a redemption request or fee increase being received.\n    /// @param _v Signature recovery value.\n    /// @param _r Signature R value.\n    /// @param _s Signature S value. Should be in the low half of secp256k1\n    ///        curve's order.\n    function provideRedemptionSignature(\n        uint8 _v,\n        bytes32 _r,\n        bytes32 _s\n    ) external {\n        self.provideRedemptionSignature(_v, _r, _s);\n    }\n\n    /// @notice Anyone may request a signature for a transaction with an\n    ///         increased Bitcoin transaction fee.\n    /// @dev This call will revert if the fee is already at its maximum, or if\n    ///      the new requested fee is not a multiple of the initial requested\n    ///      fee. Transaction fees can only be bumped by the amount of the\n    ///      initial requested fee. Calling this sends the deposit back to\n    ///      the `AWAITING_WITHDRAWAL_SIGNATURE` state and requires the signers\n    ///      to `provideRedemptionSignature` for the new output value in a\n    ///      timely fashion.\n    /// @param _previousOutputValueBytes The previous output's value.\n    /// @param _newOutputValueBytes The new output's value.\n    function increaseRedemptionFee(\n        bytes8 _previousOutputValueBytes,\n        bytes8 _newOutputValueBytes\n    ) external {\n        self.increaseRedemptionFee(\n            _previousOutputValueBytes,\n            _newOutputValueBytes\n        );\n    }\n\n    /// @notice Anyone may submit a redemption proof to the deposit showing that\n    ///         a transaction was submitted and sufficiently confirmed on the\n    ///         Bitcoin chain transferring the deposit lot size's amount of BTC\n    ///         from the signer-controlled private key corresponding to this\n    ///         deposit to the requested redemption output script. This will\n    ///         move the deposit into a redeemed state.\n    /// @dev Takes a pre-parsed transaction and calculates values needed to\n    ///      verify funding. Signers can have their bonds seized if this is not\n    ///      called within `TBTCConstants.REDEMPTION_PROOF_TIMEOUT` seconds of\n    ///      a redemption signature being provided.\n    /// @param _txVersion Transaction version number (4-byte little-endian).\n    /// @param _txInputVector All transaction inputs prepended by the number of\n    ///        inputs encoded as a VarInt, max 0xFC(252) inputs.\n    /// @param _txOutputVector All transaction outputs prepended by the number\n    ///         of outputs encoded as a VarInt, max 0xFC(252) outputs.\n    /// @param _txLocktime Final 4 bytes of the transaction.\n    /// @param _merkleProof The merkle proof of transaction inclusion in a\n    ///        block.\n    /// @param _txIndexInBlock Transaction index in the block (0-indexed).\n    /// @param _bitcoinHeaders Single bytestring of 80-byte bitcoin headers,\n    ///        lowest height first.\n    function provideRedemptionProof(\n        bytes4 _txVersion,\n        bytes memory _txInputVector,\n        bytes memory _txOutputVector,\n        bytes4 _txLocktime,\n        bytes memory _merkleProof,\n        uint256 _txIndexInBlock,\n        bytes memory _bitcoinHeaders\n    ) public {\n        // not external to allow bytes memory parameters\n        self.provideRedemptionProof(\n            _txVersion,\n            _txInputVector,\n            _txOutputVector,\n            _txLocktime,\n            _merkleProof,\n            _txIndexInBlock,\n            _bitcoinHeaders\n        );\n    }\n\n    //--------------------------- MUTATING HELPERS -------------------------------//\n\n    /// @notice This function can only be called by the deposit factory; use\n    ///         `DepositFactory.createDeposit` to create a new deposit.\n    /// @dev Initializes a new deposit clone with the base state for the\n    ///      deposit.\n    /// @param _tbtcSystem `TBTCSystem` contract. More info in `TBTCSystem`.\n    /// @param _tbtcToken `TBTCToken` contract. More info in TBTCToken`.\n    /// @param _tbtcDepositToken `TBTCDepositToken` (TDT) contract. More info in\n    ///        `TBTCDepositToken`.\n    /// @param _feeRebateToken `FeeRebateToken` (FRT) contract. More info in\n    ///        `FeeRebateToken`.\n    /// @param _vendingMachineAddress `VendingMachine` address. More info in\n    ///        `VendingMachine`.\n    /// @param _lotSizeSatoshis The minimum amount of satoshi the funder is\n    ///                         required to send. This is also the amount of\n    ///                         TBTC the TDT holder will be eligible to mint:\n    ///                         (10**7 satoshi == 0.1 BTC == 0.1 TBTC).\n    function initializeDeposit(\n        ITBTCSystem _tbtcSystem,\n        TBTCToken _tbtcToken,\n        IERC721 _tbtcDepositToken,\n        FeeRebateToken _feeRebateToken,\n        address _vendingMachineAddress,\n        uint64 _lotSizeSatoshis\n    ) public payable onlyFactory {\n        self.tbtcSystem = _tbtcSystem;\n        self.tbtcToken = _tbtcToken;\n        self.tbtcDepositToken = _tbtcDepositToken;\n        self.feeRebateToken = _feeRebateToken;\n        self.vendingMachineAddress = _vendingMachineAddress;\n        self.initialize(_lotSizeSatoshis);\n    }\n\n    /// @notice This function can only be called by the vending machine.\n    /// @dev Performs the same action as requestRedemption, but transfers\n    ///      ownership of the deposit to the specified _finalRecipient. Used as\n    ///      a utility helper for the vending machine's shortcut\n    ///      TBTC->redemption path.\n    /// @param  _outputValueBytes The 8-byte little-endian output size.\n    /// @param  _redeemerOutputScript The redeemer's length-prefixed output script.\n    /// @param  _finalRecipient     The address to receive the TDT and later be recorded as deposit redeemer.\n    function transferAndRequestRedemption(\n        bytes8 _outputValueBytes,\n        bytes memory _redeemerOutputScript,\n        address payable _finalRecipient\n    ) public {\n        // not external to allow bytes memory parameters\n        require(\n            msg.sender == self.vendingMachineAddress,\n            \"Only the vending machine can call transferAndRequestRedemption\"\n        );\n        self.transferAndRequestRedemption(\n            _outputValueBytes,\n            _redeemerOutputScript,\n            _finalRecipient\n        );\n    }\n\n    /// @notice Withdraw the ETH balance of the deposit allotted to the caller.\n    /// @dev Withdrawals can only happen when a contract is in an end-state.\n    function withdrawFunds() external {\n        self.withdrawFunds();\n    }\n}\n",
  "sourcePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/Deposit.sol",
  "ast": {
    "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/Deposit.sol",
    "exportedSymbols": {
      "Deposit": [
        1134
      ]
    },
    "id": 1135,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 498,
        "literals": [
          "solidity",
          "0.5",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositLiquidation.sol",
        "file": "./DepositLiquidation.sol",
        "id": 500,
        "nodeType": "ImportDirective",
        "scope": 1135,
        "sourceUnit": 2331,
        "src": "25:60:2",
        "symbolAliases": [
          {
            "foreign": 499,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol",
        "file": "./DepositUtils.sol",
        "id": 502,
        "nodeType": "ImportDirective",
        "scope": 1135,
        "sourceUnit": 5104,
        "src": "86:48:2",
        "symbolAliases": [
          {
            "foreign": 501,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositFunding.sol",
        "file": "./DepositFunding.sol",
        "id": 504,
        "nodeType": "ImportDirective",
        "scope": 1135,
        "sourceUnit": 1758,
        "src": "135:52:2",
        "symbolAliases": [
          {
            "foreign": 503,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositRedemption.sol",
        "file": "./DepositRedemption.sol",
        "id": 506,
        "nodeType": "ImportDirective",
        "scope": 1135,
        "sourceUnit": 3270,
        "src": "188:58:2",
        "symbolAliases": [
          {
            "foreign": 505,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositStates.sol",
        "file": "./DepositStates.sol",
        "id": 508,
        "nodeType": "ImportDirective",
        "scope": 1135,
        "sourceUnit": 3779,
        "src": "247:50:2",
        "symbolAliases": [
          {
            "foreign": 507,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITBTCSystem.sol",
        "file": "../interfaces/ITBTCSystem.sol",
        "id": 510,
        "nodeType": "ImportDirective",
        "scope": 1135,
        "sourceUnit": 5512,
        "src": "298:58:2",
        "symbolAliases": [
          {
            "foreign": 509,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol",
        "id": 512,
        "nodeType": "ImportDirective",
        "scope": 1135,
        "sourceUnit": 18288,
        "src": "357:87:2",
        "symbolAliases": [
          {
            "foreign": 511,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol",
        "file": "../system/TBTCToken.sol",
        "id": 514,
        "nodeType": "ImportDirective",
        "scope": 1135,
        "sourceUnit": 8562,
        "src": "445:50:2",
        "symbolAliases": [
          {
            "foreign": 513,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/FeeRebateToken.sol",
        "file": "../system/FeeRebateToken.sol",
        "id": 516,
        "nodeType": "ImportDirective",
        "scope": 1135,
        "sourceUnit": 6301,
        "src": "496:60:2",
        "symbolAliases": [
          {
            "foreign": 515,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/DepositFactoryAuthority.sol",
        "file": "../system/DepositFactoryAuthority.sol",
        "id": 517,
        "nodeType": "ImportDirective",
        "scope": 1135,
        "sourceUnit": 6252,
        "src": "558:47:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 518,
              "name": "DepositFactoryAuthority",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6251,
              "src": "1710:23:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DepositFactoryAuthority_$6251",
                "typeString": "contract DepositFactoryAuthority"
              }
            },
            "id": 519,
            "nodeType": "InheritanceSpecifier",
            "src": "1710:23:2"
          }
        ],
        "contractDependencies": [
          6251
        ],
        "contractKind": "contract",
        "documentation": "@title  tBTC Deposit\n @notice This is the main contract for tBTC. It is the state machine that\n         (through various libraries) handles bitcoin funding, bitcoin-spv\n         proofs, redemption, liquidation, and fraud logic.\n @dev This contract presents a public API that exposes the following\n      libraries:\n\n///       - `DepositFunding`\n       - `DepositLiquidaton`\n       - `DepositRedemption`,\n       - `DepositStates`\n       - `DepositUtils`\n       - `OutsourceDepositLogging`\n       - `TBTCConstants`\n\n///      Where these libraries require deposit state, this contract's state\n      variable `self` is used. `self` is a struct of type\n      `DepositUtils.Deposit` that contains all aspects of the deposit state\n      itself.",
        "fullyImplemented": true,
        "id": 1134,
        "linearizedBaseContracts": [
          1134,
          6251
        ],
        "name": "Deposit",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 522,
            "libraryName": {
              "contractScope": null,
              "id": 520,
              "name": "DepositRedemption",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3269,
              "src": "1746:17:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DepositRedemption_$3269",
                "typeString": "library DepositRedemption"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1740:49:2",
            "typeName": {
              "contractScope": null,
              "id": 521,
              "name": "DepositUtils.Deposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3893,
              "src": "1768:20:2",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                "typeString": "struct DepositUtils.Deposit"
              }
            }
          },
          {
            "id": 525,
            "libraryName": {
              "contractScope": null,
              "id": 523,
              "name": "DepositFunding",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1757,
              "src": "1800:14:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DepositFunding_$1757",
                "typeString": "library DepositFunding"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1794:46:2",
            "typeName": {
              "contractScope": null,
              "id": 524,
              "name": "DepositUtils.Deposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3893,
              "src": "1819:20:2",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                "typeString": "struct DepositUtils.Deposit"
              }
            }
          },
          {
            "id": 528,
            "libraryName": {
              "contractScope": null,
              "id": 526,
              "name": "DepositLiquidation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2330,
              "src": "1851:18:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DepositLiquidation_$2330",
                "typeString": "library DepositLiquidation"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1845:50:2",
            "typeName": {
              "contractScope": null,
              "id": 527,
              "name": "DepositUtils.Deposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3893,
              "src": "1874:20:2",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                "typeString": "struct DepositUtils.Deposit"
              }
            }
          },
          {
            "id": 531,
            "libraryName": {
              "contractScope": null,
              "id": 529,
              "name": "DepositUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5103,
              "src": "1906:12:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DepositUtils_$5103",
                "typeString": "library DepositUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1900:44:2",
            "typeName": {
              "contractScope": null,
              "id": 530,
              "name": "DepositUtils.Deposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3893,
              "src": "1923:20:2",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                "typeString": "struct DepositUtils.Deposit"
              }
            }
          },
          {
            "id": 534,
            "libraryName": {
              "contractScope": null,
              "id": 532,
              "name": "DepositStates",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3778,
              "src": "1955:13:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DepositStates_$3778",
                "typeString": "library DepositStates"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1949:45:2",
            "typeName": {
              "contractScope": null,
              "id": 533,
              "name": "DepositUtils.Deposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3893,
              "src": "1973:20:2",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                "typeString": "struct DepositUtils.Deposit"
              }
            }
          },
          {
            "constant": false,
            "id": 536,
            "name": "self",
            "nodeType": "VariableDeclaration",
            "scope": 1134,
            "src": "2000:25:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Deposit_$3893_storage",
              "typeString": "struct DepositUtils.Deposit"
            },
            "typeName": {
              "contractScope": null,
              "id": 535,
              "name": "DepositUtils.Deposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3893,
              "src": "2000:20:2",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                "typeString": "struct DepositUtils.Deposit"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 545,
              "nodeType": "Block",
              "src": "2348:195:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30786465616462656566",
                            "id": 541,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2524:10:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3735928559_by_1",
                              "typeString": "int_const 3735928559"
                            },
                            "value": "0xdeadbeef"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_3735928559_by_1",
                              "typeString": "int_const 3735928559"
                            }
                          ],
                          "id": 540,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2516:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 542,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2516:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 539,
                      "name": "initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6233,
                      "src": "2505:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2505:31:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 544,
                  "nodeType": "ExpressionStatement",
                  "src": "2505:31:2"
                }
              ]
            },
            "documentation": "@dev Deposit should only be _constructed_ once. New deposits are created\n      using the `DepositFactory.createDeposit` method, and are clones of\n      the constructed deposit. The factory will set the initial values\n      for a new clone using `initializeDeposit`.",
            "id": 546,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 537,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2338:2:2"
            },
            "returnParameters": {
              "id": 538,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2348:0:2"
            },
            "scope": 1134,
            "src": "2327:216:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 558,
              "nodeType": "Block",
              "src": "2631:143:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 554,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 550,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18360,
                              "src": "2662:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 551,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "data",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2662:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "id": 552,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2662:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 553,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2681:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2662:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f73697420636f6e7472616374207761732063616c6c6564207769746820756e6b6e6f776e2066756e6374696f6e2073656c6563746f722e",
                        "id": 555,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2696:61:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6ee494d6877c5b2c4945f59db6d994a7629054f79e14a67dc0d85dc58d6d1938",
                          "typeString": "literal_string \"Deposit contract was called with unknown function selector.\""
                        },
                        "value": "Deposit contract was called with unknown function selector."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6ee494d6877c5b2c4945f59db6d994a7629054f79e14a67dc0d85dc58d6d1938",
                          "typeString": "literal_string \"Deposit contract was called with unknown function selector.\""
                        }
                      ],
                      "id": 549,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "2641:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2641:126:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 557,
                  "nodeType": "ExpressionStatement",
                  "src": "2641:126:2"
                }
              ]
            },
            "documentation": "@notice Deposits do not accept arbitrary ETH.",
            "id": 559,
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 547,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2611:2:2"
            },
            "returnParameters": {
              "id": 548,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2631:0:2"
            },
            "scope": 1134,
            "src": "2603:171:2",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 567,
              "nodeType": "Block",
              "src": "3030:44:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 564,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 536,
                      "src": "3047:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                        "typeString": "struct DepositUtils.Deposit storage ref"
                      }
                    },
                    "id": 565,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "lotSizeSatoshis",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3838,
                    "src": "3047:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 563,
                  "id": 566,
                  "nodeType": "Return",
                  "src": "3040:27:2"
                }
              ]
            },
            "documentation": "@notice Get this deposit's BTC lot size in satoshis.\n @return uint64 lot size in satoshis.",
            "id": 568,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lotSizeSatoshis",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 560,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2996:2:2"
            },
            "returnParameters": {
              "id": 563,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 562,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 568,
                  "src": "3022:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 561,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3022:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3021:8:2"
            },
            "scope": 1134,
            "src": "2972:102:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 577,
              "nodeType": "Block",
              "src": "3378:42:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 573,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "3395:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 574,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lotSizeTbtc",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4356,
                      "src": "3395:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3395:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 572,
                  "id": 576,
                  "nodeType": "Return",
                  "src": "3388:25:2"
                }
              ]
            },
            "documentation": "@notice Get this deposit's lot size in TBTC.\n @dev This is the same as lotSizeSatoshis(), but is multiplied to scale\n      to 18 decimal places.\n @return uint256 lot size in TBTC precision (max 18 decimal places).",
            "id": 578,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lotSizeTbtc",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 569,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3343:2:2"
            },
            "returnParameters": {
              "id": 572,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 571,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 578,
                  "src": "3369:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 570,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3369:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3368:9:2"
            },
            "scope": 1134,
            "src": "3323:97:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 587,
              "nodeType": "Block",
              "src": "3801:44:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 583,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "3818:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 584,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "signerFeeTbtc",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4372,
                      "src": "3818:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 585,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3818:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 582,
                  "id": 586,
                  "nodeType": "Return",
                  "src": "3811:27:2"
                }
              ]
            },
            "documentation": "@notice Get the signer fee for this deposit, in TBTC.\n @dev This is the one-time fee required by the signers to perform the\n      tasks needed to maintain a decentralized and trustless model for\n      tBTC. It is a percentage of the deposit's lot size.\n @return Fee amount in TBTC.",
            "id": 588,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "signerFeeTbtc",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 579,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3766:2:2"
            },
            "returnParameters": {
              "id": 582,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 581,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 588,
                  "src": "3792:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 580,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3792:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3791:9:2"
            },
            "scope": 1134,
            "src": "3744:101:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 598,
              "nodeType": "Block",
              "src": "4176:50:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 594,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 536,
                          "src": "4201:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                            "typeString": "struct DepositUtils.Deposit storage ref"
                          }
                        },
                        "id": 595,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "currentState",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3840,
                        "src": "4201:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 593,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4193:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4193:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 592,
                  "id": 597,
                  "nodeType": "Return",
                  "src": "4186:33:2"
                }
              ]
            },
            "documentation": "@notice Get the integer representing the current state.\n @dev We implement this because contracts don't handle foreign enums\n      well. See `DepositStates` for more info on states.\n @return The 0-indexed state from the DepositStates enum.",
            "id": 599,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentState",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 589,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4141:2:2"
            },
            "returnParameters": {
              "id": 592,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 591,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 599,
                  "src": "4167:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 590,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4167:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4166:9:2"
            },
            "scope": 1134,
            "src": "4120:106:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 608,
              "nodeType": "Block",
              "src": "4396:39:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 604,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "4413:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 605,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "inActive",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3500,
                      "src": "4413:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                      }
                    },
                    "id": 606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4413:15:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 603,
                  "id": 607,
                  "nodeType": "Return",
                  "src": "4406:22:2"
                }
              ]
            },
            "documentation": "@notice Check if the Deposit is in ACTIVE state.\n @return True if state is ACTIVE, false otherwise.",
            "id": 609,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "inActive",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 600,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4364:2:2"
            },
            "returnParameters": {
              "id": 603,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 602,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 609,
                  "src": "4390:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 601,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4390:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4389:6:2"
            },
            "scope": 1134,
            "src": "4347:88:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 617,
              "nodeType": "Block",
              "src": "4727:40:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 614,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 536,
                      "src": "4744:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                        "typeString": "struct DepositUtils.Deposit storage ref"
                      }
                    },
                    "id": 615,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "keepAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3858,
                    "src": "4744:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 613,
                  "id": 616,
                  "nodeType": "Return",
                  "src": "4737:23:2"
                }
              ]
            },
            "documentation": "@notice Get the contract address of the BondedECDSAKeep associated with\n         this Deposit.\n @dev The keep contract address is saved on Deposit initialization.\n @return Address of the Keep contract.",
            "id": 618,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "keepAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 610,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4692:2:2"
            },
            "returnParameters": {
              "id": 613,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 612,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 618,
                  "src": "4718:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 611,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4718:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4717:9:2"
            },
            "scope": 1134,
            "src": "4672:95:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 627,
              "nodeType": "Block",
              "src": "5124:44:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 623,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "5141:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 624,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remainingTerm",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4269,
                      "src": "5141:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5141:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 622,
                  "id": 626,
                  "nodeType": "Return",
                  "src": "5134:27:2"
                }
              ]
            },
            "documentation": "@notice Retrieve the remaining term of the deposit in seconds.\n @dev The value accuracy is not guaranteed since block.timestmap can be\n      lightly manipulated by miners.\n @return The remaining term of the deposit in seconds. 0 if already at\n         term.",
            "id": 628,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "remainingTerm",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 619,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5089:2:2"
            },
            "returnParameters": {
              "id": 622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 621,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 628,
                  "src": "5115:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 620,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5115:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5114:9:2"
            },
            "scope": 1134,
            "src": "5067:101:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 637,
              "nodeType": "Block",
              "src": "5518:58:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 633,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "5535:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 634,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "collateralizationPercentage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1874,
                      "src": "5535:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5535:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 632,
                  "id": 636,
                  "nodeType": "Return",
                  "src": "5528:41:2"
                }
              ]
            },
            "documentation": "@notice Get the current collateralization level for this Deposit.\n @dev This value represents the percentage of the backing BTC value the\n      signers currently must hold as bond.\n @return The current collateralization level for this deposit.",
            "id": 638,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "collateralizationPercentage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 629,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5483:2:2"
            },
            "returnParameters": {
              "id": 632,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 631,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 638,
                  "src": "5509:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 630,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5509:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5508:9:2"
            },
            "scope": 1134,
            "src": "5447:129:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 646,
              "nodeType": "Block",
              "src": "5941:57:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 643,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 536,
                      "src": "5958:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                        "typeString": "struct DepositUtils.Deposit storage ref"
                      }
                    },
                    "id": 644,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "initialCollateralizedPercent",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3844,
                    "src": "5958:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 642,
                  "id": 645,
                  "nodeType": "Return",
                  "src": "5951:40:2"
                }
              ]
            },
            "documentation": "@notice Get the initial collateralization level for this Deposit.\n @dev This value represents the percentage of the backing BTC value\n      the signers hold initially. It is set at creation time.\n @return The initial collateralization level for this deposit.",
            "id": 647,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialCollateralizedPercent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 639,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5907:2:2"
            },
            "returnParameters": {
              "id": 642,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 641,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 647,
                  "src": "5933:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 640,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5933:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5932:8:2"
            },
            "scope": 1134,
            "src": "5870:128:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 655,
              "nodeType": "Block",
              "src": "6842:64:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 652,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 536,
                      "src": "6859:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                        "typeString": "struct DepositUtils.Deposit storage ref"
                      }
                    },
                    "id": 653,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "undercollateralizedThresholdPercent",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3846,
                    "src": "6859:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 651,
                  "id": 654,
                  "nodeType": "Return",
                  "src": "6852:47:2"
                }
              ]
            },
            "documentation": "@notice Get the undercollateralization level for this Deposit.\n @dev This collateralization level is semi-critical. If the\n      collateralization level falls below this percentage the Deposit can\n      be courtesy-called by calling `notifyCourtesyCall`. This value\n      represents the percentage of the backing BTC value the signers must\n      hold as bond in order to not be undercollateralized. It is set at\n      creation time. Note that the value for new deposits in TBTCSystem\n      can be changed by governance, but the value for a particular\n      deposit is static once the deposit is created.\n @return The undercollateralized level for this deposit.",
            "id": 656,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "undercollateralizedThresholdPercent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 648,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6780:2:2"
            },
            "returnParameters": {
              "id": 651,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 650,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 656,
                  "src": "6830:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 649,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "6830:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6829:8:2"
            },
            "scope": 1134,
            "src": "6736:170:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 664,
              "nodeType": "Block",
              "src": "7742:72:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 661,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 536,
                      "src": "7759:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                        "typeString": "struct DepositUtils.Deposit storage ref"
                      }
                    },
                    "id": 662,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "severelyUndercollateralizedThresholdPercent",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3848,
                    "src": "7759:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 660,
                  "id": 663,
                  "nodeType": "Return",
                  "src": "7752:55:2"
                }
              ]
            },
            "documentation": "@notice Get the severe undercollateralization level for this Deposit.\n @dev This collateralization level is critical. If the collateralization\n      level falls below this percentage the Deposit can get liquidated.\n      This value represents the percentage of the backing BTC value the\n      signers must hold as bond in order to not be severely\n      undercollateralized. It is set at creation time. Note that the\n      value for new deposits in TBTCSystem can be changed by governance,\n      but the value for a particular deposit is static once the deposit\n      is created.\n @return The severely undercollateralized level for this deposit.",
            "id": 665,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "severelyUndercollateralizedThresholdPercent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 657,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7680:2:2"
            },
            "returnParameters": {
              "id": 660,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 659,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 665,
                  "src": "7730:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 658,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "7730:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7729:8:2"
            },
            "scope": 1134,
            "src": "7628:186:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 682,
              "nodeType": "Block",
              "src": "8312:180:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "8343:17:2",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 671,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 536,
                              "src": "8344:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                                "typeString": "struct DepositUtils.Deposit storage ref"
                              }
                            },
                            "id": 672,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "inFunding",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3311,
                            "src": "8344:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                              "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                            }
                          },
                          "id": 673,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8344:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f73697420686173206e6f7420796574206265656e2066756e64656420616e6420686173206e6f20617661696c61626c652066756e64696e6720696e666f",
                        "id": 675,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8374:67:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_100f1280f38cd763f73a16b46ca920f0ca7c7a24f10f14fda8e1aba96ffdbb65",
                          "typeString": "literal_string \"Deposit has not yet been funded and has no available funding info\""
                        },
                        "value": "Deposit has not yet been funded and has no available funding info"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_100f1280f38cd763f73a16b46ca920f0ca7c7a24f10f14fda8e1aba96ffdbb65",
                          "typeString": "literal_string \"Deposit has not yet been funded and has no available funding info\""
                        }
                      ],
                      "id": 670,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "8322:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8322:129:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 677,
                  "nodeType": "ExpressionStatement",
                  "src": "8322:129:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 678,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "8469:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 679,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "utxoValue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4471,
                      "src": "8469:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 680,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8469:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 669,
                  "id": 681,
                  "nodeType": "Return",
                  "src": "8462:23:2"
                }
              ]
            },
            "documentation": "@notice Get the value of the funding UTXO.\n @dev This call will revert if the deposit is not in a state where the\n      UTXO info should be valid. In particular, before funding proof is\n      successfully submitted (i.e. in states START,\n      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), this value\n      would not be valid.\n @return The value of the funding UTXO in satoshis.",
            "id": 683,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "utxoValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 666,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8277:2:2"
            },
            "returnParameters": {
              "id": 669,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 668,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 683,
                  "src": "8303:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 667,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8303:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8302:9:2"
            },
            "scope": 1134,
            "src": "8259:233:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 708,
              "nodeType": "Block",
              "src": "9165:219:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 696,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "9196:17:2",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 693,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 536,
                              "src": "9197:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                                "typeString": "struct DepositUtils.Deposit storage ref"
                              }
                            },
                            "id": 694,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "inFunding",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3311,
                            "src": "9197:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                              "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                            }
                          },
                          "id": 695,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9197:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f73697420686173206e6f7420796574206265656e2066756e64656420616e6420686173206e6f20617661696c61626c652066756e64696e6720696e666f",
                        "id": 697,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9227:67:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_100f1280f38cd763f73a16b46ca920f0ca7c7a24f10f14fda8e1aba96ffdbb65",
                          "typeString": "literal_string \"Deposit has not yet been funded and has no available funding info\""
                        },
                        "value": "Deposit has not yet been funded and has no available funding info"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_100f1280f38cd763f73a16b46ca920f0ca7c7a24f10f14fda8e1aba96ffdbb65",
                          "typeString": "literal_string \"Deposit has not yet been funded and has no available funding info\""
                        }
                      ],
                      "id": 692,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "9175:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9175:129:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 699,
                  "nodeType": "ExpressionStatement",
                  "src": "9175:129:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 700,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 536,
                          "src": "9323:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                            "typeString": "struct DepositUtils.Deposit storage ref"
                          }
                        },
                        "id": 701,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "utxoValueBytes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3880,
                        "src": "9323:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 702,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 536,
                          "src": "9344:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                            "typeString": "struct DepositUtils.Deposit storage ref"
                          }
                        },
                        "id": 703,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "fundedAt",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3882,
                        "src": "9344:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 704,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 536,
                          "src": "9359:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                            "typeString": "struct DepositUtils.Deposit storage ref"
                          }
                        },
                        "id": 705,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "utxoOutpoint",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3884,
                        "src": "9359:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "id": 706,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "9322:55:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes8_$_t_uint256_$_t_bytes_storage_$",
                      "typeString": "tuple(bytes8,uint256,bytes storage ref)"
                    }
                  },
                  "functionReturnParameters": 691,
                  "id": 707,
                  "nodeType": "Return",
                  "src": "9315:62:2"
                }
              ]
            },
            "documentation": "@notice Returns information associated with the funding UXTO.\n @dev This call will revert if the deposit is not in a state where the\n      funding info should be valid. In particular, before funding proof\n      is successfully submitted (i.e. in states START,\n      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), none of\n      these values are set or valid.\n @return A tuple of (uxtoValueBytes, fundedAt, uxtoOutpoint).",
            "id": 709,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fundingInfo",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 684,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8997:2:2"
            },
            "returnParameters": {
              "id": 691,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 686,
                  "name": "utxoValueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 709,
                  "src": "9060:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 685,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "9060:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 688,
                  "name": "fundedAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 709,
                  "src": "9095:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 687,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9095:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 690,
                  "name": "utxoOutpoint",
                  "nodeType": "VariableDeclaration",
                  "scope": 709,
                  "src": "9125:25:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 689,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9125:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9046:114:2"
            },
            "scope": 1134,
            "src": "8977:407:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 725,
              "nodeType": "Block",
              "src": "9857:168:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 715,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 536,
                            "src": "9888:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                              "typeString": "struct DepositUtils.Deposit storage ref"
                            }
                          },
                          "id": 716,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inSignerLiquidation",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3336,
                          "src": "9888:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                          }
                        },
                        "id": 717,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9888:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f73697420686173206e6f2066756e64732063757272656e746c792061742061756374696f6e",
                        "id": 718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9928:43:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e9fd53870dce688f83b78e838d11903f2b2980bff8a1fdbdcc71a73f1fc42750",
                          "typeString": "literal_string \"Deposit has no funds currently at auction\""
                        },
                        "value": "Deposit has no funds currently at auction"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e9fd53870dce688f83b78e838d11903f2b2980bff8a1fdbdcc71a73f1fc42750",
                          "typeString": "literal_string \"Deposit has no funds currently at auction\""
                        }
                      ],
                      "id": 714,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "9867:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9867:114:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 720,
                  "nodeType": "ExpressionStatement",
                  "src": "9867:114:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 721,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "9999:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 722,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "auctionValue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4340,
                      "src": "9999:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9999:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 713,
                  "id": 724,
                  "nodeType": "Return",
                  "src": "9992:26:2"
                }
              ]
            },
            "documentation": "@notice Calculates the amount of value at auction right now.\n @dev This call will revert if the deposit is not in a state where an\n      auction is currently in progress.\n @return The value in wei that would be received in exchange for the\n         deposit's lot size in TBTC if `purchaseSignerBondsAtAuction`\n         were called at the time this function is called.",
            "id": 726,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "auctionValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 710,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9822:2:2"
            },
            "returnParameters": {
              "id": 713,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 712,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 726,
                  "src": "9848:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 711,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9848:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9847:9:2"
            },
            "scope": 1134,
            "src": "9801:224:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 735,
              "nodeType": "Block",
              "src": "10448:52:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 731,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "10465:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 732,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getWithdrawableAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4799,
                      "src": "10465:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10465:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 730,
                  "id": 734,
                  "nodeType": "Return",
                  "src": "10458:35:2"
                }
              ]
            },
            "documentation": "@notice Get caller's ETH withdraw allowance.\n @dev Generally ETH is only available to withdraw after the deposit\n      reaches a closed state. The amount reported is for the sender, and\n      can be withdrawn using `withdrawFunds` if the deposit is in an end\n      state.\n @return The withdraw allowance in wei.",
            "id": 736,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "withdrawableAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 727,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10413:2:2"
            },
            "returnParameters": {
              "id": 730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 729,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 736,
                  "src": "10439:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 728,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10439:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10438:9:2"
            },
            "scope": 1134,
            "src": "10386:114:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 744,
              "nodeType": "Block",
              "src": "11308:47:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 739,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "11318:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 741,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "notifySignerSetupFailed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1433,
                      "src": "11318:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11318:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 743,
                  "nodeType": "ExpressionStatement",
                  "src": "11318:30:2"
                }
              ]
            },
            "documentation": "@notice Notify the contract that signing group setup has timed out if\n         retrieveSignerPubkey is not successfully called within the\n         allotted time.\n @dev This is considered a signer fault, and the signers' bonds are used\n      to make the deposit setup fee available for withdrawal by the TDT\n      holder as a refund. The remainder of the signers' bonds are\n      returned to the bonding pool and the signers are released from any\n      further responsibilities. Reverts if the deposit is not awaiting\n      signer setup or if the signing group formation timeout has not\n      elapsed.",
            "id": 745,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notifySignerSetupFailed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 737,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11296:2:2"
            },
            "returnParameters": {
              "id": 738,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11308:0:2"
            },
            "scope": 1134,
            "src": "11264:91:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 753,
              "nodeType": "Block",
              "src": "11865:44:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 748,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "11875:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 750,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "retrieveSignerPubkey",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1525,
                      "src": "11875:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11875:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 752,
                  "nodeType": "ExpressionStatement",
                  "src": "11875:27:2"
                }
              ]
            },
            "documentation": "@notice Notify the contract that the ECDSA keep has generated a public\n         key so the deposit contract can pull it in.\n @dev Stores the pubkey as 2 bytestrings, X and Y. Emits a\n      RegisteredPubkey event with the two components. Reverts if the\n      deposit is not awaiting signer setup, if the generated public key\n      is unset or has incorrect length, or if the public key has a 0\n      X or Y value.",
            "id": 754,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "retrieveSignerPubkey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 746,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11853:2:2"
            },
            "returnParameters": {
              "id": 747,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11865:0:2"
            },
            "scope": 1134,
            "src": "11824:85:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 762,
              "nodeType": "Block",
              "src": "12713:45:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 757,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "12723:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 759,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "notifyFundingTimedOut",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1571,
                      "src": "12723:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12723:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 761,
                  "nodeType": "ExpressionStatement",
                  "src": "12723:28:2"
                }
              ]
            },
            "documentation": "@notice Notify the contract that the funding phase of the deposit has\n         timed out if `provideBTCFundingProof` is not successfully called\n         within the allotted time. Any sent BTC is left under control of\n         the signer group, and the funder can use `requestFunderAbort` to\n         request an at-signer-discretion return of any BTC sent to a\n         deposit that has been notified of a funding timeout.\n @dev This is considered a funder fault, and the funder's payment for\n      opening the deposit is not refunded. Emits a SetupFailed event.\n      Reverts if the funding timeout has not yet elapsed, or if the\n      deposit is not currently awaiting funding proof.",
            "id": 763,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notifyFundingTimedOut",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 755,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12701:2:2"
            },
            "returnParameters": {
              "id": 756,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12713:0:2"
            },
            "scope": 1134,
            "src": "12671:87:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 784,
              "nodeType": "Block",
              "src": "13661:248:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "id": 774,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 769,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 536,
                              "src": "13749:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                                "typeString": "struct DepositUtils.Deposit storage ref"
                              }
                            },
                            "id": 770,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "depositOwner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4604,
                            "src": "13749:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_address_payable_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                              "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)"
                            }
                          },
                          "id": 771,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13749:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 772,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18360,
                            "src": "13772:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13772:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "13749:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c792054445420686f6c6465722063616e20726571756573742066756e6465722061626f7274",
                        "id": 775,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13796:42:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_738720baac4f31c7e761bf4cd790ca7524e4bb1453e2274d4e22e899925da28c",
                          "typeString": "literal_string \"Only TDT holder can request funder abort\""
                        },
                        "value": "Only TDT holder can request funder abort"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_738720baac4f31c7e761bf4cd790ca7524e4bb1453e2274d4e22e899925da28c",
                          "typeString": "literal_string \"Only TDT holder can request funder abort\""
                        }
                      ],
                      "id": 768,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "13728:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 776,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13728:120:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 777,
                  "nodeType": "ExpressionStatement",
                  "src": "13728:120:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 781,
                        "name": "_abortOutputScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 765,
                        "src": "13883:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 778,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "13859:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 780,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "requestFunderAbort",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1592,
                      "src": "13859:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes_memory_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes memory)"
                      }
                    },
                    "id": 782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13859:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 783,
                  "nodeType": "ExpressionStatement",
                  "src": "13859:43:2"
                }
              ]
            },
            "documentation": "@notice Requests a funder abort for a failed-funding deposit; that is,\n         requests the return of a sent UTXO to _abortOutputScript. It\n         imposes no requirements on the signing group. Signers should\n         send their UTXO to the requested output script, but do so at\n         their discretion and with no penalty for failing to do so. This\n         can be used for example when a UTXO is sent that is the wrong\n         size for the lot.\n @dev This is a self-admitted funder fault, and is only be callable by\n      the TDT holder. This function emits the FunderAbortRequested event,\n      but stores no additional state.\n @param _abortOutputScript The output script the funder wishes to request\n        a return of their UTXO to.",
            "id": 785,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "requestFunderAbort",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 766,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 765,
                  "name": "_abortOutputScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 785,
                  "src": "13621:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 764,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13621:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13620:33:2"
            },
            "returnParameters": {
              "id": 767,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13661:0:2"
            },
            "scope": 1134,
            "src": "13593:316:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 808,
              "nodeType": "Block",
              "src": "14691:216:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 801,
                        "name": "_v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 787,
                        "src": "14806:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 802,
                        "name": "_r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 789,
                        "src": "14822:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 803,
                        "name": "_s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 791,
                        "src": "14838:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 804,
                        "name": "_signedDigest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 793,
                        "src": "14854:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 805,
                        "name": "_preimage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 795,
                        "src": "14881:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 798,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "14758:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 800,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "provideFundingECDSAFraudProof",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1659,
                      "src": "14758:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,uint8,bytes32,bytes32,bytes32,bytes memory)"
                      }
                    },
                    "id": 806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14758:142:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 807,
                  "nodeType": "ExpressionStatement",
                  "src": "14758:142:2"
                }
              ]
            },
            "documentation": "@notice Anyone can provide a signature corresponding to the signers'\n         public key to prove fraud during funding. Note that during\n         funding no signature has been requested from the signers, so\n         any signature is effectively fraud.\n @dev Calls out to the keep to verify if there was fraud.\n @param _v Signature recovery value.\n @param _r Signature R value.\n @param _s Signature S value.\n @param _signedDigest The digest signed by the signature (v,r,s) tuple.\n @param _preimage The sha256 preimage of the digest.",
            "id": 809,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "provideFundingECDSAFraudProof",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 787,
                  "name": "_v",
                  "nodeType": "VariableDeclaration",
                  "scope": 809,
                  "src": "14566:8:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 786,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "14566:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 789,
                  "name": "_r",
                  "nodeType": "VariableDeclaration",
                  "scope": 809,
                  "src": "14584:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 788,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14584:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 791,
                  "name": "_s",
                  "nodeType": "VariableDeclaration",
                  "scope": 809,
                  "src": "14604:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 790,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14604:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 793,
                  "name": "_signedDigest",
                  "nodeType": "VariableDeclaration",
                  "scope": 809,
                  "src": "14624:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 792,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14624:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 795,
                  "name": "_preimage",
                  "nodeType": "VariableDeclaration",
                  "scope": 809,
                  "src": "14655:22:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 794,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14655:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14556:127:2"
            },
            "returnParameters": {
              "id": 797,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14691:0:2"
            },
            "scope": 1134,
            "src": "14518:389:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 841,
              "nodeType": "Block",
              "src": "16543:334:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 831,
                        "name": "_txVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 811,
                        "src": "16651:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 832,
                        "name": "_txInputVector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 813,
                        "src": "16675:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 833,
                        "name": "_txOutputVector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 815,
                        "src": "16703:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 834,
                        "name": "_txLocktime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 817,
                        "src": "16732:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 835,
                        "name": "_fundingOutputIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 819,
                        "src": "16757:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 836,
                        "name": "_merkleProof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 821,
                        "src": "16790:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 837,
                        "name": "_txIndexInBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 823,
                        "src": "16816:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 838,
                        "name": "_bitcoinHeaders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 825,
                        "src": "16845:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 828,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "16610:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 830,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "provideBTCFundingProof",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1756,
                      "src": "16610:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes4_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes4_$_t_uint8_$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes4,bytes memory,bytes memory,bytes4,uint8,bytes memory,uint256,bytes memory)"
                      }
                    },
                    "id": 839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16610:260:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 840,
                  "nodeType": "ExpressionStatement",
                  "src": "16610:260:2"
                }
              ]
            },
            "documentation": "@notice Anyone may submit a funding proof to the deposit showing that\n         a transaction was submitted and sufficiently confirmed on the\n         Bitcoin chain transferring the deposit lot size's amount of BTC\n         to the signer-controlled private key corresopnding to this\n         deposit. This will move the deposit into an active state.\n @dev Takes a pre-parsed transaction and calculates values needed to\n      verify funding.\n @param _txVersion Transaction version number (4-byte little-endian).\n @param _txInputVector All transaction inputs prepended by the number of\n        inputs encoded as a VarInt, max 0xFC(252) inputs.\n @param _txOutputVector All transaction outputs prepended by the number\n         of outputs encoded as a VarInt, max 0xFC(252) outputs.\n @param _txLocktime Final 4 bytes of the transaction.\n @param _fundingOutputIndex Index of funding output in _txOutputVector\n        (0-indexed).\n @param _merkleProof The merkle proof of transaction inclusion in a\n        block.\n @param _txIndexInBlock Transaction index in the block (0-indexed).\n @param _bitcoinHeaders Single bytestring of 80-byte bitcoin headers,\n        lowest height first.",
            "id": 842,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "provideBTCFundingProof",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 826,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 811,
                  "name": "_txVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 842,
                  "src": "16268:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 810,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "16268:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 813,
                  "name": "_txInputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 842,
                  "src": "16295:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 812,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16295:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 815,
                  "name": "_txOutputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 842,
                  "src": "16332:28:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 814,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16332:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 817,
                  "name": "_txLocktime",
                  "nodeType": "VariableDeclaration",
                  "scope": 842,
                  "src": "16370:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 816,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "16370:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 819,
                  "name": "_fundingOutputIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 842,
                  "src": "16398:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 818,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "16398:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 821,
                  "name": "_merkleProof",
                  "nodeType": "VariableDeclaration",
                  "scope": 842,
                  "src": "16433:25:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 820,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16433:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 823,
                  "name": "_txIndexInBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 842,
                  "src": "16468:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 822,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16468:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 825,
                  "name": "_bitcoinHeaders",
                  "nodeType": "VariableDeclaration",
                  "scope": 842,
                  "src": "16501:28:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 824,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16501:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16258:277:2"
            },
            "returnParameters": {
              "id": 827,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16543:0:2"
            },
            "scope": 1134,
            "src": "16227:650:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 850,
              "nodeType": "Block",
              "src": "17389:42:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 845,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "17399:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 847,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "notifyCourtesyCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2236,
                      "src": "17399:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 848,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17399:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 849,
                  "nodeType": "ExpressionStatement",
                  "src": "17399:25:2"
                }
              ]
            },
            "documentation": "@notice Notify the contract that the signers are undercollateralized.\n @dev This call will revert if the signers are not in fact\n      undercollateralized according to the price feed. After\n      TBTCConstants.COURTESY_CALL_DURATION, courtesy call times out and\n      regular abort liquidation occurs; see\n      `notifyCourtesyTimedOut`.",
            "id": 851,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notifyCourtesyCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 843,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17377:2:2"
            },
            "returnParameters": {
              "id": 844,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17389:0:2"
            },
            "scope": 1134,
            "src": "17350:81:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 859,
              "nodeType": "Block",
              "src": "17762:40:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 854,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "17772:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 856,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exitCourtesyCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2269,
                      "src": "17772:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17772:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 858,
                  "nodeType": "ExpressionStatement",
                  "src": "17772:23:2"
                }
              ]
            },
            "documentation": "@notice Notify the contract that the signers' bond value has recovered\n         enough to be considered sufficiently collateralized.\n @dev This call will revert if collateral is still below the\n      undercollateralized threshold according to the price feed.",
            "id": 860,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "exitCourtesyCall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 852,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17750:2:2"
            },
            "returnParameters": {
              "id": 853,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17762:0:2"
            },
            "scope": 1134,
            "src": "17725:77:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 868,
              "nodeType": "Block",
              "src": "18555:49:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 863,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "18565:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 865,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "notifyCourtesyCallExpired",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2329,
                      "src": "18565:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18565:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 867,
                  "nodeType": "ExpressionStatement",
                  "src": "18565:32:2"
                }
              ]
            },
            "documentation": "@notice Notify the contract that the courtesy period has expired and the\n         deposit should move into liquidation.\n @dev This call will revert if the courtesy call period has not in fact\n      expired or is not in the courtesy call state. Courtesy call\n      expiration is treated as an abort, and is handled by seizing signer\n      bonds and putting them up for auction for the lot size amount in\n      TBTC (see `purchaseSignerBondsAtAuction`). Emits a\n      LiquidationStarted event. The caller is captured as the liquidation\n      initiator, and is eligible for 50% of any bond left after the\n      auction is completed.",
            "id": 869,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notifyCourtesyCallExpired",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 861,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18543:2:2"
            },
            "returnParameters": {
              "id": 862,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18555:0:2"
            },
            "scope": 1134,
            "src": "18509:95:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 877,
              "nodeType": "Block",
              "src": "19381:60:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 872,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "19391:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 874,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "notifyUndercollateralizedLiquidation",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2297,
                      "src": "19391:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19391:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 876,
                  "nodeType": "ExpressionStatement",
                  "src": "19391:43:2"
                }
              ]
            },
            "documentation": "@notice Notify the contract that the signers are undercollateralized.\n @dev Calls out to the system for oracle info.\n @dev This call will revert if the signers are not in fact severely\n      undercollateralized according to the price feed. Severe\n      undercollateralization is treated as an abort, and is handled by\n      seizing signer bonds and putting them up for auction in exchange\n      for the lot size amount in TBTC (see\n      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.\n      The caller is captured as the liquidation initiator, and is\n      eligible for 50% of any bond left after the auction is completed.",
            "id": 878,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notifyUndercollateralizedLiquidation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 870,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19369:2:2"
            },
            "returnParameters": {
              "id": 871,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19381:0:2"
            },
            "scope": 1134,
            "src": "19324:117:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 901,
              "nodeType": "Block",
              "src": "20638:139:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 894,
                        "name": "_v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 880,
                        "src": "20733:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 895,
                        "name": "_r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 882,
                        "src": "20737:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 896,
                        "name": "_s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 884,
                        "src": "20741:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 897,
                        "name": "_signedDigest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 886,
                        "src": "20745:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 898,
                        "name": "_preimage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 888,
                        "src": "20760:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 891,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "20705:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 893,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "provideECDSAFraudProof",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2011,
                      "src": "20705:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_uint8_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,uint8,bytes32,bytes32,bytes32,bytes memory)"
                      }
                    },
                    "id": 899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20705:65:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 900,
                  "nodeType": "ExpressionStatement",
                  "src": "20705:65:2"
                }
              ]
            },
            "documentation": "@notice Anyone can provide a signature corresponding to the signers'\n         public key that was not requested to prove fraud. A redemption\n         request and a redemption fee increase are the only ways to\n         request a signature from the signers.\n @dev This call will revert if the underlying keep cannot verify that\n      there was fraud. Fraud is handled by seizing signer bonds and\n      putting them up for auction in exchange for the lot size amount in\n      TBTC (see `purchaseSignerBondsAtAuction`). Emits a\n      LiquidationStarted event. The caller is captured as the liquidation\n      initiator, and is eligible for any bond left after the auction is\n      completed.\n @param  _v Signature recovery value.\n @param  _r Signature R value.\n @param  _s Signature S value.\n @param _signedDigest The digest signed by the signature (v,r,s) tuple.\n @param _preimage The sha256 preimage of the digest.",
            "id": 902,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "provideECDSAFraudProof",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 889,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 880,
                  "name": "_v",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "20513:8:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 879,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "20513:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 882,
                  "name": "_r",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "20531:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 881,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "20531:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 884,
                  "name": "_s",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "20551:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 883,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "20551:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 886,
                  "name": "_signedDigest",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "20571:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 885,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "20571:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 888,
                  "name": "_preimage",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "20602:22:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 887,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20602:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20503:127:2"
            },
            "returnParameters": {
              "id": 890,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20638:0:2"
            },
            "scope": 1134,
            "src": "20472:305:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 910,
              "nodeType": "Block",
              "src": "21517:57:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 905,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "21527:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 907,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "notifyRedemptionSignatureTimedOut",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3235,
                      "src": "21527:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 908,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21527:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 909,
                  "nodeType": "ExpressionStatement",
                  "src": "21527:40:2"
                }
              ]
            },
            "documentation": "@notice Notify the contract that the signers have failed to produce a\n         signature for a redemption request in the allotted time.\n @dev This is considered an abort, and is punished by seizing signer\n      bonds and putting them up for auction. Emits a LiquidationStarted\n      event and a Liquidated event and sends the full signer bond to the\n      redeemer. Reverts if the deposit is not currently awaiting a\n      signature or if the allotted time has not yet elapsed. The caller\n      is captured as the liquidation initiator, and is eligible for 50%\n      of any bond left after the auction is completed.",
            "id": 911,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notifyRedemptionSignatureTimedOut",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 903,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21505:2:2"
            },
            "returnParameters": {
              "id": 904,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21517:0:2"
            },
            "scope": 1134,
            "src": "21463:111:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 919,
              "nodeType": "Block",
              "src": "22316:53:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 914,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "22326:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 916,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "notifyRedemptionProofTimedOut",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3268,
                      "src": "22326:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22326:36:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 918,
                  "nodeType": "ExpressionStatement",
                  "src": "22326:36:2"
                }
              ]
            },
            "documentation": "@notice Notify the contract that the deposit has failed to receive a\n         redemption proof in the allotted time.\n @dev This call will revert if the deposit is not currently awaiting a\n      signature or if the allotted time has not yet elapsed. This is\n      considered an abort, and is punished by seizing signer bonds and\n      putting them up for auction for the lot size amount in TBTC (see\n      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.\n      The caller is captured as the liquidation initiator, and\n      is eligible for 50% of any bond left after the auction is\n     completed.",
            "id": 920,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notifyRedemptionProofTimedOut",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 912,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22304:2:2"
            },
            "returnParameters": {
              "id": 913,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22316:0:2"
            },
            "scope": 1134,
            "src": "22266:103:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 928,
              "nodeType": "Block",
              "src": "23173:52:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 923,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "23183:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 925,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "purchaseSignerBondsAtAuction",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2196,
                      "src": "23183:33:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23183:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 927,
                  "nodeType": "ExpressionStatement",
                  "src": "23183:35:2"
                }
              ]
            },
            "documentation": "@notice Closes an auction and purchases the signer bonds by transferring\n         the lot size in TBTC to the redeemer, if there is one, or to the\n         TDT holder if not. Any bond amount that is not currently up for\n         auction is either made available for the liquidation initiator\n         to withdraw (for fraud) or split 50-50 between the initiator and\n         the signers (for abort or collateralization issues).\n @dev The amount of ETH given for the transferred TBTC can be read using\n      the `auctionValue` function; note, however, that the function's\n      value is only static during the specific block it is queried, as it\n      varies by block timestamp.",
            "id": 929,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "purchaseSignerBondsAtAuction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 921,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23161:2:2"
            },
            "returnParameters": {
              "id": 922,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23173:0:2"
            },
            "scope": 1134,
            "src": "23124:101:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 946,
              "nodeType": "Block",
              "src": "23815:138:2",
              "statements": [
                {
                  "assignments": [
                    937,
                    null,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 937,
                      "name": "tbtcPayment",
                      "nodeType": "VariableDeclaration",
                      "scope": 946,
                      "src": "23826:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 936,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23826:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null,
                    null
                  ],
                  "id": 943,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 940,
                        "name": "_redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 931,
                        "src": "23901:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 941,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23912:5:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 938,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "23865:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 939,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "calculateRedemptionTbtcAmounts",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5032,
                      "src": "23865:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_address_$_t_bool_$returns$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,address,bool) view returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23865:53:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23825:93:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 944,
                    "name": "tbtcPayment",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 937,
                    "src": "23935:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 935,
                  "id": 945,
                  "nodeType": "Return",
                  "src": "23928:18:2"
                }
              ]
            },
            "documentation": "@notice Get TBTC amount required for redemption by a specified\n         _redeemer.\n @dev This call will revert if redemption is not possible by _redeemer.\n @param _redeemer The deposit redeemer whose TBTC requirement is being\n        requested.\n @return The amount in TBTC needed by the `_redeemer` to redeem the\n         deposit.",
            "id": 947,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRedemptionTbtcRequirement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 932,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 931,
                  "name": "_redeemer",
                  "nodeType": "VariableDeclaration",
                  "scope": 947,
                  "src": "23736:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 930,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23736:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23735:19:2"
            },
            "returnParameters": {
              "id": 935,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 934,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 947,
                  "src": "23802:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 933,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23802:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23801:9:2"
            },
            "scope": 1134,
            "src": "23698:255:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 964,
              "nodeType": "Block",
              "src": "24341:137:2",
              "statements": [
                {
                  "assignments": [
                    955,
                    null,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 955,
                      "name": "tbtcPayment",
                      "nodeType": "VariableDeclaration",
                      "scope": 964,
                      "src": "24352:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 954,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24352:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null,
                    null
                  ],
                  "id": 961,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 958,
                        "name": "_redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 949,
                        "src": "24427:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 959,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24438:4:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 956,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "24391:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 957,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "calculateRedemptionTbtcAmounts",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5032,
                      "src": "24391:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_address_$_t_bool_$returns$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,address,bool) view returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 960,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24391:52:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24351:92:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 962,
                    "name": "tbtcPayment",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 955,
                    "src": "24460:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 953,
                  "id": 963,
                  "nodeType": "Return",
                  "src": "24453:18:2"
                }
              ]
            },
            "documentation": "@notice Get TBTC amount required for redemption assuming _redeemer\n         is this deposit's owner (TDT holder).\n @param _redeemer The assumed owner of the deposit's TDT .\n @return The amount in TBTC needed to redeem the deposit.",
            "id": 965,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getOwnerRedemptionTbtcRequirement",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 950,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 949,
                  "name": "_redeemer",
                  "nodeType": "VariableDeclaration",
                  "scope": 965,
                  "src": "24262:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 948,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "24262:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24261:19:2"
            },
            "returnParameters": {
              "id": 953,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 952,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 965,
                  "src": "24328:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 951,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24328:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24327:9:2"
            },
            "scope": 1134,
            "src": "24219:259:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 979,
              "nodeType": "Block",
              "src": "25439:138:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 975,
                        "name": "_outputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 967,
                        "src": "25529:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 976,
                        "name": "_redeemerOutputScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 969,
                        "src": "25548:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 972,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "25506:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 974,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "requestRedemption",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2755,
                      "src": "25506:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes8_$_t_bytes_memory_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes8,bytes memory)"
                      }
                    },
                    "id": 977,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25506:64:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 978,
                  "nodeType": "ExpressionStatement",
                  "src": "25506:64:2"
                }
              ]
            },
            "documentation": "@notice Requests redemption of this deposit, meaning the transmission,\n         by the signers, of the deposit's UTXO to the specified Bitocin\n         output script. Requires approving the deposit to spend the\n         amount of TBTC needed to redeem.\n @dev The amount of TBTC needed to redeem can be looked up using the\n      `getRedemptionTbtcRequirement` or `getOwnerRedemptionTbtcRequirement`\n      functions.\n @param  _outputValueBytes The 8-byte little-endian output size. The\n         difference between this value and the lot size of the deposit\n         will be paid as a fee to the Bitcoin miners when the signed\n         transaction is broadcast.\n @param  _redeemerOutputScript The redeemer's length-prefixed output\n         script.",
            "id": 980,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "requestRedemption",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 970,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 967,
                  "name": "_outputValueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 980,
                  "src": "25357:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 966,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "25357:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 969,
                  "name": "_redeemerOutputScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 980,
                  "src": "25391:34:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 968,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "25391:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25347:84:2"
            },
            "returnParameters": {
              "id": 971,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25439:0:2"
            },
            "scope": 1134,
            "src": "25321:256:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 997,
              "nodeType": "Block",
              "src": "26184:60:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 992,
                        "name": "_v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 982,
                        "src": "26226:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 993,
                        "name": "_r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 984,
                        "src": "26230:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 994,
                        "name": "_s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 986,
                        "src": "26234:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 989,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "26194:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 991,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "provideRedemptionSignature",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2811,
                      "src": "26194:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,uint8,bytes32,bytes32)"
                      }
                    },
                    "id": 995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26194:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 996,
                  "nodeType": "ExpressionStatement",
                  "src": "26194:43:2"
                }
              ]
            },
            "documentation": "@notice Anyone may provide a withdrawal signature if it was requested.\n @dev The signers will be penalized if this function is not called\n      correctly within `TBTCConstants.REDEMPTION_SIGNATURE_TIMEOUT`\n      seconds of a redemption request or fee increase being received.\n @param _v Signature recovery value.\n @param _r Signature R value.\n @param _s Signature S value. Should be in the low half of secp256k1\n        curve's order.",
            "id": 998,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "provideRedemptionSignature",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 982,
                  "name": "_v",
                  "nodeType": "VariableDeclaration",
                  "scope": 998,
                  "src": "26120:8:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 981,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "26120:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 984,
                  "name": "_r",
                  "nodeType": "VariableDeclaration",
                  "scope": 998,
                  "src": "26138:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 983,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "26138:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 986,
                  "name": "_s",
                  "nodeType": "VariableDeclaration",
                  "scope": 998,
                  "src": "26158:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 985,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "26158:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26110:64:2"
            },
            "returnParameters": {
              "id": 988,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26184:0:2"
            },
            "scope": 1134,
            "src": "26075:169:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1012,
              "nodeType": "Block",
              "src": "27120:126:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1008,
                        "name": "_previousOutputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1000,
                        "src": "27170:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1009,
                        "name": "_newOutputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1002,
                        "src": "27209:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1005,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "27130:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 1007,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "increaseRedemptionFee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2930,
                      "src": "27130:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes8_$_t_bytes8_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes8,bytes8)"
                      }
                    },
                    "id": 1010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27130:109:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1011,
                  "nodeType": "ExpressionStatement",
                  "src": "27130:109:2"
                }
              ]
            },
            "documentation": "@notice Anyone may request a signature for a transaction with an\n         increased Bitcoin transaction fee.\n @dev This call will revert if the fee is already at its maximum, or if\n      the new requested fee is not a multiple of the initial requested\n      fee. Transaction fees can only be bumped by the amount of the\n      initial requested fee. Calling this sends the deposit back to\n      the `AWAITING_WITHDRAWAL_SIGNATURE` state and requires the signers\n      to `provideRedemptionSignature` for the new output value in a\n      timely fashion.\n @param _previousOutputValueBytes The previous output's value.\n @param _newOutputValueBytes The new output's value.",
            "id": 1013,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "increaseRedemptionFee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1003,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1000,
                  "name": "_previousOutputValueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 1013,
                  "src": "27035:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 999,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "27035:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1002,
                  "name": "_newOutputValueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 1013,
                  "src": "27077:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 1001,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "27077:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27025:85:2"
            },
            "returnParameters": {
              "id": 1004,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27120:0:2"
            },
            "scope": 1134,
            "src": "26995:251:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1042,
              "nodeType": "Block",
              "src": "28987:301:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1033,
                        "name": "_txVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1015,
                        "src": "29095:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1034,
                        "name": "_txInputVector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1017,
                        "src": "29119:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1035,
                        "name": "_txOutputVector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1019,
                        "src": "29147:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1036,
                        "name": "_txLocktime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1021,
                        "src": "29176:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1037,
                        "name": "_merkleProof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1023,
                        "src": "29201:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1038,
                        "name": "_txIndexInBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1025,
                        "src": "29227:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1039,
                        "name": "_bitcoinHeaders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1027,
                        "src": "29256:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1030,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "29054:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 1032,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "provideRedemptionProof",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3100,
                      "src": "29054:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes4_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes4_$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes4,bytes memory,bytes memory,bytes4,bytes memory,uint256,bytes memory)"
                      }
                    },
                    "id": 1040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29054:227:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1041,
                  "nodeType": "ExpressionStatement",
                  "src": "29054:227:2"
                }
              ]
            },
            "documentation": "@notice Anyone may submit a redemption proof to the deposit showing that\n         a transaction was submitted and sufficiently confirmed on the\n         Bitcoin chain transferring the deposit lot size's amount of BTC\n         from the signer-controlled private key corresponding to this\n         deposit to the requested redemption output script. This will\n         move the deposit into a redeemed state.\n @dev Takes a pre-parsed transaction and calculates values needed to\n      verify funding. Signers can have their bonds seized if this is not\n      called within `TBTCConstants.REDEMPTION_PROOF_TIMEOUT` seconds of\n      a redemption signature being provided.\n @param _txVersion Transaction version number (4-byte little-endian).\n @param _txInputVector All transaction inputs prepended by the number of\n        inputs encoded as a VarInt, max 0xFC(252) inputs.\n @param _txOutputVector All transaction outputs prepended by the number\n         of outputs encoded as a VarInt, max 0xFC(252) outputs.\n @param _txLocktime Final 4 bytes of the transaction.\n @param _merkleProof The merkle proof of transaction inclusion in a\n        block.\n @param _txIndexInBlock Transaction index in the block (0-indexed).\n @param _bitcoinHeaders Single bytestring of 80-byte bitcoin headers,\n        lowest height first.",
            "id": 1043,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "provideRedemptionProof",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1028,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1015,
                  "name": "_txVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "28747:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 1014,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "28747:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1017,
                  "name": "_txInputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "28774:27:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1016,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "28774:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1019,
                  "name": "_txOutputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "28811:28:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1018,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "28811:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1021,
                  "name": "_txLocktime",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "28849:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 1020,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "28849:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1023,
                  "name": "_merkleProof",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "28877:25:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1022,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "28877:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1025,
                  "name": "_txIndexInBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "28912:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1024,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28912:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1027,
                  "name": "_bitcoinHeaders",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "28945:28:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1026,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "28945:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28737:242:2"
            },
            "returnParameters": {
              "id": 1029,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28987:0:2"
            },
            "scope": 1134,
            "src": "28706:582:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1096,
              "nodeType": "Block",
              "src": "30684:285:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1060,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "30694:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 1062,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "tbtcSystem",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3828,
                      "src": "30694:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ITBTCSystem_$5511",
                        "typeString": "contract ITBTCSystem"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1063,
                      "name": "_tbtcSystem",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1045,
                      "src": "30712:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ITBTCSystem_$5511",
                        "typeString": "contract ITBTCSystem"
                      }
                    },
                    "src": "30694:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ITBTCSystem_$5511",
                      "typeString": "contract ITBTCSystem"
                    }
                  },
                  "id": 1065,
                  "nodeType": "ExpressionStatement",
                  "src": "30694:29:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1066,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "30733:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 1068,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "tbtcToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3830,
                      "src": "30733:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TBTCToken_$8561",
                        "typeString": "contract TBTCToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1069,
                      "name": "_tbtcToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1047,
                      "src": "30750:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TBTCToken_$8561",
                        "typeString": "contract TBTCToken"
                      }
                    },
                    "src": "30733:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TBTCToken_$8561",
                      "typeString": "contract TBTCToken"
                    }
                  },
                  "id": 1071,
                  "nodeType": "ExpressionStatement",
                  "src": "30733:27:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1072,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "30770:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 1074,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "tbtcDepositToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3832,
                      "src": "30770:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC721_$18287",
                        "typeString": "contract IERC721"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1075,
                      "name": "_tbtcDepositToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1049,
                      "src": "30794:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC721_$18287",
                        "typeString": "contract IERC721"
                      }
                    },
                    "src": "30770:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC721_$18287",
                      "typeString": "contract IERC721"
                    }
                  },
                  "id": 1077,
                  "nodeType": "ExpressionStatement",
                  "src": "30770:41:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1078,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "30821:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 1080,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "feeRebateToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3834,
                      "src": "30821:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                        "typeString": "contract FeeRebateToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1081,
                      "name": "_feeRebateToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1051,
                      "src": "30843:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                        "typeString": "contract FeeRebateToken"
                      }
                    },
                    "src": "30821:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                      "typeString": "contract FeeRebateToken"
                    }
                  },
                  "id": 1083,
                  "nodeType": "ExpressionStatement",
                  "src": "30821:37:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1088,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1084,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "30868:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 1086,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "vendingMachineAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3836,
                      "src": "30868:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1087,
                      "name": "_vendingMachineAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1053,
                      "src": "30897:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "30868:51:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 1089,
                  "nodeType": "ExpressionStatement",
                  "src": "30868:51:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1093,
                        "name": "_lotSizeSatoshis",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1055,
                        "src": "30945:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1090,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "30929:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 1092,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1360,
                      "src": "30929:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_uint64_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,uint64)"
                      }
                    },
                    "id": 1094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30929:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1095,
                  "nodeType": "ExpressionStatement",
                  "src": "30929:33:2"
                }
              ]
            },
            "documentation": "@notice This function can only be called by the deposit factory; use\n         `DepositFactory.createDeposit` to create a new deposit.\n @dev Initializes a new deposit clone with the base state for the\n      deposit.\n @param _tbtcSystem `TBTCSystem` contract. More info in `TBTCSystem`.\n @param _tbtcToken `TBTCToken` contract. More info in TBTCToken`.\n @param _tbtcDepositToken `TBTCDepositToken` (TDT) contract. More info in\n        `TBTCDepositToken`.\n @param _feeRebateToken `FeeRebateToken` (FRT) contract. More info in\n        `FeeRebateToken`.\n @param _vendingMachineAddress `VendingMachine` address. More info in\n        `VendingMachine`.\n @param _lotSizeSatoshis The minimum amount of satoshi the funder is\n                         required to send. This is also the amount of\n                         TBTC the TDT holder will be eligible to mint:\n                         (10**7 satoshi == 0.1 BTC == 0.1 TBTC).",
            "id": 1097,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1058,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1057,
                  "name": "onlyFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6250,
                  "src": "30672:11:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30672:11:2"
              }
            ],
            "name": "initializeDeposit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1056,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1045,
                  "name": "_tbtcSystem",
                  "nodeType": "VariableDeclaration",
                  "scope": 1097,
                  "src": "30449:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ITBTCSystem_$5511",
                    "typeString": "contract ITBTCSystem"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1044,
                    "name": "ITBTCSystem",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5511,
                    "src": "30449:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ITBTCSystem_$5511",
                      "typeString": "contract ITBTCSystem"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1047,
                  "name": "_tbtcToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 1097,
                  "src": "30482:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_TBTCToken_$8561",
                    "typeString": "contract TBTCToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1046,
                    "name": "TBTCToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8561,
                    "src": "30482:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TBTCToken_$8561",
                      "typeString": "contract TBTCToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1049,
                  "name": "_tbtcDepositToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 1097,
                  "src": "30512:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC721_$18287",
                    "typeString": "contract IERC721"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1048,
                    "name": "IERC721",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 18287,
                    "src": "30512:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC721_$18287",
                      "typeString": "contract IERC721"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1051,
                  "name": "_feeRebateToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 1097,
                  "src": "30547:30:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                    "typeString": "contract FeeRebateToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1050,
                    "name": "FeeRebateToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6300,
                    "src": "30547:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                      "typeString": "contract FeeRebateToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1053,
                  "name": "_vendingMachineAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 1097,
                  "src": "30587:30:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1052,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "30587:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1055,
                  "name": "_lotSizeSatoshis",
                  "nodeType": "VariableDeclaration",
                  "scope": 1097,
                  "src": "30627:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1054,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "30627:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "30439:217:2"
            },
            "returnParameters": {
              "id": 1059,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30684:0:2"
            },
            "scope": 1134,
            "src": "30413:556:2",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1123,
              "nodeType": "Block",
              "src": "31739:371:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1107,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18360,
                            "src": "31827:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1108,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "31827:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1109,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 536,
                            "src": "31841:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                              "typeString": "struct DepositUtils.Deposit storage ref"
                            }
                          },
                          "id": 1110,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "vendingMachineAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3836,
                          "src": "31841:26:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "31827:40:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c79207468652076656e64696e67206d616368696e652063616e2063616c6c207472616e73666572416e6452657175657374526564656d7074696f6e",
                        "id": 1112,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31881:64:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ba2cf1e9a608f5597693807474aa5671af3c6ba01dae962d9b4db79596cbd636",
                          "typeString": "literal_string \"Only the vending machine can call transferAndRequestRedemption\""
                        },
                        "value": "Only the vending machine can call transferAndRequestRedemption"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ba2cf1e9a608f5597693807474aa5671af3c6ba01dae962d9b4db79596cbd636",
                          "typeString": "literal_string \"Only the vending machine can call transferAndRequestRedemption\""
                        }
                      ],
                      "id": 1106,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "31806:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31806:149:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1114,
                  "nodeType": "ExpressionStatement",
                  "src": "31806:149:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1118,
                        "name": "_outputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1099,
                        "src": "32012:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1119,
                        "name": "_redeemerOutputScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1101,
                        "src": "32043:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1120,
                        "name": "_finalRecipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1103,
                        "src": "32078:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1115,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "31965:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 1117,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferAndRequestRedemption",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2737,
                      "src": "31965:33:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes8_$_t_bytes_memory_ptr_$_t_address_payable_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes8,bytes memory,address payable)"
                      }
                    },
                    "id": 1121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31965:138:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1122,
                  "nodeType": "ExpressionStatement",
                  "src": "31965:138:2"
                }
              ]
            },
            "documentation": "@notice This function can only be called by the vending machine.\n @dev Performs the same action as requestRedemption, but transfers\n      ownership of the deposit to the specified _finalRecipient. Used as\n      a utility helper for the vending machine's shortcut\n      TBTC->redemption path.\n @param  _outputValueBytes The 8-byte little-endian output size.\n @param  _redeemerOutputScript The redeemer's length-prefixed output script.\n @param  _finalRecipient     The address to receive the TDT and later be recorded as deposit redeemer.",
            "id": 1124,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferAndRequestRedemption",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1099,
                  "name": "_outputValueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 1124,
                  "src": "31616:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 1098,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "31616:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1101,
                  "name": "_redeemerOutputScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 1124,
                  "src": "31650:34:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1100,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "31650:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1103,
                  "name": "_finalRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1124,
                  "src": "31694:31:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 1102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "31694:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "31606:125:2"
            },
            "returnParameters": {
              "id": 1105,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31739:0:2"
            },
            "scope": 1134,
            "src": "31569:541:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1132,
              "nodeType": "Block",
              "src": "32307:37:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1127,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "32317:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 1129,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdrawFunds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4785,
                      "src": "32317:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 1130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32317:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1131,
                  "nodeType": "ExpressionStatement",
                  "src": "32317:20:2"
                }
              ]
            },
            "documentation": "@notice Withdraw the ETH balance of the deposit allotted to the caller.\n @dev Withdrawals can only happen when a contract is in an end-state.",
            "id": 1133,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "withdrawFunds",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1125,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32295:2:2"
            },
            "returnParameters": {
              "id": 1126,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32307:0:2"
            },
            "scope": 1134,
            "src": "32273:71:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 1135,
        "src": "1690:30656:2"
      }
    ],
    "src": "0:32347:2"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/Deposit.sol",
      "exportedSymbols": {
        "Deposit": [
          1134
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.5",
            ".17"
          ]
        },
        "id": 498,
        "name": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "attributes": {
          "SourceUnit": 2331,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositLiquidation.sol",
          "file": "./DepositLiquidation.sol",
          "scope": 1135,
          "symbolAliases": [
            {
              "foreign": 499,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 500,
        "name": "ImportDirective",
        "src": "25:60:2"
      },
      {
        "attributes": {
          "SourceUnit": 5104,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol",
          "file": "./DepositUtils.sol",
          "scope": 1135,
          "symbolAliases": [
            {
              "foreign": 501,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 502,
        "name": "ImportDirective",
        "src": "86:48:2"
      },
      {
        "attributes": {
          "SourceUnit": 1758,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositFunding.sol",
          "file": "./DepositFunding.sol",
          "scope": 1135,
          "symbolAliases": [
            {
              "foreign": 503,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 504,
        "name": "ImportDirective",
        "src": "135:52:2"
      },
      {
        "attributes": {
          "SourceUnit": 3270,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositRedemption.sol",
          "file": "./DepositRedemption.sol",
          "scope": 1135,
          "symbolAliases": [
            {
              "foreign": 505,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 506,
        "name": "ImportDirective",
        "src": "188:58:2"
      },
      {
        "attributes": {
          "SourceUnit": 3779,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositStates.sol",
          "file": "./DepositStates.sol",
          "scope": 1135,
          "symbolAliases": [
            {
              "foreign": 507,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 508,
        "name": "ImportDirective",
        "src": "247:50:2"
      },
      {
        "attributes": {
          "SourceUnit": 5512,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITBTCSystem.sol",
          "file": "../interfaces/ITBTCSystem.sol",
          "scope": 1135,
          "symbolAliases": [
            {
              "foreign": 509,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 510,
        "name": "ImportDirective",
        "src": "298:58:2"
      },
      {
        "attributes": {
          "SourceUnit": 18288,
          "absolutePath": "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol",
          "file": "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol",
          "scope": 1135,
          "symbolAliases": [
            {
              "foreign": 511,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 512,
        "name": "ImportDirective",
        "src": "357:87:2"
      },
      {
        "attributes": {
          "SourceUnit": 8562,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol",
          "file": "../system/TBTCToken.sol",
          "scope": 1135,
          "symbolAliases": [
            {
              "foreign": 513,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 514,
        "name": "ImportDirective",
        "src": "445:50:2"
      },
      {
        "attributes": {
          "SourceUnit": 6301,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/FeeRebateToken.sol",
          "file": "../system/FeeRebateToken.sol",
          "scope": 1135,
          "symbolAliases": [
            {
              "foreign": 515,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 516,
        "name": "ImportDirective",
        "src": "496:60:2"
      },
      {
        "attributes": {
          "SourceUnit": 6252,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/DepositFactoryAuthority.sol",
          "file": "../system/DepositFactoryAuthority.sol",
          "scope": 1135,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 517,
        "name": "ImportDirective",
        "src": "558:47:2"
      },
      {
        "attributes": {
          "contractDependencies": [
            6251
          ],
          "contractKind": "contract",
          "documentation": "@title  tBTC Deposit\n @notice This is the main contract for tBTC. It is the state machine that\n         (through various libraries) handles bitcoin funding, bitcoin-spv\n         proofs, redemption, liquidation, and fraud logic.\n @dev This contract presents a public API that exposes the following\n      libraries:\n\n///       - `DepositFunding`\n       - `DepositLiquidaton`\n       - `DepositRedemption`,\n       - `DepositStates`\n       - `DepositUtils`\n       - `OutsourceDepositLogging`\n       - `TBTCConstants`\n\n///      Where these libraries require deposit state, this contract's state\n      variable `self` is used. `self` is a struct of type\n      `DepositUtils.Deposit` that contains all aspects of the deposit state\n      itself.",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            1134,
            6251
          ],
          "name": "Deposit",
          "scope": 1135
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositFactoryAuthority",
                  "referencedDeclaration": 6251,
                  "type": "contract DepositFactoryAuthority"
                },
                "id": 518,
                "name": "UserDefinedTypeName",
                "src": "1710:23:2"
              }
            ],
            "id": 519,
            "name": "InheritanceSpecifier",
            "src": "1710:23:2"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositRedemption",
                  "referencedDeclaration": 3269,
                  "type": "library DepositRedemption"
                },
                "id": 520,
                "name": "UserDefinedTypeName",
                "src": "1746:17:2"
              },
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils.Deposit",
                  "referencedDeclaration": 3893,
                  "type": "struct DepositUtils.Deposit"
                },
                "id": 521,
                "name": "UserDefinedTypeName",
                "src": "1768:20:2"
              }
            ],
            "id": 522,
            "name": "UsingForDirective",
            "src": "1740:49:2"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositFunding",
                  "referencedDeclaration": 1757,
                  "type": "library DepositFunding"
                },
                "id": 523,
                "name": "UserDefinedTypeName",
                "src": "1800:14:2"
              },
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils.Deposit",
                  "referencedDeclaration": 3893,
                  "type": "struct DepositUtils.Deposit"
                },
                "id": 524,
                "name": "UserDefinedTypeName",
                "src": "1819:20:2"
              }
            ],
            "id": 525,
            "name": "UsingForDirective",
            "src": "1794:46:2"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositLiquidation",
                  "referencedDeclaration": 2330,
                  "type": "library DepositLiquidation"
                },
                "id": 526,
                "name": "UserDefinedTypeName",
                "src": "1851:18:2"
              },
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils.Deposit",
                  "referencedDeclaration": 3893,
                  "type": "struct DepositUtils.Deposit"
                },
                "id": 527,
                "name": "UserDefinedTypeName",
                "src": "1874:20:2"
              }
            ],
            "id": 528,
            "name": "UsingForDirective",
            "src": "1845:50:2"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils",
                  "referencedDeclaration": 5103,
                  "type": "library DepositUtils"
                },
                "id": 529,
                "name": "UserDefinedTypeName",
                "src": "1906:12:2"
              },
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils.Deposit",
                  "referencedDeclaration": 3893,
                  "type": "struct DepositUtils.Deposit"
                },
                "id": 530,
                "name": "UserDefinedTypeName",
                "src": "1923:20:2"
              }
            ],
            "id": 531,
            "name": "UsingForDirective",
            "src": "1900:44:2"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositStates",
                  "referencedDeclaration": 3778,
                  "type": "library DepositStates"
                },
                "id": 532,
                "name": "UserDefinedTypeName",
                "src": "1955:13:2"
              },
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils.Deposit",
                  "referencedDeclaration": 3893,
                  "type": "struct DepositUtils.Deposit"
                },
                "id": 533,
                "name": "UserDefinedTypeName",
                "src": "1973:20:2"
              }
            ],
            "id": 534,
            "name": "UsingForDirective",
            "src": "1949:45:2"
          },
          {
            "attributes": {
              "constant": false,
              "name": "self",
              "scope": 1134,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "struct DepositUtils.Deposit",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils.Deposit",
                  "referencedDeclaration": 3893,
                  "type": "struct DepositUtils.Deposit"
                },
                "id": 535,
                "name": "UserDefinedTypeName",
                "src": "2000:20:2"
              }
            ],
            "id": 536,
            "name": "VariableDeclaration",
            "src": "2000:25:2"
          },
          {
            "attributes": {
              "documentation": "@dev Deposit should only be _constructed_ once. New deposits are created\n      using the `DepositFactory.createDeposit` method, and are clones of\n      the constructed deposit. The factory will set the initial values\n      for a new clone using `initializeDeposit`.",
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 537,
                "name": "ParameterList",
                "src": "2338:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 538,
                "name": "ParameterList",
                "src": "2348:0:2"
              },
              {
                "children": [
                  {
                    "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"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6233,
                              "type": "function (address)",
                              "value": "initialize"
                            },
                            "id": 539,
                            "name": "Identifier",
                            "src": "2505:10:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_3735928559_by_1",
                                      "typeString": "int_const 3735928559"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 540,
                                "name": "ElementaryTypeNameExpression",
                                "src": "2516:7:2"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30786465616462656566",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 3735928559",
                                  "value": "0xdeadbeef"
                                },
                                "id": 541,
                                "name": "Literal",
                                "src": "2524:10:2"
                              }
                            ],
                            "id": 542,
                            "name": "FunctionCall",
                            "src": "2516:19:2"
                          }
                        ],
                        "id": 543,
                        "name": "FunctionCall",
                        "src": "2505:31:2"
                      }
                    ],
                    "id": 544,
                    "name": "ExpressionStatement",
                    "src": "2505:31:2"
                  }
                ],
                "id": 545,
                "name": "Block",
                "src": "2348:195:2"
              }
            ],
            "id": 546,
            "name": "FunctionDefinition",
            "src": "2327:216:2"
          },
          {
            "attributes": {
              "documentation": "@notice Deposits do not accept arbitrary ETH.",
              "implemented": true,
              "isConstructor": false,
              "kind": "fallback",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 1134,
              "stateMutability": "payable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 547,
                "name": "ParameterList",
                "src": "2611:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 548,
                "name": "ParameterList",
                "src": "2631:0:2"
              },
              {
                "children": [
                  {
                    "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_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_6ee494d6877c5b2c4945f59db6d994a7629054f79e14a67dc0d85dc58d6d1938",
                                  "typeString": "literal_string \"Deposit contract was called with unknown function selector.\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 549,
                            "name": "Identifier",
                            "src": "2641:7:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "data",
                                      "referencedDeclaration": null,
                                      "type": "bytes calldata"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18360,
                                          "type": "msg",
                                          "value": "msg"
                                        },
                                        "id": 550,
                                        "name": "Identifier",
                                        "src": "2662:3:2"
                                      }
                                    ],
                                    "id": 551,
                                    "name": "MemberAccess",
                                    "src": "2662:8:2"
                                  }
                                ],
                                "id": 552,
                                "name": "MemberAccess",
                                "src": "2662:15:2"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 553,
                                "name": "Literal",
                                "src": "2681:1:2"
                              }
                            ],
                            "id": 554,
                            "name": "BinaryOperation",
                            "src": "2662:20:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4465706f73697420636f6e7472616374207761732063616c6c6564207769746820756e6b6e6f776e2066756e6374696f6e2073656c6563746f722e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Deposit contract was called with unknown function selector.\"",
                              "value": "Deposit contract was called with unknown function selector."
                            },
                            "id": 555,
                            "name": "Literal",
                            "src": "2696:61:2"
                          }
                        ],
                        "id": 556,
                        "name": "FunctionCall",
                        "src": "2641:126:2"
                      }
                    ],
                    "id": 557,
                    "name": "ExpressionStatement",
                    "src": "2641:126:2"
                  }
                ],
                "id": 558,
                "name": "Block",
                "src": "2631:143:2"
              }
            ],
            "id": 559,
            "name": "FunctionDefinition",
            "src": "2603:171:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get this deposit's BTC lot size in satoshis.\n @return uint64 lot size in satoshis.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "lotSizeSatoshis",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 560,
                "name": "ParameterList",
                "src": "2996:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 568,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 561,
                        "name": "ElementaryTypeName",
                        "src": "3022:6:2"
                      }
                    ],
                    "id": 562,
                    "name": "VariableDeclaration",
                    "src": "3022:6:2"
                  }
                ],
                "id": 563,
                "name": "ParameterList",
                "src": "3021:8:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 563
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "lotSizeSatoshis",
                          "referencedDeclaration": 3838,
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 536,
                              "type": "struct DepositUtils.Deposit storage ref",
                              "value": "self"
                            },
                            "id": 564,
                            "name": "Identifier",
                            "src": "3047:4:2"
                          }
                        ],
                        "id": 565,
                        "name": "MemberAccess",
                        "src": "3047:20:2"
                      }
                    ],
                    "id": 566,
                    "name": "Return",
                    "src": "3040:27:2"
                  }
                ],
                "id": 567,
                "name": "Block",
                "src": "3030:44:2"
              }
            ],
            "id": 568,
            "name": "FunctionDefinition",
            "src": "2972:102:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get this deposit's lot size in TBTC.\n @dev This is the same as lotSizeSatoshis(), but is multiplied to scale\n      to 18 decimal places.\n @return uint256 lot size in TBTC precision (max 18 decimal places).",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "lotSizeTbtc",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 569,
                "name": "ParameterList",
                "src": "3343:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 578,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 570,
                        "name": "ElementaryTypeName",
                        "src": "3369:7:2"
                      }
                    ],
                    "id": 571,
                    "name": "VariableDeclaration",
                    "src": "3369:7:2"
                  }
                ],
                "id": 572,
                "name": "ParameterList",
                "src": "3368:9:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 572
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "lotSizeTbtc",
                              "referencedDeclaration": 4356,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 573,
                                "name": "Identifier",
                                "src": "3395:4:2"
                              }
                            ],
                            "id": 574,
                            "name": "MemberAccess",
                            "src": "3395:16:2"
                          }
                        ],
                        "id": 575,
                        "name": "FunctionCall",
                        "src": "3395:18:2"
                      }
                    ],
                    "id": 576,
                    "name": "Return",
                    "src": "3388:25:2"
                  }
                ],
                "id": 577,
                "name": "Block",
                "src": "3378:42:2"
              }
            ],
            "id": 578,
            "name": "FunctionDefinition",
            "src": "3323:97:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get the signer fee for this deposit, in TBTC.\n @dev This is the one-time fee required by the signers to perform the\n      tasks needed to maintain a decentralized and trustless model for\n      tBTC. It is a percentage of the deposit's lot size.\n @return Fee amount in TBTC.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "signerFeeTbtc",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 579,
                "name": "ParameterList",
                "src": "3766:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 588,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 580,
                        "name": "ElementaryTypeName",
                        "src": "3792:7:2"
                      }
                    ],
                    "id": 581,
                    "name": "VariableDeclaration",
                    "src": "3792:7:2"
                  }
                ],
                "id": 582,
                "name": "ParameterList",
                "src": "3791:9:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 582
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "signerFeeTbtc",
                              "referencedDeclaration": 4372,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 583,
                                "name": "Identifier",
                                "src": "3818:4:2"
                              }
                            ],
                            "id": 584,
                            "name": "MemberAccess",
                            "src": "3818:18:2"
                          }
                        ],
                        "id": 585,
                        "name": "FunctionCall",
                        "src": "3818:20:2"
                      }
                    ],
                    "id": 586,
                    "name": "Return",
                    "src": "3811:27:2"
                  }
                ],
                "id": 587,
                "name": "Block",
                "src": "3801:44:2"
              }
            ],
            "id": 588,
            "name": "FunctionDefinition",
            "src": "3744:101:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get the integer representing the current state.\n @dev We implement this because contracts don't handle foreign enums\n      well. See `DepositStates` for more info on states.\n @return The 0-indexed state from the DepositStates enum.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "currentState",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 589,
                "name": "ParameterList",
                "src": "4141:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 599,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 590,
                        "name": "ElementaryTypeName",
                        "src": "4167:7:2"
                      }
                    ],
                    "id": 591,
                    "name": "VariableDeclaration",
                    "src": "4167:7:2"
                  }
                ],
                "id": 592,
                "name": "ParameterList",
                "src": "4166:9:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 592
                    },
                    "children": [
                      {
                        "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_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint256)",
                              "value": "uint256"
                            },
                            "id": 593,
                            "name": "ElementaryTypeNameExpression",
                            "src": "4193:7:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "currentState",
                              "referencedDeclaration": 3840,
                              "type": "uint8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 594,
                                "name": "Identifier",
                                "src": "4201:4:2"
                              }
                            ],
                            "id": 595,
                            "name": "MemberAccess",
                            "src": "4201:17:2"
                          }
                        ],
                        "id": 596,
                        "name": "FunctionCall",
                        "src": "4193:26:2"
                      }
                    ],
                    "id": 597,
                    "name": "Return",
                    "src": "4186:33:2"
                  }
                ],
                "id": 598,
                "name": "Block",
                "src": "4176:50:2"
              }
            ],
            "id": 599,
            "name": "FunctionDefinition",
            "src": "4120:106:2"
          },
          {
            "attributes": {
              "documentation": "@notice Check if the Deposit is in ACTIVE state.\n @return True if state is ACTIVE, false otherwise.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "inActive",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 600,
                "name": "ParameterList",
                "src": "4364:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 609,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 601,
                        "name": "ElementaryTypeName",
                        "src": "4390:4:2"
                      }
                    ],
                    "id": 602,
                    "name": "VariableDeclaration",
                    "src": "4390:4:2"
                  }
                ],
                "id": 603,
                "name": "ParameterList",
                "src": "4389:6:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 603
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "inActive",
                              "referencedDeclaration": 3500,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 604,
                                "name": "Identifier",
                                "src": "4413:4:2"
                              }
                            ],
                            "id": 605,
                            "name": "MemberAccess",
                            "src": "4413:13:2"
                          }
                        ],
                        "id": 606,
                        "name": "FunctionCall",
                        "src": "4413:15:2"
                      }
                    ],
                    "id": 607,
                    "name": "Return",
                    "src": "4406:22:2"
                  }
                ],
                "id": 608,
                "name": "Block",
                "src": "4396:39:2"
              }
            ],
            "id": 609,
            "name": "FunctionDefinition",
            "src": "4347:88:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get the contract address of the BondedECDSAKeep associated with\n         this Deposit.\n @dev The keep contract address is saved on Deposit initialization.\n @return Address of the Keep contract.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "keepAddress",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 610,
                "name": "ParameterList",
                "src": "4692:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 618,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 611,
                        "name": "ElementaryTypeName",
                        "src": "4718:7:2"
                      }
                    ],
                    "id": 612,
                    "name": "VariableDeclaration",
                    "src": "4718:7:2"
                  }
                ],
                "id": 613,
                "name": "ParameterList",
                "src": "4717:9:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 613
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "keepAddress",
                          "referencedDeclaration": 3858,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 536,
                              "type": "struct DepositUtils.Deposit storage ref",
                              "value": "self"
                            },
                            "id": 614,
                            "name": "Identifier",
                            "src": "4744:4:2"
                          }
                        ],
                        "id": 615,
                        "name": "MemberAccess",
                        "src": "4744:16:2"
                      }
                    ],
                    "id": 616,
                    "name": "Return",
                    "src": "4737:23:2"
                  }
                ],
                "id": 617,
                "name": "Block",
                "src": "4727:40:2"
              }
            ],
            "id": 618,
            "name": "FunctionDefinition",
            "src": "4672:95:2"
          },
          {
            "attributes": {
              "documentation": "@notice Retrieve the remaining term of the deposit in seconds.\n @dev The value accuracy is not guaranteed since block.timestmap can be\n      lightly manipulated by miners.\n @return The remaining term of the deposit in seconds. 0 if already at\n         term.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "remainingTerm",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 619,
                "name": "ParameterList",
                "src": "5089:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 628,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 620,
                        "name": "ElementaryTypeName",
                        "src": "5115:7:2"
                      }
                    ],
                    "id": 621,
                    "name": "VariableDeclaration",
                    "src": "5115:7:2"
                  }
                ],
                "id": 622,
                "name": "ParameterList",
                "src": "5114:9:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 622
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "remainingTerm",
                              "referencedDeclaration": 4269,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 623,
                                "name": "Identifier",
                                "src": "5141:4:2"
                              }
                            ],
                            "id": 624,
                            "name": "MemberAccess",
                            "src": "5141:18:2"
                          }
                        ],
                        "id": 625,
                        "name": "FunctionCall",
                        "src": "5141:20:2"
                      }
                    ],
                    "id": 626,
                    "name": "Return",
                    "src": "5134:27:2"
                  }
                ],
                "id": 627,
                "name": "Block",
                "src": "5124:44:2"
              }
            ],
            "id": 628,
            "name": "FunctionDefinition",
            "src": "5067:101:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get the current collateralization level for this Deposit.\n @dev This value represents the percentage of the backing BTC value the\n      signers currently must hold as bond.\n @return The current collateralization level for this deposit.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "collateralizationPercentage",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 629,
                "name": "ParameterList",
                "src": "5483:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 638,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 630,
                        "name": "ElementaryTypeName",
                        "src": "5509:7:2"
                      }
                    ],
                    "id": 631,
                    "name": "VariableDeclaration",
                    "src": "5509:7:2"
                  }
                ],
                "id": 632,
                "name": "ParameterList",
                "src": "5508:9:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 632
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "collateralizationPercentage",
                              "referencedDeclaration": 1874,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 633,
                                "name": "Identifier",
                                "src": "5535:4:2"
                              }
                            ],
                            "id": 634,
                            "name": "MemberAccess",
                            "src": "5535:32:2"
                          }
                        ],
                        "id": 635,
                        "name": "FunctionCall",
                        "src": "5535:34:2"
                      }
                    ],
                    "id": 636,
                    "name": "Return",
                    "src": "5528:41:2"
                  }
                ],
                "id": 637,
                "name": "Block",
                "src": "5518:58:2"
              }
            ],
            "id": 638,
            "name": "FunctionDefinition",
            "src": "5447:129:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get the initial collateralization level for this Deposit.\n @dev This value represents the percentage of the backing BTC value\n      the signers hold initially. It is set at creation time.\n @return The initial collateralization level for this deposit.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "initialCollateralizedPercent",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 639,
                "name": "ParameterList",
                "src": "5907:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 647,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 640,
                        "name": "ElementaryTypeName",
                        "src": "5933:6:2"
                      }
                    ],
                    "id": 641,
                    "name": "VariableDeclaration",
                    "src": "5933:6:2"
                  }
                ],
                "id": 642,
                "name": "ParameterList",
                "src": "5932:8:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 642
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "initialCollateralizedPercent",
                          "referencedDeclaration": 3844,
                          "type": "uint16"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 536,
                              "type": "struct DepositUtils.Deposit storage ref",
                              "value": "self"
                            },
                            "id": 643,
                            "name": "Identifier",
                            "src": "5958:4:2"
                          }
                        ],
                        "id": 644,
                        "name": "MemberAccess",
                        "src": "5958:33:2"
                      }
                    ],
                    "id": 645,
                    "name": "Return",
                    "src": "5951:40:2"
                  }
                ],
                "id": 646,
                "name": "Block",
                "src": "5941:57:2"
              }
            ],
            "id": 647,
            "name": "FunctionDefinition",
            "src": "5870:128:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get the undercollateralization level for this Deposit.\n @dev This collateralization level is semi-critical. If the\n      collateralization level falls below this percentage the Deposit can\n      be courtesy-called by calling `notifyCourtesyCall`. This value\n      represents the percentage of the backing BTC value the signers must\n      hold as bond in order to not be undercollateralized. It is set at\n      creation time. Note that the value for new deposits in TBTCSystem\n      can be changed by governance, but the value for a particular\n      deposit is static once the deposit is created.\n @return The undercollateralized level for this deposit.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "undercollateralizedThresholdPercent",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 648,
                "name": "ParameterList",
                "src": "6780:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 656,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 649,
                        "name": "ElementaryTypeName",
                        "src": "6830:6:2"
                      }
                    ],
                    "id": 650,
                    "name": "VariableDeclaration",
                    "src": "6830:6:2"
                  }
                ],
                "id": 651,
                "name": "ParameterList",
                "src": "6829:8:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 651
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "undercollateralizedThresholdPercent",
                          "referencedDeclaration": 3846,
                          "type": "uint16"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 536,
                              "type": "struct DepositUtils.Deposit storage ref",
                              "value": "self"
                            },
                            "id": 652,
                            "name": "Identifier",
                            "src": "6859:4:2"
                          }
                        ],
                        "id": 653,
                        "name": "MemberAccess",
                        "src": "6859:40:2"
                      }
                    ],
                    "id": 654,
                    "name": "Return",
                    "src": "6852:47:2"
                  }
                ],
                "id": 655,
                "name": "Block",
                "src": "6842:64:2"
              }
            ],
            "id": 656,
            "name": "FunctionDefinition",
            "src": "6736:170:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get the severe undercollateralization level for this Deposit.\n @dev This collateralization level is critical. If the collateralization\n      level falls below this percentage the Deposit can get liquidated.\n      This value represents the percentage of the backing BTC value the\n      signers must hold as bond in order to not be severely\n      undercollateralized. It is set at creation time. Note that the\n      value for new deposits in TBTCSystem can be changed by governance,\n      but the value for a particular deposit is static once the deposit\n      is created.\n @return The severely undercollateralized level for this deposit.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "severelyUndercollateralizedThresholdPercent",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 657,
                "name": "ParameterList",
                "src": "7680:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 665,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 658,
                        "name": "ElementaryTypeName",
                        "src": "7730:6:2"
                      }
                    ],
                    "id": 659,
                    "name": "VariableDeclaration",
                    "src": "7730:6:2"
                  }
                ],
                "id": 660,
                "name": "ParameterList",
                "src": "7729:8:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 660
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "severelyUndercollateralizedThresholdPercent",
                          "referencedDeclaration": 3848,
                          "type": "uint16"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 536,
                              "type": "struct DepositUtils.Deposit storage ref",
                              "value": "self"
                            },
                            "id": 661,
                            "name": "Identifier",
                            "src": "7759:4:2"
                          }
                        ],
                        "id": 662,
                        "name": "MemberAccess",
                        "src": "7759:48:2"
                      }
                    ],
                    "id": 663,
                    "name": "Return",
                    "src": "7752:55:2"
                  }
                ],
                "id": 664,
                "name": "Block",
                "src": "7742:72:2"
              }
            ],
            "id": 665,
            "name": "FunctionDefinition",
            "src": "7628:186:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get the value of the funding UTXO.\n @dev This call will revert if the deposit is not in a state where the\n      UTXO info should be valid. In particular, before funding proof is\n      successfully submitted (i.e. in states START,\n      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), this value\n      would not be valid.\n @return The value of the funding UTXO in satoshis.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "utxoValue",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 666,
                "name": "ParameterList",
                "src": "8277:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 683,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 667,
                        "name": "ElementaryTypeName",
                        "src": "8303:7:2"
                      }
                    ],
                    "id": 668,
                    "name": "VariableDeclaration",
                    "src": "8303:7:2"
                  }
                ],
                "id": 669,
                "name": "ParameterList",
                "src": "8302:9:2"
              },
              {
                "children": [
                  {
                    "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_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_100f1280f38cd763f73a16b46ca920f0ca7c7a24f10f14fda8e1aba96ffdbb65",
                                  "typeString": "literal_string \"Deposit has not yet been funded and has no available funding info\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 670,
                            "name": "Identifier",
                            "src": "8322:7:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "inFunding",
                                      "referencedDeclaration": 3311,
                                      "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 536,
                                          "type": "struct DepositUtils.Deposit storage ref",
                                          "value": "self"
                                        },
                                        "id": 671,
                                        "name": "Identifier",
                                        "src": "8344:4:2"
                                      }
                                    ],
                                    "id": 672,
                                    "name": "MemberAccess",
                                    "src": "8344:14:2"
                                  }
                                ],
                                "id": 673,
                                "name": "FunctionCall",
                                "src": "8344:16:2"
                              }
                            ],
                            "id": 674,
                            "name": "UnaryOperation",
                            "src": "8343:17:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4465706f73697420686173206e6f7420796574206265656e2066756e64656420616e6420686173206e6f20617661696c61626c652066756e64696e6720696e666f",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Deposit has not yet been funded and has no available funding info\"",
                              "value": "Deposit has not yet been funded and has no available funding info"
                            },
                            "id": 675,
                            "name": "Literal",
                            "src": "8374:67:2"
                          }
                        ],
                        "id": 676,
                        "name": "FunctionCall",
                        "src": "8322:129:2"
                      }
                    ],
                    "id": 677,
                    "name": "ExpressionStatement",
                    "src": "8322:129:2"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 669
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "utxoValue",
                              "referencedDeclaration": 4471,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 678,
                                "name": "Identifier",
                                "src": "8469:4:2"
                              }
                            ],
                            "id": 679,
                            "name": "MemberAccess",
                            "src": "8469:14:2"
                          }
                        ],
                        "id": 680,
                        "name": "FunctionCall",
                        "src": "8469:16:2"
                      }
                    ],
                    "id": 681,
                    "name": "Return",
                    "src": "8462:23:2"
                  }
                ],
                "id": 682,
                "name": "Block",
                "src": "8312:180:2"
              }
            ],
            "id": 683,
            "name": "FunctionDefinition",
            "src": "8259:233:2"
          },
          {
            "attributes": {
              "documentation": "@notice Returns information associated with the funding UXTO.\n @dev This call will revert if the deposit is not in a state where the\n      funding info should be valid. In particular, before funding proof\n      is successfully submitted (i.e. in states START,\n      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), none of\n      these values are set or valid.\n @return A tuple of (uxtoValueBytes, fundedAt, uxtoOutpoint).",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "fundingInfo",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 684,
                "name": "ParameterList",
                "src": "8997:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "utxoValueBytes",
                      "scope": 709,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 685,
                        "name": "ElementaryTypeName",
                        "src": "9060:6:2"
                      }
                    ],
                    "id": 686,
                    "name": "VariableDeclaration",
                    "src": "9060:21:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "fundedAt",
                      "scope": 709,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 687,
                        "name": "ElementaryTypeName",
                        "src": "9095:7:2"
                      }
                    ],
                    "id": 688,
                    "name": "VariableDeclaration",
                    "src": "9095:16:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "utxoOutpoint",
                      "scope": 709,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 689,
                        "name": "ElementaryTypeName",
                        "src": "9125:5:2"
                      }
                    ],
                    "id": 690,
                    "name": "VariableDeclaration",
                    "src": "9125:25:2"
                  }
                ],
                "id": 691,
                "name": "ParameterList",
                "src": "9046:114:2"
              },
              {
                "children": [
                  {
                    "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_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_100f1280f38cd763f73a16b46ca920f0ca7c7a24f10f14fda8e1aba96ffdbb65",
                                  "typeString": "literal_string \"Deposit has not yet been funded and has no available funding info\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 692,
                            "name": "Identifier",
                            "src": "9175:7:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "inFunding",
                                      "referencedDeclaration": 3311,
                                      "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 536,
                                          "type": "struct DepositUtils.Deposit storage ref",
                                          "value": "self"
                                        },
                                        "id": 693,
                                        "name": "Identifier",
                                        "src": "9197:4:2"
                                      }
                                    ],
                                    "id": 694,
                                    "name": "MemberAccess",
                                    "src": "9197:14:2"
                                  }
                                ],
                                "id": 695,
                                "name": "FunctionCall",
                                "src": "9197:16:2"
                              }
                            ],
                            "id": 696,
                            "name": "UnaryOperation",
                            "src": "9196:17:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4465706f73697420686173206e6f7420796574206265656e2066756e64656420616e6420686173206e6f20617661696c61626c652066756e64696e6720696e666f",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Deposit has not yet been funded and has no available funding info\"",
                              "value": "Deposit has not yet been funded and has no available funding info"
                            },
                            "id": 697,
                            "name": "Literal",
                            "src": "9227:67:2"
                          }
                        ],
                        "id": 698,
                        "name": "FunctionCall",
                        "src": "9175:129:2"
                      }
                    ],
                    "id": 699,
                    "name": "ExpressionStatement",
                    "src": "9175:129:2"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 691
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "tuple(bytes8,uint256,bytes storage ref)"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "utxoValueBytes",
                              "referencedDeclaration": 3880,
                              "type": "bytes8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 700,
                                "name": "Identifier",
                                "src": "9323:4:2"
                              }
                            ],
                            "id": 701,
                            "name": "MemberAccess",
                            "src": "9323:19:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "fundedAt",
                              "referencedDeclaration": 3882,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 702,
                                "name": "Identifier",
                                "src": "9344:4:2"
                              }
                            ],
                            "id": 703,
                            "name": "MemberAccess",
                            "src": "9344:13:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "utxoOutpoint",
                              "referencedDeclaration": 3884,
                              "type": "bytes storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 704,
                                "name": "Identifier",
                                "src": "9359:4:2"
                              }
                            ],
                            "id": 705,
                            "name": "MemberAccess",
                            "src": "9359:17:2"
                          }
                        ],
                        "id": 706,
                        "name": "TupleExpression",
                        "src": "9322:55:2"
                      }
                    ],
                    "id": 707,
                    "name": "Return",
                    "src": "9315:62:2"
                  }
                ],
                "id": 708,
                "name": "Block",
                "src": "9165:219:2"
              }
            ],
            "id": 709,
            "name": "FunctionDefinition",
            "src": "8977:407:2"
          },
          {
            "attributes": {
              "documentation": "@notice Calculates the amount of value at auction right now.\n @dev This call will revert if the deposit is not in a state where an\n      auction is currently in progress.\n @return The value in wei that would be received in exchange for the\n         deposit's lot size in TBTC if `purchaseSignerBondsAtAuction`\n         were called at the time this function is called.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "auctionValue",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 710,
                "name": "ParameterList",
                "src": "9822:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 726,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 711,
                        "name": "ElementaryTypeName",
                        "src": "9848:7:2"
                      }
                    ],
                    "id": 712,
                    "name": "VariableDeclaration",
                    "src": "9848:7:2"
                  }
                ],
                "id": 713,
                "name": "ParameterList",
                "src": "9847:9:2"
              },
              {
                "children": [
                  {
                    "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_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_e9fd53870dce688f83b78e838d11903f2b2980bff8a1fdbdcc71a73f1fc42750",
                                  "typeString": "literal_string \"Deposit has no funds currently at auction\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 714,
                            "name": "Identifier",
                            "src": "9867:7:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "inSignerLiquidation",
                                  "referencedDeclaration": 3336,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 536,
                                      "type": "struct DepositUtils.Deposit storage ref",
                                      "value": "self"
                                    },
                                    "id": 715,
                                    "name": "Identifier",
                                    "src": "9888:4:2"
                                  }
                                ],
                                "id": 716,
                                "name": "MemberAccess",
                                "src": "9888:24:2"
                              }
                            ],
                            "id": 717,
                            "name": "FunctionCall",
                            "src": "9888:26:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4465706f73697420686173206e6f2066756e64732063757272656e746c792061742061756374696f6e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Deposit has no funds currently at auction\"",
                              "value": "Deposit has no funds currently at auction"
                            },
                            "id": 718,
                            "name": "Literal",
                            "src": "9928:43:2"
                          }
                        ],
                        "id": 719,
                        "name": "FunctionCall",
                        "src": "9867:114:2"
                      }
                    ],
                    "id": 720,
                    "name": "ExpressionStatement",
                    "src": "9867:114:2"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 713
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "auctionValue",
                              "referencedDeclaration": 4340,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 721,
                                "name": "Identifier",
                                "src": "9999:4:2"
                              }
                            ],
                            "id": 722,
                            "name": "MemberAccess",
                            "src": "9999:17:2"
                          }
                        ],
                        "id": 723,
                        "name": "FunctionCall",
                        "src": "9999:19:2"
                      }
                    ],
                    "id": 724,
                    "name": "Return",
                    "src": "9992:26:2"
                  }
                ],
                "id": 725,
                "name": "Block",
                "src": "9857:168:2"
              }
            ],
            "id": 726,
            "name": "FunctionDefinition",
            "src": "9801:224:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get caller's ETH withdraw allowance.\n @dev Generally ETH is only available to withdraw after the deposit\n      reaches a closed state. The amount reported is for the sender, and\n      can be withdrawn using `withdrawFunds` if the deposit is in an end\n      state.\n @return The withdraw allowance in wei.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "withdrawableAmount",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 727,
                "name": "ParameterList",
                "src": "10413:2:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 736,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 728,
                        "name": "ElementaryTypeName",
                        "src": "10439:7:2"
                      }
                    ],
                    "id": 729,
                    "name": "VariableDeclaration",
                    "src": "10439:7:2"
                  }
                ],
                "id": 730,
                "name": "ParameterList",
                "src": "10438:9:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 730
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getWithdrawableAmount",
                              "referencedDeclaration": 4799,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 731,
                                "name": "Identifier",
                                "src": "10465:4:2"
                              }
                            ],
                            "id": 732,
                            "name": "MemberAccess",
                            "src": "10465:26:2"
                          }
                        ],
                        "id": 733,
                        "name": "FunctionCall",
                        "src": "10465:28:2"
                      }
                    ],
                    "id": 734,
                    "name": "Return",
                    "src": "10458:35:2"
                  }
                ],
                "id": 735,
                "name": "Block",
                "src": "10448:52:2"
              }
            ],
            "id": 736,
            "name": "FunctionDefinition",
            "src": "10386:114:2"
          },
          {
            "attributes": {
              "documentation": "@notice Notify the contract that signing group setup has timed out if\n         retrieveSignerPubkey is not successfully called within the\n         allotted time.\n @dev This is considered a signer fault, and the signers' bonds are used\n      to make the deposit setup fee available for withdrawal by the TDT\n      holder as a refund. The remainder of the signers' bonds are\n      returned to the bonding pool and the signers are released from any\n      further responsibilities. Reverts if the deposit is not awaiting\n      signer setup or if the signing group formation timeout has not\n      elapsed.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "notifySignerSetupFailed",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 737,
                "name": "ParameterList",
                "src": "11296:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 738,
                "name": "ParameterList",
                "src": "11308:0:2"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "notifySignerSetupFailed",
                              "referencedDeclaration": 1433,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 739,
                                "name": "Identifier",
                                "src": "11318:4:2"
                              }
                            ],
                            "id": 741,
                            "name": "MemberAccess",
                            "src": "11318:28:2"
                          }
                        ],
                        "id": 742,
                        "name": "FunctionCall",
                        "src": "11318:30:2"
                      }
                    ],
                    "id": 743,
                    "name": "ExpressionStatement",
                    "src": "11318:30:2"
                  }
                ],
                "id": 744,
                "name": "Block",
                "src": "11308:47:2"
              }
            ],
            "id": 745,
            "name": "FunctionDefinition",
            "src": "11264:91:2"
          },
          {
            "attributes": {
              "documentation": "@notice Notify the contract that the ECDSA keep has generated a public\n         key so the deposit contract can pull it in.\n @dev Stores the pubkey as 2 bytestrings, X and Y. Emits a\n      RegisteredPubkey event with the two components. Reverts if the\n      deposit is not awaiting signer setup, if the generated public key\n      is unset or has incorrect length, or if the public key has a 0\n      X or Y value.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "retrieveSignerPubkey",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 746,
                "name": "ParameterList",
                "src": "11853:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 747,
                "name": "ParameterList",
                "src": "11865:0:2"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "retrieveSignerPubkey",
                              "referencedDeclaration": 1525,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 748,
                                "name": "Identifier",
                                "src": "11875:4:2"
                              }
                            ],
                            "id": 750,
                            "name": "MemberAccess",
                            "src": "11875:25:2"
                          }
                        ],
                        "id": 751,
                        "name": "FunctionCall",
                        "src": "11875:27:2"
                      }
                    ],
                    "id": 752,
                    "name": "ExpressionStatement",
                    "src": "11875:27:2"
                  }
                ],
                "id": 753,
                "name": "Block",
                "src": "11865:44:2"
              }
            ],
            "id": 754,
            "name": "FunctionDefinition",
            "src": "11824:85:2"
          },
          {
            "attributes": {
              "documentation": "@notice Notify the contract that the funding phase of the deposit has\n         timed out if `provideBTCFundingProof` is not successfully called\n         within the allotted time. Any sent BTC is left under control of\n         the signer group, and the funder can use `requestFunderAbort` to\n         request an at-signer-discretion return of any BTC sent to a\n         deposit that has been notified of a funding timeout.\n @dev This is considered a funder fault, and the funder's payment for\n      opening the deposit is not refunded. Emits a SetupFailed event.\n      Reverts if the funding timeout has not yet elapsed, or if the\n      deposit is not currently awaiting funding proof.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "notifyFundingTimedOut",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 755,
                "name": "ParameterList",
                "src": "12701:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 756,
                "name": "ParameterList",
                "src": "12713:0:2"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "notifyFundingTimedOut",
                              "referencedDeclaration": 1571,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 757,
                                "name": "Identifier",
                                "src": "12723:4:2"
                              }
                            ],
                            "id": 759,
                            "name": "MemberAccess",
                            "src": "12723:26:2"
                          }
                        ],
                        "id": 760,
                        "name": "FunctionCall",
                        "src": "12723:28:2"
                      }
                    ],
                    "id": 761,
                    "name": "ExpressionStatement",
                    "src": "12723:28:2"
                  }
                ],
                "id": 762,
                "name": "Block",
                "src": "12713:45:2"
              }
            ],
            "id": 763,
            "name": "FunctionDefinition",
            "src": "12671:87:2"
          },
          {
            "attributes": {
              "documentation": "@notice Requests a funder abort for a failed-funding deposit; that is,\n         requests the return of a sent UTXO to _abortOutputScript. It\n         imposes no requirements on the signing group. Signers should\n         send their UTXO to the requested output script, but do so at\n         their discretion and with no penalty for failing to do so. This\n         can be used for example when a UTXO is sent that is the wrong\n         size for the lot.\n @dev This is a self-admitted funder fault, and is only be callable by\n      the TDT holder. This function emits the FunderAbortRequested event,\n      but stores no additional state.\n @param _abortOutputScript The output script the funder wishes to request\n        a return of their UTXO to.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "requestFunderAbort",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_abortOutputScript",
                      "scope": 785,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 764,
                        "name": "ElementaryTypeName",
                        "src": "13621:5:2"
                      }
                    ],
                    "id": 765,
                    "name": "VariableDeclaration",
                    "src": "13621:31:2"
                  }
                ],
                "id": 766,
                "name": "ParameterList",
                "src": "13620:33:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 767,
                "name": "ParameterList",
                "src": "13661:0:2"
              },
              {
                "children": [
                  {
                    "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_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_738720baac4f31c7e761bf4cd790ca7524e4bb1453e2274d4e22e899925da28c",
                                  "typeString": "literal_string \"Only TDT holder can request funder abort\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 768,
                            "name": "Identifier",
                            "src": "13728:7:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address payable",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "depositOwner",
                                      "referencedDeclaration": 4604,
                                      "type": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 536,
                                          "type": "struct DepositUtils.Deposit storage ref",
                                          "value": "self"
                                        },
                                        "id": 769,
                                        "name": "Identifier",
                                        "src": "13749:4:2"
                                      }
                                    ],
                                    "id": 770,
                                    "name": "MemberAccess",
                                    "src": "13749:17:2"
                                  }
                                ],
                                "id": 771,
                                "name": "FunctionCall",
                                "src": "13749:19:2"
                              },
                              {
                                "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": 772,
                                    "name": "Identifier",
                                    "src": "13772:3:2"
                                  }
                                ],
                                "id": 773,
                                "name": "MemberAccess",
                                "src": "13772:10:2"
                              }
                            ],
                            "id": 774,
                            "name": "BinaryOperation",
                            "src": "13749:33:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4f6e6c792054445420686f6c6465722063616e20726571756573742066756e6465722061626f7274",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Only TDT holder can request funder abort\"",
                              "value": "Only TDT holder can request funder abort"
                            },
                            "id": 775,
                            "name": "Literal",
                            "src": "13796:42:2"
                          }
                        ],
                        "id": 776,
                        "name": "FunctionCall",
                        "src": "13728:120:2"
                      }
                    ],
                    "id": 777,
                    "name": "ExpressionStatement",
                    "src": "13728:120:2"
                  },
                  {
                    "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_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "requestFunderAbort",
                              "referencedDeclaration": 1592,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 778,
                                "name": "Identifier",
                                "src": "13859:4:2"
                              }
                            ],
                            "id": 780,
                            "name": "MemberAccess",
                            "src": "13859:23:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 765,
                              "type": "bytes memory",
                              "value": "_abortOutputScript"
                            },
                            "id": 781,
                            "name": "Identifier",
                            "src": "13883:18:2"
                          }
                        ],
                        "id": 782,
                        "name": "FunctionCall",
                        "src": "13859:43:2"
                      }
                    ],
                    "id": 783,
                    "name": "ExpressionStatement",
                    "src": "13859:43:2"
                  }
                ],
                "id": 784,
                "name": "Block",
                "src": "13661:248:2"
              }
            ],
            "id": 785,
            "name": "FunctionDefinition",
            "src": "13593:316:2"
          },
          {
            "attributes": {
              "documentation": "@notice Anyone can provide a signature corresponding to the signers'\n         public key to prove fraud during funding. Note that during\n         funding no signature has been requested from the signers, so\n         any signature is effectively fraud.\n @dev Calls out to the keep to verify if there was fraud.\n @param _v Signature recovery value.\n @param _r Signature R value.\n @param _s Signature S value.\n @param _signedDigest The digest signed by the signature (v,r,s) tuple.\n @param _preimage The sha256 preimage of the digest.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "provideFundingECDSAFraudProof",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_v",
                      "scope": 809,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 786,
                        "name": "ElementaryTypeName",
                        "src": "14566:5:2"
                      }
                    ],
                    "id": 787,
                    "name": "VariableDeclaration",
                    "src": "14566:8:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_r",
                      "scope": 809,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 788,
                        "name": "ElementaryTypeName",
                        "src": "14584:7:2"
                      }
                    ],
                    "id": 789,
                    "name": "VariableDeclaration",
                    "src": "14584:10:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_s",
                      "scope": 809,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 790,
                        "name": "ElementaryTypeName",
                        "src": "14604:7:2"
                      }
                    ],
                    "id": 791,
                    "name": "VariableDeclaration",
                    "src": "14604:10:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_signedDigest",
                      "scope": 809,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 792,
                        "name": "ElementaryTypeName",
                        "src": "14624:7:2"
                      }
                    ],
                    "id": 793,
                    "name": "VariableDeclaration",
                    "src": "14624:21:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_preimage",
                      "scope": 809,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 794,
                        "name": "ElementaryTypeName",
                        "src": "14655:5:2"
                      }
                    ],
                    "id": 795,
                    "name": "VariableDeclaration",
                    "src": "14655:22:2"
                  }
                ],
                "id": 796,
                "name": "ParameterList",
                "src": "14556:127:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 797,
                "name": "ParameterList",
                "src": "14691:0:2"
              },
              {
                "children": [
                  {
                    "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_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "provideFundingECDSAFraudProof",
                              "referencedDeclaration": 1659,
                              "type": "function (struct DepositUtils.Deposit storage pointer,uint8,bytes32,bytes32,bytes32,bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 798,
                                "name": "Identifier",
                                "src": "14758:4:2"
                              }
                            ],
                            "id": 800,
                            "name": "MemberAccess",
                            "src": "14758:34:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 787,
                              "type": "uint8",
                              "value": "_v"
                            },
                            "id": 801,
                            "name": "Identifier",
                            "src": "14806:2:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 789,
                              "type": "bytes32",
                              "value": "_r"
                            },
                            "id": 802,
                            "name": "Identifier",
                            "src": "14822:2:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 791,
                              "type": "bytes32",
                              "value": "_s"
                            },
                            "id": 803,
                            "name": "Identifier",
                            "src": "14838:2:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 793,
                              "type": "bytes32",
                              "value": "_signedDigest"
                            },
                            "id": 804,
                            "name": "Identifier",
                            "src": "14854:13:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 795,
                              "type": "bytes memory",
                              "value": "_preimage"
                            },
                            "id": 805,
                            "name": "Identifier",
                            "src": "14881:9:2"
                          }
                        ],
                        "id": 806,
                        "name": "FunctionCall",
                        "src": "14758:142:2"
                      }
                    ],
                    "id": 807,
                    "name": "ExpressionStatement",
                    "src": "14758:142:2"
                  }
                ],
                "id": 808,
                "name": "Block",
                "src": "14691:216:2"
              }
            ],
            "id": 809,
            "name": "FunctionDefinition",
            "src": "14518:389:2"
          },
          {
            "attributes": {
              "documentation": "@notice Anyone may submit a funding proof to the deposit showing that\n         a transaction was submitted and sufficiently confirmed on the\n         Bitcoin chain transferring the deposit lot size's amount of BTC\n         to the signer-controlled private key corresopnding to this\n         deposit. This will move the deposit into an active state.\n @dev Takes a pre-parsed transaction and calculates values needed to\n      verify funding.\n @param _txVersion Transaction version number (4-byte little-endian).\n @param _txInputVector All transaction inputs prepended by the number of\n        inputs encoded as a VarInt, max 0xFC(252) inputs.\n @param _txOutputVector All transaction outputs prepended by the number\n         of outputs encoded as a VarInt, max 0xFC(252) outputs.\n @param _txLocktime Final 4 bytes of the transaction.\n @param _fundingOutputIndex Index of funding output in _txOutputVector\n        (0-indexed).\n @param _merkleProof The merkle proof of transaction inclusion in a\n        block.\n @param _txIndexInBlock Transaction index in the block (0-indexed).\n @param _bitcoinHeaders Single bytestring of 80-byte bitcoin headers,\n        lowest height first.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "provideBTCFundingProof",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txVersion",
                      "scope": 842,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 810,
                        "name": "ElementaryTypeName",
                        "src": "16268:6:2"
                      }
                    ],
                    "id": 811,
                    "name": "VariableDeclaration",
                    "src": "16268:17:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txInputVector",
                      "scope": 842,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 812,
                        "name": "ElementaryTypeName",
                        "src": "16295:5:2"
                      }
                    ],
                    "id": 813,
                    "name": "VariableDeclaration",
                    "src": "16295:27:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txOutputVector",
                      "scope": 842,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 814,
                        "name": "ElementaryTypeName",
                        "src": "16332:5:2"
                      }
                    ],
                    "id": 815,
                    "name": "VariableDeclaration",
                    "src": "16332:28:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txLocktime",
                      "scope": 842,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 816,
                        "name": "ElementaryTypeName",
                        "src": "16370:6:2"
                      }
                    ],
                    "id": 817,
                    "name": "VariableDeclaration",
                    "src": "16370:18:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_fundingOutputIndex",
                      "scope": 842,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 818,
                        "name": "ElementaryTypeName",
                        "src": "16398:5:2"
                      }
                    ],
                    "id": 819,
                    "name": "VariableDeclaration",
                    "src": "16398:25:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_merkleProof",
                      "scope": 842,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 820,
                        "name": "ElementaryTypeName",
                        "src": "16433:5:2"
                      }
                    ],
                    "id": 821,
                    "name": "VariableDeclaration",
                    "src": "16433:25:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txIndexInBlock",
                      "scope": 842,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 822,
                        "name": "ElementaryTypeName",
                        "src": "16468:7:2"
                      }
                    ],
                    "id": 823,
                    "name": "VariableDeclaration",
                    "src": "16468:23:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bitcoinHeaders",
                      "scope": 842,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 824,
                        "name": "ElementaryTypeName",
                        "src": "16501:5:2"
                      }
                    ],
                    "id": 825,
                    "name": "VariableDeclaration",
                    "src": "16501:28:2"
                  }
                ],
                "id": 826,
                "name": "ParameterList",
                "src": "16258:277:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 827,
                "name": "ParameterList",
                "src": "16543:0:2"
              },
              {
                "children": [
                  {
                    "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_bytes4",
                                  "typeString": "bytes4"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "provideBTCFundingProof",
                              "referencedDeclaration": 1756,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes4,bytes memory,bytes memory,bytes4,uint8,bytes memory,uint256,bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 828,
                                "name": "Identifier",
                                "src": "16610:4:2"
                              }
                            ],
                            "id": 830,
                            "name": "MemberAccess",
                            "src": "16610:27:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 811,
                              "type": "bytes4",
                              "value": "_txVersion"
                            },
                            "id": 831,
                            "name": "Identifier",
                            "src": "16651:10:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 813,
                              "type": "bytes memory",
                              "value": "_txInputVector"
                            },
                            "id": 832,
                            "name": "Identifier",
                            "src": "16675:14:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 815,
                              "type": "bytes memory",
                              "value": "_txOutputVector"
                            },
                            "id": 833,
                            "name": "Identifier",
                            "src": "16703:15:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 817,
                              "type": "bytes4",
                              "value": "_txLocktime"
                            },
                            "id": 834,
                            "name": "Identifier",
                            "src": "16732:11:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 819,
                              "type": "uint8",
                              "value": "_fundingOutputIndex"
                            },
                            "id": 835,
                            "name": "Identifier",
                            "src": "16757:19:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 821,
                              "type": "bytes memory",
                              "value": "_merkleProof"
                            },
                            "id": 836,
                            "name": "Identifier",
                            "src": "16790:12:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 823,
                              "type": "uint256",
                              "value": "_txIndexInBlock"
                            },
                            "id": 837,
                            "name": "Identifier",
                            "src": "16816:15:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 825,
                              "type": "bytes memory",
                              "value": "_bitcoinHeaders"
                            },
                            "id": 838,
                            "name": "Identifier",
                            "src": "16845:15:2"
                          }
                        ],
                        "id": 839,
                        "name": "FunctionCall",
                        "src": "16610:260:2"
                      }
                    ],
                    "id": 840,
                    "name": "ExpressionStatement",
                    "src": "16610:260:2"
                  }
                ],
                "id": 841,
                "name": "Block",
                "src": "16543:334:2"
              }
            ],
            "id": 842,
            "name": "FunctionDefinition",
            "src": "16227:650:2"
          },
          {
            "attributes": {
              "documentation": "@notice Notify the contract that the signers are undercollateralized.\n @dev This call will revert if the signers are not in fact\n      undercollateralized according to the price feed. After\n      TBTCConstants.COURTESY_CALL_DURATION, courtesy call times out and\n      regular abort liquidation occurs; see\n      `notifyCourtesyTimedOut`.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "notifyCourtesyCall",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 843,
                "name": "ParameterList",
                "src": "17377:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 844,
                "name": "ParameterList",
                "src": "17389:0:2"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "notifyCourtesyCall",
                              "referencedDeclaration": 2236,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 845,
                                "name": "Identifier",
                                "src": "17399:4:2"
                              }
                            ],
                            "id": 847,
                            "name": "MemberAccess",
                            "src": "17399:23:2"
                          }
                        ],
                        "id": 848,
                        "name": "FunctionCall",
                        "src": "17399:25:2"
                      }
                    ],
                    "id": 849,
                    "name": "ExpressionStatement",
                    "src": "17399:25:2"
                  }
                ],
                "id": 850,
                "name": "Block",
                "src": "17389:42:2"
              }
            ],
            "id": 851,
            "name": "FunctionDefinition",
            "src": "17350:81:2"
          },
          {
            "attributes": {
              "documentation": "@notice Notify the contract that the signers' bond value has recovered\n         enough to be considered sufficiently collateralized.\n @dev This call will revert if collateral is still below the\n      undercollateralized threshold according to the price feed.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "exitCourtesyCall",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 852,
                "name": "ParameterList",
                "src": "17750:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 853,
                "name": "ParameterList",
                "src": "17762:0:2"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "exitCourtesyCall",
                              "referencedDeclaration": 2269,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 854,
                                "name": "Identifier",
                                "src": "17772:4:2"
                              }
                            ],
                            "id": 856,
                            "name": "MemberAccess",
                            "src": "17772:21:2"
                          }
                        ],
                        "id": 857,
                        "name": "FunctionCall",
                        "src": "17772:23:2"
                      }
                    ],
                    "id": 858,
                    "name": "ExpressionStatement",
                    "src": "17772:23:2"
                  }
                ],
                "id": 859,
                "name": "Block",
                "src": "17762:40:2"
              }
            ],
            "id": 860,
            "name": "FunctionDefinition",
            "src": "17725:77:2"
          },
          {
            "attributes": {
              "documentation": "@notice Notify the contract that the courtesy period has expired and the\n         deposit should move into liquidation.\n @dev This call will revert if the courtesy call period has not in fact\n      expired or is not in the courtesy call state. Courtesy call\n      expiration is treated as an abort, and is handled by seizing signer\n      bonds and putting them up for auction for the lot size amount in\n      TBTC (see `purchaseSignerBondsAtAuction`). Emits a\n      LiquidationStarted event. The caller is captured as the liquidation\n      initiator, and is eligible for 50% of any bond left after the\n      auction is completed.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "notifyCourtesyCallExpired",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 861,
                "name": "ParameterList",
                "src": "18543:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 862,
                "name": "ParameterList",
                "src": "18555:0:2"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "notifyCourtesyCallExpired",
                              "referencedDeclaration": 2329,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 863,
                                "name": "Identifier",
                                "src": "18565:4:2"
                              }
                            ],
                            "id": 865,
                            "name": "MemberAccess",
                            "src": "18565:30:2"
                          }
                        ],
                        "id": 866,
                        "name": "FunctionCall",
                        "src": "18565:32:2"
                      }
                    ],
                    "id": 867,
                    "name": "ExpressionStatement",
                    "src": "18565:32:2"
                  }
                ],
                "id": 868,
                "name": "Block",
                "src": "18555:49:2"
              }
            ],
            "id": 869,
            "name": "FunctionDefinition",
            "src": "18509:95:2"
          },
          {
            "attributes": {
              "documentation": "@notice Notify the contract that the signers are undercollateralized.\n @dev Calls out to the system for oracle info.\n @dev This call will revert if the signers are not in fact severely\n      undercollateralized according to the price feed. Severe\n      undercollateralization is treated as an abort, and is handled by\n      seizing signer bonds and putting them up for auction in exchange\n      for the lot size amount in TBTC (see\n      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.\n      The caller is captured as the liquidation initiator, and is\n      eligible for 50% of any bond left after the auction is completed.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "notifyUndercollateralizedLiquidation",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 870,
                "name": "ParameterList",
                "src": "19369:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 871,
                "name": "ParameterList",
                "src": "19381:0:2"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "notifyUndercollateralizedLiquidation",
                              "referencedDeclaration": 2297,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 872,
                                "name": "Identifier",
                                "src": "19391:4:2"
                              }
                            ],
                            "id": 874,
                            "name": "MemberAccess",
                            "src": "19391:41:2"
                          }
                        ],
                        "id": 875,
                        "name": "FunctionCall",
                        "src": "19391:43:2"
                      }
                    ],
                    "id": 876,
                    "name": "ExpressionStatement",
                    "src": "19391:43:2"
                  }
                ],
                "id": 877,
                "name": "Block",
                "src": "19381:60:2"
              }
            ],
            "id": 878,
            "name": "FunctionDefinition",
            "src": "19324:117:2"
          },
          {
            "attributes": {
              "documentation": "@notice Anyone can provide a signature corresponding to the signers'\n         public key that was not requested to prove fraud. A redemption\n         request and a redemption fee increase are the only ways to\n         request a signature from the signers.\n @dev This call will revert if the underlying keep cannot verify that\n      there was fraud. Fraud is handled by seizing signer bonds and\n      putting them up for auction in exchange for the lot size amount in\n      TBTC (see `purchaseSignerBondsAtAuction`). Emits a\n      LiquidationStarted event. The caller is captured as the liquidation\n      initiator, and is eligible for any bond left after the auction is\n      completed.\n @param  _v Signature recovery value.\n @param  _r Signature R value.\n @param  _s Signature S value.\n @param _signedDigest The digest signed by the signature (v,r,s) tuple.\n @param _preimage The sha256 preimage of the digest.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "provideECDSAFraudProof",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_v",
                      "scope": 902,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 879,
                        "name": "ElementaryTypeName",
                        "src": "20513:5:2"
                      }
                    ],
                    "id": 880,
                    "name": "VariableDeclaration",
                    "src": "20513:8:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_r",
                      "scope": 902,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 881,
                        "name": "ElementaryTypeName",
                        "src": "20531:7:2"
                      }
                    ],
                    "id": 882,
                    "name": "VariableDeclaration",
                    "src": "20531:10:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_s",
                      "scope": 902,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 883,
                        "name": "ElementaryTypeName",
                        "src": "20551:7:2"
                      }
                    ],
                    "id": 884,
                    "name": "VariableDeclaration",
                    "src": "20551:10:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_signedDigest",
                      "scope": 902,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 885,
                        "name": "ElementaryTypeName",
                        "src": "20571:7:2"
                      }
                    ],
                    "id": 886,
                    "name": "VariableDeclaration",
                    "src": "20571:21:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_preimage",
                      "scope": 902,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 887,
                        "name": "ElementaryTypeName",
                        "src": "20602:5:2"
                      }
                    ],
                    "id": 888,
                    "name": "VariableDeclaration",
                    "src": "20602:22:2"
                  }
                ],
                "id": 889,
                "name": "ParameterList",
                "src": "20503:127:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 890,
                "name": "ParameterList",
                "src": "20638:0:2"
              },
              {
                "children": [
                  {
                    "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_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "provideECDSAFraudProof",
                              "referencedDeclaration": 2011,
                              "type": "function (struct DepositUtils.Deposit storage pointer,uint8,bytes32,bytes32,bytes32,bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 891,
                                "name": "Identifier",
                                "src": "20705:4:2"
                              }
                            ],
                            "id": 893,
                            "name": "MemberAccess",
                            "src": "20705:27:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 880,
                              "type": "uint8",
                              "value": "_v"
                            },
                            "id": 894,
                            "name": "Identifier",
                            "src": "20733:2:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 882,
                              "type": "bytes32",
                              "value": "_r"
                            },
                            "id": 895,
                            "name": "Identifier",
                            "src": "20737:2:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 884,
                              "type": "bytes32",
                              "value": "_s"
                            },
                            "id": 896,
                            "name": "Identifier",
                            "src": "20741:2:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 886,
                              "type": "bytes32",
                              "value": "_signedDigest"
                            },
                            "id": 897,
                            "name": "Identifier",
                            "src": "20745:13:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 888,
                              "type": "bytes memory",
                              "value": "_preimage"
                            },
                            "id": 898,
                            "name": "Identifier",
                            "src": "20760:9:2"
                          }
                        ],
                        "id": 899,
                        "name": "FunctionCall",
                        "src": "20705:65:2"
                      }
                    ],
                    "id": 900,
                    "name": "ExpressionStatement",
                    "src": "20705:65:2"
                  }
                ],
                "id": 901,
                "name": "Block",
                "src": "20638:139:2"
              }
            ],
            "id": 902,
            "name": "FunctionDefinition",
            "src": "20472:305:2"
          },
          {
            "attributes": {
              "documentation": "@notice Notify the contract that the signers have failed to produce a\n         signature for a redemption request in the allotted time.\n @dev This is considered an abort, and is punished by seizing signer\n      bonds and putting them up for auction. Emits a LiquidationStarted\n      event and a Liquidated event and sends the full signer bond to the\n      redeemer. Reverts if the deposit is not currently awaiting a\n      signature or if the allotted time has not yet elapsed. The caller\n      is captured as the liquidation initiator, and is eligible for 50%\n      of any bond left after the auction is completed.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "notifyRedemptionSignatureTimedOut",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 903,
                "name": "ParameterList",
                "src": "21505:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 904,
                "name": "ParameterList",
                "src": "21517:0:2"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "notifyRedemptionSignatureTimedOut",
                              "referencedDeclaration": 3235,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 905,
                                "name": "Identifier",
                                "src": "21527:4:2"
                              }
                            ],
                            "id": 907,
                            "name": "MemberAccess",
                            "src": "21527:38:2"
                          }
                        ],
                        "id": 908,
                        "name": "FunctionCall",
                        "src": "21527:40:2"
                      }
                    ],
                    "id": 909,
                    "name": "ExpressionStatement",
                    "src": "21527:40:2"
                  }
                ],
                "id": 910,
                "name": "Block",
                "src": "21517:57:2"
              }
            ],
            "id": 911,
            "name": "FunctionDefinition",
            "src": "21463:111:2"
          },
          {
            "attributes": {
              "documentation": "@notice Notify the contract that the deposit has failed to receive a\n         redemption proof in the allotted time.\n @dev This call will revert if the deposit is not currently awaiting a\n      signature or if the allotted time has not yet elapsed. This is\n      considered an abort, and is punished by seizing signer bonds and\n      putting them up for auction for the lot size amount in TBTC (see\n      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.\n      The caller is captured as the liquidation initiator, and\n      is eligible for 50% of any bond left after the auction is\n     completed.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "notifyRedemptionProofTimedOut",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 912,
                "name": "ParameterList",
                "src": "22304:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 913,
                "name": "ParameterList",
                "src": "22316:0:2"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "notifyRedemptionProofTimedOut",
                              "referencedDeclaration": 3268,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 914,
                                "name": "Identifier",
                                "src": "22326:4:2"
                              }
                            ],
                            "id": 916,
                            "name": "MemberAccess",
                            "src": "22326:34:2"
                          }
                        ],
                        "id": 917,
                        "name": "FunctionCall",
                        "src": "22326:36:2"
                      }
                    ],
                    "id": 918,
                    "name": "ExpressionStatement",
                    "src": "22326:36:2"
                  }
                ],
                "id": 919,
                "name": "Block",
                "src": "22316:53:2"
              }
            ],
            "id": 920,
            "name": "FunctionDefinition",
            "src": "22266:103:2"
          },
          {
            "attributes": {
              "documentation": "@notice Closes an auction and purchases the signer bonds by transferring\n         the lot size in TBTC to the redeemer, if there is one, or to the\n         TDT holder if not. Any bond amount that is not currently up for\n         auction is either made available for the liquidation initiator\n         to withdraw (for fraud) or split 50-50 between the initiator and\n         the signers (for abort or collateralization issues).\n @dev The amount of ETH given for the transferred TBTC can be read using\n      the `auctionValue` function; note, however, that the function's\n      value is only static during the specific block it is queried, as it\n      varies by block timestamp.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "purchaseSignerBondsAtAuction",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 921,
                "name": "ParameterList",
                "src": "23161:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 922,
                "name": "ParameterList",
                "src": "23173:0:2"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "purchaseSignerBondsAtAuction",
                              "referencedDeclaration": 2196,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 923,
                                "name": "Identifier",
                                "src": "23183:4:2"
                              }
                            ],
                            "id": 925,
                            "name": "MemberAccess",
                            "src": "23183:33:2"
                          }
                        ],
                        "id": 926,
                        "name": "FunctionCall",
                        "src": "23183:35:2"
                      }
                    ],
                    "id": 927,
                    "name": "ExpressionStatement",
                    "src": "23183:35:2"
                  }
                ],
                "id": 928,
                "name": "Block",
                "src": "23173:52:2"
              }
            ],
            "id": 929,
            "name": "FunctionDefinition",
            "src": "23124:101:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get TBTC amount required for redemption by a specified\n         _redeemer.\n @dev This call will revert if redemption is not possible by _redeemer.\n @param _redeemer The deposit redeemer whose TBTC requirement is being\n        requested.\n @return The amount in TBTC needed by the `_redeemer` to redeem the\n         deposit.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getRedemptionTbtcRequirement",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_redeemer",
                      "scope": 947,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 930,
                        "name": "ElementaryTypeName",
                        "src": "23736:7:2"
                      }
                    ],
                    "id": 931,
                    "name": "VariableDeclaration",
                    "src": "23736:17:2"
                  }
                ],
                "id": 932,
                "name": "ParameterList",
                "src": "23735:19:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 947,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 933,
                        "name": "ElementaryTypeName",
                        "src": "23802:7:2"
                      }
                    ],
                    "id": 934,
                    "name": "VariableDeclaration",
                    "src": "23802:7:2"
                  }
                ],
                "id": 935,
                "name": "ParameterList",
                "src": "23801:9:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        937,
                        null,
                        null
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "tbtcPayment",
                          "scope": 946,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 936,
                            "name": "ElementaryTypeName",
                            "src": "23826:7:2"
                          }
                        ],
                        "id": 937,
                        "name": "VariableDeclaration",
                        "src": "23826:19:2"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple(uint256,uint256,uint256)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "calculateRedemptionTbtcAmounts",
                              "referencedDeclaration": 5032,
                              "type": "function (struct DepositUtils.Deposit storage pointer,address,bool) view returns (uint256,uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 938,
                                "name": "Identifier",
                                "src": "23865:4:2"
                              }
                            ],
                            "id": 939,
                            "name": "MemberAccess",
                            "src": "23865:35:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 931,
                              "type": "address",
                              "value": "_redeemer"
                            },
                            "id": 940,
                            "name": "Identifier",
                            "src": "23901:9:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "66616c7365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "false"
                            },
                            "id": 941,
                            "name": "Literal",
                            "src": "23912:5:2"
                          }
                        ],
                        "id": 942,
                        "name": "FunctionCall",
                        "src": "23865:53:2"
                      }
                    ],
                    "id": 943,
                    "name": "VariableDeclarationStatement",
                    "src": "23825:93:2"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 935
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 937,
                          "type": "uint256",
                          "value": "tbtcPayment"
                        },
                        "id": 944,
                        "name": "Identifier",
                        "src": "23935:11:2"
                      }
                    ],
                    "id": 945,
                    "name": "Return",
                    "src": "23928:18:2"
                  }
                ],
                "id": 946,
                "name": "Block",
                "src": "23815:138:2"
              }
            ],
            "id": 947,
            "name": "FunctionDefinition",
            "src": "23698:255:2"
          },
          {
            "attributes": {
              "documentation": "@notice Get TBTC amount required for redemption assuming _redeemer\n         is this deposit's owner (TDT holder).\n @param _redeemer The assumed owner of the deposit's TDT .\n @return The amount in TBTC needed to redeem the deposit.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getOwnerRedemptionTbtcRequirement",
              "scope": 1134,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_redeemer",
                      "scope": 965,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 948,
                        "name": "ElementaryTypeName",
                        "src": "24262:7:2"
                      }
                    ],
                    "id": 949,
                    "name": "VariableDeclaration",
                    "src": "24262:17:2"
                  }
                ],
                "id": 950,
                "name": "ParameterList",
                "src": "24261:19:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 965,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 951,
                        "name": "ElementaryTypeName",
                        "src": "24328:7:2"
                      }
                    ],
                    "id": 952,
                    "name": "VariableDeclaration",
                    "src": "24328:7:2"
                  }
                ],
                "id": 953,
                "name": "ParameterList",
                "src": "24327:9:2"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        955,
                        null,
                        null
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "tbtcPayment",
                          "scope": 964,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 954,
                            "name": "ElementaryTypeName",
                            "src": "24352:7:2"
                          }
                        ],
                        "id": 955,
                        "name": "VariableDeclaration",
                        "src": "24352:19:2"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple(uint256,uint256,uint256)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "calculateRedemptionTbtcAmounts",
                              "referencedDeclaration": 5032,
                              "type": "function (struct DepositUtils.Deposit storage pointer,address,bool) view returns (uint256,uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 956,
                                "name": "Identifier",
                                "src": "24391:4:2"
                              }
                            ],
                            "id": 957,
                            "name": "MemberAccess",
                            "src": "24391:35:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 949,
                              "type": "address",
                              "value": "_redeemer"
                            },
                            "id": 958,
                            "name": "Identifier",
                            "src": "24427:9:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "74727565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "true"
                            },
                            "id": 959,
                            "name": "Literal",
                            "src": "24438:4:2"
                          }
                        ],
                        "id": 960,
                        "name": "FunctionCall",
                        "src": "24391:52:2"
                      }
                    ],
                    "id": 961,
                    "name": "VariableDeclarationStatement",
                    "src": "24351:92:2"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 953
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 955,
                          "type": "uint256",
                          "value": "tbtcPayment"
                        },
                        "id": 962,
                        "name": "Identifier",
                        "src": "24460:11:2"
                      }
                    ],
                    "id": 963,
                    "name": "Return",
                    "src": "24453:18:2"
                  }
                ],
                "id": 964,
                "name": "Block",
                "src": "24341:137:2"
              }
            ],
            "id": 965,
            "name": "FunctionDefinition",
            "src": "24219:259:2"
          },
          {
            "attributes": {
              "documentation": "@notice Requests redemption of this deposit, meaning the transmission,\n         by the signers, of the deposit's UTXO to the specified Bitocin\n         output script. Requires approving the deposit to spend the\n         amount of TBTC needed to redeem.\n @dev The amount of TBTC needed to redeem can be looked up using the\n      `getRedemptionTbtcRequirement` or `getOwnerRedemptionTbtcRequirement`\n      functions.\n @param  _outputValueBytes The 8-byte little-endian output size. The\n         difference between this value and the lot size of the deposit\n         will be paid as a fee to the Bitcoin miners when the signed\n         transaction is broadcast.\n @param  _redeemerOutputScript The redeemer's length-prefixed output\n         script.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "requestRedemption",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outputValueBytes",
                      "scope": 980,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 966,
                        "name": "ElementaryTypeName",
                        "src": "25357:6:2"
                      }
                    ],
                    "id": 967,
                    "name": "VariableDeclaration",
                    "src": "25357:24:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_redeemerOutputScript",
                      "scope": 980,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 968,
                        "name": "ElementaryTypeName",
                        "src": "25391:5:2"
                      }
                    ],
                    "id": 969,
                    "name": "VariableDeclaration",
                    "src": "25391:34:2"
                  }
                ],
                "id": 970,
                "name": "ParameterList",
                "src": "25347:84:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 971,
                "name": "ParameterList",
                "src": "25439:0:2"
              },
              {
                "children": [
                  {
                    "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_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "requestRedemption",
                              "referencedDeclaration": 2755,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes8,bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 972,
                                "name": "Identifier",
                                "src": "25506:4:2"
                              }
                            ],
                            "id": 974,
                            "name": "MemberAccess",
                            "src": "25506:22:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 967,
                              "type": "bytes8",
                              "value": "_outputValueBytes"
                            },
                            "id": 975,
                            "name": "Identifier",
                            "src": "25529:17:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 969,
                              "type": "bytes memory",
                              "value": "_redeemerOutputScript"
                            },
                            "id": 976,
                            "name": "Identifier",
                            "src": "25548:21:2"
                          }
                        ],
                        "id": 977,
                        "name": "FunctionCall",
                        "src": "25506:64:2"
                      }
                    ],
                    "id": 978,
                    "name": "ExpressionStatement",
                    "src": "25506:64:2"
                  }
                ],
                "id": 979,
                "name": "Block",
                "src": "25439:138:2"
              }
            ],
            "id": 980,
            "name": "FunctionDefinition",
            "src": "25321:256:2"
          },
          {
            "attributes": {
              "documentation": "@notice Anyone may provide a withdrawal signature if it was requested.\n @dev The signers will be penalized if this function is not called\n      correctly within `TBTCConstants.REDEMPTION_SIGNATURE_TIMEOUT`\n      seconds of a redemption request or fee increase being received.\n @param _v Signature recovery value.\n @param _r Signature R value.\n @param _s Signature S value. Should be in the low half of secp256k1\n        curve's order.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "provideRedemptionSignature",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_v",
                      "scope": 998,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 981,
                        "name": "ElementaryTypeName",
                        "src": "26120:5:2"
                      }
                    ],
                    "id": 982,
                    "name": "VariableDeclaration",
                    "src": "26120:8:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_r",
                      "scope": 998,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 983,
                        "name": "ElementaryTypeName",
                        "src": "26138:7:2"
                      }
                    ],
                    "id": 984,
                    "name": "VariableDeclaration",
                    "src": "26138:10:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_s",
                      "scope": 998,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 985,
                        "name": "ElementaryTypeName",
                        "src": "26158:7:2"
                      }
                    ],
                    "id": 986,
                    "name": "VariableDeclaration",
                    "src": "26158:10:2"
                  }
                ],
                "id": 987,
                "name": "ParameterList",
                "src": "26110:64:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 988,
                "name": "ParameterList",
                "src": "26184:0:2"
              },
              {
                "children": [
                  {
                    "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_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "provideRedemptionSignature",
                              "referencedDeclaration": 2811,
                              "type": "function (struct DepositUtils.Deposit storage pointer,uint8,bytes32,bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 989,
                                "name": "Identifier",
                                "src": "26194:4:2"
                              }
                            ],
                            "id": 991,
                            "name": "MemberAccess",
                            "src": "26194:31:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 982,
                              "type": "uint8",
                              "value": "_v"
                            },
                            "id": 992,
                            "name": "Identifier",
                            "src": "26226:2:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 984,
                              "type": "bytes32",
                              "value": "_r"
                            },
                            "id": 993,
                            "name": "Identifier",
                            "src": "26230:2:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 986,
                              "type": "bytes32",
                              "value": "_s"
                            },
                            "id": 994,
                            "name": "Identifier",
                            "src": "26234:2:2"
                          }
                        ],
                        "id": 995,
                        "name": "FunctionCall",
                        "src": "26194:43:2"
                      }
                    ],
                    "id": 996,
                    "name": "ExpressionStatement",
                    "src": "26194:43:2"
                  }
                ],
                "id": 997,
                "name": "Block",
                "src": "26184:60:2"
              }
            ],
            "id": 998,
            "name": "FunctionDefinition",
            "src": "26075:169:2"
          },
          {
            "attributes": {
              "documentation": "@notice Anyone may request a signature for a transaction with an\n         increased Bitcoin transaction fee.\n @dev This call will revert if the fee is already at its maximum, or if\n      the new requested fee is not a multiple of the initial requested\n      fee. Transaction fees can only be bumped by the amount of the\n      initial requested fee. Calling this sends the deposit back to\n      the `AWAITING_WITHDRAWAL_SIGNATURE` state and requires the signers\n      to `provideRedemptionSignature` for the new output value in a\n      timely fashion.\n @param _previousOutputValueBytes The previous output's value.\n @param _newOutputValueBytes The new output's value.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "increaseRedemptionFee",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_previousOutputValueBytes",
                      "scope": 1013,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 999,
                        "name": "ElementaryTypeName",
                        "src": "27035:6:2"
                      }
                    ],
                    "id": 1000,
                    "name": "VariableDeclaration",
                    "src": "27035:32:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_newOutputValueBytes",
                      "scope": 1013,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 1001,
                        "name": "ElementaryTypeName",
                        "src": "27077:6:2"
                      }
                    ],
                    "id": 1002,
                    "name": "VariableDeclaration",
                    "src": "27077:27:2"
                  }
                ],
                "id": 1003,
                "name": "ParameterList",
                "src": "27025:85:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1004,
                "name": "ParameterList",
                "src": "27120:0:2"
              },
              {
                "children": [
                  {
                    "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_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "increaseRedemptionFee",
                              "referencedDeclaration": 2930,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes8,bytes8)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 1005,
                                "name": "Identifier",
                                "src": "27130:4:2"
                              }
                            ],
                            "id": 1007,
                            "name": "MemberAccess",
                            "src": "27130:26:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1000,
                              "type": "bytes8",
                              "value": "_previousOutputValueBytes"
                            },
                            "id": 1008,
                            "name": "Identifier",
                            "src": "27170:25:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1002,
                              "type": "bytes8",
                              "value": "_newOutputValueBytes"
                            },
                            "id": 1009,
                            "name": "Identifier",
                            "src": "27209:20:2"
                          }
                        ],
                        "id": 1010,
                        "name": "FunctionCall",
                        "src": "27130:109:2"
                      }
                    ],
                    "id": 1011,
                    "name": "ExpressionStatement",
                    "src": "27130:109:2"
                  }
                ],
                "id": 1012,
                "name": "Block",
                "src": "27120:126:2"
              }
            ],
            "id": 1013,
            "name": "FunctionDefinition",
            "src": "26995:251:2"
          },
          {
            "attributes": {
              "documentation": "@notice Anyone may submit a redemption proof to the deposit showing that\n         a transaction was submitted and sufficiently confirmed on the\n         Bitcoin chain transferring the deposit lot size's amount of BTC\n         from the signer-controlled private key corresponding to this\n         deposit to the requested redemption output script. This will\n         move the deposit into a redeemed state.\n @dev Takes a pre-parsed transaction and calculates values needed to\n      verify funding. Signers can have their bonds seized if this is not\n      called within `TBTCConstants.REDEMPTION_PROOF_TIMEOUT` seconds of\n      a redemption signature being provided.\n @param _txVersion Transaction version number (4-byte little-endian).\n @param _txInputVector All transaction inputs prepended by the number of\n        inputs encoded as a VarInt, max 0xFC(252) inputs.\n @param _txOutputVector All transaction outputs prepended by the number\n         of outputs encoded as a VarInt, max 0xFC(252) outputs.\n @param _txLocktime Final 4 bytes of the transaction.\n @param _merkleProof The merkle proof of transaction inclusion in a\n        block.\n @param _txIndexInBlock Transaction index in the block (0-indexed).\n @param _bitcoinHeaders Single bytestring of 80-byte bitcoin headers,\n        lowest height first.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "provideRedemptionProof",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txVersion",
                      "scope": 1043,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 1014,
                        "name": "ElementaryTypeName",
                        "src": "28747:6:2"
                      }
                    ],
                    "id": 1015,
                    "name": "VariableDeclaration",
                    "src": "28747:17:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txInputVector",
                      "scope": 1043,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1016,
                        "name": "ElementaryTypeName",
                        "src": "28774:5:2"
                      }
                    ],
                    "id": 1017,
                    "name": "VariableDeclaration",
                    "src": "28774:27:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txOutputVector",
                      "scope": 1043,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1018,
                        "name": "ElementaryTypeName",
                        "src": "28811:5:2"
                      }
                    ],
                    "id": 1019,
                    "name": "VariableDeclaration",
                    "src": "28811:28:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txLocktime",
                      "scope": 1043,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 1020,
                        "name": "ElementaryTypeName",
                        "src": "28849:6:2"
                      }
                    ],
                    "id": 1021,
                    "name": "VariableDeclaration",
                    "src": "28849:18:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_merkleProof",
                      "scope": 1043,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1022,
                        "name": "ElementaryTypeName",
                        "src": "28877:5:2"
                      }
                    ],
                    "id": 1023,
                    "name": "VariableDeclaration",
                    "src": "28877:25:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txIndexInBlock",
                      "scope": 1043,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1024,
                        "name": "ElementaryTypeName",
                        "src": "28912:7:2"
                      }
                    ],
                    "id": 1025,
                    "name": "VariableDeclaration",
                    "src": "28912:23:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bitcoinHeaders",
                      "scope": 1043,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1026,
                        "name": "ElementaryTypeName",
                        "src": "28945:5:2"
                      }
                    ],
                    "id": 1027,
                    "name": "VariableDeclaration",
                    "src": "28945:28:2"
                  }
                ],
                "id": 1028,
                "name": "ParameterList",
                "src": "28737:242:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1029,
                "name": "ParameterList",
                "src": "28987:0:2"
              },
              {
                "children": [
                  {
                    "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_bytes4",
                                  "typeString": "bytes4"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "provideRedemptionProof",
                              "referencedDeclaration": 3100,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes4,bytes memory,bytes memory,bytes4,bytes memory,uint256,bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 1030,
                                "name": "Identifier",
                                "src": "29054:4:2"
                              }
                            ],
                            "id": 1032,
                            "name": "MemberAccess",
                            "src": "29054:27:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1015,
                              "type": "bytes4",
                              "value": "_txVersion"
                            },
                            "id": 1033,
                            "name": "Identifier",
                            "src": "29095:10:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1017,
                              "type": "bytes memory",
                              "value": "_txInputVector"
                            },
                            "id": 1034,
                            "name": "Identifier",
                            "src": "29119:14:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1019,
                              "type": "bytes memory",
                              "value": "_txOutputVector"
                            },
                            "id": 1035,
                            "name": "Identifier",
                            "src": "29147:15:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1021,
                              "type": "bytes4",
                              "value": "_txLocktime"
                            },
                            "id": 1036,
                            "name": "Identifier",
                            "src": "29176:11:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1023,
                              "type": "bytes memory",
                              "value": "_merkleProof"
                            },
                            "id": 1037,
                            "name": "Identifier",
                            "src": "29201:12:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1025,
                              "type": "uint256",
                              "value": "_txIndexInBlock"
                            },
                            "id": 1038,
                            "name": "Identifier",
                            "src": "29227:15:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1027,
                              "type": "bytes memory",
                              "value": "_bitcoinHeaders"
                            },
                            "id": 1039,
                            "name": "Identifier",
                            "src": "29256:15:2"
                          }
                        ],
                        "id": 1040,
                        "name": "FunctionCall",
                        "src": "29054:227:2"
                      }
                    ],
                    "id": 1041,
                    "name": "ExpressionStatement",
                    "src": "29054:227:2"
                  }
                ],
                "id": 1042,
                "name": "Block",
                "src": "28987:301:2"
              }
            ],
            "id": 1043,
            "name": "FunctionDefinition",
            "src": "28706:582:2"
          },
          {
            "attributes": {
              "documentation": "@notice This function can only be called by the deposit factory; use\n         `DepositFactory.createDeposit` to create a new deposit.\n @dev Initializes a new deposit clone with the base state for the\n      deposit.\n @param _tbtcSystem `TBTCSystem` contract. More info in `TBTCSystem`.\n @param _tbtcToken `TBTCToken` contract. More info in TBTCToken`.\n @param _tbtcDepositToken `TBTCDepositToken` (TDT) contract. More info in\n        `TBTCDepositToken`.\n @param _feeRebateToken `FeeRebateToken` (FRT) contract. More info in\n        `FeeRebateToken`.\n @param _vendingMachineAddress `VendingMachine` address. More info in\n        `VendingMachine`.\n @param _lotSizeSatoshis The minimum amount of satoshi the funder is\n                         required to send. This is also the amount of\n                         TBTC the TDT holder will be eligible to mint:\n                         (10**7 satoshi == 0.1 BTC == 0.1 TBTC).",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "initializeDeposit",
              "scope": 1134,
              "stateMutability": "payable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_tbtcSystem",
                      "scope": 1097,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ITBTCSystem",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "ITBTCSystem",
                          "referencedDeclaration": 5511,
                          "type": "contract ITBTCSystem"
                        },
                        "id": 1044,
                        "name": "UserDefinedTypeName",
                        "src": "30449:11:2"
                      }
                    ],
                    "id": 1045,
                    "name": "VariableDeclaration",
                    "src": "30449:23:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_tbtcToken",
                      "scope": 1097,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract TBTCToken",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "TBTCToken",
                          "referencedDeclaration": 8561,
                          "type": "contract TBTCToken"
                        },
                        "id": 1046,
                        "name": "UserDefinedTypeName",
                        "src": "30482:9:2"
                      }
                    ],
                    "id": 1047,
                    "name": "VariableDeclaration",
                    "src": "30482:20:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_tbtcDepositToken",
                      "scope": 1097,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IERC721",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IERC721",
                          "referencedDeclaration": 18287,
                          "type": "contract IERC721"
                        },
                        "id": 1048,
                        "name": "UserDefinedTypeName",
                        "src": "30512:7:2"
                      }
                    ],
                    "id": 1049,
                    "name": "VariableDeclaration",
                    "src": "30512:25:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_feeRebateToken",
                      "scope": 1097,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract FeeRebateToken",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "FeeRebateToken",
                          "referencedDeclaration": 6300,
                          "type": "contract FeeRebateToken"
                        },
                        "id": 1050,
                        "name": "UserDefinedTypeName",
                        "src": "30547:14:2"
                      }
                    ],
                    "id": 1051,
                    "name": "VariableDeclaration",
                    "src": "30547:30:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_vendingMachineAddress",
                      "scope": 1097,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1052,
                        "name": "ElementaryTypeName",
                        "src": "30587:7:2"
                      }
                    ],
                    "id": 1053,
                    "name": "VariableDeclaration",
                    "src": "30587:30:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_lotSizeSatoshis",
                      "scope": 1097,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1054,
                        "name": "ElementaryTypeName",
                        "src": "30627:6:2"
                      }
                    ],
                    "id": 1055,
                    "name": "VariableDeclaration",
                    "src": "30627:23:2"
                  }
                ],
                "id": 1056,
                "name": "ParameterList",
                "src": "30439:217:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1059,
                "name": "ParameterList",
                "src": "30684:0:2"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6250,
                      "type": "modifier ()",
                      "value": "onlyFactory"
                    },
                    "id": 1057,
                    "name": "Identifier",
                    "src": "30672:11:2"
                  }
                ],
                "id": 1058,
                "name": "ModifierInvocation",
                "src": "30672:11:2"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract ITBTCSystem"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "tbtcSystem",
                              "referencedDeclaration": 3828,
                              "type": "contract ITBTCSystem"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 1060,
                                "name": "Identifier",
                                "src": "30694:4:2"
                              }
                            ],
                            "id": 1062,
                            "name": "MemberAccess",
                            "src": "30694:15:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1045,
                              "type": "contract ITBTCSystem",
                              "value": "_tbtcSystem"
                            },
                            "id": 1063,
                            "name": "Identifier",
                            "src": "30712:11:2"
                          }
                        ],
                        "id": 1064,
                        "name": "Assignment",
                        "src": "30694:29:2"
                      }
                    ],
                    "id": 1065,
                    "name": "ExpressionStatement",
                    "src": "30694:29:2"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract TBTCToken"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "tbtcToken",
                              "referencedDeclaration": 3830,
                              "type": "contract TBTCToken"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 1066,
                                "name": "Identifier",
                                "src": "30733:4:2"
                              }
                            ],
                            "id": 1068,
                            "name": "MemberAccess",
                            "src": "30733:14:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1047,
                              "type": "contract TBTCToken",
                              "value": "_tbtcToken"
                            },
                            "id": 1069,
                            "name": "Identifier",
                            "src": "30750:10:2"
                          }
                        ],
                        "id": 1070,
                        "name": "Assignment",
                        "src": "30733:27:2"
                      }
                    ],
                    "id": 1071,
                    "name": "ExpressionStatement",
                    "src": "30733:27:2"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract IERC721"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "tbtcDepositToken",
                              "referencedDeclaration": 3832,
                              "type": "contract IERC721"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 1072,
                                "name": "Identifier",
                                "src": "30770:4:2"
                              }
                            ],
                            "id": 1074,
                            "name": "MemberAccess",
                            "src": "30770:21:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1049,
                              "type": "contract IERC721",
                              "value": "_tbtcDepositToken"
                            },
                            "id": 1075,
                            "name": "Identifier",
                            "src": "30794:17:2"
                          }
                        ],
                        "id": 1076,
                        "name": "Assignment",
                        "src": "30770:41:2"
                      }
                    ],
                    "id": 1077,
                    "name": "ExpressionStatement",
                    "src": "30770:41:2"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract FeeRebateToken"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "feeRebateToken",
                              "referencedDeclaration": 3834,
                              "type": "contract FeeRebateToken"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 1078,
                                "name": "Identifier",
                                "src": "30821:4:2"
                              }
                            ],
                            "id": 1080,
                            "name": "MemberAccess",
                            "src": "30821:19:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1051,
                              "type": "contract FeeRebateToken",
                              "value": "_feeRebateToken"
                            },
                            "id": 1081,
                            "name": "Identifier",
                            "src": "30843:15:2"
                          }
                        ],
                        "id": 1082,
                        "name": "Assignment",
                        "src": "30821:37:2"
                      }
                    ],
                    "id": 1083,
                    "name": "ExpressionStatement",
                    "src": "30821:37:2"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "vendingMachineAddress",
                              "referencedDeclaration": 3836,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 1084,
                                "name": "Identifier",
                                "src": "30868:4:2"
                              }
                            ],
                            "id": 1086,
                            "name": "MemberAccess",
                            "src": "30868:26:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1053,
                              "type": "address",
                              "value": "_vendingMachineAddress"
                            },
                            "id": 1087,
                            "name": "Identifier",
                            "src": "30897:22:2"
                          }
                        ],
                        "id": 1088,
                        "name": "Assignment",
                        "src": "30868:51:2"
                      }
                    ],
                    "id": 1089,
                    "name": "ExpressionStatement",
                    "src": "30868:51:2"
                  },
                  {
                    "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_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "initialize",
                              "referencedDeclaration": 1360,
                              "type": "function (struct DepositUtils.Deposit storage pointer,uint64)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 1090,
                                "name": "Identifier",
                                "src": "30929:4:2"
                              }
                            ],
                            "id": 1092,
                            "name": "MemberAccess",
                            "src": "30929:15:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1055,
                              "type": "uint64",
                              "value": "_lotSizeSatoshis"
                            },
                            "id": 1093,
                            "name": "Identifier",
                            "src": "30945:16:2"
                          }
                        ],
                        "id": 1094,
                        "name": "FunctionCall",
                        "src": "30929:33:2"
                      }
                    ],
                    "id": 1095,
                    "name": "ExpressionStatement",
                    "src": "30929:33:2"
                  }
                ],
                "id": 1096,
                "name": "Block",
                "src": "30684:285:2"
              }
            ],
            "id": 1097,
            "name": "FunctionDefinition",
            "src": "30413:556:2"
          },
          {
            "attributes": {
              "documentation": "@notice This function can only be called by the vending machine.\n @dev Performs the same action as requestRedemption, but transfers\n      ownership of the deposit to the specified _finalRecipient. Used as\n      a utility helper for the vending machine's shortcut\n      TBTC->redemption path.\n @param  _outputValueBytes The 8-byte little-endian output size.\n @param  _redeemerOutputScript The redeemer's length-prefixed output script.\n @param  _finalRecipient     The address to receive the TDT and later be recorded as deposit redeemer.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "transferAndRequestRedemption",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outputValueBytes",
                      "scope": 1124,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 1098,
                        "name": "ElementaryTypeName",
                        "src": "31616:6:2"
                      }
                    ],
                    "id": 1099,
                    "name": "VariableDeclaration",
                    "src": "31616:24:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_redeemerOutputScript",
                      "scope": 1124,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1100,
                        "name": "ElementaryTypeName",
                        "src": "31650:5:2"
                      }
                    ],
                    "id": 1101,
                    "name": "VariableDeclaration",
                    "src": "31650:34:2"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_finalRecipient",
                      "scope": 1124,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address payable",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "payable",
                          "type": "address payable"
                        },
                        "id": 1102,
                        "name": "ElementaryTypeName",
                        "src": "31694:15:2"
                      }
                    ],
                    "id": 1103,
                    "name": "VariableDeclaration",
                    "src": "31694:31:2"
                  }
                ],
                "id": 1104,
                "name": "ParameterList",
                "src": "31606:125:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1105,
                "name": "ParameterList",
                "src": "31739:0:2"
              },
              {
                "children": [
                  {
                    "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_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_ba2cf1e9a608f5597693807474aa5671af3c6ba01dae962d9b4db79596cbd636",
                                  "typeString": "literal_string \"Only the vending machine can call transferAndRequestRedemption\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1106,
                            "name": "Identifier",
                            "src": "31806:7:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "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": 1107,
                                    "name": "Identifier",
                                    "src": "31827:3:2"
                                  }
                                ],
                                "id": 1108,
                                "name": "MemberAccess",
                                "src": "31827:10:2"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "vendingMachineAddress",
                                  "referencedDeclaration": 3836,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 536,
                                      "type": "struct DepositUtils.Deposit storage ref",
                                      "value": "self"
                                    },
                                    "id": 1109,
                                    "name": "Identifier",
                                    "src": "31841:4:2"
                                  }
                                ],
                                "id": 1110,
                                "name": "MemberAccess",
                                "src": "31841:26:2"
                              }
                            ],
                            "id": 1111,
                            "name": "BinaryOperation",
                            "src": "31827:40:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4f6e6c79207468652076656e64696e67206d616368696e652063616e2063616c6c207472616e73666572416e6452657175657374526564656d7074696f6e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Only the vending machine can call transferAndRequestRedemption\"",
                              "value": "Only the vending machine can call transferAndRequestRedemption"
                            },
                            "id": 1112,
                            "name": "Literal",
                            "src": "31881:64:2"
                          }
                        ],
                        "id": 1113,
                        "name": "FunctionCall",
                        "src": "31806:149:2"
                      }
                    ],
                    "id": 1114,
                    "name": "ExpressionStatement",
                    "src": "31806:149:2"
                  },
                  {
                    "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_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "transferAndRequestRedemption",
                              "referencedDeclaration": 2737,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes8,bytes memory,address payable)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 1115,
                                "name": "Identifier",
                                "src": "31965:4:2"
                              }
                            ],
                            "id": 1117,
                            "name": "MemberAccess",
                            "src": "31965:33:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1099,
                              "type": "bytes8",
                              "value": "_outputValueBytes"
                            },
                            "id": 1118,
                            "name": "Identifier",
                            "src": "32012:17:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1101,
                              "type": "bytes memory",
                              "value": "_redeemerOutputScript"
                            },
                            "id": 1119,
                            "name": "Identifier",
                            "src": "32043:21:2"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1103,
                              "type": "address payable",
                              "value": "_finalRecipient"
                            },
                            "id": 1120,
                            "name": "Identifier",
                            "src": "32078:15:2"
                          }
                        ],
                        "id": 1121,
                        "name": "FunctionCall",
                        "src": "31965:138:2"
                      }
                    ],
                    "id": 1122,
                    "name": "ExpressionStatement",
                    "src": "31965:138:2"
                  }
                ],
                "id": 1123,
                "name": "Block",
                "src": "31739:371:2"
              }
            ],
            "id": 1124,
            "name": "FunctionDefinition",
            "src": "31569:541:2"
          },
          {
            "attributes": {
              "documentation": "@notice Withdraw the ETH balance of the deposit allotted to the caller.\n @dev Withdrawals can only happen when a contract is in an end-state.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "withdrawFunds",
              "scope": 1134,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1125,
                "name": "ParameterList",
                "src": "32295:2:2"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1126,
                "name": "ParameterList",
                "src": "32307:0:2"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "withdrawFunds",
                              "referencedDeclaration": 4785,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 1127,
                                "name": "Identifier",
                                "src": "32317:4:2"
                              }
                            ],
                            "id": 1129,
                            "name": "MemberAccess",
                            "src": "32317:18:2"
                          }
                        ],
                        "id": 1130,
                        "name": "FunctionCall",
                        "src": "32317:20:2"
                      }
                    ],
                    "id": 1131,
                    "name": "ExpressionStatement",
                    "src": "32317:20:2"
                  }
                ],
                "id": 1132,
                "name": "Block",
                "src": "32307:37:2"
              }
            ],
            "id": 1133,
            "name": "FunctionDefinition",
            "src": "32273:71:2"
          }
        ],
        "id": 1134,
        "name": "ContractDefinition",
        "src": "1690:30656:2"
      }
    ],
    "id": 1135,
    "name": "SourceUnit",
    "src": "0:32347:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {
        "TBTCConstants": "0xb1cd05843856750cA058965511edfAA9E55cDF02",
        "DepositStates": "0xe79c67D88274e07F0cecB2455DCabe23B304b525",
        "DepositUtils": "0xc9077A33E13422358af7C873188a3E4A3D731A86",
        "DepositLiquidation": "0x3473DaEDf59f4785E9902218E3D40CB1a6343c3A",
        "DepositRedemption": "0x281CC8FEf4Ef010303640D9d9001Aabd407aB6D5",
        "DepositFunding": "0xd7839409b6b48568ef063041D0C8849abfC71CFe"
      },
      "address": "0x1097862CB99aB31628Fe80e7F47F61e9FD03380a",
      "transactionHash": "0x7f9c7e5e84382a962dbac9b5be575d2d95e10cdf087564d8f4c2659e0b46ebfd"
    }
  },
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T12:02:26.782Z",
  "networkType": "ethereum",
  "devdoc": {
    "details": "This contract presents a public API that exposes the following      libraries:  ///       - `DepositFunding`       - `DepositLiquidaton`       - `DepositRedemption`,       - `DepositStates`       - `DepositUtils`       - `OutsourceDepositLogging`       - `TBTCConstants`  ///      Where these libraries require deposit state, this contract's state      variable `self` is used. `self` is a struct of type      `DepositUtils.Deposit` that contains all aspects of the deposit state      itself.",
    "methods": {
      "auctionValue()": {
        "details": "This call will revert if the deposit is not in a state where an      auction is currently in progress.",
        "return": "The value in wei that would be received in exchange for the         deposit's lot size in TBTC if `purchaseSignerBondsAtAuction`         were called at the time this function is called."
      },
      "collateralizationPercentage()": {
        "details": "This value represents the percentage of the backing BTC value the      signers currently must hold as bond.",
        "return": "The current collateralization level for this deposit."
      },
      "constructor": {
        "details": "Deposit should only be _constructed_ once. New deposits are created      using the `DepositFactory.createDeposit` method, and are clones of      the constructed deposit. The factory will set the initial values      for a new clone using `initializeDeposit`."
      },
      "currentState()": {
        "details": "We implement this because contracts don't handle foreign enums      well. See `DepositStates` for more info on states.",
        "return": "The 0-indexed state from the DepositStates enum."
      },
      "exitCourtesyCall()": {
        "details": "This call will revert if collateral is still below the      undercollateralized threshold according to the price feed."
      },
      "fundingInfo()": {
        "details": "This call will revert if the deposit is not in a state where the      funding info should be valid. In particular, before funding proof      is successfully submitted (i.e. in states START,      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), none of      these values are set or valid.",
        "return": "A tuple of (uxtoValueBytes, fundedAt, uxtoOutpoint)."
      },
      "getOwnerRedemptionTbtcRequirement(address)": {
        "params": {
          "_redeemer": "The assumed owner of the deposit's TDT ."
        },
        "return": "The amount in TBTC needed to redeem the deposit."
      },
      "getRedemptionTbtcRequirement(address)": {
        "details": "This call will revert if redemption is not possible by _redeemer.",
        "params": {
          "_redeemer": "The deposit redeemer whose TBTC requirement is being        requested."
        },
        "return": "The amount in TBTC needed by the `_redeemer` to redeem the         deposit."
      },
      "inActive()": {
        "return": "True if state is ACTIVE, false otherwise."
      },
      "increaseRedemptionFee(bytes8,bytes8)": {
        "details": "This call will revert if the fee is already at its maximum, or if      the new requested fee is not a multiple of the initial requested      fee. Transaction fees can only be bumped by the amount of the      initial requested fee. Calling this sends the deposit back to      the `AWAITING_WITHDRAWAL_SIGNATURE` state and requires the signers      to `provideRedemptionSignature` for the new output value in a      timely fashion.",
        "params": {
          "_newOutputValueBytes": "The new output's value.",
          "_previousOutputValueBytes": "The previous output's value."
        }
      },
      "initialCollateralizedPercent()": {
        "details": "This value represents the percentage of the backing BTC value      the signers hold initially. It is set at creation time.",
        "return": "The initial collateralization level for this deposit."
      },
      "initialize(address)": {
        "details": "Since this function is not access-controlled, it should be called      transactionally with contract instantiation. In cases where a      regular contract directly inherits from DepositFactoryAuthority,      that should happen in the constructor. In cases where the inheritor      is binstead used via a clone factory, the same function that      creates a new clone should also trigger initialization."
      },
      "initializeDeposit(address,address,address,address,address,uint64)": {
        "details": "Initializes a new deposit clone with the base state for the      deposit.",
        "params": {
          "_feeRebateToken": "`FeeRebateToken` (FRT) contract. More info in        `FeeRebateToken`.",
          "_lotSizeSatoshis": "The minimum amount of satoshi the funder is                         required to send. This is also the amount of                         TBTC the TDT holder will be eligible to mint:                         (10**7 satoshi == 0.1 BTC == 0.1 TBTC).",
          "_tbtcDepositToken": "`TBTCDepositToken` (TDT) contract. More info in        `TBTCDepositToken`.",
          "_tbtcSystem": "`TBTCSystem` contract. More info in `TBTCSystem`.",
          "_tbtcToken": "`TBTCToken` contract. More info in TBTCToken`.",
          "_vendingMachineAddress": "`VendingMachine` address. More info in        `VendingMachine`."
        }
      },
      "keepAddress()": {
        "details": "The keep contract address is saved on Deposit initialization.",
        "return": "Address of the Keep contract."
      },
      "lotSizeSatoshis()": {
        "return": "uint64 lot size in satoshis."
      },
      "lotSizeTbtc()": {
        "details": "This is the same as lotSizeSatoshis(), but is multiplied to scale      to 18 decimal places.",
        "return": "uint256 lot size in TBTC precision (max 18 decimal places)."
      },
      "notifyCourtesyCall()": {
        "details": "This call will revert if the signers are not in fact      undercollateralized according to the price feed. After      TBTCConstants.COURTESY_CALL_DURATION, courtesy call times out and      regular abort liquidation occurs; see      `notifyCourtesyTimedOut`."
      },
      "notifyCourtesyCallExpired()": {
        "details": "This call will revert if the courtesy call period has not in fact      expired or is not in the courtesy call state. Courtesy call      expiration is treated as an abort, and is handled by seizing signer      bonds and putting them up for auction for the lot size amount in      TBTC (see `purchaseSignerBondsAtAuction`). Emits a      LiquidationStarted event. The caller is captured as the liquidation      initiator, and is eligible for 50% of any bond left after the      auction is completed."
      },
      "notifyFundingTimedOut()": {
        "details": "This is considered a funder fault, and the funder's payment for      opening the deposit is not refunded. Emits a SetupFailed event.      Reverts if the funding timeout has not yet elapsed, or if the      deposit is not currently awaiting funding proof."
      },
      "notifyRedemptionProofTimedOut()": {
        "details": "This call will revert if the deposit is not currently awaiting a      signature or if the allotted time has not yet elapsed. This is      considered an abort, and is punished by seizing signer bonds and      putting them up for auction for the lot size amount in TBTC (see      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.      The caller is captured as the liquidation initiator, and      is eligible for 50% of any bond left after the auction is     completed."
      },
      "notifyRedemptionSignatureTimedOut()": {
        "details": "This is considered an abort, and is punished by seizing signer      bonds and putting them up for auction. Emits a LiquidationStarted      event and a Liquidated event and sends the full signer bond to the      redeemer. Reverts if the deposit is not currently awaiting a      signature or if the allotted time has not yet elapsed. The caller      is captured as the liquidation initiator, and is eligible for 50%      of any bond left after the auction is completed."
      },
      "notifySignerSetupFailed()": {
        "details": "This is considered a signer fault, and the signers' bonds are used      to make the deposit setup fee available for withdrawal by the TDT      holder as a refund. The remainder of the signers' bonds are      returned to the bonding pool and the signers are released from any      further responsibilities. Reverts if the deposit is not awaiting      signer setup or if the signing group formation timeout has not      elapsed."
      },
      "notifyUndercollateralizedLiquidation()": {
        "details": "Calls out to the system for oracle info.This call will revert if the signers are not in fact severely      undercollateralized according to the price feed. Severe      undercollateralization is treated as an abort, and is handled by      seizing signer bonds and putting them up for auction in exchange      for the lot size amount in TBTC (see      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.      The caller is captured as the liquidation initiator, and is      eligible for 50% of any bond left after the auction is completed."
      },
      "provideBTCFundingProof(bytes4,bytes,bytes,bytes4,uint8,bytes,uint256,bytes)": {
        "details": "Takes a pre-parsed transaction and calculates values needed to      verify funding.",
        "params": {
          "_bitcoinHeaders": "Single bytestring of 80-byte bitcoin headers,        lowest height first.",
          "_fundingOutputIndex": "Index of funding output in _txOutputVector        (0-indexed).",
          "_merkleProof": "The merkle proof of transaction inclusion in a        block.",
          "_txIndexInBlock": "Transaction index in the block (0-indexed).",
          "_txInputVector": "All transaction inputs prepended by the number of        inputs encoded as a VarInt, max 0xFC(252) inputs.",
          "_txLocktime": "Final 4 bytes of the transaction.",
          "_txOutputVector": "All transaction outputs prepended by the number         of outputs encoded as a VarInt, max 0xFC(252) outputs.",
          "_txVersion": "Transaction version number (4-byte little-endian)."
        }
      },
      "provideECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)": {
        "details": "This call will revert if the underlying keep cannot verify that      there was fraud. Fraud is handled by seizing signer bonds and      putting them up for auction in exchange for the lot size amount in      TBTC (see `purchaseSignerBondsAtAuction`). Emits a      LiquidationStarted event. The caller is captured as the liquidation      initiator, and is eligible for any bond left after the auction is      completed.",
        "params": {
          "_preimage": "The sha256 preimage of the digest.",
          "_r": "Signature R value.",
          "_s": "Signature S value.",
          "_signedDigest": "The digest signed by the signature (v,r,s) tuple.",
          "_v": "Signature recovery value."
        }
      },
      "provideFundingECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)": {
        "details": "Calls out to the keep to verify if there was fraud.",
        "params": {
          "_preimage": "The sha256 preimage of the digest.",
          "_r": "Signature R value.",
          "_s": "Signature S value.",
          "_signedDigest": "The digest signed by the signature (v,r,s) tuple.",
          "_v": "Signature recovery value."
        }
      },
      "provideRedemptionProof(bytes4,bytes,bytes,bytes4,bytes,uint256,bytes)": {
        "details": "Takes a pre-parsed transaction and calculates values needed to      verify funding. Signers can have their bonds seized if this is not      called within `TBTCConstants.REDEMPTION_PROOF_TIMEOUT` seconds of      a redemption signature being provided.",
        "params": {
          "_bitcoinHeaders": "Single bytestring of 80-byte bitcoin headers,        lowest height first.",
          "_merkleProof": "The merkle proof of transaction inclusion in a        block.",
          "_txIndexInBlock": "Transaction index in the block (0-indexed).",
          "_txInputVector": "All transaction inputs prepended by the number of        inputs encoded as a VarInt, max 0xFC(252) inputs.",
          "_txLocktime": "Final 4 bytes of the transaction.",
          "_txOutputVector": "All transaction outputs prepended by the number         of outputs encoded as a VarInt, max 0xFC(252) outputs.",
          "_txVersion": "Transaction version number (4-byte little-endian)."
        }
      },
      "provideRedemptionSignature(uint8,bytes32,bytes32)": {
        "details": "The signers will be penalized if this function is not called      correctly within `TBTCConstants.REDEMPTION_SIGNATURE_TIMEOUT`      seconds of a redemption request or fee increase being received.",
        "params": {
          "_r": "Signature R value.",
          "_s": "Signature S value. Should be in the low half of secp256k1        curve's order.",
          "_v": "Signature recovery value."
        }
      },
      "purchaseSignerBondsAtAuction()": {
        "details": "The amount of ETH given for the transferred TBTC can be read using      the `auctionValue` function; note, however, that the function's      value is only static during the specific block it is queried, as it      varies by block timestamp."
      },
      "remainingTerm()": {
        "details": "The value accuracy is not guaranteed since block.timestmap can be      lightly manipulated by miners.",
        "return": "The remaining term of the deposit in seconds. 0 if already at         term."
      },
      "requestFunderAbort(bytes)": {
        "details": "This is a self-admitted funder fault, and is only be callable by      the TDT holder. This function emits the FunderAbortRequested event,      but stores no additional state.",
        "params": {
          "_abortOutputScript": "The output script the funder wishes to request        a return of their UTXO to."
        }
      },
      "requestRedemption(bytes8,bytes)": {
        "details": "The amount of TBTC needed to redeem can be looked up using the      `getRedemptionTbtcRequirement` or `getOwnerRedemptionTbtcRequirement`      functions.",
        "params": {
          "_outputValueBytes": "The 8-byte little-endian output size. The         difference between this value and the lot size of the deposit         will be paid as a fee to the Bitcoin miners when the signed         transaction is broadcast.",
          "_redeemerOutputScript": "The redeemer's length-prefixed output         script."
        }
      },
      "retrieveSignerPubkey()": {
        "details": "Stores the pubkey as 2 bytestrings, X and Y. Emits a      RegisteredPubkey event with the two components. Reverts if the      deposit is not awaiting signer setup, if the generated public key      is unset or has incorrect length, or if the public key has a 0      X or Y value."
      },
      "severelyUndercollateralizedThresholdPercent()": {
        "details": "This collateralization level is critical. If the collateralization      level falls below this percentage the Deposit can get liquidated.      This value represents the percentage of the backing BTC value the      signers must hold as bond in order to not be severely      undercollateralized. It is set at creation time. Note that the      value for new deposits in TBTCSystem can be changed by governance,      but the value for a particular deposit is static once the deposit      is created.",
        "return": "The severely undercollateralized level for this deposit."
      },
      "signerFeeTbtc()": {
        "details": "This is the one-time fee required by the signers to perform the      tasks needed to maintain a decentralized and trustless model for      tBTC. It is a percentage of the deposit's lot size.",
        "return": "Fee amount in TBTC."
      },
      "transferAndRequestRedemption(bytes8,bytes,address)": {
        "details": "Performs the same action as requestRedemption, but transfers      ownership of the deposit to the specified _finalRecipient. Used as      a utility helper for the vending machine's shortcut      TBTC->redemption path.",
        "params": {
          "_finalRecipient": "The address to receive the TDT and later be recorded as deposit redeemer.",
          "_outputValueBytes": "The 8-byte little-endian output size.",
          "_redeemerOutputScript": "The redeemer's length-prefixed output script."
        }
      },
      "undercollateralizedThresholdPercent()": {
        "details": "This collateralization level is semi-critical. If the      collateralization level falls below this percentage the Deposit can      be courtesy-called by calling `notifyCourtesyCall`. This value      represents the percentage of the backing BTC value the signers must      hold as bond in order to not be undercollateralized. It is set at      creation time. Note that the value for new deposits in TBTCSystem      can be changed by governance, but the value for a particular      deposit is static once the deposit is created.",
        "return": "The undercollateralized level for this deposit."
      },
      "utxoValue()": {
        "details": "This call will revert if the deposit is not in a state where the      UTXO info should be valid. In particular, before funding proof is      successfully submitted (i.e. in states START,      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), this value      would not be valid.",
        "return": "The value of the funding UTXO in satoshis."
      },
      "withdrawFunds()": {
        "details": "Withdrawals can only happen when a contract is in an end-state."
      },
      "withdrawableAmount()": {
        "details": "Generally ETH is only available to withdraw after the deposit      reaches a closed state. The amount reported is for the sender, and      can be withdrawn using `withdrawFunds` if the deposit is in an end      state.",
        "return": "The withdraw allowance in wei."
      }
    },
    "title": "tBTC Deposit"
  },
  "userdoc": {
    "methods": {
      "auctionValue()": {
        "notice": "Calculates the amount of value at auction right now."
      },
      "collateralizationPercentage()": {
        "notice": "Get the current collateralization level for this Deposit."
      },
      "currentState()": {
        "notice": "Get the integer representing the current state."
      },
      "exitCourtesyCall()": {
        "notice": "Notify the contract that the signers' bond value has recovered         enough to be considered sufficiently collateralized."
      },
      "fundingInfo()": {
        "notice": "Returns information associated with the funding UXTO."
      },
      "getOwnerRedemptionTbtcRequirement(address)": {
        "notice": "Get TBTC amount required for redemption assuming _redeemer         is this deposit's owner (TDT holder)."
      },
      "getRedemptionTbtcRequirement(address)": {
        "notice": "Get TBTC amount required for redemption by a specified         _redeemer."
      },
      "inActive()": {
        "notice": "Check if the Deposit is in ACTIVE state."
      },
      "increaseRedemptionFee(bytes8,bytes8)": {
        "notice": "Anyone may request a signature for a transaction with an         increased Bitcoin transaction fee."
      },
      "initialCollateralizedPercent()": {
        "notice": "Get the initial collateralization level for this Deposit."
      },
      "initialize(address)": {
        "notice": "Set the address of the System contract on contract         initialization."
      },
      "initializeDeposit(address,address,address,address,address,uint64)": {
        "notice": "This function can only be called by the deposit factory; use         `DepositFactory.createDeposit` to create a new deposit."
      },
      "keepAddress()": {
        "notice": "Get the contract address of the BondedECDSAKeep associated with         this Deposit."
      },
      "lotSizeSatoshis()": {
        "notice": "Get this deposit's BTC lot size in satoshis."
      },
      "lotSizeTbtc()": {
        "notice": "Get this deposit's lot size in TBTC."
      },
      "notifyCourtesyCall()": {
        "notice": "Notify the contract that the signers are undercollateralized."
      },
      "notifyCourtesyCallExpired()": {
        "notice": "Notify the contract that the courtesy period has expired and the         deposit should move into liquidation."
      },
      "notifyFundingTimedOut()": {
        "notice": "Notify the contract that the funding phase of the deposit has         timed out if `provideBTCFundingProof` is not successfully called         within the allotted time. Any sent BTC is left under control of         the signer group, and the funder can use `requestFunderAbort` to         request an at-signer-discretion return of any BTC sent to a         deposit that has been notified of a funding timeout."
      },
      "notifyRedemptionProofTimedOut()": {
        "notice": "Notify the contract that the deposit has failed to receive a         redemption proof in the allotted time."
      },
      "notifyRedemptionSignatureTimedOut()": {
        "notice": "Notify the contract that the signers have failed to produce a         signature for a redemption request in the allotted time."
      },
      "notifySignerSetupFailed()": {
        "notice": "Notify the contract that signing group setup has timed out if         retrieveSignerPubkey is not successfully called within the         allotted time."
      },
      "notifyUndercollateralizedLiquidation()": {
        "notice": "Notify the contract that the signers are undercollateralized."
      },
      "provideBTCFundingProof(bytes4,bytes,bytes,bytes4,uint8,bytes,uint256,bytes)": {
        "notice": "Anyone may submit a funding proof to the deposit showing that         a transaction was submitted and sufficiently confirmed on the         Bitcoin chain transferring the deposit lot size's amount of BTC         to the signer-controlled private key corresopnding to this         deposit. This will move the deposit into an active state."
      },
      "provideECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)": {
        "notice": "Anyone can provide a signature corresponding to the signers'         public key that was not requested to prove fraud. A redemption         request and a redemption fee increase are the only ways to         request a signature from the signers."
      },
      "provideFundingECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)": {
        "notice": "Anyone can provide a signature corresponding to the signers'         public key to prove fraud during funding. Note that during         funding no signature has been requested from the signers, so         any signature is effectively fraud."
      },
      "provideRedemptionProof(bytes4,bytes,bytes,bytes4,bytes,uint256,bytes)": {
        "notice": "Anyone may submit a redemption proof to the deposit showing that         a transaction was submitted and sufficiently confirmed on the         Bitcoin chain transferring the deposit lot size's amount of BTC         from the signer-controlled private key corresponding to this         deposit to the requested redemption output script. This will         move the deposit into a redeemed state."
      },
      "provideRedemptionSignature(uint8,bytes32,bytes32)": {
        "notice": "Anyone may provide a withdrawal signature if it was requested."
      },
      "purchaseSignerBondsAtAuction()": {
        "notice": "Closes an auction and purchases the signer bonds by transferring         the lot size in TBTC to the redeemer, if there is one, or to the         TDT holder if not. Any bond amount that is not currently up for         auction is either made available for the liquidation initiator         to withdraw (for fraud) or split 50-50 between the initiator and         the signers (for abort or collateralization issues)."
      },
      "remainingTerm()": {
        "notice": "Retrieve the remaining term of the deposit in seconds."
      },
      "requestFunderAbort(bytes)": {
        "notice": "Requests a funder abort for a failed-funding deposit; that is,         requests the return of a sent UTXO to _abortOutputScript. It         imposes no requirements on the signing group. Signers should         send their UTXO to the requested output script, but do so at         their discretion and with no penalty for failing to do so. This         can be used for example when a UTXO is sent that is the wrong         size for the lot."
      },
      "requestRedemption(bytes8,bytes)": {
        "notice": "Requests redemption of this deposit, meaning the transmission,         by the signers, of the deposit's UTXO to the specified Bitocin         output script. Requires approving the deposit to spend the         amount of TBTC needed to redeem."
      },
      "retrieveSignerPubkey()": {
        "notice": "Notify the contract that the ECDSA keep has generated a public         key so the deposit contract can pull it in."
      },
      "severelyUndercollateralizedThresholdPercent()": {
        "notice": "Get the severe undercollateralization level for this Deposit."
      },
      "signerFeeTbtc()": {
        "notice": "Get the signer fee for this deposit, in TBTC."
      },
      "transferAndRequestRedemption(bytes8,bytes,address)": {
        "notice": "This function can only be called by the vending machine."
      },
      "undercollateralizedThresholdPercent()": {
        "notice": "Get the undercollateralization level for this Deposit."
      },
      "utxoValue()": {
        "notice": "Get the value of the funding UTXO."
      },
      "withdrawFunds()": {
        "notice": "Withdraw the ETH balance of the deposit allotted to the caller."
      },
      "withdrawableAmount()": {
        "notice": "Get caller's ETH withdraw allowance."
      }
    },
    "notice": "This is the main contract for tBTC. It is the state machine that         (through various libraries) handles bitcoin funding, bitcoin-spv         proofs, redemption, liquidation, and fraud logic."
  }
}