public static @NotNull Gens breed(@NotNull Gens p1, @NotNull Gens p2, int averageMutationCount) {
    final int size = p1.myValues.size();
    assert size == p2.myValues.size();

    // Crossover!
    final int crossover = size / 2;//FUtils.getRandomLess(size - 6) + 3;

    final List<Value> values = new ArrayList<>(size);
    for (int i = 0; i < size; ++i) {
      final Value value1 = p1.myValues.get(i);
      final Value value2 = p2.myValues.get(i);
      if (value1.kind == Value.VAR_KIND.INDENT) {
        values.add(new Value(value1));
      }
      else if (value1.kind == Value.VAR_KIND.BRACE_STYLE) {
        values.add(new Value(value2));
      }
      else if ((i & 0x1) == 1) {
        values.add(new Value(value1));
      }
      else {
        values.add(new Value(value2));
      }
    }
    return new Gens(values).mutate(averageMutationCount);
  }
public static @NotNull Gens breed(@NotNull Gens p1, @NotNull Gens p2, int averageMutationCount)