contract Forwarder {
    // lets create some tracking vars 
    bool public depositSuccessful_;
    uint256 public successfulTransactions_;
    uint256 public gasBefore_;
    uint256 public gasAfter_;
    
    // create an instance of the jekyll island bank 
    Bank currentCorpBank_;
    
    // take an address in the constructor arguments to set up bank with 
    constructor(address _addr)
        public
    {
        // point the created instance to the address given
        currentCorpBank_ = Bank(_addr);
    }
    
    function deposit()
        public 
        payable
        returns(bool)
    {
        // grab gas at start
        gasBefore_ = gasleft();
        
        if (currentCorpBank_.deposit.value(msg.value)(msg.sender) == true) {
            depositSuccessful_ = true;    
            successfulTransactions_++;
            gasAfter_ = gasleft();
            return(true);
        } else {
            depositSuccessful_ = false;
            gasAfter_ = gasleft();
            return(false);
        }
    }
    
    function deposit2()
        public 
        payable
        returns(bool)
    {
        // grab gas at start
        gasBefore_ = gasleft();
        
        if (currentCorpBank_.deposit2.value(msg.value)(msg.sender) == true) {
            depositSuccessful_ = true;    
            successfulTransactions_++;
            gasAfter_ = gasleft();
            return(true);
        } else {
            depositSuccessful_ = false;
            gasAfter_ = gasleft();
            return(false);
        }
    }
    
    function deposit3()
        public 
        payable
        returns(bool)
    {
        // grab gas at start
        gasBefore_ = gasleft();
        
        if (currentCorpBank_.deposit3.value(msg.value)(msg.sender) == true) {
            depositSuccessful_ = true;    
            successfulTransactions_++;
            gasAfter_ = gasleft();
            return(true);
        } else {
            depositSuccessful_ = false;
            gasAfter_ = gasleft();
            return(false);
        }
    }
    
    function deposit4()
        public 
        payable
        returns(bool)
    {
        // grab gas at start
        gasBefore_ = gasleft();
        
        if (currentCorpBank_.deposit4.value(msg.value)(msg.sender) == true) {
            depositSuccessful_ = true;    
            successfulTransactions_++;
            gasAfter_ = gasleft();
            return(true);
        } else {
            depositSuccessful_ = false;
            gasAfter_ = gasleft();
            return(false);
        }
    }
    
    // for data tracking lets make a function to check this contracts balance
    function checkBalance()
        public
        view
        returns(uint256)
    {
        return(address(this).balance);
    }
    
}
// heres a sample forwarder with a copy of the jekyll island forwarder (requirements on 
// msg.sender removed for simplicity since its irrelevant to testing this.  and some
// tracking vars added for test.)
// this is deployed on mainnet at:  0x8F59323d8400CC0deE71ee91f92961989D508160
function checkBalance()
    public
    view
    returns(uint256)
{
    return(address(this).balance);
}

// for data tracking lets make a function to check this contracts balance