static L splitIntoRandomRangesOfApproximateLength(double avgLength, IntRange base) { int i = base.start; new L out; int safety = 0; while (i < base.end && safety++ < l(base)) { double randVal = random(avgLength*2); int j = min(base.end, i+max(1, iround(randVal))); out.add(intRange(i, j)); i = j; } ret out; }