@Override
  public long process(@NotNull SsiProcessingState state, @NotNull String commandName, @NotNull List<String> paramNames, String @NotNull [] paramValues, @NotNull ByteBufUtf8Writer writer) {
    long lastModified = 0;
    String configErrMsg = state.configErrorMessage;
    for (int i = 0; i < paramNames.size(); i++) {
      String paramName = paramNames.get(i);
      String paramValue = paramValues[i];
      String substitutedValue = state.substituteVariables(paramValue);
      if (paramName.equalsIgnoreCase("file") || paramName.equalsIgnoreCase("virtual")) {
        boolean virtual = paramName.equalsIgnoreCase("virtual");
        lastModified = state.ssiExternalResolver.getFileLastModified(substitutedValue, virtual);
        writer.write(formatSize(state.ssiExternalResolver.getFileSize(substitutedValue, virtual), state.configSizeFmt));
      }
      else {
        SsiProcessorKt.getLOG().info("#fsize--Invalid attribute: " + paramName);
        writer.write(configErrMsg);
      }
    }
    return lastModified;
  }
@Override
  public long process(@NotNull SsiProcessingState state, @NotNull String commandName, @NotNull List<String> paramNames, String @NotNull [] paramValues, @NotNull ByteBufUtf8Writer writer)