TableWidget
-
+
Ausschneiden
-
+
Kopieren
-
+
Einfügen
-
+
Löschen
-
+
Zeile ausschneiden
-
+
Zeile kopieren
-
+
Zeile einfügen
-
+
Zeile oberhalb einfügen
-
+
Zeile unterhalb einfügen
-
+
Zeile entfernen
-
+
Zellinhalte löschen
-
+
Zeile Nr.
-
+
entfernen?
-
+
Entfernen
-
+
Zellinhalt löschen?
+
+
+
+ Maß.einh.
+
+
+
+
+ Wert
+
main
@@ -87,122 +97,122 @@
Hallo Welt
-
+
&Einstellungen
-
+
Sprache
-
+
Gegenstand
-
+
Länge
-
+
Breite
-
+
Höhe
-
+
Gewicht
-
+
Dimension der Garage
-
+
Dimensionen der zu verstauenden Gegenstände
-
+
Ergebnis
-
+
Volumen der Garage
-
+
Volumen der Gegenstände
-
+
Freier Raum in der Garage
-
+
Gesamtgewicht
- Neu (Strg+N)
+ Neu (Strg+N)
- Öffnen... (Strg+O)
+ Öffnen... (Strg+O)
- Speichern (Strg+S)
+ Speichern (Strg+S)
-
+
Export nach EXCEL...
-
+
Informationen über das Programm
- Programm beenden (Strg+Q)
+ Programm beenden (Strg+Q)
-
+
Garage
-
+
Beenden
-
+
Neu
-
+
Speichern
@@ -212,27 +222,27 @@
CSV-Datei
-
+
Alle Dateien
-
+
Datei
-
+
gespeichert
-
+
Öffnen
-
+
Export
@@ -242,32 +252,32 @@
EXCEL-Datei
-
+
Fehler in der Garagen-Dimension
-
+
Fehler in den Dimensionen der zu verstauenden Gegenstände
-
+
Erfolgreich nach EXCEL exportiert
-
+
CSV-Datei
-
+
EXCEL-Datei
-
+
Es gibt ungespeicherte Einträge. Ohne zu speichern, gehen alle Änderungen verloren. Trotzdem fortfahren?
@@ -277,60 +287,65 @@
Garagenraum-Rechner
-
+
Berechnet zur Verfügung stehenden Garagenraum
-
+
Kommentar
-
+
Maßeinheit
-
+
Längeneinheit
-
+
Masseeinheit
-
+
&Datei
-
+
Hilfe
-
+
Möchten Sie alle vorhandenen Gegenstände vom Typ Länge auf die neue Maßeinheit umrechnen
-
+
Einheiten Umrechnung
-
+
Möchten Sie alle vorhandenen Gegenstände vom Typ Gewicht auf die neue Maßeinheit umrechnen
+
+
+
+ Über Qt
+
utils
-
+
Idee
@@ -340,27 +355,27 @@
Verwendete Icons: Thema
-
+
von
-
+
Version
-
+
Verwendete Icons
-
+
Aktuell geöffnete Datei
-
+
Dateipfad der Ini-Datei
diff --git a/i18n/hu_HU.qm b/i18n/hu_HU.qm
index 3dacaf97078ceaaac24f92dcc0ac50117ebab565..90e92f1d48daeb0fec8b971d7dc17345490cafc3 100644
GIT binary patch
delta 665
zcmX|9T}V@57=Gr?cRD-!bJGbbEK9=3*^hY>l{Tm_BW00dmZ)WlIt|hV!|D`5t+fl|
z7<3UP(LeTM&WaWWk%l6yn}Ly61x0BJmM~AmuV@V&lXW<8aRi=b5Pea~IGYXAz73KQ$_}P#Oalh{*0SJ}_HE28*D<`dNHfA~+6;#hZmRn3P-FY2=)dyHB$b6w2W;
z7a;GKUnlcOtW&aX(9jf8%AX`@a9-(tMnPvt(We+l95S_3x`}&a@;6Xd`eC{@a)o
z=~rVVc|NsqTRQdJYJc5kjmg^8I~%^RqAB&>Sez9l)bSvV@IamJTLKQKv#Txw%2sn*
zS`UK?b4RR#!ljlM3!OZlTVic9p*@FE93VhV`-3I8%q@g6xI=*sbR4UftJMene0
R(&y~?`lZzB;XFsF_zx(Rrkwx)
delta 826
zcmZ8eZAcSg9RJPTowwU|+ngCGtrbPC&1EKn5Goi!LL0J_5JZPgo6a?KS;O+6Kus1U
zXV8aOA-%VZd(Vo`QQECp5F~wmu)vqk{&2}
z58x7T`U9Yu1M@IMGr%ln0_p-Vzh44I1K66kfHntgn4x_D?CnuNyaMjy0U*f@Zl;`Y
ze{d*1Gg&C@d;lbLp=@}JaLXuPe@wU|2!#h|Z^P`*Yk;KvtQb6g65zs$RqO#2ri6yF
zWI!KLX7`K}@tIP(>mk7n<$T8%`rgV^ss;g}or&7W0E}{zuX8Pz
zsS#vxokcqU_8m8}dXR_}d}U!f7
z-vnKV=@w&h9yOGy%g^tnhG%qVOsVloT)H>8QxwFmTWO`rHS1m=IlJGMu%whPa!>nR
ziM4!23T9CUGtyCrAR6I=6%JT<3Ji{x#^JeOPA?2L`m7F%T)?NuBRWg|e!_&{MH4-4
zV%O7oyM}X%hTa+Q`0aN4rjFAhf70bD^5hILt>_=uhwli`YJ%rKo#HJzyNl0zgXZ8_
zkJ%jv_`Fr_p!b~LobC!X)>?}#GOw@6G2s+R_~|NfvF(vuTcoruce7_RkIT|usV`;!
E0vndiT>t<8
diff --git a/i18n/hu_HU.ts b/i18n/hu_HU.ts
index fda8d22..8f122ac 100644
--- a/i18n/hu_HU.ts
+++ b/i18n/hu_HU.ts
@@ -4,80 +4,90 @@
TableWidget
-
+
kivágni
-
+
másolás
-
+
Beillesztés
-
+
Törlés
-
+
Vágott vonal
-
+
Vettem a szöveget
-
+
Beilleszteni a sort
-
+
A fenti sort beilleszteni
-
+
Az alábbi sor beillesztése
-
+
Távolítsa el a sort
-
+
Tartalom törlése
-
+
Vonalszám.
-
+
eltávolítani?
-
+
A eltávolítása
-
+
Cellatartalom törlése?
+
+
+
+ Egység
+
+
+
+
+ Érték
+
main
@@ -87,122 +97,122 @@
Hallo Welt
-
+
&Beállítások
-
+
Nyelv
-
+
Tárgy
-
+
Hosszúság
-
+
Szélesség
-
+
Magasság
-
+
Súly
-
+
A garázs mérete
-
+
A tárolandó objektumok méretei
-
+
Eredmény
-
+
A garázs térfogata
-
+
A tételek mennyisége
-
+
Szabad hely a garázsban
-
+
Teljes súly
- Új (Ctrl+N)
+ Új (Ctrl+N)
- Nyissa ki (Ctrl+O)
+ Nyissa ki (Ctrl+O)
- Mentés (Ctrl+S)
+ Mentés (Ctrl+S)
-
+
Exportálás EXCEL-be...
-
+
Az alkalmazással kapcsolatos információk
- Az alkalmazás kilépése (Ctrl+Q)
+ Az alkalmazás kilépése (Ctrl+Q)
-
+
Garázs
-
+
Kilépés
-
+
Új
-
+
Mentés
@@ -212,27 +222,27 @@
CSV-fájl
-
+
Minden fájl
-
+
fájl
-
+
mentett
-
+
Megnyitott
-
+
Exportálás
@@ -242,32 +252,32 @@
EXCEL-fájl
-
+
Hiba a garázs dimenziójában
-
+
Hiba a tárolandó objektumok méreteiben
-
+
Sikeresen exportált EXCEL-be
-
+
CSV-fájl
-
+
EXCEL-fájl
-
+
Vannak mentetlen bejegyzések. Mentés nélkül minden módosítás elveszik. Folytassa mégis?
@@ -277,60 +287,65 @@
Garázs hely kalkulátor
-
+
Kiszámítja a rendelkezésre álló garázshelyet
-
+
Megjegyzés
-
+
Mérési egység
-
+
Hosszúsági egységek
-
+
Tömegegységek
-
+
&Fájl
-
+
Segítség
-
+
Át akarja konvertálni az összes meglévő hosszúság típusú anyagot az új mértékegységre
-
+
Egység átváltás
-
+
Át akarja konvertálni az összes meglévő tömeg típusú anyagot az új mértékegységre
+
+
+
+ A Qt-ról
+
utils
-
+
Ötlet
@@ -340,27 +355,27 @@
Használt ikonok: Téma
-
+
a weboldalról
-
+
Verzió
-
+
Használt ikonok
-
+
Jelenleg megnyitott fájl
-
+
Az Ini-fájl helye
diff --git a/img/icons.qrc b/img/icons.qrc
new file mode 100644
index 0000000..5ff266f
--- /dev/null
+++ b/img/icons.qrc
@@ -0,0 +1,12 @@
+
+
+ icons8-export-xls-32.png
+ icons8-garage-32.ico
+ icons8-information-32.png
+ icons8-new-file-32.png
+ icons8-opened-folder-32.png
+ icons8-save-32.png
+ qt_logo_small.png
+ system-shutdown.png
+
+
diff --git a/scripts/create_rc_file.cmd b/scripts/create_rc_file.cmd
new file mode 100644
index 0000000..1dfebe2
--- /dev/null
+++ b/scripts/create_rc_file.cmd
@@ -0,0 +1,22 @@
+@ECHO OFF
+:: --------------------------------------------------------------------------------------------------------------------------------------
+:: project: GarageCalc
+:: summary: Update or create GarageCalc module file to be imported from Qrc-file
+:: file: update_ts_files.cmd
+:: date: version author
+:: 2021-07-12 1 paul salajean
+:: --------------------------------------------------------------------------------------------------------------------------------------
+SET prev_dir=%cd%
+
+CD ..
+
+pyside2-rcc --verbose -o .\src\icons_rc.py .\img\icons.qrc
+:: for embedded class "clsTableWidget"
+pyside2-rcc --verbose -o .\src\clsTableWidget_icons_rc.py .\src\img\icons.qrc
+
+
+:END
+CD %prev_dir%
+ECHO Done.
+
+PAUSE
diff --git a/scripts/pyinstaller_v2.cmd b/scripts/pyinstaller_v2.cmd
new file mode 100644
index 0000000..9e499e1
--- /dev/null
+++ b/scripts/pyinstaller_v2.cmd
@@ -0,0 +1,94 @@
+@ECHO OFF
+:: --------------------------------------------------------------------------------------------------------------------------------------
+:: project: GarageCalc Window-Exe Generator
+:: summary: create a GarageCalc-executable for Windows (version with no-console-windows as well as version with console windows for traces)
+:: file: pyinstaller.cmd
+:: date: version author
+:: 2021-06-27 1 paul salajean
+:: --------------------------------------------------------------------------------------------------------------------------------------
+SET version="v0.4"
+SET release_dir="D:\Temp\Prog\ownCloud\profp@uberspace\transfer"
+
+SET prev_dir=%cd%
+SET reinstall_venv="true"
+SET do_zip="false"
+
+CD ..
+
+ECHO Creating GarageCalc Windows.exe-version in folder %cd%\dist
+PAUSE
+REM pyinstaller --noconfirm --log-level=ERROR ^
+REM --onedir --nowindow ^
+REM --add-data="README;." ^
+REM --add-data="image1.png;img" ^
+REM --add-data="img;doc;ui" ^
+REM --add-data="LICENSE.txt;changelog.md;GarageCalc.bat" ^
+REM --add-binary="libfoo.so;lib" ^
+REM --hidden-import=secret1 ^
+REM --hidden-import=secret2 ^
+REM --icon=.\img\GarageCalc.ico ^
+REM --debug=imports ^
+REM --key=N0T1me40pp0ssum5
+REM --paths=.\src ^
+REM GarageCalc.spec
+REM The key-string is a string of 16 characters which is used to encrypt each file of Python byte-code before it is stored in the archive inside the executable file.
+REM This feature uses the "tinyaes" module internally for the encryption.
+REM
+
+::one dir:
+ECHO ...Running...
+
+RMDIR /S /Q .\dist>nul
+RMDIR /S /Q .\build>nul
+
+::Use Virtual env
+IF %reinstall_venv%=="false" GOTO PYINSTALL
+ECHO Installing virtual env as ".\env2"...
+RMDIR /S /Q .\env2>NUL
+python -m venv env2
+CALL .\env2\Scripts\activate.bat
+
+ECHO Installing necessary python packages...
+python -m pip install --upgrade pip
+python -m pip install -r requirements.txt
+
+:PYINSTALL
+IF %reinstall_venv%=="false" CALL .\env2\Scripts\activate.bat
+ECHO Running "pyinstaller"...
+REM pyinstaller .\main.py --name=GarageCalc --noconfirm --console --clean --onedir --log-level=ERROR --hidden-import=PySide2.QtXml --icon=.\img\GarageCalc.ico --add-data="LICENSE;." --add-data="README.md;." --add-data="changelog.md;." --add-data="*.ui;." --add-data="img;.\img"
+REM --windowed
+pyinstaller .\src\main.py --name=GarageCalc --noconfirm --windowed --clean --onefile --log-level=ERROR --hidden-import=PySide2.QtXml ^
+ --icon=.\img\icons8-garage-32.ico ^
+ --add-data="ui;.\ui" ^
+ --add-data="i18n;.\i18n"
+
+::MOVE .\dist\GarageCalc\*.md .\dist\
+::MOVE .\dist\GarageCalc\LICENSE .\dist\
+
+::clean-up img-folder
+::MOVE .\dist\GarageCalc\img .\dist\img>NUL
+
+::Remove temp dir and files
+DEL /Q *.spec>NUL
+RMDIR /S /Q .\build
+
+::Create self extracting archive
+IF %do_zip%=="false" GOTO END
+::-mx0 = Don't compress at all - just copy the contents to archive.
+::-mx1 = Consumes least time, but compression is low.
+::-mx3 = Better than -mx1.
+::-mx5 = This is default (compression is normal).
+::-mx7 = Maximum compression.
+::-mx9 = Ultra compression.
+"C:\Program Files\7-zip\7z.exe" a %release_dir%\GarageCalc_%version%_portable.exe -mx9 -sfx7z.sfx .\dist\*
+
+::Disable Virtual env
+CALL .\env2\Scripts\deactivate.bat
+
+:END
+CD %prev_dir%
+
+ECHO Done. Check %prev_dir%\..\dist
+IF %do_zip%=="true" ECHO Done. Check %release_dir%
+
+PAUSE
diff --git a/src/clsTableWidget.py b/src/clsTableWidget.py
index 2058bcc..46b1001 100644
--- a/src/clsTableWidget.py
+++ b/src/clsTableWidget.py
@@ -20,6 +20,8 @@ from PySide2.QtGui import QIcon, QColor, QPalette
from PySide2.QtUiTools import QUiLoader
# local imports
+import icons_rc
+import clsTableWidget_icons_rc
from utils import resource_path, convert_uom_to_length, convert_uom_to_mass
# local globals
@@ -30,15 +32,15 @@ DEFAULT_UOM_MASS = None
UI_DLG_UOM = "./ui/dlg_uom.ui"
-ICON_CLEAR = SCRIPT_PATH + "./img/icons8-clear-symbol-16.png"
-ICON_COPY = SCRIPT_PATH + "./img/icons8-copy-16.png"
-ICON_ERASER = SCRIPT_PATH + "/img/icons8-eraser-16.png"
-ICON_INSERT = SCRIPT_PATH + "/img/icons8-insert-clip-16.png"
-ICON_APPEND = SCRIPT_PATH + "/img/icons8-append-clip-16.png"
-ICON_PASTE = SCRIPT_PATH + "/img/icons8-paste-16.png"
-ICON_CUT = SCRIPT_PATH + "/img/icons8-scissors-16.png"
-ICON_ADD_ROW = SCRIPT_PATH + "/img/icons8-add-row-16.png"
-ICON_DEL = SCRIPT_PATH + "/img/icons8-delete-16.png"
+# ICON_CLEAR = SCRIPT_PATH + "./img/icons8-clear-symbol-16.png"
+# ICON_COPY = SCRIPT_PATH + "./img/icons8-copy-16.png"
+# ICON_ERASER = SCRIPT_PATH + "/img/icons8-eraser-16.png"
+# ICON_INSERT = SCRIPT_PATH + "/img/icons8-insert-clip-16.png"
+# ICON_APPEND = SCRIPT_PATH + "/img/icons8-append-clip-16.png"
+# ICON_PASTE = SCRIPT_PATH + "/img/icons8-paste-16.png"
+# ICON_CUT = SCRIPT_PATH + "/img/icons8-scissors-16.png"
+# ICON_ADD_ROW = SCRIPT_PATH + "/img/icons8-add-row-16.png"
+# ICON_DEL = SCRIPT_PATH + "/img/icons8-delete-16.png"
# def resource_path(relative_path):
# """ Get absolute path to resource, works for dev and for PyInstaller """
@@ -93,11 +95,11 @@ class TableWidget(QTableWidget):
def on_context_menu(self, position):
menu = QMenu()
- item_cut = menu.addAction(QIcon(ICON_CUT), QCoreApplication.translate("TableWidget", "Cut") + "\tCtrl+X")
- item_copy = menu.addAction(QIcon(ICON_COPY), QCoreApplication.translate("TableWidget", "Copy") + "\tCtrl+C")
- item_paste = menu.addAction(QIcon(ICON_PASTE), QCoreApplication.translate("TableWidget", "Paste") + "\tCtrl+V")
+ item_cut = menu.addAction(QIcon(u":ICONS/ICON_CUT"), QCoreApplication.translate("TableWidget", "Cut") + "\tCtrl+X")
+ item_copy = menu.addAction(QIcon(u":ICONS/ICON_COPY"), QCoreApplication.translate("TableWidget", "Copy") + "\tCtrl+C")
+ item_paste = menu.addAction(QIcon(u":ICONS/ICON_PASTE"), QCoreApplication.translate("TableWidget", "Paste") + "\tCtrl+V")
menu.addSeparator()
- item_delete = menu.addAction(QIcon(ICON_ERASER), QCoreApplication.translate("TableWidget", "Delete") + "\tDel")
+ item_delete = menu.addAction(QIcon(u":ICONS/ICON_ERASER"), QCoreApplication.translate("TableWidget", "Delete") + "\tDel")
ac = menu.exec_(self.mapToGlobal(position))
@@ -112,15 +114,15 @@ class TableWidget(QTableWidget):
def on_rowheadercontext_menu(self, position):
menu = QMenu()
- row_cut = menu.addAction(QIcon(ICON_CUT), QCoreApplication.translate("TableWidget", "Cut row"))
- row_copy = menu.addAction(QIcon(ICON_COPY), QCoreApplication.translate("TableWidget", "Copy row"))
- row_paste = menu.addAction(QIcon(ICON_PASTE), QCoreApplication.translate("TableWidget", "Paste row"))
+ row_cut = menu.addAction(QIcon(u":ICONS/ICON_CUT"), QCoreApplication.translate("TableWidget", "Cut row"))
+ row_copy = menu.addAction(QIcon(u":ICONS/ICON_COPY"), QCoreApplication.translate("TableWidget", "Copy row"))
+ row_paste = menu.addAction(QIcon(u":ICONS/ICON_PASTE"), QCoreApplication.translate("TableWidget", "Paste row"))
menu.addSeparator()
- row_insert_before = menu.addAction(QIcon(ICON_INSERT), QCoreApplication.translate("TableWidget", "Insert row before"))
- row_insert_after = menu.addAction(QIcon(ICON_APPEND), QCoreApplication.translate("TableWidget", "Insert row after"))
+ row_insert_before = menu.addAction(QIcon(u":ICONS/ICON_INSERT"), QCoreApplication.translate("TableWidget", "Insert row before"))
+ row_insert_after = menu.addAction(QIcon(u":ICONS/ICON_APPEND"), QCoreApplication.translate("TableWidget", "Insert row after"))
menu.addSeparator()
- row_remove = menu.addAction(QIcon(ICON_DEL), QCoreApplication.translate("TableWidget", "Remove row"))
- row_delete_items = menu.addAction(QIcon(ICON_ERASER), QCoreApplication.translate("TableWidget", "Delete items"))
+ row_remove = menu.addAction(QIcon(u":ICONS/ICON_DEL"), QCoreApplication.translate("TableWidget", "Remove row"))
+ row_delete_items = menu.addAction(QIcon(u":ICONS/ICON_ERASER"), QCoreApplication.translate("TableWidget", "Delete items"))
ac = menu.exec_(self.mapToGlobal(position))
row = self.vertHeader.logicalIndexAt(position)
@@ -220,6 +222,7 @@ class TableWidget(QTableWidget):
ui_file.open(QFile.ReadOnly)
self.dlg = loader.load(ui_file, self)
ui_file.close()
+ self.retranslateUi_dlg(self.dlg)
self.dlg.uom_type = uom_type
if uom_type == "UOM_TYPE_MASS":
@@ -241,7 +244,7 @@ class TableWidget(QTableWidget):
self.dlg.cmbUOM.currentIndexChanged.connect(self.on_cmbUOM_itemChanged)
- if self.dlg.exec() == QDialog.Accepted:
+ if self.dlg.exec_() == QDialog.Accepted:
if not item:
item = QTableWidgetItem("Dummy")
self.setItem(self.currentRow(), self.currentColumn(), item)
@@ -380,3 +383,8 @@ class TableWidget(QTableWidget):
self.parent.is_modified = False # set parents modification flag (if present)
except AttributeError:
pass
+
+ def retranslateUi_dlg(self, dlg):
+ dlg.setWindowTitle(QCoreApplication.translate("TableWidget","UOM"))
+ dlg.lblValue.setText(QCoreApplication.translate("TableWidget","Value") + ":")
+ dlg.lblUOM.setText(QCoreApplication.translate("TableWidget","UOM") + ":")
diff --git a/src/clsTableWidget_icons_rc.py b/src/clsTableWidget_icons_rc.py
new file mode 100644
index 0000000..9b51636
--- /dev/null
+++ b/src/clsTableWidget_icons_rc.py
@@ -0,0 +1,438 @@
+# Resource object code (Python 3)
+# Created by: object code
+# Created by: The Resource Compiler for Qt version 5.15.2
+# WARNING! All changes made in this file will be lost!
+
+from PySide2 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x01\xd5\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\
+\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x01\x8aIDAT8\x8d\xbd\x92MK\
+\x02Q\x14\x86\xdf{g&\x0d\x11\x83\xc2,0\x84V\
+m*Z\x04\xf5\x17\x82\xa8\x8d\xfb\xc0\xa5FHn\x03\
+\x83\x16\x85\xe0\xa2\xd6\xd9o\x886A\xfb@h\x91\xd1\
+\x22*\x91\x16\x96E\x1f~\x8c\xce43\xe7\xb6\x98\xb4\
+r\xec\x8b\xa0wu\xef9\xefy\xce\x81s\x80?\x8a\
+\xb5\x07R+\xbb1\xc8l\xb4\xa3\xdb\x14\xb9\xe5\xd5\xd9\
+\xcd\xf7!\xb9\xddc\xf5\xf5\xc4\xcd\xa9\xc9P\xa7z\xf9\
+0[\x00\xf0\x01\xc0\x1d#I\x0e\xe6\x979\x07\xe0\xb7\
+r \x09\xc2\x85\xb3s\xfb\xdd\xe3\xb3\xbb<\x95\xdfr\
+\xdf\x01P\xad\x01\x5c\xaa\x03\x00\xaf\xaa\xce\xdc\xbf*\xbd\
+\x94\x09\xa5\x972\x1d7\xd2\x94\xbc\x11\xdb\x19\x0e\x0c\x0f\
+\x1c+\x1e\xb7\x04\x00 \x08\xadR[_H\xcc$\xc9\
+B\xe0\xd5W\xd8N\xed%\xbb\xbd\xde\x04\xb8};\x86\
+\xaaY7\x97\xd7c2\x13\x22\xe8\x1f\x19\xf2\xf8\x06{\
+[\xd4\xd3\xbd\xec\x04\x00\x90\x80\xbb\x19#\x03\xe3\xa1\xe9\
+\x91\xee\xe6\xbf\x5c\xbcG\xe9\xa2\x18\x94\x01\xa0\xaa\xea\xb0\
+\xca\xf5\x16@S\xb5\xc7T43\x07\xb2\xd7\x9c\x8af\
+\xe64U{|x\xe7\xa9\xab:\x80/\xee\x80+\x9e\
+}\xc6\xd9<\xe3l\x9e+\x9e\xfdO}\x8c\xc8$\x93\
+\xa85\xaaE\xe0\x920\xe2\xe9pCa\x95\x88\xc2*\
+\x91x:\xdc\xe0\x920\xc8j\xd9@&\x11#2\xe5\
+\x9a\xdf\x9b\xbd;\xc9o\xdd\xe6\xf2\xfd6Q\xe8\xcf\x86\
+\xb9\x06\x00\x8b\x9b\x8bz\xb3@\xd7\xcd\xb5\xab\x83\xa3.\
+\x12\xcc\x05\x00L\xa0T\xf3{\xb3\x9fM\xf6c\xbd\x00\
+\xd6\xec\x9b#t\xa1Ts\x00\x00\x00\x00IEND\
+\xaeB`\x82\
+\x00\x00\x02d\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\
+\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x02\x19IDAT8\x8d}\x90=h\
+SQ\x18\x86\x9fs\xce\xbd7\xf7'i\x8c\xb9M+\
+\xb6\x85\x14\xf1\xa7N.\x1dD\x10\x15Q\x10\xd1\xc1Q\
+\x0a\xeeN\xaeE\xc8R\x17AG\x9d\x1c:)\x08*\
+\xea\xe0\xe4\xe6*\xa2\xa4\x82\x85\x16\x9a*\xcdO\xff\xf2\
+\xdf\xe4\xde\xe3\x10n\xb06\xe9;\x1d\xde\xef\xe5\xf9\xbe\
+\xf3\x0a\x06(\x97\xcb\xc9\xd3n\xf6\x89\xeb\xaa\xf3\x00\x8d\
+F\xf0\xe5gc\xe5A.\x97\x0b\xff\xcf\x8a\xe8\xf1b\
+~q)\x990\xc7\x00\xaa\x8dN\xe2\xea-\xd7\xa8\x94\
+\x03\x04p\xd4W|z\xd7\xec&]\xa3\x0a\xb0\xbb\xdb\
+\xd9\xb8\xf7h\xee\x0c\x80\x11\x01\xbc\x18\xb6\x9fV\xa9r\
+\xdd\xe0\x98/\xf03\x12?#\xfb\x9b\x8eO\x99F\xad\
+f\xa5|\xafKw\xaf\xb3\x13\xf9}\x00@\xb1\xaa8\
+r\xfb\x06[\xf9\x15^}\xde\xf9w\x84=\x9e$5\
+\x93\xa5\xf8\xf6\xc3>\x7f\x1f Rj&;\xc8\x06 \
+\x9dq(\xd5\xea\x87\x03\xaa\xdf\x96p[\xdb\x07|%\
+\x05\x01&\xa3'''\x17\x17^/\xcf\xcd\xdf91\
+\x10\x10\xb6\xda\x5c\xbe>E\xf9O\xad\xefy#q\xb4\
+\x0eh\xb7\x14a\xd0T\x02\x1d\x07\x90\x83\x00\x91\x84\xb2\
+\x11R!\xa4B\x13\xa0L\x870h#\x90\x98\x96\x95\
+\x1c\xfa\x85H\xfe\xb8\x0d\xd8\xa0A\x1a6:\xecb\xdb\
+\x1e\x865\xc2r~sx\x07\x91\x8a\x85m~\xe5+\
+\x08\x04\xb6\x1bc\x22\x1b\xa7\xb0\xdad\xf6\xd2H?s\
+\x08@ \x95\x01\x1a\x84T4\xeb\x0d\x0a\xab\x92\xd9+\
+gA\xaa~jh\x07RY 4\x8e\xe7`Z!\
+\x8e\xe7\x22\x10\x94\xd6\xb7 \x0c\x08\xc3\xb03\xf4\x02%\
+@\x87]\xa4\xe1\xa0\x83\x0a1\xc7\xe6\xdc\x85S\xfd\xb9\
+\xee\xb6\xd8k\xb56\x0f\x002\x89\x80\xf2\xfb\x8f\x98\xa6\
+\x814\xa6I\xfbm\xd2\x17\xa7QV\xbc\x9f)\xfd\xde\
+\x22\xff}\x9d\x8db#\xbe\x0f\xd0hS/\x97z\xd4\
+\xed \x96\xd0\xbak\x22%\xca\xf0\x00\xdd\xdb\xac5?\
+\xbe\xae\xb1\xe3e4V\xf5Y\xaf\xa9\x01z\xf9\xf8\xcd\
+\xd3\xb1\x89\xc4M\xdbuG\x85\x14\xbd%\x1a\xda\xadf\
+\xa5\xb0\xb6\xeb\xe8\x98\xf3\xfc\xee\xfdk\x0f\x01\xfe\x02\xe3\
+\x0e\xb5\xdf\xd6\x99o.\x00\x00\x00\x00IEND\xae\
+B`\x82\
+\x00\x00\x01\xfa\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\
+\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x01\xafIDAT8\x8d\xc5R\xcfK\
+TQ\x18=\xdf\xbd\xef]\xe71\xea@0N!E\
+\x0d\x8c\xb61\x91\x86)h\x86\x96m\xa3\xbf\xc06b\
+`\xb8qm\xedZ\xb4\x10\x5c\xb8\xf2\x07\xd6\xcaV5\
+-[E\x8b@p3\x8b\x01\xb1!\x8a,\x8b\x08r\
+\x12\xdf{\xf7\xc7\xe7Bft|\x83\xee\xec\xc0\x07\xf7\
+\x9e\xef|\xe7\xbb\x1c.\xf0\xbfA'\x89W\xd3\xcbS\
+\xbd\xbe|&\x05{\xa7N2\xf1_\xe3\x9et\x88\x16\
+\x1f\xaf\x96\xb2\xca\xce\x8e\x05\xae\xf7\xac\xcd\xcc\x0e\xd5]\
+.\x88\x1617\xf1\xf2\xd2\x05\xcf\xae\xde\x90:k\xe3\
+\x18\xdc\xa7\xe0\xc8\xc1\xc6q\xbb\x90\x0d\xdag\xa75\x1c\
+\xc8\x09\x00x:\xbe\x92\x1a\x08\xf4\x9b\xb2\xd2\xd7\xdb\x1b\
+\xfe\x85\xe8\xb9[\x00\x05\x0a\x00\xe0\x0d\xe7@\x99 \xf1\
+\x12\xc1`\xba\x96\xe1\xb5JJ\x17\xe5\xb1D82\x88\
+\xdeoA\x95\xf3\xf0G\x07A\x9e\x80\xa9\xef$\x0d\x96\
+\xa6\x97\x1e\x95z\xcc\xbd4%\x03\xe5\xc8\xc0\xfdl\xc2\
+\x1b\x1a\x80i\xfc\xee\x9a\x850,\xdf}\xd6r\xbb[\
+\xd3\x1b\xce\x01\x00\xc2\xd75\xa8;yP\xe0'\x0d&\
+\xe7\x1fn}\xd3\x98\xaa\x1b\xf1\xfdxC\x0ef@\xbe\
+\x84\xaem\x83\xb5E\xfc\xa1\x01\xbft5a \x01\xe0\
+\xedz\xf5S\xf9\xe6}\xea\x93\xb8\xd5/8\x05\x00\xdc\
+\x8c\xe0~5\x8f\x94\xd6\xc1~\xf9\xd31\xbci\xe4\x86\
+l]\xaa\xeb\xd5\x8f\xb7\x8b\x0f\x0a)r#\x96I\x80\
+\x08\x06\x84\xa6#\xec\xf3a\x9d\xe4\xbeZ\xb1\xd1\xf1\x91\
+\x82\x1f\xe9\x89\xcd\x8b\xbb\x95\xbc\x0e\x0b\x96-\x00 \xa2\
+\xa3l-s\x9bs (\xe5\xa9D\xf2\xcfg^\xa4\
+/\x87\xd1\x82\x03]\xe9\x16l\x0b$\x10\xee\xd9`\xf2\
+4\xcd\xf9\xe0\x00\x19\x1e\xad\x82\xce'*\x04\x00\x00\x00\
+\x00IEND\xaeB`\x82\
+\x00\x00\x02\x97\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\
+\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x02LIDAT8\x8deR\xcfK\
+TQ\x14\xfe\xeey\xf7\xbd7o\xc6_3\x8e/u\
+\x04\x13\x91\x84\x82Z$-\x5c\x14i\x22(\xb4\x8a \
+Z\xf5'\x18T\x7f@\x08\x06\xb6\x0d\x82hY+5\
+\xd7\x96-\x84\x16I \x82\xa0\x85\x0e\xa3\xf93\x19\xad\
+\xa9\xe9\xbd7\xf7\x9e\x16\xd3\xbc\xdek\xce\xea\xdes\xcf\
+w\xbe\xef;\xe7\x0aD\x82\xc1\xe2\xf9\xe4\xecC\xb0\xd9\
+\x1b\xcd[N\x22\xad\x89\x83\x93\xc2\xce\x83\xfbO\xefm\
+G\xdfd\x14\xfcrjn\xbe\xc5\xe1\xb1\xcc\xf8\x88\xa8\
+\xe5M\x12H\xd9\x84r\xb9\x82\xf5\x99E\x02p;\xda\
+\x80B\xf0\x937sW\x87\xe4Xk\x9b\x11\x07[\x04\
+/`8\x8e\x84!\x8df\xfc\x17\x02\x00\x9e=\x9ey\
+\xd4\x9a\x11\x93\xd9,\x89\xe2\x09\xa1ix\x04\xfa\xfb\x0f\
+T\xb6\xf2\xd0\x1a Q-\xdc_+\x1c65\xca\x05\
+V\xf4\xe9\xd6\xc4\xf8th\x81\xd9\xe8O\x8f\x8e\x0a\x05\
+\xa0\x09\x80:.\xc2\xfc\xb2\x8c\xa4i\xe2\xcaP_U\
+\xaat\x80\xe1\x0e\x97\xa4s\xe7\xfd\xfc\xca\x0d\x00\xd3\xa1\
+\x85h\xa8\xe3\x22\xe4\xe7\x8f\x18\x1c\xf4\xab\x12I\xc2\xb0\
+\x9b\x01\xd6 \xe9\x80\x95\x0fh\xae\xc4f\x10\xf5|\xb8\
+\xb0\x84\xa4\x1d`\xf9\x03\x90\xc9:\x10d\x81u\x00\x92\
+\x0e\xb4\xf2 \xec\x06\xd8\xc9d\xb6n\x0b\xb5\x81\xe5\xfa\
+\x5c\x5c\xbe\xde\xf5O64\x88\x12\xd0\xca\x03XCh\
+\x0d\xd6J\xc5\x1aX\xb6\xdd\x9c\xb2\xab\xd3\xae\xad\xe0\xf8\
+ \xc0\xc6j\x01\x82$\xac\x04\xa1\xbb7\x8d\xed\xad\x12\
+\x06\xae\xf5\xc5,S\x95IX^\xc0\xb0\xa5\x08\x99\x05\
+\x09$\x92\x0e,[\x00Z\xe3\xe0k\xb9\x0e\x1c*\xd0\
+\x8a\xcb'k\x9bhl\xcf@\x92\x01\xb0\x86\xdb\x95E\
+[G#\x18\x1a\x86L\xd5\x01c\x0d\x88X\xbb\xe7\xcf\
+\x82\xa4\x81\xd2&\x83\xa4\x83\x83\xc2\x116V\xf7 \xc8\
+\x0c\x8b\xcf]\xcc\xc1\xcd\xb5@U*\xe5X\x83\xa3\xfc\
+\xce\xc4\xca\xab\xb7R\x982\xdd\xdf\x9d\x1ad\xe5\x99m\
+\xb9\x06\xb4w_\xaac\xd4\x952\x02\xdf;\xad\xdd\xc5\
+\xff\x05\x8b\xaf\xdf\xedg;\xd3g\x840\x00\x00ng\
+\xf5\xf7\x1e\xee\x9e\x82\xb5\x0f\xad|\x1c\xed\x96\xf2\xc3w\
+GzB\x051\x06\x0d\xbe0\xd0S\xc7\xdc\xeaZP\
+\x7f\x95\xef\x15\xd6\xfd\x98\x85h\xec\xe5\x8bS\xb3/\x96\
+nFsJ\xb1\xfa\xf5\xd3\xfbV\xbb\xff.\xf9\x0b\xb5\
+\xf3\x1f\xb8\x9f\xd9\x00\xfb\x98vj\x00\x00\x00\x00IE\
+ND\xaeB`\x82\
+\x00\x00\x01\xbf\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\
+\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x01tIDAT8\x8d\xedQ\xbdK\
+Bq\x14=\xbf\x9f\xef=\xf3\xf9\xcc\x0f\xb2!Ql\
+\xc8\xc00\xa3\xa9\xa1\xa5!\xe8\x7fh\x11Z\xda\x9b\xda\
+\x9a\x0a\x82\x9a\x1aZ\xa2\xa1\xb1?\xa0hM\x84\x06\x95\
+\x14\xedK\x02\x1b\xca\xaf\xb4\xe7\x17\xfa~\xfa^\x83\x88\
+\x95ZAkg;\x97s\xcf\xbd\xf7\x5c\xe0\x1f\xe4`\
+\xf7<\xc9\xdbLR\xb7P\xa9\xb1\x8aJ\xa8\xe9W\xcd\
+\xe5j\x85\xd3\x8fYD~\xdc\xea\x94\xfc\x1e\x00\x80|\
+\x11yf\xb33\x13]\x11\x97\xbcC\xcb;\x8dA\x9c\
+\xbf\x0a\xa7)\x00\x10N\xd7\xb3U\x94\x0f\x04\x80\xc2\xf0\
+\x1d\xa7\x9d]\xc8o6\x1e\x08\x0e\x00x\x9b\xf9sU\
+\x03\xe8}\x02\xedz\x06\x8a\xd6\x06\x8d\x14\x01\xcf< \
+I}\x06t\x90+yH\xa0lM\xa38\xa7\xc0\xb0\
+ \xa0\xe8\xaf\x017!\xa0\xc5\xfa\xb4TSU\xa2d\
+_{\xc3\xdd.\xb9]\xcd\xa0i\xef\x9c\xe5\x95F\xa1\
+Q\xa0<\xc5@\x9f\xd2P]\x8e\x9eVS\x09\xd7*\
+\xc9\x87\x8d\x97\xbc\xaf\x1c\xbd\xed\xdc\xc44U\xb17\x0c\
+\x0e\xbd\xd5\xe9\x93\xccp\x8bF0M\xc3\xa5\x92\x85.\
+\x1aK@0\xc4\xba)\x13\xbd\x10\x1f\x98\xde\xf6\xce\xc9\
+YaIZ\x01\x05\x16-v\x04\xdf\xf2\x10S\xcd\x92\
+1\xdcX\xde\xdc\x0b\x84\x7f\xcc@-4\xd7m\xc1z\
+\x9c\x97U\x84r9\x88\xa9fI|dG_\x9b\x01\
+`\xe8\xff\xb6\x02\xc7#\x82K\xb7Jt\x98\x14dv\
+\xba\xb1\xbfv=L\xfb'\xbc\x03\xc6\xc5\x8a\x1b\x0fd\
+\xe3\xa5\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x02\xef\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\
+\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x02\xa4IDAT8\x8d\xa5\x92Ih\
+\x94Y\x14\x85\xbf\xf7\xfe\xe1UY\xb1\x0bc\x95C\xa8\
+\xc4\xb6\x92\x88!E\x14\xbb\x05Q4\x22\xbd\x13Ap\
+\xe5B!\x88\x04\x04]\xb9\xd0]\x89+\x17\xba\xd6\x14\
+\xc4i\x97\xc6\x16\x14\xc7\x8d8!\x88\xda(\x89\xd8\x1d\
+%\x92D\xd4\xc48\x84T\xd5?\xbc\xfa\x9f\x8bJ*\
+q\xd8yv\x97{\xcf\xb9\xf7\x1e\x8e\xe0'8\xbe\xaf\
+\xb7\xb1!%\xf6\xb8\xae\x95\x8b\xb4\xf94\xe9qu$\
+6t9\x9f\xcf\xeb\xefg\xc5\xdc\xe2\xec\xc1B\xc7\x82\
+\x94\xeak\xc8:\xcdMm\x8e]7_\x10\x060\xfe\
+V3\xd4\x1fN~\x19\xaf\x9c\xdb\x91\xdf}@ \xcc\
+\x0f\x02\x17\x8e\x9c\xde\x95nt\x0b\x1d\xeb\x95\x1a\xb8\xef\
+\x11\x8ciL`H\xc6\x05\xc9\xa56\xb1V\x05\xd2\xf0\
+\xf0f\xf9\xe9\xf8\xb0\xb7\xb6\xbb\xa7;\x04\xb0g6\xa7\
+\x1b\xddB6\xe7\xaa\x87}S\xb4\x17}b3\xd2e\
+\xe0\xa3O\xf4\xaa\xcc\x7f\x998\x1b\xb7%V\xdd\xbf\xcc\
+\x0d`\x0b\x80\x04X\x90R}\x1d\x1b\x94z~m\x8a\
+?Js\xc8s \xbd\x88E/K\x0c\xf5\xfb,o\
+w;\xcf\x1f*l\x06\x90\xc7\xf6\x172\x0dY\xa7\xb9\
+\xff\x9eG{)\x00\xc0n\xaaG(\xbbF\xb6Z\xd2\
+ \x05\x0b1\x14\x07\x03~owe\xf27\xf7\x18\x80\
+\x5cV\xef\xecmjs\xec`L\xd76W\xdeO\xa2\
+:[\x11q\x07{\xe5b\x84kAT\xf5-S\x0a\
+\x19\x19\x0c\x89'E3\x80\xb4-\x91K\xc4#\xd0Q\
+m\xa3\xf15\xfe\xedAb[s\x88\xb8\x83~\xfe\xae\
+\xd6KJ\xf82\x16\xe28\x22^\x15\xb0#/\xf8<\
+A\xb5\x9c\x85\xd5\x9cB\xbf\x1aG\xa6\xea\xbey'4\
+\xe0\xc4|\xb0\xb4\x0d \xa7Bs\xe9\xc3\x84\x85\x997\
+K\xb6[\xd2\xd5\xe1\x7fG\x09\xee\xbc\xc4\xdd\xd4\x02\xb2\
+\xfa\xdf{%X\xb2D\xa3}S\x02\x90\xc57\xe1?\
+\xa3\xc3v\xd8\x98\xd5\x0c+\xab\xea\xc1\xd0D\xedl\xe3\
+k\xfc[\xff\x831D\xc0D\xda\xc2u\xa1\x5c\x14\xd7\
+\x01dwOwX\xfal\xfd\x1dS\x86\xe2r\x01J\
+\xa0+\xb3~\x00\xa0#*\x06F36\xb95!O\
+\x9f\xb9\xc1\xe3\x01\xba`:\x89\x06#\xae\x9c8\xf3\xfa\
+\xcfu~S\xdc\xb5\x18y`\xa1G*$\x8cAI\
+C\x90\x10\x14\xb36\xad\xab\x03\x9e\xa5\xb2\x85W\x94\xd4\xd7\x1b\
+\xbc\xb0B]\x18p\xf7\xae\x1bx\x93\x95\x9d\xdb\x0f\xef\
+\xbd8s\xdc\x0f\x99\xbbp\xb4\xf7\xafy\xf3\xc5I\x95\
+\x882R\x0a[\x0a\xa2\xa0L\xb1\x5c\x12\xd7\x1f\x0f\xd0\
+\x95?\xd3\xe5}\xcf\xf9%|\x05\xafW\x0di~8\
+\xff\xf6\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x02\xa0\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\
+\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x02UIDAT8\x8d\x95\x92\xdfK\
+\x93a\x14\xc7\xbf\xcf\xf3\xbes\xbfu\xb5\xad\xcd\xc0j\
+\xd9\xca\x0a\x9aJ\x17\x82\xe9\x85At\x13]\xcd\x8b.\
+B\xd2Z\xab\x94\x8c\xd0\xff@Q\xaa\x0b)\x0a\xd7+\
+B?Xu\x11H\x10\x94\x18\xc4@\x84\x10-o\xcc\
+r\x08C\x9c\xb6\xe9\x9an\xaf\xef\xbb=OWS7\
+\xb4\xf2\xdc\x9e\xf3\xfd\x9c/\xe7{\x80\xff\xa8\x9e\x0e\xc9\
+|\xff\xc6@\xd9v=\xfa/\xb1\xd4\x19\xf4X\x5cG\
+\x7f\x95\xd4W\xcf\x05z?<\xde\x15\xe0\xc9\x9d\xa0G\
+\xb6\xdbB\xe9\x0aw\x91\xf1\x84\x8b\x88\x95G\xae\x07z\
+\xde\x07\xb6\xce\x08\x7f\xdb\xac\x94\xdaB\x89\xfaZ\x93Z\
+\xa4\x832\xbf\x04k\xc5\x01dEM\xf5\x85S\xe7K\
+\x87>\xbex\xb7#@\xea\x0cz\xd2\xfbl\xa1D]\
+\xad\x09\x84\x00\x84@5\x99!\x8fN\xa0\xa4\xa2\x0c\xcc\
+`8\x9d\x83\x90Bq\x7f\xfb\xe0IUo\x1c[9\
+\xd7`\xa4\x89$\xd8~\xe7f\x93s\xe8'&QZ\
+s\x1c\xa9\x1f\x11\xbe26^%\x14\x8a\xed<\xfb\xb6\
+ZP\x9c\x8b\xe9\x0c\xd6\x1d\x0e`5\x05\x18t\xc89\
+\xc98\x1d\x90\xbfLA\x94e\xd0\x85\xd4\x03\xa1P\x5c\
+\xa7\xcb\xb8\xcd`\xb0%\x13\x88*\x1c\xeb\xc5\xc5 Y\
+\x06\x88\x22@)@\x08\xf4\xd1EU3\x17\xf1\xfb{\
+\xbd\xc3\x02\x00H>\xc9c\x13\xd9\xd0\x19]\xb6<\x17\
+\x8b)\x07\xc9\x12\xc8\x06#\x08\x00\xae\xd5\xc2<\xf9U\
+\xd5\xce\x86[}]\x8d\xfd\x00 H>\xc9\xe3\xd8\xab\
+\x19\xad\x5cK\xd85E\x22\x08\xd9<\x8b\x09\x0c\xd6\xe4\
+oD\x19\x85l\xd9\x03\xd3\xf7\x19U\x1f\x8e\xf8\xafu\
+7nD)\x16\x8b\xecUM\x95MO\x88\x1dk#\
+\xd3\xd0\x9bu\xa0t\x13\xe2\x84\x8a\xfa\xf9Y|\x8e-\
++T\xcd\xdc\xbc\xda\xed\x95\xb6\xde\x8df(\x86\xc3\x9f\
+f9\xc0al8\x86tR\x06c\x99%\x85\
+\xcdkc\xcb\x97}]\xde\xa7\x85\xa9\x11\x00x\xd3\x16\
+\x188\xa8\xac7\x95\x9f=L\x00\x92\xe7dJ\x15\x16\
+fTt\xb4\xf4\xb5<\xdb\xeeg6\xbc\x06[\xa5\xe7\
+\x872\xf2%w\x83\x8b\x00\x04\xab#\xd3\xf8\xa93F\
+\xc3Y\xda\xd6\xdc\xd7\xfcz;q\x1e\x00\x00^\xb6J\
+\xb7\x09g\x17\xb5V\x83%\x1dK\xc5\xe3T\xfc\xa6p\
+\xc8\x00\xc09\x89\xdf}\xd8\xd4{\xef\xd6`\x87\xc0\xd9\
+p\xfb\xa3+\xe3;AwU\x7f\x00 \xb3\xebsK\
+\xbaY4\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x01\xa0\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\
+\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x01UIDAT8\x8d\xa5\x92\xb1O\
+\xc2@\x18\xc5\xdf]\xaf\x16\x10\x16&\xc7\xaen\xc6\xd1\
+A\xe3\xe2\xe2\xc2\x22\xbb\x09q\x22\x84\x90\xb0\xe8\x02\x03\
+\x83\x09\xb1\x83\x9b\x83\xfd\x1b\x8c,F\xe3\xe4d\xe2\xe8\
+`\x5c\x8c\x9a\xb8\xa8(\xd8\xd2r\xf4;\x175\x96\x83\
+\x04\xe5%\xb7\xbc\xfb\xbe\xf7~\x97\x1c0\xa5\xd8\xb0\xb1\
+W;^#\x8e\x8dQ\xc3\x8a\xd4\x9b\x87`\xa7V\xcb\
+\xf7\xbf=1<4HY\xdbruyeT\x00\x7f\
+|\xa2\xf4\xe9\xf9\x11\x80\x8b\x1fOg2\xc6\xf3\x0a\x83\
++\xcec\xa5z\xc0\x1f\xa5=\x01\x9cY\xb8\xb9\x05\xa5\
+\xd3\xa0\x84\x05\xf1\xfc\x02\x00PB 2\x85\xb6\xa0\x05\
+DD\x12]\xcf\xe7]/\x86\xc7\x00p\xdfW\x8a\xb1\
+\x87i\xa9\xff/\xa7\xec\xdaN\xd9\xb5\x7f{\x02\x00\x0e\
+\x9b\xadz2\x93\xa9\x82\xeb\xff\x02\x04\x15t>v7\
+\xab\xebu\x8a0\xf7\xe5\xde\xc5\x02Hb\xc1^\x9aO\
+\x8ek\xben].\x02\x00)$\x86\xef8\x00\x04^\
+\xd0~}\xf71\xee\x04^\xd0n\x16\xdd\x1c#d\x19\
+!\xdb,\xba\xb9\x18\xc1$\xe2\xe6\xec\x89\x92\xfe\x01\x00\
+03\xb5\x15#\xe0\x86\x92\x14\xd1\xc8E\x8a\x08\xdcP\
+\xb2\xe2\xe4{&\xeb\x14L\xd6)T\x9c|/F\x10\
+\x86\x83\xc6\xfd\xd9\xd5\x0c)fi\xcdL\x85}9h\
+\x00@i\xbf\x14NJ<\xb1>\x01\x07g\x8a\x88\x97\
+b:g\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x03\x09\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\
+\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x02\xbeIDAT8\x8d\x8d\x91]H\
+Sq\x18\xc6\xdf\xff\xff\x9c\xb3\xb3\x9ds6u\xf3c\
+\xe1\xb4\x0f\x19\x14\x85\x22\x98\xd0\x85E\x04\xdd\xec\xca0\
+#,M\x0d\x13\xc9\xc2\xe5GTxaA\x91\x8a4\
+Y\xa9A\xf8\x05\x09^\x14R\xd0ET\x17\x19XH\
+_f\x88b\xb3f\xe96\xf6uv\xb6s\xce\x12\xa19UQ \x1e\x15_\xb79N\xcf\xfd\xcd\
+\x0c\x00\x80\x9b\xafU>k\xb8h+\xf2\xbe],4\
+\xccD\x0a\xa3~^`\xd2\xd9\xaf\x8cI\xbf\x0d#\x0c\
+\x14K\x978\x9b\x9c\x5c\xaa\xa50\x00\x00\x02\x94h\x1d\
+:\xe3s\xe7D\xaa[\x9d\xb5cl\x06w]\x8eI\
+\xd2\xcc\xfd\x17O\xcdV\xcbN2\xdb|.\x15\x80\x04\
+\x00p4\x8f\x1bd\x90m-\xfd\xb5\xc3v\xa8\x03Z\
+\xcfl\xe1\xd7\x82\xb3\x91@\xb4C\xf0\xf3\xd3\x08\xe3\xdc\
+\x94\x80\xde\xa6{yRB\xb6\xaaL\xe2Q2\xa7\xcc\
+\x8b\xfe\xac\x1d9\xa5\xb4^\xfb\x10\x08\xac\x11\xf8\xe8\xdd\
+\x94\x11\x14\x02k\x12*\x9a\xef\xb8Y\xcf'E>\x18\
+l\x0fy\x82>\x82\xc0\xaa\xef\xcb\xfa\xd5\x96\xee\xaaw\
+\xa9\x00?\x01\x9b\x11$Z\x9c*\xf5$\x00\x00\x00\x00\
+IEND\xaeB`\x82\
+"
+
+qt_resource_name = b"\
+\x00\x05\
+\x00M\x843\
+\x00I\
+\x00C\x00O\x00N\x00S\
+\x00\x0b\
+\x03xr\xf4\
+\x00I\
+\x00C\x00O\x00N\x00_\x00I\x00N\x00S\x00E\x00R\x00T\
+\x00\x0a\
+\x04M\xd8\x05\
+\x00I\
+\x00C\x00O\x00N\x00_\x00P\x00A\x00S\x00T\x00E\
+\x00\x0a\
+\x04A\xb9\xe2\
+\x00I\
+\x00C\x00O\x00N\x00_\x00C\x00L\x00E\x00A\x00R\
+\x00\x09\
+\x04D\x1fY\
+\x00I\
+\x00C\x00O\x00N\x00_\x00C\x00O\x00P\x00Y\
+\x00\x0c\
+\x0c:\xcf'\
+\x00I\
+\x00C\x00O\x00N\x00_\x00A\x00D\x00D\x00_\x00R\x00O\x00W\
+\x00\x08\
+\x08D1<\
+\x00I\
+\x00C\x00O\x00N\x00_\x00D\x00E\x00L\
+\x00\x0b\
+\x03=o\x22\
+\x00I\
+\x00C\x00O\x00N\x00_\x00E\x00R\x00A\x00S\x00E\x00R\
+\x00\x0b\
+\x03\xfeB\xa4\
+\x00I\
+\x00C\x00O\x00N\x00_\x00A\x00P\x00P\x00E\x00N\x00D\
+\x00\x08\
+\x08D1\x04\
+\x00I\
+\x00C\x00O\x00N\x00_\x00C\x00U\x00T\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\xac\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x90\
+\x00\x00\x01zS6^R\
+\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01zS7uY\
+\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x104\
+\x00\x00\x01zS7W\xda\
+\x00\x00\x00F\x00\x00\x00\x00\x00\x01\x00\x00\x04A\
+\x00\x00\x01zS6\x81\xb2\
+\x00\x00\x00`\x00\x00\x00\x00\x00\x01\x00\x00\x06?\
+\x00\x00\x01zS4|\xf0\
+\x00\x00\x00,\x00\x00\x00\x00\x00\x01\x00\x00\x01\xd9\
+\x00\x00\x01zS4\x9c\xfb\
+\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x11\xd8\
+\x00\x00\x01zS5\xa2\x1a\
+\x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x9d\
+\x00\x00\x01zS<\x13\xb8\
+\x00\x00\x00x\x00\x00\x00\x00\x00\x01\x00\x00\x08\xda\
+\x00\x00\x01zS7\x10Z\
+"
+
+def qInitResources():
+ QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/src/icons_rc.py b/src/icons_rc.py
new file mode 100644
index 0000000..e4e28dd
--- /dev/null
+++ b/src/icons_rc.py
@@ -0,0 +1,485 @@
+# Resource object code (Python 3)
+# Created by: object code
+# Created by: The Resource Compiler for Qt version 5.15.2
+# WARNING! All changes made in this file will be lost!
+
+from PySide2 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x02\xcd\
+\x00\
+\x00\x10\xbex\x9c\xed\x96]O\xd3P\x18\xc7\x8f\xf1\x0b\
+x\xe55\x97~\x0c?\x10\x10\x89\x82\xc4\xa8\xf8\x82H\
+D\xca\xc6X\xf6\xc2\xba\x96u\x08-\x03\x95\x898\xa6\
+\xb8\xe1\x02\x0eXB$F\x19/\x09/\x91\x18I\xe0\
+F'0\xf8{\xceY\x98\xb0\xce\xad\x1b\xa3za\x97\
+\x7fO\xf3\x9c\xe7\xf9\xff\x9e\x9e\xf6\xa4#\xe4\x1c\xfdU\
+U\x11v&\xfd\x17\x08\xb9H\x08\xb9DEC\xe42\
+\xc9\xc4\xff\xd5C\xaa\x16\x92Ru;\xfe\x8e\x84\xe4\xef\
+>\xda\x11UlYI5\xedp\xb5=\xe6b\xd7\xc7\
+\xe7\x8c\xa8P=c\xe9\xd7A\x9f\xe3\x14\xda\xb8r\xe7\
+\x0c\xf1\x0b\xd4\x1b\xe5WR\xe5\xf0\x1d\xf3?*\xa2\xd3\
+\xf0\xfd\x0f|\xd9{P\xe8u1V\xbe|\xa3\xfcI\
+\xd5\x9d\x15\xafO\xa6\xf8\xf8u:\x88\xe4\xe8\x00\xe4+\
+\x16\x1e\x93\x1b]\xba\xf5\x95\xeb\xedP\x16\xbe\xf3\x1c\x96\
+\xcbj\xb8\xc7b\xc6#\xd7;\x1f\x7ffH\xce\xcaw\
+\xad\x13\x83\x9fw\xa0Z\x07\xd0{\xcb\x8d\xbe\xce\x00\xb4\
+\xd0\x07\x0c\xad\xef\x16\x14\xcba\xb9\xacF\xb5\x06\x10X\
+\xd8\xe1^\xc7\xbd\x8d\xf0\xb5\xfbn\xf4\xbf\x9c+\xca+\
+\xa6\xfe\xd19h\xcd\xae\x92\xf9\xe3n7\x94;^\xa8\
+\xe1\x8fP\x1e\xfa!\xd5Z\x0c\xbf\xebrm\x07\x86Z\
+\xbc\x18~\x95\x80\xd2$r\xafR\xf93\x832z\x1b\
+\xbb\xf0\xac\xd9\x8d\xd5\xa9\x18R\xabq\xec\xae\x84\xb1\xb7\
+:\x01l/\x02;+t\x5c\xc2\xde\xda\x04\xdetz\
+\x10\x12$\x8cY\xfd\x88\xb8T\xec\x7fKbcz\x12\
+\xc1V/\xf5\xb0q\xaf\x92\xf9T\xaf\xed\xdd\x88\xfb|\
+Ho\xcer^z3\x91\xb7\x87\xd4J\x14\x9f\x82\x1a\
+\x16B#Ho-e\xe2T\xb3\xda0F;\x9c:\
+_\xa3\xfc\x09\xc9\x83\xe1\x16\x07g\x16\xebao\xed\xdd\
+\x89<\xa6`\xab\x88\xa8\xb7\xbbl\xfe{M\x82Rg\
+\xc1\xcf\xe5p\xc9=\x1cn/\xf3Z\xe6Q.\x9f\xef\
+\x83\x9b6\xacG\x9fr\xdf\x13=|I@\xa5\xcf\xb6\
+\xaf\xc1\x8a\x83\xad\xa4\xae\x87\x8d\xa90\x06n\xdb\xf3z\
+\x96\xc2\x1fwuC\xbd\xd1\xc5{H-\x8d\xe5\xac\xc3\
+\xacn\x1d\x0e\xb6\x16\xb1\x1e\x1b\xa156\xdd{_\x0e\
+\x9f)\x22z\xa159\xe8\xbe\x12\x8a\xee\xbd\x1e\x9a3\
+x\xd7\x85\xb7\xb4\xe6O~\xa5\xf2+\xad\xff\xfc\xfc|\
+3\x95\x8f\x7f\xdao\x8dQU\x82\xaf\xd2\xef\xec\xd1\xbd\
+\xa8\xa1y\xd3\xf9\x95\xba\x7f\xf9\xba\xf8B\xaa\xee84\
+\xfb\xf93\xa6\xdc(\x06\xa5\x1a\xe1\xc0c\x89\xc0c\x8b\
+\x99+\xcadl\xfe\x7f\xc19\x05OW\x0cR\x9d\x9d\
+\xcf\x89\xf7\x02\x5c\xec\xfaLb\x94\xc5\x98Gk\xd1\xd7\
+\x93\xe0\x92\xaf:\xf8\xe8\x7f\xf4\x9c\xeb,cL\x19\xbe\
+\x90~\xe2\x8dgc\xa6I\x8cs\xb6\xaf\xc1\xe9g\xa3\
+\xf9\xef\x9f\x90\x96\xeb\x9d\xfe\xdc}h\xf6\x01z\xb01\
+B\xc8\xf9\xb3R!\xf6/K\x03R\xae\
+\x00\x00\x03\x06\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\
+\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x02\xbbIDATX\x85\xed\x96MH\
+TQ\x14\xc7\xffw\xde{\xf3\x1c\x99\x9cQ\x89\xacQ\
+H#\xb1\x8dA\xd0\xa6(Z\x88\x8bV}\x80\x18A\
+`-\xda\x88\x8bhhQ\x0bi\x13H\x13-j\x11\
+DJ\xb9h\x13T`\x0b\xc9\x08\x22%\xda\xb8I\xa1\
+\x01E\x19t>\x9cy\xce\xe7\xfb\xba\xef\x9d\x16\xe5\x90\
+\xf9&Q\xe7\xd5\xc6\xff\xee\x9c{8\xff\xdf\xbd\xe7\xdd\
+\xcb\x03v\xf5\x9f\xc5\x1e\xf4\x0f\xdf\x03\xe8&\x81\x89N\
+\x05\x1e\x86\x12\x81\x9e\xe6\x1a\xfd\xe1\xc1\xc1\x1e\xc3\x05\x80\
+g\xe6\xc9c5\xa2(0\xc7\x02\xd3$\xcc\xcc\xf1l\
+\xa1\xc4\xa73A\x7fw\xb5!<\x04V\xd1\x1c\x00$\
+\x89\xa1\xb3]\x0a\xd4\xfb\xc5\xd3\xfbK\xea\xcc\xe8\xe0h\
+s5\x01X\xa4\x7f\x98\xce\x1c\xaf\xd9\xb4\x90\x880\x1f\
+\xe3XJ\xda\x16\xb7I\xd8\x92\x09\x88\x83\xd8\xd0\x8d\xc7\
+}\xb7\xff\x5cs\x9c\xbbc\x13\xc6\xd0\xd6\x22\xa1\xad\x05\
+[2\x07\x00\xce!~\x9e\xd6\xc3\x006\x00x\xb6\xda\
+l;\x12E\x80\x88$\xa7\xb5\x7f\x02\xf07U\x1c\x81\
+\xaa\xd9\xf8\xbe,@I\xab\x00U\xc7,\xd2?\x5c\xee\
+$y\x05\xdd2\xe8|E\x80\xa5\xac\x17\xedG\x9bq\
+\xa2\xbb\x03\xccS\xf9\x96lW\xdf\xbe.\xc8S\xefg\
+\xef8\x03\x10\x90L\xaa\xe8\xea\x09\x82\x1bJ\xd5\xcd\x01\
+`%\x9e\xb2\x8ay\xfd\x93\xe37PP\x09\xb2,\xc2\
+\x1f\x90]1\x07\x80\xc5\xa8R\xe0\x86=\xe1\x08\x90+\
+\x12B\x87\x82\xae\x99sn#\x9d*\xf9\xc8'L:\
+\x02\xe4U\x86\xe6\xd6z\xd7\x00\x96\x17r\x90$!\x1a\
+\xbe\x7f\xa5\xb8\x11\x80\x80L\x96#t0\xe0\x1a@l\
+^\xb1,\xd3\x1e\x03\x1c\xde\x81\xa2F\xf0\xca\x22\xf6\x04\
+7\x7f\x9e\xb7\xab\x85h&oY\xf6\x84#@\xb6`\
+#\xd4\xe6\xde\xf1s\xd3F:Y\xaa5}\xd6\x94#\
+@^\x13\xd0\xd2\xea\xde\xf1\xc7c?\xe7\x7fk\xe8Z\
+~#\x00\x01\xca\xaa\x89P\xab{7 6\xb7jq\
+N\xef\xd6\xe2u\x0fQQ#h\x9a\x85\x91\xc8\x97\x1d\
+\x1b\x05\xebe\xf4^?\x82\x97Of\xb1\xaa\xe8\xe5x\
+1\x9a\xd2\xb8iN8\x02\xe4\x8a\xc0\xe1\x0e?Nu\
+5\xee\x18\x00\x00\x8c\x82\x82\x0b\x97\x9b\xca\xb1\x9a\xcd \
+\x9d\xd0j\xacZ\x9a\x5c\xcb\xad\x1bA\xc1`h\x0a\xc9\
+\x18\x7f\x9bD6c\x22\xb1\xa4\xe3\xe3\xf8\x0a\x00T%\
+\x97J\xe8\xf0\xfa\x84\xd8\xda\xfc\xd7\x03\x10\x90\xce\x98\xd8\
+w@\x86\xa6Z\xf0\xd7\x89\xc8fM4\xee\xf5\x02@\
+Ur\xf1\x98\x01n\xd0\xeb\xdf7\xcd\x1e\x0e\x8c\xa4;\
+\xdb\xa5\x06\xdd \xc4s\x1e\x9c\xebm\x82\x1b\xd25\x1b\
+c\xaf\x12VF\xd1\xbb\xc3\x8f\xae~(\x03D\x06\x9e\
+\x9f\x15`\xbf\xb0ljp\xc5\xf9\x97\x04\x81\xd9u\x01\
+\xef\x9b\xbe\xbb\x97.2\xb0*\xfda\xecjWU\xd0\
+\x0f\xde\xf6\x5c(\x8d\x8f\x0c\x87\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x03s\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\
+\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\
+\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\
+\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\
+\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x01\x0e\
+PLTEGpL\x90r\xa4\x8el\x9f\x8em\xa0\
+\x91q\xa3\x8el\xa0\x8en\xa1\x99f\x99\x93s\xa3\x93\
+t\xa3\x80\x80\xaa\x93s\xa2\xac\x92\xb1\xad\x93\xb1\x92t\
+\xa2\x8el\x9e\x94u\xa4\xad\x92\xb1\x93s\xa3\x92s\xa1\
+\xaa\x8f\xb0\x93s\xa3\x92m\x92\x94t\xa3\x95t\xa4\x93\
+r\xa3\xab\x8f\xaf\x94r\xa2\x93s\xa2\x93t\xa2\x8em\
+\x9f\x8em\xa1\x96\x7f\xaa\x8fm\xa0\x95\x80\xab\x8dl\x9f\
+\xbe\xc7\xe2\xc2\xcd\xe7\xc4\xce\xe8\xcc\xd8\xec\xc8\xd3\xea\xce\
+\xd9\xed\xc6\xce\xe6\xc3\xcf\xe8\xcd\xd7\xec\xcb\xd6\xeb\xc3\xcd\
+\xe7\xc6\xd0\xe8\xd6\xdd\xed\xc8\xd2\xe8\xe4\xe9\xf1\xeb\xef\xf3\
+\xd7\xdf\xee\xd3\xda\xec\xe4\xea\xf2\xd0\xd9\xed\xd2\xda\xed\xca\
+\xd6\xec\xc2\xce\xe7\xf5\xea\xdb\xf8\xec\xdd\xf7\xeb\xdc\x92s\
+\xa4\xd0\xbd\xc6\xfa\xef\xde\xcb\xd6\xec\x92u\xa4\xd1\xbd\xc6\
+\xcd\xd5\xea\xc3\xce\xe8\xe0\xe6\xf0\xd3\xdc\xed\xc5\xcf\xe8\xe2\
+\xe8\xf2\xcf\xd9\xed\x97{\xaa\xb1\xa9\xcb\xac\xa5\xc9\x95z\
+\xaa\xab\xa3\xc8\xc1\xcb\xe1\x93x\xa7\xb4\xc0\xd8\xa2\x9a\xbf\
+\xb2\xbd\xd7\x93w\xa7\xb9\xc5\xde\xaa\xb1\xcc\xac\xb7\xd0\xff\
+\xff\xff\x0b\x1c\x81T\x00\x00\x00#tRNS\x00\x8f\
+\xfc\xfd\x8e\xfc\xfb\x05\xb6\xb6\x06\xb8\xf4\xf5\xbba\xf9\xf5\
+\xba\xb8\xf5\xbf\x07\xb7\xb6\xb9\xf5\xbe\xba\xb5\xfd\xfc\xb1\xfe\
+\xb0c\xd5%\x08\x00\x00\x00\x01bKGDY\x9a\xb2\
+\xf4\x18\x00\x00\x00\x07tIME\x07\xe4\x01\x07\x007\
+\x14kk\x96t\x00\x00\x013IDAT8\xcb\xad\
+\x93W[\xc20\x18\x85\xab\xa8A\xa5\xee\xbd1\xa65\
+\xb6\xee\x8dUP\x01QAPP\xfc\xff\xbf\xc4|\x19\
+5\xa3wz.rs\xde\x9co\xe4\x89\xe7\xfd\x83\x06\
+\x06\xb1\xa5\xdc\x90\x01\x0c\xef\x10\xa9 \x0c\x03\xb2K\xe9\
+\xde\x88\x01`\xe5Gq\x1c\x81\xbf\x7f\x803\x81_?\
+r\x81\xc3#\xdd\x8f\x1d\xe0\xf8\xe4\xf4L\xf3\xa9\x9bp\
+~q\xa9\xf9\x19@t\xa5\xfb.\xa0\xd7\xa7\x02@\xf9\
+\xd1\xb1\x14P\xf3_\x97\x82\x90\x0a\x00\x8d\x17\xfc\x09I\
+`\xfb>eSLN\xdd$\xd33\x82\xc0\x8e\xcf\xf6\
+\x80f\xe7n\x13\x7f~A\x00\xc2\xbf\xb3^\xa4\x5c\x91\
+\x19\x98\xd7\xbf/\xe1\x8a\xa3\xc4_\xe4M\xca\xfdf\x01\
+K\x00\xc8\xfa\x0fV\x89GVb\x19\x01\x00\xf9r>\
+6.\x08\x9a\x5caM\xae\x8a&\xf5\xfe\x89\x04\xf8\x98\
+\xfc>\x03\x0c\xbfZ\x95\x09\x05\x7f\x0d\xc9E\xe9\xf9\xb5\
+z\xbd\x06\x80\x87\xd6\xf3\xc8K7I\xe9\x93\xcao4\
+x\x82\xf1X\xe0?\xbf\xa8\xfa\xc4\x05 \xde\xf0\xb3\x00\
+\xc3w\x80W\xdal\x917\xd2n\xab\xc3\x02:\xef\x1f\
+\xddn\xef\xb3\x97\x1e_&\xb0\xd1\xff\xb6\xd4\xdf4\x80\
+\xad\xa2\xfd\xf5\x8a\xdb\x7f\xfa\xcb\x96~\x00\xc4Fm\x1c\
+q\x94\x90\xba\x00\x00\x00%tEXtdate\
+:create\x002019-11-\
+14T21:30:38+00:0\
+0-z\x13x\x00\x00\x00%tEXtdat\
+e:modify\x002019-07\
+-15T18:11:24+00:\
+00M\xa4\x9d&\x00\x00\x00\x00IEND\xaeB\
+`\x82\
+\x00\x00\x03\xe2\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\
+\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\
+\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\
+\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\
+\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x01G\
+PLTEGpL\x80\x80\xaa\x92t\xa3\x91q\xa2\
+\x8em\xa0\x8fn\x9e\x91r\xa2\xa4\x90\xb4\x8fn\xa0\x99\
+f\x99\x92q\xa1\xa3\x8d\xb4\x92r\xa2\xa4\x90\xb5\x90p\
+\xa1\x94k\xa1\x8em\xa0\x8cn\xa0\x8aj\x9f\x84\x8b\xa5\
+\x8dm\xa0\x90o\x9b\x85\x8a\xa4\x8cn\xa0\x92m\x92\x8c\
+r\xa0\x8cl\xa1\x8bp\xa0\x8dk\x9f\x8fm\x9f\x83\x8b\
+\xa4\x8dn\xa0\xa1\x84\xae\x8fn\xa0\x87\x8d\xa5\x8cm\xa0\
+\x8fp\xa3\x8cq\xa1\x8dl\x9f\xfa\xef\xde\xfc\xf2\xe5\xff\
+\xf7\xee\xfb\xf1\xe1\xff\xf7\xf0\xfd\xf4\xe9\xf3\xe7\xdd\xbb\xdb\
+\xf6\xff\xf7\xef\xfb\xf0\xe2\xfb\xf1\xe2\xff\xf6\xef\xbb\xde\xf9\
+\xfc\xf6\xed\xfc\xf3\xe8\xbb\xdc\xf7\xb8\xd5\xf2\x8fo\xa2\xfe\
+\xfd\xfa\xff\xfb\xf7\xfc\xf4\xe7\x8fn\xa1\xb8\xa9\xc1\xff\xf8\
+\xf1\xfb\xf1\xe3\xfe\xfc\xf8\xff\xfd\xfc\xff\xf8\xf3\xfc\xf3\xe6\
+\xff\xfd\xfb\xff\xf8\xf2\x9e\x7f\xa9\x9e\x80\xab\x9d\x7f\xa9\xff\
+\xf6\xf0\x9d\x7f\xa8\xd7\xc6\xd3\xf5\xea\xe4\xf8\xec\xdd\xdb\xca\
+\xcc\x9b\x82\xa9\xda\xca\xcc\xf3\xe8\xe2\x90r\xa1\x8fq\xa1\
+\x8fu\xa2}\xa4\xa8\xbb\xa4\xb9\x89\x8f\xa7t\xc5\xaes\
+\xc4\xaer\xca\xaf\xff\xf9\xf4\xf5\xeb\xe4\x91s\xa2u\xbd\
+\xadv\xbc\xac\xff\xf7\xf1\xff\xfc\xf9t\xc6\xae|\xa4\xa9\
+\xce\xbb\xcd\xcd\xba\xc9\xcb\xb7\xc3\xf7\xec\xdd\xf7\xed\xea\xf1\
+\xe4\xd9\x90q\xa1s\xc6\xae\xff\xff\xff\xb9p\xe8\xbe\x00\
+\x00\x00&tRNS\x00\x06\x96\xf6\xfb\x86\xb7\xf7\xfc\
+\x05\xb6\xf7\x96\xf7\xf6\x13\xfe\xf6\x18\xf4\x93\x17\xf4\xf9\x07\
+\xf6I\xdcJ\xfd\xf5\xf6\xa0\xfd\xfa\x94\x19\xdb\xae+\xb7\
+l\x00\x00\x00\x01bKGDl\xcc\x010;\x00\x00\
+\x00\x07tIME\x07\xe4\x01\x07\x007\x14kk\x96\
+t\x00\x00\x01fIDAT8\xcb\x8d\x93\xe9W\x82\
+@\x14\xc5\xb1}'*#\xccl\x9fA\xa1\xc5h\xdf\
+\xcc\xca(\xcb\xa5\xd4\x04*\xb3\xd46\xff\xff\xef\xc10\
+\xc8\x0c\xe89\xdes\xe0\x03\xf7\xf7\xde\xbbo8\xc30\
+\xdd*\xd0\xd3\x0b(\xf5\xf5\xd3\xfe\xc0 \x80Hb4\
+&J\x92\x0c7\x86H\x7fxdt\xd3\x06\xc4\xadm\
+\xe4\xc7w\x80\xc7W\x00\xedK\xc0\xe3[\xc0\xee\x9e\xeb\
+\x93\xc0\xd8\xf8\xbe\xa2\x1c\x1c\xc2\xd8\xd11\xf2\xe3'\xa6\
+O\x02\x13V\xea\xd33(\x9e#?q\x91\xbc\xa4\x01\
+'?\xee\x7fu\x9dL\xb5\x03\xdc|)\xab\x81\x0f \
+\xf2\xdb\xf2\x007\xce\x09\xaa\x92j>>\xc0W\xef\x01\
+\xc4\xe8-p[\xf8\x816\xf5\x92L\x02\xf8\xff\xc4\xef\
+\x08\x1f\x92\x80Y\xaf\x02j\x86\x0c)\xa0M=\x0d\x98\
+_\xd2N\xfd\xbd\xe9?d\xb2\xb9<`\x09\x80\xce\xf7\
+\xf8T(\x96\x8a\x93\xdcT\x0b\xf0\xf8\xcfeM7t\
+mz&\xd8:\x074\xff\xc5\xf6_\xdf\xca\x15\xc3\xd2\
+\xfb,\x87\xa7\x00T_\xfd\xa8\xa2|\x99\x82f\xd8\xfa\
+\xe4\xe70@\xe5\xcf\x16u\x0chB\xa8\xb5\x05\xb1_\
+\xaed8\xaa\xcd;\x80*\xd5\xeb\xd6\xab\x01\xd30O\
+t\x08{\x80\xc6\x97\x09|\xfb3,\xfc\xb8\xe7\x07\xe1\
+\xef\x1f\xde\xa2\x12Y\xc4[,-\xd3\xb7\x0e\xac45\
+CoFV\xd7:\xdc\xd3 \xc7\x0b5\x81\xe7:\xf9\
+\x0c\xc3\x06B\xeb\xe1\x00\xcbt\xa3\x7f\x90\xb4\x83\xa9\xe1\
+\xcf\xeb\xaf\x00\x00\x00%tEXtdate:\
+create\x002019-11-1\
+4T21:30:38+00:00\
+-z\x13x\x00\x00\x00%tEXtdate\
+:modify\x002019-07-\
+15T18:11:24+00:0\
+0M\xa4\x9d&\x00\x00\x00\x00IEND\xaeB`\
+\x82\
+\x00\x00\x03G\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\
+\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\
+\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\
+\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\
+\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x01\x1a\
+PLTEGpL\x90r\xa4\x8el\x9f\x8fo\xa1\
+\x91r\xa5\x80\x80\xaa\x8el\xa0\x9a\x85\xb2\x8eo\xa2\x9c\
+\x87\xb3\x8eq\xa1\x92m\x92\x8dn\xa1\x91q\xa3\x91r\
+\xa3\x8dl\x9f\xbe\xc7\xe2\xc2\xcd\xe7\xbb\xde\xf9\xc2\xe1\xfa\
+\xc9\xe4\xfb\xbc\xdf\xf9\xd7\xec\xfe\xde\xf0\xff\xd9\xed\xfe\xbd\
+\xdf\xf9\xc4\xe3\xfb\xde\xef\xff\xbe\xc5\xe1\xbe\xdf\xf9\xcd\xe7\
+\xfc\xd1\xe9\xfd\xdd\xef\xff\xc1\xe1\xfa\xbf\xe0\xfa\xdb\xee\xff\
+\xb4\xab\xca\x91q\xa1\xb5\xab\xca\xc1\xcb\xe5\xbc\xde\xf9\xce\
+\xe8\xfc\xc9\xe6\xfb\xc7\xe4\xfb\xd7\xed\xfe\x90o\xa0\xee\xd9\
+\x9c\x90p\xa1\xcb\xe7\xfc\xc0\xe0\xfa\xc3\xe2\xfa\xff\xeb\x9b\
+\xd6\xec\xfe\xc0\xcb\xe6\xda\xee\xfe\xd5\xeb\xfd\xbb\xdf\xf9\xca\
+\xe6\xfc\xbd\xc4\xe1\xd6\xeb\xfe\xbe\xe0\xf9\xc3\xe3\xfa\x8fo\
+\xa1\xd0\xe8\xfd\xc2\xe2\xfa\xbe\xe0\xfa\xda\xef\xfe\x91r\xa2\
+\xa6\xa4\xc7\x8fn\xa1\xd8\xe6\xf8\xd7\xeb\xfe\xd1\xea\xfd\xb8\
+\xd5\xf2\x8eo\xa2\xaa\x9f\xc5\x8en\xa1\xa6\x9c\xc2\xa8\x9c\
+\xc2\x8fn\xa0\xa9\x9c\xc2\xf2\xe6\xd9\xfa\xef\xde\xf2\xe5\xd9\
+\xed\xa3\xa1\xeb\x96\x97\x9d\x7f\xa8\xcb\xb7\xc3\xf2\xe0\xc8\x9c\
+{\xa4\xef\xd8\xbe\xc5\xaa\xb1\xbf\xc6\xe2\xff\xff\xffSw\
+\x1fW\x00\x00\x00\x0ftRNS\x00\x8f\xfc\xf6\x96\x06\
+\xfc\xf1\xb7\xf2\xbc\x07\xfb\x8e\x8d\xdc\x9b\x9e\xcf\x00\x00\x00\
+\x01bKGD]\x9d\xdf0\x01\x00\x00\x00\x07tI\
+ME\x07\xe4\x01\x07\x007\x14kk\x96t\x00\x00\x01\
+\x0fIDAT8\xcb\xbd\xd3\xd9R\xc20\x14\x06`\
+\x14,\xee\xc7D\xf0W\xdcjU,*\xb8#n\xe0\
+\x86\xbbVk\x15,\xbc\xffs\xd8t\x1cI\x9b\x5c\xb8\
+\xcc\xf0_d2'\xdf\x9c\xc92I$\xba\x92\x9e^\
+R\x92L\xf5u\x801\xc6\x18q>\x9e\xc9N`r\
+*7\x0d\x80f\xd2\xfd\x1dAL\x80\xd99>\x0fs\
+\xc1Z\x5cZ\xce\x83\xd8\xca\xc0\xe0P\x04\xd8\x05{\x15\
+X\xb3\xd7Q,m\x04@\x16!\xd8\xdc\xda6Q\x08\
+\x9a\x80vhW\x94\xf6\xd2)\x19\xe4\xac2\xf6+\x07\
+\x08\x81%J\xec0)\x83\xca\x11\xca\xc7'b\x83\xc5\
+R\x95\x87\x80\x91\x0cj0O\xcf\xce\x83u\xe4/.\
+5\xa0~\x85L\xf6Z\xac\xe3\x86\xf3\xdb;\x05\xdc\xd7\
+\xe5kzxT\x806\xbf\x02ON\xf4-\x9c\xe7\x18\
+p^\xdcH^\xab\xf1c\xba\xb1\x90\x0a\xbc\xb70^\
+0\xf1\xb4\xe0\xa7\x1dD\x0f\xf7o\x1d\xfe\x0d\xde\xddF\
+C\x1a\x14\xd0\xfc\xf0[-\xff{h*\xc0\x8fE\x06\
+F[\x0f\xda\xc3_`\xc4 m\x8c\xd1\xee|\xdcO\
+b\xe8h\xa5Q\xd4)\x01\x00\x00\x00%tEXt\
+date:create\x002019\
+-11-14T21:30:38+\
+00:00-z\x13x\x00\x00\x00%tEX\
+tdate:modify\x00201\
+9-07-15T18:11:24\
++00:00M\xa4\x9d&\x00\x00\x00\x00IE\
+ND\xaeB`\x82\
+\x00\x00\x02\xbb\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\
+\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\
+\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\
+\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\
+\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\xc3\
+PLTEGpL\xff\x00\xff\x8cq\x9f\x8br\x9f\
+\x8cn\x9f\x8at\x9f\x8bn\x9f\x89t\xa1\x87~\xa2\x8a\
+t\x9f\x8dm\x9d\x8au\xa0\x8el\x9f\x8dk\x9f\x82\x92\
+\xa5\x82\x91\xa5\x8cl\x9e|\x8a\x9e{\x8a\x9e\x8aq\x9f\
+\x8bq\xa0\x8cp\x9e\x84z\x9e\x85z\x9e\x8bo\x9f\x8c\
+n\x9e\x8ao\xa0\x8dl\x9f\x8cl\x9f\x8br\xa0\x8cq\
+\xa0\x8cn\xa0\x8cn\x9f}\xa1\xa8\x8bk\x9e\x8cr\xa1\
+\x8cs\x9f\x8bp\xa0\x8dq\xa0\x8cp\xa0\x8co\x9f\x8d\
+m\x9f\x8at\xa0\x89v\x9fx\xb5\xabs\xc6\xaes\xc4\
+\xaer\xca\xaf]\xbc\x9d`\xb6\x9eh\xa9\x9e`\xb8\x9d\
+\x8dl\x9ft\xc4\xaeu\xc3\xaey\xb3\xabu\xbe\xads\
+\xc8\xaf}\xa2\xa8\x8ay\xa1`\xbe\x9fq\x9a\x9e\x86w\
+\x9fa\xb6\x9d\xff\xff\xff\xbe\xa83/\x00\x00\x00,t\
+RNS\x00\x01j\xed\xfd\xecr\x9a\xfc\x98/\xfb-\
+r\xfe\xfeq\xf5\xf4\xf5\xf4\x9b\xf3\xf3\x9ad\xe3\xfco\
+\x8f\x8e\xfb\xee\xfe7\xa8\xd0\xec\xfa\xfa\xef\xfd\x96\x95\xe7\
+\x83\x7fy\x00\x00\x00\x01bKGD@\xfe\xd9\x5c\xd8\
+\x00\x00\x00\x07tIME\x07\xe4\x01\x07\x007\x14k\
+k\x96t\x00\x00\x00\xbdIDAT8\xcb\xed\xd1\xd7\
+\x0e\x820\x14\x80\xe1\xa2\xa8\x08\xee-8X\x8a(R\
+\xc0*C\x90\xf7\x7f+%\x12$\x81\xd6q\xed\x7f\xd1\
+\x9b~\xe9I[\x00\xbe\x89\xaaT\xe9Z\x9d\xc2\x83\x06\
+c\x1c\x0d\xa6\x89\xddg9\x13Bhr-\x1chw\
+`R\xb7\x87\x05}+i\x80\x05\xec\xd0~\xec\xdb#\
+\xec\x080\x9e8'g:#\xdcs\xce\x0b\xfc\x82p\
+MbK\x01\xa5\x09\xabR \x9ca\xdae]\x0a\x10\
+\xccB\xbf\x01Qr=\x9f\x04dE\xddlI 7\
+\xe6\x0f\xde\xbd\xa4\xf6\x04\xdaFU\xe4\x02\xd8\xbd\xfe\xc2\
+\xf7\x5cI,9>\x08\xe05[\x8acP\x18E\xd6\
+\xcdJ\x97\xb0\x08\xf4\xd8\xca\x15\xd3\x05\xb0\xd7Q.\xfd\
+\x00>\xed\x0ehs3\x98p\xeef\x9d\x00\x00\x00%\
+tEXtdate:create\x00\
+2019-11-14T21:30\
+:38+00:00-z\x13x\x00\x00\x00\
+%tEXtdate:modify\
+\x002019-07-21T07:5\
+8:48+00:00=s\x85\xdd\x00\x00\
+\x00\x00IEND\xaeB`\x82\
+\x00\x00\x025\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x10\x00\x00\x00\x0c\x08\x03\x00\x00\x00\x5c9\xcd\xb3\
+\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\
+\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\
+\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\
+\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00{\
+PLTE\xff\xff\xff\xb2\xda\xb51\xd0?.\xd0<\
+7\xd2E\xad\xec\xb2\xe1\xf8\xe3\xa6\xeb\xac4\xd1B\x89\
+\xe4\x91U\xd8`\xa0\xe9\xa6\xeb\xfa\xeco\xdeyv\xe0\
+\x7f\xf2\xfc\xf2\x93\xe6\x9a\xe5\xf9\xe6|\xe1\x85\xdb\xf6\xdd\
+\x96\xe7\x9d\xca\xf3\xce\xb0\xed\xb6\xff\xff\xff\xcb\xf3\xce\x7f\
+\xe2\x88\xde\xf7\xe0\xb4\xee\xb9\xc4\xf1\xc8\xba\xef\xbfr\xdf\
+|\xfb\xfe\xfc\xd1\xf4\xd4\xd8\xf6\xda\xf8\xfd\xf9b\xdbl\
+\xb7\xef\xbcR\xd8];\xd3Hb\xdcmh\xddr\x00\
+X\x0c}\x00\x00\x00\x01tRNS\x00@\xe6\xd8f\
+\x00\x00\x00\x01bKGD\x00\x88\x05\x1dH\x00\x00\x00\
+\x09pHYs\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7o\
+\xa8d\x00\x00\x00\x07tIME\x07\xe4\x01\x07\x007\
+\x14kk\x96t\x00\x00\x00qIDAT\x08\xd7]\
+\xce\xd1\x0e\x820\x0c\x05\xd0\xb2\xab\xa0\xa2\xe0\x809`\
+\xc8\x00\x19\xf2\xff_h%3\x994i\x9a{\xda\x87\
+\x12E\x02a\xed3\x88\xf3\xe1\x18\xc7\xc9\x09\xe7\xcb\x06\
+\xdc\xe9\xf5\x96\xe5w\xc8\xe2\x07e\x05$\xea\xa1u\xed\
+\xe1\xbb\xaadp!\x1b\x866\x00e\x80\xee\x19@o\
+\x87qz\xa1\xcbg\x0fpEj\x1d\x96\xb7\x03\x04\xf9\
+\x7f\xcc\xba\x0d\x11\xd1\xdf\x9b\x9c?>\xbe\x06\x7fR \
+a\x1c\x00\x00\x00%tEXtdate:c\
+reate\x002019-11-14\
+T21:30:38+00:00-\
+z\x13x\x00\x00\x00%tEXtdate:\
+modify\x002019-06-1\
+3T12:59:26+00:00\
+\xc7\x190\xe3\x00\x00\x00\x18tEXtSoft\
+ware\x00paint.net 4\
+.1.6\xfdN\x09\xe8\x00\x00\x00\x00IEND\
+\xaeB`\x82\
+\x00\x00\x02\xbf\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\
+\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\
+\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\
+\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\
+\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00~\
+PLTE\xff\xff\xff\x80\x80\xaa\x93s\xa2\x8dl\x9f\
+\x8fn\xa0\x8fn\x9e\xa7\x92\xb3\xfa\xef\xde\xfc\xf2\xe6\xff\
+\xf7\xf0\xfb\xf1\xe2\xfd\xf4\xe8\xf3\xe8\xde\x99f\x99\xba\xde\
+\xf9\xff\xfd\xfb\xb2\xdc\xf7\xff\xfa\xf6\xb3\xae\xc7\xff\xff\xff\
+\x85\xcb\xf8\xe7\xf5\xfe\x95\xd2\xf9\xef\xf8\xfe\xbf\xe4\xfb\xda\
+\xef\xfd\xc4\xe6\xfc\x88\xcc\xf8\xed\xf7\xfe\x8cr\xa0\x8co\
+\x9fr\xca\xaf\x86\xcc\xf8\x9b~\xa9\xf7\xec\xdd\x87\x8a\xa4\
+s\xc6\xaes\xc8\xaf|\xa7\xa9\x9f\x81\xac\xcd\xb9\xc8\xf7\
+\xed\xeaP\xc6\x9ah\x00\x00\x00\x01tRNS\x00@\
+\xe6\xd8f\x00\x00\x00\x01bKGD\x00\x88\x05\x1dH\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x00\x07tIME\x07\xe4\x01\
+\x07\x007\x14kk\x96t\x00\x00\x01\x1cIDAT\
+8\xcb\xad\xd3\xedn\x83 \x18\x05`\x15\x06E7\xa4\
+\x15\xf1\x93Yu\xb6\xee\xfeo\xb0\x80\x9d\x02cK\x96\
+\xec\xfcP\x93\xf3\xc8\x8bQ\xa3\xe8\xbf\x12'\x09p\x02\
+_\xbc\x1e\x01lr\x22\xe9\x89\x90\x0c\xbfB\xbb\x7fK\
+\x10\x05N\x9f\x12\xe0\xf5\x06\xa4Go\x03\xd3k@\xf2\
+\xadOUo\x03\xd33\x88qv\xde\xee\xcf\xcf\x1e0\
+\xbb\xbe\xec\xf3I\x91\xbb\xc0\xdb\x7fJ\xf4\x02\xdf\x81\xb5\
+?\xe2\x83p,\xc0C\xf9+(\x85(9\xa5\x9c\x8b\
+\xaa\xa8D\x00\xd4MS\xf3\xb6U\x17-oi\x00t\
+}\xd5\x19\xc0\xca\x9a\x85FtU\xbf\x01\xce\xdaR\x09\
+\x09\xc0{x\x04U#ju\xff0\x00\x074BT\
+\x9c\x16E\xaf6\xd9\x8b\x00P\xb9:\x0f\x19\x00\xfcg\
+\xe0ed\x17\xa6A\x0c\xe2'\xf8z?:\x19\xc6\x13\
+\x92H\x03)\xe5&\x80\xdbc4\x7f\xcc\x1a\xa8\x93\xf4\
+\x81\xee\x15X\x96\xdb0\xdc\x96e\x07w\xb2\xae\xe6\x80\
+G\xbc\xae\x13\x9c\x97AE\xf5q\x10\xe0\x11i\xb1\xf7\
+\x11\xfc\xb4\xd67\x99\xf4\x94\xbd\x8f\xee0\xf0=\xcdG\
+\x1f\xfeW\xe5\xef\xfd\x91\x07\x10E&Q3\xe4w@\
+\x00\x00\x00%tEXtdate:cre\
+ate\x002019-11-14T2\
+1:30:38+00:00-z\x13\
+x\x00\x00\x00%tEXtdate:mo\
+dify\x002019-08-15T\
+00:24:44+00:00p\x93\
+\x9d1\x00\x00\x00\x00IEND\xaeB`\x82\
+"
+
+qt_resource_name = b"\
+\x00\x05\
+\x00M\x843\
+\x00I\
+\x00C\x00O\x00N\x00S\
+\x00\x08\
+\x08D?\xf0\
+\x00I\
+\x00C\x00O\x00N\x00_\x00A\x00P\x00P\
+\x00\x09\
+\x04D\xdf\x9e\
+\x00I\
+\x00C\x00O\x00N\x00_\x00O\x00P\x00E\x00N\
+\x00\x09\
+\x04D\xf2\xe4\
+\x00I\
+\x00C\x00O\x00N\x00_\x00Q\x00U\x00I\x00T\
+\x00\x08\
+\x08DK\x07\
+\x00I\
+\x00C\x00O\x00N\x00_\x00N\x00E\x00W\
+\x00\x09\
+\x04D\xed\xa5\
+\x00I\
+\x00C\x00O\x00N\x00_\x00S\x00A\x00V\x00E\
+\x00\x0a\
+\x04<\xc4$\
+\x00I\
+\x00C\x00O\x00N\x00_\x00A\x00B\x00O\x00U\x00T\
+\x00\x0c\
+\x0fT\x9b?\
+\x00I\
+\x00C\x00O\x00N\x00_\x00Q\x00T\x00_\x00L\x00O\x00G\x00O\
+\x00\x0b\
+\x036\x5c\xf4\
+\x00I\
+\x00C\x00O\x00N\x00_\x00E\x00X\x00P\x00O\x00R\x00T\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x08\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x15{\
+\x00\x00\x01o}\x7f\xb8\xc0\
+\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x10\x83\
+\x00\x00\x01o}\x7f\xb8\xc0\
+\x00\x00\x00&\x00\x00\x00\x00\x00\x01\x00\x00\x02\xd1\
+\x00\x00\x01zJ.\xae4\
+\x00\x00\x00l\x00\x00\x00\x00\x00\x01\x00\x00\x0d8\
+\x00\x00\x01o}\x7f\xb8\xc0\
+\x00\x00\x00>\x00\x00\x00\x00\x00\x01\x00\x00\x05\xdb\
+\x00\x00\x01o}\x7f\xb8\xc0\
+\x00\x00\x00\x10\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01zJ\xa3d\xd2\
+\x00\x00\x00V\x00\x00\x00\x00\x00\x01\x00\x00\x09R\
+\x00\x00\x01o}\x7f\xb8\xc0\
+\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x13B\
+\x00\x00\x01o}\x7f\xb8\xc0\
+"
+
+def qInitResources():
+ QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/src/img/icons.qrc b/src/img/icons.qrc
new file mode 100644
index 0000000..82f0653
--- /dev/null
+++ b/src/img/icons.qrc
@@ -0,0 +1,13 @@
+
+
+ icons8-clear-symbol-16.png
+ icons8-copy-16.png
+ icons8-eraser-16.png
+ icons8-insert-clip-16.png
+ icons8-append-clip-16.png
+ icons8-paste-16.png
+ icons8-scissors-16.png
+ icons8-add-row-16.png
+ icons8-delete-16.png
+
+
diff --git a/src/main.py b/src/main.py
index 5e9d4f4..5b53dff 100644
--- a/src/main.py
+++ b/src/main.py
@@ -15,13 +15,14 @@ import configparser
# Third party imports
from PySide2.QtWidgets import QApplication, QMainWindow, QTableWidgetItem, QStatusBar, QFileDialog, \
- QAbstractItemView, QMenu, QMessageBox, QHBoxLayout, QVBoxLayout, QAction, QActionGroup, QSizePolicy
+ QAbstractItemView, QMenu, QMessageBox, QHBoxLayout, QVBoxLayout, QSizePolicy, QAction, QActionGroup
from PySide2.QtGui import QIcon, QColor
from PySide2.QtCore import QFile, QSize, Qt, QCoreApplication, QTranslator
from PySide2.QtUiTools import QUiLoader
import xlsxwriter
# Local imports
+import icons_rc
from utils import show_about, resource_path, str_iff, fit_col_widths, convert_uom_to_length, convert_uom_to_mass, \
optimizeTableLayout, table_has_items
@@ -29,7 +30,7 @@ from utils import show_about, resource_path, str_iff, fit_col_widths, convert_uo
from clsTableWidget import TableWidget
# Local globals
-APP_VERSION = "v0.7"
+APP_VERSION = "v0.7.2"
DIR_CURRENT = os.getcwd()
@@ -42,17 +43,7 @@ APP_WEBSITE = "https://gitlab.com/ProfP303"
APP_DESKTOPFILENAME = APP_DISPNAME
APP_INI_FILE = os.path.join(DIR_CURRENT, APP_DISPNAME + '.ini')
-APP_ICON = "./img/icons8-garage-32.ico"
-
-ICON_NEW = "./img/icons8-new-file-32.png"
-ICON_OPEN = "./img/icons8-opened-folder-32.png"
-ICON_SAVE = "./img/icons8-save-32.png"
-ICON_EXPORT = "./img/icons8-export-xls-32.png"
-ICON_ABOUT = "./img/icons8-information-32.png"
-ICON_QUIT = "./img/system-shutdown.png"
-ICON_QT_LOGO = "./img/qt_logo_small.png"
-
-UI_MAIN = "./ui/main.ui"
+UI_MAIN = "./ui/win_main.ui"
DEFAULT_GARAGE_LENGTH = "6"
DEFAULT_GARAGE_WIDTH = "2,5"
@@ -115,7 +106,7 @@ def main():
qApp.description = APP_DESCR
qApp.copyright = APP_COPYRIGHT
qApp.website = APP_WEBSITE
- qApp.setWindowIcon(QIcon(resource_path(APP_ICON)))
+ qApp.setWindowIcon(QIcon(u":ICONS/ICON_APP"))
qApp.setDesktopFileName(APP_DESKTOPFILENAME)
print("Current dir:", DIR_CURRENT)
@@ -257,13 +248,27 @@ class MainWindow(QMainWindow):
self.ui.lblVol_Free.setText(QCoreApplication.translate("main","Free space in the garage") + ":")
self.ui.lblWeight.setText(QCoreApplication.translate("main","Total weight") + ":")
- # Tooltips
- self.actionNew.setToolTip(QCoreApplication.translate("main","New (Ctrl+N)"))
- self.actionOpen.setToolTip(QCoreApplication.translate("main","Open... (Ctrl+O)"))
- self.actionSave.setToolTip(QCoreApplication.translate("main","Save (Ctrl+S)"))
- self.actionExport.setToolTip(QCoreApplication.translate("main","Export to EXCEL..."))
- self.actionAbout.setToolTip(QCoreApplication.translate("main","Information about the application"))
- self.actionQuit.setToolTip(QCoreApplication.translate("main","Quit the application (Strg+Q)"))
+ # Translate actions
+ self.ui.actionNew.setText(QCoreApplication.translate("main","New"))
+ self.ui.actionNew.setToolTip(QCoreApplication.translate("main","New"))
+
+ self.ui.actionOpen.setText(QCoreApplication.translate("main","Open") + "...")
+ self.ui.actionOpen.setToolTip(QCoreApplication.translate("main","Open") + "...")
+
+ self.ui.actionSave.setText(QCoreApplication.translate("main","Save"))
+ self.ui.actionSave.setToolTip(QCoreApplication.translate("main","Save"))
+
+ self.ui.actionExport.setText(QCoreApplication.translate("main","Export to EXCEL..."))
+ self.ui.actionExport.setToolTip(QCoreApplication.translate("main","Export to EXCEL..."))
+
+ self.ui.actionAbout_Qt.setText(QCoreApplication.translate("main","About Qt"))
+ self.ui.actionAbout_Qt.setToolTip(QCoreApplication.translate("main","About Qt"))
+
+ self.ui.actionAbout.setText(QCoreApplication.translate("main","Information about the application"))
+ self.ui.actionAbout.setToolTip(QCoreApplication.translate("main","Information about the application"))
+
+ self.ui.actionQuit.setText(QCoreApplication.translate("main","Quit"))
+ self.ui.actionQuit.setToolTip(QCoreApplication.translate("main","Quit"))
def load_ui(self):
global TableWidget
@@ -290,42 +295,26 @@ class MainWindow(QMainWindow):
layoutGb.addWidget(self.ui.tableStuff)
def create_actions(self):
- self.actionNew = QAction(QIcon(resource_path(ICON_NEW)), "&New")
- self.actionNew.triggered.connect(self.file_new)
- self.actionNew.setShortcut("Ctrl+N")
-
- self.actionOpen = QAction(QIcon(resource_path(ICON_OPEN)), "&Open...")
- self.actionOpen.triggered.connect(self.file_open)
- self.actionOpen.setShortcut("Ctrl+O")
-
- self.actionSave = QAction(QIcon(resource_path(ICON_SAVE)), "&Save")
- self.actionSave.triggered.connect(self.file_save)
- self.actionSave.setShortcut("Ctrl+S")
-
- self.actionExport = QAction(QIcon(resource_path(ICON_EXPORT)), "Export to EXCEL...")
- self.actionExport.triggered.connect(self.file_export)
-
- self.actionAbout_Qt = QAction(QIcon(resource_path(ICON_QT_LOGO)), "About Qt")
- self.actionAbout_Qt.triggered.connect(QApplication.aboutQt)
-
- self.actionAbout = QAction(QIcon(resource_path(ICON_ABOUT)), "About " + qApp.applicationDisplayName())
global APP_INI_FILE
- self.actionAbout.triggered.connect(lambda: show_about(APP_INI_FILE, self.opened_file))
- self.actionQuit = QAction(QIcon(resource_path(ICON_QUIT)), "Quit")
- self.actionQuit.triggered.connect(self.quit_app)
- self.actionQuit.setShortcut("Ctrl+Q")
+ self.ui.actionNew.triggered.connect(self.file_new)
+ self.ui.actionOpen.triggered.connect(self.file_open)
+ self.ui.actionSave.triggered.connect(self.file_save)
+ self.ui.actionExport.triggered.connect(self.file_export)
+ self.ui.actionAbout_Qt.triggered.connect(QApplication.aboutQt)
+ self.ui.actionAbout.triggered.connect(lambda: show_about(APP_INI_FILE, self.opened_file))
+ self.ui.actionQuit.triggered.connect(self.quit_app)
def create_menu(self, language=None, uom_length=None, uom_mass=None):
menuMain = self.menuBar()
menuFile = menuMain.addMenu(QCoreApplication.translate("main", "&File"))
- menuFile_New = menuFile.addAction(self.actionNew)
- menuFile_Open = menuFile.addAction(self.actionOpen)
- menuFile_Save = menuFile.addAction(self.actionSave)
+ menuFile_New = menuFile.addAction(self.ui.actionNew)
+ menuFile_Open = menuFile.addAction(self.ui.actionOpen)
+ menuFile_Save = menuFile.addAction(self.ui.actionSave)
menuFile.addSeparator()
- menuFile.addAction(self.actionExport)
+ menuFile.addAction(self.ui.actionExport)
menuFile.addSeparator()
- menuFile.addAction(self.actionQuit)
+ menuFile.addAction(self.ui.actionQuit)
self.menuSettings = menuMain.addMenu(QCoreApplication.translate("main", "&Settings"))
@@ -380,8 +369,8 @@ class MainWindow(QMainWindow):
[action.setChecked(True) for action in self.menuSettings_UOMs_Mass.actions() if action.text()==uom_mass]
self.menuHelp = menuMain.addMenu(QCoreApplication.translate("main", "Help"))
- self.menuHelp_About_Qt = self.menuHelp.addAction(self.actionAbout_Qt)
- self.menuHelp_About = self.menuHelp.addAction(self.actionAbout)
+ self.menuHelp_About_Qt = self.menuHelp.addAction(self.ui.actionAbout_Qt)
+ self.menuHelp_About = self.menuHelp.addAction(self.ui.actionAbout)
def create_statusbar(self):
self.statusBar = QStatusBar()
@@ -391,15 +380,15 @@ class MainWindow(QMainWindow):
# Main Toolbar (for all pages/views)
self.toolbar = self.addToolBar('Main Toolbar')
self.toolbar.setIconSize(QSize(32, 32))
- self.toolbar.addAction(self.actionNew)
- self.toolbar.addAction(self.actionOpen)
- self.toolbar.addAction(self.actionSave)
+ self.toolbar.addAction(self.ui.actionNew)
+ self.toolbar.addAction(self.ui.actionOpen)
+ self.toolbar.addAction(self.ui.actionSave)
self.toolbar.addSeparator()
- self.toolbar.addAction(self.actionExport)
+ self.toolbar.addAction(self.ui.actionExport)
self.toolbar.addSeparator()
- self.toolbar.addAction(self.actionAbout)
+ self.toolbar.addAction(self.ui.actionAbout)
self.toolbar.addSeparator()
- self.toolbar.addAction(self.actionQuit)
+ self.toolbar.addAction(self.ui.actionQuit)
def set_defaults(self):
tblGarage = self.ui.tableGarage
diff --git a/src/utils.py b/src/utils.py
index 2e91950..0062a81 100644
--- a/src/utils.py
+++ b/src/utils.py
@@ -10,17 +10,18 @@ import sys
import os
# Third party imports
-from PySide2.QtWidgets import QMessageBox, QApplication, QMainWindow, QTableWidgetItem, QStatusBar, QAction
+from PySide2.QtWidgets import QMessageBox, QApplication, QMainWindow, QTableWidgetItem, QStatusBar
from PySide2 import QtCore
from PySide2.QtGui import QIcon, QPixmap
from PySide2.QtCore import QFile, QSize, Qt
from PySide2.QtUiTools import QUiLoader
# local globals
-APP_ICON = "./img/icons8-garage-32.ico"
-
STD_COL_WIDTH: int = 7
+# local imports
+import icons_rc
+
def resource_path(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
try:
@@ -37,7 +38,7 @@ def show_about(ini_file="", opened_file=""):
qApp = QApplication.instance()
msg = QMessageBox()
- msg.setIconPixmap(QPixmap(resource_path(APP_ICON)))
+ msg.setIconPixmap(QPixmap(u":ICONS/ICON_APP"))
text = "" + qApp.applicationDisplayName() + " " + \
"
" + qApp.applicationVersion() + "
" + \
diff --git a/ui/dlg_uom.ui b/ui/dlg_uom.ui
index 711d806..bffa0be 100644
--- a/ui/dlg_uom.ui
+++ b/ui/dlg_uom.ui
@@ -11,13 +11,13 @@
- Dialog
+ UOM
-
-
-
+
Value:
@@ -31,7 +31,7 @@
-
-
+
UOM:
diff --git a/ui/main.ui b/ui/win_main.ui
similarity index 70%
rename from ui/main.ui
rename to ui/win_main.ui
index c4c02e8..9eeaba9 100644
--- a/ui/main.ui
+++ b/ui/win_main.ui
@@ -116,7 +116,7 @@
true
-
+
@@ -267,7 +267,99 @@
+
+
+
+ :/ICONS/ICON_NEW:/ICONS/ICON_NEW
+
+
+ &New
+
+
+ New
+
+
+ Ctrl+N
+
+
+
+
+
+ :/ICONS/ICON_OPEN:/ICONS/ICON_OPEN
+
+
+ &Open...
+
+
+ Open...
+
+
+ Ctrl+O
+
+
+
+
+
+ :/ICONS/ICON_SAVE:/ICONS/ICON_SAVE
+
+
+ &Save
+
+
+ Ctrl+S
+
+
+
+
+
+ :/ICONS/ICON_EXPORT:/ICONS/ICON_EXPORT
+
+
+ Export to EXCEL...
+
+
+ Export to EXCEL...
+
+
+
+
+
+ :/ICONS/ICON_QT_LOGO:/ICONS/ICON_QT_LOGO
+
+
+ About Qt
+
+
+
+
+
+ :/ICONS/ICON_ABOUT:/ICONS/ICON_ABOUT
+
+
+ Information about the application
+
+
+ Information about the application
+
+
+
+
+
+ :/ICONS/ICON_QUIT:/ICONS/ICON_QUIT
+
+
+ Quit
+
+
+ Quit
+
+
+ Ctrl+Q
+
+
-
+
+
+