function contribute() internal {
    uint256 weiAmount = msg.value;
    require(msg.sender != address(0) && weiAmount >= 5e15);
    require(now >= startTime && now <= endTime);
    
    
    uint256 numToken = getTokenAmount(weiAmount).mul(10 ** 8);
    
    
    require(token.balanceOf(this).sub(numToken) > 0 );
    
    
    if(contributionOf[msg.sender] <= 0){
        contributors.push(msg.sender);
        token.freeze(msg.sender);
    }
    
    contributionOf[msg.sender] = contributionOf[msg.sender].add(weiAmount);
    
    token.transfer(msg.sender, numToken);
    
    weiRaised = weiRaised.add(weiAmount);
    
    updateWinnersList();
    
    contributionSuccessful(msg.sender,weiAmount,numToken);
  }