public boolean pass(int[] bowl, int bowlId, int round,
                        boolean canPick,
                        boolean musTake) {
		double expected;
		double offset;

		// Calculate Bowl Size
		bowlSize = 0;
		for(int i=0; i<bowl.length; i++)
			bowlSize += bowl[i];

		// Total Fruits
		n_fruits = n_players*bowlSize;

		// Update fruit history as bowls come by
		fruitHistory = history(bowl, bowlId, round);

		//choosing between distribution and threshhold/offset based on bowlSize
		if(bowlSize < 30){
			//calculate distribution	
			bowls_seen[round]++;
			estimateDistribution(bowl, bowlId, round, bowlSize);
		}else{
			//calculate distribution
			estimateDistribution_orig();
		}

		//get expected score
		expected = expectedValue(bowl, bowlId, round);
		offset = linearOffset(round, expected);

		if (musTake)
			return true;

		if (canPick && score(bowl, bowlId, round) >= expected + offset)
			return true;
		else
			return false;
    }