]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
Add QT GUI install program
authorlongpanda <admin@ventoy.net>
Mon, 13 Sep 2021 08:41:51 +0000 (16:41 +0800)
committerlongpanda <admin@ventoy.net>
Mon, 13 Sep 2021 08:41:51 +0000 (16:41 +0800)
61 files changed:
IMG/cpio/ventoy/hook/debian/puppy-disk.sh
IMG/cpio/ventoy/hook/debian/puppy-hook.sh
IMG/cpio/ventoy/hook/debian/ventoy-hook.sh
INSTALL/VentoyGUI.aarch64
INSTALL/VentoyGUI.i386
INSTALL/VentoyGUI.mips64el
INSTALL/VentoyGUI.x86_64
INSTALL/tool/VentoyGTK.glade
INSTALL/tool/aarch64/Ventoy2Disk.gtk3
INSTALL/tool/aarch64/Ventoy2Disk.qt5 [new file with mode: 0644]
INSTALL/tool/distro_gui_type.json [new file with mode: 0644]
INSTALL/tool/i386/Ventoy2Disk.gtk2
INSTALL/tool/i386/Ventoy2Disk.gtk3
INSTALL/tool/i386/Ventoy2Disk.qt5 [new file with mode: 0644]
INSTALL/tool/mips64el/V2DServer
INSTALL/tool/mips64el/Ventoy2Disk.gtk3
INSTALL/tool/mips64el/Ventoy2Disk.qt5 [new file with mode: 0644]
INSTALL/tool/x86_64/Ventoy2Disk.gtk2
INSTALL/tool/x86_64/Ventoy2Disk.gtk3
INSTALL/tool/x86_64/Ventoy2Disk.qt5 [new file with mode: 0644]
INSTALL/ventoy_pack.sh
LinuxGUI/EXLIB/README.txt
LinuxGUI/EXLIB/aarch64libs
LinuxGUI/EXLIB/download_lib.sh [new file with mode: 0644]
LinuxGUI/EXLIB/i386libs [new file with mode: 0644]
LinuxGUI/EXLIB/mips64ellibs
LinuxGUI/EXLIB/prepare_lib_aarch64.sh
LinuxGUI/EXLIB/prepare_lib_i386.sh [new file with mode: 0644]
LinuxGUI/EXLIB/prepare_lib_mips64el.sh
LinuxGUI/Ventoy2Disk/Core/ventoy_define.h
LinuxGUI/Ventoy2Disk/Core/ventoy_json.c
LinuxGUI/Ventoy2Disk/Core/ventoy_log.c
LinuxGUI/Ventoy2Disk/Core/ventoy_util.h
LinuxGUI/Ventoy2Disk/GTK/ventoy_gtk.c
LinuxGUI/Ventoy2Disk/GTK/ventoy_gtk.h
LinuxGUI/Ventoy2Disk/QT/Ventoy2Disk.pro [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/Ventoy2Disk.pro.user [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/build/Makefile [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/build/moc_partcfgdialog.cpp [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/build/moc_predefs.h [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/build/moc_ventoy2diskwindow.cpp [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/build/ui_partcfgdialog.h [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/build/ui_ventoy2diskwindow.h [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/main.cpp [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/partcfgdialog.cpp [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/partcfgdialog.h [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/partcfgdialog.ui [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/refresh_icon_data.c [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/secure_icon_data.c [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/ventoy2diskwindow.cpp [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/ventoy2diskwindow.h [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/ventoy2diskwindow.ui [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/ventoy_qt.h [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/QT/ventoy_qt_stub.c [new file with mode: 0644]
LinuxGUI/Ventoy2Disk/Web/ventoy_http.c
LinuxGUI/Ventoy2Disk/main_gtk.c
LinuxGUI/Ventoy2Disk/main_webui.c
LinuxGUI/Ventoy2Disk/ventoy_gui.c
LinuxGUI/build_gtk.sh
LinuxGUI/build_qt.sh [new file with mode: 0644]
vtoyjump/vtoyjump/vtoyjump.c

index 7f987223db8107b7ed651655fe14a98f583dd35a..600088a28ef6bbd9d356da0b303a27c116aa8d87 100644 (file)
@@ -27,6 +27,33 @@ vtlog "####### $0 $* ########"
 
 VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
 
+ventoy_os_install_dmsetup_by_fuse() {
+    vtlog "ventoy_os_install_dmsetup_by_fuse $*"
+
+    mkdir -p $VTOY_PATH/mnt/fuse $VTOY_PATH/mnt/iso $VTOY_PATH/mnt/squashfs
+
+    vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_dm_table
+    vtoy_fuse_iso -f $VTOY_PATH/ventoy_dm_table -m $VTOY_PATH/mnt/fuse
+
+    mount -t iso9660  $VTOY_PATH/mnt/fuse/ventoy.iso    $VTOY_PATH/mnt/iso
+
+    sfsfile=$(ls $VTOY_PATH/mnt/iso/*.sfs)
+
+    mount -t squashfs $sfsfile  $VTOY_PATH/mnt/squashfs
+
+    kVer=$(uname -r)
+    KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$kVer/kernel/drivers/md/dm-mod.ko*)
+    vtlog "insmod $KoName"
+    insmod $KoName
+
+    umount $VTOY_PATH/mnt/squashfs
+    umount $VTOY_PATH/mnt/iso
+    umount $VTOY_PATH/mnt/fuse
+}
+
+
+
+
 wait_for_usb_disk_ready
 
 vtdiskname=$(get_ventoy_disk_name)
@@ -36,6 +63,12 @@ if [ "$vtdiskname" = "unknown" ]; then
     exit 0
 fi
 
+if grep -q 'device-mapper' /proc/devices; then
+    vtlog "device-mapper module exist"
+else
+    ventoy_os_install_dmsetup_by_fuse  $vtdiskname
+fi
+
 ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
 
 if ! [ -e $VTOY_DM_PATH ]; then
index cbb5a20ba5b72f8a0c063470a15fe2f532cac91b..d2e15638c47e476c23754caecca7d3c85a9936a4 100644 (file)
 #************************************************************************************
 
 $SED '1 apmedia=usbhd'  -i /init
-$SED "/^ *HAVE_PARTS=/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/puppy-disk.sh"  -i /init
-$SED "/^ *HAVE_PARTS=/a\ HAVE_PARTS='ventoy|iso9660'"  -i /init
+
+if $GREP -q 'HAVE_PARTS=' /init; then
+    $SED "/^ *HAVE_PARTS=/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/puppy-disk.sh"  -i /init
+    $SED "/^ *HAVE_PARTS=/a\ HAVE_PARTS='ventoy|iso9660'"  -i /init
+elif $GREP -q 'LESSPARTS=' /init; then
+    $SED "/^ *LESSPARTS=/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/puppy-disk.sh"  -i /init
+    $SED "/^ *LESSPARTS=/a\ LESSPARTS='ventoy|iso9660'"  -i /init
+fi
+
 
 if [ -f /DISTRO_SPECS ]; then
     if ! [ -d /dev ]; then
index 402eb4d3ad2824e9f34fcca6a409d5dc871ead58..40971ca42c7cdb17197ab0445fbe9b82063e1ecb 100644 (file)
@@ -35,7 +35,7 @@ ventoy_get_debian_distro() {
     fi
     
     if [ -e /init ]; then
-        if $GREP -q PUPPYSFS /init; then
+        if $EGREP -q 'PUPPYSFS|PUPPYFILE' /init; then
             if $GREP -q VEKETSFS /init; then
                 echo 'veket'; return
             else
index caa1f62a18d719ade26604a02e2a69df9db145de..d2a2f260438d189cda5251a2e4e970efb6308b80 100644 (file)
Binary files a/INSTALL/VentoyGUI.aarch64 and b/INSTALL/VentoyGUI.aarch64 differ
index 6d3ddb4f87aaf0ca04bf1828765383f567223a56..467df8d5de902ac478bf32784dfec9c92df910da 100644 (file)
Binary files a/INSTALL/VentoyGUI.i386 and b/INSTALL/VentoyGUI.i386 differ
index 80998deec0ba1efb5a9c1126287c5d62962ff53c..2e3424e776bdbc6b18e99685d4d843eaee331041 100644 (file)
Binary files a/INSTALL/VentoyGUI.mips64el and b/INSTALL/VentoyGUI.mips64el differ
index 970d3e5cf6e95747967f41fb5f0baecd3b89130a..45e47f839dc8cb74e689d3d5fc7c5a7f97ddc2e3 100644 (file)
Binary files a/INSTALL/VentoyGUI.x86_64 and b/INSTALL/VentoyGUI.x86_64 differ
index 529aa1abc09fffac5a014b3fd1bb57236043682d..ecf0500a7ffbf1b8b682b41d7c8a209b734f7bef 100644 (file)
@@ -11,6 +11,7 @@
     <property name="resizable">False</property>
     <property name="title" translatable="yes">Partition Configuration</property>
     <property name="modal">True</property>
+    <property name="window_position">center</property>
     <property name="default_width">460</property>
     <property name="default_height">270</property>
     <child>
index a9b2a45f64e9a5c7cca247ffb965bd753fd94ecf..eba4b62f41c7e85b20cd62839f3dae7215895181 100644 (file)
Binary files a/INSTALL/tool/aarch64/Ventoy2Disk.gtk3 and b/INSTALL/tool/aarch64/Ventoy2Disk.gtk3 differ
diff --git a/INSTALL/tool/aarch64/Ventoy2Disk.qt5 b/INSTALL/tool/aarch64/Ventoy2Disk.qt5
new file mode 100644 (file)
index 0000000..f416c31
Binary files /dev/null and b/INSTALL/tool/aarch64/Ventoy2Disk.qt5 differ
diff --git a/INSTALL/tool/distro_gui_type.json b/INSTALL/tool/distro_gui_type.json
new file mode 100644 (file)
index 0000000..cbfbc2f
--- /dev/null
@@ -0,0 +1,23 @@
+[
+    {
+        "type": "env",
+        "name": "DESKTOP_SESSION",
+        "condition": "equal",
+        "expression": "deepin",
+        "gui": "qt5"
+    },
+    {
+        "type": "env",
+        "name": "DESKTOP_SESSION",
+        "condition": "equal",
+        "expression": "uos",
+        "gui": "qt5"
+    },
+    {
+        "type": "env",
+        "name": "DESKTOP_SESSION",
+        "condition": "equal",
+        "expression": "ukui",
+        "gui": "gtk3"
+    }
+]
index 62f05ea08023a6c5377c2a4c2f64dcda094c3869..643d797b69cf06a6b739ba7d503944b90c643506 100644 (file)
Binary files a/INSTALL/tool/i386/Ventoy2Disk.gtk2 and b/INSTALL/tool/i386/Ventoy2Disk.gtk2 differ
index 6b5583859f6f211a5c9bf63a8aeba701ca843613..f3ced7bfb6405e41bec21dcfaf4a36ed61606d45 100644 (file)
Binary files a/INSTALL/tool/i386/Ventoy2Disk.gtk3 and b/INSTALL/tool/i386/Ventoy2Disk.gtk3 differ
diff --git a/INSTALL/tool/i386/Ventoy2Disk.qt5 b/INSTALL/tool/i386/Ventoy2Disk.qt5
new file mode 100644 (file)
index 0000000..1390b35
Binary files /dev/null and b/INSTALL/tool/i386/Ventoy2Disk.qt5 differ
index 469012536dafc1668ea732f8bf70a6e8e9582bdc..4d36cb863709efe5a541760a404a62d076db4fb3 100644 (file)
Binary files a/INSTALL/tool/mips64el/V2DServer and b/INSTALL/tool/mips64el/V2DServer differ
index 5db901843cebb6a110a94ae4ef55ac36394195f4..325d9ca941aeb07b7c6c420f8a0faaddc7b2a6e8 100644 (file)
Binary files a/INSTALL/tool/mips64el/Ventoy2Disk.gtk3 and b/INSTALL/tool/mips64el/Ventoy2Disk.gtk3 differ
diff --git a/INSTALL/tool/mips64el/Ventoy2Disk.qt5 b/INSTALL/tool/mips64el/Ventoy2Disk.qt5
new file mode 100644 (file)
index 0000000..5a8c24a
Binary files /dev/null and b/INSTALL/tool/mips64el/Ventoy2Disk.qt5 differ
index f6a7cffb685ac2c22bd6219ac4762a5cd4b1190b..85a0cea019df49972d4ee3d9fc25b50b441bc65a 100644 (file)
Binary files a/INSTALL/tool/x86_64/Ventoy2Disk.gtk2 and b/INSTALL/tool/x86_64/Ventoy2Disk.gtk2 differ
index 972eecd701fa8e8adc490cf280da0f05789f825d..5f1b9cd2604b3dd4a6384f1cdcdaba8e33849046 100644 (file)
Binary files a/INSTALL/tool/x86_64/Ventoy2Disk.gtk3 and b/INSTALL/tool/x86_64/Ventoy2Disk.gtk3 differ
diff --git a/INSTALL/tool/x86_64/Ventoy2Disk.qt5 b/INSTALL/tool/x86_64/Ventoy2Disk.qt5
new file mode 100644 (file)
index 0000000..b9536a6
Binary files /dev/null and b/INSTALL/tool/x86_64/Ventoy2Disk.qt5 differ
index ed7d12388aee9ceef285aa60469bdba190a94d85..7a4be25f9e7b20c42c4087f659fedf49856f9b7a 100644 (file)
@@ -9,6 +9,7 @@ fi
 dos2unix -q ./tool/ventoy_lib.sh
 dos2unix -q ./tool/VentoyWorker.sh
 dos2unix -q ./tool/VentoyGTK.glade
+dos2unix -q ./tool/distro_gui_type.json
 
 . ./tool/ventoy_lib.sh
 
index 27910daf036ae2c5032eff9c905f79f05b6abe1f..ecbe5574e82874c1cb12c64b180a9d5c705f1d2c 100644 (file)
@@ -5,7 +5,6 @@
 3. sh prepare_lib_aarch64.sh /mnt/Packages/
 
 
-
 ====== MIPS64EL ====== 
 1. build dpkg for CentOS7
 download dpkg_1.18.25.tar.xz from internet.
@@ -15,8 +14,47 @@ make
 cp -a ./src/dpkg /sbin/
 cp -a ./dpkg-deb/dpkg-deb /sbin/
 
-2. download debian 9.x mips64el DVD iso (e.g. debian-9.9.0-mips64el-DVD-1.iso) form internet
-3. download libgtk-3-dev_3.22.11-1_mips64el.deb from internet
-4. mount debian-9.9.0-mips64el-DVD-1.iso /mnt
-5. sh prepare_lib_mips64el.sh /mnt/
+2. download debian 10.x mips64el DVD iso (e.g. debian-10.9.0-mips64el-DVD-1.iso) form internet
+3. mount debian-10.9.0-mips64el-DVD-1.iso /mnt
+4. sh prepare_gtk_lib_mips64el.sh /mnt/
+5. download the following packages from internet and dpkg -x each of them
+pool/main/g/gtk+3.0/libgtk-3-dev_3.24.5-1_mips64el.deb
+pool/main/b/brotli/libbrotli1_1.0.9-2+b2_mips64el.deb
+pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_mips64el.deb
+pool/main/d/double-conversion/libdouble-conversion1_3.1.0-3_mips64el.deb
+pool/main/libg/libglvnd/libgl1_1.3.2-1~bpo10+2_mips64el.deb
+pool/main/libg/libglvnd/libglvnd0_1.3.2-1~bpo10+2_mips64el.deb
+pool/main/libg/libglvnd/libglx0_1.3.2-1~bpo10+2_mips64el.deb
+pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.11.3+dfsg1-1+deb10u4_mips64el.deb
+pool/main/q/qtbase-opensource-src/libqt5core5a_5.11.3+dfsg1-1+deb10u4_mips64el.deb
+pool/main/q/qtbase-opensource-src/libqt5dbus5_5.11.3+dfsg1-1+deb10u4_mips64el.deb 
+pool/main/q/qtbase-opensource-src/libqt5gui5_5.11.3+dfsg1-1+deb10u4_mips64el.deb 
+pool/main/q/qtbase-opensource-src/libqt5network5_5.11.3+dfsg1-1+deb10u4_mips64el.deb
+pool/main/q/qtbase-opensource-src/libqt5opengl5_5.11.3+dfsg1-1+deb10u4_mips64el.deb 
+pool/main/q/qtbase-opensource-src/libqt5opengl5-dev_5.11.3+dfsg1-1+deb10u4_mips64el.deb
+pool/main/q/qtbase-opensource-src/libqt5widgets5_5.11.3+dfsg1-1+deb10u4_mips64el.deb 
+pool/main/q/qtbase-opensource-src/libqt5xml5_5.11.3+dfsg1-1+deb10u4_mips64el.deb  
+pool/main/q/qtbase-opensource-src/qt5-qmake_5.11.3+dfsg1-1+deb10u4_mips64el.deb    
+pool/main/q/qtbase-opensource-src/qtbase5-dev_5.11.3+dfsg1-1+deb10u4_mips64el.deb 
+pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.11.3+dfsg1-1+deb10u4_mips64el.deb
+pool/main/q/qtbase-opensource-src/qtbase5-examples_5.11.3+dfsg1-1+deb10u4_mips64el.deb
+pool/main/q/qtbase-opensource-src/qtbase5-private-dev_5.11.3+dfsg1-1+deb10u4_mips64el.deb
+
+
+==== I386 ===
+We need a CentOS8 environment
+Install CentOS 8 x86_64 system.
+yum update
+yum install gcc
+yum install gcc-c++
+yum install gcc.i686
+yum install glibc.i686 glibc-devel.i686 glibc-headers.i686 glibc-static.i686 glibc-nss-devel.i686
+yum install libstdc++.i686
+yum install harfbuzz.i686
+yum install zlib.i686
+yum install mesa-libGL.i686
+
+pack all /usr /etc directories and extract to /opt/CentOS8/
+
+
 
index b10ae6cf131574ac909cf701aba1b5a90f4535b9..ac280e747d47f613074fab62fac1b2360a48c6e4 100644 (file)
@@ -1,4 +1,7 @@
 gtk3-
+qt5
+GL
+icu
 glib2-
 pango-
 cairo-
diff --git a/LinuxGUI/EXLIB/download_lib.sh b/LinuxGUI/EXLIB/download_lib.sh
new file mode 100644 (file)
index 0000000..54442cd
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+if [ -z "$1" ]; then
+    echo "please input url"
+    exit 1
+fi
+
+if [ -n "$2" ]; then
+    proxy_opt="-x $2"
+fi
+
+rm -rf download
+mkdir -p download
+cd download
+
+grep pool ../README.txt | while read line; do
+    a="$line"
+    b=$(basename "$a")
+    echo "downloading $b ..."
+    curl -s $1/debian/"$a" $proxy_opt -o "$b"
+
+    a=$(echo $line | sed "s/mips64el/i386/g")
+    b=$(basename "$a")
+    echo "downloading $b ..."
+    curl -s $1/debian/"$a" $proxy_opt -o "$b"
+done
+
+cd ..
diff --git a/LinuxGUI/EXLIB/i386libs b/LinuxGUI/EXLIB/i386libs
new file mode 100644 (file)
index 0000000..3e548f6
--- /dev/null
@@ -0,0 +1,7 @@
+libmd
+libzstd
+libpcre2-16
+libicu
+qt5
+libgpg-error
+libpng
index 97117c0a2472a6de1ed6f18cdc685a337796f8f5..705631e22a88bc38396f86f19b0ae071a94a0d5c 100644 (file)
@@ -1,3 +1,8 @@
+libmd
+libzstd
+libpcre2-16
+libicu
+qt5
 libglib2
 libgtk-3
 libpango
index d41601499504884add47213d0caa0284fb22c04d..33075ae7130a272b27f5f5366f63cacba5e25f5d 100644 (file)
@@ -9,8 +9,8 @@ rm -rf aarch64
 mkdir aarch64
 cd aarch64
 
-cat ../aarch64libs | while read line; do
-    ls -1 $1/${line}* | while read rpm; do
+cat ../aarch64libs | while read a; do
+    ls -1 $1/*$a* | while read rpm; do
         echo "extract ${rpm##*/} ..."
         rpm2cpio $rpm | cpio -idmu --quiet
     done
diff --git a/LinuxGUI/EXLIB/prepare_lib_i386.sh b/LinuxGUI/EXLIB/prepare_lib_i386.sh
new file mode 100644 (file)
index 0000000..540c94b
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+if [ ! -d $1/pool ]; then
+    echo "$1/pool not exist"
+    exit 1
+fi
+
+rm -rf i386
+mkdir i386
+cd i386
+
+cat ../i386libs | while read line; do
+    find "$1/pool" -name "*${line}*.deb" | while read deb; do
+        echo "extract ${deb##*/} ..."
+        dpkg -x $deb .
+    done
+done
+
+ls -1 ../download/*i386.deb | while read line; do
+    echo "extract ${line} ..."
+    dpkg -x "$line" .
+done
+
+cd ..
+
index a33ef26bf1c66183c0306973d1d72711b4dc51e3..73e978665661488502e877b1055c77941159169d 100644 (file)
@@ -16,9 +16,10 @@ cat ../mips64ellibs | while read line; do
     done
 done
 
-dpkg -x ../libgtk-3-dev_3.22.11-1_mips64el.deb .
+ls -1 ../download/*mips64el.deb | while read line; do
+    echo "extract ${line} ..."
+    dpkg -x "$line" .
+done
 
 cd ..
 
-
-
index 14b2cf41f61de28fe2a12d5fcb6cb44d2726ab20..01c0fd8747bfc6216e06eadcf54ed7a54fa41ca2 100644 (file)
@@ -31,9 +31,6 @@
 #define VTOYEFI_PART_BYTES    (32 * 1024 * 1024)
 #define VTOYEFI_PART_SECTORS  65536
 
-#define VTOY_LOG_FILE "log.txt"
-
-
 #pragma pack(1)
 
 typedef struct vtoy_guid
index f65a4583ba0a78250a159bbe39f53fe63644e894..8253a1cc7049808605a6e4990720a143f2ec2dbe 100644 (file)
@@ -25,6 +25,8 @@
 #include <stdarg.h>\r
 #include <errno.h>\r
 #include <unistd.h>\r
+#include <sys/types.h>\r
+#include <linux/limits.h>\r
 #include <ventoy_define.h>\r
 #include <ventoy_util.h>\r
 #include <ventoy_json.h>\r
index 86bf0c7ace7dcb4010615cd558d67558c79f0c36..2df37c22c020fc63296101f3aa5f9c98b43d248e 100644 (file)
 #include <unistd.h>
 #include <pthread.h>
 #include <time.h>
+#include <linux/limits.h>
 #include <ventoy_define.h>
 
+extern char g_log_file[PATH_MAX];
 static int g_ventoy_log_level = VLOG_DEBUG;
 static pthread_mutex_t g_log_mutex;
 
@@ -68,7 +70,7 @@ void ventoy_syslog_newline(int level, const char *Fmt, ...)
     va_end(arg);
 
     pthread_mutex_lock(&g_log_mutex);
-    fp = fopen(VTOY_LOG_FILE, "a+");
+    fp = fopen(g_log_file, "a+");
     if (fp)
     {
         fprintf(fp, "[%04u/%02u/%02u %02u:%02u:%02u] %s\n", 
@@ -96,7 +98,7 @@ void ventoy_syslog_printf(const char *Fmt, ...)
     va_end(arg);
 
     pthread_mutex_lock(&g_log_mutex);
-    fp = fopen(VTOY_LOG_FILE, "a+");
+    fp = fopen(g_log_file, "a+");
     if (fp)
     {
         fprintf(fp, "[%04u/%02u/%02u %02u:%02u:%02u] %s", 
@@ -129,7 +131,7 @@ void ventoy_syslog(int level, const char *Fmt, ...)
     va_end(arg);
 
     pthread_mutex_lock(&g_log_mutex);
-    fp = fopen(VTOY_LOG_FILE, "a+");
+    fp = fopen(g_log_file, "a+");
     if (fp)
     {
         fprintf(fp, "[%04u/%02u/%02u %02u:%02u:%02u] %s", 
index 72cec62d6a32de0acb6246d1cd868c879b67f648..87eb5463a1caa66fdba5586a9e8aad019e003ffa 100644 (file)
@@ -20,6 +20,9 @@
 #ifndef __VENTOY_UTIL_H__
 #define __VENTOY_UTIL_H__
 
+extern char g_log_file[PATH_MAX];
+extern char g_ini_file[PATH_MAX];
+
 #define check_free(p) if (p) free(p)
 #define vtoy_safe_close_fd(fd) \
 {\
index e705247127527de54e957139fba96a69f8c4949a..8a97b2d55e1418e7c6e298401e8689dc4a1a1983 100644 (file)
@@ -26,6 +26,7 @@
 #include <errno.h>
 #include <time.h>
 #include <unistd.h>
+#include <linux/limits.h>
 
 #include <ventoy_define.h>
 #include <ventoy_json.h>
@@ -300,14 +301,22 @@ void on_part_style_toggled(GtkMenuItem *menuItem, gpointer data)
 static ventoy_disk *select_active_dev(const char *select, int *activeid)
 {
     int i;
+    int alldev;
     ventoy_disk *cur = NULL;
 
+    alldev = ventoy_code_get_cur_show_all();
+    
     /* find the match one */
     if (select)
     {
         for (i = 0; i < g_disk_num; i++)
         {
             cur = g_disk_list + i;
+            if (alldev == 0 && cur->type != VTOY_DEVICE_USB)
+            {
+                continue;
+            }
+            
             if (strcmp(cur->disk_name, select) == 0)
             {
                 *activeid = i;
@@ -320,6 +329,11 @@ static ventoy_disk *select_active_dev(const char *select, int *activeid)
     for (i = 0; i < g_disk_num; i++)
     {
         cur = g_disk_list + i;
+        if (alldev == 0 && cur->type != VTOY_DEVICE_USB)
+        {
+            continue;
+        }
+        
         if (cur->vtoydata.ventoy_valid)
         {
             *activeid = i;
@@ -331,6 +345,11 @@ static ventoy_disk *select_active_dev(const char *select, int *activeid)
     for (i = 0; i < g_disk_num; i++)
     {
         cur = g_disk_list + i;
+        if (alldev == 0 && cur->type != VTOY_DEVICE_USB)
+        {
+            continue;
+        }
+        
         if (cur->type == VTOY_DEVICE_USB)
         {
             *activeid = i;
@@ -339,8 +358,19 @@ static ventoy_disk *select_active_dev(const char *select, int *activeid)
     }
 
     /* use the first one */
-    *activeid = 0;
-    return g_disk_list;
+    for (i = 0; i < g_disk_num; i++)
+    {
+        cur = g_disk_list + i;
+        if (alldev == 0 && cur->type != VTOY_DEVICE_USB)
+        {
+            continue;
+        }
+        
+        *activeid = i;
+        return cur;
+    }
+        
+    return NULL;
 }
 
 static void fill_dev_list(const char *select)
@@ -613,6 +643,8 @@ static int install_proc(ventoy_disk *cur)
 void on_button_install_clicked(GtkWidget *widget, gpointer data) 
 {
     int active;
+    long long size;
+    long long space;
     ventoy_disk *cur = NULL;
 
     if (g_thread_run || ventoy_code_is_busy())
@@ -636,6 +668,27 @@ void on_button_install_clicked(GtkWidget *widget, gpointer data)
         return;
     }
 
+    if (g_preserve_space_check)
+    {
+        space = g_preserve_space_number;
+        if (g_preserve_space_unit == 1)
+        {
+            space = space * 1024;
+        }
+        else
+        {
+            space = space;
+        }
+
+        size = cur->size_in_byte / SIZE_1MB;
+        if (size <= space || (size - space) <= (VTOYEFI_PART_BYTES / SIZE_1MB))
+       {
+           msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "STR_SPACE_VAL_INVALID");
+               vlog("reserved space value too big ...\n");
+               return;
+       }
+    }
+
     if (GTK_RESPONSE_CANCEL == msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, "STR_INSTALL_TIP"))
     {
         return;
index 9f7440c67b195d9b632eec7a583259884035263c..d3c5e5c7d8d19b30acc4bdf9badb34181214c2da 100644 (file)
@@ -45,8 +45,6 @@ int ventoy_code_get_percent(void);
 int ventoy_code_get_result(void);
 int msgbox(GtkMessageType type, GtkButtonsType buttons, const char *strid);
 
-#define MAX_PARAS   64
-
 #define VTOY_VER_FMT "<span weight='bold' foreground='red' size='xx-large'>%s</span>"
 
 #define LANG_LABEL_TEXT(id, str) \
diff --git a/LinuxGUI/Ventoy2Disk/QT/Ventoy2Disk.pro b/LinuxGUI/Ventoy2Disk/QT/Ventoy2Disk.pro
new file mode 100644 (file)
index 0000000..ad7484e
--- /dev/null
@@ -0,0 +1,139 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    Core/ventoy_crc32.c \
+    Core/ventoy_disk.c \
+    Core/ventoy_json.c \
+    Core/ventoy_log.c \
+    Core/ventoy_md5.c \
+    Core/ventoy_util.c \
+    Lib/exfat/src/libexfat/cluster.c \
+    Lib/exfat/src/libexfat/io.c \
+    Lib/exfat/src/libexfat/lookup.c \
+    Lib/exfat/src/libexfat/mount.c \
+    Lib/exfat/src/libexfat/node.c \
+    Lib/exfat/src/libexfat/repair.c \
+    Lib/exfat/src/libexfat/time.c \
+    Lib/exfat/src/libexfat/utf.c \
+    Lib/exfat/src/libexfat/utils.c \
+    Lib/exfat/src/mkfs/cbm.c \
+    Lib/exfat/src/mkfs/fat.c \
+    Lib/exfat/src/mkfs/mkexfat.c \
+    Lib/exfat/src/mkfs/mkexfat_main.c \
+    Lib/exfat/src/mkfs/rootdir.c \
+    Lib/exfat/src/mkfs/uct.c \
+    Lib/exfat/src/mkfs/uctc.c \
+    Lib/exfat/src/mkfs/vbr.c \
+    Lib/fat_io_lib/fat_access.c \
+    Lib/fat_io_lib/fat_cache.c \
+    Lib/fat_io_lib/fat_filelib.c \
+    Lib/fat_io_lib/fat_format.c \
+    Lib/fat_io_lib/fat_misc.c \
+    Lib/fat_io_lib/fat_string.c \
+    Lib/fat_io_lib/fat_table.c \
+    Lib/fat_io_lib/fat_write.c \
+    Lib/xz-embedded/linux/lib/decompress_unxz.c \
+    QT/refresh_icon_data.c \
+    QT/secure_icon_data.c \
+    QT/ventoy_qt_stub.c \
+    Web/ventoy_http.c \
+    main.cpp \
+    partcfgdialog.cpp \
+    ventoy2diskwindow.cpp
+
+HEADERS += \
+    Core/ventoy_define.h \
+    Core/ventoy_disk.h \
+    Core/ventoy_json.h \
+    Core/ventoy_util.h \
+    Include/Ventoy2Disk.h \
+    Lib/exfat/src/libexfat/byteorder.h \
+    Lib/exfat/src/libexfat/compiler.h \
+    Lib/exfat/src/libexfat/config.h \
+    Lib/exfat/src/libexfat/exfat.h \
+    Lib/exfat/src/libexfat/exfatfs.h \
+    Lib/exfat/src/libexfat/platform.h \
+    Lib/exfat/src/mkfs/cbm.h \
+    Lib/exfat/src/mkfs/fat.h \
+    Lib/exfat/src/mkfs/mkexfat.h \
+    Lib/exfat/src/mkfs/rootdir.h \
+    Lib/exfat/src/mkfs/uct.h \
+    Lib/exfat/src/mkfs/uctc.h \
+    Lib/exfat/src/mkfs/vbr.h \
+    Lib/fat_io_lib/fat_access.h \
+    Lib/fat_io_lib/fat_cache.h \
+    Lib/fat_io_lib/fat_defs.h \
+    Lib/fat_io_lib/fat_filelib.h \
+    Lib/fat_io_lib/fat_format.h \
+    Lib/fat_io_lib/fat_list.h \
+    Lib/fat_io_lib/fat_misc.h \
+    Lib/fat_io_lib/fat_opts.h \
+    Lib/fat_io_lib/fat_string.h \
+    Lib/fat_io_lib/fat_table.h \
+    Lib/fat_io_lib/fat_types.h \
+    Lib/fat_io_lib/fat_write.h \
+    Lib/libhttp/include/civetweb.h \
+    Lib/libhttp/include/handle_form.inl \
+    Lib/libhttp/include/md5.inl \
+    Lib/libhttp/include/mod_duktape.inl \
+    Lib/libhttp/include/mod_lua.inl \
+    Lib/libhttp/include/timer.inl \
+    QT/ventoy_qt.h \
+    Web/ventoy_http.h \
+    partcfgdialog.h \
+    ventoy2diskwindow.h
+
+FORMS += \
+    partcfgdialog.ui \
+    ventoy2diskwindow.ui
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
+
+DISTFILES += \
+    Lib/fat_io_lib/API.txt \
+    Lib/fat_io_lib/COPYRIGHT.txt \
+    Lib/fat_io_lib/Configuration.txt \
+    Lib/fat_io_lib/History.txt \
+    Lib/fat_io_lib/License.txt \
+    Lib/fat_io_lib/Media Access API.txt \
+    Lib/fat_io_lib/version.txt
+
+
+INCLUDEPATH +=/home/panda/Ventoy2Disk/Core
+INCLUDEPATH +=/home/panda/Ventoy2Disk/Web
+INCLUDEPATH +=/home/panda/Ventoy2Disk/QT
+INCLUDEPATH +=/home/panda/Ventoy2Disk/Include
+INCLUDEPATH +=/home/panda/Ventoy2Disk/Lib/libhttp/include
+INCLUDEPATH +=/home/panda/Ventoy2Disk/Lib/fat_io_lib/include
+INCLUDEPATH +=/home/panda/Ventoy2Disk/Lib/xz-embedded/linux/include
+INCLUDEPATH +=/home/panda/Ventoy2Disk/Lib/xz-embedded/linux/include/linux
+INCLUDEPATH +=/home/panda/Ventoy2Disk/Lib/xz-embedded/userspace
+INCLUDEPATH +=/home/panda/Ventoy2Disk/Lib/exfat/src/libexfat
+INCLUDEPATH +=/home/panda/Ventoy2Disk/Lib/fat_io_lib
+#INCLUDEPATH +=/usr/src/linux-headers-5.10.18-amd64-desktop/include
+#INCLUDEPATH +=/usr/src/linux-headers-5.10.18-amd64-desktop/arch/x86/include
+#INCLUDEPATH +=/usr/src/linux-headers-5.10.18-amd64-desktop/arch/x86/include/generated
+
+
+DEFINES += STATIC=static
+DEFINES += INIT=
+
+
diff --git a/LinuxGUI/Ventoy2Disk/QT/Ventoy2Disk.pro.user b/LinuxGUI/Ventoy2Disk/QT/Ventoy2Disk.pro.user
new file mode 100644 (file)
index 0000000..26acce2
--- /dev/null
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QtCreatorProject>
+<!-- Written by QtCreator 4.12.2, 2021-09-10T13:54:00. -->
+<qtcreator>
+ <data>
+  <variable>EnvironmentId</variable>
+  <value type="QByteArray">{666f325e-a9c7-45d6-a820-626289f99bab}</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.ActiveTarget</variable>
+  <value type="int">0</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.EditorSettings</variable>
+  <valuemap type="QVariantMap">
+   <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
+   <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
+   <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
+   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
+    <value type="QString" key="language">Cpp</value>
+    <valuemap type="QVariantMap" key="value">
+     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
+    </valuemap>
+   </valuemap>
+   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
+    <value type="QString" key="language">QmlJS</value>
+    <valuemap type="QVariantMap" key="value">
+     <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
+    </valuemap>
+   </valuemap>
+   <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
+   <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
+   <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
+   <value type="int" key="EditorConfiguration.IndentSize">4</value>
+   <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
+   <value type="int" key="EditorConfiguration.MarginColumn">80</value>
+   <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
+   <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
+   <value type="int" key="EditorConfiguration.PaddingMode">1</value>
+   <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
+   <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
+   <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
+   <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
+   <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
+   <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
+   <value type="int" key="EditorConfiguration.TabSize">8</value>
+   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+   <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
+   <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
+   <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
+   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+   <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.PluginSettings</variable>
+  <valuemap type="QVariantMap">
+   <valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
+   <value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
+   <value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
+   <valuemap type="QVariantMap" key="ClangTools">
+    <value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
+    <value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
+    <value type="int" key="ClangTools.ParallelJobs">2</value>
+    <valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
+    <valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
+    <valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
+    <value type="bool" key="ClangTools.UseGlobalSettings">true</value>
+   </valuemap>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Target.0</variable>
+  <valuemap type="QVariantMap">
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.12.9 GCC 64bit</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.12.9 GCC 64bit</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5129.gcc_64_kit</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+    <value type="bool">true</value>
+    <value type="int" key="EnableQmlDebugging">0</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/panda/build-Ventoy2Disk-Desktop_Qt_5_12_9_GCC_64bit-Debug</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/panda/build-Ventoy2Disk-Desktop_Qt_5_12_9_GCC_64bit-Debug</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+    <value type="int" key="QtQuickCompiler">2</value>
+    <value type="int" key="SeparateDebugInfo">2</value>
+   </valuemap>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+    <value type="bool">true</value>
+    <value type="int" key="EnableQmlDebugging">2</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/panda/build-Ventoy2Disk-Desktop_Qt_5_12_9_GCC_64bit-Release</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/panda/build-Ventoy2Disk-Desktop_Qt_5_12_9_GCC_64bit-Release</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+    <value type="int" key="QtQuickCompiler">0</value>
+    <value type="int" key="SeparateDebugInfo">2</value>
+   </valuemap>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
+    <value type="bool">true</value>
+    <value type="int" key="EnableQmlDebugging">0</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/panda/build-Ventoy2Disk-Desktop_Qt_5_12_9_GCC_64bit-Profile</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/panda/build-Ventoy2Disk-Desktop_Qt_5_12_9_GCC_64bit-Profile</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+    <value type="int" key="QtQuickCompiler">0</value>
+    <value type="int" key="SeparateDebugInfo">0</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
+    <value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+    <value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
+    <valuelist type="QVariantList" key="Analyzer.Perf.Events">
+     <value type="QString">cpu-cycles</value>
+    </valuelist>
+    <valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
+    <value type="int" key="Analyzer.Perf.Frequency">250</value>
+    <valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
+     <value type="QString">-e</value>
+     <value type="QString">cpu-cycles</value>
+     <value type="QString">--call-graph</value>
+     <value type="QString">dwarf,4096</value>
+     <value type="QString">-F</value>
+     <value type="QString">250</value>
+    </valuelist>
+    <value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
+    <value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
+    <value type="int" key="Analyzer.Perf.StackSize">4096</value>
+    <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+    <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+    <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+    <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+    <value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
+    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+     <value type="int">0</value>
+     <value type="int">1</value>
+     <value type="int">2</value>
+     <value type="int">3</value>
+     <value type="int">4</value>
+     <value type="int">5</value>
+     <value type="int">6</value>
+     <value type="int">7</value>
+     <value type="int">8</value>
+     <value type="int">9</value>
+     <value type="int">10</value>
+     <value type="int">11</value>
+     <value type="int">12</value>
+     <value type="int">13</value>
+     <value type="int">14</value>
+    </valuelist>
+    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/panda/Ventoy2Disk/Ventoy2Disk.pro</value>
+    <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/panda/Ventoy2Disk/Ventoy2Disk.pro</value>
+    <value type="QString" key="RunConfiguration.Arguments"></value>
+    <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
+    <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
+    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
+    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+    <value type="QString" key="RunConfiguration.WorkingDirectory">/home/panda/Desktop/ventoy-1.0.52-linux/ventoy-1.0.52</value>
+    <value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/panda/build-Ventoy2Disk-Desktop_Qt_5_12_9_GCC_64bit-Debug</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.TargetCount</variable>
+  <value type="int">1</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+  <value type="int">22</value>
+ </data>
+ <data>
+  <variable>Version</variable>
+  <value type="int">22</value>
+ </data>
+</qtcreator>
diff --git a/LinuxGUI/Ventoy2Disk/QT/build/Makefile b/LinuxGUI/Ventoy2Disk/QT/build/Makefile
new file mode 100644 (file)
index 0000000..40d4a53
--- /dev/null
@@ -0,0 +1,1760 @@
+#############################################################################
+# Makefile for building: Ventoy2Disk
+# Generated by qmake (3.1) (Qt 5.9.0)
+# Project:  ../Ventoy2Disk/Ventoy2Disk.pro
+# Template: app
+# Command: /home/panda/Qt5.9.0/5.9/gcc_64/bin/qmake -o Makefile ../Ventoy2Disk/Ventoy2Disk.pro -spec linux-g++
+#############################################################################
+
+MAKEFILE      = Makefile
+
+####### Compiler, tools and options
+
+CC            = gcc
+CXX           = g++
+DEFINES       = -DQT_DEPRECATED_WARNINGS -DSTATIC=static -DINIT= -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
+CFLAGS        = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES)
+CXXFLAGS      = -pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC $(DEFINES)
+INCPATH       = -I../Ventoy2Disk -I. -I../../Ventoy2Disk/Core -I../../Ventoy2Disk/Web -I../../Ventoy2Disk/QT -I../../Ventoy2Disk/Include -I../../Ventoy2Disk/Lib/libhttp/include -I/home/panda/Ventoy2Disk/Lib/fat_io_lib/include -I../../Ventoy2Disk/Lib/xz-embedded/linux/include -I../../Ventoy2Disk/Lib/xz-embedded/linux/include/linux -I../../Ventoy2Disk/Lib/xz-embedded/userspace -I../../Ventoy2Disk/Lib/exfat/src/libexfat -I../../Ventoy2Disk/Lib/fat_io_lib -I../../Qt5.9.0/5.9/gcc_64/include -I../../Qt5.9.0/5.9/gcc_64/include/QtWidgets -I../../Qt5.9.0/5.9/gcc_64/include/QtGui -I../../Qt5.9.0/5.9/gcc_64/include/QtCore -I. -isystem /usr/include/libdrm -I. -I../../Qt5.9.0/5.9/gcc_64/mkspecs/linux-g++
+QMAKE         = /home/panda/Qt5.9.0/5.9/gcc_64/bin/qmake
+DEL_FILE      = rm -f
+CHK_DIR_EXISTS= test -d
+MKDIR         = mkdir -p
+COPY          = cp -f
+COPY_FILE     = cp -f
+COPY_DIR      = cp -f -R
+INSTALL_FILE  = install -m 644 -p
+INSTALL_PROGRAM = install -m 755 -p
+INSTALL_DIR   = cp -f -R
+QINSTALL_FILE = /home/panda/Qt5.9.0/5.9/gcc_64/bin/qmake -install qinstall file
+QINSTALL_PROGRAM = /home/panda/Qt5.9.0/5.9/gcc_64/bin/qmake -install qinstall program
+QINSTALL_DIR  = /home/panda/Qt5.9.0/5.9/gcc_64/bin/qmake -install qinstall directory
+DEL_FILE      = rm -f
+SYMLINK       = ln -f -s
+DEL_DIR       = rmdir
+MOVE          = mv -f
+TAR           = tar -cf
+COMPRESS      = gzip -9f
+DISTNAME      = Ventoy2Disk1.0.0
+DISTDIR = /home/panda/590/build-Ventoy2Disk-Desktop_Qt_5_9_0_GCC_64bit-Release/.tmp/Ventoy2Disk1.0.0
+LINK          = g++
+LFLAGS        = -Wl,-O1 -Wl,-rpath,/home/panda/Qt5.9.0/5.9/gcc_64/lib
+LIBS          = $(SUBLIBS) -L/home/panda/Qt5.9.0/5.9/gcc_64/lib -lQt5Widgets -lQt5Gui -lQt5Core -lGL -lpthread 
+AR            = ar cqs
+RANLIB        = 
+SED           = sed
+STRIP         = strip
+
+####### Output directory
+
+OBJECTS_DIR   = ./
+
+####### Files
+
+SOURCES       = ../Ventoy2Disk/Core/ventoy_crc32.c \
+               ../Ventoy2Disk/Core/ventoy_disk.c \
+               ../Ventoy2Disk/Core/ventoy_json.c \
+               ../Ventoy2Disk/Core/ventoy_log.c \
+               ../Ventoy2Disk/Core/ventoy_md5.c \
+               ../Ventoy2Disk/Core/ventoy_util.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/cluster.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/io.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/lookup.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/mount.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/node.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/repair.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/time.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/utf.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/utils.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/cbm.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/fat.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat_main.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/rootdir.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uctc.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/vbr.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_access.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_cache.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_filelib.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_format.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_string.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_table.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_write.c \
+               ../Ventoy2Disk/Lib/xz-embedded/linux/lib/decompress_unxz.c \
+               ../Ventoy2Disk/QT/refresh_icon_data.c \
+               ../Ventoy2Disk/QT/secure_icon_data.c \
+               ../Ventoy2Disk/QT/ventoy_qt_stub.c \
+               ../Ventoy2Disk/Web/ventoy_http.c \
+               ../Ventoy2Disk/main.cpp \
+               ../Ventoy2Disk/partcfgdialog.cpp \
+               ../Ventoy2Disk/ventoy2diskwindow.cpp moc_partcfgdialog.cpp \
+               moc_ventoy2diskwindow.cpp
+OBJECTS       = ventoy_crc32.o \
+               ventoy_disk.o \
+               ventoy_json.o \
+               ventoy_log.o \
+               ventoy_md5.o \
+               ventoy_util.o \
+               cluster.o \
+               io.o \
+               lookup.o \
+               mount.o \
+               node.o \
+               repair.o \
+               time.o \
+               utf.o \
+               utils.o \
+               cbm.o \
+               fat.o \
+               mkexfat.o \
+               mkexfat_main.o \
+               rootdir.o \
+               uct.o \
+               uctc.o \
+               vbr.o \
+               fat_access.o \
+               fat_cache.o \
+               fat_filelib.o \
+               fat_format.o \
+               fat_misc.o \
+               fat_string.o \
+               fat_table.o \
+               fat_write.o \
+               decompress_unxz.o \
+               refresh_icon_data.o \
+               secure_icon_data.o \
+               ventoy_qt_stub.o \
+               ventoy_http.o \
+               main.o \
+               partcfgdialog.o \
+               ventoy2diskwindow.o \
+               moc_partcfgdialog.o \
+               moc_ventoy2diskwindow.o
+DIST          = ../Ventoy2Disk/Lib/fat_io_lib/API.txt \
+               ../Ventoy2Disk/Lib/fat_io_lib/COPYRIGHT.txt \
+               ../Ventoy2Disk/Lib/fat_io_lib/Configuration.txt \
+               ../Ventoy2Disk/Lib/fat_io_lib/History.txt \
+               ../Ventoy2Disk/Lib/fat_io_lib/License.txt \
+               ../Ventoy2Disk/Lib/fat_io_lib/Media \
+               ../Ventoy2Disk/Access \
+               ../Ventoy2Disk/API.txt \
+               ../Ventoy2Disk/Lib/fat_io_lib/version.txt \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/spec_pre.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/unix.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/linux.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/sanitize.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/gcc-base.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/gcc-base-unix.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/g++-base.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/g++-unix.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/qconfig.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3danimation.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3danimation_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dcore.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dcore_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dextras.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dextras_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dinput.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dinput_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dlogic.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dlogic_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquick.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquick_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickanimation.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickanimation_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickextras.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickextras_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickinput.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickinput_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickrender.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickrender_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickscene2d.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3drender.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3drender_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_accessibility_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_bluetooth.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_bluetooth_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_bootstrap_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_charts.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_charts_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_concurrent.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_concurrent_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_core.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_core_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_datavisualization.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_datavisualization_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_dbus.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_dbus_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_designer.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_designer_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_designercomponents_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_egl_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_fb_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_gamepad.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_gamepad_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_glx_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_gui.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_gui_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_help.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_help_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_input_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_kms_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_location.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_location_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_multimedia.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_multimedia_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_multimediawidgets.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_network.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_network_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_nfc.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_nfc_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_opengl.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_opengl_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_openglextensions.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_openglextensions_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_packetprotocol_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_positioning.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_positioning_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_printsupport.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_printsupport_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qml.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qml_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qmldebug_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qmldevtools_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qmltest.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qmltest_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quick.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quick_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickcontrols2.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickparticles_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickwidgets.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickwidgets_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_scxml.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_scxml_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_sensors.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_sensors_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_serialbus.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_serialbus_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_serialport.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_serialport_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_service_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_sql.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_sql_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_svg.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_svg_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_testlib.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_testlib_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_theme_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_uiplugin.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_uitools.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_uitools_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webchannel.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webchannel_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webengine.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webengine_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginecore.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginecore_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginewidgets.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginewidgets_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_websockets.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_websockets_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webview.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webview_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_widgets.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_widgets_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_x11extras.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_x11extras_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xml.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xml_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xmlpatterns.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/qt_functions.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/qt_config.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/linux-g++/qmake.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/spec_post.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/exclusive_builds.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/toolchain.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/default_pre.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/resolve_config.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/default_post.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/warn_on.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/qt.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/resources.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/moc.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/unix/opengl.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/uic.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/unix/thread.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/qmake_use.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/file_copies.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/testcase_targets.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/exceptions.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/yacc.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/lex.prf \
+               ../Ventoy2Disk/Ventoy2Disk.pro ../Ventoy2Disk/Core/ventoy_define.h \
+               ../Ventoy2Disk/Core/ventoy_disk.h \
+               ../Ventoy2Disk/Core/ventoy_json.h \
+               ../Ventoy2Disk/Core/ventoy_util.h \
+               ../Ventoy2Disk/Include/Ventoy2Disk.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/cbm.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/fat.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/rootdir.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uctc.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/vbr.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_access.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_cache.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_defs.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_filelib.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_format.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_list.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_opts.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_string.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_table.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_types.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_write.h \
+               ../Ventoy2Disk/Lib/libhttp/include/civetweb.h \
+               ../Ventoy2Disk/Lib/libhttp/include/handle_form.inl \
+               ../Ventoy2Disk/Lib/libhttp/include/md5.inl \
+               ../Ventoy2Disk/Lib/libhttp/include/mod_duktape.inl \
+               ../Ventoy2Disk/Lib/libhttp/include/mod_lua.inl \
+               ../Ventoy2Disk/Lib/libhttp/include/timer.inl \
+               ../Ventoy2Disk/QT/ventoy_qt.h \
+               ../Ventoy2Disk/Web/ventoy_http.h \
+               ../Ventoy2Disk/partcfgdialog.h \
+               ../Ventoy2Disk/ventoy2diskwindow.h ../Ventoy2Disk/Core/ventoy_crc32.c \
+               ../Ventoy2Disk/Core/ventoy_disk.c \
+               ../Ventoy2Disk/Core/ventoy_json.c \
+               ../Ventoy2Disk/Core/ventoy_log.c \
+               ../Ventoy2Disk/Core/ventoy_md5.c \
+               ../Ventoy2Disk/Core/ventoy_util.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/cluster.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/io.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/lookup.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/mount.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/node.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/repair.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/time.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/utf.c \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/utils.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/cbm.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/fat.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat_main.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/rootdir.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uctc.c \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/vbr.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_access.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_cache.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_filelib.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_format.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_string.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_table.c \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_write.c \
+               ../Ventoy2Disk/Lib/xz-embedded/linux/lib/decompress_unxz.c \
+               ../Ventoy2Disk/QT/refresh_icon_data.c \
+               ../Ventoy2Disk/QT/secure_icon_data.c \
+               ../Ventoy2Disk/QT/ventoy_qt_stub.c \
+               ../Ventoy2Disk/Web/ventoy_http.c \
+               ../Ventoy2Disk/main.cpp \
+               ../Ventoy2Disk/partcfgdialog.cpp \
+               ../Ventoy2Disk/ventoy2diskwindow.cpp
+QMAKE_TARGET  = Ventoy2Disk
+DESTDIR       = 
+TARGET        = Ventoy2Disk
+
+
+first: all
+####### Build rules
+
+$(TARGET): ui_partcfgdialog.h ui_ventoy2diskwindow.h $(OBJECTS)  
+       $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
+
+Makefile: ../Ventoy2Disk/Ventoy2Disk.pro ../../Qt5.9.0/5.9/gcc_64/mkspecs/linux-g++/qmake.conf ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/spec_pre.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/unix.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/linux.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/sanitize.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/gcc-base.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/gcc-base-unix.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/g++-base.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/common/g++-unix.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/qconfig.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3danimation.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3danimation_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dcore.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dcore_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dextras.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dextras_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dinput.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dinput_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dlogic.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dlogic_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquick.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquick_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickanimation.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickanimation_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickextras.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickextras_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickinput.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickinput_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickrender.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickrender_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickscene2d.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3drender.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3drender_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_accessibility_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_bluetooth.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_bluetooth_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_bootstrap_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_charts.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_charts_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_concurrent.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_concurrent_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_core.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_core_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_datavisualization.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_datavisualization_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_dbus.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_dbus_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_designer.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_designer_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_designercomponents_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_egl_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_fb_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_gamepad.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_gamepad_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_glx_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_gui.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_gui_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_help.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_help_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_input_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_kms_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_location.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_location_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_multimedia.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_multimedia_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_multimediawidgets.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_network.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_network_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_nfc.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_nfc_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_opengl.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_opengl_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_openglextensions.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_openglextensions_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_packetprotocol_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_positioning.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_positioning_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_printsupport.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_printsupport_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qml.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qml_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qmldebug_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qmldevtools_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qmltest.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qmltest_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quick.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quick_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickcontrols2.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickparticles_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickwidgets.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickwidgets_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_scxml.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_scxml_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_sensors.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_sensors_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_serialbus.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_serialbus_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_serialport.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_serialport_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_service_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_sql.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_sql_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_svg.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_svg_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_testlib.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_testlib_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_theme_support_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_uiplugin.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_uitools.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_uitools_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webchannel.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webchannel_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webengine.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webengine_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginecore.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginecore_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginewidgets.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginewidgets_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_websockets.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_websockets_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webview.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webview_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_widgets.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_widgets_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_x11extras.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_x11extras_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xml.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xml_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xmlpatterns.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/qt_functions.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/qt_config.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/linux-g++/qmake.conf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/spec_post.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/exclusive_builds.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/toolchain.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/default_pre.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/resolve_config.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/default_post.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/warn_on.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/qt.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/resources.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/moc.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/unix/opengl.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/uic.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/unix/thread.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/qmake_use.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/file_copies.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/testcase_targets.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/exceptions.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/yacc.prf \
+               ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/lex.prf \
+               ../Ventoy2Disk/Ventoy2Disk.pro \
+               ../../Qt5.9.0/5.9/gcc_64/lib/libQt5Widgets.prl \
+               ../../Qt5.9.0/5.9/gcc_64/lib/libQt5Gui.prl \
+               ../../Qt5.9.0/5.9/gcc_64/lib/libQt5Core.prl
+       $(QMAKE) -o Makefile ../Ventoy2Disk/Ventoy2Disk.pro -spec linux-g++
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/spec_pre.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/common/unix.conf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/common/linux.conf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/common/sanitize.conf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/common/gcc-base.conf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/common/gcc-base-unix.conf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/common/g++-base.conf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/common/g++-unix.conf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/qconfig.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3danimation.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3danimation_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dcore.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dcore_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dextras.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dextras_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dinput.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dinput_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dlogic.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dlogic_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquick.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquick_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickanimation.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickanimation_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickextras.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickextras_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickinput.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickinput_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickrender.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickrender_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickscene2d.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3dquickscene2d_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3drender.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_3drender_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_accessibility_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_bluetooth.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_bluetooth_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_bootstrap_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_charts.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_charts_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_concurrent.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_concurrent_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_core.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_core_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_datavisualization.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_datavisualization_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_dbus.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_dbus_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_designer.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_designer_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_designercomponents_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_egl_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_fb_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_fontdatabase_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_gamepad.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_gamepad_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_glx_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_gui.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_gui_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_help.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_help_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_input_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_kms_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_location.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_location_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_multimedia.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_multimedia_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_multimediawidgets.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_network.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_network_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_nfc.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_nfc_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_opengl.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_opengl_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_openglextensions.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_openglextensions_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_packetprotocol_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_platformcompositor_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_positioning.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_positioning_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_printsupport.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_printsupport_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qml.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qml_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qmldebug_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qmldevtools_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qmltest.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qmltest_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quick.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quick_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickcontrols2.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickparticles_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickwidgets.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_quickwidgets_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_scxml.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_scxml_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_sensors.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_sensors_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_serialbus.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_serialbus_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_serialport.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_serialport_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_service_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_sql.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_sql_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_svg.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_svg_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_testlib.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_testlib_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_theme_support_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_uiplugin.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_uitools.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_uitools_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webchannel.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webchannel_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webengine.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webengine_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginecore.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginecore_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginewidgets.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webenginewidgets_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_websockets.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_websockets_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webview.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_webview_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_widgets.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_widgets_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_x11extras.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_x11extras_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xml.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xml_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xmlpatterns.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/modules/qt_lib_xmlpatterns_private.pri:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/qt_functions.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/qt_config.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/linux-g++/qmake.conf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/spec_post.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/exclusive_builds.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/toolchain.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/default_pre.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/resolve_config.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/default_post.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/warn_on.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/qt.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/resources.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/moc.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/unix/opengl.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/uic.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/unix/thread.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/qmake_use.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/file_copies.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/testcase_targets.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/exceptions.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/yacc.prf:
+../../Qt5.9.0/5.9/gcc_64/mkspecs/features/lex.prf:
+../Ventoy2Disk/Ventoy2Disk.pro:
+../../Qt5.9.0/5.9/gcc_64/lib/libQt5Widgets.prl:
+../../Qt5.9.0/5.9/gcc_64/lib/libQt5Gui.prl:
+../../Qt5.9.0/5.9/gcc_64/lib/libQt5Core.prl:
+qmake: FORCE
+       @$(QMAKE) -o Makefile ../Ventoy2Disk/Ventoy2Disk.pro -spec linux-g++
+
+qmake_all: FORCE
+
+
+all: Makefile $(TARGET)
+
+dist: distdir FORCE
+       (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)
+
+distdir: FORCE
+       @test -d $(DISTDIR) || mkdir -p $(DISTDIR)
+       $(COPY_FILE) --parents $(DIST) $(DISTDIR)/
+       $(COPY_FILE) --parents ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/data/dummy.cpp $(DISTDIR)/
+       $(COPY_FILE) --parents ../Ventoy2Disk/Core/ventoy_define.h ../Ventoy2Disk/Core/ventoy_disk.h ../Ventoy2Disk/Core/ventoy_json.h ../Ventoy2Disk/Core/ventoy_util.h ../Ventoy2Disk/Include/Ventoy2Disk.h ../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h ../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h ../Ventoy2Disk/Lib/exfat/src/libexfat/config.h ../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h ../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h ../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h ../Ventoy2Disk/Lib/exfat/src/mkfs/cbm.h ../Ventoy2Disk/Lib/exfat/src/mkfs/fat.h ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.h ../Ventoy2Disk/Lib/exfat/src/mkfs/rootdir.h ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.h ../Ventoy2Disk/Lib/exfat/src/mkfs/uctc.h ../Ventoy2Disk/Lib/exfat/src/mkfs/vbr.h ../Ventoy2Disk/Lib/fat_io_lib/fat_access.h ../Ventoy2Disk/Lib/fat_io_lib/fat_cache.h ../Ventoy2Disk/Lib/fat_io_lib/fat_defs.h ../Ventoy2Disk/Lib/fat_io_lib/fat_filelib.h ../Ventoy2Disk/Lib/fat_io_lib/fat_format.h ../Ventoy2Disk/Lib/fat_io_lib/fat_list.h ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.h ../Ventoy2Disk/Lib/fat_io_lib/fat_opts.h ../Ventoy2Disk/Lib/fat_io_lib/fat_string.h ../Ventoy2Disk/Lib/fat_io_lib/fat_table.h ../Ventoy2Disk/Lib/fat_io_lib/fat_types.h ../Ventoy2Disk/Lib/fat_io_lib/fat_write.h ../Ventoy2Disk/Lib/libhttp/include/civetweb.h ../Ventoy2Disk/Lib/libhttp/include/handle_form.inl ../Ventoy2Disk/Lib/libhttp/include/md5.inl ../Ventoy2Disk/Lib/libhttp/include/mod_duktape.inl ../Ventoy2Disk/Lib/libhttp/include/mod_lua.inl ../Ventoy2Disk/Lib/libhttp/include/timer.inl ../Ventoy2Disk/QT/ventoy_qt.h ../Ventoy2Disk/Web/ventoy_http.h ../Ventoy2Disk/partcfgdialog.h ../Ventoy2Disk/ventoy2diskwindow.h $(DISTDIR)/
+       $(COPY_FILE) --parents ../Ventoy2Disk/Core/ventoy_crc32.c ../Ventoy2Disk/Core/ventoy_disk.c ../Ventoy2Disk/Core/ventoy_json.c ../Ventoy2Disk/Core/ventoy_log.c ../Ventoy2Disk/Core/ventoy_md5.c ../Ventoy2Disk/Core/ventoy_util.c ../Ventoy2Disk/Lib/exfat/src/libexfat/cluster.c ../Ventoy2Disk/Lib/exfat/src/libexfat/io.c ../Ventoy2Disk/Lib/exfat/src/libexfat/lookup.c ../Ventoy2Disk/Lib/exfat/src/libexfat/mount.c ../Ventoy2Disk/Lib/exfat/src/libexfat/node.c ../Ventoy2Disk/Lib/exfat/src/libexfat/repair.c ../Ventoy2Disk/Lib/exfat/src/libexfat/time.c ../Ventoy2Disk/Lib/exfat/src/libexfat/utf.c ../Ventoy2Disk/Lib/exfat/src/libexfat/utils.c ../Ventoy2Disk/Lib/exfat/src/mkfs/cbm.c ../Ventoy2Disk/Lib/exfat/src/mkfs/fat.c ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.c ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat_main.c ../Ventoy2Disk/Lib/exfat/src/mkfs/rootdir.c ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.c ../Ventoy2Disk/Lib/exfat/src/mkfs/uctc.c ../Ventoy2Disk/Lib/exfat/src/mkfs/vbr.c ../Ventoy2Disk/Lib/fat_io_lib/fat_access.c ../Ventoy2Disk/Lib/fat_io_lib/fat_cache.c ../Ventoy2Disk/Lib/fat_io_lib/fat_filelib.c ../Ventoy2Disk/Lib/fat_io_lib/fat_format.c ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.c ../Ventoy2Disk/Lib/fat_io_lib/fat_string.c ../Ventoy2Disk/Lib/fat_io_lib/fat_table.c ../Ventoy2Disk/Lib/fat_io_lib/fat_write.c ../Ventoy2Disk/Lib/xz-embedded/linux/lib/decompress_unxz.c ../Ventoy2Disk/QT/refresh_icon_data.c ../Ventoy2Disk/QT/secure_icon_data.c ../Ventoy2Disk/QT/ventoy_qt_stub.c ../Ventoy2Disk/Web/ventoy_http.c ../Ventoy2Disk/main.cpp ../Ventoy2Disk/partcfgdialog.cpp ../Ventoy2Disk/ventoy2diskwindow.cpp $(DISTDIR)/
+       $(COPY_FILE) --parents ../Ventoy2Disk/partcfgdialog.ui ../Ventoy2Disk/ventoy2diskwindow.ui $(DISTDIR)/
+
+
+clean: compiler_clean 
+       -$(DEL_FILE) $(OBJECTS)
+       -$(DEL_FILE) *~ core *.core
+
+
+distclean: clean 
+       -$(DEL_FILE) $(TARGET) 
+       -$(DEL_FILE) .qmake.stash
+       -$(DEL_FILE) Makefile
+
+
+####### Sub-libraries
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+check: first
+
+benchmark: first
+
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_moc_predefs_make_all: moc_predefs.h
+compiler_moc_predefs_clean:
+       -$(DEL_FILE) moc_predefs.h
+moc_predefs.h: ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/data/dummy.cpp
+       g++ -pipe -O2 -std=gnu++11 -Wall -W -dM -E -o moc_predefs.h ../../Qt5.9.0/5.9/gcc_64/mkspecs/features/data/dummy.cpp
+
+compiler_moc_header_make_all: moc_partcfgdialog.cpp moc_ventoy2diskwindow.cpp
+compiler_moc_header_clean:
+       -$(DEL_FILE) moc_partcfgdialog.cpp moc_ventoy2diskwindow.cpp
+moc_partcfgdialog.cpp: ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QDialog \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qdialog.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtwidgetsglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtguiglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qconfig-bootstrapped.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qconfig.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtcore-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsystemdetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qprocessordetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcompilerdetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtypeinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsysinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlogging.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qflags.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbasicatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_bootstrap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qgenericatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_cxx11.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_msvc.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qglobalstatic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmutex.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qnumeric.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qversiontagging.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtgui-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtwidgets-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qwidget.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qwindowdefs.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobjectdefs.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qnamespace.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobjectdefs_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qwindowdefs_win.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobject.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstring.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qchar.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbytearray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qrefcount.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qarraydata.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringbuilder.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qalgorithms.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qiterator.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qhashfunctions.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qpair.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbytearraylist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringlist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qregexp.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringmatcher.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcoreevent.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qscopedpointer.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmetatype.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvarlengtharray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcontainerfwd.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobject_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmargins.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpaintdevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qrect.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsize.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qpoint.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpalette.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qcolor.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qrgb.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qrgba64.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qbrush.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvector.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qmatrix.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpolygon.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qregion.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qdatastream.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qiodevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qline.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtransform.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpainterpath.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qimage.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpixelformat.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpixmap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsharedpointer.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qshareddata.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qhash.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsharedpointer_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfont.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfontmetrics.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfontinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qsizepolicy.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qcursor.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qkeysequence.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qevent.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvariant.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qdebug.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtextstream.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlocale.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qset.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcontiguouscache.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qurl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qurlquery.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qfile.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qfiledevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qvector2d.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtouchdevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QJsonObject \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonobject.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonvalue.h \
+               ../Ventoy2Disk/partcfgdialog.h \
+               moc_predefs.h \
+               ../../Qt5.9.0/5.9/gcc_64/bin/moc
+       /home/panda/Qt5.9.0/5.9/gcc_64/bin/moc $(DEFINES) --include ./moc_predefs.h -I/home/panda/Qt5.9.0/5.9/gcc_64/mkspecs/linux-g++ -I/home/panda/590/Ventoy2Disk -I/home/panda/Ventoy2Disk/Core -I/home/panda/Ventoy2Disk/Web -I/home/panda/Ventoy2Disk/QT -I/home/panda/Ventoy2Disk/Include -I/home/panda/Ventoy2Disk/Lib/libhttp/include -I/home/panda/Ventoy2Disk/Lib/fat_io_lib/include -I/home/panda/Ventoy2Disk/Lib/xz-embedded/linux/include -I/home/panda/Ventoy2Disk/Lib/xz-embedded/linux/include/linux -I/home/panda/Ventoy2Disk/Lib/xz-embedded/userspace -I/home/panda/Ventoy2Disk/Lib/exfat/src/libexfat -I/home/panda/Ventoy2Disk/Lib/fat_io_lib -I/home/panda/Qt5.9.0/5.9/gcc_64/include -I/home/panda/Qt5.9.0/5.9/gcc_64/include/QtWidgets -I/home/panda/Qt5.9.0/5.9/gcc_64/include/QtGui -I/home/panda/Qt5.9.0/5.9/gcc_64/include/QtCore -I. -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -I/usr/include/c++/8/backward -I/usr/lib/gcc/x86_64-linux-gnu/8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include ../Ventoy2Disk/partcfgdialog.h -o moc_partcfgdialog.cpp
+
+moc_ventoy2diskwindow.cpp: ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QMainWindow \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qmainwindow.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtwidgetsglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtguiglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qconfig-bootstrapped.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qconfig.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtcore-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsystemdetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qprocessordetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcompilerdetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtypeinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsysinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlogging.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qflags.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbasicatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_bootstrap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qgenericatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_cxx11.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_msvc.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qglobalstatic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmutex.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qnumeric.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qversiontagging.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtgui-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtwidgets-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qwidget.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qwindowdefs.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobjectdefs.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qnamespace.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobjectdefs_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qwindowdefs_win.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobject.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstring.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qchar.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbytearray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qrefcount.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qarraydata.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringbuilder.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qalgorithms.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qiterator.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qhashfunctions.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qpair.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbytearraylist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringlist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qregexp.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringmatcher.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcoreevent.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qscopedpointer.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmetatype.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvarlengtharray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcontainerfwd.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobject_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmargins.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpaintdevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qrect.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsize.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qpoint.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpalette.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qcolor.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qrgb.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qrgba64.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qbrush.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvector.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qmatrix.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpolygon.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qregion.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qdatastream.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qiodevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qline.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtransform.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpainterpath.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qimage.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpixelformat.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpixmap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsharedpointer.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qshareddata.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qhash.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsharedpointer_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfont.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfontmetrics.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfontinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qsizepolicy.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qcursor.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qkeysequence.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qevent.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvariant.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qdebug.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtextstream.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlocale.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qset.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcontiguouscache.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qurl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qurlquery.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qfile.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qfiledevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qvector2d.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtouchdevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtabwidget.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qicon.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QActionGroup \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qactiongroup.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qaction.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QJsonDocument \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsondocument.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonvalue.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QFile \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QJsonObject \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonobject.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QJsonArray \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonarray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QVector \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QtGlobal \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QDebug \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/QCloseEvent \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QThread \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qthread.h \
+               ../Ventoy2Disk/partcfgdialog.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QDialog \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qdialog.h \
+               ../Ventoy2Disk/ventoy2diskwindow.h \
+               moc_predefs.h \
+               ../../Qt5.9.0/5.9/gcc_64/bin/moc
+       /home/panda/Qt5.9.0/5.9/gcc_64/bin/moc $(DEFINES) --include ./moc_predefs.h -I/home/panda/Qt5.9.0/5.9/gcc_64/mkspecs/linux-g++ -I/home/panda/590/Ventoy2Disk -I/home/panda/Ventoy2Disk/Core -I/home/panda/Ventoy2Disk/Web -I/home/panda/Ventoy2Disk/QT -I/home/panda/Ventoy2Disk/Include -I/home/panda/Ventoy2Disk/Lib/libhttp/include -I/home/panda/Ventoy2Disk/Lib/fat_io_lib/include -I/home/panda/Ventoy2Disk/Lib/xz-embedded/linux/include -I/home/panda/Ventoy2Disk/Lib/xz-embedded/linux/include/linux -I/home/panda/Ventoy2Disk/Lib/xz-embedded/userspace -I/home/panda/Ventoy2Disk/Lib/exfat/src/libexfat -I/home/panda/Ventoy2Disk/Lib/fat_io_lib -I/home/panda/Qt5.9.0/5.9/gcc_64/include -I/home/panda/Qt5.9.0/5.9/gcc_64/include/QtWidgets -I/home/panda/Qt5.9.0/5.9/gcc_64/include/QtGui -I/home/panda/Qt5.9.0/5.9/gcc_64/include/QtCore -I. -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -I/usr/include/c++/8/backward -I/usr/lib/gcc/x86_64-linux-gnu/8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include ../Ventoy2Disk/ventoy2diskwindow.h -o moc_ventoy2diskwindow.cpp
+
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all: ui_partcfgdialog.h ui_ventoy2diskwindow.h
+compiler_uic_clean:
+       -$(DEL_FILE) ui_partcfgdialog.h ui_ventoy2diskwindow.h
+ui_partcfgdialog.h: ../Ventoy2Disk/partcfgdialog.ui \
+               ../../Qt5.9.0/5.9/gcc_64/bin/uic
+       /home/panda/Qt5.9.0/5.9/gcc_64/bin/uic ../Ventoy2Disk/partcfgdialog.ui -o ui_partcfgdialog.h
+
+ui_ventoy2diskwindow.h: ../Ventoy2Disk/ventoy2diskwindow.ui \
+               ../../Qt5.9.0/5.9/gcc_64/bin/uic
+       /home/panda/Qt5.9.0/5.9/gcc_64/bin/uic ../Ventoy2Disk/ventoy2diskwindow.ui -o ui_ventoy2diskwindow.h
+
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_predefs_clean compiler_moc_header_clean compiler_uic_clean 
+
+####### Compile
+
+ventoy_crc32.o: ../Ventoy2Disk/Core/ventoy_crc32.c 
+       $(CC) -c $(CFLAGS) $(INCPATH) -o ventoy_crc32.o ../Ventoy2Disk/Core/ventoy_crc32.c
+
+ventoy_disk.o: ../Ventoy2Disk/Core/ventoy_disk.c ../../Ventoy2Disk/Core/ventoy_define.h \
+               ../../Ventoy2Disk/Core/ventoy_disk.h \
+               ../../Ventoy2Disk/Core/ventoy_util.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_filelib.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_opts.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_access.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_defs.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_types.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_list.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o ventoy_disk.o ../Ventoy2Disk/Core/ventoy_disk.c
+
+ventoy_json.o: ../Ventoy2Disk/Core/ventoy_json.c ../../Ventoy2Disk/Core/ventoy_define.h \
+               ../../Ventoy2Disk/Core/ventoy_util.h \
+               ../../Ventoy2Disk/Core/ventoy_json.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o ventoy_json.o ../Ventoy2Disk/Core/ventoy_json.c
+
+ventoy_log.o: ../Ventoy2Disk/Core/ventoy_log.c ../../Ventoy2Disk/Core/ventoy_define.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o ventoy_log.o ../Ventoy2Disk/Core/ventoy_log.c
+
+ventoy_md5.o: ../Ventoy2Disk/Core/ventoy_md5.c 
+       $(CC) -c $(CFLAGS) $(INCPATH) -o ventoy_md5.o ../Ventoy2Disk/Core/ventoy_md5.c
+
+ventoy_util.o: ../Ventoy2Disk/Core/ventoy_util.c ../../Ventoy2Disk/Core/ventoy_define.h \
+               ../../Ventoy2Disk/Core/ventoy_util.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o ventoy_util.o ../Ventoy2Disk/Core/ventoy_util.c
+
+cluster.o: ../Ventoy2Disk/Lib/exfat/src/libexfat/cluster.c ../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o cluster.o ../Ventoy2Disk/Lib/exfat/src/libexfat/cluster.c
+
+io.o: ../Ventoy2Disk/Lib/exfat/src/libexfat/io.c ../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o io.o ../Ventoy2Disk/Lib/exfat/src/libexfat/io.c
+
+lookup.o: ../Ventoy2Disk/Lib/exfat/src/libexfat/lookup.c ../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o lookup.o ../Ventoy2Disk/Lib/exfat/src/libexfat/lookup.c
+
+mount.o: ../Ventoy2Disk/Lib/exfat/src/libexfat/mount.c ../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o mount.o ../Ventoy2Disk/Lib/exfat/src/libexfat/mount.c
+
+node.o: ../Ventoy2Disk/Lib/exfat/src/libexfat/node.c ../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o node.o ../Ventoy2Disk/Lib/exfat/src/libexfat/node.c
+
+repair.o: ../Ventoy2Disk/Lib/exfat/src/libexfat/repair.c ../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o repair.o ../Ventoy2Disk/Lib/exfat/src/libexfat/repair.c
+
+time.o: ../Ventoy2Disk/Lib/exfat/src/libexfat/time.c ../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o time.o ../Ventoy2Disk/Lib/exfat/src/libexfat/time.c
+
+utf.o: ../Ventoy2Disk/Lib/exfat/src/libexfat/utf.c ../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o utf.o ../Ventoy2Disk/Lib/exfat/src/libexfat/utf.c
+
+utils.o: ../Ventoy2Disk/Lib/exfat/src/libexfat/utils.c ../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o utils.o ../Ventoy2Disk/Lib/exfat/src/libexfat/utils.c
+
+cbm.o: ../Ventoy2Disk/Lib/exfat/src/mkfs/cbm.c ../Ventoy2Disk/Lib/exfat/src/mkfs/cbm.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/fat.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/rootdir.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o cbm.o ../Ventoy2Disk/Lib/exfat/src/mkfs/cbm.c
+
+fat.o: ../Ventoy2Disk/Lib/exfat/src/mkfs/fat.c ../Ventoy2Disk/Lib/exfat/src/mkfs/fat.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/cbm.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/rootdir.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o fat.o ../Ventoy2Disk/Lib/exfat/src/mkfs/fat.c
+
+mkexfat.o: ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.c ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o mkexfat.o ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.c
+
+mkexfat_main.o: ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat_main.c ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/vbr.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/fat.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/cbm.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/rootdir.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o mkexfat_main.o ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat_main.c
+
+rootdir.o: ../Ventoy2Disk/Lib/exfat/src/mkfs/rootdir.c ../Ventoy2Disk/Lib/exfat/src/mkfs/rootdir.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/cbm.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uctc.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o rootdir.o ../Ventoy2Disk/Lib/exfat/src/mkfs/rootdir.c
+
+uct.o: ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.c ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uctc.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o uct.o ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.c
+
+uctc.o: ../Ventoy2Disk/Lib/exfat/src/mkfs/uctc.c ../Ventoy2Disk/Lib/exfat/src/mkfs/uctc.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o uctc.o ../Ventoy2Disk/Lib/exfat/src/mkfs/uctc.c
+
+vbr.o: ../Ventoy2Disk/Lib/exfat/src/mkfs/vbr.c ../Ventoy2Disk/Lib/exfat/src/mkfs/vbr.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/mkexfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfat.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/config.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/compiler.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/exfatfs.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/byteorder.h \
+               ../../Ventoy2Disk/Lib/exfat/src/libexfat/platform.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/fat.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/cbm.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/uct.h \
+               ../Ventoy2Disk/Lib/exfat/src/mkfs/rootdir.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o vbr.o ../Ventoy2Disk/Lib/exfat/src/mkfs/vbr.c
+
+fat_access.o: ../Ventoy2Disk/Lib/fat_io_lib/fat_access.c ../../Ventoy2Disk/Lib/fat_io_lib/fat_defs.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_opts.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_types.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_access.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_table.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_write.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_string.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o fat_access.o ../Ventoy2Disk/Lib/fat_io_lib/fat_access.c
+
+fat_cache.o: ../Ventoy2Disk/Lib/fat_io_lib/fat_cache.c ../Ventoy2Disk/Lib/fat_io_lib/fat_cache.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_filelib.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_opts.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_access.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_defs.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_types.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_list.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o fat_cache.o ../Ventoy2Disk/Lib/fat_io_lib/fat_cache.c
+
+fat_filelib.o: ../Ventoy2Disk/Lib/fat_io_lib/fat_filelib.c ../../Ventoy2Disk/Lib/fat_io_lib/fat_defs.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_opts.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_types.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_access.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_table.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_write.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_string.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_filelib.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_list.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_cache.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o fat_filelib.o ../Ventoy2Disk/Lib/fat_io_lib/fat_filelib.c
+
+fat_format.o: ../Ventoy2Disk/Lib/fat_io_lib/fat_format.c ../../Ventoy2Disk/Lib/fat_io_lib/fat_defs.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_opts.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_types.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_access.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_table.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_write.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_string.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_format.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o fat_format.o ../Ventoy2Disk/Lib/fat_io_lib/fat_format.c
+
+fat_misc.o: ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.c ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_defs.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_opts.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_types.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o fat_misc.o ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.c
+
+fat_string.o: ../Ventoy2Disk/Lib/fat_io_lib/fat_string.c ../Ventoy2Disk/Lib/fat_io_lib/fat_string.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o fat_string.o ../Ventoy2Disk/Lib/fat_io_lib/fat_string.c
+
+fat_table.o: ../Ventoy2Disk/Lib/fat_io_lib/fat_table.c ../../Ventoy2Disk/Lib/fat_io_lib/fat_defs.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_opts.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_types.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_access.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_table.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o fat_table.o ../Ventoy2Disk/Lib/fat_io_lib/fat_table.c
+
+fat_write.o: ../Ventoy2Disk/Lib/fat_io_lib/fat_write.c ../../Ventoy2Disk/Lib/fat_io_lib/fat_defs.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_opts.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_types.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_access.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_table.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_misc.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_write.h \
+               ../Ventoy2Disk/Lib/fat_io_lib/fat_string.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o fat_write.o ../Ventoy2Disk/Lib/fat_io_lib/fat_write.c
+
+decompress_unxz.o: ../Ventoy2Disk/Lib/xz-embedded/linux/lib/decompress_unxz.c ../../Ventoy2Disk/Lib/xz-embedded/linux/include/linux/xz.h \
+               ../Ventoy2Disk/Lib/xz-embedded/linux/lib/xz/xz_private.h \
+               ../../Ventoy2Disk/Lib/xz-embedded/userspace/xz_config.h \
+               ../Ventoy2Disk/Lib/xz-embedded/linux/lib/xz/xz_crc32.c \
+               ../Ventoy2Disk/Lib/xz-embedded/linux/lib/xz/xz_dec_stream.c \
+               ../Ventoy2Disk/Lib/xz-embedded/linux/lib/xz/xz_stream.h \
+               ../Ventoy2Disk/Lib/xz-embedded/linux/lib/xz/xz_dec_lzma2.c \
+               ../Ventoy2Disk/Lib/xz-embedded/linux/lib/xz/xz_lzma2.h \
+               ../Ventoy2Disk/Lib/xz-embedded/linux/lib/xz/xz_dec_bcj.c
+       $(CC) -c $(CFLAGS) $(INCPATH) -o decompress_unxz.o ../Ventoy2Disk/Lib/xz-embedded/linux/lib/decompress_unxz.c
+
+refresh_icon_data.o: ../Ventoy2Disk/QT/refresh_icon_data.c 
+       $(CC) -c $(CFLAGS) $(INCPATH) -o refresh_icon_data.o ../Ventoy2Disk/QT/refresh_icon_data.c
+
+secure_icon_data.o: ../Ventoy2Disk/QT/secure_icon_data.c 
+       $(CC) -c $(CFLAGS) $(INCPATH) -o secure_icon_data.o ../Ventoy2Disk/QT/secure_icon_data.c
+
+ventoy_qt_stub.o: ../Ventoy2Disk/QT/ventoy_qt_stub.c ../../Ventoy2Disk/Core/ventoy_define.h \
+               ../../Ventoy2Disk/Core/ventoy_json.h \
+               ../../Ventoy2Disk/Core/ventoy_util.h \
+               ../../Ventoy2Disk/Core/ventoy_disk.h \
+               ../../Ventoy2Disk/Web/ventoy_http.h \
+               ../../Ventoy2Disk/Lib/libhttp/include/civetweb.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o ventoy_qt_stub.o ../Ventoy2Disk/QT/ventoy_qt_stub.c
+
+ventoy_http.o: ../Ventoy2Disk/Web/ventoy_http.c ../../Ventoy2Disk/Core/ventoy_define.h \
+               ../../Ventoy2Disk/Core/ventoy_json.h \
+               ../../Ventoy2Disk/Core/ventoy_util.h \
+               ../../Ventoy2Disk/Core/ventoy_disk.h \
+               ../../Ventoy2Disk/Web/ventoy_http.h \
+               ../../Ventoy2Disk/Lib/libhttp/include/civetweb.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_filelib.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_opts.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_access.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_defs.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_types.h \
+               ../../Ventoy2Disk/Lib/fat_io_lib/fat_list.h
+       $(CC) -c $(CFLAGS) $(INCPATH) -o ventoy_http.o ../Ventoy2Disk/Web/ventoy_http.c
+
+main.o: ../Ventoy2Disk/main.cpp ../Ventoy2Disk/ventoy2diskwindow.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QMainWindow \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qmainwindow.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtwidgetsglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtguiglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qconfig-bootstrapped.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qconfig.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtcore-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsystemdetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qprocessordetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcompilerdetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtypeinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsysinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlogging.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qflags.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbasicatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_bootstrap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qgenericatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_cxx11.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_msvc.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qglobalstatic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmutex.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qnumeric.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qversiontagging.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtgui-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtwidgets-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qwidget.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qwindowdefs.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobjectdefs.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qnamespace.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobjectdefs_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qwindowdefs_win.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobject.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstring.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qchar.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbytearray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qrefcount.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qarraydata.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringbuilder.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qalgorithms.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qiterator.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qhashfunctions.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qpair.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbytearraylist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringlist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qregexp.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringmatcher.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcoreevent.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qscopedpointer.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmetatype.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvarlengtharray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcontainerfwd.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobject_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmargins.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpaintdevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qrect.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsize.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qpoint.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpalette.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qcolor.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qrgb.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qrgba64.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qbrush.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvector.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qmatrix.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpolygon.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qregion.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qdatastream.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qiodevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qline.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtransform.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpainterpath.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qimage.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpixelformat.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpixmap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsharedpointer.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qshareddata.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qhash.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsharedpointer_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfont.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfontmetrics.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfontinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qsizepolicy.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qcursor.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qkeysequence.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qevent.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvariant.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qdebug.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtextstream.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlocale.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qset.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcontiguouscache.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qurl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qurlquery.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qfile.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qfiledevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qvector2d.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtouchdevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtabwidget.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qicon.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QActionGroup \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qactiongroup.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qaction.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QJsonDocument \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsondocument.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonvalue.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QFile \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QJsonObject \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonobject.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QJsonArray \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonarray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QVector \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QtGlobal \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QDebug \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/QCloseEvent \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QThread \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qthread.h \
+               ../Ventoy2Disk/partcfgdialog.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QDialog \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qdialog.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QApplication \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qapplication.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcoreapplication.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qeventloop.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qdesktopwidget.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qguiapplication.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qinputmethod.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QMessageBox \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qmessagebox.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QFileInfo \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qfileinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QStyle \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qstyle.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QDesktopWidget \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/QPixmap \
+               ../../Ventoy2Disk/Core/ventoy_define.h \
+               ../../Ventoy2Disk/Core/ventoy_util.h \
+               ../../Ventoy2Disk/QT/ventoy_qt.h
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../Ventoy2Disk/main.cpp
+
+partcfgdialog.o: ../Ventoy2Disk/partcfgdialog.cpp ../Ventoy2Disk/partcfgdialog.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QDialog \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qdialog.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtwidgetsglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtguiglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qconfig-bootstrapped.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qconfig.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtcore-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsystemdetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qprocessordetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcompilerdetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtypeinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsysinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlogging.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qflags.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbasicatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_bootstrap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qgenericatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_cxx11.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_msvc.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qglobalstatic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmutex.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qnumeric.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qversiontagging.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtgui-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtwidgets-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qwidget.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qwindowdefs.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobjectdefs.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qnamespace.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobjectdefs_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qwindowdefs_win.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobject.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstring.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qchar.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbytearray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qrefcount.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qarraydata.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringbuilder.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qalgorithms.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qiterator.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qhashfunctions.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qpair.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbytearraylist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringlist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qregexp.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringmatcher.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcoreevent.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qscopedpointer.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmetatype.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvarlengtharray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcontainerfwd.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobject_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmargins.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpaintdevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qrect.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsize.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qpoint.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpalette.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qcolor.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qrgb.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qrgba64.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qbrush.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvector.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qmatrix.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpolygon.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qregion.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qdatastream.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qiodevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qline.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtransform.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpainterpath.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qimage.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpixelformat.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpixmap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsharedpointer.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qshareddata.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qhash.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsharedpointer_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfont.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfontmetrics.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfontinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qsizepolicy.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qcursor.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qkeysequence.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qevent.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvariant.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qdebug.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtextstream.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlocale.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qset.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcontiguouscache.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qurl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qurlquery.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qfile.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qfiledevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qvector2d.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtouchdevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QJsonObject \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonobject.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonvalue.h \
+               ui_partcfgdialog.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QDebug \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QMessageBox \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qmessagebox.h
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o partcfgdialog.o ../Ventoy2Disk/partcfgdialog.cpp
+
+ventoy2diskwindow.o: ../Ventoy2Disk/ventoy2diskwindow.cpp ../Ventoy2Disk/ventoy2diskwindow.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QMainWindow \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qmainwindow.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtwidgetsglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtguiglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qglobal.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qconfig-bootstrapped.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qconfig.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtcore-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsystemdetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qprocessordetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcompilerdetection.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtypeinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsysinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlogging.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qflags.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbasicatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_bootstrap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qgenericatomic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_cxx11.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qatomic_msvc.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qglobalstatic.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmutex.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qnumeric.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qversiontagging.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtgui-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtwidgets-config.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qwidget.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qwindowdefs.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobjectdefs.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qnamespace.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobjectdefs_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qwindowdefs_win.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobject.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstring.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qchar.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbytearray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qrefcount.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qarraydata.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringbuilder.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qalgorithms.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qiterator.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qhashfunctions.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qpair.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qbytearraylist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringlist.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qregexp.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qstringmatcher.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcoreevent.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qscopedpointer.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmetatype.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvarlengtharray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcontainerfwd.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qobject_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmargins.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpaintdevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qrect.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsize.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qpoint.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpalette.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qcolor.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qrgb.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qrgba64.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qbrush.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvector.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qmatrix.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpolygon.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qregion.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qdatastream.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qiodevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qline.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtransform.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpainterpath.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qimage.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpixelformat.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qpixmap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsharedpointer.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qshareddata.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qhash.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qsharedpointer_impl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfont.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfontmetrics.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qfontinfo.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qsizepolicy.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qcursor.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qkeysequence.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qevent.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qvariant.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qmap.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qdebug.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qtextstream.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qlocale.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qset.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qcontiguouscache.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qurl.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qurlquery.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qfile.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qfiledevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qvector2d.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qtouchdevice.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qtabwidget.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/qicon.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QActionGroup \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qactiongroup.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qaction.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QJsonDocument \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsondocument.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonvalue.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QFile \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QJsonObject \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonobject.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QJsonArray \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qjsonarray.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QVector \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QtGlobal \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QDebug \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtGui/QCloseEvent \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/QThread \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtCore/qthread.h \
+               ../Ventoy2Disk/partcfgdialog.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QDialog \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qdialog.h \
+               ui_ventoy2diskwindow.h \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/QMessageBox \
+               ../../Qt5.9.0/5.9/gcc_64/include/QtWidgets/qmessagebox.h \
+               ../../Ventoy2Disk/Core/ventoy_define.h \
+               ../../Ventoy2Disk/Core/ventoy_util.h \
+               ../../Ventoy2Disk/Core/ventoy_disk.h \
+               ../../Ventoy2Disk/Core/ventoy_json.h \
+               ../../Ventoy2Disk/Web/ventoy_http.h \
+               ../../Ventoy2Disk/Lib/libhttp/include/civetweb.h \
+               ../../Ventoy2Disk/QT/ventoy_qt.h
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o ventoy2diskwindow.o ../Ventoy2Disk/ventoy2diskwindow.cpp
+
+moc_partcfgdialog.o: moc_partcfgdialog.cpp 
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_partcfgdialog.o moc_partcfgdialog.cpp
+
+moc_ventoy2diskwindow.o: moc_ventoy2diskwindow.cpp 
+       $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_ventoy2diskwindow.o moc_ventoy2diskwindow.cpp
+
+####### Install
+
+install_target: first FORCE
+       @test -d $(INSTALL_ROOT)/opt/Ventoy2Disk/bin || mkdir -p $(INSTALL_ROOT)/opt/Ventoy2Disk/bin
+       -$(QINSTALL_PROGRAM) $(QMAKE_TARGET) $(INSTALL_ROOT)/opt/Ventoy2Disk/bin/$(QMAKE_TARGET)
+       -$(STRIP) $(INSTALL_ROOT)/opt/Ventoy2Disk/bin/$(QMAKE_TARGET)
+
+uninstall_target: FORCE
+       -$(DEL_FILE) $(INSTALL_ROOT)/opt/Ventoy2Disk/bin/$(QMAKE_TARGET)
+       -$(DEL_DIR) $(INSTALL_ROOT)/opt/Ventoy2Disk/bin/ 
+
+
+install: install_target  FORCE
+
+uninstall: uninstall_target  FORCE
+
+FORCE:
+
diff --git a/LinuxGUI/Ventoy2Disk/QT/build/moc_partcfgdialog.cpp b/LinuxGUI/Ventoy2Disk/QT/build/moc_partcfgdialog.cpp
new file mode 100644 (file)
index 0000000..5bd328b
--- /dev/null
@@ -0,0 +1,124 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'partcfgdialog.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.9.0)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../partcfgdialog.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'partcfgdialog.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.9.0. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+struct qt_meta_stringdata_PartCfgDialog_t {
+    QByteArrayData data[6];
+    char stringdata0[97];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_PartCfgDialog_t, stringdata0) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_PartCfgDialog_t qt_meta_stringdata_PartCfgDialog = {
+    {
+QT_MOC_LITERAL(0, 0, 13), // "PartCfgDialog"
+QT_MOC_LITERAL(1, 14, 23), // "on_pushButtonOK_clicked"
+QT_MOC_LITERAL(2, 38, 0), // ""
+QT_MOC_LITERAL(3, 39, 27), // "on_pushButtonCancel_clicked"
+QT_MOC_LITERAL(4, 67, 24), // "on_checkBox_stateChanged"
+QT_MOC_LITERAL(5, 92, 4) // "arg1"
+
+    },
+    "PartCfgDialog\0on_pushButtonOK_clicked\0"
+    "\0on_pushButtonCancel_clicked\0"
+    "on_checkBox_stateChanged\0arg1"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_PartCfgDialog[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       3,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+       1,    0,   29,    2, 0x08 /* Private */,
+       3,    0,   30,    2, 0x08 /* Private */,
+       4,    1,   31,    2, 0x08 /* Private */,
+
+ // slots: parameters
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void, QMetaType::Int,    5,
+
+       0        // eod
+};
+
+void PartCfgDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        PartCfgDialog *_t = static_cast<PartCfgDialog *>(_o);
+        Q_UNUSED(_t)
+        switch (_id) {
+        case 0: _t->on_pushButtonOK_clicked(); break;
+        case 1: _t->on_pushButtonCancel_clicked(); break;
+        case 2: _t->on_checkBox_stateChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        default: ;
+        }
+    }
+}
+
+const QMetaObject PartCfgDialog::staticMetaObject = {
+    { &QDialog::staticMetaObject, qt_meta_stringdata_PartCfgDialog.data,
+      qt_meta_data_PartCfgDialog,  qt_static_metacall, nullptr, nullptr}
+};
+
+
+const QMetaObject *PartCfgDialog::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *PartCfgDialog::qt_metacast(const char *_clname)
+{
+    if (!_clname) return nullptr;
+    if (!strcmp(_clname, qt_meta_stringdata_PartCfgDialog.stringdata0))
+        return static_cast<void*>(const_cast< PartCfgDialog*>(this));
+    return QDialog::qt_metacast(_clname);
+}
+
+int PartCfgDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QDialog::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 3)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 3;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 3)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 3;
+    }
+    return _id;
+}
+QT_WARNING_POP
+QT_END_MOC_NAMESPACE
diff --git a/LinuxGUI/Ventoy2Disk/QT/build/moc_predefs.h b/LinuxGUI/Ventoy2Disk/QT/build/moc_predefs.h
new file mode 100644 (file)
index 0000000..868c52f
--- /dev/null
@@ -0,0 +1,375 @@
+#define __DBL_MIN_EXP__ (-1021)
+#define __FLT32X_MAX_EXP__ 1024
+#define __cpp_attributes 200809
+#define __UINT_LEAST16_MAX__ 0xffff
+#define __ATOMIC_ACQUIRE 2
+#define __FLT128_MAX_10_EXP__ 4932
+#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F
+#define __GCC_IEC_559_COMPLEX 2
+#define __UINT_LEAST8_TYPE__ unsigned char
+#define __SIZEOF_FLOAT80__ 16
+#define __INTMAX_C(c) c ## L
+#define __CHAR_BIT__ 8
+#define __UINT8_MAX__ 0xff
+#define __WINT_MAX__ 0xffffffffU
+#define __FLT32_MIN_EXP__ (-125)
+#define __cpp_static_assert 200410
+#define __ORDER_LITTLE_ENDIAN__ 1234
+#define __SIZE_MAX__ 0xffffffffffffffffUL
+#define __WCHAR_MAX__ 0x7fffffff
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
+#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L)
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
+#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
+#define __GCC_IEC_559 2
+#define __FLT32X_DECIMAL_DIG__ 17
+#define __FLT_EVAL_METHOD__ 0
+#define __unix__ 1
+#define __cpp_binary_literals 201304
+#define __FLT64_DECIMAL_DIG__ 17
+#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
+#define __x86_64 1
+#define __cpp_variadic_templates 200704
+#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL
+#define __SIG_ATOMIC_TYPE__ int
+#define __DBL_MIN_10_EXP__ (-307)
+#define __FINITE_MATH_ONLY__ 0
+#define __GNUC_PATCHLEVEL__ 0
+#define __FLT32_HAS_DENORM__ 1
+#define __UINT_FAST8_MAX__ 0xff
+#define __has_include(STR) __has_include__(STR)
+#define __DEC64_MAX_EXP__ 385
+#define __INT8_C(c) c
+#define __INT_LEAST8_WIDTH__ 8
+#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL
+#define __SHRT_MAX__ 0x7fff
+#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L
+#define __FLT64X_MAX_10_EXP__ 4932
+#define __UINT_LEAST8_MAX__ 0xff
+#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
+#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128
+#define __UINTMAX_TYPE__ long unsigned int
+#define __linux 1
+#define __DEC32_EPSILON__ 1E-6DF
+#define __FLT_EVAL_METHOD_TS_18661_3__ 0
+#define __OPTIMIZE__ 1
+#define __unix 1
+#define __UINT32_MAX__ 0xffffffffU
+#define __GXX_EXPERIMENTAL_CXX0X__ 1
+#define __LDBL_MAX_EXP__ 16384
+#define __FLT128_MIN_EXP__ (-16381)
+#define __WINT_MIN__ 0U
+#define __linux__ 1
+#define __FLT128_MIN_10_EXP__ (-4931)
+#define __INT_LEAST16_WIDTH__ 16
+#define __SCHAR_MAX__ 0x7f
+#define __FLT128_MANT_DIG__ 113
+#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1)
+#define __INT64_C(c) c ## L
+#define __DBL_DIG__ 15
+#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
+#define __FLT64X_MANT_DIG__ 64
+#define __SIZEOF_INT__ 4
+#define __SIZEOF_POINTER__ 8
+#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
+#define __USER_LABEL_PREFIX__ 
+#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x
+#define __STDC_HOSTED__ 1
+#define __LDBL_HAS_INFINITY__ 1
+#define __FLT32_DIG__ 6
+#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F
+#define __GXX_WEAK__ 1
+#define __SHRT_WIDTH__ 16
+#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L
+#define __DEC32_MAX__ 9.999999E96DF
+#define __cpp_threadsafe_static_init 200806
+#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x
+#define __FLT32X_HAS_INFINITY__ 1
+#define __INT32_MAX__ 0x7fffffff
+#define __INT_WIDTH__ 32
+#define __SIZEOF_LONG__ 8
+#define __STDC_IEC_559__ 1
+#define __STDC_ISO_10646__ 201706L
+#define __UINT16_C(c) c
+#define __PTRDIFF_WIDTH__ 64
+#define __DECIMAL_DIG__ 21
+#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64
+#define __gnu_linux__ 1
+#define __INTMAX_WIDTH__ 64
+#define __FLT64_MIN_EXP__ (-1021)
+#define __has_include_next(STR) __has_include_next__(STR)
+#define __FLT64X_MIN_10_EXP__ (-4931)
+#define __LDBL_HAS_QUIET_NAN__ 1
+#define __FLT64_MANT_DIG__ 53
+#define __GNUC__ 8
+#define __GXX_RTTI 1
+#define __MMX__ 1
+#define __cpp_delegating_constructors 200604
+#define __FLT_HAS_DENORM__ 1
+#define __SIZEOF_LONG_DOUBLE__ 16
+#define __BIGGEST_ALIGNMENT__ 16
+#define __STDC_UTF_16__ 1
+#define __FLT64_MAX_10_EXP__ 308
+#define __FLT32_HAS_INFINITY__ 1
+#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L)
+#define __cpp_raw_strings 200710
+#define __INT_FAST32_MAX__ 0x7fffffffffffffffL
+#define __DBL_HAS_INFINITY__ 1
+#define __DEC32_MIN_EXP__ (-94)
+#define __INTPTR_WIDTH__ 64
+#define __FLT32X_HAS_DENORM__ 1
+#define __INT_FAST16_TYPE__ long int
+#define __LDBL_HAS_DENORM__ 1
+#define __cplusplus 201103L
+#define __cpp_ref_qualifiers 200710
+#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
+#define __INT_LEAST32_MAX__ 0x7fffffff
+#define __DEC32_MIN__ 1E-95DF
+#define __DEPRECATED 1
+#define __cpp_rvalue_references 200610
+#define __DBL_MAX_EXP__ 1024
+#define __WCHAR_WIDTH__ 32
+#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32
+#define __DEC128_EPSILON__ 1E-33DL
+#define __SSE2_MATH__ 1
+#define __ATOMIC_HLE_RELEASE 131072
+#define __PTRDIFF_MAX__ 0x7fffffffffffffffL
+#define __amd64 1
+#define __ATOMIC_HLE_ACQUIRE 65536
+#define __FLT32_HAS_QUIET_NAN__ 1
+#define __GNUG__ 8
+#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL
+#define __SIZEOF_SIZE_T__ 8
+#define __cpp_rvalue_reference 200610
+#define __cpp_nsdmi 200809
+#define __FLT64X_MIN_EXP__ (-16381)
+#define __SIZEOF_WINT_T__ 4
+#define __LONG_LONG_WIDTH__ 64
+#define __cpp_initializer_lists 200806
+#define __FLT32_MAX_EXP__ 128
+#define __cpp_hex_float 201603
+#define __GCC_HAVE_DWARF2_CFI_ASM 1
+#define __GXX_ABI_VERSION 1013
+#define __FLT128_HAS_INFINITY__ 1
+#define __FLT_MIN_EXP__ (-125)
+#define __cpp_lambdas 200907
+#define __FLT64X_HAS_QUIET_NAN__ 1
+#define __INT_FAST64_TYPE__ long int
+#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64
+#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L)
+#define __LP64__ 1
+#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x
+#define __DECIMAL_BID_FORMAT__ 1
+#define __FLT64_MIN_10_EXP__ (-307)
+#define __FLT64X_DECIMAL_DIG__ 21
+#define __DEC128_MIN__ 1E-6143DL
+#define __REGISTER_PREFIX__ 
+#define __UINT16_MAX__ 0xffff
+#define __DBL_HAS_DENORM__ 1
+#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32
+#define __UINT8_TYPE__ unsigned char
+#define __FLT_MANT_DIG__ 24
+#define __LDBL_DECIMAL_DIG__ 21
+#define __VERSION__ "8.3.0"
+#define __UINT64_C(c) c ## UL
+#define __cpp_unicode_characters 200704
+#define _STDC_PREDEF_H 1
+#define __GCC_ATOMIC_INT_LOCK_FREE 2
+#define __FLT128_MAX_EXP__ 16384
+#define __FLT32_MANT_DIG__ 24
+#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
+#define __STDC_IEC_559_COMPLEX__ 1
+#define __FLT128_HAS_DENORM__ 1
+#define __FLT128_DIG__ 33
+#define __SCHAR_WIDTH__ 8
+#define __INT32_C(c) c
+#define __DEC64_EPSILON__ 1E-15DD
+#define __ORDER_PDP_ENDIAN__ 3412
+#define __DEC128_MIN_EXP__ (-6142)
+#define __FLT32_MAX_10_EXP__ 38
+#define __INT_FAST32_TYPE__ long int
+#define __UINT_LEAST16_TYPE__ short unsigned int
+#define __FLT64X_HAS_INFINITY__ 1
+#define unix 1
+#define __INT16_MAX__ 0x7fff
+#define __cpp_rtti 199711
+#define __SIZE_TYPE__ long unsigned int
+#define __UINT64_MAX__ 0xffffffffffffffffUL
+#define __FLT64X_DIG__ 18
+#define __INT8_TYPE__ signed char
+#define __ELF__ 1
+#define __GCC_ASM_FLAG_OUTPUTS__ 1
+#define __FLT_RADIX__ 2
+#define __INT_LEAST16_TYPE__ short int
+#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L
+#define __UINTMAX_C(c) c ## UL
+#define __GLIBCXX_BITSIZE_INT_N_0 128
+#define __k8 1
+#define __SIG_ATOMIC_MAX__ 0x7fffffff
+#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
+#define __SIZEOF_PTRDIFF_T__ 8
+#define __FLT32X_MANT_DIG__ 53
+#define __x86_64__ 1
+#define __FLT32X_MIN_EXP__ (-1021)
+#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
+#define __INT_FAST16_MAX__ 0x7fffffffffffffffL
+#define __FLT64_DIG__ 15
+#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL
+#define __UINT_LEAST64_TYPE__ long unsigned int
+#define __FLT_HAS_QUIET_NAN__ 1
+#define __FLT_MAX_10_EXP__ 38
+#define __LONG_MAX__ 0x7fffffffffffffffL
+#define __FLT64X_HAS_DENORM__ 1
+#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
+#define __FLT_HAS_INFINITY__ 1
+#define __cpp_unicode_literals 200710
+#define __UINT_FAST16_TYPE__ long unsigned int
+#define __DEC64_MAX__ 9.999999999999999E384DD
+#define __INT_FAST32_WIDTH__ 64
+#define __CHAR16_TYPE__ short unsigned int
+#define __PRAGMA_REDEFINE_EXTNAME 1
+#define __SIZE_WIDTH__ 64
+#define __SEG_FS 1
+#define __INT_LEAST16_MAX__ 0x7fff
+#define __DEC64_MANT_DIG__ 16
+#define __INT64_MAX__ 0x7fffffffffffffffL
+#define __UINT_LEAST32_MAX__ 0xffffffffU
+#define __SEG_GS 1
+#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32
+#define __GCC_ATOMIC_LONG_LOCK_FREE 2
+#define __SIG_ATOMIC_WIDTH__ 32
+#define __INT_LEAST64_TYPE__ long int
+#define __INT16_TYPE__ short int
+#define __INT_LEAST8_TYPE__ signed char
+#define __DEC32_MAX_EXP__ 97
+#define __INT_FAST8_MAX__ 0x7f
+#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128
+#define __INTPTR_MAX__ 0x7fffffffffffffffL
+#define linux 1
+#define __cpp_range_based_for 200907
+#define __FLT64_HAS_QUIET_NAN__ 1
+#define __FLT32_MIN_10_EXP__ (-37)
+#define __SSE2__ 1
+#define __EXCEPTIONS 1
+#define __LDBL_MANT_DIG__ 64
+#define __DBL_HAS_QUIET_NAN__ 1
+#define __FLT64_HAS_INFINITY__ 1
+#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x
+#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
+#define __code_model_small__ 1
+#define __k8__ 1
+#define __INTPTR_TYPE__ long int
+#define __UINT16_TYPE__ short unsigned int
+#define __WCHAR_TYPE__ int
+#define __SIZEOF_FLOAT__ 4
+#define __UINTPTR_MAX__ 0xffffffffffffffffUL
+#define __INT_FAST64_WIDTH__ 64
+#define __DEC64_MIN_EXP__ (-382)
+#define __cpp_decltype 200707
+#define __FLT32_DECIMAL_DIG__ 9
+#define __INT_FAST64_MAX__ 0x7fffffffffffffffL
+#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
+#define __FLT_DIG__ 6
+#define __FLT64X_MAX_EXP__ 16384
+#define __UINT_FAST64_TYPE__ long unsigned int
+#define __INT_MAX__ 0x7fffffff
+#define __amd64__ 1
+#define __INT64_TYPE__ long int
+#define __FLT_MAX_EXP__ 128
+#define __ORDER_BIG_ENDIAN__ 4321
+#define __DBL_MANT_DIG__ 53
+#define __cpp_inheriting_constructors 201511
+#define __SIZEOF_FLOAT128__ 16
+#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL
+#define __DEC64_MIN__ 1E-383DD
+#define __WINT_TYPE__ unsigned int
+#define __UINT_LEAST32_TYPE__ unsigned int
+#define __SIZEOF_SHORT__ 2
+#define __SSE__ 1
+#define __LDBL_MIN_EXP__ (-16381)
+#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64
+#define __WINT_WIDTH__ 32
+#define __INT_LEAST8_MAX__ 0x7f
+#define __FLT32X_MAX_10_EXP__ 308
+#define __SIZEOF_INT128__ 16
+#define __LDBL_MAX_10_EXP__ 4932
+#define __ATOMIC_RELAXED 0
+#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L)
+#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128
+#define _LP64 1
+#define __UINT8_C(c) c
+#define __FLT64_MAX_EXP__ 1024
+#define __INT_LEAST32_TYPE__ int
+#define __SIZEOF_WCHAR_T__ 4
+#define __FLT128_HAS_QUIET_NAN__ 1
+#define __INT_FAST8_TYPE__ signed char
+#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x
+#define __GNUC_STDC_INLINE__ 1
+#define __FLT64_HAS_DENORM__ 1
+#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32
+#define __DBL_DECIMAL_DIG__ 17
+#define __STDC_UTF_32__ 1
+#define __INT_FAST8_WIDTH__ 8
+#define __FXSR__ 1
+#define __DEC_EVAL_METHOD__ 2
+#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x
+#define __cpp_runtime_arrays 198712
+#define __UINT64_TYPE__ long unsigned int
+#define __UINT32_C(c) c ## U
+#define __INTMAX_MAX__ 0x7fffffffffffffffL
+#define __cpp_alias_templates 200704
+#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
+#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F
+#define __INT8_MAX__ 0x7f
+#define __LONG_WIDTH__ 64
+#define __UINT_FAST32_TYPE__ long unsigned int
+#define __CHAR32_TYPE__ unsigned int
+#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F
+#define __cpp_constexpr 200704
+#define __INT32_TYPE__ int
+#define __SIZEOF_DOUBLE__ 8
+#define __cpp_exceptions 199711
+#define __FLT_MIN_10_EXP__ (-37)
+#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64
+#define __INT_LEAST32_WIDTH__ 32
+#define __INTMAX_TYPE__ long int
+#define __DEC128_MAX_EXP__ 6145
+#define __FLT32X_HAS_QUIET_NAN__ 1
+#define __ATOMIC_CONSUME 1
+#define __GNUC_MINOR__ 3
+#define __GLIBCXX_TYPE_INT_N_0 __int128
+#define __INT_FAST16_WIDTH__ 64
+#define __UINTMAX_MAX__ 0xffffffffffffffffUL
+#define __DEC32_MANT_DIG__ 7
+#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x
+#define __DBL_MAX_10_EXP__ 308
+#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L
+#define __INT16_C(c) c
+#define __STDC__ 1
+#define __FLT32X_DIG__ 15
+#define __PTRDIFF_TYPE__ long int
+#define __ATOMIC_SEQ_CST 5
+#define __UINT32_TYPE__ unsigned int
+#define __FLT32X_MIN_10_EXP__ (-307)
+#define __UINTPTR_TYPE__ long unsigned int
+#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
+#define __DEC128_MANT_DIG__ 34
+#define __LDBL_MIN_10_EXP__ (-4931)
+#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128
+#define __SSE_MATH__ 1
+#define __SIZEOF_LONG_LONG__ 8
+#define __cpp_user_defined_literals 200809
+#define __FLT128_DECIMAL_DIG__ 36
+#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
+#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x
+#define __LDBL_DIG__ 18
+#define __FLT_DECIMAL_DIG__ 9
+#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL
+#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
+#define __INT_LEAST64_WIDTH__ 64
+#define __UINT_FAST8_TYPE__ unsigned char
+#define _GNU_SOURCE 1
+#define __ATOMIC_ACQ_REL 4
+#define __ATOMIC_RELEASE 3
diff --git a/LinuxGUI/Ventoy2Disk/QT/build/moc_ventoy2diskwindow.cpp b/LinuxGUI/Ventoy2Disk/QT/build/moc_ventoy2diskwindow.cpp
new file mode 100644 (file)
index 0000000..f04103e
--- /dev/null
@@ -0,0 +1,294 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'ventoy2diskwindow.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.9.0)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../ventoy2diskwindow.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'ventoy2diskwindow.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.9.0. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+struct qt_meta_stringdata_MyQThread_t {
+    QByteArrayData data[5];
+    char stringdata0[33];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_MyQThread_t, stringdata0) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_MyQThread_t qt_meta_stringdata_MyQThread = {
+    {
+QT_MOC_LITERAL(0, 0, 9), // "MyQThread"
+QT_MOC_LITERAL(1, 10, 12), // "thread_event"
+QT_MOC_LITERAL(2, 23, 0), // ""
+QT_MOC_LITERAL(3, 24, 3), // "msg"
+QT_MOC_LITERAL(4, 28, 4) // "data"
+
+    },
+    "MyQThread\0thread_event\0\0msg\0data"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_MyQThread[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       1,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       1,       // signalCount
+
+ // signals: name, argc, parameters, tag, flags
+       1,    2,   19,    2, 0x06 /* Public */,
+
+ // signals: parameters
+    QMetaType::Void, QMetaType::Int, QMetaType::Int,    3,    4,
+
+       0        // eod
+};
+
+void MyQThread::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        MyQThread *_t = static_cast<MyQThread *>(_o);
+        Q_UNUSED(_t)
+        switch (_id) {
+        case 0: _t->thread_event((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break;
+        default: ;
+        }
+    } else if (_c == QMetaObject::IndexOfMethod) {
+        int *result = reinterpret_cast<int *>(_a[0]);
+        void **func = reinterpret_cast<void **>(_a[1]);
+        {
+            typedef void (MyQThread::*_t)(int , int );
+            if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&MyQThread::thread_event)) {
+                *result = 0;
+                return;
+            }
+        }
+    }
+}
+
+const QMetaObject MyQThread::staticMetaObject = {
+    { &QThread::staticMetaObject, qt_meta_stringdata_MyQThread.data,
+      qt_meta_data_MyQThread,  qt_static_metacall, nullptr, nullptr}
+};
+
+
+const QMetaObject *MyQThread::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *MyQThread::qt_metacast(const char *_clname)
+{
+    if (!_clname) return nullptr;
+    if (!strcmp(_clname, qt_meta_stringdata_MyQThread.stringdata0))
+        return static_cast<void*>(const_cast< MyQThread*>(this));
+    return QThread::qt_metacast(_clname);
+}
+
+int MyQThread::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QThread::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 1)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 1;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 1)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 1;
+    }
+    return _id;
+}
+
+// SIGNAL 0
+void MyQThread::thread_event(int _t1, int _t2)
+{
+    void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)), const_cast<void*>(reinterpret_cast<const void*>(&_t2)) };
+    QMetaObject::activate(this, &staticMetaObject, 0, _a);
+}
+struct qt_meta_stringdata_Ventoy2DiskWindow_t {
+    QByteArrayData data[19];
+    char stringdata0[367];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_Ventoy2DiskWindow_t, stringdata0) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_Ventoy2DiskWindow_t qt_meta_stringdata_Ventoy2DiskWindow = {
+    {
+QT_MOC_LITERAL(0, 0, 17), // "Ventoy2DiskWindow"
+QT_MOC_LITERAL(1, 18, 12), // "thread_event"
+QT_MOC_LITERAL(2, 31, 0), // ""
+QT_MOC_LITERAL(3, 32, 3), // "msg"
+QT_MOC_LITERAL(4, 36, 4), // "data"
+QT_MOC_LITERAL(5, 41, 23), // "part_style_check_action"
+QT_MOC_LITERAL(6, 65, 8), // "QAction*"
+QT_MOC_LITERAL(7, 74, 3), // "act"
+QT_MOC_LITERAL(8, 78, 17), // "lang_check_action"
+QT_MOC_LITERAL(9, 96, 24), // "on_ButtonInstall_clicked"
+QT_MOC_LITERAL(10, 121, 23), // "on_ButtonUpdate_clicked"
+QT_MOC_LITERAL(11, 145, 24), // "on_ButtonRefresh_clicked"
+QT_MOC_LITERAL(12, 170, 37), // "on_comboBoxDevice_currentInde..."
+QT_MOC_LITERAL(13, 208, 5), // "index"
+QT_MOC_LITERAL(14, 214, 42), // "on_actionPartition_Configurat..."
+QT_MOC_LITERAL(15, 257, 31), // "on_actionClear_Ventoy_triggered"
+QT_MOC_LITERAL(16, 289, 33), // "on_actionShow_All_Devices_tog..."
+QT_MOC_LITERAL(17, 323, 4), // "arg1"
+QT_MOC_LITERAL(18, 328, 38) // "on_actionSecure_Boot_Support_..."
+
+    },
+    "Ventoy2DiskWindow\0thread_event\0\0msg\0"
+    "data\0part_style_check_action\0QAction*\0"
+    "act\0lang_check_action\0on_ButtonInstall_clicked\0"
+    "on_ButtonUpdate_clicked\0"
+    "on_ButtonRefresh_clicked\0"
+    "on_comboBoxDevice_currentIndexChanged\0"
+    "index\0on_actionPartition_Configuration_triggered\0"
+    "on_actionClear_Ventoy_triggered\0"
+    "on_actionShow_All_Devices_toggled\0"
+    "arg1\0on_actionSecure_Boot_Support_triggered"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_Ventoy2DiskWindow[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+      11,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+       1,    2,   69,    2, 0x08 /* Private */,
+       5,    1,   74,    2, 0x08 /* Private */,
+       8,    1,   77,    2, 0x08 /* Private */,
+       9,    0,   80,    2, 0x08 /* Private */,
+      10,    0,   81,    2, 0x08 /* Private */,
+      11,    0,   82,    2, 0x08 /* Private */,
+      12,    1,   83,    2, 0x08 /* Private */,
+      14,    0,   86,    2, 0x08 /* Private */,
+      15,    0,   87,    2, 0x08 /* Private */,
+      16,    1,   88,    2, 0x08 /* Private */,
+      18,    0,   91,    2, 0x08 /* Private */,
+
+ // slots: parameters
+    QMetaType::Void, QMetaType::Int, QMetaType::Int,    3,    4,
+    QMetaType::Void, 0x80000000 | 6,    7,
+    QMetaType::Void, 0x80000000 | 6,    7,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void, QMetaType::Int,   13,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void, QMetaType::Bool,   17,
+    QMetaType::Void,
+
+       0        // eod
+};
+
+void Ventoy2DiskWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        Ventoy2DiskWindow *_t = static_cast<Ventoy2DiskWindow *>(_o);
+        Q_UNUSED(_t)
+        switch (_id) {
+        case 0: _t->thread_event((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break;
+        case 1: _t->part_style_check_action((*reinterpret_cast< QAction*(*)>(_a[1]))); break;
+        case 2: _t->lang_check_action((*reinterpret_cast< QAction*(*)>(_a[1]))); break;
+        case 3: _t->on_ButtonInstall_clicked(); break;
+        case 4: _t->on_ButtonUpdate_clicked(); break;
+        case 5: _t->on_ButtonRefresh_clicked(); break;
+        case 6: _t->on_comboBoxDevice_currentIndexChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 7: _t->on_actionPartition_Configuration_triggered(); break;
+        case 8: _t->on_actionClear_Ventoy_triggered(); break;
+        case 9: _t->on_actionShow_All_Devices_toggled((*reinterpret_cast< bool(*)>(_a[1]))); break;
+        case 10: _t->on_actionSecure_Boot_Support_triggered(); break;
+        default: ;
+        }
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        switch (_id) {
+        default: *reinterpret_cast<int*>(_a[0]) = -1; break;
+        case 1:
+            switch (*reinterpret_cast<int*>(_a[1])) {
+            default: *reinterpret_cast<int*>(_a[0]) = -1; break;
+            case 0:
+                *reinterpret_cast<int*>(_a[0]) = qRegisterMetaType< QAction* >(); break;
+            }
+            break;
+        case 2:
+            switch (*reinterpret_cast<int*>(_a[1])) {
+            default: *reinterpret_cast<int*>(_a[0]) = -1; break;
+            case 0:
+                *reinterpret_cast<int*>(_a[0]) = qRegisterMetaType< QAction* >(); break;
+            }
+            break;
+        }
+    }
+}
+
+const QMetaObject Ventoy2DiskWindow::staticMetaObject = {
+    { &QMainWindow::staticMetaObject, qt_meta_stringdata_Ventoy2DiskWindow.data,
+      qt_meta_data_Ventoy2DiskWindow,  qt_static_metacall, nullptr, nullptr}
+};
+
+
+const QMetaObject *Ventoy2DiskWindow::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *Ventoy2DiskWindow::qt_metacast(const char *_clname)
+{
+    if (!_clname) return nullptr;
+    if (!strcmp(_clname, qt_meta_stringdata_Ventoy2DiskWindow.stringdata0))
+        return static_cast<void*>(const_cast< Ventoy2DiskWindow*>(this));
+    return QMainWindow::qt_metacast(_clname);
+}
+
+int Ventoy2DiskWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QMainWindow::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 11)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 11;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 11)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 11;
+    }
+    return _id;
+}
+QT_WARNING_POP
+QT_END_MOC_NAMESPACE
diff --git a/LinuxGUI/Ventoy2Disk/QT/build/ui_partcfgdialog.h b/LinuxGUI/Ventoy2Disk/QT/build/ui_partcfgdialog.h
new file mode 100644 (file)
index 0000000..e0244c9
--- /dev/null
@@ -0,0 +1,113 @@
+/********************************************************************************
+** Form generated from reading UI file 'partcfgdialog.ui'
+**
+** Created by: Qt User Interface Compiler version 5.9.0
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_PARTCFGDIALOG_H
+#define UI_PARTCFGDIALOG_H
+
+#include <QtCore/QVariant>
+#include <QtWidgets/QAction>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QButtonGroup>
+#include <QtWidgets/QCheckBox>
+#include <QtWidgets/QComboBox>
+#include <QtWidgets/QDialog>
+#include <QtWidgets/QGroupBox>
+#include <QtWidgets/QHeaderView>
+#include <QtWidgets/QLineEdit>
+#include <QtWidgets/QPushButton>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_PartCfgDialog
+{
+public:
+    QPushButton *pushButtonOK;
+    QPushButton *pushButtonCancel;
+    QGroupBox *groupBox;
+    QCheckBox *checkBox;
+    QGroupBox *groupBox_2;
+    QLineEdit *lineEdit;
+    QGroupBox *groupBox_3;
+    QComboBox *comboBox;
+    QGroupBox *groupBox_4;
+    QCheckBox *checkBox_2;
+
+    void setupUi(QDialog *PartCfgDialog)
+    {
+        if (PartCfgDialog->objectName().isEmpty())
+            PartCfgDialog->setObjectName(QStringLiteral("PartCfgDialog"));
+        PartCfgDialog->resize(420, 258);
+        pushButtonOK = new QPushButton(PartCfgDialog);
+        pushButtonOK->setObjectName(QStringLiteral("pushButtonOK"));
+        pushButtonOK->setGeometry(QRect(90, 210, 90, 30));
+        pushButtonCancel = new QPushButton(PartCfgDialog);
+        pushButtonCancel->setObjectName(QStringLiteral("pushButtonCancel"));
+        pushButtonCancel->setGeometry(QRect(230, 210, 90, 30));
+        groupBox = new QGroupBox(PartCfgDialog);
+        groupBox->setObjectName(QStringLiteral("groupBox"));
+        groupBox->setGeometry(QRect(10, 0, 400, 61));
+        checkBox = new QCheckBox(groupBox);
+        checkBox->setObjectName(QStringLiteral("checkBox"));
+        checkBox->setGeometry(QRect(10, 20, 381, 41));
+        checkBox->setAutoRepeatInterval(0);
+        groupBox_2 = new QGroupBox(PartCfgDialog);
+        groupBox_2->setObjectName(QStringLiteral("groupBox_2"));
+        groupBox_2->setGeometry(QRect(10, 60, 200, 61));
+        lineEdit = new QLineEdit(groupBox_2);
+        lineEdit->setObjectName(QStringLiteral("lineEdit"));
+        lineEdit->setGeometry(QRect(10, 30, 181, 26));
+        lineEdit->setMaxLength(14);
+        groupBox_3 = new QGroupBox(PartCfgDialog);
+        groupBox_3->setObjectName(QStringLiteral("groupBox_3"));
+        groupBox_3->setGeometry(QRect(210, 60, 200, 60));
+        comboBox = new QComboBox(groupBox_3);
+        comboBox->setObjectName(QStringLiteral("comboBox"));
+        comboBox->setGeometry(QRect(10, 30, 181, 26));
+        groupBox_4 = new QGroupBox(PartCfgDialog);
+        groupBox_4->setObjectName(QStringLiteral("groupBox_4"));
+        groupBox_4->setGeometry(QRect(10, 120, 401, 61));
+        checkBox_2 = new QCheckBox(groupBox_4);
+        checkBox_2->setObjectName(QStringLiteral("checkBox_2"));
+        checkBox_2->setGeometry(QRect(10, 30, 381, 24));
+        checkBox_2->setChecked(true);
+
+        retranslateUi(PartCfgDialog);
+
+        comboBox->setCurrentIndex(1);
+
+
+        QMetaObject::connectSlotsByName(PartCfgDialog);
+    } // setupUi
+
+    void retranslateUi(QDialog *PartCfgDialog)
+    {
+        PartCfgDialog->setWindowTitle(QApplication::translate("PartCfgDialog", "Partition Configuration", Q_NULLPTR));
+        pushButtonOK->setText(QApplication::translate("PartCfgDialog", "OK", Q_NULLPTR));
+        pushButtonCancel->setText(QApplication::translate("PartCfgDialog", "Cancel", Q_NULLPTR));
+        groupBox->setTitle(QString());
+        checkBox->setText(QApplication::translate("PartCfgDialog", "Preserve some space at the end of the disk", Q_NULLPTR));
+        groupBox_2->setTitle(QString());
+        groupBox_3->setTitle(QString());
+        comboBox->clear();
+        comboBox->insertItems(0, QStringList()
+         << QApplication::translate("PartCfgDialog", "MB", Q_NULLPTR)
+         << QApplication::translate("PartCfgDialog", "GB", Q_NULLPTR)
+        );
+        groupBox_4->setTitle(QString());
+        checkBox_2->setText(QApplication::translate("PartCfgDialog", "Align partitions with 4KB", Q_NULLPTR));
+    } // retranslateUi
+
+};
+
+namespace Ui {
+    class PartCfgDialog: public Ui_PartCfgDialog {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_PARTCFGDIALOG_H
diff --git a/LinuxGUI/Ventoy2Disk/QT/build/ui_ventoy2diskwindow.h b/LinuxGUI/Ventoy2Disk/QT/build/ui_ventoy2diskwindow.h
new file mode 100644 (file)
index 0000000..57eceef
--- /dev/null
@@ -0,0 +1,202 @@
+/********************************************************************************
+** Form generated from reading UI file 'ventoy2diskwindow.ui'
+**
+** Created by: Qt User Interface Compiler version 5.9.0
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_VENTOY2DISKWINDOW_H
+#define UI_VENTOY2DISKWINDOW_H
+
+#include <QtCore/QVariant>
+#include <QtWidgets/QAction>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QButtonGroup>
+#include <QtWidgets/QComboBox>
+#include <QtWidgets/QGroupBox>
+#include <QtWidgets/QHeaderView>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QMainWindow>
+#include <QtWidgets/QMenu>
+#include <QtWidgets/QMenuBar>
+#include <QtWidgets/QProgressBar>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_Ventoy2DiskWindow
+{
+public:
+    QAction *actionSecure_Boot_Support;
+    QAction *actionMBR;
+    QAction *actionGPT;
+    QAction *actionPartition_Configuration;
+    QAction *actionClear_Ventoy;
+    QAction *actionShow_All_Devices;
+    QWidget *centralwidget;
+    QGroupBox *groupBoxDevice;
+    QComboBox *comboBoxDevice;
+    QPushButton *ButtonRefresh;
+    QGroupBox *groupBoxVentoyLocal;
+    QLabel *labelVentoyLocalVer;
+    QLabel *labelVentoyLocalPartStyle;
+    QLabel *labelVentoyLocalSecure;
+    QGroupBox *groupBoxVentoyDevice;
+    QLabel *labelVentoyDeviceVer;
+    QLabel *labelVentoyDevicePartStyle;
+    QLabel *labelVentoyDeviceSecure;
+    QGroupBox *groupBoxStatus;
+    QProgressBar *progressBar;
+    QPushButton *ButtonInstall;
+    QPushButton *ButtonUpdate;
+    QMenuBar *menubar;
+    QMenu *menuOption;
+    QMenu *menuPartition_Style;
+    QMenu *menuLanguage;
+
+    void setupUi(QMainWindow *Ventoy2DiskWindow)
+    {
+        if (Ventoy2DiskWindow->objectName().isEmpty())
+            Ventoy2DiskWindow->setObjectName(QStringLiteral("Ventoy2DiskWindow"));
+        Ventoy2DiskWindow->resize(441, 367);
+        actionSecure_Boot_Support = new QAction(Ventoy2DiskWindow);
+        actionSecure_Boot_Support->setObjectName(QStringLiteral("actionSecure_Boot_Support"));
+        actionSecure_Boot_Support->setCheckable(true);
+        actionMBR = new QAction(Ventoy2DiskWindow);
+        actionMBR->setObjectName(QStringLiteral("actionMBR"));
+        actionMBR->setCheckable(true);
+        actionGPT = new QAction(Ventoy2DiskWindow);
+        actionGPT->setObjectName(QStringLiteral("actionGPT"));
+        actionGPT->setCheckable(true);
+        actionPartition_Configuration = new QAction(Ventoy2DiskWindow);
+        actionPartition_Configuration->setObjectName(QStringLiteral("actionPartition_Configuration"));
+        actionClear_Ventoy = new QAction(Ventoy2DiskWindow);
+        actionClear_Ventoy->setObjectName(QStringLiteral("actionClear_Ventoy"));
+        actionShow_All_Devices = new QAction(Ventoy2DiskWindow);
+        actionShow_All_Devices->setObjectName(QStringLiteral("actionShow_All_Devices"));
+        actionShow_All_Devices->setCheckable(true);
+        centralwidget = new QWidget(Ventoy2DiskWindow);
+        centralwidget->setObjectName(QStringLiteral("centralwidget"));
+        groupBoxDevice = new QGroupBox(centralwidget);
+        groupBoxDevice->setObjectName(QStringLiteral("groupBoxDevice"));
+        groupBoxDevice->setGeometry(QRect(10, 10, 421, 80));
+        comboBoxDevice = new QComboBox(groupBoxDevice);
+        comboBoxDevice->setObjectName(QStringLiteral("comboBoxDevice"));
+        comboBoxDevice->setGeometry(QRect(10, 40, 361, 26));
+        ButtonRefresh = new QPushButton(groupBoxDevice);
+        ButtonRefresh->setObjectName(QStringLiteral("ButtonRefresh"));
+        ButtonRefresh->setGeometry(QRect(380, 37, 30, 30));
+        QIcon icon;
+        icon.addFile(QStringLiteral("../refresh.ico"), QSize(), QIcon::Normal, QIcon::Off);
+        ButtonRefresh->setIcon(icon);
+        ButtonRefresh->setIconSize(QSize(24, 24));
+        groupBoxVentoyLocal = new QGroupBox(centralwidget);
+        groupBoxVentoyLocal->setObjectName(QStringLiteral("groupBoxVentoyLocal"));
+        groupBoxVentoyLocal->setGeometry(QRect(10, 100, 205, 80));
+        groupBoxVentoyLocal->setAlignment(Qt::AlignCenter);
+        labelVentoyLocalVer = new QLabel(groupBoxVentoyLocal);
+        labelVentoyLocalVer->setObjectName(QStringLiteral("labelVentoyLocalVer"));
+        labelVentoyLocalVer->setGeometry(QRect(30, 30, 135, 41));
+        labelVentoyLocalVer->setAlignment(Qt::AlignCenter);
+        labelVentoyLocalPartStyle = new QLabel(groupBoxVentoyLocal);
+        labelVentoyLocalPartStyle->setObjectName(QStringLiteral("labelVentoyLocalPartStyle"));
+        labelVentoyLocalPartStyle->setGeometry(QRect(172, 60, 31, 18));
+        labelVentoyLocalSecure = new QLabel(groupBoxVentoyLocal);
+        labelVentoyLocalSecure->setObjectName(QStringLiteral("labelVentoyLocalSecure"));
+        labelVentoyLocalSecure->setGeometry(QRect(12, 36, 21, 31));
+        labelVentoyLocalSecure->setPixmap(QPixmap(QString::fromUtf8("../secure.ico")));
+        groupBoxVentoyDevice = new QGroupBox(centralwidget);
+        groupBoxVentoyDevice->setObjectName(QStringLiteral("groupBoxVentoyDevice"));
+        groupBoxVentoyDevice->setGeometry(QRect(225, 100, 205, 80));
+        groupBoxVentoyDevice->setAlignment(Qt::AlignCenter);
+        labelVentoyDeviceVer = new QLabel(groupBoxVentoyDevice);
+        labelVentoyDeviceVer->setObjectName(QStringLiteral("labelVentoyDeviceVer"));
+        labelVentoyDeviceVer->setGeometry(QRect(30, 30, 135, 41));
+        labelVentoyDeviceVer->setAlignment(Qt::AlignCenter);
+        labelVentoyDevicePartStyle = new QLabel(groupBoxVentoyDevice);
+        labelVentoyDevicePartStyle->setObjectName(QStringLiteral("labelVentoyDevicePartStyle"));
+        labelVentoyDevicePartStyle->setGeometry(QRect(172, 60, 31, 18));
+        labelVentoyDeviceSecure = new QLabel(groupBoxVentoyDevice);
+        labelVentoyDeviceSecure->setObjectName(QStringLiteral("labelVentoyDeviceSecure"));
+        labelVentoyDeviceSecure->setGeometry(QRect(12, 36, 21, 31));
+        labelVentoyDeviceSecure->setPixmap(QPixmap(QString::fromUtf8("../secure.ico")));
+        groupBoxStatus = new QGroupBox(centralwidget);
+        groupBoxStatus->setObjectName(QStringLiteral("groupBoxStatus"));
+        groupBoxStatus->setGeometry(QRect(10, 190, 421, 61));
+        progressBar = new QProgressBar(groupBoxStatus);
+        progressBar->setObjectName(QStringLiteral("progressBar"));
+        progressBar->setGeometry(QRect(10, 30, 401, 23));
+        progressBar->setValue(0);
+        progressBar->setTextVisible(false);
+        ButtonInstall = new QPushButton(centralwidget);
+        ButtonInstall->setObjectName(QStringLiteral("ButtonInstall"));
+        ButtonInstall->setGeometry(QRect(90, 275, 101, 41));
+        ButtonUpdate = new QPushButton(centralwidget);
+        ButtonUpdate->setObjectName(QStringLiteral("ButtonUpdate"));
+        ButtonUpdate->setGeometry(QRect(250, 275, 101, 41));
+        Ventoy2DiskWindow->setCentralWidget(centralwidget);
+        menubar = new QMenuBar(Ventoy2DiskWindow);
+        menubar->setObjectName(QStringLiteral("menubar"));
+        menubar->setGeometry(QRect(0, 0, 441, 23));
+        menuOption = new QMenu(menubar);
+        menuOption->setObjectName(QStringLiteral("menuOption"));
+        menuPartition_Style = new QMenu(menuOption);
+        menuPartition_Style->setObjectName(QStringLiteral("menuPartition_Style"));
+        menuLanguage = new QMenu(menubar);
+        menuLanguage->setObjectName(QStringLiteral("menuLanguage"));
+        Ventoy2DiskWindow->setMenuBar(menubar);
+
+        menubar->addAction(menuOption->menuAction());
+        menubar->addAction(menuLanguage->menuAction());
+        menuOption->addAction(actionSecure_Boot_Support);
+        menuOption->addAction(menuPartition_Style->menuAction());
+        menuOption->addAction(actionPartition_Configuration);
+        menuOption->addAction(actionClear_Ventoy);
+        menuOption->addAction(actionShow_All_Devices);
+        menuPartition_Style->addAction(actionMBR);
+        menuPartition_Style->addAction(actionGPT);
+
+        retranslateUi(Ventoy2DiskWindow);
+
+        QMetaObject::connectSlotsByName(Ventoy2DiskWindow);
+    } // setupUi
+
+    void retranslateUi(QMainWindow *Ventoy2DiskWindow)
+    {
+        Ventoy2DiskWindow->setWindowTitle(QApplication::translate("Ventoy2DiskWindow", "Ventoy2Disk", Q_NULLPTR));
+        actionSecure_Boot_Support->setText(QApplication::translate("Ventoy2DiskWindow", "Secure Boot Support", Q_NULLPTR));
+        actionMBR->setText(QApplication::translate("Ventoy2DiskWindow", "MBR", Q_NULLPTR));
+        actionGPT->setText(QApplication::translate("Ventoy2DiskWindow", "GPT", Q_NULLPTR));
+        actionPartition_Configuration->setText(QApplication::translate("Ventoy2DiskWindow", "Partition Configuration", Q_NULLPTR));
+        actionClear_Ventoy->setText(QApplication::translate("Ventoy2DiskWindow", "Clear Ventoy", Q_NULLPTR));
+        actionShow_All_Devices->setText(QApplication::translate("Ventoy2DiskWindow", "Show All Devices", Q_NULLPTR));
+        groupBoxDevice->setTitle(QApplication::translate("Ventoy2DiskWindow", "Device", Q_NULLPTR));
+        ButtonRefresh->setText(QString());
+        groupBoxVentoyLocal->setTitle(QApplication::translate("Ventoy2DiskWindow", "Ventoy In Package", Q_NULLPTR));
+        labelVentoyLocalVer->setText(QApplication::translate("Ventoy2DiskWindow", "<html><head/><body><p><span style=\" font-size:20pt; font-weight:600; color:#ff0000;\">1.0.53</span></p></body></html>", Q_NULLPTR));
+        labelVentoyLocalPartStyle->setText(QApplication::translate("Ventoy2DiskWindow", "<html><head/><body><p>MBR</p></body></html>", Q_NULLPTR));
+        labelVentoyLocalSecure->setText(QString());
+        groupBoxVentoyDevice->setTitle(QApplication::translate("Ventoy2DiskWindow", "Ventoy In Device", Q_NULLPTR));
+        labelVentoyDeviceVer->setText(QApplication::translate("Ventoy2DiskWindow", "<html><head/><body><p><span style=\" font-size:20pt; font-weight:600; color:#ff0000;\">1.0.52</span></p></body></html>", Q_NULLPTR));
+        labelVentoyDevicePartStyle->setText(QApplication::translate("Ventoy2DiskWindow", "<html><head/><body><p>GPT</p></body></html>", Q_NULLPTR));
+        labelVentoyDeviceSecure->setText(QString());
+        groupBoxStatus->setTitle(QApplication::translate("Ventoy2DiskWindow", "Status: REDAY", Q_NULLPTR));
+        progressBar->setFormat(QString());
+        ButtonInstall->setText(QApplication::translate("Ventoy2DiskWindow", "Install", Q_NULLPTR));
+        ButtonUpdate->setText(QApplication::translate("Ventoy2DiskWindow", "Update", Q_NULLPTR));
+        menuOption->setTitle(QApplication::translate("Ventoy2DiskWindow", "Option", Q_NULLPTR));
+        menuPartition_Style->setTitle(QApplication::translate("Ventoy2DiskWindow", "Partition Style", Q_NULLPTR));
+        menuLanguage->setTitle(QApplication::translate("Ventoy2DiskWindow", "Language", Q_NULLPTR));
+    } // retranslateUi
+
+};
+
+namespace Ui {
+    class Ventoy2DiskWindow: public Ui_Ventoy2DiskWindow {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_VENTOY2DISKWINDOW_H
diff --git a/LinuxGUI/Ventoy2Disk/QT/main.cpp b/LinuxGUI/Ventoy2Disk/QT/main.cpp
new file mode 100644 (file)
index 0000000..37f47d4
--- /dev/null
@@ -0,0 +1,95 @@
+#include "ventoy2diskwindow.h"
+
+#include <QApplication>
+#include <QMessageBox>
+#include <QFileInfo>
+#include <QStyle>
+#include <QDesktopWidget>
+#include <QPixmap>
+#include <unistd.h>
+#include <sys/types.h>
+
+extern "C" {
+#include "ventoy_define.h"
+#include "ventoy_util.h"
+#include "ventoy_qt.h"
+}
+
+using namespace std;
+
+char g_log_file[4096];
+char g_ini_file[4096];
+
+int main(int argc, char *argv[])
+{
+    int ret;
+    QApplication a(argc, argv);
+    Ventoy2DiskWindow w;
+
+#ifdef QT_CHECK_EUID
+    if (geteuid() != 0)
+    {
+        QMessageBox::critical(NULL, "Error", "Permission denied!\nPlease run with root privileges.");
+        return 1;
+    }
+#endif
+
+    if (!QFileInfo::exists("./boot/boot.img"))
+    {
+        QMessageBox::critical(NULL, "Error", "Please run under the correct directory.");
+        return 1;
+    }
+
+    ventoy_log_init();
+
+    snprintf(g_log_file, sizeof(g_log_file), "./log.txt");
+    snprintf(g_ini_file, sizeof(g_ini_file), "./Ventoy2Disk.ini");
+    for (int i = 0; i < argc; i++)
+    {
+        if (argv[i] && argv[i + 1] && strcmp(argv[i], "-l") == 0)
+        {
+            snprintf(g_log_file, sizeof(g_log_file), "%s", argv[i + 1]);
+        }
+        else if (argv[i] && argv[i + 1] &&  strcmp(argv[i], "-i") == 0)
+        {
+            snprintf(g_ini_file, sizeof(g_ini_file), "%s", argv[i + 1]);
+        }
+    }
+
+    vlog("===================================================\n");
+    vlog("===== Ventoy2Disk %s powered by QT %s =====\n", ventoy_get_local_version(), qVersion());
+    vlog("===================================================\n");
+
+    ventoy_disk_init();
+    ventoy_http_init();
+
+    w.setGeometry(QStyle::alignedRect(Qt::LeftToRight,
+                                      Qt::AlignCenter,
+                                      w.size(),
+                                      a.desktop()->availableGeometry()));
+
+    QPixmap pix;
+    QIcon icon;
+    int len;
+    const uchar *data;
+
+    data = (const uchar *)get_window_icon_raw_data(&len);
+    pix.loadFromData(data, len);
+    icon.addPixmap(pix);
+    w.setWindowIcon(icon);
+
+    w.show();
+    w.setFixedSize(w.size());
+
+    ret = a.exec();
+
+    ventoy_disk_exit();
+    ventoy_http_exit();
+        
+    vlog("######## Ventoy2Disk QT %s exit ########\n", ventoy_get_local_version());
+
+    /* log exit must at the end */
+    ventoy_log_exit();
+
+    return ret;
+}
diff --git a/LinuxGUI/Ventoy2Disk/QT/partcfgdialog.cpp b/LinuxGUI/Ventoy2Disk/QT/partcfgdialog.cpp
new file mode 100644 (file)
index 0000000..c232b8a
--- /dev/null
@@ -0,0 +1,101 @@
+#include "partcfgdialog.h"
+#include "ui_partcfgdialog.h"
+#include <QDebug>
+#include <QMessageBox>
+
+PartCfgDialog::PartCfgDialog(QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::PartCfgDialog)
+{
+    reserve = false;
+    unit = 1;
+    align = true;
+    valuestr = "";
+    resvalue = 0;
+
+    ui->setupUi(this);
+
+    ui->lineEdit->setEnabled(false);
+    ui->comboBox->setEnabled(false);
+}
+
+PartCfgDialog::~PartCfgDialog()
+{
+    delete ui;
+}
+
+void PartCfgDialog::update_ui_status()
+{
+    ui->checkBox->setChecked(reserve);
+    ui->lineEdit->setEnabled(reserve);
+    ui->comboBox->setEnabled(reserve);
+    ui->checkBox_2->setChecked(align);
+}
+
+void PartCfgDialog::update_language_ui(QJsonObject &obj)
+{
+    ui->checkBox->setText(_LANG_STR("STR_PRESERVE_SPACE"));
+    ui->checkBox_2->setText(_LANG_STR("STR_PART_ALIGN_4KB"));
+    ui->pushButtonOK->setText(_LANG_STR("STR_BTN_OK"));
+    ui->pushButtonCancel->setText(_LANG_STR("STR_BTN_CANCEL"));
+
+    invalid_value = _LANG_STR("STR_SPACE_VAL_INVALID");
+    err_title = _LANG_STR("STR_ERROR");
+}
+
+void PartCfgDialog::on_pushButtonOK_clicked()
+{
+    if (ui->checkBox->isChecked())
+    {
+        QString str = ui->lineEdit->text();
+
+        if (str.isEmpty())
+        {
+            QMessageBox::critical(NULL, err_title, invalid_value);
+            return;
+        }
+
+        for (int i = 0; i < str.size(); i++)
+        {
+            if (str[i] < '0' || str[i] > '9')
+            {
+                QMessageBox::critical(NULL, err_title, invalid_value);
+                return;
+            }
+        }
+
+        valuestr = str;
+        resvalue = str.toLongLong();
+        reserve = true;
+    }
+    else
+    {
+        reserve = false;
+    }
+
+    align = ui->checkBox_2->isChecked();
+    unit = ui->comboBox->currentIndex();
+
+    accept();
+}
+
+void PartCfgDialog::on_pushButtonCancel_clicked()
+{
+    reject();
+}
+
+void PartCfgDialog::on_checkBox_stateChanged(int arg1)
+{
+    (void)arg1;
+
+    if (ui->checkBox->isChecked())
+    {
+        ui->lineEdit->setEnabled(true);
+        ui->comboBox->setEnabled(true);
+    }
+    else
+    {
+        ui->lineEdit->setEnabled(false);
+        ui->comboBox->setEnabled(false);
+    }
+}
diff --git a/LinuxGUI/Ventoy2Disk/QT/partcfgdialog.h b/LinuxGUI/Ventoy2Disk/QT/partcfgdialog.h
new file mode 100644 (file)
index 0000000..c57a9ae
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef PARTCFGDIALOG_H
+#define PARTCFGDIALOG_H
+
+#include <QDialog>
+#include <QJsonObject>
+
+namespace Ui {
+class PartCfgDialog;
+}
+
+class PartCfgDialog : public QDialog
+{
+    Q_OBJECT
+
+public:
+
+    bool reserve;
+    int unit;
+    bool align;
+    QString valuestr;
+    qint64 resvalue;
+
+    QString invalid_value;
+    QString err_title;
+    void update_ui_status();
+    void update_language_ui(QJsonObject &obj);
+
+    explicit PartCfgDialog(QWidget *parent = nullptr);
+    ~PartCfgDialog();
+
+private slots:
+    void on_pushButtonOK_clicked();
+
+    void on_pushButtonCancel_clicked();
+
+    void on_checkBox_stateChanged(int arg1);
+
+private:
+    Ui::PartCfgDialog *ui;
+};
+
+#define _LANG_STR(id) obj.value(id).toString()
+
+#endif // PARTCFGDIALOG_H
diff --git a/LinuxGUI/Ventoy2Disk/QT/partcfgdialog.ui b/LinuxGUI/Ventoy2Disk/QT/partcfgdialog.ui
new file mode 100644 (file)
index 0000000..fd131b8
--- /dev/null
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PartCfgDialog</class>
+ <widget class="QDialog" name="PartCfgDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>420</width>
+    <height>258</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Partition Configuration</string>
+  </property>
+  <widget class="QPushButton" name="pushButtonOK">
+   <property name="geometry">
+    <rect>
+     <x>90</x>
+     <y>210</y>
+     <width>90</width>
+     <height>30</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>OK</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButtonCancel">
+   <property name="geometry">
+    <rect>
+     <x>230</x>
+     <y>210</y>
+     <width>90</width>
+     <height>30</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Cancel</string>
+   </property>
+  </widget>
+  <widget class="QGroupBox" name="groupBox">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>10</y>
+     <width>400</width>
+     <height>51</height>
+    </rect>
+   </property>
+   <property name="title">
+    <string/>
+   </property>
+   <widget class="QCheckBox" name="checkBox">
+    <property name="geometry">
+     <rect>
+      <x>10</x>
+      <y>10</y>
+      <width>381</width>
+      <height>41</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Preserve some space at the end of the disk</string>
+    </property>
+    <property name="autoRepeatInterval">
+     <number>0</number>
+    </property>
+   </widget>
+  </widget>
+  <widget class="QGroupBox" name="groupBox_2">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>60</y>
+     <width>200</width>
+     <height>60</height>
+    </rect>
+   </property>
+   <property name="title">
+    <string/>
+   </property>
+   <widget class="QLineEdit" name="lineEdit">
+    <property name="geometry">
+     <rect>
+      <x>10</x>
+      <y>20</y>
+      <width>181</width>
+      <height>26</height>
+     </rect>
+    </property>
+    <property name="maxLength">
+     <number>14</number>
+    </property>
+   </widget>
+  </widget>
+  <widget class="QGroupBox" name="groupBox_3">
+   <property name="geometry">
+    <rect>
+     <x>210</x>
+     <y>60</y>
+     <width>200</width>
+     <height>60</height>
+    </rect>
+   </property>
+   <property name="title">
+    <string/>
+   </property>
+   <widget class="QComboBox" name="comboBox">
+    <property name="geometry">
+     <rect>
+      <x>10</x>
+      <y>20</y>
+      <width>181</width>
+      <height>26</height>
+     </rect>
+    </property>
+    <property name="currentIndex">
+     <number>1</number>
+    </property>
+    <item>
+     <property name="text">
+      <string>MB</string>
+     </property>
+    </item>
+    <item>
+     <property name="text">
+      <string>GB</string>
+     </property>
+    </item>
+   </widget>
+  </widget>
+  <widget class="QGroupBox" name="groupBox_4">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>130</y>
+     <width>401</width>
+     <height>51</height>
+    </rect>
+   </property>
+   <property name="title">
+    <string/>
+   </property>
+   <widget class="QCheckBox" name="checkBox_2">
+    <property name="geometry">
+     <rect>
+      <x>10</x>
+      <y>18</y>
+      <width>381</width>
+      <height>24</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Align partitions with 4KB</string>
+    </property>
+    <property name="checked">
+     <bool>true</bool>
+    </property>
+   </widget>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/LinuxGUI/Ventoy2Disk/QT/refresh_icon_data.c b/LinuxGUI/Ventoy2Disk/QT/refresh_icon_data.c
new file mode 100644 (file)
index 0000000..0b678ff
--- /dev/null
@@ -0,0 +1,300 @@
+/******************************************************************************\r
+ * refresh_icon_data.c\r
+ *\r
+ * Copyright (c) 2021, longpanda <admin@ventoy.net>\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License as\r
+ * published by the Free Software Foundation; either version 3 of the\r
+ * License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful, but\r
+ * WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+ * General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.\r
+ *\r
+ */\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+\r
+static unsigned char refresh_icon_hexData[4286] = {\r
+    0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x20, 0x20, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0xA8, 0x10,\r
+    0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00,\r
+    0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x27,\r
+    0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x0C, 0xA6, 0xBE,\r
+    0x32, 0x2D, 0xA6, 0xBE, 0x32, 0x54, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0x81, 0xA6, 0xBE,\r
+    0x32, 0x81, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0x54, 0xA6, 0xBE, 0x32, 0x2D, 0xA6, 0xBE,\r
+    0x32, 0x0C, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x21, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0xBF, 0xA6, 0xBE,\r
+    0x32, 0xEB, 0xA6, 0xBE, 0x32, 0xFC, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFC, 0xA6, 0xBE, 0x32, 0xEB, 0xA6, 0xBE,\r
+    0x32, 0xBF, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0x21, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x10, 0xA6, 0xBE,\r
+    0x32, 0x71, 0xA6, 0xBE, 0x32, 0xD9, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xDA, 0xA6, 0xBE, 0x32, 0x71, 0xA6, 0xBE,\r
+    0x32, 0x10, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x29, 0xA6, 0xBE, 0x32, 0xB2, 0xA6, 0xBE,\r
+    0x32, 0xFE, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xA5, 0xBD,\r
+    0x2F, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xA5, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFE, 0xA6, 0xBE,\r
+    0x32, 0xB2, 0xA6, 0xBE, 0x32, 0x29, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x35, 0xA6, 0xBE, 0x32, 0xCF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xA5, 0xBE,\r
+    0x31, 0xFF, 0xAC, 0xC3, 0x40, 0xFF, 0xB7, 0xCA, 0x59, 0xFF, 0xBF, 0xD0, 0x6B, 0xFF, 0xC0, 0xD1,\r
+    0x6E, 0xFF, 0xBA, 0xCD, 0x60, 0xFF, 0xAF, 0xC5, 0x48, 0xFF, 0xA7, 0xBF, 0x34, 0xFF, 0xA5, 0xBD,\r
+    0x2F, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xCF, 0xA6, 0xBE, 0x32, 0x35, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x29, 0xA6, 0xBE, 0x32, 0xCF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xB5, 0xC9, 0x54, 0xFF, 0xD4, 0xE0,\r
+    0x9D, 0xFF, 0xED, 0xF2, 0xD6, 0xFF, 0xF9, 0xFB, 0xF1, 0xFF, 0xFD, 0xFD, 0xFA, 0xFF, 0xFD, 0xFE,\r
+    0xFB, 0xFF, 0xFB, 0xFC, 0xF5, 0xFF, 0xF2, 0xF6, 0xE1, 0xFF, 0xDD, 0xE6, 0xB1, 0xFF, 0xBD, 0xCF,\r
+    0x67, 0xFF, 0xA7, 0xBF, 0x35, 0xFF, 0xA5, 0xBE, 0x30, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xCF, 0xA6, 0xBE, 0x32, 0x29, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x10, 0xA6, 0xBE,\r
+    0x32, 0xB2, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x31, 0xFF, 0xA8, 0xC0, 0x37, 0xFF, 0xCB, 0xD9, 0x87, 0xFF, 0xF4, 0xF7, 0xE6, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xFB,\r
+    0xF4, 0xFF, 0xD9, 0xE4, 0xA8, 0xFF, 0xAF, 0xC4, 0x46, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xB2, 0xA6, 0xBE,\r
+    0x32, 0x10, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x71, 0xA6, 0xBE,\r
+    0x32, 0xFE, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA9, 0xC0,\r
+    0x38, 0xFF, 0xD5, 0xE0, 0x9D, 0xFF, 0xFD, 0xFE, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE,\r
+    0xFD, 0xFF, 0xEE, 0xF3, 0xD9, 0xFF, 0xD9, 0xE3, 0xA8, 0xFF, 0xCC, 0xDA, 0x8A, 0xFF, 0xCA, 0xD8,\r
+    0x85, 0xFF, 0xD3, 0xDF, 0x99, 0xFF, 0xE6, 0xEC, 0xC4, 0xFF, 0xFA, 0xFB, 0xF3, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xED, 0xC7, 0xFF, 0xB1, 0xC6, 0x4C, 0xFF, 0xA5, 0xBD,\r
+    0x30, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFE, 0xA6, 0xBE,\r
+    0x32, 0x71, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x21, 0xA6, 0xBE, 0x32, 0xDA, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xCD, 0xDB,\r
+    0x8C, 0xFF, 0xFD, 0xFE, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF4, 0xF7, 0xE7, 0xFF, 0xCB, 0xD9,\r
+    0x87, 0xFF, 0xAE, 0xC3, 0x43, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA4, 0xBD, 0x2F, 0xFF, 0xA4, 0xBD,\r
+    0x2E, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xA9, 0xC0, 0x38, 0xFF, 0xBD, 0xCF, 0x66, 0xFF, 0xE8, 0xEE,\r
+    0xC9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0xEB, 0xC1, 0xFF, 0xAD, 0xC3,\r
+    0x41, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xDA, 0xA6, 0xBE, 0x32, 0x21, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBD,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xA4, 0xBC, 0x2D, 0xFF, 0xB8, 0xCB, 0x5C, 0xFF, 0xF6, 0xF9,\r
+    0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xF5, 0xDF, 0xFF, 0xBA, 0xCD, 0x60, 0xFF, 0xA4, 0xBD,\r
+    0x2E, 0xFF, 0xA5, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xAE, 0xC4,\r
+    0x44, 0xFF, 0xE2, 0xE9, 0xBB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xD6,\r
+    0x7E, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x0C, 0xA6, 0xBE, 0x32, 0xC0, 0xA6, 0xBE, 0x32, 0xFF, 0xA9, 0xC0,\r
+    0x39, 0xFF, 0xC8, 0xD7, 0x80, 0xFF, 0xD0, 0xDC, 0x92, 0xFF, 0xE7, 0xEE, 0xC8, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE6, 0xED, 0xC5, 0xFF, 0xCC, 0xDA, 0x8A, 0xFF, 0xB0, 0xC5,\r
+    0x49, 0xFF, 0xA5, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD,\r
+    0x30, 0xFF, 0xB0, 0xC6, 0x4A, 0xFF, 0xE3, 0xEA, 0xBE, 0xFF, 0xEA, 0xEF, 0xCE, 0xFF, 0xB8, 0xCB,\r
+    0x5C, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xBF, 0xA6, 0xBE, 0x32, 0x0C, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x2E, 0xA6, 0xBE, 0x32, 0xEB, 0xA6, 0xBE, 0x32, 0xFF, 0xA8, 0xC0,\r
+    0x37, 0xFF, 0xE0, 0xE8, 0xB8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF6, 0xE3, 0xFF, 0xB3, 0xC7,\r
+    0x4F, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xAA, 0xC1, 0x3A, 0xFF, 0xAB, 0xC1, 0x3D, 0xFF, 0xA6, 0xBE,\r
+    0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xEB, 0xA6, 0xBE, 0x32, 0x2D, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x54, 0xA6, 0xBE, 0x32, 0xFC, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD,\r
+    0x30, 0xFF, 0xB6, 0xCA, 0x58, 0xFF, 0xF4, 0xF7, 0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFE, 0xFB, 0xFF, 0xC9, 0xD8, 0x84, 0xFF, 0xA5, 0xBD,\r
+    0x30, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBE, 0x31, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFC, 0xA6, 0xBE, 0x32, 0x54, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA5, 0xBE, 0x30, 0xFF, 0xCD, 0xDB, 0x8C, 0xFF, 0xFE, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE2, 0xEA, 0xBC, 0xFF, 0xAA, 0xC1, 0x3A, 0xFF, 0xA6, 0xBE,\r
+    0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xAB, 0xC2, 0x3E, 0xFF, 0xBB, 0xCE, 0x63, 0xFF, 0xA7, 0xBF,\r
+    0x35, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x81, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xAB, 0xC2, 0x3E, 0xFF, 0xE6, 0xED, 0xC5, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xF5, 0xF8, 0xE8, 0xFF, 0xB7, 0xCB, 0x5A, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA5, 0xBE, 0x31, 0xFF, 0xCE, 0xDB, 0x8F, 0xFF, 0xF7, 0xF9, 0xEC, 0xFF, 0xBD, 0xCF,\r
+    0x67, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0x81, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x81, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xBB, 0xCD, 0x63, 0xFF, 0xF6, 0xF8,\r
+    0xEA, 0xFF, 0xCE, 0xDB, 0x8F, 0xFF, 0xA5, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD,\r
+    0x30, 0xFF, 0xB7, 0xCB, 0x5A, 0xFF, 0xF5, 0xF8, 0xE8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0xEE,\r
+    0xC9, 0xFF, 0xAC, 0xC2, 0x40, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0x81, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA7, 0xBF, 0x34, 0xFF, 0xBA, 0xCD,\r
+    0x60, 0xFF, 0xAB, 0xC2, 0x3E, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xAA, 0xC1,\r
+    0x3A, 0xFF, 0xE2, 0xEA, 0xBC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\r
+    0xFE, 0xFF, 0xCF, 0xDC, 0x90, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x54, 0xA6, 0xBE, 0x32, 0xFC, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD,\r
+    0x2F, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xC9, 0xD8,\r
+    0x84, 0xFF, 0xFD, 0xFE, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xF5, 0xF8, 0xE9, 0xFF, 0xB8, 0xCB, 0x5B, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFC, 0xA6, 0xBE, 0x32, 0x54, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x2E, 0xA6, 0xBE, 0x32, 0xEB, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA9, 0xC0,\r
+    0x38, 0xFF, 0xA8, 0xBF, 0x37, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xB2, 0xC7, 0x4F, 0xFF, 0xF2, 0xF6,\r
+    0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE2, 0xE9, 0xBB, 0xFF, 0xA9, 0xC0, 0x38, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xEB, 0xA6, 0xBE, 0x32, 0x2D, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x0C, 0xA6, 0xBE, 0x32, 0xC0, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xB5, 0xC9, 0x54, 0xFF, 0xE4, 0xEB,\r
+    0xC1, 0xFF, 0xDF, 0xE8, 0xB5, 0xFF, 0xAF, 0xC5, 0x47, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBE, 0x31, 0xFF, 0xAF, 0xC5, 0x47, 0xFF, 0xCA, 0xD8,\r
+    0x85, 0xFF, 0xE2, 0xE9, 0xBB, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE9, 0xEF,\r
+    0xCD, 0xFF, 0xCE, 0xDB, 0x8F, 0xFF, 0xC7, 0xD6, 0x7E, 0xFF, 0xA9, 0xC0, 0x39, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xBF, 0xA6, 0xBE, 0x32, 0x0C, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBD,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x73, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xC6, 0xD6, 0x7C, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xE8, 0xB5, 0xFF, 0xAC, 0xC3, 0x40, 0xFF, 0xA5, 0xBD,\r
+    0x2F, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA4, 0xBD, 0x2E, 0xFF, 0xB5, 0xC9,\r
+    0x55, 0xFF, 0xED, 0xF2, 0xD6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFB, 0xF1, 0xFF, 0xBC, 0xCE,\r
+    0x65, 0xFF, 0xA4, 0xBC, 0x2C, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x21, 0xA6, 0xBE, 0x32, 0xDA, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xAE, 0xC4, 0x44, 0xFF, 0xE6, 0xED,\r
+    0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0xEB, 0xC1, 0xFF, 0xB9, 0xCC,\r
+    0x5E, 0xFF, 0xA7, 0xBF, 0x35, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xA4, 0xBD, 0x2E, 0xFF, 0xA4, 0xBD,\r
+    0x2E, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xAB, 0xC1, 0x3D, 0xFF, 0xC5, 0xD5, 0x79, 0xFF, 0xF1, 0xF5,\r
+    0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xD3, 0xDF, 0x99, 0xFF, 0xA7, 0xBE,\r
+    0x33, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xDA, 0xA6, 0xBE, 0x32, 0x21, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE,\r
+    0x32, 0xFE, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xB3, 0xC8,\r
+    0x51, 0xFF, 0xE9, 0xEF, 0xCD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFA,\r
+    0xEE, 0xFF, 0xE1, 0xE9, 0xBA, 0xFF, 0xCD, 0xDB, 0x8C, 0xFF, 0xC4, 0xD4, 0x78, 0xFF, 0xC6, 0xD6,\r
+    0x7C, 0xFF, 0xD3, 0xDF, 0x9A, 0xFF, 0xE9, 0xEF, 0xCD, 0xFF, 0xFC, 0xFD, 0xF9, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xDB, 0xE4, 0xAB, 0xFF, 0xAA, 0xC1, 0x3C, 0xFF, 0xA6, 0xBE,\r
+    0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFE, 0xA6, 0xBE,\r
+    0x32, 0x71, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x10, 0xA6, 0xBE,\r
+    0x32, 0xB3, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA5, 0xBD,\r
+    0x30, 0xFF, 0xB1, 0xC6, 0x4B, 0xFF, 0xDD, 0xE6, 0xB2, 0xFF, 0xFC, 0xFD, 0xF8, 0xFF, 0xFF, 0xFF,\r
+    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF,\r
+    0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFA,\r
+    0xEE, 0xFF, 0xD1, 0xDE, 0x96, 0xFF, 0xAA, 0xC1, 0x3C, 0xFF, 0xA5, 0xBE, 0x31, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xB2, 0xA6, 0xBE,\r
+    0x32, 0x10, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x29, 0xA6, 0xBE, 0x32, 0xCF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xA9, 0xC0, 0x38, 0xFF, 0xC1, 0xD2, 0x71, 0xFF, 0xE2, 0xEA,\r
+    0xBC, 0xFF, 0xF5, 0xF8, 0xE9, 0xFF, 0xFD, 0xFD, 0xFA, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF,\r
+    0xFE, 0xFF, 0xFB, 0xFC, 0xF7, 0xFF, 0xF2, 0xF5, 0xE1, 0xFF, 0xDB, 0xE5, 0xAC, 0xFF, 0xB9, 0xCC,\r
+    0x5F, 0xFF, 0xA6, 0xBE, 0x33, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xCF, 0xA6, 0xBE, 0x32, 0x29, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x35, 0xA6, 0xBE, 0x32, 0xCF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x31, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xA8, 0xBF,\r
+    0x36, 0xFF, 0xB3, 0xC7, 0x4F, 0xFF, 0xBF, 0xD0, 0x6B, 0xFF, 0xC5, 0xD5, 0x7A, 0xFF, 0xC4, 0xD4,\r
+    0x78, 0xFF, 0xBC, 0xCE, 0x64, 0xFF, 0xB0, 0xC5, 0x48, 0xFF, 0xA6, 0xBE, 0x33, 0xFF, 0xA5, 0xBD,\r
+    0x30, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xCF, 0xA6, 0xBE, 0x32, 0x35, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x29, 0xA6, 0xBE, 0x32, 0xB2, 0xA6, 0xBE,\r
+    0x32, 0xFE, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA5, 0xBD, 0x30, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xA4, 0xBD, 0x2E, 0xFF, 0xA4, 0xBD,\r
+    0x2E, 0xFF, 0xA5, 0xBD, 0x2F, 0xFF, 0xA5, 0xBE, 0x31, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFE, 0xA6, 0xBE,\r
+    0x32, 0xB3, 0xA6, 0xBE, 0x32, 0x29, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x10, 0xA6, 0xBE,\r
+    0x32, 0x71, 0xA6, 0xBE, 0x32, 0xDA, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xDA, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE,\r
+    0x32, 0x10, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x21, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0xBF, 0xA6, 0xBE,\r
+    0x32, 0xEB, 0xA6, 0xBE, 0x32, 0xFC, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE,\r
+    0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFF, 0xA6, 0xBE, 0x32, 0xFC, 0xA6, 0xBE, 0x32, 0xEB, 0xA6, 0xBE,\r
+    0x32, 0xC0, 0xA6, 0xBE, 0x32, 0x73, 0xA6, 0xBE, 0x32, 0x21, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x0C, 0xA6, 0xBE,\r
+    0x32, 0x2D, 0xA6, 0xBE, 0x32, 0x54, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0x81, 0xA6, 0xBE,\r
+    0x32, 0x81, 0xA6, 0xBE, 0x32, 0x72, 0xA6, 0xBE, 0x32, 0x54, 0xA6, 0xBE, 0x32, 0x2E, 0xA6, 0xBE,\r
+    0x32, 0x0C, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBD, 0x31, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE,\r
+    0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0xA6, 0xBE, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80,\r
+    0x01, 0xFF, 0xFE, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00,\r
+    0x00, 0x07, 0xC0, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,\r
+    0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,\r
+    0x00, 0x01, 0xC0, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xF0, 0x00,\r
+    0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x01, 0xFF \r
+};\r
+\r
+void *get_refresh_icon_raw_data(int *len)\r
+{\r
+    *len = (int)sizeof(refresh_icon_hexData);\r
+    return refresh_icon_hexData;\r
+}\r
+\r
diff --git a/LinuxGUI/Ventoy2Disk/QT/secure_icon_data.c b/LinuxGUI/Ventoy2Disk/QT/secure_icon_data.c
new file mode 100644 (file)
index 0000000..d72c847
--- /dev/null
@@ -0,0 +1,91 @@
+/******************************************************************************\r
+ * secure_icon_data.c\r
+ *\r
+ * Copyright (c) 2021, longpanda <admin@ventoy.net>\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License as\r
+ * published by the Free Software Foundation; either version 3 of the\r
+ * License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful, but\r
+ * WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+ * General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.\r
+ *\r
+ */\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+\r
+static unsigned char secure_icon_hexData[958] = {\r
+    0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x0D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xA8, 0x03,\r
+    0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x20, 0x00,\r
+    0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x46, 0x5C,\r
+    0x00, 0x00, 0x46, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C,\r
+    0xFB, 0x01, 0x00, 0x8C, 0xFB, 0x2E, 0x00, 0x8C, 0xFB, 0x52, 0x00, 0x8C, 0xFB, 0x53, 0x00, 0x8C,\r
+    0xFB, 0x53, 0x00, 0x8C, 0xFB, 0x53, 0x00, 0x8C, 0xFB, 0x53, 0x00, 0x8C, 0xFB, 0x53, 0x00, 0x8C,\r
+    0xFB, 0x53, 0x00, 0x8C, 0xFB, 0x53, 0x00, 0x8C, 0xFB, 0x52, 0x00, 0x8C, 0xFB, 0x2E, 0x00, 0x8C,\r
+    0xFB, 0x01, 0x00, 0x8C, 0xFB, 0x3E, 0x00, 0x8C, 0xFB, 0xDA, 0x00, 0x8C, 0xFB, 0xF8, 0x00, 0x8C,\r
+    0xFB, 0xF7, 0x00, 0x8C, 0xFB, 0xF7, 0x00, 0x8C, 0xFB, 0xF7, 0x00, 0x8C, 0xFB, 0xF7, 0x00, 0x8C,\r
+    0xFB, 0xF7, 0x00, 0x8C, 0xFB, 0xF7, 0x00, 0x8C, 0xFB, 0xF7, 0x00, 0x8C, 0xFB, 0xF8, 0x00, 0x8C,\r
+    0xFB, 0xDA, 0x00, 0x8C, 0xFB, 0x3E, 0x00, 0x8C, 0xFB, 0x78, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0x78, 0x00, 0x8C, 0xFB, 0x7B, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0x7B, 0x00, 0x8C,\r
+    0xFB, 0x7A, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x86, 0xF1, 0xFF, 0x00, 0x7C, 0xDF, 0xFF, 0x00, 0x86, 0xF1, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0x7A, 0x00, 0x8C, 0xFB, 0x7A, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFC, 0xFF, 0x00, 0x7C, 0xDF, 0xFF, 0x00, 0x6C, 0xC4, 0xFF, 0x00, 0x7C,\r
+    0xDF, 0xFF, 0x00, 0x8C, 0xFC, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0x7A, 0x00, 0x8C, 0xFB, 0x7A, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x87, 0xF2, 0xFF, 0x00, 0x7D,\r
+    0xE1, 0xFF, 0x00, 0x87, 0xF2, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0x7A, 0x00, 0x8C, 0xFB, 0x7B, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFC, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0x7B, 0x00, 0x8C,\r
+    0xFB, 0x77, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C, 0xFB, 0xFF, 0x00, 0x8C,\r
+    0xFB, 0x77, 0x00, 0x8C, 0xFB, 0x3A, 0x00, 0x8C, 0xFB, 0xD4, 0x01, 0x8B, 0xF9, 0xF7, 0x03, 0x89,\r
+    0xF3, 0xFF, 0x01, 0x8B, 0xF8, 0xF8, 0x00, 0x8C, 0xFB, 0xF4, 0x00, 0x8C, 0xFB, 0xF4, 0x00, 0x8C,\r
+    0xFB, 0xF4, 0x01, 0x8B, 0xF8, 0xF8, 0x03, 0x89, 0xF3, 0xFF, 0x01, 0x8B, 0xF9, 0xF7, 0x00, 0x8C,\r
+    0xFB, 0xD4, 0x00, 0x8C, 0xFB, 0x3A, 0x00, 0x8C, 0xFB, 0x00, 0x00, 0x93, 0xFF, 0x1E, 0x1D, 0x6B,\r
+    0xA9, 0x6B, 0x32, 0x54, 0x6F, 0xF6, 0x22, 0x65, 0x9A, 0x7D, 0x00, 0x90, 0xFF, 0x39, 0x00, 0x8C,\r
+    0xFB, 0x3C, 0x00, 0x90, 0xFF, 0x39, 0x22, 0x65, 0x9A, 0x7D, 0x32, 0x54, 0x6F, 0xF6, 0x1D, 0x6B,\r
+    0xA9, 0x6B, 0x00, 0x93, 0xFF, 0x1E, 0x00, 0x8C, 0xFB, 0x00, 0x00, 0x8C, 0xFB, 0x00, 0x2A, 0x5D,\r
+    0x85, 0x00, 0x46, 0x3D, 0x36, 0x3A, 0x43, 0x41, 0x3F, 0xF3, 0x45, 0x3F, 0x3A, 0x58, 0x26, 0x62,\r
+    0x91, 0x00, 0x00, 0x8D, 0xFD, 0x00, 0x26, 0x62, 0x91, 0x00, 0x45, 0x3F, 0x3A, 0x58, 0x43, 0x41,\r
+    0x3F, 0xF3, 0x46, 0x3D, 0x36, 0x3A, 0x2A, 0x5D, 0x85, 0x00, 0x00, 0x8C, 0xFB, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x42, 0x42, 0x42, 0x00, 0x42, 0x42, 0x42, 0x27, 0x42, 0x42, 0x42, 0xE9, 0x42, 0x42,\r
+    0x42, 0x94, 0x42, 0x42, 0x42, 0x01, 0x42, 0x42, 0x42, 0x00, 0x42, 0x42, 0x42, 0x01, 0x42, 0x42,\r
+    0x42, 0x94, 0x42, 0x42, 0x42, 0xE9, 0x42, 0x42, 0x42, 0x27, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x00, 0x42, 0x42, 0x42, 0x04, 0x42, 0x42,\r
+    0x42, 0x96, 0x42, 0x42, 0x42, 0xF5, 0x42, 0x42, 0x42, 0x8E, 0x42, 0x42, 0x42, 0x53, 0x42, 0x42,\r
+    0x42, 0x8E, 0x42, 0x42, 0x42, 0xF5, 0x42, 0x42, 0x42, 0x96, 0x42, 0x42, 0x42, 0x04, 0x42, 0x42,\r
+    0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x00, 0x42, 0x42,\r
+    0x42, 0x00, 0x42, 0x42, 0x42, 0x16, 0x42, 0x42, 0x42, 0x96, 0x42, 0x42, 0x42, 0xE9, 0x42, 0x42,\r
+    0x42, 0xF3, 0x42, 0x42, 0x42, 0xE9, 0x42, 0x42, 0x42, 0x96, 0x42, 0x42, 0x42, 0x16, 0x42, 0x42,\r
+    0x42, 0x00, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,\r
+    0x42, 0x00, 0x42, 0x42, 0x42, 0x00, 0x42, 0x42, 0x42, 0x00, 0x42, 0x42, 0x42, 0x05, 0x42, 0x42,\r
+    0x42, 0x31, 0x42, 0x42, 0x42, 0x4B, 0x42, 0x42, 0x42, 0x31, 0x42, 0x42, 0x42, 0x05, 0x42, 0x42,\r
+    0x42, 0x00, 0x42, 0x42, 0x42, 0x00, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08,\r
+    0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00 \r
+};\r
+\r
+void *get_secure_icon_raw_data(int *len)\r
+{\r
+    *len = (int)sizeof(secure_icon_hexData);\r
+    return secure_icon_hexData;\r
+}\r
diff --git a/LinuxGUI/Ventoy2Disk/QT/ventoy2diskwindow.cpp b/LinuxGUI/Ventoy2Disk/QT/ventoy2diskwindow.cpp
new file mode 100644 (file)
index 0000000..eac24eb
--- /dev/null
@@ -0,0 +1,881 @@
+#include "ventoy2diskwindow.h"
+#include "ui_ventoy2diskwindow.h"
+#include "partcfgdialog.h"
+
+#include <QMessageBox>
+
+extern "C" {
+#include "ventoy_define.h"
+#include "ventoy_util.h"
+#include "ventoy_disk.h"
+#include "ventoy_json.h"
+#include "ventoy_http.h"
+#include "ventoy_qt.h"
+}
+
+MyQThread::MyQThread(QObject *parent) : QThread(parent)
+{
+    m_index = -1;
+    m_type = 0;
+    m_running = false;
+}
+
+void MyQThread::install_run()
+{
+    int ret = 0;
+    int pos = 0;
+    int buflen = 0;
+    int percent = 0;
+    char buf[1024];
+    char dec[64];
+    char out[256];
+    char disk_name[32];    
+    ventoy_disk *cur;
+
+    vlog("install run %d ...\n", m_index);
+
+    cur = g_disk_list + m_index;
+    snprintf(disk_name, sizeof(disk_name), "%s", cur->disk_name);
+    snprintf(dec, sizeof(dec), "%llu", (unsigned long long)m_reserve_space);
+
+    buflen = sizeof(buf);
+    VTOY_JSON_FMT_BEGIN(pos, buf, buflen);
+    VTOY_JSON_FMT_OBJ_BEGIN();
+    VTOY_JSON_FMT_STRN("method", "install");
+    VTOY_JSON_FMT_STRN("disk", disk_name);
+    VTOY_JSON_FMT_STRN("reserve_space", dec);
+    VTOY_JSON_FMT_UINT("partstyle", ventoy_code_get_cur_part_style());
+    VTOY_JSON_FMT_UINT("secure_boot", m_secureboot);
+    VTOY_JSON_FMT_UINT("align_4kb", m_align4K);
+    VTOY_JSON_FMT_OBJ_END();
+    VTOY_JSON_FMT_END(pos);
+
+    out[0] = 0;
+    ventoy_func_handler(buf, out, sizeof(out));
+    vlog("func handler install <%s>\n", out);
+
+    if (strstr(out, "success"))
+    {
+        while (percent != 100)
+        {
+            percent = ventoy_code_get_percent();
+            emit thread_event(THREAD_MSG_PROGRESS_BAR, percent);
+            msleep(50);
+        }
+
+        ret = ventoy_code_get_result();
+        ventoy_code_refresh_device();
+        cur = NULL;
+    }
+    else
+    {
+        ret = 1;
+    }
+
+    emit thread_event(THREAD_MSG_INSTALL_FINISH, ret);
+    m_running = false;
+}
+
+void MyQThread::update_run()
+{
+    int ret = 0;
+    int percent = 0;
+    char buf[1024];
+    char out[256];
+    char disk_name[32]; 
+    ventoy_disk *cur;
+
+    vlog("install run %d ...\n", m_index);
+
+    cur = g_disk_list + m_index;
+    snprintf(disk_name, sizeof(disk_name), "%s", cur->disk_name);
+    snprintf(buf, sizeof(buf), "{\"method\":\"update\",\"disk\":\"%s\",\"secure_boot\":%d}", disk_name, m_secureboot);
+
+    out[0] = 0;
+    ventoy_func_handler(buf, out, sizeof(out));
+    vlog("func handler update <%s>\n", out);
+
+    if (strstr(out, "success"))
+    {
+        while (percent != 100)
+        {
+            percent = ventoy_code_get_percent();
+            emit thread_event(THREAD_MSG_PROGRESS_BAR, percent);
+            msleep(50);
+        }
+
+        ret = ventoy_code_get_result();
+        ventoy_code_refresh_device();
+        cur = NULL;
+    }
+    else
+    {
+        ret = 1;
+    }
+
+    emit thread_event(THREAD_MSG_UPDATE_FINISH, ret);
+    m_running = false;
+}
+
+void MyQThread::run()
+{
+    if (THREAD_TYPE_INSTALL == m_type)
+    {
+        install_run();
+    }
+    else if (THREAD_TYPE_UPDATE == m_type)
+    {
+        update_run();
+    }
+    else
+    {
+
+    }
+}
+
+
+Ventoy2DiskWindow::Ventoy2DiskWindow(QWidget *parent)
+    : QMainWindow(parent)
+    , ui(new Ui::Ventoy2DiskWindow)
+{
+    m_partcfg = new PartCfgDialog();
+    m_part_group = new QActionGroup(this);
+    m_lang_group = new QActionGroup(this);
+    m_thread = new MyQThread(this);
+
+    ui->setupUi(this);
+}
+
+Ventoy2DiskWindow::~Ventoy2DiskWindow()
+{
+    delete m_partcfg;
+    delete m_part_group;
+    delete m_lang_group;
+    delete m_thread;
+    delete ui;
+}
+
+bool LangCompare(const QString &s1, const QString &s2)
+{
+    if (true == s1.startsWith("Chinese Simplified") && false == s2.startsWith("Chinese Simplified"))
+    {
+        return true;
+    }
+    else if (false == s1.startsWith("Chinese Simplified") && true == s2.startsWith("Chinese Simplified"))
+    {
+        return false;
+    }
+    else
+    {
+        return s1 < s2;
+    }
+}
+
+int Ventoy2DiskWindow::lang_string(const QString &id, QString &str)
+{
+    QString cur = ventoy_code_get_cur_language();
+
+    for (QJsonArray::iterator p = m_lang_array.begin(); p != m_lang_array.end(); p++)
+    {
+        if (p->toObject().value("name") == cur)
+        {
+            str = p->toObject().value(id).toString();
+            str = str.replace("#@", "\r\n");
+            return 0;
+        }
+    }
+
+    return 1;
+}
+
+void Ventoy2DiskWindow::update_ui_language()
+{
+    QString dev;
+    QJsonObject obj;
+    QString cur = ventoy_code_get_cur_language();
+
+    for (QJsonArray::iterator p = m_lang_array.begin(); p != m_lang_array.end(); p++)
+    {
+        if (p->toObject().value("name") == cur)
+        {
+            obj = p->toObject();
+            break;
+        }
+    }
+
+    ui->menuOption->setTitle(_LANG_STR("STR_MENU_OPTION"));
+    ui->actionSecure_Boot_Support->setText(_LANG_STR("STR_MENU_SECURE_BOOT"));
+    ui->menuPartition_Style->setTitle(_LANG_STR("STR_MENU_PART_STYLE"));
+    ui->actionPartition_Configuration->setText(_LANG_STR("STR_MENU_PART_CFG"));
+    ui->actionClear_Ventoy->setText(_LANG_STR("STR_MENU_CLEAR"));
+    ui->actionShow_All_Devices->setText(_LANG_STR("STR_SHOW_ALL_DEV"));
+
+    dev = _LANG_STR("STR_DEVICE");
+    if (m_partcfg->reserve)
+    {
+        QString str;
+        str.sprintf(" [ -%lld%s ]", (long long)m_partcfg->resvalue, m_partcfg->unit ? "GB" : "MB");
+        ui->groupBoxDevice->setTitle(dev + str);
+    }
+    else
+    {
+        ui->groupBoxDevice->setTitle(dev);
+    }
+
+    ui->groupBoxVentoyLocal->setTitle(_LANG_STR("STR_LOCAL_VER"));
+    ui->groupBoxVentoyDevice->setTitle(_LANG_STR("STR_DISK_VER"));
+    ui->groupBoxStatus->setTitle(_LANG_STR("STR_STATUS"));
+    ui->ButtonInstall->setText(_LANG_STR("STR_INSTALL"));
+    ui->ButtonUpdate->setText(_LANG_STR("STR_UPDATE"));
+    m_partcfg->update_language_ui(obj);
+    m_partcfg->setWindowTitle(_LANG_STR("STR_MENU_PART_CFG"));
+}
+
+void Ventoy2DiskWindow::lang_check_action(QAction *act)
+{
+    ventoy_code_set_cur_language(act->text().toStdString().c_str());
+    update_ui_language();
+}
+
+void Ventoy2DiskWindow::LoadLanguages()
+{
+    QString curlang = ventoy_code_get_cur_language();
+    if (curlang.isEmpty())
+    {
+        QString LANG = qgetenv("LANG");
+        if (LANG.startsWith("zh_CN"))
+        {
+            ventoy_code_set_cur_language("Chinese Simplified (简体中文)");
+        }
+        else
+        {
+            ventoy_code_set_cur_language("English (English)");                    
+        }
+        curlang = ventoy_code_get_cur_language();
+    }
+
+
+    QFile inFile("./tool/languages.json");
+    inFile.open(QIODevice::ReadOnly|QIODevice::Text);
+    QByteArray data = inFile.readAll();
+    inFile.close();
+
+    QJsonParseError errorPtr;
+    QJsonDocument doc = QJsonDocument::fromJson(data, &errorPtr);
+
+    m_lang_array = doc.array();
+    QVector<QString> List;
+    for (QJsonArray::iterator p = m_lang_array.begin(); p != m_lang_array.end(); p++)
+    {
+        List.push_back(p->toObject().value("name").toString());
+    }
+
+    connect(m_lang_group, SIGNAL(triggered(QAction *)), this, SLOT(lang_check_action(QAction *)));
+
+    std::sort(List.begin(), List.end(), LangCompare);
+
+    for (QVector<QString>::iterator p = List.begin(); p != List.end(); p++)
+    {
+        QAction *action = new QAction(*p, m_lang_group);
+        action->setCheckable(true);
+
+        if (p->compare(curlang) == 0)
+        {
+            action->setChecked(true);
+            m_lang_group->triggered(action);
+        }
+
+        ui->menuLanguage->addAction(action);
+    }
+
+
+}
+
+void Ventoy2DiskWindow::part_style_check_action(QAction *action)
+{
+    int style = 0;
+
+    if (action->text() == "MBR")
+    {
+        style = 0;
+        ui->labelVentoyLocalPartStyle->setText("MBR");
+    }
+    else
+    {
+        style = 1;
+        ui->labelVentoyLocalPartStyle->setText("GPT");
+    }
+
+    if (style != ventoy_code_get_cur_part_style())
+    {
+        ventoy_code_set_cur_part_style(style);
+    }
+}
+
+static ventoy_disk *select_active_dev(const QString &select, int *activeid)
+{
+    int i;
+    int alldev = ventoy_code_get_cur_show_all();
+    ventoy_disk *cur = NULL;
+
+    /* find the match one */
+    if (!select.isEmpty())
+    {
+        for (i = 0; i < g_disk_num; i++)
+        {
+            cur = g_disk_list + i;
+            if (alldev == 0 && cur->type != VTOY_DEVICE_USB)
+            {
+                continue;
+            }
+
+            if (select.compare(cur->disk_name) == 0)
+            {
+                *activeid = i;
+                return cur;
+            }
+        }
+    }
+
+    /* find the first one that installed with Ventoy */
+    for (i = 0; i < g_disk_num; i++)
+    {
+        cur = g_disk_list + i;
+        if (alldev == 0 && cur->type != VTOY_DEVICE_USB)
+        {
+            continue;
+        }
+
+        if (cur->vtoydata.ventoy_valid)
+        {
+            *activeid = i;
+            return cur;
+        }
+    }
+
+    /* find the first USB interface device */
+    for (i = 0; i < g_disk_num; i++)
+    {
+        cur = g_disk_list + i;
+        if (alldev == 0 && cur->type != VTOY_DEVICE_USB)
+        {
+            continue;
+        }
+
+        if (cur->type == VTOY_DEVICE_USB)
+        {
+            *activeid = i;
+            return cur;
+        }
+    }
+
+    /* use the first one */
+    for (i = 0; i < g_disk_num; i++)
+    {
+        cur = g_disk_list + i;
+        if (alldev == 0 && cur->type != VTOY_DEVICE_USB)
+        {
+            continue;
+        }
+
+        *activeid = i;
+        return cur;
+    }
+
+    return NULL;
+}
+
+
+void Ventoy2DiskWindow::FillDeviceList(const QString &select)
+{
+    int active;
+    int count = 0;
+    int alldev = ventoy_code_get_cur_show_all();
+    ventoy_disk *cur;
+
+    ui->comboBoxDevice->clear();
+
+    for (int i = 0; i < g_disk_num; i++)
+    {
+        cur = g_disk_list + i;
+
+        if (alldev == 0 && cur->type != VTOY_DEVICE_USB)
+        {
+            continue;
+        }
+
+        QString item;
+        item.sprintf("%s  [%s]  %s", cur->disk_name, cur->human_readable_size, cur->disk_model);
+        ui->comboBoxDevice->addItem(item);
+        count++;
+    }
+
+    cur = select_active_dev(select, &active);
+    if (cur)
+    {
+        vlog("combox count:%d, active:%s id:%d\n", count, cur->disk_name, active);
+        ui->ButtonInstall->setEnabled(true);
+        ui->ButtonUpdate->setEnabled(cur->vtoydata.ventoy_valid);
+        ui->comboBoxDevice->setCurrentIndex(active);
+    }
+    else
+    {
+        vlog("combox count:%d, no active id\n", count);
+        ui->ButtonInstall->setEnabled(false);
+        ui->ButtonUpdate->setEnabled(false);
+    }
+}
+
+
+void Ventoy2DiskWindow::OnInitWindow(void)
+{
+    int len;
+    const uchar *data;
+    QIcon icon;
+    QPixmap pix1;
+    QPixmap pix2;
+    char ver[512];
+
+    ui->labelVentoyLocalSecure->hide();
+
+    m_part_group->addAction(ui->actionMBR);
+    m_part_group->addAction(ui->actionGPT);
+    connect(m_part_group, SIGNAL(triggered(QAction *)), this, SLOT(part_style_check_action(QAction *)));
+
+    if (ventoy_code_get_cur_part_style())
+    {
+        ui->actionGPT->setChecked(true);
+        m_part_group->triggered(ui->actionGPT);
+    }
+    else
+    {
+        ui->actionMBR->setChecked(true);
+        m_part_group->triggered(ui->actionMBR);
+    }
+
+    snprintf(ver, sizeof(ver), VERSION_FMT, ventoy_get_local_version());
+    ui->labelVentoyLocalVer->setText(QApplication::translate("Ventoy2DiskWindow", ver, nullptr));
+
+    LoadLanguages();
+
+    data = (const uchar *)get_refresh_icon_raw_data(&len);
+    pix1.loadFromData(data, len);
+    icon.addPixmap(pix1);
+    ui->ButtonRefresh->setIcon(icon);
+
+    data = (const uchar *)get_secure_icon_raw_data(&len);
+    pix2.loadFromData(data, len);
+    ui->labelVentoyLocalSecure->setPixmap(pix2);
+    ui->labelVentoyDeviceSecure->setPixmap(pix2);
+
+    ui->labelVentoyDeviceSecure->setHidden(true);
+    ui->labelVentoyDeviceVer->setText("");
+    ui->labelVentoyDevicePartStyle->setText("");
+
+    ui->actionShow_All_Devices->setChecked(ventoy_code_get_cur_show_all());
+
+    connect(m_thread, &MyQThread::thread_event, this,  &Ventoy2DiskWindow::thread_event);
+
+    FillDeviceList("");
+}
+
+void Ventoy2DiskWindow::showEvent(QShowEvent *ev)
+{
+    QMainWindow::showEvent(ev);
+    OnInitWindow();
+}
+
+void Ventoy2DiskWindow::on_ButtonInstall_clicked()
+{
+    int index;
+    quint64 size = 0, space = 0;
+    ventoy_disk *cur;
+    QString title_warn, title_err, msg;
+
+    lang_string("STR_ERROR", title_err);
+    lang_string("STR_WARNING", title_warn);
+
+    if (m_thread->m_running || ventoy_code_is_busy())
+    {
+        lang_string("STR_WAIT_PROCESS", msg);
+        QMessageBox::warning(NULL, title_warn, msg);
+        return;
+    }
+
+    index = ui->comboBoxDevice->currentIndex();
+    if (index < 0 || index > g_disk_num)
+    {
+        vlog("Invalid combobox current index %d\n", index);
+        return;
+    }
+
+    cur = g_disk_list + index;
+    if (ventoy_code_get_cur_part_style() == 0 && cur->size_in_byte > 2199023255552ULL)
+    {
+        lang_string("STR_DISK_2TB_MBR_ERROR", msg);
+        QMessageBox::critical(NULL, title_err, msg);
+        return;
+    }
+
+    if (m_partcfg->reserve)
+    {
+        size = cur->size_in_byte / SIZE_1MB;
+        space = m_partcfg->resvalue;
+        if (m_partcfg->unit == 1)
+        {
+            space = m_partcfg->resvalue * 1024;
+        }
+
+        if (size <= space || (size - space) <= VTOYEFI_PART_BYTES / SIZE_1MB)
+        {
+            lang_string("STR_SPACE_VAL_INVALID", msg);
+            QMessageBox::critical(NULL, title_err, msg);
+            vlog("reserved space too big.\n");
+            return;
+        }
+    }
+
+    lang_string("STR_INSTALL_TIP", msg);
+    if (QMessageBox::Yes != QMessageBox::warning(NULL, title_warn, msg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No))
+    {
+        return;
+    }
+
+    lang_string("STR_INSTALL_TIP2", msg);
+    if (QMessageBox::Yes != QMessageBox::warning(NULL, title_warn, msg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No))
+    {
+        return;
+    }
+
+    ui->ButtonRefresh->setEnabled(false);
+    ui->ButtonInstall->setEnabled(false);
+    ui->ButtonRefresh->setEnabled(false);
+
+    m_thread->m_type = THREAD_TYPE_INSTALL;
+    m_thread->m_index = index;
+    m_thread->m_reserve_space = space * SIZE_1MB;
+    m_thread->m_secureboot = ui->actionSecure_Boot_Support->isChecked();
+    m_thread->m_align4K = m_partcfg->align;
+    m_thread->m_running = true;
+
+    m_thread->start();
+}
+
+void Ventoy2DiskWindow::on_ButtonUpdate_clicked()
+{
+    int index;
+    ventoy_disk *cur;
+    QString title_info, title_warn, title_err, msg;
+
+    lang_string("STR_ERROR", title_err);
+    lang_string("STR_WARNING", title_warn);
+    lang_string("STR_INFO", title_info);
+
+    if (m_thread->m_running || ventoy_code_is_busy())
+    {        
+        lang_string("STR_WAIT_PROCESS", msg);
+        QMessageBox::warning(NULL, title_warn, msg);
+        return;
+    }
+
+    index = ui->comboBoxDevice->currentIndex();
+    if (index < 0 || index > g_disk_num)
+    {
+        vlog("Invalid combobox current index %d\n", index);
+        return;
+    }
+
+    cur = g_disk_list + index;
+    if (cur->vtoydata.ventoy_valid == 0)
+    {
+        vlog("invalid ventoy version");
+        return;
+    }
+
+    lang_string("STR_UPDATE_TIP", msg);
+    if (QMessageBox::Yes != QMessageBox::information(NULL, title_info, msg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No))
+    {
+        return;
+    }
+
+    ui->ButtonRefresh->setEnabled(false);
+    ui->ButtonInstall->setEnabled(false);
+    ui->ButtonRefresh->setEnabled(false);
+
+    m_thread->m_type = THREAD_TYPE_UPDATE;
+    m_thread->m_index = index;        
+    m_thread->m_secureboot = ui->actionSecure_Boot_Support->isChecked();
+
+    m_thread->m_running = true;
+    m_thread->start();
+}
+
+void Ventoy2DiskWindow::on_ButtonRefresh_clicked()
+{
+    QString title_warn, msg;
+
+    if (m_thread->m_running || ventoy_code_is_busy())
+    {
+        lang_string("STR_WARNING", title_warn);
+        lang_string("STR_WAIT_PROCESS", msg);
+        QMessageBox::warning(NULL, title_warn, msg);
+        return;
+    }
+
+    ventoy_code_refresh_device();
+    FillDeviceList("");
+}
+
+void Ventoy2DiskWindow::on_comboBoxDevice_currentIndexChanged(int index)
+{    
+    char ver[512];
+    ventoy_disk *cur;
+
+    ui->labelVentoyDeviceSecure->setHidden(true);
+    ui->labelVentoyDeviceVer->setText("");
+    ui->labelVentoyDevicePartStyle->setText("");
+
+    if (index < 0 || index > g_disk_num)
+    {
+        vlog("invalid combobox index %d\n", index);
+        return;
+    }
+
+    cur = g_disk_list + index;
+    if (cur->vtoydata.ventoy_valid)
+    {
+        if (cur->vtoydata.secure_boot_flag)
+        {
+            ui->labelVentoyDeviceSecure->setHidden(false);
+        }
+        else
+        {
+            ui->labelVentoyDeviceSecure->setHidden(true);
+        }
+
+        if ((int)(ui->actionSecure_Boot_Support->isChecked()) != cur->vtoydata.secure_boot_flag)
+        {
+            ui->actionSecure_Boot_Support->trigger();
+        }
+
+        snprintf(ver, sizeof(ver), VERSION_FMT, cur->vtoydata.ventoy_ver);
+        ui->labelVentoyDeviceVer->setText(QApplication::translate("Ventoy2DiskWindow", ver, nullptr));
+        ui->labelVentoyDevicePartStyle->setText(cur->vtoydata.partition_style ? "GPT" : "MBR");
+    }
+    else
+    {
+        if (ui->actionSecure_Boot_Support->isChecked())
+        {
+            ui->actionSecure_Boot_Support->trigger();
+        }
+    }
+}
+
+void Ventoy2DiskWindow::on_actionPartition_Configuration_triggered()
+{
+    m_partcfg->update_ui_status();
+    if (QDialog::Accepted == m_partcfg->exec())
+    {
+        QString str;
+        QString dev;
+        lang_string("STR_DEVICE", dev);
+
+        if (m_partcfg->reserve)
+        {
+            str.sprintf(" [ -%lld%s ]", (long long)m_partcfg->resvalue, m_partcfg->unit ? "GB" : "MB");
+            ui->groupBoxDevice->setTitle(dev + str);
+        }
+        else
+        {
+            ui->groupBoxDevice->setTitle(dev);
+        }
+    }
+}
+
+void Ventoy2DiskWindow::on_actionClear_Ventoy_triggered()
+{
+    int ret;
+    int index;
+    ventoy_disk *cur;
+    QString title_err, title_warn, title_info, msg;
+    char disk_name[64];
+    char buf[256];
+    char out[256];
+
+    lang_string("STR_ERROR", title_err);
+    lang_string("STR_WARNING", title_warn);
+    lang_string("STR_INFO", title_info);
+
+    if (m_thread->m_running || ventoy_code_is_busy())
+    {
+        lang_string("STR_WAIT_PROCESS", msg);
+        QMessageBox::warning(NULL, title_warn, msg);
+        return;
+    }
+
+    index = ui->comboBoxDevice->currentIndex();
+    if (index < 0 || index > g_disk_num)
+    {
+        vlog("Invalid combobox current index %d\n", index);
+        return;
+    }
+
+    cur = g_disk_list + index;
+
+    lang_string("STR_INSTALL_TIP", msg);
+    if (QMessageBox::Yes != QMessageBox::warning(NULL, title_warn, msg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No))
+    {
+        return;
+    }
+
+    lang_string("STR_INSTALL_TIP2", msg);
+    if (QMessageBox::Yes != QMessageBox::warning(NULL, title_warn, msg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No))
+    {
+        return;
+    }
+
+    snprintf(disk_name, sizeof(disk_name), "%s", cur->disk_name);
+    snprintf(buf, sizeof(buf), "{\"method\":\"clean\",\"disk\":\"%s\"}", disk_name);
+
+    out[0] = 0;
+    ventoy_func_handler(buf, out, sizeof(out));
+    vlog("func handler clean <%s>\n", out);
+
+    if (strstr(out, "success"))
+    {
+        ret = ventoy_code_get_result();
+        ventoy_code_refresh_device();
+        cur = NULL;
+    }
+    else
+    {
+        ret = 1;
+    }
+
+    if (ret == 0)
+    {
+        lang_string("STR_CLEAR_SUCCESS", msg);
+        QMessageBox::information(NULL, title_info, msg);
+    }
+    else
+    {
+        lang_string("STR_CLEAR_FAILED", msg);
+        QMessageBox::critical(NULL, title_err, msg);
+    }
+
+    FillDeviceList(disk_name);
+}
+
+void Ventoy2DiskWindow::on_actionShow_All_Devices_toggled(bool arg1)
+{
+    ventoy_code_set_cur_show_all(arg1);
+    FillDeviceList("");
+}
+
+
+void Ventoy2DiskWindow::closeEvent(QCloseEvent *event)
+{
+    vlog("On closeEvent ...\n");
+
+    if (m_thread->m_running)
+    {
+        QString title;
+        QString msg;
+
+        lang_string("STR_WARNING", title);
+        lang_string("STR_WAIT_PROCESS", msg);
+        QMessageBox::warning(NULL, title, msg);
+
+        event->ignore();
+        return;
+    }
+
+    ventoy_code_save_cfg();
+
+    event->accept();
+}
+
+void Ventoy2DiskWindow::on_actionSecure_Boot_Support_triggered()
+{
+    ui->labelVentoyLocalSecure->setHidden(!(ui->actionSecure_Boot_Support->isChecked()));
+}
+
+void Ventoy2DiskWindow::set_percent(int percent)
+{
+    int index;
+    QString status, radio;
+
+    ui->progressBar->setValue(percent);
+
+    lang_string("STR_STATUS", status);
+
+    if (percent == 0)
+    {
+        ui->groupBoxStatus->setTitle(status);
+    }
+    else
+    {
+        index = status.indexOf("-");
+        radio.sprintf("%d%%", percent);
+        ui->groupBoxStatus->setTitle(status.left(index + 2) + radio);
+    }
+}
+
+void Ventoy2DiskWindow::thread_event(int msg, int data)
+{
+    char disk_name[32];
+    QString title_err, title_info, tipmsg;
+
+    if (msg == THREAD_MSG_PROGRESS_BAR)
+    {
+        set_percent(data);
+    }
+    else if (msg == THREAD_MSG_INSTALL_FINISH)
+    {
+        lang_string("STR_ERROR", title_err);
+        lang_string("STR_INFO", title_info);
+
+        if (data == 0)
+        {
+            lang_string("STR_INSTALL_SUCCESS", tipmsg);
+            QMessageBox::information(NULL, title_info, tipmsg);
+        }
+        else
+        {
+            lang_string("STR_INSTALL_FAILED", tipmsg);
+            QMessageBox::critical(NULL, title_err, tipmsg);
+        }
+
+        set_percent(0);
+        ui->ButtonRefresh->setEnabled(true);
+        ui->ButtonInstall->setEnabled(true);
+        ui->ButtonRefresh->setEnabled(true);
+
+        snprintf(disk_name, sizeof(disk_name), "%s", g_disk_list[m_thread->m_index].disk_name);
+        FillDeviceList(disk_name);
+    }
+    else if (msg == THREAD_MSG_UPDATE_FINISH)
+    {
+        lang_string("STR_ERROR", title_err);
+        lang_string("STR_INFO", title_info);
+
+        if (data == 0)
+        {
+            lang_string("STR_UPDATE_SUCCESS", tipmsg);
+            QMessageBox::information(NULL, title_info, tipmsg);
+        }
+        else
+        {
+            lang_string("STR_UPDATE_FAILED", tipmsg);
+            QMessageBox::critical(NULL, title_err, tipmsg);
+        }
+
+        set_percent(0);
+        ui->ButtonRefresh->setEnabled(true);
+        ui->ButtonInstall->setEnabled(true);
+        ui->ButtonRefresh->setEnabled(true);
+
+        snprintf(disk_name, sizeof(disk_name), "%s", g_disk_list[m_thread->m_index].disk_name);
+        FillDeviceList(disk_name);
+    }
+}
diff --git a/LinuxGUI/Ventoy2Disk/QT/ventoy2diskwindow.h b/LinuxGUI/Ventoy2Disk/QT/ventoy2diskwindow.h
new file mode 100644 (file)
index 0000000..4a3be00
--- /dev/null
@@ -0,0 +1,105 @@
+#ifndef VENTOY2DISKWINDOW_H
+#define VENTOY2DISKWINDOW_H
+
+#include <QMainWindow>
+#include <QActionGroup>
+#include <QJsonDocument>
+#include <QFile>
+#include <QJsonObject>
+#include <QJsonArray>
+#include <QVector>
+#include <QtGlobal>
+#include <QDebug>
+#include <QCloseEvent>
+#include <QThread>
+#include "partcfgdialog.h"
+
+QT_BEGIN_NAMESPACE
+namespace Ui { class Ventoy2DiskWindow; }
+QT_END_NAMESPACE
+
+#define THREAD_TYPE_INSTALL             1
+#define THREAD_TYPE_UPDATE              2
+
+#define THREAD_MSG_PROGRESS_BAR         1
+#define THREAD_MSG_INSTALL_FINISH       2
+#define THREAD_MSG_UPDATE_FINISH        3
+
+class MyQThread : public QThread
+{
+    Q_OBJECT
+public:
+    quint64 m_reserve_space;
+    int m_index;
+    int m_type;
+    int m_secureboot;
+    int m_align4K;
+    bool m_running;
+    void install_run();
+    void update_run();
+
+    explicit MyQThread(QObject *parent = nullptr);
+protected:
+    void run();
+signals:
+    void thread_event(int msg, int data);
+public slots:
+};
+
+
+class Ventoy2DiskWindow : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    Ventoy2DiskWindow(QWidget *parent = nullptr);
+    ~Ventoy2DiskWindow();
+
+    QActionGroup *m_part_group;
+    QActionGroup *m_lang_group;
+    QJsonArray m_lang_array;
+    PartCfgDialog *m_partcfg;
+    MyQThread *m_thread;
+
+    void FillDeviceList(const QString &select);
+    void OnInitWindow(void);
+    void LoadLanguages();
+    int lang_string(const QString &id, QString &str);
+    void update_ui_language();
+    void set_percent(int percent);
+protected:
+    void showEvent(QShowEvent *ev);
+    void closeEvent(QCloseEvent *event);
+
+private slots:
+
+    void thread_event(int msg, int data);
+    void part_style_check_action(QAction *act);
+    void lang_check_action(QAction *act);
+
+    void on_ButtonInstall_clicked();
+
+    void on_ButtonUpdate_clicked();
+
+    void on_ButtonRefresh_clicked();
+
+    void on_comboBoxDevice_currentIndexChanged(int index);    
+
+    void on_actionPartition_Configuration_triggered();
+
+    void on_actionClear_Ventoy_triggered();
+
+    void on_actionShow_All_Devices_toggled(bool arg1);
+
+    void on_actionSecure_Boot_Support_triggered();
+
+private:
+    Ui::Ventoy2DiskWindow *ui;
+
+
+};
+
+#define _LANG_STR(id) obj.value(id).toString()
+#define VERSION_FMT "<html><head/><body><p><span style=\" font-size:20pt; font-weight:600; color:#ff0000;\">%s</span></p></body></html>"
+
+#endif // VENTOY2DISKWINDOW_H
diff --git a/LinuxGUI/Ventoy2Disk/QT/ventoy2diskwindow.ui b/LinuxGUI/Ventoy2Disk/QT/ventoy2diskwindow.ui
new file mode 100644 (file)
index 0000000..bb6da84
--- /dev/null
@@ -0,0 +1,323 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Ventoy2DiskWindow</class>
+ <widget class="QMainWindow" name="Ventoy2DiskWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>441</width>
+    <height>367</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Ventoy2Disk</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <widget class="QGroupBox" name="groupBoxDevice">
+    <property name="geometry">
+     <rect>
+      <x>10</x>
+      <y>10</y>
+      <width>421</width>
+      <height>80</height>
+     </rect>
+    </property>
+    <property name="title">
+     <string>Device</string>
+    </property>
+    <widget class="QComboBox" name="comboBoxDevice">
+     <property name="geometry">
+      <rect>
+       <x>10</x>
+       <y>40</y>
+       <width>361</width>
+       <height>26</height>
+      </rect>
+     </property>
+    </widget>
+    <widget class="QPushButton" name="ButtonRefresh">
+     <property name="geometry">
+      <rect>
+       <x>380</x>
+       <y>37</y>
+       <width>30</width>
+       <height>30</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+     <property name="icon">
+      <iconset>
+       <normaloff>../refresh.ico</normaloff>../refresh.ico</iconset>
+     </property>
+     <property name="iconSize">
+      <size>
+       <width>24</width>
+       <height>24</height>
+      </size>
+     </property>
+    </widget>
+   </widget>
+   <widget class="QGroupBox" name="groupBoxVentoyLocal">
+    <property name="geometry">
+     <rect>
+      <x>10</x>
+      <y>100</y>
+      <width>205</width>
+      <height>80</height>
+     </rect>
+    </property>
+    <property name="title">
+     <string>Ventoy In Package</string>
+    </property>
+    <property name="alignment">
+     <set>Qt::AlignCenter</set>
+    </property>
+    <widget class="QLabel" name="labelVentoyLocalVer">
+     <property name="geometry">
+      <rect>
+       <x>30</x>
+       <y>30</y>
+       <width>135</width>
+       <height>41</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:20pt; font-weight:600; color:#ff0000;&quot;&gt;1.0.53&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignCenter</set>
+     </property>
+    </widget>
+    <widget class="QLabel" name="labelVentoyLocalPartStyle">
+     <property name="geometry">
+      <rect>
+       <x>172</x>
+       <y>60</y>
+       <width>31</width>
+       <height>18</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;MBR&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+    </widget>
+    <widget class="QLabel" name="labelVentoyLocalSecure">
+     <property name="geometry">
+      <rect>
+       <x>12</x>
+       <y>36</y>
+       <width>21</width>
+       <height>31</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap>../secure.ico</pixmap>
+     </property>
+    </widget>
+   </widget>
+   <widget class="QGroupBox" name="groupBoxVentoyDevice">
+    <property name="geometry">
+     <rect>
+      <x>225</x>
+      <y>100</y>
+      <width>205</width>
+      <height>80</height>
+     </rect>
+    </property>
+    <property name="title">
+     <string>Ventoy In Device</string>
+    </property>
+    <property name="alignment">
+     <set>Qt::AlignCenter</set>
+    </property>
+    <widget class="QLabel" name="labelVentoyDeviceVer">
+     <property name="geometry">
+      <rect>
+       <x>30</x>
+       <y>30</y>
+       <width>135</width>
+       <height>41</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:20pt; font-weight:600; color:#ff0000;&quot;&gt;1.0.52&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignCenter</set>
+     </property>
+    </widget>
+    <widget class="QLabel" name="labelVentoyDevicePartStyle">
+     <property name="geometry">
+      <rect>
+       <x>172</x>
+       <y>60</y>
+       <width>31</width>
+       <height>18</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;GPT&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+    </widget>
+    <widget class="QLabel" name="labelVentoyDeviceSecure">
+     <property name="geometry">
+      <rect>
+       <x>12</x>
+       <y>36</y>
+       <width>21</width>
+       <height>31</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap>../secure.ico</pixmap>
+     </property>
+    </widget>
+   </widget>
+   <widget class="QGroupBox" name="groupBoxStatus">
+    <property name="geometry">
+     <rect>
+      <x>10</x>
+      <y>190</y>
+      <width>421</width>
+      <height>61</height>
+     </rect>
+    </property>
+    <property name="title">
+     <string>Status: REDAY</string>
+    </property>
+    <widget class="QProgressBar" name="progressBar">
+     <property name="geometry">
+      <rect>
+       <x>10</x>
+       <y>30</y>
+       <width>401</width>
+       <height>23</height>
+      </rect>
+     </property>
+     <property name="value">
+      <number>0</number>
+     </property>
+     <property name="textVisible">
+      <bool>false</bool>
+     </property>
+     <property name="format">
+      <string/>
+     </property>
+    </widget>
+   </widget>
+   <widget class="QPushButton" name="ButtonInstall">
+    <property name="geometry">
+     <rect>
+      <x>90</x>
+      <y>275</y>
+      <width>101</width>
+      <height>41</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Install</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="ButtonUpdate">
+    <property name="geometry">
+     <rect>
+      <x>250</x>
+      <y>275</y>
+      <width>101</width>
+      <height>41</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Update</string>
+    </property>
+   </widget>
+  </widget>
+  <widget class="QMenuBar" name="menubar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>441</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="menuOption">
+    <property name="title">
+     <string>Option</string>
+    </property>
+    <widget class="QMenu" name="menuPartition_Style">
+     <property name="title">
+      <string>Partition Style</string>
+     </property>
+     <addaction name="actionMBR"/>
+     <addaction name="actionGPT"/>
+    </widget>
+    <addaction name="actionSecure_Boot_Support"/>
+    <addaction name="menuPartition_Style"/>
+    <addaction name="actionPartition_Configuration"/>
+    <addaction name="actionClear_Ventoy"/>
+    <addaction name="actionShow_All_Devices"/>
+   </widget>
+   <widget class="QMenu" name="menuLanguage">
+    <property name="title">
+     <string>Language</string>
+    </property>
+   </widget>
+   <addaction name="menuOption"/>
+   <addaction name="menuLanguage"/>
+  </widget>
+  <action name="actionSecure_Boot_Support">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>Secure Boot Support</string>
+   </property>
+  </action>
+  <action name="actionMBR">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>MBR</string>
+   </property>
+  </action>
+  <action name="actionGPT">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>GPT</string>
+   </property>
+  </action>
+  <action name="actionPartition_Configuration">
+   <property name="text">
+    <string>Partition Configuration</string>
+   </property>
+  </action>
+  <action name="actionClear_Ventoy">
+   <property name="text">
+    <string>Clear Ventoy</string>
+   </property>
+  </action>
+  <action name="actionShow_All_Devices">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>Show All Devices</string>
+   </property>
+  </action>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/LinuxGUI/Ventoy2Disk/QT/ventoy_qt.h b/LinuxGUI/Ventoy2Disk/QT/ventoy_qt.h
new file mode 100644 (file)
index 0000000..6179d8b
--- /dev/null
@@ -0,0 +1,47 @@
+/******************************************************************************
+ * ventoy_qt.h
+ *
+ * Copyright (c) 2021, longpanda <admin@ventoy.net>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+#ifndef __VENTOY_QT_H__
+#define __VENTOY_QT_H__
+
+int ventoy_disk_init(void);
+void ventoy_disk_exit(void);
+int ventoy_http_init(void);
+void ventoy_http_exit(void);
+int ventoy_log_init(void);
+void ventoy_log_exit(void);
+void *get_refresh_icon_raw_data(int *len);
+void *get_secure_icon_raw_data(int *len);
+void *get_window_icon_raw_data(int *len);
+int ventoy_func_handler(const char *jsonstr, char *jsonbuf, int buflen);
+const char * ventoy_code_get_cur_language(void);
+int ventoy_code_get_cur_part_style(void);
+void ventoy_code_set_cur_part_style(int style);
+int ventoy_code_get_cur_show_all(void);
+void ventoy_code_set_cur_show_all(int show_all);
+void ventoy_code_set_cur_language(const char *lang);
+void ventoy_code_save_cfg(void);
+void ventoy_code_refresh_device(void);
+int ventoy_code_is_busy(void);
+int ventoy_code_get_percent(void);
+int ventoy_code_get_result(void);
+
+#endif /* __VENTOY_QT_H__ */
+
+
diff --git a/LinuxGUI/Ventoy2Disk/QT/ventoy_qt_stub.c b/LinuxGUI/Ventoy2Disk/QT/ventoy_qt_stub.c
new file mode 100644 (file)
index 0000000..cee209d
--- /dev/null
@@ -0,0 +1,600 @@
+/******************************************************************************
+ * ventoy_qt_stub.c
+ *
+ * Copyright (c) 2021, longpanda <admin@ventoy.net>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <time.h>
+#include <unistd.h>
+#include <linux/limits.h>
+#include <pthread.h>
+
+#include <ventoy_define.h>
+#include <ventoy_json.h>
+#include <ventoy_util.h>
+#include <ventoy_disk.h>
+#include <ventoy_http.h>
+
+struct mg_context *
+mg_start(const struct mg_callbacks *callbacks,
+         void *user_data,
+         const char **options)
+{
+    (void)callbacks;
+    (void)user_data;
+    (void)options;
+    
+    return NULL;
+}
+
+void mg_stop(struct mg_context *ctx)
+{
+    (void)ctx;
+}
+
+int mg_read(struct mg_connection *conn, void *buf, size_t len)
+{
+    (void)conn;
+    (void)buf;
+    (void)len;
+    return 0;
+}
+
+
+const struct mg_request_info * mg_get_request_info(const struct mg_connection *conn)
+{
+    (void)conn;
+    return NULL;
+}
+
+int mg_start_thread(mg_thread_func_t func, void *param)
+{
+       pthread_t thread_id;
+       pthread_attr_t attr;
+       int result;
+
+       (void)pthread_attr_init(&attr);
+       (void)pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+
+#if defined(USE_STACK_SIZE) && (USE_STACK_SIZE > 1)
+       /* Compile-time option to control stack size,
+        * e.g. -DUSE_STACK_SIZE=16384 */
+       (void)pthread_attr_setstacksize(&attr, USE_STACK_SIZE);
+#endif /* defined(USE_STACK_SIZE) && (USE_STACK_SIZE > 1) */
+
+       result = pthread_create(&thread_id, &attr, func, param);
+       pthread_attr_destroy(&attr);
+
+       return result;
+}
+
+int mg_printf(struct mg_connection *conn, const char *fmt, ...)
+{
+       (void)conn;
+       (void)fmt;
+
+       return 0;
+}
+
+static unsigned char window_icon_hexData[] = {
+    0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
+    0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x06, 0x00, 0x00, 0x00, 0xAA, 0x69, 0x71,
+    0xDE, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4D, 0x41, 0x00, 0x00, 0xAF, 0xC8, 0x37, 0x05, 0x8A,
+    0xE9, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4D, 0x00, 0x00, 0x7A, 0x26, 0x00, 0x00, 0x80,
+    0x84, 0x00, 0x00, 0xFA, 0x00, 0x00, 0x00, 0x80, 0xE8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xEA,
+    0x60, 0x00, 0x00, 0x3A, 0x98, 0x00, 0x00, 0x17, 0x70, 0x9C, 0xBA, 0x51, 0x3C, 0x00, 0x00, 0x00,
+    0x06, 0x62, 0x4B, 0x47, 0x44, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xA0, 0xBD, 0xA7, 0x93, 0x00,
+    0x00, 0x00, 0x07, 0x74, 0x49, 0x4D, 0x45, 0x07, 0xE4, 0x03, 0x17, 0x04, 0x10, 0x05, 0xF6, 0xCE,
+    0xA8, 0xC0, 0x00, 0x00, 0x1C, 0x68, 0x49, 0x44, 0x41, 0x54, 0x78, 0xDA, 0xCD, 0x9B, 0x79, 0x94,
+    0x1D, 0x57, 0x7D, 0xE7, 0x3F, 0xF7, 0xDE, 0xAA, 0x7A, 0xFB, 0xEB, 0xD7, 0xBB, 0xA4, 0x56, 0xCB,
+    0xDA, 0x6C, 0x59, 0xB6, 0x64, 0x83, 0x91, 0x17, 0xBC, 0xE1, 0x0D, 0x2F, 0x04, 0x1B, 0xB0, 0x43,
+    0x3C, 0x40, 0x32, 0x43, 0x4E, 0x38, 0x19, 0x87, 0x43, 0x26, 0x03, 0x84, 0x98, 0xC9, 0x1C, 0x98,
+    0x93, 0x70, 0x48, 0x72, 0x66, 0x58, 0x86, 0x81, 0x10, 0x0E, 0x06, 0xC6, 0x21, 0xC1, 0x83, 0xC1,
+    0x36, 0x18, 0xDB, 0x6C, 0xC6, 0x60, 0xB0, 0x65, 0xBC, 0x1B, 0x5B, 0x8B, 0x6D, 0x59, 0x92, 0xB5,
+    0x75, 0x5B, 0x52, 0xAB, 0xD7, 0xB7, 0x56, 0xD5, 0x5D, 0xE6, 0x8F, 0xAA, 0xF7, 0xF4, 0xBA, 0xD5,
+    0xF2, 0xC2, 0x92, 0x99, 0x3A, 0xE7, 0xD7, 0xF5, 0x96, 0x7A, 0x75, 0x7F, 0xDF, 0xEF, 0x6F, 0xB9,
+    0xBF, 0xFB, 0xBB, 0xD5, 0x82, 0xDF, 0xD1, 0x61, 0x8C, 0x45, 0x7D, 0x70, 0x9A, 0xFD, 0x7F, 0x57,
+    0x61, 0x57, 0xD5, 0x31, 0x17, 0x39, 0x9C, 0x83, 0xD8, 0xC1, 0xEF, 0xAF, 0x1A, 0xE6, 0xC9, 0x23,
+    0x13, 0x41, 0x55, 0xA3, 0xB4, 0x75, 0xD2, 0x93, 0xB8, 0xBC, 0x27, 0xCC, 0xA6, 0x7E, 0x19, 0xDD,
+    0xBA, 0x5B, 0xBB, 0xBC, 0x07, 0x02, 0x28, 0x78, 0x82, 0xD1, 0xA2, 0x60, 0x6D, 0x59, 0x52, 0x8F,
+    0x1D, 0xC5, 0x40, 0xFE, 0xD6, 0xF5, 0x14, 0xBF, 0xED, 0x1B, 0x3E, 0xBC, 0x67, 0x92, 0x3C, 0x9A,
+    0x03, 0xAE, 0x44, 0x84, 0xC7, 0xDB, 0x56, 0xFA, 0x3C, 0x3A, 0x61, 0x7A, 0x26, 0x43, 0x96, 0x59,
+    0xEB, 0xD6, 0x6A, 0xC7, 0x09, 0x16, 0x46, 0x05, 0xF4, 0x03, 0x79, 0x01, 0xBE, 0x03, 0x03, 0x34,
+    0x81, 0x19, 0x21, 0x18, 0xF3, 0x05, 0x7B, 0x95, 0x10, 0xBB, 0x8A, 0x3E, 0xFB, 0xCE, 0x1B, 0x56,
+    0xD3, 0x77, 0xEC, 0x89, 0x4D, 0x5E, 0x5A, 0xFA, 0x5C, 0x9D, 0x59, 0xF2, 0xAC, 0x72, 0x87, 0x39,
+    0x71, 0xD5, 0x09, 0xFF, 0x7F, 0x11, 0xF0, 0xD3, 0x17, 0x67, 0xC9, 0xA1, 0x99, 0xB0, 0x39, 0xBE,
+    0x19, 0xE6, 0x78, 0x5F, 0xA1, 0xD1, 0x17, 0x4B, 0xFF, 0x8C, 0x96, 0x11, 0x17, 0x59, 0xC7, 0xD9,
+    0xC6, 0xB1, 0xCE, 0x41, 0x9F, 0x14, 0xE4, 0x3C, 0x89, 0x54, 0x02, 0x94, 0x48, 0x14, 0x70, 0x80,
+    0x75, 0x60, 0x8E, 0x4A, 0x53, 0xC0, 0x9C, 0x27, 0xD8, 0x2D, 0x04, 0x8F, 0x67, 0x24, 0xF7, 0x07,
+    0xE8, 0x47, 0x2E, 0x52, 0xDF, 0x19, 0xBF, 0x3B, 0xBC, 0xD6, 0x55, 0x44, 0xC8, 0x6E, 0xBF, 0xCC,
+    0x99, 0xCD, 0x3D, 0x9C, 0xB2, 0x76, 0xD5, 0xFF, 0x5B, 0x02, 0x7E, 0xBE, 0x6B, 0x92, 0x3E, 0xD1,
+    0x64, 0x8F, 0xA9, 0x70, 0xF5, 0x89, 0x05, 0xBE, 0xBF, 0xBB, 0xB1, 0xAA, 0xE5, 0xD4, 0xD5, 0x06,
+    0xF1, 0x76, 0xE3, 0xC4, 0xEB, 0x8D, 0xA3, 0x22, 0x05, 0xE4, 0x3C, 0x41, 0xD1, 0x83, 0xAC, 0x27,
+    0x08, 0x24, 0xC8, 0x14, 0x7C, 0x9B, 0x80, 0x36, 0x09, 0xDA, 0x41, 0x4B, 0x3B, 0xEA, 0x1A, 0x1A,
+    0xDA, 0x61, 0x1C, 0x28, 0x41, 0xC3, 0x13, 0xEE, 0x79, 0x0F, 0xEE, 0xC9, 0x48, 0x73, 0xC7, 0x3A,
+    0x6F, 0x66, 0xCB, 0x56, 0x3D, 0xA0, 0x4F, 0xC8, 0x69, 0xE6, 0xB4, 0xE4, 0xFC, 0x91, 0xEC, 0xBF,
+    0x3D, 0x01, 0x8F, 0xFE, 0x6A, 0x2B, 0xBB, 0x4B, 0xEB, 0xA9, 0x98, 0x39, 0x76, 0xDB, 0x0A, 0xAB,
+    0xBC, 0xEA, 0xB2, 0x3A, 0xFE, 0xBB, 0x0D, 0xF2, 0xDF, 0x6B, 0xCB, 0x29, 0x91, 0x75, 0x4A, 0x20,
+    0xA8, 0x64, 0x04, 0xBD, 0x19, 0x41, 0xCE, 0x13, 0x2C, 0x16, 0xC1, 0xEE, 0x38, 0x8A, 0x38, 0x20,
+    0x34, 0x30, 0x1B, 0x39, 0xA6, 0x42, 0x8B, 0x76, 0x90, 0x91, 0x10, 0x48, 0xF6, 0x79, 0xC2, 0xDD,
+    0x9E, 0xF7, 0xF8, 0xCA, 0xE5, 0x37, 0xFB, 0xDB, 0xEF, 0x7B, 0x6F, 0xCC, 0x25, 0xA3, 0x9A, 0xA7,
+    0x0E, 0x29, 0xCE, 0x58, 0x92, 0xFB, 0xB7, 0x21, 0xE0, 0x91, 0xFD, 0x73, 0x9C, 0x55, 0xAE, 0xF2,
+    0x9D, 0xC3, 0x15, 0x86, 0x5D, 0x35, 0xFB, 0x12, 0xA5, 0xAB, 0x62, 0x27, 0x3F, 0xA8, 0x11, 0xE7,
+    0xB6, 0x0C, 0x2A, 0x32, 0x8E, 0x9E, 0x40, 0xB0, 0xAC, 0xA0, 0x28, 0x78, 0xA2, 0x33, 0x8A, 0x7B,
+    0x8D, 0xE3, 0xB4, 0x95, 0x0B, 0x8D, 0xE3, 0x50, 0xD3, 0x72, 0xA4, 0x65, 0x51, 0x42, 0x50, 0xF0,
+    0xC0, 0x97, 0xE2, 0xD9, 0x8C, 0x74, 0xFF, 0x34, 0x98, 0x71, 0xDF, 0xD8, 0xDF, 0x10, 0x53, 0xEB,
+    0x8A, 0x9A, 0x99, 0x58, 0x72, 0xD1, 0x8A, 0xFC, 0xEF, 0x96, 0x80, 0x7B, 0x76, 0xD6, 0xE9, 0x0F,
+    0x0C, 0x4F, 0xCD, 0x78, 0xAC, 0xC8, 0x9B, 0xD1, 0xAA, 0x96, 0x1F, 0x8E, 0x91, 0xEF, 0x6D, 0x69,
+    0xD7, 0x53, 0xD7, 0x09, 0xC4, 0xD1, 0xA2, 0x62, 0x28, 0x2F, 0x51, 0x42, 0xBC, 0x66, 0xD0, 0xC7,
+    0x3F, 0x1C, 0xD3, 0xA1, 0x63, 0x6F, 0xD5, 0x10, 0x19, 0x47, 0xD1, 0x97, 0xE4, 0x7D, 0x11, 0x65,
+    0x25, 0xDF, 0xCF, 0x7A, 0x7C, 0xE2, 0xA1, 0xC9, 0xE0, 0xC9, 0x2B, 0x07, 0x1A, 0xB4, 0x2C, 0xBC,
+    0x79, 0x55, 0xF1, 0x77, 0x43, 0xC0, 0x3D, 0xCF, 0xCF, 0x90, 0x55, 0xF0, 0xAB, 0x39, 0x9F, 0x35,
+    0x25, 0x77, 0x66, 0x4D, 0x8B, 0x7F, 0x88, 0x0C, 0x17, 0xD7, 0x62, 0x27, 0x1A, 0xDA, 0xE1, 0x2B,
+    0xC1, 0xEA, 0x1E, 0x45, 0x7F, 0x4E, 0x26, 0xC0, 0x7F, 0x7B, 0xE8, 0x13, 0x65, 0x05, 0xD4, 0x63,
+    0xC7, 0xAE, 0x19, 0x43, 0x2D, 0x76, 0xE4, 0x3D, 0x41, 0x29, 0x10, 0xE4, 0x3D, 0xB1, 0xBD, 0xA0,
+    0xDC, 0xC7, 0x2E, 0xAC, 0x34, 0xEE, 0x7C, 0x6A, 0xCE, 0x37, 0xA1, 0x15, 0x5C, 0xBE, 0xA6, 0xFC,
+    0xDB, 0x25, 0xE0, 0x7B, 0xCF, 0xCD, 0x90, 0x53, 0x8E, 0xB7, 0x6C, 0xAF, 0xF0, 0x8D, 0x75, 0xF5,
+    0x37, 0x37, 0x0D, 0x9F, 0x69, 0x6A, 0xB7, 0xA1, 0x1A, 0x39, 0x5A, 0xC6, 0xE1, 0x29, 0xC1, 0x89,
+    0x15, 0x8F, 0xFE, 0x9C, 0xE4, 0x77, 0x80, 0xBD, 0x73, 0x48, 0xA0, 0x16, 0x3B, 0x76, 0x4C, 0x6B,
+    0xEA, 0xDA, 0x91, 0x51, 0x82, 0x1E, 0x5F, 0x52, 0x0A, 0xC4, 0xE1, 0x82, 0xE7, 0xFE, 0xE6, 0x94,
+    0x5C, 0xFD, 0xA6, 0xFD, 0x61, 0x10, 0x87, 0x16, 0xAE, 0x5A, 0x5B, 0xF9, 0xED, 0x10, 0x70, 0xCF,
+    0x73, 0x53, 0x64, 0x14, 0xFC, 0x7C, 0xAA, 0xC0, 0x86, 0x52, 0x78, 0x45, 0xC3, 0x88, 0x2F, 0xD4,
+    0x22, 0xB7, 0x76, 0x2E, 0xB2, 0xC4, 0xD6, 0x81, 0x10, 0xAC, 0x2C, 0x7B, 0x8C, 0x94, 0xD4, 0xEF,
+    0x08, 0xF6, 0x02, 0xA5, 0x05, 0x4C, 0xB5, 0x2C, 0x3B, 0xA6, 0x35, 0xDA, 0x3A, 0x7C, 0x29, 0x28,
+    0x07, 0x92, 0xDE, 0xAC, 0x9C, 0x2B, 0x2A, 0xF7, 0xF1, 0x8D, 0xF9, 0xD9, 0x7F, 0xDC, 0xD3, 0xCA,
+    0xE9, 0xD8, 0x49, 0xAE, 0x3C, 0xF1, 0xE5, 0x49, 0x78, 0x45, 0x02, 0x7E, 0xB6, 0x65, 0x0F, 0x85,
+    0x5C, 0x86, 0x87, 0x66, 0x0A, 0x0C, 0xE7, 0x38, 0xAF, 0x1E, 0xBB, 0x9B, 0x6A, 0x91, 0x5D, 0x3F,
+    0x1B, 0x3A, 0x62, 0xE7, 0x70, 0x40, 0x5F, 0xCE, 0x63, 0x5D, 0x9F, 0x8F, 0xFA, 0xED, 0x17, 0x6A,
+    0xC7, 0x1C, 0xCE, 0xB9, 0x8E, 0xD2, 0x7B, 0xAB, 0x86, 0x03, 0x55, 0x8D, 0x00, 0x3C, 0x29, 0xE8,
+    0xC9, 0x48, 0xFA, 0xB2, 0x72, 0xAA, 0xE8, 0xF1, 0x97, 0xEF, 0x28, 0xEF, 0xBB, 0xF9, 0xFE, 0xFA,
+    0x52, 0x67, 0x10, 0x5C, 0xB6, 0xB6, 0xF7, 0xD7, 0x27, 0xC0, 0x39, 0xF8, 0xCA, 0xD3, 0x73, 0xF4,
+    0xA8, 0xE8, 0xD4, 0xD9, 0xD8, 0xBB, 0xB9, 0x1A, 0xD9, 0x4D, 0x33, 0x2D, 0x43, 0xEC, 0x12, 0x37,
+    0xF7, 0x94, 0xE0, 0xA4, 0xBE, 0x80, 0xBE, 0xAC, 0x24, 0x75, 0x86, 0xDF, 0x00, 0xDD, 0x02, 0x8D,
+    0x1C, 0xB8, 0xF6, 0x24, 0xE2, 0xC0, 0x5A, 0x43, 0xD6, 0x4B, 0x94, 0x0A, 0x2D, 0x84, 0x56, 0xF2,
+    0xEC, 0x64, 0x4C, 0x33, 0x76, 0x08, 0x01, 0x9E, 0x84, 0xDE, 0xAC, 0xA2, 0x3F, 0xA7, 0xC6, 0xCB,
+    0x9E, 0xFD, 0x8F, 0x7B, 0x9B, 0xFE, 0xDD, 0x67, 0x97, 0xE6, 0x88, 0x1B, 0x35, 0x2E, 0x38, 0xED,
+    0xC4, 0xD7, 0x4E, 0xC0, 0x37, 0x9F, 0x3C, 0x08, 0x52, 0x92, 0x51, 0xF4, 0x1F, 0x89, 0xBC, 0x2F,
+    0x57, 0x43, 0x7B, 0xED, 0x54, 0xD3, 0x10, 0xA6, 0x48, 0x9D, 0x80, 0xBE, 0xAC, 0xE2, 0xA4, 0xBE,
+    0x00, 0x29, 0x39, 0xFE, 0xA4, 0xFE, 0x5A, 0x80, 0x2F, 0x76, 0x0F, 0x07, 0xD6, 0x6A, 0x7A, 0x02,
+    0x38, 0x7D, 0xB8, 0x40, 0x64, 0x0C, 0x4F, 0xBD, 0x54, 0x25, 0x72, 0x1E, 0xFB, 0xEB, 0x30, 0x56,
+    0x35, 0x9D, 0xCB, 0x7D, 0x29, 0x18, 0xC8, 0x4B, 0x06, 0x72, 0xEA, 0xE9, 0x5E, 0xCF, 0xFC, 0x61,
+    0x9D, 0xCC, 0xD6, 0xEB, 0x4F, 0x2E, 0x1C, 0xD7, 0x32, 0xC7, 0x55, 0xF5, 0xAE, 0x87, 0xB6, 0x60,
+    0x72, 0x15, 0xCE, 0x29, 0x4F, 0xC9, 0x7B, 0xA6, 0x47, 0x6E, 0x9C, 0x0D, 0xED, 0xDF, 0x4E, 0x36,
+    0xB4, 0xD7, 0xD0, 0xC9, 0xAF, 0x84, 0x4C, 0x7E, 0xBA, 0xB2, 0x12, 0xB0, 0xA4, 0xE8, 0xFD, 0x06,
+    0x66, 0xEF, 0xC2, 0xED, 0x1C, 0xCE, 0x5A, 0x04, 0x0E, 0x87, 0x40, 0xC8, 0x34, 0xA1, 0x9A, 0x98,
+    0xC1, 0xBC, 0xE4, 0x75, 0x4B, 0x0B, 0xE4, 0x14, 0x78, 0x4A, 0xB1, 0x7F, 0xA6, 0xC9, 0xD3, 0x2F,
+    0x55, 0x99, 0x8C, 0x3C, 0x76, 0xCC, 0x58, 0x8C, 0x13, 0x1D, 0x40, 0x19, 0x4F, 0xB0, 0xA4, 0xE0,
+    0x31, 0x90, 0x93, 0xB7, 0x0C, 0xFB, 0xD1, 0x0D, 0x4D, 0x2B, 0xAB, 0x9E, 0x89, 0xB8, 0x72, 0xE3,
+    0xC8, 0x31, 0xE3, 0x1E, 0x37, 0x6A, 0xDF, 0xAA, 0x7F, 0xCA, 0x78, 0x5C, 0xE0, 0x47, 0x53, 0x43,
+    0x6F, 0xAC, 0x85, 0xF6, 0xFD, 0xD3, 0xF5, 0xD8, 0xAB, 0xB6, 0x34, 0xDA, 0x18, 0x8C, 0xB5, 0x68,
+    0x63, 0xC1, 0x39, 0x32, 0x0A, 0xB4, 0x71, 0xC4, 0xDA, 0xFE, 0x46, 0x12, 0x45, 0x31, 0x26, 0x0E,
+    0x59, 0x5E, 0x70, 0x9C, 0x36, 0xE8, 0x51, 0x10, 0x21, 0xAD, 0x56, 0x83, 0x28, 0x6C, 0xB2, 0xB4,
+    0x20, 0xD8, 0xB4, 0xAC, 0x40, 0xC9, 0x97, 0x6C, 0xDD, 0x77, 0x80, 0x7D, 0x13, 0x47, 0x58, 0x51,
+    0xC9, 0xB1, 0x7E, 0x30, 0x4F, 0xC6, 0x85, 0x48, 0x13, 0xA1, 0xB5, 0xC6, 0x18, 0x83, 0x36, 0x86,
+    0x46, 0xA8, 0x99, 0xA8, 0x45, 0xCC, 0xB6, 0xEC, 0x3B, 0x26, 0x63, 0x75, 0xFD, 0x77, 0xF4, 0x00,
+    0x81, 0x6D, 0xBD, 0x7A, 0x0F, 0xF8, 0xC1, 0x63, 0xDB, 0x99, 0xB2, 0x25, 0xF2, 0x52, 0x17, 0xC7,
+    0xE3, 0xDC, 0x57, 0x26, 0x6B, 0xFA, 0xFA, 0x89, 0xBA, 0x26, 0xC6, 0x21, 0xA4, 0x44, 0xC8, 0xA4,
+    0xC0, 0xC9, 0xF9, 0x92, 0x93, 0x07, 0x32, 0x04, 0xF2, 0x37, 0x5B, 0x52, 0x58, 0x6B, 0xC8, 0x49,
+    0xCD, 0xE9, 0x4B, 0x72, 0xAC, 0xEA, 0xCB, 0xE3, 0x49, 0xC1, 0x74, 0x23, 0xE2, 0xA9, 0x03, 0xD3,
+    0x14, 0x32, 0x3E, 0xA7, 0x8F, 0x54, 0x08, 0x54, 0xB2, 0x72, 0x98, 0x6B, 0xB6, 0x70, 0xCE, 0x51,
+    0x29, 0xE4, 0x70, 0x08, 0xB6, 0x1F, 0x9C, 0xE5, 0xB6, 0x2D, 0x87, 0x99, 0x8C, 0x33, 0x48, 0xCF,
+    0x4F, 0x6D, 0xEA, 0xF0, 0x84, 0x60, 0xB0, 0xE0, 0x31, 0x52, 0xF2, 0x7F, 0x35, 0xE0, 0xC7, 0xD7,
+    0xC5, 0x4E, 0xEE, 0x56, 0x71, 0x9D, 0xB7, 0x6F, 0x5A, 0xFD, 0xCA, 0x1E, 0x30, 0x68, 0x27, 0x19,
+    0x0B, 0xB3, 0x4C, 0x84, 0xEA, 0xD2, 0x6A, 0x53, 0xBF, 0x65, 0xAA, 0x1E, 0xD2, 0x8C, 0x35, 0xDA,
+    0xD8, 0x84, 0x65, 0x9D, 0x88, 0xB3, 0x16, 0x63, 0x1D, 0x91, 0xB1, 0xBF, 0xB6, 0xB4, 0xA2, 0x88,
+    0x2C, 0x11, 0x67, 0x2E, 0xCD, 0xB1, 0xBA, 0x37, 0x07, 0xCE, 0x11, 0x6B, 0x43, 0x29, 0x50, 0x9C,
+    0x73, 0x42, 0x1F, 0xA7, 0x2D, 0x2D, 0xA3, 0x70, 0x98, 0x74, 0xEC, 0x42, 0xE0, 0x53, 0xCA, 0x66,
+    0x98, 0xAB, 0x37, 0xA9, 0x37, 0x5B, 0x9C, 0x3C, 0x54, 0xE2, 0xCC, 0x65, 0x79, 0x6C, 0x73, 0x96,
+    0x38, 0x0C, 0xD1, 0x5A, 0xA3, 0xB5, 0x25, 0x8C, 0x0D, 0x93, 0xF5, 0x88, 0x99, 0xA6, 0x3E, 0xBD,
+    0xAA, 0xE5, 0xBB, 0xAF, 0x7D, 0xF6, 0x1A, 0xA1, 0xCC, 0xB1, 0x5E, 0x70, 0x8C, 0xE9, 0xA6, 0x1B,
+    0x31, 0xF7, 0x3E, 0x77, 0x84, 0xDE, 0x9C, 0x2A, 0x6E, 0x3B, 0x14, 0x7E, 0xFD, 0xE0, 0x5C, 0xF4,
+    0x8E, 0x89, 0x5A, 0x8C, 0x41, 0x20, 0x94, 0x48, 0x62, 0x5F, 0x08, 0x1C, 0x82, 0x52, 0x46, 0x72,
+    0x62, 0x7F, 0x8E, 0x5F, 0xCF, 0x01, 0x1C, 0xC6, 0x68, 0x7A, 0x7C, 0xC3, 0x79, 0x2B, 0x4A, 0x8C,
+    0xF4, 0xE4, 0xB0, 0xCE, 0xE1, 0x52, 0xE9, 0x56, 0x31, 0x36, 0x1A, 0x29, 0x25, 0x9E, 0x94, 0x38,
+    0xE7, 0x90, 0x52, 0x72, 0x60, 0x72, 0x8A, 0x17, 0xC6, 0x0E, 0x72, 0xEE, 0x29, 0xEB, 0x90, 0x42,
+    0xF0, 0xBD, 0xAD, 0xE3, 0xDC, 0xFF, 0x62, 0x1D, 0x82, 0x22, 0x88, 0xA4, 0x1E, 0x51, 0x02, 0x06,
+    0x0B, 0x3E, 0x2B, 0x2B, 0xC1, 0xF6, 0x01, 0x3F, 0xBE, 0x26, 0x76, 0x62, 0x97, 0x98, 0x1D, 0xE3,
+    0x0F, 0x2E, 0x3D, 0xFB, 0xF8, 0x1E, 0xD0, 0x9B, 0xBF, 0x86, 0xC3, 0x35, 0xCD, 0x4B, 0x35, 0x73,
+    0x66, 0xB5, 0x19, 0x5F, 0x38, 0x53, 0x0D, 0x09, 0x23, 0xDD, 0xB1, 0xBA, 0xD6, 0x36, 0x15, 0x43,
+    0x14, 0x1B, 0xC2, 0x58, 0x13, 0xC5, 0xE6, 0x35, 0x8A, 0xA6, 0x15, 0x86, 0xE4, 0x08, 0x39, 0x67,
+    0x24, 0xCF, 0xD2, 0x72, 0x06, 0x6D, 0x0C, 0xD6, 0xDA, 0x8E, 0x98, 0xF4, 0xBD, 0xB3, 0x06, 0x09,
+    0x34, 0x5A, 0x2D, 0x9A, 0x61, 0x88, 0x73, 0x0E, 0xA3, 0x35, 0x4B, 0x2A, 0x3D, 0xAC, 0x18, 0x1A,
+    0x24, 0xD6, 0x1A, 0xE1, 0x2C, 0x67, 0x8E, 0x56, 0x28, 0xAA, 0x98, 0x28, 0x6C, 0xA5, 0x5E, 0x60,
+    0x08, 0x63, 0xC3, 0x54, 0x3D, 0x64, 0xBA, 0x19, 0xAF, 0x6B, 0x38, 0xEF, 0xF7, 0x0E, 0xAC, 0x18,
+    0x81, 0xB0, 0x3E, 0x0F, 0xEF, 0x31, 0xA5, 0xDB, 0xE3, 0x7B, 0x9F, 0xE0, 0x6D, 0xA7, 0x0D, 0xCA,
+    0x5F, 0xBC, 0x30, 0xF5, 0x81, 0xC3, 0x33, 0xAD, 0x4B, 0x27, 0x6B, 0x11, 0xB1, 0x4D, 0x0A, 0x1E,
+    0xE7, 0x1C, 0xB6, 0x2D, 0xD6, 0x82, 0x75, 0x94, 0x32, 0x49, 0xCC, 0x69, 0x6B, 0x31, 0xAF, 0x52,
+    0xE2, 0x58, 0x93, 0x17, 0x11, 0xE7, 0x9F, 0x50, 0x62, 0xB4, 0x92, 0xEF, 0x58, 0xBE, 0x9B, 0x80,
+    0xB6, 0x27, 0xB4, 0xBF, 0x53, 0x42, 0xD2, 0x88, 0x22, 0xAC, 0x73, 0x28, 0x29, 0xB1, 0xC6, 0xD0,
+    0x57, 0xCA, 0x03, 0x82, 0x5D, 0x07, 0x8F, 0xD0, 0x88, 0x2D, 0x4F, 0xEE, 0x9D, 0xA2, 0x6E, 0x14,
+    0x4E, 0x48, 0xAC, 0x75, 0x29, 0x91, 0x16, 0x4F, 0x08, 0x59, 0x0C, 0x84, 0xBF, 0x7C, 0xF2, 0xC0,
+    0x5D, 0x3A, 0xD7, 0xD7, 0x3A, 0xE3, 0xC4, 0xE5, 0xDC, 0xF7, 0x93, 0x9F, 0x00, 0x30, 0x6F, 0xFE,
+    0xAA, 0xB6, 0x34, 0x77, 0x3E, 0x7D, 0x88, 0x83, 0x73, 0xE1, 0x92, 0x5A, 0x23, 0xBA, 0x64, 0xA6,
+    0x16, 0xD2, 0x0A, 0x63, 0x9C, 0x92, 0x08, 0x27, 0x3B, 0x09, 0xB0, 0x3D, 0xA7, 0x5A, 0x63, 0xA9,
+    0xB5, 0x62, 0x8A, 0x19, 0x85, 0x7B, 0x95, 0xC5, 0xBF, 0xB3, 0x86, 0x9C, 0x88, 0x79, 0xE3, 0xCA,
+    0x32, 0x2B, 0x2A, 0x39, 0x8C, 0xB5, 0xC9, 0xE7, 0x29, 0x01, 0xC7, 0x86, 0x40, 0x5A, 0xFD, 0x09,
+    0x41, 0xDE, 0x0F, 0x68, 0xE9, 0x98, 0x50, 0x08, 0x02, 0x25, 0xA9, 0xB7, 0x22, 0xB6, 0x1F, 0x38,
+    0x48, 0x23, 0x76, 0x6C, 0xDE, 0x35, 0xC9, 0x44, 0xCD, 0x21, 0xB2, 0x60, 0xB5, 0x49, 0xA2, 0xDB,
+    0x81, 0xC1, 0x31, 0x5D, 0x83, 0x5A, 0x5E, 0xBD, 0x3E, 0xEF, 0xAB, 0x0D, 0xDA, 0x8A, 0x07, 0x97,
+    0xAE, 0xDF, 0xD4, 0xB9, 0xF7, 0x3C, 0x02, 0x4A, 0xD9, 0xA5, 0x7C, 0xFE, 0xBE, 0x47, 0x30, 0xC6,
+    0x9E, 0x36, 0x5B, 0x0F, 0xD7, 0xD4, 0x1A, 0x21, 0x51, 0x6C, 0x91, 0x4E, 0x21, 0x9C, 0x03, 0xE9,
+    0xD2, 0xF9, 0xBF, 0xDD, 0xC7, 0x11, 0xCC, 0xD4, 0x05, 0x81, 0x08, 0x5E, 0xD5, 0xE2, 0xC7, 0x59,
+    0x43, 0x40, 0xC4, 0xD9, 0xAB, 0x4B, 0xAC, 0xEE, 0xCF, 0x77, 0x80, 0xB5, 0xDD, 0x5F, 0x00, 0xDA,
+    0x18, 0x62, 0xAD, 0xF1, 0x3D, 0x6F, 0x1E, 0x78, 0x21, 0x04, 0xCE, 0x19, 0x7C, 0x21, 0xF0, 0x94,
+    0x62, 0xA6, 0xD1, 0xE4, 0xC1, 0x67, 0x77, 0xD3, 0x34, 0x8A, 0xC7, 0xF6, 0xCE, 0xF2, 0x52, 0x1D,
+    0xBC, 0x6C, 0x19, 0x61, 0x00, 0x6B, 0x8E, 0xA6, 0x37, 0xE7, 0xA8, 0x3A, 0xCB, 0x6C, 0xC3, 0xEF,
+    0xAB, 0x54, 0x32, 0xE7, 0xE9, 0x33, 0x56, 0x3E, 0x68, 0x6F, 0x7F, 0x72, 0x71, 0x02, 0x76, 0x1E,
+    0xDE, 0xC3, 0xDA, 0xB5, 0x9F, 0xE6, 0x33, 0xDF, 0x7E, 0xD7, 0x59, 0xD5, 0x7A, 0x58, 0x6A, 0x34,
+    0x23, 0x34, 0x02, 0x89, 0x43, 0x38, 0x09, 0x52, 0x22, 0x84, 0x9C, 0xD7, 0xE0, 0x98, 0xAE, 0x59,
+    0x8A, 0xBE, 0x40, 0xBD, 0x42, 0x26, 0x74, 0xD6, 0xA2, 0x6C, 0xC4, 0xA6, 0x55, 0x45, 0x4E, 0x19,
+    0x2E, 0xE2, 0xAC, 0xE5, 0x70, 0xB5, 0xCE, 0xC1, 0xA9, 0x19, 0x96, 0x0F, 0xF6, 0x91, 0xF5, 0x3C,
+    0xF6, 0x1F, 0x99, 0x62, 0xC7, 0xD8, 0x21, 0xF2, 0x19, 0x9F, 0xB3, 0xD7, 0xAD, 0x86, 0x2E, 0xF0,
+    0x6D, 0x32, 0xA4, 0x94, 0x60, 0x0C, 0xB3, 0xF5, 0x26, 0xFB, 0xA7, 0x1A, 0xEC, 0x98, 0x74, 0x1C,
+    0x6A, 0x2A, 0x94, 0x9F, 0xC7, 0x38, 0x0F, 0x8C, 0x65, 0xDE, 0x5A, 0xD4, 0x39, 0x9A, 0x06, 0x66,
+    0x1A, 0xA1, 0x18, 0xCA, 0x8B, 0xB3, 0x46, 0x1E, 0xFE, 0x65, 0xBE, 0xB6, 0x6C, 0x6D, 0x63, 0xD1,
+    0x24, 0xB8, 0xEB, 0x50, 0x95, 0xDD, 0xBB, 0x3F, 0x9C, 0x0B, 0xC3, 0xF8, 0xB4, 0x6A, 0xAD, 0x45,
+    0x2B, 0x8C, 0x3A, 0x09, 0x25, 0x8E, 0x0D, 0x3A, 0xD6, 0xC9, 0xFB, 0x38, 0x11, 0x13, 0x6B, 0xAA,
+    0x8D, 0x88, 0xC9, 0x6A, 0x8B, 0x28, 0xD6, 0x84, 0xD1, 0xF1, 0x24, 0x26, 0x6C, 0x35, 0xD8, 0x30,
+    0xE4, 0xF3, 0xFA, 0x91, 0x12, 0xCE, 0x59, 0xB4, 0xB5, 0xFC, 0xEC, 0x99, 0xE7, 0xF8, 0x97, 0xFB,
+    0x1F, 0xE7, 0xB1, 0x1D, 0xFB, 0x88, 0xB4, 0xE6, 0xBE, 0x67, 0x76, 0x72, 0xFF, 0x73, 0x63, 0x84,
+    0x5A, 0xE0, 0x8C, 0xC1, 0xA6, 0x9E, 0x91, 0xE8, 0xA0, 0x3B, 0x7A, 0x5A, 0x6B, 0x29, 0xE7, 0x72,
+    0x28, 0x95, 0xE1, 0x70, 0x55, 0x63, 0x45, 0x06, 0xE3, 0x64, 0x92, 0x9C, 0xDB, 0x7A, 0xB6, 0x45,
+    0x27, 0x3A, 0xCC, 0xD5, 0x43, 0x42, 0xED, 0x4E, 0xCE, 0x0D, 0xAD, 0xEE, 0x0F, 0xCA, 0x83, 0x8B,
+    0x7B, 0xC0, 0xBE, 0x23, 0x75, 0xE6, 0x9A, 0x71, 0xB9, 0xDE, 0x8C, 0x56, 0xD7, 0x9B, 0x11, 0x51,
+    0xAC, 0xC1, 0x3A, 0xA4, 0x73, 0x08, 0xA5, 0x40, 0x0A, 0x84, 0xB4, 0x2C, 0x9C, 0x3D, 0x27, 0xE6,
+    0x42, 0x3C, 0x01, 0xFE, 0x22, 0xCB, 0x41, 0xE7, 0x1C, 0x56, 0x87, 0x6C, 0x18, 0xF6, 0x39, 0x6F,
+    0x55, 0x05, 0x81, 0xC3, 0x68, 0x8B, 0x13, 0x82, 0x6C, 0x90, 0x65, 0xC3, 0xAA, 0x13, 0x58, 0xBD,
+    0x64, 0x80, 0x83, 0x33, 0x55, 0x7C, 0x3F, 0xE0, 0xCC, 0xB5, 0x2B, 0x58, 0xD6, 0x57, 0xC6, 0xA4,
+    0x6E, 0xEC, 0x52, 0xE0, 0x5E, 0x1A, 0x12, 0x52, 0x0A, 0x0E, 0x4C, 0x4E, 0xF3, 0xC4, 0xCE, 0xFD,
+    0xBC, 0xFE, 0x84, 0x11, 0x9E, 0x3A, 0xD0, 0xE0, 0x70, 0x2B, 0x46, 0xFA, 0x92, 0x45, 0xEB, 0xBA,
+    0x34, 0xA7, 0xD4, 0x9A, 0x50, 0x6F, 0xC5, 0x4B, 0xAC, 0x63, 0xD4, 0x58, 0xB7, 0x3F, 0xD2, 0x86,
+    0xC0, 0x53, 0xF3, 0x09, 0x68, 0x45, 0x31, 0x51, 0x20, 0x07, 0xEA, 0xAD, 0x78, 0xB8, 0xD1, 0x8C,
+    0x88, 0x63, 0x8D, 0x74, 0x0E, 0x9B, 0xDE, 0xA8, 0x93, 0x04, 0x17, 0x0C, 0xA4, 0xB5, 0xE1, 0xB0,
+    0x70, 0x0C, 0x14, 0x03, 0x04, 0xDD, 0x6D, 0x30, 0x87, 0xD1, 0x11, 0xAB, 0x7A, 0x04, 0x97, 0xAC,
+    0xED, 0xC5, 0x17, 0x0E, 0xAD, 0x93, 0xE5, 0xAB, 0x76, 0x50, 0xCC, 0x7A, 0x5C, 0xBC, 0x71, 0x2D,
+    0x47, 0xE6, 0x6A, 0xFC, 0x62, 0xEB, 0x6E, 0xCE, 0x5D, 0xB7, 0x92, 0x91, 0x4A, 0x21, 0x99, 0x51,
+    0x8C, 0xED, 0xB8, 0xBC, 0x52, 0xAA, 0x13, 0x0A, 0x5B, 0x5F, 0x1C, 0xE3, 0xD1, 0x1D, 0xBB, 0x39,
+    0xFF, 0xD4, 0x93, 0x18, 0x1D, 0x2A, 0x53, 0x50, 0x86, 0x28, 0x6C, 0xE1, 0x09, 0x6F, 0x71, 0x02,
+    0x70, 0x38, 0xEB, 0x68, 0x86, 0x8E, 0x46, 0x18, 0xE7, 0x6B, 0xAD, 0x68, 0xB4, 0x15, 0xE9, 0x4E,
+    0xD2, 0x9E, 0x47, 0x80, 0xB3, 0x0E, 0x9C, 0x1B, 0x6C, 0x85, 0x51, 0x3E, 0x0C, 0x23, 0x74, 0x6C,
+    0x69, 0xF3, 0x2A, 0x9C, 0x4A, 0x92, 0xA0, 0x68, 0xCF, 0x02, 0xF3, 0xD3, 0xDE, 0x74, 0xD5, 0x60,
+    0x8D, 0xA5, 0x27, 0xE7, 0xA7, 0x39, 0xD2, 0x61, 0x4D, 0xCC, 0x70, 0xCE, 0x72, 0xF9, 0xBA, 0x61,
+    0x8A, 0x3E, 0x44, 0x71, 0xDC, 0x89, 0x67, 0x84, 0xC0, 0x13, 0x82, 0xF1, 0xA9, 0x59, 0x1E, 0x7A,
+    0x76, 0x37, 0x67, 0x9D, 0x74, 0x02, 0x4B, 0x7A, 0x0A, 0x84, 0x5A, 0x23, 0x21, 0x99, 0xEE, 0x94,
+    0x42, 0x4A, 0x89, 0x94, 0x02, 0x63, 0x2D, 0x0F, 0x6C, 0xDD, 0xC1, 0xF6, 0x7D, 0x2F, 0x71, 0xF9,
+    0x1B, 0x36, 0xB0, 0x7A, 0xA8, 0x97, 0xF1, 0xD9, 0x1A, 0x47, 0x66, 0xAB, 0x18, 0x53, 0x80, 0xD8,
+    0x2C, 0xA2, 0x97, 0xE8, 0x10, 0xD0, 0xC2, 0xD2, 0x0C, 0x75, 0x50, 0x6F, 0xE9, 0xC1, 0xBD, 0x13,
+    0xB5, 0xCE, 0xE2, 0x70, 0x1E, 0x01, 0x49, 0xB9, 0xE9, 0x7A, 0x1A, 0xCD, 0xD8, 0x8F, 0xA2, 0x18,
+    0x6D, 0xDC, 0xD1, 0xFE, 0xBD, 0x03, 0xA4, 0x4D, 0x93, 0xE0, 0xD1, 0x59, 0xA0, 0x9B, 0xE9, 0xC9,
+    0xAA, 0x49, 0xCA, 0xD8, 0xAC, 0x87, 0xB3, 0x9A, 0xA2, 0x8C, 0xB8, 0xFC, 0xA4, 0x41, 0x86, 0xF2,
+    0x8A, 0x28, 0xD6, 0x1D, 0xF0, 0xD6, 0x5A, 0x02, 0xDF, 0xA3, 0x11, 0xC5, 0xDC, 0xFD, 0xE8, 0x36,
+    0xAE, 0xDA, 0x74, 0x2A, 0xFD, 0xA5, 0x1C, 0x5F, 0xFA, 0xE1, 0x66, 0x7A, 0xF3, 0x19, 0xAE, 0x3D,
+    0xF7, 0x74, 0x02, 0xA5, 0x10, 0x29, 0xF8, 0x7A, 0x2B, 0xE2, 0x07, 0x8F, 0x6D, 0xE1, 0xF0, 0x4C,
+    0x8D, 0xB7, 0x9D, 0xFB, 0x3A, 0x46, 0xFA, 0xCA, 0xEC, 0x99, 0x98, 0xE5, 0xAB, 0x3F, 0x7D, 0x9A,
+    0xF1, 0x19, 0x8D, 0xCC, 0x95, 0x70, 0xC6, 0x1C, 0xA3, 0x4F, 0x32, 0x15, 0x3A, 0x9C, 0xB3, 0xC4,
+    0x56, 0xD0, 0x0A, 0x63, 0xA9, 0xB5, 0xE9, 0xFD, 0xFB, 0x3B, 0xB7, 0xF2, 0xD7, 0xD7, 0x9C, 0x7A,
+    0x2C, 0x01, 0x61, 0xA4, 0xD1, 0xC6, 0x64, 0xA7, 0xE7, 0x1A, 0xAA, 0x5E, 0x6F, 0xE1, 0x94, 0x4A,
+    0x3C, 0xC0, 0x81, 0xB0, 0x0E, 0x94, 0x44, 0x08, 0x97, 0x8E, 0xB3, 0xB8, 0xBB, 0x4D, 0x6A, 0x4D,
+    0xA3, 0x29, 0xE8, 0xCD, 0x68, 0x2E, 0xDE, 0xD8, 0xC7, 0xEA, 0xFE, 0x0C, 0xB1, 0x8E, 0x3B, 0xD7,
+    0x0B, 0x21, 0xF0, 0x3C, 0x45, 0x23, 0xB6, 0x6C, 0xD9, 0x73, 0x08, 0x27, 0x3D, 0xEA, 0x51, 0xCC,
+    0xB6, 0xAD, 0xE3, 0x4C, 0xD7, 0x22, 0x7A, 0x8B, 0x05, 0x3C, 0xCF, 0x47, 0x4A, 0x81, 0x92, 0x92,
+    0xC3, 0xB3, 0x55, 0x6E, 0x7F, 0xE0, 0x71, 0x10, 0x8A, 0x3F, 0xB8, 0xF0, 0x0D, 0xF4, 0x17, 0xF3,
+    0x3C, 0xB1, 0x73, 0x8C, 0xAF, 0xFD, 0xF4, 0x57, 0xEC, 0x99, 0x15, 0xF8, 0x85, 0x41, 0x9C, 0x93,
+    0xA0, 0xCD, 0x22, 0x3A, 0x25, 0x5D, 0x1B, 0xE7, 0x2C, 0x42, 0xC0, 0x6C, 0x3D, 0xA4, 0x15, 0xE9,
+    0x7C, 0xF4, 0xF5, 0x2F, 0xE3, 0xBE, 0x7A, 0xFD, 0xB1, 0x04, 0xE0, 0x2C, 0x38, 0x27, 0xC3, 0x48,
+    0x73, 0x64, 0xA6, 0x4E, 0xA1, 0x90, 0x21, 0x48, 0xEF, 0x23, 0xAC, 0x43, 0xD8, 0xA4, 0x18, 0x7A,
+    0xB9, 0xB6, 0x8F, 0x73, 0x96, 0xA8, 0xDE, 0xE4, 0xE2, 0x0D, 0x15, 0x36, 0xAD, 0x28, 0xA7, 0x45,
+    0xCD, 0x51, 0xF0, 0x8D, 0x48, 0xF3, 0xE3, 0x87, 0xB7, 0x70, 0x70, 0xAE, 0xC5, 0x29, 0x2B, 0x47,
+    0x58, 0xB3, 0x74, 0x80, 0x6A, 0xA3, 0xC9, 0x8A, 0xC1, 0x5E, 0xCE, 0x3B, 0x65, 0x35, 0xF9, 0xC0,
+    0x43, 0x09, 0x90, 0x42, 0xB0, 0x63, 0xEC, 0x10, 0xB7, 0xFE, 0xEC, 0x51, 0x46, 0x06, 0xFB, 0xB8,
+    0xEE, 0xFC, 0x33, 0x08, 0x3C, 0xC9, 0x77, 0x1F, 0xDE, 0xCA, 0x37, 0x1F, 0x7A, 0x9E, 0x19, 0x93,
+    0xC7, 0xCF, 0xF7, 0x63, 0x44, 0x90, 0xEC, 0xA7, 0x61, 0x8E, 0xA7, 0x10, 0xCE, 0x5A, 0xEA, 0xA1,
+    0xA6, 0x9A, 0xF7, 0xB0, 0xCE, 0x49, 0xD8, 0xDF, 0x89, 0x14, 0x6F, 0xE1, 0xC5, 0x02, 0x17, 0x49,
+    0x9C, 0x0D, 0xC3, 0x88, 0x56, 0x6C, 0xE8, 0xED, 0x15, 0xF8, 0x90, 0x14, 0x42, 0x4E, 0x21, 0xE4,
+    0xCB, 0xF4, 0xBD, 0x9C, 0xC5, 0xC4, 0x2D, 0xCE, 0x5D, 0x99, 0xE3, 0x9A, 0xD7, 0x2D, 0x45, 0x89,
+    0x24, 0x61, 0x4A, 0x29, 0x13, 0xCB, 0x2B, 0xC5, 0x0B, 0x2F, 0x1D, 0xE1, 0xAE, 0x47, 0xB6, 0x93,
+    0x2F, 0xF4, 0xF0, 0xEE, 0x8B, 0xCF, 0x66, 0x49, 0xC9, 0xC7, 0x51, 0x42, 0x2A, 0xD5, 0xF1, 0x5A,
+    0x21, 0x24, 0x9B, 0xB7, 0xEE, 0xE0, 0xB6, 0x5F, 0x3C, 0xCE, 0xB9, 0xA7, 0x9E, 0xC4, 0x35, 0x6F,
+    0x3C, 0x8D, 0xD9, 0x7A, 0x93, 0xAF, 0xFC, 0xE8, 0x49, 0xEE, 0xDD, 0x32, 0x86, 0x0E, 0xFA, 0xF0,
+    0xB2, 0x3D, 0x18, 0x82, 0x14, 0xF7, 0xE2, 0xE0, 0x93, 0x54, 0xE4, 0xA8, 0x37, 0x23, 0xC2, 0x30,
+    0x06, 0x5B, 0x40, 0x38, 0x17, 0x52, 0xBE, 0x36, 0x8D, 0xE9, 0x85, 0x04, 0xE0, 0x10, 0x82, 0x9A,
+    0x12, 0x4E, 0x0B, 0x2C, 0xCD, 0x96, 0x66, 0x7A, 0x56, 0x50, 0x2E, 0x83, 0x9F, 0xF1, 0x93, 0x30,
+    0x90, 0xB2, 0xD3, 0xA9, 0x59, 0xF8, 0x5B, 0x1D, 0x87, 0x9C, 0x3C, 0xA8, 0xF8, 0xE3, 0xF3, 0x57,
+    0xD1, 0x5B, 0xCC, 0x62, 0xEC, 0xD1, 0x84, 0x24, 0x84, 0xC0, 0x5A, 0xCB, 0xCA, 0xE1, 0x01, 0xDE,
+    0x79, 0xE1, 0x26, 0xF2, 0xF9, 0x1C, 0x7D, 0x85, 0x00, 0xEB, 0x1C, 0x52, 0x29, 0x84, 0x48, 0xE2,
+    0x3D, 0xD2, 0x86, 0x6F, 0xDF, 0xFF, 0x4B, 0xEE, 0x7D, 0x62, 0x3B, 0xEF, 0xBA, 0xF4, 0x8D, 0x5C,
+    0xF6, 0xFA, 0x93, 0xD9, 0xBA, 0x67, 0x9C, 0x2F, 0xFF, 0xF0, 0x31, 0x9E, 0x19, 0xAF, 0xA3, 0x72,
+    0x03, 0x48, 0xBF, 0x84, 0xC1, 0x7B, 0x79, 0xCB, 0xA7, 0xE0, 0x9B, 0xA1, 0xA6, 0xDA, 0x08, 0xC9,
+    0x28, 0xF0, 0xA4, 0x73, 0x52, 0x30, 0x77, 0xD5, 0x47, 0x2E, 0x46, 0xA4, 0x5E, 0x79, 0x8C, 0x07,
+    0x38, 0xEB, 0x26, 0x03, 0x4F, 0x46, 0xCA, 0x39, 0x30, 0x9A, 0x30, 0x0C, 0x99, 0xAD, 0x42, 0xC1,
+    0xE6, 0x08, 0x32, 0x3E, 0x42, 0x2A, 0x90, 0xB6, 0x8B, 0xE3, 0x24, 0x49, 0x58, 0x1D, 0x33, 0x98,
+    0x33, 0xFC, 0xE9, 0xC5, 0xEB, 0x58, 0x31, 0x58, 0x46, 0x1B, 0x8B, 0x27, 0xE7, 0x13, 0x04, 0x82,
+    0xA2, 0xE7, 0x71, 0xED, 0x79, 0x1B, 0xD3, 0x69, 0x2D, 0xB1, 0xB6, 0x10, 0x49, 0xBC, 0x4F, 0x57,
+    0xEB, 0x7C, 0xE9, 0xCE, 0x9F, 0xF0, 0xFC, 0xFE, 0x43, 0xFC, 0xC5, 0x75, 0x57, 0xB0, 0x71, 0xF5,
+    0x08, 0x77, 0x3F, 0xBC, 0x95, 0xFF, 0xFD, 0x93, 0xA7, 0x38, 0xD4, 0xF4, 0xF1, 0xF3, 0x43, 0x38,
+    0x2F, 0x8F, 0x71, 0x32, 0xA9, 0xF8, 0xDC, 0xC2, 0x9A, 0x24, 0x19, 0x43, 0x08, 0xB0, 0xD6, 0xD1,
+    0x8C, 0x74, 0xB2, 0x96, 0x31, 0x06, 0x25, 0x15, 0x81, 0x14, 0x71, 0xA0, 0xC4, 0x91, 0x37, 0x9D,
+    0xBA, 0x94, 0xB6, 0x0D, 0xE7, 0x11, 0x90, 0xF1, 0x15, 0xD9, 0x40, 0x4D, 0xE4, 0x33, 0x6A, 0xCA,
+    0x97, 0x0C, 0x38, 0xA3, 0x41, 0x0B, 0xE2, 0x50, 0x50, 0x75, 0x90, 0x33, 0x96, 0x20, 0xE3, 0x27,
+    0xE5, 0x68, 0x57, 0x18, 0x58, 0x6B, 0xC8, 0x8A, 0x16, 0x7F, 0xF2, 0xA6, 0xF5, 0xBC, 0x61, 0xF5,
+    0x10, 0xC6, 0x3A, 0x3C, 0x71, 0x14, 0xBD, 0x58, 0x10, 0x32, 0xF3, 0xE6, 0x76, 0x40, 0x29, 0xC5,
+    0xCE, 0x03, 0x07, 0xF9, 0xEC, 0xAD, 0xF7, 0x20, 0xA4, 0xC7, 0x27, 0xDE, 0xF7, 0x4E, 0x0A, 0x19,
+    0x9F, 0xCF, 0xDE, 0xFE, 0x33, 0xBE, 0xF7, 0xD8, 0x6E, 0x22, 0x59, 0xC6, 0xCB, 0x55, 0x30, 0x22,
+    0x9B, 0xD4, 0xFA, 0x2F, 0x63, 0x75, 0x00, 0xE3, 0x1C, 0xAD, 0xC8, 0x10, 0xC7, 0x1A, 0x67, 0x1D,
+    0xCE, 0x1A, 0x3C, 0x5F, 0x90, 0xF3, 0x65, 0xAB, 0xB7, 0x10, 0x8C, 0x6B, 0x63, 0x16, 0xAF, 0x03,
+    0x86, 0x2B, 0x39, 0x56, 0x0E, 0xF7, 0xCC, 0x94, 0x72, 0xC1, 0xBE, 0x8C, 0x2F, 0x4F, 0x12, 0x46,
+    0xE3, 0x84, 0xC0, 0x49, 0x81, 0x89, 0x05, 0x0D, 0xE7, 0x88, 0x8D, 0x21, 0x13, 0xF8, 0x48, 0x25,
+    0x93, 0xA2, 0xC7, 0x59, 0x9C, 0x6E, 0xF2, 0xCE, 0x37, 0xAD, 0xE2, 0xF7, 0x36, 0xAD, 0x4A, 0x00,
+    0x09, 0xD7, 0x01, 0xBD, 0x10, 0x7C, 0x1B, 0x78, 0xFB, 0x3B, 0x01, 0x6C, 0x7E, 0xE6, 0x59, 0x3E,
+    0xFF, 0xED, 0x1F, 0xB2, 0x61, 0xCD, 0x4A, 0xDE, 0x7F, 0xED, 0x9B, 0xD9, 0x77, 0x68, 0x92, 0xBF,
+    0xF9, 0xFA, 0x0F, 0x79, 0x62, 0xCF, 0x0C, 0x32, 0xDB, 0x87, 0x0C, 0x4A, 0x18, 0xFC, 0xE3, 0xBA,
+    0x7C, 0x77, 0x43, 0x39, 0x36, 0x96, 0x58, 0x1B, 0xAC, 0x4D, 0x57, 0x95, 0xD6, 0x82, 0x31, 0x64,
+    0x94, 0x4F, 0x39, 0xE7, 0xCF, 0x64, 0x7C, 0x6F, 0x6F, 0xE0, 0x29, 0x02, 0x4F, 0x1D, 0x4B, 0xC0,
+    0x89, 0xCB, 0x7A, 0xD9, 0x74, 0xE2, 0x50, 0xF5, 0x8E, 0x9F, 0xFB, 0xCF, 0x16, 0x73, 0xFE, 0x65,
+    0xC2, 0x59, 0xAC, 0x8E, 0x71, 0x32, 0x5D, 0x8D, 0x09, 0x88, 0xA3, 0xA4, 0x5E, 0xF0, 0x3C, 0x85,
+    0xE7, 0x49, 0x4C, 0xDC, 0xE2, 0x8A, 0x8D, 0x43, 0xFC, 0xC9, 0x65, 0x1B, 0x08, 0x3C, 0x0F, 0xEB,
+    0xE6, 0x83, 0x6F, 0x2F, 0x6D, 0x93, 0x82, 0xE6, 0xA8, 0x57, 0x48, 0x29, 0x89, 0xA2, 0x98, 0xDB,
+    0xEE, 0xDB, 0xCC, 0x37, 0x7E, 0xFC, 0x20, 0xD7, 0x5D, 0xFC, 0x46, 0xAE, 0xBD, 0xF8, 0x2C, 0x7E,
+    0xF4, 0xE8, 0x36, 0xBE, 0xF8, 0xBD, 0x87, 0x19, 0xAB, 0x82, 0x9F, 0x1B, 0xC4, 0x79, 0x79, 0x2C,
+    0xAA, 0x03, 0xFE, 0x38, 0x5D, 0x73, 0xAC, 0x75, 0xC4, 0xC6, 0xA6, 0x79, 0xC7, 0xB5, 0xC3, 0x39,
+    0x69, 0xA8, 0x58, 0x4B, 0x7F, 0x31, 0xA0, 0x9C, 0x95, 0x2F, 0xCE, 0x4E, 0x8C, 0x1F, 0x6E, 0x36,
+    0x8F, 0x92, 0x38, 0x8F, 0x80, 0x4D, 0x27, 0x0E, 0xF1, 0xC7, 0xFF, 0xE3, 0xFB, 0x76, 0xDD, 0x8A,
+    0xFE, 0xC7, 0x2B, 0xC5, 0x6C, 0xE4, 0x09, 0x02, 0xA3, 0x35, 0x4E, 0x26, 0xE0, 0x3B, 0x2E, 0xEF,
+    0x1C, 0x91, 0xB5, 0xB4, 0x9A, 0x11, 0xA7, 0x8D, 0x16, 0xF9, 0xD0, 0x3B, 0x36, 0xD1, 0x5B, 0xCC,
+    0x26, 0x71, 0xDF, 0x65, 0xF1, 0x76, 0x29, 0xDB, 0x9E, 0x05, 0x3A, 0x5E, 0x20, 0x25, 0xD3, 0xB3,
+    0x73, 0x7C, 0xF1, 0xB6, 0xEF, 0xF3, 0xD0, 0x96, 0x17, 0xF8, 0x8B, 0xEB, 0xDF, 0xCA, 0xC6, 0x35,
+    0xA3, 0xFC, 0xCF, 0x6F, 0xDD, 0xC7, 0xB7, 0x1F, 0x7C, 0x8E, 0x96, 0x28, 0xE2, 0x65, 0x2B, 0x58,
+    0x99, 0x41, 0x58, 0x12, 0x2B, 0x2E, 0x38, 0x5C, 0x97, 0x2E, 0xD6, 0xBA, 0xA3, 0xC0, 0xA1, 0x33,
+    0xF7, 0x63, 0x2D, 0xCE, 0x18, 0xF2, 0x81, 0x62, 0xA4, 0xBF, 0x40, 0x3E, 0x90, 0x4F, 0x7E, 0xEB,
+    0x3F, 0x9F, 0x3B, 0xBB, 0xE6, 0xDD, 0x9F, 0x5A, 0x9C, 0x80, 0xC3, 0x33, 0x4D, 0x36, 0xAE, 0x1A,
+    0x64, 0xA8, 0xAF, 0xF0, 0xC4, 0x40, 0x6F, 0xE1, 0x60, 0x36, 0x50, 0x2B, 0xC2, 0x30, 0xC2, 0xC5,
+    0x02, 0x8B, 0x40, 0x72, 0x74, 0x1D, 0x60, 0x75, 0x4C, 0x7F, 0xC1, 0x71, 0xE3, 0x75, 0x67, 0xB2,
+    0x7A, 0xA8, 0x27, 0xA9, 0xF1, 0x3B, 0xEB, 0xF6, 0xF9, 0x56, 0x5F, 0x08, 0x7E, 0xF7, 0x81, 0x71,
+    0x3E, 0xFD, 0xF5, 0x3B, 0x98, 0x6D, 0x84, 0x7C, 0xF2, 0xCF, 0xDE, 0x4D, 0x6C, 0x1C, 0x1F, 0xFA,
+    0xC7, 0x3B, 0xF8, 0xE5, 0x8E, 0x09, 0x44, 0xB6, 0x17, 0x15, 0x94, 0x92, 0x29, 0xCE, 0x42, 0xFA,
+    0xE7, 0x18, 0xF4, 0x36, 0x2D, 0x71, 0xAD, 0x5B, 0xE4, 0xCB, 0xB6, 0xF5, 0x8D, 0xC1, 0x17, 0x8E,
+    0x25, 0x3D, 0x39, 0xFA, 0x8B, 0x99, 0x66, 0x5F, 0xB9, 0xF8, 0xD0, 0x45, 0xFF, 0xF0, 0xA4, 0xDD,
+    0xF7, 0xF0, 0x77, 0x17, 0x27, 0x60, 0xB8, 0x37, 0xCF, 0x77, 0x36, 0xEF, 0x60, 0xD3, 0xFA, 0xE5,
+    0xBB, 0x1F, 0xDD, 0xBA, 0xFF, 0x91, 0x4A, 0x29, 0xB7, 0x62, 0x6E, 0xAE, 0x8E, 0xD5, 0x71, 0x52,
+    0x55, 0x76, 0x7A, 0x0C, 0x86, 0x40, 0x69, 0xFE, 0xFC, 0xAD, 0x67, 0x73, 0xC1, 0xA9, 0xCB, 0x89,
+    0xD3, 0x15, 0x5B, 0x27, 0xE6, 0x84, 0x40, 0x76, 0xAD, 0xE1, 0x9D, 0x4B, 0xAA, 0x47, 0x29, 0x04,
+    0x8F, 0x3E, 0xB3, 0x9D, 0x4F, 0xFD, 0xEB, 0x77, 0x59, 0xB3, 0x7C, 0x29, 0x1F, 0x7C, 0xCF, 0xDB,
+    0xF9, 0xE5, 0xB6, 0x17, 0xF9, 0x5F, 0xDF, 0xD9, 0xCC, 0xFE, 0x19, 0x83, 0x9F, 0x1B, 0x40, 0xB4,
+    0x5D, 0x7E, 0xA1, 0xD5, 0xD3, 0xAD, 0x38, 0x97, 0xEE, 0x47, 0x1E, 0xFD, 0x23, 0xBA, 0x92, 0x80,
+    0xEB, 0xAC, 0xFE, 0x9C, 0xB1, 0xF8, 0xD2, 0x31, 0x50, 0xCC, 0x30, 0x50, 0xCE, 0xD0, 0x5B, 0xCC,
+    0xEC, 0x2A, 0x17, 0x82, 0x47, 0x85, 0x08, 0xF1, 0x8B, 0x95, 0xC5, 0x09, 0x00, 0xB8, 0xE2, 0x0D,
+    0xAB, 0xB8, 0xEA, 0xC6, 0x5B, 0x9A, 0x97, 0x9F, 0xB9, 0xE6, 0x9E, 0xE1, 0x81, 0xD2, 0x35, 0x07,
+    0x0F, 0x4E, 0x66, 0x9A, 0x51, 0x04, 0xC2, 0x75, 0xDC, 0xCE, 0xC4, 0x96, 0x6B, 0x2E, 0x58, 0xC3,
+    0x1F, 0x5E, 0xB2, 0x01, 0x1D, 0xC7, 0xA9, 0x15, 0x5C, 0x7B, 0x12, 0x4A, 0x9E, 0x80, 0xEA, 0x02,
+    0xDF, 0xF6, 0x8A, 0x1F, 0x3C, 0xF0, 0x18, 0x37, 0xDF, 0x79, 0x2F, 0x57, 0x5C, 0x70, 0x16, 0x6F,
+    0x3A, 0x63, 0x03, 0x37, 0xDD, 0xFD, 0x10, 0xB7, 0xFE, 0x7C, 0x1B, 0x4D, 0x97, 0xC7, 0xCB, 0xF6,
+    0x63, 0x65, 0x16, 0x61, 0x45, 0xE2, 0xBA, 0x8B, 0xB9, 0xFC, 0xF1, 0x1E, 0x3A, 0xE8, 0x5E, 0x03,
+    0xB9, 0xD4, 0xF2, 0x0A, 0xFA, 0x0B, 0x19, 0xCA, 0x59, 0x45, 0x5F, 0x29, 0x4B, 0x4F, 0x21, 0xF3,
+    0x93, 0xF7, 0x5C, 0xBC, 0x7E, 0xEC, 0xB6, 0x5F, 0xEC, 0xE0, 0xCF, 0xFE, 0xDB, 0x87, 0x8E, 0x4F,
+    0xC0, 0xBE, 0xC3, 0x73, 0xFC, 0xFE, 0x9B, 0x4E, 0x61, 0xA0, 0x52, 0xB8, 0x6F, 0x74, 0xB8, 0xB2,
+    0xED, 0xC5, 0x3D, 0xD9, 0x33, 0x5A, 0x47, 0x5A, 0x10, 0x77, 0x0F, 0x6D, 0x38, 0x30, 0x7E, 0x88,
+    0xC3, 0xD3, 0x73, 0x0C, 0x57, 0x0A, 0x49, 0xB3, 0x22, 0xB5, 0xBA, 0x50, 0x2A, 0x59, 0x09, 0x76,
+    0x85, 0x41, 0x18, 0xC5, 0xDC, 0x72, 0xCF, 0x7D, 0xFC, 0xE2, 0x89, 0xAD, 0xBC, 0xFF, 0xFA, 0xAB,
+    0xC9, 0x64, 0x73, 0xFC, 0xD5, 0x97, 0xEE, 0xE4, 0xE1, 0xE7, 0x0F, 0x23, 0x32, 0x15, 0x54, 0xA6,
+    0x88, 0x13, 0xFE, 0xD1, 0xD8, 0x7D, 0xAD, 0x47, 0x1A, 0x07, 0x6D, 0x0F, 0xCC, 0x7A, 0x92, 0xBE,
+    0x62, 0x40, 0xCE, 0x13, 0x94, 0x32, 0x1E, 0x83, 0x3D, 0xB9, 0x89, 0x4A, 0x31, 0xFB, 0x9D, 0x4F,
+    0x7F, 0xFB, 0x51, 0xF3, 0xF5, 0x9F, 0x1F, 0x9C, 0xF7, 0xD3, 0x63, 0x4A, 0xBA, 0x93, 0x57, 0xF4,
+    0xB3, 0x62, 0xB8, 0xC2, 0xBB, 0x2E, 0x39, 0xE5, 0xC0, 0xC8, 0x50, 0xCF, 0xAD, 0x23, 0x4B, 0x7A,
+    0x6D, 0xE0, 0x49, 0x9C, 0x8E, 0xB1, 0x71, 0x8C, 0x8B, 0x23, 0x84, 0x73, 0x3C, 0xBC, 0x65, 0x2F,
+    0x9F, 0xFC, 0xDA, 0xF7, 0xA9, 0x35, 0x93, 0x56, 0xB5, 0x6B, 0x2B, 0x61, 0x8F, 0x6E, 0x62, 0x00,
+    0xCC, 0x56, 0x6B, 0x7C, 0xE1, 0x5F, 0xEF, 0x60, 0xE7, 0xBE, 0x71, 0x3E, 0xFA, 0xBE, 0x7F, 0xC7,
+    0xD8, 0x54, 0x9D, 0x0F, 0x7C, 0xEE, 0x76, 0x36, 0x3F, 0x37, 0x89, 0xCC, 0xF6, 0x23, 0xFD, 0x12,
+    0x4E, 0x78, 0x09, 0x78, 0x6B, 0xE7, 0x09, 0xAF, 0x20, 0xDD, 0xD7, 0x38, 0x63, 0xC0, 0x18, 0x8A,
+    0x81, 0x64, 0xB0, 0x14, 0x90, 0x55, 0xE0, 0x0B, 0x47, 0x7F, 0x4F, 0x8E, 0x81, 0x9E, 0xFC, 0x8F,
+    0xD7, 0x2C, 0xEB, 0x7D, 0x6C, 0xB0, 0x27, 0xC7, 0x27, 0xDE, 0xB3, 0x7E, 0x1E, 0xDE, 0x45, 0x9F,
+    0x68, 0x78, 0xDB, 0x7B, 0x6E, 0xE0, 0xEC, 0x2B, 0xDF, 0xC3, 0x60, 0x6F, 0x71, 0xAC, 0xD6, 0x08,
+    0x2F, 0x9A, 0x98, 0x9C, 0x5D, 0x5A, 0xAF, 0x37, 0xD2, 0x8D, 0xCB, 0xA4, 0x06, 0x12, 0x52, 0xF2,
+    0xC2, 0x9E, 0x71, 0xB0, 0x31, 0xE7, 0x9C, 0xB6, 0x16, 0x29, 0x8E, 0xBA, 0xBC, 0x73, 0x16, 0xA5,
+    0x14, 0x63, 0x87, 0x27, 0xF9, 0xD2, 0xAD, 0x77, 0xB1, 0x6C, 0x68, 0x80, 0x6B, 0x2F, 0xBF, 0x88,
+    0x7F, 0xFE, 0xFE, 0xC3, 0x7C, 0xEE, 0xF6, 0xCD, 0x4C, 0xB5, 0x02, 0xFC, 0x6C, 0x2F, 0x42, 0x65,
+    0x93, 0x4D, 0x0C, 0x77, 0x34, 0x7E, 0x5F, 0xB3, 0xA4, 0x44, 0x28, 0x1C, 0xBD, 0x85, 0x80, 0xDE,
+    0x82, 0x8F, 0x87, 0x45, 0x3A, 0x43, 0x4F, 0x21, 0x60, 0xF5, 0x48, 0xFF, 0xC4, 0xE8, 0x70, 0xE5,
+    0xBF, 0xEE, 0x1A, 0x9B, 0x7A, 0xE1, 0x5D, 0x97, 0xAC, 0xE7, 0x8C, 0x13, 0x97, 0xBD, 0xBC, 0x07,
+    0x00, 0xBC, 0xEB, 0xD2, 0x53, 0x39, 0x61, 0x49, 0x85, 0xF7, 0xFF, 0xF9, 0x97, 0xF7, 0xAC, 0x1C,
+    0xE9, 0xFF, 0xA7, 0x55, 0xA3, 0x43, 0xAD, 0x5C, 0xC6, 0x07, 0x13, 0xE3, 0x74, 0x84, 0x8B, 0x63,
+    0x30, 0x60, 0xC8, 0x72, 0xD3, 0x9D, 0x8F, 0x70, 0xF3, 0x5D, 0x9B, 0x41, 0xC8, 0xD4, 0xF2, 0x1A,
+    0x29, 0x24, 0xDB, 0x76, 0xED, 0xE5, 0x96, 0xBB, 0x7F, 0xC2, 0x65, 0xE7, 0x9E, 0xC9, 0xC6, 0x53,
+    0x4E, 0xE6, 0x23, 0x9F, 0xBF, 0x9D, 0xAF, 0xFE, 0xE0, 0x57, 0x84, 0xA2, 0x8C, 0x97, 0xE9, 0x01,
+    0x19, 0x24, 0xC1, 0xFB, 0x2A, 0xAD, 0x8D, 0x4D, 0x4A, 0x5F, 0xD7, 0x65, 0x7D, 0x67, 0x4C, 0xD2,
+    0x66, 0xF7, 0x04, 0xC3, 0x3D, 0x59, 0x2A, 0x39, 0x0F, 0x65, 0x0D, 0xC2, 0x18, 0xB2, 0x9E, 0x60,
+    0x49, 0x5F, 0x89, 0xA1, 0x4A, 0xF1, 0xD6, 0xD3, 0x4F, 0x5C, 0xFA, 0xE0, 0xE8, 0x50, 0x99, 0x07,
+    0xB6, 0x8C, 0x1D, 0x83, 0xF5, 0xB8, 0xCF, 0xB4, 0x5C, 0xF1, 0xCE, 0xF7, 0x71, 0xE9, 0xA5, 0x1B,
+    0x59, 0x39, 0xD2, 0xBF, 0xAB, 0xD6, 0x08, 0xD7, 0xCF, 0xCC, 0xD5, 0x4F, 0x99, 0x9B, 0xAD, 0x61,
+    0x8D, 0xE9, 0x2C, 0x71, 0x85, 0x90, 0xC4, 0x16, 0x1E, 0xDF, 0xF6, 0x02, 0xA5, 0xBC, 0xCF, 0xE9,
+    0x27, 0xAD, 0x40, 0x08, 0xC1, 0xA3, 0x5B, 0x9F, 0x67, 0xDB, 0xCE, 0x3D, 0x5C, 0x7D, 0xE9, 0x05,
+    0x3C, 0xBB, 0x77, 0x82, 0xBF, 0xFE, 0xE2, 0x77, 0xD9, 0xB6, 0x7F, 0x0E, 0x2F, 0xD7, 0x8B, 0xF4,
+    0xF2, 0x20, 0xD5, 0xC2, 0xCC, 0xB6, 0xE0, 0x38, 0x4E, 0x93, 0xBD, 0x63, 0xF9, 0x84, 0x80, 0x40,
+    0x0A, 0x7A, 0x0B, 0x01, 0x7D, 0xC5, 0x0C, 0x19, 0x05, 0xC2, 0x1A, 0xB0, 0x06, 0x5F, 0x3A, 0x06,
+    0x7B, 0x0B, 0xAC, 0x5A, 0x3E, 0xF0, 0xCC, 0x09, 0x4B, 0x7B, 0xFF, 0x6A, 0xEF, 0x4B, 0xD3, 0x87,
+    0x8E, 0xCC, 0x35, 0xF8, 0xD3, 0xAB, 0xDF, 0x70, 0xCC, 0x2D, 0x5F, 0xB6, 0x97, 0xED, 0x9C, 0xE3,
+    0x23, 0x5F, 0xF8, 0x01, 0xC3, 0xFD, 0xE5, 0x33, 0x1E, 0x7B, 0x66, 0xF7, 0x2D, 0x0F, 0x3F, 0xF1,
+    0xDC, 0xBA, 0x89, 0x89, 0x69, 0xAC, 0x13, 0xA0, 0x14, 0x42, 0x79, 0x08, 0x4F, 0x62, 0x6D, 0x4C,
+    0xCE, 0x0B, 0xB9, 0xE1, 0xBA, 0xF3, 0x39, 0xF3, 0x94, 0x15, 0xF8, 0x9E, 0x60, 0x74, 0x64, 0x19,
+    0x37, 0xDD, 0xFE, 0x33, 0x6E, 0xB9, 0xF7, 0x49, 0x42, 0x0A, 0xA8, 0x6C, 0x19, 0x21, 0x03, 0xE8,
+    0xB4, 0xD5, 0x5F, 0xE5, 0x86, 0x62, 0x17, 0x49, 0xED, 0xFA, 0xC2, 0x93, 0x82, 0x62, 0xCE, 0xA7,
+    0x9C, 0x0B, 0x08, 0x94, 0x40, 0xB8, 0xC4, 0x3B, 0x84, 0xB5, 0x28, 0x61, 0xA9, 0x14, 0x73, 0xAC,
+    0x5D, 0xB9, 0x64, 0x76, 0xDD, 0xCA, 0xA1, 0x1B, 0x3E, 0xFD, 0xAD, 0x27, 0xBF, 0x79, 0xEB, 0xC7,
+    0xAF, 0xE2, 0xE0, 0xAC, 0xE6, 0xDA, 0x0B, 0x4F, 0x7E, 0xF5, 0x1E, 0x00, 0xB0, 0xF6, 0xDC, 0x6B,
+    0x19, 0x19, 0xAC, 0x70, 0xC3, 0xF5, 0x7F, 0xFB, 0xD2, 0x75, 0xEF, 0xB9, 0x6C, 0x3A, 0x36, 0xF6,
+    0x92, 0xE9, 0xE9, 0x6A, 0x36, 0x6C, 0xB6, 0xDA, 0xFD, 0xC3, 0x64, 0xEA, 0x13, 0x8A, 0xD8, 0x08,
+    0x1E, 0x79, 0x66, 0x27, 0xE3, 0x47, 0xA6, 0x59, 0x35, 0x3A, 0xC2, 0xA7, 0x6E, 0xBE, 0x9B, 0xEF,
+    0x6D, 0x7E, 0x0E, 0xEB, 0xF5, 0x20, 0xFD, 0x22, 0x42, 0xFA, 0xB4, 0x5B, 0x54, 0x9D, 0x95, 0xC8,
+    0xAB, 0x88, 0xEF, 0x76, 0x43, 0x03, 0xE7, 0xF0, 0xA4, 0xA0, 0x94, 0xF3, 0x18, 0x28, 0x65, 0x29,
+    0x67, 0x3D, 0x3C, 0xE1, 0x10, 0x2E, 0xB1, 0xBA, 0xB0, 0x06, 0xE9, 0x0C, 0xA5, 0x5C, 0xC0, 0x8A,
+    0x91, 0x7E, 0xBD, 0x72, 0xD9, 0xC0, 0x67, 0x2F, 0xD9, 0xB4, 0xE6, 0x4B, 0xAF, 0x5B, 0x3B, 0x60,
+    0x9A, 0x91, 0xE6, 0xBA, 0x8B, 0x4E, 0x5D, 0x14, 0xE3, 0xCB, 0x12, 0xF0, 0x82, 0x38, 0x95, 0xB7,
+    0x9F, 0xBF, 0x9E, 0xF3, 0xAF, 0x3C, 0x9B, 0x2B, 0xCE, 0x3B, 0xF5, 0xB9, 0x83, 0x93, 0x73, 0x26,
+    0x36, 0xF6, 0xDC, 0xD9, 0xD9, 0xAA, 0x1F, 0x85, 0x61, 0x92, 0x14, 0xD3, 0x82, 0x45, 0x08, 0x09,
+    0xD2, 0x63, 0xFF, 0xA1, 0x59, 0xEE, 0x7D, 0x78, 0x3B, 0x7B, 0x0F, 0xD7, 0xF1, 0x82, 0x12, 0xB2,
+    0x93, 0xE8, 0x5C, 0x32, 0x5D, 0x39, 0x9B, 0x36, 0x57, 0xEC, 0xCB, 0x82, 0x4F, 0x4A, 0x59, 0x87,
+    0xC4, 0x91, 0xF5, 0x25, 0x3D, 0xF9, 0xC4, 0xD5, 0x4B, 0x59, 0x2F, 0x59, 0x66, 0xBB, 0x04, 0xB4,
+    0xE8, 0x80, 0xB7, 0x14, 0xB2, 0x3E, 0xA3, 0xCB, 0xFA, 0xDD, 0xE8, 0xB2, 0xFE, 0x7F, 0x1E, 0xEA,
+    0x2F, 0xFF, 0x8D, 0xD1, 0xB6, 0xFE, 0xF4, 0xCE, 0x43, 0x7C, 0xF2, 0x5F, 0x1E, 0x60, 0xE4, 0x8C,
+    0xB7, 0x52, 0x5C, 0x77, 0x19, 0xB3, 0xCF, 0xFE, 0xF8, 0xD5, 0x11, 0xD0, 0x73, 0xE5, 0x27, 0x31,
+    0xD6, 0x32, 0x35, 0x53, 0xE7, 0xC7, 0x8F, 0xEF, 0xE2, 0xE3, 0xFF, 0xE1, 0x02, 0xBB, 0x7D, 0xFF,
+    0xF4, 0x93, 0xBE, 0x92, 0xBE, 0xC5, 0x9D, 0x3D, 0x3B, 0x57, 0xF3, 0xA2, 0x56, 0x88, 0xB3, 0xA6,
+    0xCB, 0xAA, 0x02, 0x21, 0x14, 0x0E, 0x0F, 0xA9, 0x32, 0x20, 0xD2, 0x32, 0xA3, 0x03, 0xD6, 0x76,
+    0x48, 0xC0, 0x76, 0xC5, 0x73, 0x97, 0xE0, 0x2C, 0x12, 0x4B, 0xA0, 0x24, 0xC5, 0xAC, 0x47, 0x6F,
+    0x21, 0xA0, 0x27, 0x1F, 0x90, 0x0B, 0x54, 0x62, 0x71, 0x6B, 0xBB, 0xC0, 0x5B, 0xB0, 0x1A, 0x89,
+    0xA3, 0x90, 0xF5, 0x59, 0xBE, 0xB4, 0x8F, 0xE5, 0x4B, 0xFB, 0xEF, 0x40, 0x79, 0x37, 0x7E, 0xF4,
+    0x8F, 0x2E, 0x3C, 0xFC, 0xC3, 0x83, 0x23, 0xF2, 0xF1, 0xE7, 0xC7, 0xC8, 0x67, 0x7C, 0x96, 0x0F,
+    0x94, 0x78, 0xF1, 0xE0, 0x2C, 0x76, 0xF4, 0x42, 0xEC, 0x9E, 0xFB, 0x5F, 0x3E, 0x07, 0x8C, 0xBC,
+    0xFD, 0xBF, 0x13, 0xC6, 0x86, 0xD8, 0x58, 0x02, 0x4F, 0x89, 0x30, 0xD2, 0x38, 0x10, 0xD5, 0x47,
+    0x76, 0x8A, 0xF7, 0x7F, 0xFC, 0xBA, 0x12, 0x71, 0xF4, 0xD1, 0x67, 0x77, 0xEC, 0xFB, 0x4F, 0xDB,
+    0x9F, 0x7B, 0x31, 0x37, 0x3B, 0x53, 0x4D, 0x16, 0x22, 0x52, 0xA5, 0x9B, 0x27, 0x5D, 0x67, 0xA9,
+    0x40, 0x76, 0x6F, 0xA9, 0xB5, 0x5B, 0xEA, 0x47, 0x37, 0x58, 0x45, 0x5A, 0x40, 0x29, 0x25, 0xF1,
+    0x3D, 0x45, 0x26, 0x50, 0x64, 0x03, 0x8F, 0xC0, 0x53, 0x28, 0x99, 0x36, 0x4D, 0xD2, 0x90, 0x11,
+    0x38, 0x84, 0x73, 0x08, 0x12, 0x42, 0x85, 0xB3, 0x28, 0x01, 0xC5, 0x7C, 0x86, 0x91, 0xA5, 0x03,
+    0x6E, 0xC9, 0x70, 0xDF, 0x9D, 0x73, 0x4D, 0x7D, 0xE3, 0x97, 0xBF, 0x76, 0xFF, 0xDE, 0xE2, 0x09,
+    0x03, 0x90, 0x2C, 0x24, 0xAC, 0x00, 0x2B, 0xA5, 0x64, 0x76, 0xAE, 0xE1, 0xCE, 0x58, 0xBF, 0x9C,
+    0xFE, 0x9E, 0x1C, 0xF7, 0x7E, 0xF6, 0xBD, 0xC7, 0xF7, 0x80, 0x81, 0x8D, 0x57, 0xB2, 0xB4, 0xAF,
+    0xC8, 0x4C, 0x2D, 0x14, 0xAD, 0x48, 0x0B, 0x92, 0xE9, 0xD2, 0x0B, 0x46, 0xFA, 0x82, 0xCD, 0xCF,
+    0xEC, 0xC5, 0xCF, 0x66, 0x9F, 0x3A, 0x69, 0xC5, 0x60, 0x54, 0x2C, 0x64, 0x4F, 0x0B, 0xC3, 0x28,
+    0x17, 0xB6, 0x42, 0x9C, 0xD1, 0x47, 0x2D, 0x6B, 0xDB, 0x96, 0xB2, 0x88, 0xD4, 0xE5, 0x85, 0x4B,
+    0xF6, 0x18, 0x14, 0xC9, 0xE3, 0x6C, 0x81, 0x92, 0xE4, 0x03, 0x45, 0x21, 0xA3, 0x28, 0xE5, 0x7C,
+    0xCA, 0x39, 0x9F, 0x52, 0xC6, 0x23, 0xEB, 0x2B, 0x7C, 0x49, 0xBA, 0x1F, 0x69, 0x13, 0x4B, 0xBB,
+    0x64, 0x5E, 0x17, 0xCE, 0x20, 0xAC, 0xEE, 0xC4, 0x7B, 0x20, 0x05, 0xBD, 0xE5, 0x02, 0xA3, 0xCB,
+    0x06, 0xA3, 0x9E, 0x4A, 0xE9, 0xDB, 0x5B, 0xF6, 0x4C, 0xFE, 0xFD, 0x6D, 0x3F, 0x7F, 0xF6, 0x48,
+    0x71, 0xA0, 0x94, 0xCE, 0xB1, 0x47, 0x0D, 0x6C, 0xAD, 0x25, 0x97, 0x0B, 0xB8, 0xEA, 0x9C, 0x93,
+    0x68, 0x86, 0x9A, 0x0F, 0xDF, 0xF8, 0x5F, 0xB8, 0xEB, 0xFF, 0xDC, 0xB4, 0x88, 0x07, 0x9C, 0xFF,
+    0x31, 0x0A, 0xD9, 0x00, 0x29, 0x05, 0xCE, 0x39, 0x91, 0xEA, 0xAC, 0x00, 0x1F, 0xC8, 0x00, 0x39,
+    0x6D, 0x6C, 0xA6, 0x98, 0xCF, 0xE4, 0x2F, 0xDA, 0xB8, 0xFC, 0x2A, 0x11, 0x87, 0x37, 0xEC, 0xDD,
+    0x3B, 0xBE, 0x6A, 0x7C, 0x7C, 0x82, 0x66, 0xB3, 0x99, 0xF6, 0x03, 0x12, 0xEB, 0x0B, 0x25, 0x91,
+    0x4A, 0xCD, 0x93, 0xF6, 0x66, 0x87, 0x52, 0xE9, 0x76, 0x7B, 0xBB, 0x84, 0xEE, 0xB4, 0xC8, 0x44,
+    0x47, 0x73, 0x21, 0xDA, 0x0F, 0x45, 0xBA, 0xA4, 0x35, 0x8F, 0x43, 0xE0, 0x50, 0x02, 0xB2, 0xD9,
+    0x80, 0x81, 0xBE, 0x1E, 0x06, 0x06, 0x7B, 0xA7, 0x5B, 0x56, 0xDE, 0xF6, 0xC0, 0xD6, 0x03, 0xDF,
+    0x7A, 0x69, 0xB2, 0x36, 0xE3, 0x7B, 0x32, 0x22, 0xF9, 0xEF, 0x93, 0x56, 0x7A, 0x0E, 0x81, 0x18,
+    0xD0, 0x4A, 0x0A, 0x7B, 0xCE, 0xA9, 0xA3, 0xEE, 0x47, 0x9F, 0xF9, 0xA6, 0xBB, 0xEB, 0xA1, 0xCF,
+    0x72, 0xF5, 0xB9, 0x27, 0x2F, 0xE2, 0x01, 0xA3, 0x17, 0x12, 0xCF, 0x35, 0x50, 0x59, 0x5F, 0xC8,
+    0x64, 0x1D, 0xAB, 0x80, 0x00, 0xC8, 0x02, 0x45, 0xA0, 0x2C, 0xA5, 0xE8, 0x8D, 0xB5, 0xED, 0xDB,
+    0x31, 0x36, 0x3D, 0xE3, 0x67, 0x33, 0x2F, 0xAE, 0x1C, 0x19, 0x2C, 0xF4, 0xF5, 0x14, 0x87, 0x04,
+    0x78, 0xCE, 0x18, 0x04, 0x16, 0x25, 0x93, 0xAC, 0xED, 0x49, 0x50, 0x42, 0xA0, 0x64, 0xD2, 0x29,
+    0x92, 0x24, 0x22, 0x52, 0x0B, 0xCB, 0xD4, 0xA5, 0x85, 0x33, 0xF3, 0x2C, 0x9E, 0x48, 0x12, 0xE7,
+    0xC2, 0x26, 0xF7, 0x94, 0x58, 0xB2, 0xBE, 0x47, 0x6F, 0xA5, 0xC8, 0xB2, 0xA5, 0x03, 0xA6, 0x50,
+    0x2E, 0xBD, 0xB0, 0xF3, 0x70, 0xED, 0xF6, 0x9F, 0x3D, 0xBD, 0xEF, 0xF1, 0x5A, 0x33, 0xCA, 0x78,
+    0x4A, 0x16, 0x52, 0x23, 0xB5, 0x9F, 0x96, 0x4A, 0xD8, 0x4B, 0x43, 0xC1, 0x5A, 0xE7, 0xC2, 0x48,
+    0xBB, 0xBF, 0xFC, 0xE8, 0x3B, 0xF9, 0xE5, 0x96, 0xFD, 0x3C, 0x75, 0xDF, 0xAD, 0xC7, 0x12, 0x50,
+    0x38, 0xF9, 0xCD, 0x54, 0x7A, 0x8B, 0x44, 0xDA, 0x08, 0x29, 0x84, 0x24, 0x59, 0x30, 0x05, 0x40,
+    0x1E, 0x28, 0x03, 0xBD, 0x40, 0xBF, 0x10, 0x0C, 0x48, 0x21, 0x06, 0x0F, 0x4D, 0x37, 0xBC, 0x03,
+    0x53, 0x8D, 0x03, 0x95, 0x9E, 0xE2, 0xDC, 0x8A, 0x65, 0x03, 0xA5, 0x9E, 0x52, 0xBE, 0x20, 0x85,
+    0x94, 0xAE, 0xAB, 0x7A, 0x4B, 0x2C, 0x67, 0x3B, 0xC0, 0x65, 0x1A, 0xCB, 0x12, 0xDB, 0x05, 0xD6,
+    0xCE, 0x07, 0x9E, 0x82, 0x97, 0x24, 0x44, 0x66, 0x03, 0x9F, 0xDE, 0x9E, 0x22, 0x4B, 0x87, 0xFB,
+    0xE9, 0x1B, 0xE8, 0x9D, 0x3E, 0xDC, 0x30, 0x8F, 0x6D, 0x7E, 0xEE, 0xE0, 0x43, 0xBB, 0xC6, 0x67,
+    0x66, 0x85, 0xA0, 0x24, 0x84, 0x28, 0xA4, 0x46, 0x0A, 0xBA, 0x42, 0xDB, 0x92, 0xF4, 0xD0, 0x34,
+    0x60, 0x85, 0x10, 0xB6, 0x15, 0x6A, 0xFA, 0x4A, 0x39, 0xB7, 0xEB, 0xC0, 0x24, 0xFB, 0x1E, 0xBF,
+    0xEB, 0x58, 0x02, 0xD6, 0x5F, 0x70, 0x1D, 0x2B, 0x86, 0x7B, 0x38, 0x3C, 0x5D, 0x97, 0x2E, 0x8D,
+    0xFD, 0x94, 0xD5, 0x36, 0x01, 0x15, 0xA0, 0xAF, 0x2D, 0x52, 0x88, 0x5E, 0xAD, 0x6D, 0x79, 0x7C,
+    0xAA, 0xD6, 0x3C, 0x52, 0x8B, 0x0F, 0xF6, 0xF4, 0x94, 0x1A, 0xCB, 0x96, 0xF4, 0x65, 0x06, 0x7A,
+    0xCB, 0x99, 0x6C, 0x36, 0x90, 0x2A, 0xDD, 0x5D, 0x92, 0x0B, 0xAC, 0xDF, 0x26, 0xA1, 0x9D, 0xD4,
+    0xDA, 0x16, 0x4E, 0xBC, 0x24, 0x79, 0x04, 0x37, 0x1B, 0xF8, 0x14, 0x8B, 0x39, 0x06, 0xFA, 0x7A,
+    0x18, 0x1E, 0xEE, 0xB7, 0xA5, 0x4A, 0xCF, 0xDC, 0x74, 0xC4, 0xCE, 0x27, 0x76, 0x4F, 0x3E, 0xB3,
+    0x6D, 0xEF, 0xE4, 0xC1, 0x30, 0xD2, 0x9E, 0x94, 0x22, 0x9F, 0xEA, 0x17, 0xA4, 0xBA, 0xB6, 0x9F,
+    0x59, 0x35, 0xA9, 0xEB, 0x47, 0xED, 0x10, 0x20, 0xE9, 0x9C, 0xB9, 0xB1, 0x23, 0x73, 0xEE, 0xE0,
+    0x74, 0x83, 0xE6, 0x0B, 0xF7, 0x1D, 0xBB, 0x1C, 0x56, 0x69, 0x5C, 0x2E, 0xD8, 0x67, 0x6C, 0x27,
+    0x42, 0x95, 0x0E, 0xE2, 0xA7, 0x03, 0x06, 0x40, 0x46, 0x08, 0x32, 0x02, 0x91, 0x99, 0xA9, 0x35,
+    0x79, 0xF4, 0x85, 0xE6, 0xDE, 0x52, 0x3E, 0x33, 0x31, 0x3A, 0x50, 0x1C, 0x58, 0x32, 0xB4, 0x64,
+    0xC9, 0xE0, 0x12, 0xD7, 0x6F, 0xA2, 0xB0, 0xD0, 0x6A, 0xB6, 0xBC, 0x56, 0x2B, 0x24, 0x8A, 0x22,
+    0x74, 0x6C, 0xB0, 0xF6, 0x68, 0x67, 0x56, 0x4A, 0x81, 0x54, 0x12, 0xDF, 0xF3, 0x08, 0x02, 0x9F,
+    0x4C, 0x26, 0x20, 0x9B, 0xCD, 0x90, 0xCB, 0x65, 0x8D, 0xF4, 0xFD, 0x56, 0xD3, 0x30, 0xB3, 0x6F,
+    0xA6, 0x75, 0x68, 0xCF, 0xC4, 0xF4, 0x91, 0xA9, 0xB9, 0x56, 0xDD, 0xE1, 0xAC, 0x14, 0x22, 0x07,
+    0x22, 0x4E, 0xC1, 0xB5, 0x5D, 0x3D, 0xEE, 0xD2, 0xCB, 0x4B, 0xF5, 0x95, 0xA9, 0x74, 0xF2, 0x9D,
+    0x36, 0x4E, 0xD8, 0x74, 0xBD, 0x7E, 0x0C, 0x01, 0xA6, 0xF3, 0x9C, 0xCE, 0xBC, 0x8F, 0xDB, 0x71,
+    0xD4, 0xCD, 0x6A, 0x98, 0x4A, 0x7B, 0x5F, 0xDA, 0x09, 0x21, 0xAC, 0x00, 0xAF, 0xD6, 0x88, 0xEC,
+    0xB6, 0xBD, 0x93, 0x8D, 0xE7, 0x95, 0x1C, 0xAB, 0x14, 0x32, 0xB9, 0xC1, 0x9E, 0x5C, 0xB9, 0xBF,
+    0x58, 0xAE, 0x94, 0xCB, 0xB2, 0xE4, 0x4B, 0xF2, 0x9E, 0x20, 0x27, 0x70, 0x7E, 0xB2, 0xA9, 0x97,
+    0xF4, 0x4B, 0xA4, 0x94, 0x0E, 0x21, 0x63, 0xED, 0x68, 0xC5, 0x96, 0x66, 0x2B, 0xB6, 0xF5, 0xF1,
+    0xE9, 0x70, 0xF6, 0xD0, 0xCC, 0xDC, 0xDC, 0x74, 0xAD, 0xD5, 0x88, 0x62, 0xA3, 0x11, 0x38, 0x29,
+    0x84, 0x15, 0x49, 0x73, 0xBC, 0xAD, 0x4B, 0x9C, 0xEA, 0xD1, 0xEA, 0xD2, 0xA9, 0x93, 0xF8, 0xDA,
+    0xF1, 0xDF, 0x6D, 0xCE, 0xC0, 0x57, 0xAE, 0xFD, 0xF6, 0x18, 0x02, 0x76, 0x8D, 0x4F, 0x93, 0xCF,
+    0xD4, 0x88, 0x8D, 0x71, 0x4A, 0xCA, 0x36, 0x70, 0x9D, 0x82, 0x6E, 0x74, 0x25, 0x19, 0xD2, 0x41,
+    0x9A, 0x69, 0xEC, 0x65, 0xD3, 0xCF, 0x93, 0xC7, 0x78, 0x84, 0xF0, 0x9C, 0x73, 0x72, 0xAA, 0xDA,
+    0x94, 0x47, 0xE6, 0x9A, 0x07, 0x85, 0x40, 0x7A, 0x4A, 0xAA, 0x8C, 0xEF, 0x79, 0xB9, 0x8C, 0xE7,
+    0x67, 0x7D, 0x15, 0x28, 0x21, 0x54, 0xBA, 0x45, 0xE3, 0xAC, 0xC5, 0x46, 0xDA, 0xE8, 0x46, 0x18,
+    0xC7, 0xAD, 0xC8, 0xC4, 0xDA, 0x58, 0x6B, 0x9D, 0xB3, 0x49, 0x57, 0x5E, 0x38, 0x29, 0x85, 0x65,
+    0x7E, 0x4C, 0xEB, 0x2E, 0xBD, 0xDA, 0x04, 0x34, 0x80, 0x2A, 0x30, 0x9B, 0x9E, 0x1B, 0xE9, 0x77,
+    0x6D, 0x22, 0x9C, 0xA7, 0x04, 0x6F, 0x39, 0x7B, 0x2D, 0xBB, 0xC7, 0xA6, 0xF8, 0xE9, 0x62, 0x04,
+    0xD4, 0x1B, 0x21, 0xF5, 0x23, 0x73, 0xE4, 0xFA, 0x8A, 0xDD, 0x96, 0x6F, 0x03, 0x6D, 0x67, 0x56,
+    0x9D, 0xBE, 0xAF, 0x02, 0xB9, 0x14, 0x7C, 0x9B, 0x98, 0xB6, 0x78, 0x80, 0x12, 0x42, 0x28, 0x95,
+    0xFC, 0xC3, 0x98, 0xB4, 0xD6, 0xC9, 0x46, 0x2B, 0x16, 0xF5, 0x56, 0x24, 0xE9, 0xD8, 0xE0, 0xA8,
+    0x6B, 0x0A, 0x91, 0xB4, 0xD4, 0x84, 0x48, 0xB6, 0x23, 0x94, 0xE8, 0x80, 0xEE, 0x06, 0xDF, 0x4D,
+    0x40, 0xDB, 0x1B, 0x23, 0x8E, 0x4E, 0x7B, 0x0D, 0xA0, 0x96, 0xEA, 0x56, 0x4D, 0x3F, 0x8B, 0x01,
+    0xE3, 0x9C, 0x73, 0xC3, 0xBD, 0x25, 0xF7, 0xBA, 0x93, 0x96, 0x52, 0xC8, 0x07, 0x8B, 0x13, 0x80,
+    0x10, 0xE4, 0xFB, 0x4B, 0x48, 0x21, 0x3A, 0x2D, 0xC0, 0x54, 0xC9, 0xB0, 0x2B, 0xB9, 0x84, 0xE9,
+    0x20, 0x6D, 0xCB, 0xB7, 0xE3, 0xAE, 0x1B, 0x7C, 0x3B, 0x06, 0xDB, 0x71, 0xA8, 0x20, 0x9D, 0xF2,
+    0x11, 0xB2, 0xB3, 0x39, 0x37, 0x9F, 0x04, 0xD7, 0x75, 0xB6, 0x5D, 0xE7, 0xE3, 0x59, 0x7F, 0x31,
+    0x12, 0x42, 0xE6, 0xD7, 0x01, 0xED, 0x24, 0x68, 0x00, 0xE7, 0xFB, 0xCA, 0x7D, 0xE0, 0xBA, 0x73,
+    0x78, 0x70, 0xCB, 0x5E, 0x3E, 0xB7, 0x28, 0x01, 0x0F, 0x7E, 0x02, 0xF9, 0xE6, 0x4F, 0x2C, 0x8C,
+    0x7F, 0xDD, 0xA5, 0x8C, 0x4E, 0x6F, 0xEE, 0x2F, 0x22, 0x0B, 0x81, 0x77, 0x13, 0xD0, 0x9D, 0x8C,
+    0xDA, 0x49, 0xF5, 0x78, 0xC7, 0xF1, 0x08, 0x68, 0x8F, 0x6F, 0xBA, 0xA4, 0x1D, 0xEB, 0x71, 0x97,
+    0x44, 0x5D, 0x9F, 0xB5, 0xAF, 0x77, 0x80, 0xDB, 0xB6, 0x65, 0x3F, 0x1B, 0xFE, 0xE8, 0xF3, 0x8C,
+    0x4D, 0xCC, 0xC1, 0xA2, 0x04, 0x1C, 0xAB, 0x48, 0xFB, 0xDC, 0x4D, 0x40, 0xDC, 0x65, 0xD5, 0xC5,
+    0xC0, 0x76, 0xBF, 0x6E, 0x17, 0x53, 0x62, 0x81, 0xBC, 0x12, 0x01, 0xDD, 0x63, 0x2E, 0x46, 0x84,
+    0x59, 0x40, 0x48, 0x77, 0x88, 0x98, 0x45, 0xAE, 0x47, 0x08, 0xE1, 0x0A, 0x03, 0x45, 0x76, 0x8D,
+    0x4D, 0x71, 0xFD, 0x25, 0x1B, 0xE7, 0xB9, 0xDE, 0x31, 0x47, 0x71, 0xBE, 0x17, 0x74, 0x5F, 0xDB,
+    0x0D, 0xA0, 0xFB, 0xB5, 0x5C, 0xE4, 0xBB, 0xEE, 0xCF, 0xBA, 0x85, 0x45, 0xCE, 0x0B, 0x09, 0x5F,
+    0x48, 0xC4, 0x42, 0x42, 0x16, 0x92, 0xB3, 0xF0, 0xBC, 0xF0, 0xF7, 0x9D, 0xA3, 0x76, 0xEF, 0xC7,
+    0x8E, 0x01, 0xF5, 0x6A, 0x49, 0x58, 0x4C, 0xF1, 0x85, 0xC4, 0x74, 0xBF, 0x7E, 0x25, 0xC0, 0xAF,
+    0x74, 0x1C, 0x8F, 0x90, 0xC5, 0xC8, 0xE1, 0x65, 0xCE, 0x8B, 0x82, 0x07, 0xF8, 0xBF, 0xBC, 0x7A,
+    0x38, 0x97, 0x7C, 0xD1, 0xFC, 0xA1, 0x00, 0x00, 0x00, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61,
+    0x74, 0x65, 0x3A, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x00, 0x32, 0x30, 0x32, 0x30, 0x2D, 0x30,
+    0x33, 0x2D, 0x31, 0x39, 0x54, 0x31, 0x30, 0x3A, 0x35, 0x30, 0x3A, 0x35, 0x38, 0x2B, 0x30, 0x30,
+    0x3A, 0x30, 0x30, 0x62, 0x40, 0x28, 0xF1, 0x00, 0x00, 0x00, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64,
+    0x61, 0x74, 0x65, 0x3A, 0x6D, 0x6F, 0x64, 0x69, 0x66, 0x79, 0x00, 0x32, 0x30, 0x31, 0x39, 0x2D,
+    0x30, 0x31, 0x2D, 0x30, 0x38, 0x54, 0x31, 0x35, 0x3A, 0x35, 0x34, 0x3A, 0x32, 0x33, 0x2B, 0x30,
+    0x30, 0x3A, 0x30, 0x30, 0x8A, 0xEF, 0xF9, 0x19, 0x00, 0x00, 0x00, 0x20, 0x74, 0x45, 0x58, 0x74,
+    0x73, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F,
+    0x2F, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x6D, 0x61, 0x67, 0x69, 0x63, 0x6B, 0x2E, 0x6F, 0x72, 0x67,
+    0xBC, 0xCF, 0x1D, 0x9D, 0x00, 0x00, 0x00, 0x18, 0x74, 0x45, 0x58, 0x74, 0x54, 0x68, 0x75, 0x6D,
+    0x62, 0x3A, 0x3A, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x3A, 0x3A, 0x50, 0x61, 0x67,
+    0x65, 0x73, 0x00, 0x31, 0xA7, 0xFF, 0xBB, 0x2F, 0x00, 0x00, 0x00, 0x18, 0x74, 0x45, 0x58, 0x74,
+    0x54, 0x68, 0x75, 0x6D, 0x62, 0x3A, 0x3A, 0x49, 0x6D, 0x61, 0x67, 0x65, 0x3A, 0x3A, 0x48, 0x65,
+    0x69, 0x67, 0x68, 0x74, 0x00, 0x31, 0x32, 0x38, 0x43, 0x7C, 0x41, 0x80, 0x00, 0x00, 0x00, 0x17,
+    0x74, 0x45, 0x58, 0x74, 0x54, 0x68, 0x75, 0x6D, 0x62, 0x3A, 0x3A, 0x49, 0x6D, 0x61, 0x67, 0x65,
+    0x3A, 0x3A, 0x57, 0x69, 0x64, 0x74, 0x68, 0x00, 0x31, 0x32, 0x38, 0xD0, 0x8D, 0x11, 0xDD, 0x00,
+    0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x54, 0x68, 0x75, 0x6D, 0x62, 0x3A, 0x3A, 0x4D, 0x69,
+    0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x00, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x2F, 0x70, 0x6E, 0x67,
+    0x3F, 0xB2, 0x56, 0x4E, 0x00, 0x00, 0x00, 0x17, 0x74, 0x45, 0x58, 0x74, 0x54, 0x68, 0x75, 0x6D,
+    0x62, 0x3A, 0x3A, 0x4D, 0x54, 0x69, 0x6D, 0x65, 0x00, 0x31, 0x35, 0x34, 0x36, 0x39, 0x36, 0x32,
+    0x38, 0x36, 0x33, 0x1F, 0x1E, 0xB3, 0x01, 0x00, 0x00, 0x00, 0x12, 0x74, 0x45, 0x58, 0x74, 0x54,
+    0x68, 0x75, 0x6D, 0x62, 0x3A, 0x3A, 0x53, 0x69, 0x7A, 0x65, 0x00, 0x31, 0x39, 0x32, 0x37, 0x34,
+    0x42, 0x0A, 0x19, 0xAB, 0x42, 0x00, 0x00, 0x00, 0x56, 0x74, 0x45, 0x58, 0x74, 0x54, 0x68, 0x75,
+    0x6D, 0x62, 0x3A, 0x3A, 0x55, 0x52, 0x49, 0x00, 0x66, 0x69, 0x6C, 0x65, 0x3A, 0x2F, 0x2F, 0x2F,
+    0x64, 0x61, 0x74, 0x61, 0x2F, 0x77, 0x77, 0x77, 0x72, 0x6F, 0x6F, 0x74, 0x2F, 0x77, 0x77, 0x77,
+    0x2E, 0x65, 0x61, 0x73, 0x79, 0x69, 0x63, 0x6F, 0x6E, 0x2E, 0x6E, 0x65, 0x74, 0x2F, 0x63, 0x64,
+    0x6E, 0x2D, 0x69, 0x6D, 0x67, 0x2E, 0x65, 0x61, 0x73, 0x79, 0x69, 0x63, 0x6F, 0x6E, 0x2E, 0x63,
+    0x6E, 0x2F, 0x66, 0x69, 0x6C, 0x65, 0x73, 0x2F, 0x32, 0x2F, 0x32, 0x39, 0x31, 0x36, 0x35, 0x2E,
+    0x70, 0x6E, 0x67, 0xBF, 0x98, 0x5F, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE,
+    0x42, 0x60, 0x82 
+};
+
+void *get_window_icon_raw_data(int *len)
+{
+    *len = (int)sizeof(window_icon_hexData);
+    return window_icon_hexData;
+}
+
index 77fcebffd12d8073bddb7da9c2409c6de965b750..31131578f74c6b3d581dddddb62fe8a54de9b3b3 100644 (file)
@@ -31,6 +31,7 @@
 #include <sys/types.h>
 #include <sys/mount.h>
 #include <linux/fs.h>
+#include <linux/limits.h>
 #include <dirent.h>
 #include <pthread.h>
 #include <ventoy_define.h>
@@ -160,9 +161,10 @@ static int ventoy_http_save_cfg(void)
 {
     FILE *fp;
 
-    fp = fopen("./Ventoy2Disk.ini", "w");
+    fp = fopen(g_ini_file, "w");
     if (!fp)
     {
+        vlog("Failed to open %s code:%d\n", g_ini_file, errno);
         return 0;
     }
 
@@ -180,7 +182,7 @@ static int ventoy_http_load_cfg(void)
     char line[256];
     FILE *fp;
 
-    fp = fopen("./Ventoy2Disk.ini", "r");
+    fp = fopen(g_ini_file, "r");
     if (!fp)
     {
         return 0;
@@ -1499,7 +1501,7 @@ int ventoy_http_start(const char *ip, const char *port)
     {
            "listening_ports",    "24680",
         "document_root",      "WebUI",
-        "error_log_file",     VTOY_LOG_FILE,
+        "error_log_file",     g_log_file,
            "request_timeout_ms", "10000",
             NULL
     };
index 5560991906d281d6db24cf97a430d93bb1d5b5b9..1957a430264677736d6c86134062419e342411ca 100644 (file)
@@ -8,10 +8,15 @@
 #include <errno.h>
 #include <time.h>
 #include <unistd.h>\r
+#include <sys/types.h>\r
+#include <linux/limits.h>\r
 #include <ventoy_define.h>
 #include <ventoy_util.h>\r
 #include "ventoy_gtk.h"\r
 \r
+char g_log_file[PATH_MAX];\r
+char g_ini_file[PATH_MAX];\r
+\r
 static int set_image_from_pixbuf(GtkBuilder *pBuilder, const char *id, const void *pData, int len)\r
 {\r
     GtkImage *pImage = NULL;\r
@@ -53,6 +58,7 @@ int early_msgbox(GtkMessageType type, GtkButtonsType buttons, const char *str)
 \r
 int main(int argc, char *argv[])\r
 {\r
+    int i;\r
     int len;\r
     const void *pData = NULL;\r
     GtkWidget *pWidget = NULL;\r
@@ -74,6 +80,20 @@ int main(int argc, char *argv[])
         return 1;\r
     }\r
 \r
+    snprintf(g_log_file, sizeof(g_log_file), "log.txt");\r
+    snprintf(g_ini_file, sizeof(g_ini_file), "./Ventoy2Disk.ini");\r
+    for (i = 0; i < argc; i++)
+    {
+        if (argv[i] && argv[i + 1] && strcmp(argv[i], "-l") == 0)
+        {
+            snprintf(g_log_file, sizeof(g_log_file), "%s", argv[i + 1]);\r
+        }
+        else if (argv[i] && argv[i + 1] &&  strcmp(argv[i], "-i") == 0)
+        {
+            snprintf(g_ini_file, sizeof(g_ini_file), "%s", argv[i + 1]);\r
+        }
+    }\r
+\r
     ventoy_log_init();\r
 \r
     vlog("================================================\n");\r
@@ -113,6 +133,7 @@ int main(int argc, char *argv[])
 \r
     on_init_window(pBuilder);\r
     g_signal_connect(G_OBJECT(pWidget), "delete_event", G_CALLBACK(on_exit_window), NULL);\r
+    g_signal_connect(G_OBJECT(pWidget), "destroy", G_CALLBACK(gtk_main_quit), NULL);\r
 \r
     gtk_main();\r
 \r
index e12208ef6c45d392517b2edaef55acd7050130f5..2b782cc5337d542e2a70da8850a87dfafa3daaa5 100644 (file)
@@ -7,12 +7,17 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/wait.h>
+#include <sys/types.h>
+#include <linux/limits.h>
 #include <ventoy_define.h>
 #include <ventoy_util.h>
 #include <ventoy_json.h>
 #include <ventoy_disk.h>
 #include <ventoy_http.h>
 
+char g_log_file[PATH_MAX];
+char g_ini_file[PATH_MAX];
+
 int ventoy_log_init(void);
 void ventoy_log_exit(void);
 
@@ -30,6 +35,7 @@ void ventoy_signal_stop(int sig)
 
 int main(int argc, char **argv)
 {
+    int i;
     int rc;
     const char *ip = "127.0.0.1";
     const char *port = "24680";
@@ -50,6 +56,20 @@ int main(int argc, char **argv)
         port = argv[2];
     }
 
+    snprintf(g_log_file, sizeof(g_log_file), "log.txt");
+    snprintf(g_ini_file, sizeof(g_ini_file), "./Ventoy2Disk.ini");
+    for (i = 0; i < argc; i++)
+    {
+        if (argv[i] && argv[i + 1] && strcmp(argv[i], "-l") == 0)
+        {
+            snprintf(g_log_file, sizeof(g_log_file), "%s", argv[i + 1]);
+        }
+        else if (argv[i] && argv[i + 1] &&  strcmp(argv[i], "-i") == 0)
+        {
+            snprintf(g_ini_file, sizeof(g_ini_file), "%s", argv[i + 1]);
+        }
+    }
+
     ventoy_log_init();
 
     vlog("===============================================\n");
index d0c92037562d4dce7e35610b9f237c225fe86c38..795f3fd29f0f80a65a2f139ff646cc5849b07d7e 100644 (file)
@@ -9,9 +9,11 @@
 #include <dirent.h> 
 #include <sys/utsname.h>
 #include <sys/types.h>
+#include <linux/limits.h>
 #include <sys/stat.h>
 #include <sys/fcntl.h>
 #include <sys/mman.h>
+#include "ventoy_json.h"
 
 #define LIB_FLAG_GTK2   (1 << 0)
 #define LIB_FLAG_GTK3   (1 << 1)
@@ -31,6 +33,7 @@
 #define LD_CACHE_FILE   "/etc/ld.so.cache"
 #define INT2STR_YN(a)   ((a) == 0 ? "NO" : "YES")
 
+static char g_log_file[PATH_MAX];
 static char *g_log_buf = NULL;
 extern char ** environ;
 
@@ -78,7 +81,9 @@ struct cache_file_new
 (((addr) + __alignof__ (struct cache_file_new) -1)     \
  & (~(__alignof__ (struct cache_file_new) - 1)))
 
-static void vlog(const char *Fmt, ...)
+#define vlog(fmt, args...) ventoy_syslog(0, fmt, ##args)
+
+void ventoy_syslog(int level, const char *Fmt, ...)
 {
     int buflen;
     char *buf = NULL;
@@ -87,6 +92,8 @@ static void vlog(const char *Fmt, ...)
     time_t stamp;
     struct tm ttm;
     FILE *fp;
+
+    (void)level;
     
     time(&stamp);
     localtime_r(&stamp, &ttm);
@@ -106,7 +113,7 @@ static void vlog(const char *Fmt, ...)
     vsnprintf(buf, buflen, Fmt, arg);
     va_end(arg);
 
-    fp = fopen("log.txt", "a+");
+    fp = fopen(g_log_file, "a+");
     if (fp)
     {
         fprintf(fp, "[%04u/%02u/%02u %02u:%02u:%02u] %s", 
@@ -116,10 +123,12 @@ static void vlog(const char *Fmt, ...)
         fclose(fp);
     }
 
+    #if 0
     printf("[%04u/%02u/%02u %02u:%02u:%02u] %s", 
            ttm.tm_year + 1900, ttm.tm_mon, ttm.tm_mday,
            ttm.tm_hour, ttm.tm_min, ttm.tm_sec,
            buf);
+    #endif
 }
 
 static int is_gtk_env(void)
@@ -223,14 +232,14 @@ static int detect_qt_version(int libflag)
         return 5;
     }
 
-    if (qt4 > 0)
+    if (qt6 > 0)
     {
-        return 4;
+        return 6;
     }
 
-    if (qt6 > 0)
+    if (qt4 > 0)
     {
-        return 6;
+        return 4;
     }
 
     return 0;
@@ -622,7 +631,7 @@ static int ld_cache_lib_check(const char *lib, int *flag)
     
     if (((*flag) & LIB_FLAG_QT4) == 0)
     {
-        if (strncmp(lib, "libqt4", 6) == 0)
+        if (strncmp(lib, "libQt4", 6) == 0)
         {
             vlog("LIB:<%s>\n", lib);
             *flag |= LIB_FLAG_QT4;
@@ -632,7 +641,7 @@ static int ld_cache_lib_check(const char *lib, int *flag)
     
     if (((*flag) & LIB_FLAG_QT5) == 0)
     {
-        if (strncmp(lib, "libqt5", 6) == 0)
+        if (strncmp(lib, "libQt5", 6) == 0)
         {
             vlog("LIB:<%s>\n", lib);
             *flag |= LIB_FLAG_QT5;
@@ -642,7 +651,7 @@ static int ld_cache_lib_check(const char *lib, int *flag)
     
     if (((*flag) & LIB_FLAG_QT6) == 0)
     {
-        if (strncmp(lib, "libqt6", 6) == 0)
+        if (strncmp(lib, "libQt6", 6) == 0)
         {
             vlog("LIB:<%s>\n", lib);
             *flag |= LIB_FLAG_QT6;
@@ -783,6 +792,176 @@ static int parse_ld_cache(int *flag)
     return 0;
 }
 
+static int gui_type_check(VTOY_JSON *pstNode)
+{
+    FILE *fp = NULL;
+    const char *env = NULL;
+    const char *arch = NULL;
+    const char *srctype = NULL;
+    const char *srcname = NULL;
+    const char *condition = NULL;
+    const char *expression = NULL;
+    char line[1024];
+    
+    arch = vtoy_json_get_string_ex(pstNode, "arch");
+    srctype = vtoy_json_get_string_ex(pstNode, "type");
+    srcname = vtoy_json_get_string_ex(pstNode, "name");
+    condition = vtoy_json_get_string_ex(pstNode, "condition");
+    expression = vtoy_json_get_string_ex(pstNode, "expression");
+    
+    if (srctype == NULL || srcname == NULL || condition == NULL)
+    {
+        return 0;
+    }
+
+    if (arch && NULL == strstr(arch, VTOY_GUI_ARCH))
+    {
+        return 0;
+    }
+
+    vlog("check <%s> <%s> <%s>\n", srctype, srcname, condition);
+
+    if (strcmp(srctype, "file") == 0)
+    {
+        if (access(srcname, F_OK) == -1)
+        {
+            return 0;
+        }
+    
+        if (strcmp(condition, "exist") == 0)
+        {
+            vlog("File %s exist\n", srcname);
+            return 1;
+        }
+        else if (strcmp(condition, "contains") == 0)
+        {
+            fp = fopen(srcname, "r");
+            if (fp == NULL)
+            {
+                return 0;
+            }
+
+            while (fgets(line, sizeof(line), fp))
+            {
+                if (strstr(line, expression))
+                {
+                    vlog("File %s contains %s\n", srcname, expression);
+                    fclose(fp);
+                    return 1;
+                }
+            }
+
+            fclose(fp);
+            return 0;
+        }
+    }
+    else if (strcmp(srctype, "env") == 0)
+    {
+        env = getenv(srcname);
+        if (env == NULL)
+        {
+            return 0;
+        }
+
+        if (strcmp(condition, "exist") == 0)
+        {
+            vlog("env %s exist\n", srcname);
+            return 1;
+        }
+        else if (strcmp(condition, "equal") == 0)
+        {
+            if (strcmp(expression, env) == 0)
+            {
+                vlog("env %s is %s\n", srcname, env);
+                return 1;
+            }
+            return 0;
+        }
+        else if (strcmp(condition, "contains") == 0)
+        {
+            if (strstr(env, expression))
+            {
+                vlog("env %s is %s contains %s\n", srcname, env, expression);
+                return 1;
+            }
+            return 0;
+        }
+    }
+    
+    return 0;
+}
+
+static int read_file_to_buf(const char *FileName, int ExtLen, void **Bufer, int *BufLen)
+{
+    int FileSize;
+    FILE *fp = NULL;
+    void *Data = NULL;
+
+    fp = fopen(FileName, "rb");
+    if (fp == NULL)
+    {
+        vlog("Failed to open file %s", FileName);
+        return 1;
+    }
+
+    fseek(fp, 0, SEEK_END);
+    FileSize = (int)ftell(fp);
+
+    Data = malloc(FileSize + ExtLen);
+    if (!Data)
+    {
+        fclose(fp);
+        return 1;
+    }
+
+    fseek(fp, 0, SEEK_SET);
+    fread(Data, 1, FileSize, fp);
+
+    fclose(fp);
+
+    *Bufer = Data;
+    *BufLen = FileSize;
+
+    return 0;
+}
+
+static int distro_check_gui_env(char *type, int len, int *pver)
+{
+    int size;
+    int length;
+    char *pBuf = NULL;
+    VTOY_JSON *pstNode = NULL;
+    VTOY_JSON *pstJson = NULL;
+
+    vlog("distro_check_gui_env ...\n");
+
+    if (access("./tool/distro_gui_type.json", F_OK) == -1)
+    {
+        vlog("distro_gui_type.json file not exist\n");
+        return 0;
+    }
+
+    read_file_to_buf("./tool/distro_gui_type.json", 1, (void **)&pBuf, &size);
+    pBuf[size] = 0;
+    
+    pstJson = vtoy_json_create();
+    vtoy_json_parse(pstJson, pBuf);
+
+    for (pstNode = pstJson->pstChild; pstNode; pstNode = pstNode->pstNext)
+    {
+        if (gui_type_check(pstNode->pstChild))
+        {
+            length = (int)snprintf(type, len, "%s", vtoy_json_get_string_ex(pstNode->pstChild, "gui"));
+            *pver = type[length - 1] - '0';
+            type[length - 1] = 0;
+            break;
+        }
+    }
+
+    vtoy_json_destroy(pstJson);
+    return pstNode ? 1 : 0;
+}
+
 static int detect_gui_exe_path(const char *curpath, char *pathbuf, int buflen)
 {
     int ret;
@@ -860,7 +1039,12 @@ static int detect_gui_exe_path(const char *curpath, char *pathbuf, int buflen)
         }
         else if ((LIB_FLAG_GTK & libflag) > 0 && (LIB_FLAG_QT & libflag) > 0)
         {
-            if (is_gtk_env())
+            if (distro_check_gui_env(line, sizeof(line), &ver))
+            {
+                guitype = line;
+                vlog("distro_check_gui <%s%d> ...\n", line, ver);
+            }
+            else if (is_gtk_env())
             {
                 guitype = "gtk";
                 ver = detect_gtk_version(libflag);
@@ -872,8 +1056,9 @@ static int detect_gui_exe_path(const char *curpath, char *pathbuf, int buflen)
             }
             else
             {
-                vlog("Current X environment is NOT supported.\n");
-                return 1;
+                vlog("Can not distinguish GTK and QT, default use GTK.\n");
+                guitype = "gtk";
+                ver = detect_gtk_version(libflag);
             }
         }
         else
@@ -989,8 +1174,19 @@ int real_main(int argc, char **argv)
 
 int main(int argc, char **argv)
 {
+    int i;
     int ret;
 
+    snprintf(g_log_file, sizeof(g_log_file), "log.txt");
+    for (i = 0; i < argc; i++)
+    {
+        if (argv[i] && argv[i + 1] && strcmp(argv[i], "-l") == 0)
+        {
+            snprintf(g_log_file, sizeof(g_log_file), "%s", argv[i + 1]);
+            break;
+        }
+    }
+
     g_log_buf = malloc(MAX_LOG_BUF);
     if (!g_log_buf)
     {
index 86fd6131eecfd0a07ce3bf82a39d079e34d4e6a6..6e7aa5186f14c96e906589f0a07dea3d3d090071 100644 (file)
@@ -81,15 +81,19 @@ build_func() {
     rm -f ../INSTALL/tool/$toolDir/Ventoy2Disk.${gtkver}_$libsuffix
     cp -a Ventoy2Disk.${gtkver}_$libsuffix ../INSTALL/tool/$toolDir/Ventoy2Disk.${gtkver}
     
-   $1 -D_FILE_OFFSET_BITS=64 Ventoy2Disk/ventoy_gui.c -DVTOY_GUI_ARCH="\"$toolDir\"" -o VentoyGUI.$toolDir
-   cp -a VentoyGUI.$toolDir ../INSTALL/
+    $1 -O2 -D_FILE_OFFSET_BITS=64 Ventoy2Disk/ventoy_gui.c Ventoy2Disk/Core/ventoy_json.c -I Ventoy2Disk/Core  -DVTOY_GUI_ARCH="\"$toolDir\"" -o VentoyGUI.$toolDir
+    cp -a VentoyGUI.$toolDir ../INSTALL/
 }
 
+
 build_func "gcc" '64' 'x86_64' 'gtk2'
 build_func "gcc" '64' 'x86_64' 'gtk3'
+
 build_func "gcc -m32" '32' 'i386' 'gtk2'
 build_func "gcc -m32" '32' 'i386' 'gtk3'
 
 build_func "aarch64-linux-gnu-gcc" 'aa64' 'aarch64' 'gtk3'
+
+export PATH=/opt/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/:$PATH
 build_func "mips-linux-gnu-gcc -mips64r2 -mabi=64" 'm64e' 'mips64el' 'gtk3'
 
diff --git a/LinuxGUI/build_qt.sh b/LinuxGUI/build_qt.sh
new file mode 100644 (file)
index 0000000..dd5b44c
--- /dev/null
@@ -0,0 +1,168 @@
+#!/bin/bash
+
+force_copy() {
+    [ -e "$2" ] && rm -f "$2"
+    cp -a "$1" "$2"
+}
+
+compile_file() {
+    name=$(basename $2)
+    obj=${name%.*}
+    
+    echo "$1 ${obj}.o ..."
+    $1 -O2 -Wall -std=gnu99 -Wno-unused-function -Wno-format-truncation -Wno-address-of-packed-member -DSTATIC=static -DINIT= -D_FILE_OFFSET_BITS=64 \
+        -I./Ventoy2Disk \
+        -I./Ventoy2Disk/Core \
+        -I./Ventoy2Disk/Web \
+        -I./Ventoy2Disk/QT \
+        -I./Ventoy2Disk/Include \
+        -I./Ventoy2Disk/Lib/libhttp/include \
+        -I./Ventoy2Disk/Lib/fat_io_lib/include \
+        -I./Ventoy2Disk/Lib/xz-embedded/linux/include \
+        -I./Ventoy2Disk/Lib/xz-embedded/linux/include/linux \
+        -I./Ventoy2Disk/Lib/xz-embedded/userspace \
+        -I ./Ventoy2Disk/Lib/exfat/src/libexfat \
+        -I ./Ventoy2Disk/Lib/exfat/src/mkfs \
+        -I ./Ventoy2Disk/Lib/fat_io_lib \
+        -c $2 -o ${obj}.o
+}
+
+compile_dir() {
+    dir=$1  
+    for i in $(ls $dir/*.c); do
+        compile_file "$2" "$i"
+    done
+}
+
+compile_lib() {
+    compile_dir ./Ventoy2Disk/Core "$1"
+    compile_dir ./Ventoy2Disk/Web  "$1"
+    compile_dir ./Ventoy2Disk/QT   "$1"
+    compile_dir ./Ventoy2Disk/Lib/exfat/src/libexfat  "$1"
+    compile_dir ./Ventoy2Disk/Lib/exfat/src/mkfs  "$1"
+    compile_dir ./Ventoy2Disk/Lib/fat_io_lib  "$1"
+    compile_file "$1" Ventoy2Disk/Lib/xz-embedded/linux/lib/decompress_unxz.c
+
+    rm -f libVentoyQT_$3.a
+    $2 -rcs libVentoyQT_$3.a *.o
+    rm -f *.o
+}
+
+build_qt() {
+    echo "$1 main.o ..."
+    $1 -c $2 $3 -o main.o ./Ventoy2Disk/QT/main.cpp
+    
+    echo "$1 partcfgdialog.o ..."
+    $1 -c $2 $3 -o partcfgdialog.o ./Ventoy2Disk/QT/partcfgdialog.cpp
+    
+    echo "$1 ventoy2diskwindow.o ..."
+    $1 -c $2 $3 -o ventoy2diskwindow.o ./Ventoy2Disk/QT/ventoy2diskwindow.cpp
+    
+    echo "$1 moc_partcfgdialog.o ..."
+    $1 -c $2 $3 -o moc_partcfgdialog.o ./Ventoy2Disk/QT/build/moc_partcfgdialog.cpp
+    
+    echo "$1 moc_ventoy2diskwindow.o ..."
+    $1 -c $2 $3 -o moc_ventoy2diskwindow.o ./Ventoy2Disk/QT/build/moc_ventoy2diskwindow.cpp
+    
+    echo "$1 Ventoy2Disk.qt5_${6} ..."
+    $1 $4 -o Ventoy2Disk.qt5_${6} *.o $5
+    rm -f *.o    
+}
+
+build_qt_app() {
+    
+    DEFINES="-DQT_CHECK_EUID -DQT_DEPRECATED_WARNINGS -DSTATIC=static -DINIT= -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB"
+    CXXFLAGS="-pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC $DEFINES -Wno-deprecated-declarations -Wno-deprecated-copy"
+    INCPATH=" -I./Ventoy2Disk -I. -I./Ventoy2Disk/Core -I./Ventoy2Disk/Web -I./Ventoy2Disk/QT -I./Ventoy2Disk/QT/build -I./Ventoy2Disk/Include -I./Ventoy2Disk/Lib/libhttp/include -I./Ventoy2Disk/Lib/fat_io_lib/include -I./Ventoy2Disk/Lib/xz-embedded/linux/include -I./Ventoy2Disk/Lib/xz-embedded/linux/include/linux -I./Ventoy2Disk/Lib/xz-embedded/userspace -I./Ventoy2Disk/Lib/exfat/src/libexfat -I./Ventoy2Disk/Lib/fat_io_lib -I$QT_INC_PATH -I$QT_INC_PATH/QtWidgets -I$QT_INC_PATH/QtGui -I$QT_INC_PATH/QtCore -I. -I."
+
+    SUBLIBS="./libVentoyQT_${2}.a"
+    LIBS="$SUBLIBS $QT_LIB_PATH/libQt5Widgets.so $QT_LIB_PATH/libQt5Gui.so $QT_LIB_PATH/libQt5Core.so -lpthread"
+    
+    build_qt "$1" "$CXXFLAGS" "$INCPATH" "$LFLAGS" "$LIBS" "$3"
+}
+
+# build QT5 for i386
+build_qt_i386() {
+    QT_INC_PATH="./EXLIB/i386/usr/include/i386-linux-gnu/qt5"
+    QT_LIB_PATH="./EXLIB/i386/usr/lib/i386-linux-gnu"
+    DEFINES="-DQT_CHECK_EUID -DQT_DEPRECATED_WARNINGS -DSTATIC=static -DINIT= -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB"
+    CXXFLAGS="-pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC $DEFINES -Wno-deprecated-declarations"
+    INCPATH=" -I./Ventoy2Disk -I. -I./Ventoy2Disk/Core -I./Ventoy2Disk/Web -I./Ventoy2Disk/QT -I./Ventoy2Disk/QT/build -I./Ventoy2Disk/Include -I./Ventoy2Disk/Lib/libhttp/include -I./Ventoy2Disk/Lib/fat_io_lib/include -I./Ventoy2Disk/Lib/xz-embedded/linux/include -I./Ventoy2Disk/Lib/xz-embedded/linux/include/linux -I./Ventoy2Disk/Lib/xz-embedded/userspace -I./Ventoy2Disk/Lib/exfat/src/libexfat -I./Ventoy2Disk/Lib/fat_io_lib -I$QT_INC_PATH -I$QT_INC_PATH/QtWidgets -I$QT_INC_PATH/QtGui -I$QT_INC_PATH/QtCore -I."
+    LFLAGS="-Wl,-O1 -Wl,-rpath-link,$QT_LIB_PATH  -L$QT_LIB_PATH -Wl,-rpath-link,./EXLIB/i386/lib/i386-linux-gnu -L./EXLIB/i386/lib/i386-linux-gnu"
+    SUBLIBS="./libVentoyQT_i386.a"
+    LIBS="$SUBLIBS $QT_LIB_PATH/libQt5Widgets.so $QT_LIB_PATH/libQt5Gui.so $QT_LIB_PATH/libQt5Core.so -lpthread"
+
+    compile_lib "gcc -m32" "ar" "i386"
+    build_qt "g++ -m32" "$CXXFLAGS" "$INCPATH" "$LFLAGS" "$LIBS" "32"
+}
+
+
+#build QT5 for x86_64
+build_qt_x86_64() {
+    compile_lib "gcc" "ar" "x86_64"
+    QT_INC_PATH="/opt/Qt5.9.0/5.9/gcc_64/include"
+    QT_LIB_PATH="/opt/Qt5.9.0/5.9/gcc_64/lib"
+    LFLAGS="-Wl,-O1 -Wl,-rpath-link,$QT_LIB_PATH -L$QT_LIB_PATH"
+    build_qt_app "g++"   "x86_64" "64"
+    
+    force_copy Ventoy2Disk.qt5_64 ../INSTALL/tool/x86_64/Ventoy2Disk.qt5
+    rm -f ./libVentoyQT_x86_64.a
+}
+
+
+# build QT5 for arm64
+build_qt_aarch64() {
+    compile_lib "aarch64-linux-gnu-gcc" "aarch64-linux-gnu-ar" "aarch64"
+    QT_INC_PATH="./EXLIB/aarch64/usr/include/qt5"
+    QT_LIB_PATH="./EXLIB/aarch64/usr/lib64"
+    LFLAGS="-Wl,-O1 -Wl,-rpath-link,$QT_LIB_PATH -L$QT_LIB_PATH -Wl,-rpath-link,./EXLIB/aarch64/lib64 -L./EXLIB/aarch64/lib64"
+    build_qt_app "aarch64-linux-gnu-g++" "aarch64" "aa64"
+    
+    force_copy Ventoy2Disk.qt5_aa64 ../INSTALL/tool/aarch64/Ventoy2Disk.qt5
+    rm -f ./libVentoyQT_aarch64.a
+}
+
+# build QT5 for mips64
+build_qt_mips64el() {
+    QT_INC_PATH="./EXLIB/mips64el/usr/include/mips64el-linux-gnuabi64/qt5"
+    QT_LIB_PATH="./EXLIB/mips64el/usr/lib/mips64el-linux-gnuabi64"
+    DEFINES="-DQT_CHECK_EUID -DQT_DEPRECATED_WARNINGS -DSTATIC=static -DINIT= -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB"
+    CXXFLAGS="-pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC $DEFINES -Wno-deprecated-declarations"
+    INCPATH=" -I./Ventoy2Disk -I. -I./Ventoy2Disk/Core -I./Ventoy2Disk/Web -I./Ventoy2Disk/QT -I./Ventoy2Disk/QT/build -I./Ventoy2Disk/Include -I./Ventoy2Disk/Lib/libhttp/include -I./Ventoy2Disk/Lib/fat_io_lib/include -I./Ventoy2Disk/Lib/xz-embedded/linux/include -I./Ventoy2Disk/Lib/xz-embedded/linux/include/linux -I./Ventoy2Disk/Lib/xz-embedded/userspace -I./Ventoy2Disk/Lib/exfat/src/libexfat -I./Ventoy2Disk/Lib/fat_io_lib -I$QT_INC_PATH -I$QT_INC_PATH/QtWidgets -I$QT_INC_PATH/QtGui -I$QT_INC_PATH/QtCore -I."
+    LFLAGS="-Wl,-O1 -Wl,-rpath-link,$QT_LIB_PATH  -L$QT_LIB_PATH -Wl,-rpath-link,./EXLIB/mips64el/lib/mips64el-linux-gnuabi64 -L./EXLIB/mips64el/lib/mips64el-linux-gnuabi64"
+    SUBLIBS="./libVentoyQT_mips64el.a"
+    LIBS="$SUBLIBS $QT_LIB_PATH/libQt5Widgets.so $QT_LIB_PATH/libQt5Gui.so $QT_LIB_PATH/libQt5Core.so -lpthread"
+
+    export PATH=/opt/mips-loongson-gcc8-linux-gnu-2021-02-08/bin/:$PATH
+    compile_lib "mips-linux-gnu-gcc -mips64r2 -mabi=64" "mips-linux-gnu-ar" "mips64el"
+    build_qt "mips-linux-gnu-g++ -mips64r2 -mabi=64" "$CXXFLAGS" "$INCPATH" "$LFLAGS" "$LIBS" "m64e"
+
+    force_copy Ventoy2Disk.qt5_m64e ../INSTALL/tool/mips64el/Ventoy2Disk.qt5
+    rm -f ./libVentoyQT_mips64el.a
+}
+
+
+####################################################################
+####################################################################
+####################################################################
+####################################################################
+
+sed "s#../Ventoy2Disk#..#g" -i ./Ventoy2Disk/QT/build/moc_partcfgdialog.cpp
+sed "s#../Ventoy2Disk#..#g" -i ./Ventoy2Disk/QT/build/moc_ventoy2diskwindow.cpp
+
+#build qt5 i386 in centos 8 environment
+if [ "$1" = "VENTOY_I386_QT_BUILD" ]; then
+    echo "build i386 qt ..."
+    build_qt_i386
+    exit 0
+fi
+
+
+
+chroot /opt/CentOS8 sh /buildqt.sh
+force_copy ./Ventoy2Disk.qt5_32 ../INSTALL/tool/i386/Ventoy2Disk.qt5
+rm -f ./libVentoyQT_i386.a
+
+build_qt_x86_64
+build_qt_aarch64
+build_qt_mips64el
index f4cdd4090c1c422095bd1b526f785669bf01f465..68586a4a47bddadbbc5f5d02ea9b6895a84089f9 100644 (file)
@@ -588,6 +588,7 @@ static int VentoyAttachVirtualDisk(HANDLE Handle, const char *IsoPath)
 \r
 int VentoyMountISOByAPI(const char *IsoPath)\r
 {\r
+    int i;\r
        HANDLE Handle;\r
        DWORD Status;\r
        WCHAR wFilePath[512] = { 0 };\r
@@ -598,10 +599,12 @@ int VentoyMountISOByAPI(const char *IsoPath)
 \r
     if (IsUTF8Encode(IsoPath))\r
     {\r
+        Log("This is UTF8 encoding");\r
         MultiByteToWideChar(CP_UTF8, 0, IsoPath, (int)strlen(IsoPath), wFilePath, (int)(sizeof(wFilePath) / sizeof(WCHAR)));\r
     }\r
     else\r
     {\r
+        Log("This is ANSI encoding");\r
         MultiByteToWideChar(CP_ACP, 0, IsoPath, (int)strlen(IsoPath), wFilePath, (int)(sizeof(wFilePath) / sizeof(WCHAR)));\r
     }\r
 \r
@@ -610,19 +613,36 @@ int VentoyMountISOByAPI(const char *IsoPath)
        \r
        OpenParameters.Version = OPEN_VIRTUAL_DISK_VERSION_1;\r
 \r
-       Status = OpenVirtualDisk(&StorageType, wFilePath, VIRTUAL_DISK_ACCESS_READ, 0, &OpenParameters, &Handle);\r
-       if (Status != ERROR_SUCCESS)\r
-       {\r
-               if (ERROR_VIRTDISK_PROVIDER_NOT_FOUND == Status)\r
-               {\r
-                       Log("VirtualDisk for ISO file is not supported in current system");\r
-               }\r
-               else\r
-               {\r
-                       Log("Failed to open virtual disk ErrorCode:%u", Status);\r
-               }\r
-               return 1;\r
-       }\r
+    for (i = 0; i < 10; i++)\r
+    {\r
+        Status = OpenVirtualDisk(&StorageType, wFilePath, VIRTUAL_DISK_ACCESS_READ, 0, &OpenParameters, &Handle);\r
+        if (ERROR_FILE_NOT_FOUND == Status || ERROR_PATH_NOT_FOUND == Status)\r
+        {\r
+            Log("OpenVirtualDisk ErrorCode:%u, now wait and retry...", Status);\r
+            Sleep(1000);\r
+        }\r
+        else\r
+        {\r
+            if (ERROR_SUCCESS == Status)\r
+            {\r
+                Log("OpenVirtualDisk success");\r
+            }\r
+            else if (ERROR_VIRTDISK_PROVIDER_NOT_FOUND == Status)\r
+            {\r
+                Log("VirtualDisk for ISO file is not supported in current system");\r
+            }\r
+            else\r
+            {\r
+                Log("Failed to open virtual disk ErrorCode:%u", Status);\r
+            }\r
+            break;\r
+        }\r
+    }\r
+\r
+    if (Status != ERROR_SUCCESS)\r
+    {\r
+        return 1;\r
+    }\r
 \r
        Log("OpenVirtualDisk success");\r
 \r
@@ -1210,48 +1230,68 @@ static int ProcessUnattendedInstallation(const char *script)
 \r
 static int VentoyHook(ventoy_os_param *param)\r
 {\r
+    int i;\r
     int rc;\r
-       CHAR Letter = 'A';\r
+    BOOL find = FALSE;\r
+    CHAR Letter;\r
+    DWORD Drives;\r
        DISK_EXTENT DiskExtent;\r
-       DWORD Drives = GetLogicalDrives();\r
        UINT8 UUID[16];\r
        CHAR IsoPath[MAX_PATH];\r
 \r
-       Log("Logical Drives=0x%x Path:<%s>", Drives, param->vtoy_img_path);\r
+       Log("VentoyHook Path:<%s>", param->vtoy_img_path);\r
 \r
     if (IsUTF8Encode(param->vtoy_img_path))\r
     {\r
         Log("This file is UTF8 encoding\n");\r
     }\r
 \r
-       while (Drives)\r
-       {\r
-        if (Drives & 0x01)\r
+    for (i = 0; i < 5; i++)\r
+    {\r
+        Letter = 'A';\r
+        Drives = GetLogicalDrives();\r
+        Log("Logic Drives: 0x%x", Drives);\r
+\r
+        while (Drives)\r
         {\r
-            sprintf_s(IsoPath, sizeof(IsoPath), "%C:\\%s", Letter, param->vtoy_img_path);\r
-            if (IsFileExist("%s", IsoPath))\r
+            if (Drives & 0x01)\r
             {\r
-                Log("File exist under %C:", Letter);\r
-                if (GetPhyDiskUUID(Letter, UUID, &DiskExtent) == 0)\r
+                sprintf_s(IsoPath, sizeof(IsoPath), "%C:\\%s", Letter, param->vtoy_img_path);\r
+                if (IsFileExist("%s", IsoPath))\r
                 {\r
-                    if (memcmp(UUID, param->vtoy_disk_guid, 16) == 0)\r
+                    Log("File exist under %C:", Letter);\r
+                    if (GetPhyDiskUUID(Letter, UUID, &DiskExtent) == 0)\r
                     {\r
-                        Log("Disk UUID match");\r
-                        break;\r
+                        if (memcmp(UUID, param->vtoy_disk_guid, 16) == 0)\r
+                        {\r
+                            Log("Disk UUID match");\r
+                            find = TRUE;\r
+                            break;\r
+                        }\r
                     }\r
                 }\r
+                else\r
+                {\r
+                    Log("File NOT exist under %C:", Letter);\r
+                }\r
             }\r
-            else\r
-            {\r
-                Log("File NOT exist under %C:", Letter);\r
-            }\r
+\r
+            Drives >>= 1;\r
+            Letter++;\r
         }\r
 \r
-               Drives >>= 1;\r
-               Letter++;\r
-       }\r
+        if (find)\r
+        {\r
+            break;\r
+        }\r
+        else\r
+        {\r
+            Log("Now wait and retry ...");\r
+            Sleep(1000);\r
+        }\r
+    }\r
 \r
-       if (Drives == 0)\r
+    if (find == FALSE)\r
        {\r
                Log("Failed to find ISO file");\r
                return 1;\r