function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal {
        super._preValidatePurchase(_beneficiary, _weiAmount);
        if (isPresale()) {
            require(_weiAmount >= presaleWeiLimit);
        }

        uint256 tokens = _getTokenAmount(_weiAmount);
        uint256 bonusTokens = _getBonusAmount(tokens);
        require(notExceedingSaleCap(tokens.add(bonusTokens)));
    }