contract Haltable is Ownable {
  bool public halted;
  modifier stopInEmergency {
    require(!halted);
    _;
  }
  modifier stopNonOwnersInEmergency {
    require(!halted && msg.sender == owner);
    _;
  }
  modifier onlyInEmergency {
    require(halted);
    _;
  }
  // called by the owner on emergency, triggers stopped state
  function halt() external onlyOwner {
    halted = true;
  }
  // called by the owner on end of emergency, returns to normal state
  function unhalt() external onlyOwner onlyInEmergency {
    halted = false;
  }
}
/*
 * Haltable
 * emergency stop mechanism. Differs from Pausable by causing a throw when in halt mode.
 * Originally envisioned in FirstBlood ICO contract.
 */
function halt() external onlyOwner {
  halted = true;
}

// called by the owner on emergency, triggers stopped state