contract Subrosa {
  using SafeMath for uint256;
    /*
        This smart contract allows to collect ether in a
        wallet and allow only the owner to withdraw it.
        Initialize the wallet with owners address while deploying.
    */

    // Events
    // Deposit Event from the address
    event Deposit(address _from, uint256 _amount);
    // Withdraw Event
    event WithDraw(address _to, uint256 _amount);

    // The owner of the address
    address public owner;

    // Contract address
    address public contractAddress;

    // Modifier for only onlyOwner
    modifier onlyOwner() {
        require (msg.sender == owner);
        _;
    }

    // Default constructor
    function Subrosa() public{
        owner = 0x193129A669A6Fd24Fc261028570023e91F123573;
        contractAddress = this;
    }

    // Send the ether to current address
    // The fall back function to which the ether is sent
    function () public payable {
        emit Deposit(msg.sender, msg.value);
    }

    // WithDraw all the ether only owner can withdraw
    function withDraw() public onlyOwner () {
        owner.transfer(contractAddress.balance);
        emit WithDraw(owner, contractAddress.balance);
    }

    // WithDraw a specific amount in wei
    // @param amount the amount to be withdrawn
    function withDrawAmount(uint256 amount) public onlyOwner{
        require(amount <= contractAddress.balance);
        owner.transfer(amount);
        emit WithDraw(owner, amount);
    }

    // Check the current balance of the contract
    // @returns balance returns the current balance of wallet
    function getBalance() public constant returns(uint256 balance){
        return contractAddress.balance;
    }
}
function () public payable {
        emit Deposit(msg.sender, msg.value);
    }
// Send the ether to current address
// The fall back function to which the ether is sent