contract CappedCrowdsale is Crowdsale {
	using SafeMath for uint256;

	uint256 public cap;

	function CappedCrowdsale(uint256 _cap) public {
		require(_cap > 0);
		cap = _cap;
	}

	// overriding Crowdsale#validPurchase to add extra cap logic
	// @return true if investors can buy at the moment
	function validPurchase() internal view returns (bool) {
		bool withinCap = weiRaised.add(msg.value) <= cap;
		return super.validPurchase() && withinCap;
	}

	// overriding Crowdsale#hasEnded to add cap logic
	// @return true if crowdsale event has ended
	function hasEnded() public view returns (bool) {
		bool capReached = weiRaised >= cap;
		return super.hasEnded() || capReached;
	}

}
/**
 * @title CappedCrowdsale
 * @dev Extension of Crowdsale with a max amount of funds raised
 */
function validPurchase() internal view returns (bool) {
	bool withinCap = weiRaised.add(msg.value) <= cap;
	return super.validPurchase() && withinCap;
}

// overriding Crowdsale#validPurchase to add extra cap logic
// @return true if investors can buy at the moment