docs: public void dumpXml(PrintStream out) {
          out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
          out.println("<history>");
          String startData = "    <data ";
          String stop = "/>";
          for (int i = 0; i < versionList.length; ++i) {
              Version version = versionList[i];
              AppVersion appVersion = sequenceToAppVersionMap.get(version.getSequence());
              out.print("  <historyItem ");
              out.print("seq=\"");
              out.print(i);
              out.print("\" ");
              out.print("version=\"");
              out.print(appVersion != null ? appVersion.getReleaseName() : "");
              out.print("\" ");
              out.print("time=\"");
              if (formatDates) {
                  out.print((appVersion != null ? new Date(appVersion.getTimestamp()).toString() : ""));
              } else {
                  out.print(appVersion != null ? appVersion.getTimestamp() : 0L);
              }
              out.print("\"");
              out.println(">");
  
              String attributeName[] = new String[TUPLE_SIZE];
              attributeName[0] = "added";
              attributeName[1] = "newCode";
              attributeName[2] = "fixed";
              attributeName[3] = "removed";
              attributeName[4] = "retained";
              attributeName[5] = "dead";
              attributeName[6] = "active";
              for (int j = 0; j < TUPLE_SIZE; ++j) {
                  // newCode and retained are already comprised within active
                  // so we skip tehm
                  if (j == 1 || j == 4) {
                      continue;
                  }
                  out.print(startData + " name=\"" + attributeName[j] + "\" value=\"");
                  out.print(version.get(j));
                  out.print("\"");
                  out.println(stop);
              }
              out.println("  </historyItem>");
          }
          out.print("</history>");
      }