private static String checkArrayEquivalence(Object @NotNull [] a1, Object @NotNull [] a2, @NotNull Object original1) {
    int len1 = a1.length;
    int len2 = a2.length;
    if (len1 != len2) {
      return appendDetail(reportProblem(len1, len2), "which is length of " + Arrays.toString(a1) + " and " + Arrays.toString(a2));
    }
    for (int i = 0; i < len1; i++) {
      String msg = checkValueEquivalence(a1[i], a2[i]);
      if (msg != null) {
        return whichIsField(original1 instanceof Map.Entry ? (i == 0 ? "key" : "value") : i + "th element",
                            Arrays.toString(a1), Arrays.toString(a2), msg);
      }
    }
    return null;
  }
private static String checkArrayEquivalence(Object @NotNull [] a1, Object @NotNull [] a2, @NotNull Object original1)