// Path: src/main/java/at/favre/tools/dconvert/exceptions/InvalidArgumentException.java
// public class InvalidArgumentException extends Exception {
//     public InvalidArgumentException(String message) {
//         super(message);
//     }
// 
//     public InvalidArgumentException(String message, Throwable cause) {
//         super(message, cause);
//     }
// }
// 
// Path: src/main/java/at/favre/tools/dconvert/util/MiscUtil.java
// public final class MiscUtil {
//     private MiscUtil() {
//     }
// 
//     public static String getStackTrace(Throwable t) {
//         StringWriter sw = new StringWriter();
//         PrintWriter pw = new PrintWriter(sw);
//         t.printStackTrace(pw);
//         return sw.toString();
//     }
// 
//     public static String duration(long ms) {
//         if (ms >= 1000) {
//             return String.format(Locale.US, "%.2f sec", (double) ms / 1000);
//         }
//         return ms + " ms";
//     }
// 
//     public static <T> T[] concat(T[] first, T[] second) {
//         T[] result = Arrays.copyOf(first, first.length + second.length);
//         System.arraycopy(second, 0, result, first.length, second.length);
//         return result;
//     }
// 
//     public static File createAndCheckFolder(String path, boolean dryRun) {
//         File f = new File(path);
// 
//         if (dryRun) {
//             return f;
//         }
// 
//         if (!f.exists()) {
//             f.mkdirs();
//         }
// 
//         if (!f.exists() || !f.isDirectory()) {
//             throw new IllegalStateException("could not create folder: " + path);
//         }
//         return f;
//     }
// 
//     public static String getFileExtensionLowerCase(File file) {
//         return getFileExtension(file).toLowerCase();
//     }
// 
//     public static String getFileExtension(File file) {
//         if (file == null) {
//             return "";
//         }
//         return file.getName().substring(file.getName().lastIndexOf(".") + 1);
//     }
// 
//     public static String getFileNameWithoutExtension(File file) {
//         String fileName = file.getName();
//         int pos = fileName.lastIndexOf(".");
//         if (pos > 0) {
//             fileName = fileName.substring(0, pos);
//         }
//         return fileName;
//     }
// 
//     public static String getCmdProgressBar(float progress) {
//         int loadingBarCount = 40;
//         int bars = Math.round((float) loadingBarCount * progress);
//         StringBuilder sb = new StringBuilder("\r[");
// 
//         for (int i = 0; i < loadingBarCount; i++) {
//             if (i < bars) {
//                 sb.append("-");
//             } else {
//                 sb.append(" ");
//             }
//         }
//         sb.append("] ");
// 
//         if (progress < 1f) {
//             sb.append(String.format("%6s", String.format(Locale.US, "%.2f", progress * 100f))).append("%");
//         } else {
//             sb.append("100.00%\n");
//         }
// 
//         return sb.toString();
//     }
// 
//     public static <T> Set<T> toSet(T elem) {
//         Set<T> set = new HashSet<>(1);
//         set.add(elem);
//         return set;
//     }
// 
//     public static void deleteFolder(File folder) {
//         if (folder != null && folder.exists()) {
//             File[] files = folder.listFiles();
//             if (files != null) { //some JVMs return null for empty dirs
//                 for (File f : files) {
//                     if (f.isDirectory()) {
//                         deleteFolder(f);
//                     } else {
//                         f.delete();
//                     }
//                 }
//             }
//             folder.delete();
//         }
//     }
// }


import at.favre.tools.dconvert.exceptions.InvalidArgumentException;
import at.favre.tools.dconvert.util.MiscUtil;
import java.io.File;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.*;
        public Builder scaleRoundingStragy(RoundingHandler.Strategy strategy) {
            this.roundingStrategy = strategy;
            return this;
        }

        public Builder skipParamValidation(boolean b) {
            this.internalSkipParamValidation = b;
            return this;
        }

        public Builder keepUnoptimizedFilesPostProcessor(boolean b) {
            this.keepUnoptimizedFilesPostProcessor = b;
            return this;
        }

        public Builder iosCreateImagesetFolders(boolean b) {
            this.iosCreateImagesetFolders = b;
            return this;
        }

        public Builder guiAdvancedOptions(boolean b) {
            this.guiAdvancedOptions = b;
            return this;
        }

        public Builder clearDirBeforeConvert(boolean b) {
            this.clearDirBeforeConvert = b;
            return this;
        }

