function calcMult(uint256 keysBought, bool validIncrease) internal returns (bool)
{
    uint256 _now = now; 
	uint256 secondsPassed = _now - multLastChange;
	
	
	bool thresholdReached = (multStart > round_[rID_].end - _now);
	
	
	
	bool currentlyLinear = false;
	if (multLinear == 1 || (multLinear == 2 && !thresholdReached)) { currentlyLinear = true; multLastChange = _now;}
	else  multLastChange = multLastChange.add((secondsPassed/60).mul(60)); 
	
	
	
	if (multCurrent >= 10) {
	    if (currentlyLinear) multCurrent = (multCurrent.mul(10).sub(multDecayPerMinute.mul(secondsPassed).mul(100)/60))/10; else multCurrent = multCurrent / (1+(multDecayPerMinute.mul(secondsPassed)/60));
		if (multCurrent < 10) multCurrent = 10;
	}
	
	
	
	bool returnValue = ((keysBought / 1e17) >= multCurrent);
	
	
	if ((thresholdReached || multLinear == 2) && validIncrease) {
	    uint256 wholeKeysBought = keysBought / 1e18;
	    uint256 actualMultInc = multIncFactor_.mul(wholeKeysBought);
	    if (multInc_ != 0) actualMultInc = multInc_;
	    
	    
	    if ((wholeKeysBought >= multPurchase && multPurchase > 0) || ((wholeKeysBought >= (multCurrent / 10)) && multPurchase == 0) ) {  
	    
	        if (currentlyLinear) multCurrent = multCurrent.add(actualMultInc); else multCurrent = multCurrent.mul((1+(actualMultInc/10)));
	        if (multCurrent > maxMult) multCurrent = maxMult;
	    }
    }
	
	return returnValue;
	
}