anchor.diff:    
     print("Successes:           $successes\t(${successes / count})");
     print("Failures:            $failures\t(${failures / count})");
  -  print("Critical Successes:  $successes\t(${criticalSuccesses / count})");
  -  print("Critical Failures:   $successes\t(${criticalFailures / count})");
  -}
  -
  -num findSlotLineProbability(num desiredWholeProbability, {num delta: 0.1, 
  -      int maxTries: 100, int slotLinesCount: 5, int slotCount: 10}) {
  +  print("Critical Successes:  $criticalSuccesses\t(${criticalSuccesses / count})");
  +  print("Critical Failures:   $criticalFailures\t(${criticalFailures / count})");
  +}
  +
  +num findSlotLineProbability(List<List<bool>> initialSetup, 
  +                            num desiredWholeProbability, {num delta: 0.1, 
  +                            int maxTries: 100}) {
     if (desiredWholeProbability == 0) return 0;
     if (desiredWholeProbability == 1.0) return 1.0;
     num a = 0;
  
positive.code:   return middle;
  }
  
  List<int> _generatePossibleOutcomes(int slotLinesCount, int slotCount, 
                                      num slotLineProbability) {
    // Compute first slot line's successes.
    int successes = (slotCount * slotLineProbability).round();
    List<int> thisLineOutcomes = new List(slotCount);
    Random rand = new Random();
    for (int i = 0; i < slotCount; i++) {
  //    thisLineOutcomes[i] = i < successes ? 1 : -1;
      thisLineOutcomes[i] = rand.nextDouble() < slotLineProbability ? 1 : -1;
    }
    
    if (slotLinesCount == 1) {
      return thisLineOutcomes;
    }
    
    List<int> wholeOutcomes = new List<int>();
    
    thisLineOutcomes.forEach((int outcome) {
      _generatePossibleOutcomes(slotLinesCount - 1, slotCount, 
          slotLineProbability).forEach((rightOutcome) {
        wholeOutcomes.add(outcome + rightOutcome);
      });
    });
  
negative.code:   var setup = [
                 [true, true, true, true, true, true, true, true, true, true],
                 [true, true, true, true, true, true, true, true, true, true],
                 [true, true, true, true, false, true, true, true, true, true],
                 [true, true, true, true, true, true, true, true, true, true],
                 [true, true, true, true, true, true, true, true, true, true]
    ];
    
    computeSlotMachineProbability(setup, 5, 10);
    
    print(findSlotLineProbability(setup, 0.8, delta: 0.05));
  }
  
  /// Computes probabilities of success and failure depending on setup.
  void computeSlotMachineProbability(List<List<bool>> setup, 
                                     int slotLinesCount, int slotCount) {
    List<int> outcomes = _generatePossibleOutcomes(setup);
    
    int count = outcomes.length;
    int criticalSuccesses = outcomes.where((o) => o == slotLinesCount).length;
  