// Path: src/main/java/at/favre/tools/dconvert/exceptions/InvalidArgumentException.java
// public class InvalidArgumentException extends Exception {
//     public InvalidArgumentException(String message) {
//         super(message);
//     }
// 
//     public InvalidArgumentException(String message, Throwable cause) {
//         super(message, cause);
//     }
// }
// 
// Path: src/main/java/at/favre/tools/dconvert/util/MiscUtil.java
// public final class MiscUtil {
//     private MiscUtil() {
//     }
// 
//     public static String getStackTrace(Throwable t) {
//         StringWriter sw = new StringWriter();
//         PrintWriter pw = new PrintWriter(sw);
//         t.printStackTrace(pw);
//         return sw.toString();
//     }
// 
//     public static String duration(long ms) {
//         if (ms >= 1000) {
//             return String.format(Locale.US, "%.2f sec", (double) ms / 1000);
//         }
//         return ms + " ms";
//     }
// 
//     public static <T> T[] concat(T[] first, T[] second) {
//         T[] result = Arrays.copyOf(first, first.length + second.length);
//         System.arraycopy(second, 0, result, first.length, second.length);
//         return result;
//     }
// 
//     public static File createAndCheckFolder(String path, boolean dryRun) {
//         File f = new File(path);
// 
//         if (dryRun) {
//             return f;
//         }
// 
//         if (!f.exists()) {
//             f.mkdirs();
//         }
// 
//         if (!f.exists() || !f.isDirectory()) {
//             throw new IllegalStateException("could not create folder: " + path);
//         }
//         return f;
//     }
// 
//     public static String getFileExtensionLowerCase(File file) {
//         return getFileExtension(file).toLowerCase();
//     }
// 
//     public static String getFileExtension(File file) {
//         if (file == null) {
//             return "";
//         }
//         return file.getName().substring(file.getName().lastIndexOf(".") + 1);
//     }
// 
//     public static String getFileNameWithoutExtension(File file) {
//         String fileName = file.getName();
//         int pos = fileName.lastIndexOf(".");
//         if (pos > 0) {
//             fileName = fileName.substring(0, pos);
//         }
//         return fileName;
//     }
// 
//     public static String getCmdProgressBar(float progress) {
//         int loadingBarCount = 40;
//         int bars = Math.round((float) loadingBarCount * progress);
//         StringBuilder sb = new StringBuilder("\r[");
// 
//         for (int i = 0; i < loadingBarCount; i++) {
//             if (i < bars) {
//                 sb.append("-");
//             } else {
//                 sb.append(" ");
//             }
//         }
//         sb.append("] ");
// 
//         if (progress < 1f) {
//             sb.append(String.format("%6s", String.format(Locale.US, "%.2f", progress * 100f))).append("%");
//         } else {
//             sb.append("100.00%\n");
//         }
// 
//         return sb.toString();
//     }
// 
//     public static <T> Set<T> toSet(T elem) {
//         Set<T> set = new HashSet<>(1);
//         set.add(elem);
//         return set;
//     }
// 
//     public static void deleteFolder(File folder) {
//         if (folder != null && folder.exists()) {
//             File[] files = folder.listFiles();
//             if (files != null) { //some JVMs return null for empty dirs
//                 for (File f : files) {
//                     if (f.isDirectory()) {
//                         deleteFolder(f);
//                     } else {
//                         f.delete();
//                     }
//                 }
//             }
//             folder.delete();
//         }
//     }
// }


// Path: src/main/java/at/favre/tools/dconvert/arg/Arguments.java
import at.favre.tools.dconvert.exceptions.InvalidArgumentException;
import at.favre.tools.dconvert.util.MiscUtil;
import java.io.File;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.*;

        public Builder scaleRoundingStragy(RoundingHandler.Strategy strategy) {
            this.roundingStrategy = strategy;
            return this;
        }

        public Builder skipParamValidation(boolean b) {
            this.internalSkipParamValidation = b;
            return this;
        }

        public Builder keepUnoptimizedFilesPostProcessor(boolean b) {
            this.keepUnoptimizedFilesPostProcessor = b;
            return this;
        }

        public Builder iosCreateImagesetFolders(boolean b) {
            this.iosCreateImagesetFolders = b;
            return this;
        }

        public Builder guiAdvancedOptions(boolean b) {
            this.guiAdvancedOptions = b;
            return this;
        }

        public Builder clearDirBeforeConvert(boolean b) {
            this.clearDirBeforeConvert = b;
            return this;
        }

        public Arguments build() throws InvalidArgumentException {