static @Nullable List<ProcessInfo> parseWinProcessListHelperOutput(@NotNull String output,
                                                                     @NotNull Map<Long, String> processOwners,
                                                                     @Nullable String currentUser) {
    String[] lines = StringUtil.splitByLines(output, false);
    List<ProcessInfo> result = new ArrayList<>();
    if (lines.length % 4 != 0) {
      logErrorTestSafe("Broken output of " + WIN_PROCESS_LIST_HELPER_FILENAME + ": output line count is not a multiple of 4");
      LOG.debug(output);
      return null;
    }
    int processCount = lines.length / 4;
    for (int i = 0; i < processCount; i++) {
      int offset = i * 4;
      String idString = removePrefix(lines[offset], "pid:");
      int id = StringUtil.parseInt(idString, -1);
      if (id == -1) {
        logErrorTestSafe("Broken output of " + WIN_PROCESS_LIST_HELPER_FILENAME + ": process ID is not a number: " + lines[offset]);
        LOG.debug(output);
        return null;
      }
      if (id == 0) continue;

      String parentIdString = removePrefix(lines[offset + 1], "parentPid:");
      int parentId = StringUtil.parseInt(parentIdString, -1);
      if (parentId == -1) {
        logErrorTestSafe("Broken output of " + WIN_PROCESS_LIST_HELPER_FILENAME + ": parent process ID is not a number: " + lines[offset + 1]);
        LOG.debug(output);
        return null;
      }

      String name = unescapeString(removePrefix(lines[offset + 2], "name:"));
      if (name == null) {
        logErrorTestSafe("Failed to read a process name: " + lines[offset + 2]);
        LOG.debug(output);
        return null;
      }
      if (name.isEmpty()) continue;

      String commandLine = unescapeString(removePrefix(lines[offset + 3], "cmd:"));
      if (commandLine == null) {
        logErrorTestSafe("Failed to read a process command line: " + lines[offset + 3]);
        LOG.debug(output);
        return null;
      }
      String args;
      if (commandLine.isEmpty()) {
        commandLine = name;
        args = "";
      }
      else {
        args = extractCommandLineArgs(commandLine, name);
      }
      String processUser = processOwners.get((long)id);
      ThreeState isOwnedByCurrentUser = currentUser != null ? ThreeState.fromBoolean(currentUser.equals(processUser)) : ThreeState.UNSURE;
      result.add(new ProcessInfo(id, commandLine, name, args, null, parentId, processUser, isOwnedByCurrentUser));
    }
    return result;
  }
static @Nullable List<ProcessInfo> parseWinProcessListHelperOutput(@NotNull String output,
                                                                     @NotNull Map<Long, String> processOwners,
                                                                     @Nullable String currentUser)