// Path: Project/src/main/java/com/privatejgoodies/common/base/Preconditions.java
// public static String checkNotBlank(String str, String message) {
//   checkNotNull(str, message);
//   checkArgument(Strings.isNotBlank(str), message);
//   return str;
// }
// 
// Path: Project/src/main/java/com/privatejgoodies/common/base/Preconditions.java
// public static <T> T checkNotNull(T reference, String message) {
//   if (reference == null) {
//     throw new NullPointerException(message);
//   }
//   return reference;
// }


import static com.privatejgoodies.common.base.Preconditions.checkNotNull;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import static com.privatejgoodies.common.base.Preconditions.checkNotBlank;
    return spec;
  }

  /**
   * Parses and splits encoded row specifications using the default {@link LayoutMap} and returns an
   * array of RowSpec objects.
   *
   * @param encodedRowSpecs comma separated encoded row specifications
   * @return an array of decoded row specifications
   * @throws NullPointerException if {@code encodedRowSpecs} is {@code null}
   * @see #decodeSpecs(String, LayoutMap)
   * @see #decode(String)
   * @see LayoutMap#getRoot()
   */
  public static RowSpec[] decodeSpecs(String encodedRowSpecs) {
    return decodeSpecs(encodedRowSpecs, LayoutMap.getRoot());
  }

  /**
   * Parses and splits encoded row specifications using the given {@link LayoutMap} and returns an
   * array of RowSpec objects.
   *
   * @param encodedRowSpecs comma separated encoded row specifications
   * @param layoutMap expands layout row variables
   * @return an array of decoded row specifications
   * @throws NullPointerException {@code encodedRowSpecs} or {@code layoutMap} is {@code null}
   * @see RowSpec#RowSpec(String)
   * @since 1.2
   */
  public static RowSpec[] decodeSpecs(String encodedRowSpecs, LayoutMap layoutMap) {
// Path: Project/src/main/java/com/privatejgoodies/common/base/Preconditions.java
// public static String checkNotBlank(String str, String message) {
//   checkNotNull(str, message);
//   checkArgument(Strings.isNotBlank(str), message);
//   return str;
// }
// 
// Path: Project/src/main/java/com/privatejgoodies/common/base/Preconditions.java
// public static <T> T checkNotNull(T reference, String message) {
//   if (reference == null) {
//     throw new NullPointerException(message);
//   }
//   return reference;
// }


// Path: Project/src/main/java/com/privatejgoodies/forms/layout/RowSpec.java
import static com.privatejgoodies.common.base.Preconditions.checkNotNull;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import static com.privatejgoodies.common.base.Preconditions.checkNotBlank;

    return spec;
  }

  /**
   * Parses and splits encoded row specifications using the default {@link LayoutMap} and returns an
   * array of RowSpec objects.
   *
   * @param encodedRowSpecs comma separated encoded row specifications
   * @return an array of decoded row specifications
   * @throws NullPointerException if {@code encodedRowSpecs} is {@code null}
   * @see #decodeSpecs(String, LayoutMap)
   * @see #decode(String)
   * @see LayoutMap#getRoot()
   */
  public static RowSpec[] decodeSpecs(String encodedRowSpecs) {
    return decodeSpecs(encodedRowSpecs, LayoutMap.getRoot());
  }

  /**
   * Parses and splits encoded row specifications using the given {@link LayoutMap} and returns an
   * array of RowSpec objects.
   *
   * @param encodedRowSpecs comma separated encoded row specifications
   * @param layoutMap expands layout row variables
   * @return an array of decoded row specifications
   * @throws NullPointerException {@code encodedRowSpecs} or {@code layoutMap} is {@code null}
   * @see RowSpec#RowSpec(String)
   * @since 1.2
   */
  public static RowSpec[] decodeSpecs(String encodedRowSpecs, LayoutMap layoutMap) {
    return FormSpecParser.parseRowSpecs(encodedRowSpecs, layoutMap);