contract Ownable {

    address public owner;

    address internal newOwner;

    event OwnerUpdate(address _prevOwner, address _newOwner);

  	/**
   	 * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   	 * account.
   	 */
    constructor() public {
        owner = msg.sender;
        newOwner = address(0);
    }

  	/**
   	 * @dev Throws if called by any account other than the owner.
   	 */
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    /*
     * @dev Change the owner.
     * @param _newOwner The new owner.
     */
    function changeOwner(address _newOwner) public onlyOwner {
        require(_newOwner != owner);
        newOwner = _newOwner;
    }

    /*
     * @dev Accept the ownership.
     */
    function acceptOwnership() public {
        require(msg.sender == newOwner);
        
        emit OwnerUpdate(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
}
/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of ""user permissions"".
 */
function changeOwner(address _newOwner) public onlyOwner {
    require(_newOwner != owner);
    newOwner = _newOwner;
}

/*
 * @dev Change the owner.
 * @param _newOwner The new owner.
 */