code: public static ValueRange of(long minSmallest, long minLargest, long maxSmallest, long maxLargest) {
          if (minSmallest > minLargest) {
              throw new IllegalArgumentException("Smallest minimum value must be less than largest minimum value");
          }
          if (maxSmallest > maxLargest) {
              throw new IllegalArgumentException("Smallest maximum value must be less than largest maximum value");
          }
          if (minLargest > maxLargest) {
              throw new IllegalArgumentException("Minimum value must be less than maximum value");
          }
          return new ValueRange(minSmallest, minLargest, maxSmallest, maxLargest);
      }
docs: Obtains a fully variable value range.
  <p>
  This factory obtains a range where both the minimum and maximum value may vary.
  
  @param minSmallest  the smallest minimum value
  @param minLargest  the largest minimum value
  @param maxSmallest  the smallest maximum value
  @param maxLargest  the largest maximum value
  @return the ValueRange for smallest min, largest min, smallest max, largest max, not null
  @throws IllegalArgumentException if
  the smallest minimum is greater than the smallest maximum,
  or the smallest maximum is greater than the largest maximum
  or the largest minimum is greater than the largest maximum