code: public Pair<RangeBigInteger,RangeBigInteger> removeIntersect(RangeBigInteger o) {
  		if (o.max.compareTo(min) < 0 || o.min.compareTo(max) > 0) // o is outside: no intersection
  			return new Pair<>(copy(), null);
  		if (o.min.compareTo(min) <= 0) {
  			// nothing before
  			if (o.max.compareTo(max) >= 0)
  				return new Pair<>(null, null); // o is fully overlapping this
  			return new Pair<>(null, new RangeBigInteger(o.max.add(BigInteger.ONE), max));
  		}
  		if (o.max.compareTo(max) >= 0) {
  			// nothing after
  			return new Pair<>(new RangeBigInteger(min, o.min.subtract(BigInteger.ONE)), null);
  		}
  		// in the middle
  		return new Pair<>(new RangeBigInteger(min, o.min.subtract(BigInteger.ONE)), new RangeBigInteger(o.max.add(BigInteger.ONE), max));
  	}
docs: Remove the intersection between this range and the given range, and return the range before and the range after the intersection.