docs: public static void main(final String[] args) {
            if (args == null || args.length == 0) {
                 printUsageAndExit();
            }
  
            /* Parsing will only start if this variable was set. */
            FORCE = false;
            String serverURL = null;
            String destinationFile = null;
            String tempFolder = null;
            String fileAppendix = "";
            Double north = null;
            Double south = null;
            Double east = null;
            Double west = null;
            Integer maxzoom = null;
            int minzoom = 0;
            int threadCount = THREADCOUNT_DEFAULT;
  
            try {
                 for (int i = 0; i < args.length; i += 2) {
                      if (args[i].equals("-u")) {
                           if (i >= args.length) {
                                printUsageAndExit();
                           } else {
                                serverURL = args[i + 1];
                           }
                      } else if (args[i].equals("-force")) {
                           i--;
                           if (i >= args.length) {
                                printUsageAndExit();
                           } else {
                                FORCE = true;
                           }
                      } else if (args[i].equals("-d")) {
                           if (i >= args.length) {
                                printUsageAndExit();
                           } else {
                                destinationFile = args[i + 1];
                           }
                      } else if (args[i].equals("-fa")) {
                           if (i >= args.length) {
                                printUsageAndExit();
                           } else {
                                fileAppendix = args[i + 1];
                           }
                      } else if (args[i].equals("-nthreads")) {
                           if (i >= args.length) {
                                printUsageAndExit();
                           } else {
                                threadCount = Integer.parseInt(args[i + 1]);
                           }
                      } else if (args[i].equals("-zmin")) {
                           if (i >= args.length) {
                                printUsageAndExit();
                           } else {
                                minzoom = Integer.parseInt(args[i + 1]);
                           }
                      } else if (args[i].equals("-zmax")) {
                           if (i >= args.length) {
                                printUsageAndExit();
                           } else {
                                maxzoom = Integer.parseInt(args[i + 1]);
                           }
                      } else if (args[i].equals("-t")) {
                           if (i >= args.length) {
                                printUsageAndExit();
                           } else {
                                tempFolder = args[i + 1];
                           }
                      } else if (args[i].equals("-n")) {
                           if (i >= args.length) {
                                printUsageAndExit();
                           } else {
                                north = Double.parseDouble(args[i + 1]);
                           }
                      } else if (args[i].equals("-s")) {
                           if (i >= args.length) {
                                printUsageAndExit();
                           } else {
                                south = Double.parseDouble(args[i + 1]);
                           }
                      } else if (args[i].equals("-e")) {
                           if (i >= args.length) {
                                printUsageAndExit();
                           } else {
                                east = Double.parseDouble(args[i + 1]);
                           }
                      } else if (args[i].equals("-w")) {
                           if (i >= args.length) {
                                printUsageAndExit();
                           } else {
                                west = Double.parseDouble(args[i + 1]);
                           }
                      } else if (args[i].equals("-gui")){
                            OSMMapTilePackagerUI.main(null);
                            return;
                      }
                 }
            } catch (final NumberFormatException nfe) {
                 printUsageAndExit();
            }
  
            if (tempFolder == null) {
                 printUsageAndExit();
            }
  
            if (serverURL == null && !new File(tempFolder).exists()) {
                 printUsageAndExit();
            }
  
            if (north == null || south == null || east == null || west == null) {
                 printUsageAndExit();
            }
  
            run(serverURL, destinationFile, tempFolder, threadCount, fileAppendix, minzoom, maxzoom, north, south, east, west);
       }