docs: @SuppressWarnings({"SuspiciousSystemArraycopy"})
      public static Object subArray(Object pArray, int pStart, int pLength) {
          Validate.notNull(pArray, "array");
  
          // Get component type
          Class type;
  
          // Sanity check start index
          if (pStart < 0) {
              throw new ArrayIndexOutOfBoundsException(pStart + " < 0");
          }
          // Check if argument is array
          else if ((type = pArray.getClass().getComponentType()) == null) {
              // NOTE: No need to test class.isArray(), really
              throw new IllegalArgumentException("Not an array: " + pArray);
          }
  
          // Store original length
          int originalLength = Array.getLength(pArray);
  
          // Find new length, stay within bounds
          int newLength = (pLength < 0)
                  ? Math.max(0, originalLength - pStart)
                  : Math.min(pLength, Math.max(0, originalLength - pStart));
  
          // Store result
          Object result;
  
          if (newLength < originalLength) {
              // Create sub array & copy into
              result = Array.newInstance(type, newLength);
              System.arraycopy(pArray, pStart, result, 0, newLength);
          }
          else {
              // Just return original array
              // NOTE: This can ONLY happen if pStart == 0
              result = pArray;
          }
  
          // Return
          return result;
      }