Browse Source

update model, complete repos, basic tablewidget for music folders

olinox 4 years ago
parent
commit
91aa846bd1
7 changed files with 450 additions and 343 deletions
  1. 1 1
      core/constants.py
  2. 1 1
      core/models.py
  3. 10 10
      core/repositories.py
  4. 4 1
      core/track_index.py
  5. 55 1
      ui/qt/main_ui.py
  6. 325 325
      ui/qt/rsc_rc.py
  7. 54 4
      ui/window.py

+ 1 - 1
core/constants.py

@@ -12,4 +12,4 @@ SUPPORTED_EXTENSIONS = ('mp3', 'wma', 'flac')
 VLC_PATH = APP_ROOT / 'core' / 'vlc-core'
 
 # Db
-DB_PATH = APP_ROOT / 'data' / 'db.sqlite'
+DB_PATH = APP_ROOT / 'data' / 'default' / 'db.sqlite'

+ 1 - 1
core/models.py

@@ -6,7 +6,7 @@ class Model:
     def as_fields_and_values(self):
         fields, values = [], []
         for attr, val in self.__dict__.items():
-            if attr[0] == '_':
+            if attr[0] == '_' or val is None:
                 continue
             fields.append(attr)
             values.append(val)

+ 10 - 10
core/repositories.py

@@ -15,7 +15,7 @@ class Repository:
 
     def execute(self, sql, *parameters):
         cur = self.cnn.cursor()
-        cur.execute(sql, *parameters)
+        cur.execute(sql, parameters)
         return cur
 
     def get_by_id(self, id_):
@@ -27,21 +27,21 @@ class Repository:
 
     def get_all(self):
         cur = self.execute(f"SELECT * FROM {self.TABLE_NAME};", )
-        return [self.MODEL_CLS(**row) for row in cur.fetchall()]
+        return [self.MODEL_CLS(*row) for row in cur.fetchall()]
 
     def get_by(self, field, val):
         cur = self.execute(f"SELECT * FROM {self.TABLE_NAME} WHERE {field}=?;", val)
-        return [self.MODEL_CLS(**row) for row in cur.fetchall()]
+        return [self.MODEL_CLS(*row) for row in cur.fetchall()]
 
     def get_by_raw_sql(self, sql, parameters=None):
         parameters = parameters if parameters is not None else []
         cur = self.execute(sql, parameters)
-        return [self.MODEL_CLS(**row) for row in cur.fetchall()]
+        return [self.MODEL_CLS(*row) for row in cur.fetchall()]
 
     def create(self, model, commit=False):
         fields, values = model.as_fields_and_values()
         self.execute(
-            f"INSERT INTO {self.TABLE_NAME} ({', '.join(fields)}) VALUES (?);",
+            f"INSERT INTO {self.TABLE_NAME} ({', '.join(fields)}) VALUES ({', '.join(['?' for v in values])});",
             *values
         )
         if commit:
@@ -93,7 +93,7 @@ class TagRepository(Repository):
                 INNER JOIN TracksTags tt 
                     ON tt.tag_id = t.id
                 WHERE tt.track_id=?;""", track.id)
-        return [self.MODEL_CLS(**row) for row in cur.fetchall()]
+        return [self.MODEL_CLS(*row) for row in cur.fetchall()]
 
 
 class TrackRepository(Repository):
@@ -110,7 +110,7 @@ class TrackRepository(Repository):
                 INNER JOIN TracksTags tt 
                     ON tt.track_id = t.id
                 WHERE tt.tag_id=?;""", tag.id)
-        return [self.MODEL_CLS(**row) for row in cur.fetchall()]
+        return [self.MODEL_CLS(*row) for row in cur.fetchall()]
 
     def get_by_tags(self, tags):
         cur = self.execute(
@@ -119,7 +119,7 @@ class TrackRepository(Repository):
                 INNER JOIN TracksTags tt 
                     ON tt.track_id = t.id
                 WHERE tt.tag_id in ({', '.join(['?' for _ in tags])};""", *[tag.id for tag in tags])
-        return [self.MODEL_CLS(**row) for row in cur.fetchall()]
+        return [self.MODEL_CLS(*row) for row in cur.fetchall()]
 
     def get_by_session(self, session):
         cur = self.execute(
@@ -128,7 +128,7 @@ class TrackRepository(Repository):
                 INNER JOIN SessionsTracks st
                     ON st.track_id = t.id
                 WHERE st.session_id=?;""", session.id)
-        return [self.MODEL_CLS(**row) for row in cur.fetchall()]
+        return [self.MODEL_CLS(*row) for row in cur.fetchall()]
 
 
 class SessionRepository(Repository):
@@ -145,4 +145,4 @@ class SessionRepository(Repository):
                 INNER JOIN SessionsTracks st
                     ON st.session_id = t.id
                 WHERE st.track_id=?;""", track.id)
-        return [self.MODEL_CLS(**row) for row in cur.fetchall()]
+        return [self.MODEL_CLS(*row) for row in cur.fetchall()]

+ 4 - 1
core/discography.py → core/track_index.py

@@ -1,6 +1,9 @@
 from core import constants
 
 
-class Discography:
+class TrackIndex:
     def __init__(self):
         pass
+
+    def scan(self):
+        pass

+ 55 - 1
ui/qt/main_ui.py

@@ -96,10 +96,55 @@ class Ui_mainWindow(object):
         self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.page_5)
         self.horizontalLayout_5.setObjectName("horizontalLayout_5")
         self.verticalLayout_6 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_6.setContentsMargins(20, 20, 20, 20)
         self.verticalLayout_6.setObjectName("verticalLayout_6")
         self.label_5 = QtWidgets.QLabel(self.page_5)
         self.label_5.setObjectName("label_5")
         self.verticalLayout_6.addWidget(self.label_5)
+        self.musicFoldersTable = QtWidgets.QTableWidget(self.page_5)
+        self.musicFoldersTable.setMaximumSize(QtCore.QSize(16777215, 400))
+        self.musicFoldersTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
+        self.musicFoldersTable.setProperty("showDropIndicator", False)
+        self.musicFoldersTable.setDragDropOverwriteMode(False)
+        self.musicFoldersTable.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
+        self.musicFoldersTable.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
+        self.musicFoldersTable.setShowGrid(False)
+        self.musicFoldersTable.setCornerButtonEnabled(False)
+        self.musicFoldersTable.setObjectName("musicFoldersTable")
+        self.musicFoldersTable.setColumnCount(3)
+        self.musicFoldersTable.setRowCount(0)
+        item = QtWidgets.QTableWidgetItem()
+        self.musicFoldersTable.setHorizontalHeaderItem(0, item)
+        item = QtWidgets.QTableWidgetItem()
+        self.musicFoldersTable.setHorizontalHeaderItem(1, item)
+        item = QtWidgets.QTableWidgetItem()
+        self.musicFoldersTable.setHorizontalHeaderItem(2, item)
+        self.musicFoldersTable.horizontalHeader().setCascadingSectionResizes(True)
+        self.musicFoldersTable.horizontalHeader().setDefaultSectionSize(70)
+        self.musicFoldersTable.horizontalHeader().setStretchLastSection(True)
+        self.musicFoldersTable.verticalHeader().setVisible(False)
+        self.verticalLayout_6.addWidget(self.musicFoldersTable)
+        self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_7.setSizeConstraint(QtWidgets.QLayout.SetMinimumSize)
+        self.horizontalLayout_7.setObjectName("horizontalLayout_7")
+        self.musicFoldersRemoveButton = QtWidgets.QPushButton(self.page_5)
+        self.musicFoldersRemoveButton.setMinimumSize(QtCore.QSize(0, 32))
+        self.musicFoldersRemoveButton.setObjectName("musicFoldersRemoveButton")
+        self.horizontalLayout_7.addWidget(self.musicFoldersRemoveButton)
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout_7.addItem(spacerItem)
+        self.musicFoldersAddButton = QtWidgets.QPushButton(self.page_5)
+        self.musicFoldersAddButton.setMinimumSize(QtCore.QSize(128, 32))
+        self.musicFoldersAddButton.setObjectName("musicFoldersAddButton")
+        self.horizontalLayout_7.addWidget(self.musicFoldersAddButton)
+        self.verticalLayout_6.addLayout(self.horizontalLayout_7)
+        self.line = QtWidgets.QFrame(self.page_5)
+        self.line.setFrameShape(QtWidgets.QFrame.HLine)
+        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
+        self.line.setObjectName("line")
+        self.verticalLayout_6.addWidget(self.line)
+        spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+        self.verticalLayout_6.addItem(spacerItem1)
         self.horizontalLayout_5.addLayout(self.verticalLayout_6)
         self.stack.addWidget(self.page_5)
         self.mainLayout.addWidget(self.stack)
@@ -112,6 +157,7 @@ class Ui_mainWindow(object):
 
         self.retranslateUi(mainWindow)
         self.menu.setCurrentRow(-1)
+        self.stack.setCurrentIndex(4)
         QtCore.QMetaObject.connectSlotsByName(mainWindow)
 
     def retranslateUi(self, mainWindow):
@@ -121,5 +167,13 @@ class Ui_mainWindow(object):
         self.label_3.setText(_translate("mainWindow", "Page 2"))
         self.label_4.setText(_translate("mainWindow", "Page 3"))
         self.label.setText(_translate("mainWindow", "Page 4"))
-        self.label_5.setText(_translate("mainWindow", "Page 5"))
+        self.label_5.setText(_translate("mainWindow", "Mes dossiers de musique"))
+        item = self.musicFoldersTable.horizontalHeaderItem(0)
+        item.setText(_translate("mainWindow", "id"))
+        item = self.musicFoldersTable.horizontalHeaderItem(1)
+        item.setText(_translate("mainWindow", "Statut"))
+        item = self.musicFoldersTable.horizontalHeaderItem(2)
+        item.setText(_translate("mainWindow", "Emplacement"))
+        self.musicFoldersRemoveButton.setText(_translate("mainWindow", "Supprimer"))
+        self.musicFoldersAddButton.setText(_translate("mainWindow", "Ajouter"))
 from . import rsc_rc

+ 325 - 325
ui/qt/rsc_rc.py

@@ -225,315 +225,6 @@ qt_resource_data = b"\
 \x02\xa8\x38\x5e\x00\x15\xc7\x0b\xa0\xe2\x78\x01\x54\x1c\x2f\x80\
 \x8a\xf3\x7f\xf9\x65\x53\xdb\xbd\x33\x9c\xa3\x00\x00\x00\x00\x49\
 \x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x0b\x4c\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3\x3e\x61\xcb\
-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x03\x76\x00\x00\x03\x76\
-\x01\x7d\xd5\x82\xcc\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
-\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
-\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x0a\xc9\x49\x44\
-\x41\x54\x78\x9c\xed\x9d\x6b\xb0\x56\x55\x19\xc7\x7f\xcf\x01\x11\
-\x81\x09\x19\x81\x81\xc6\x71\x9a\x71\xa0\x12\xa8\x2c\x05\xb9\xa9\
-\x98\x23\x38\x69\x23\x98\xa5\xc4\x4c\x94\xd5\x68\x6a\x1f\x8a\xe8\
-\xa6\xd8\x45\x6a\xa6\xac\x66\x0a\xf3\x8b\x80\x4c\xa2\x91\xe9\x34\
-\x93\x33\x01\x51\x42\x83\x17\x64\xb8\x34\x60\xde\x26\xc3\x2e\x22\
-\x31\x72\x31\x88\x8b\x72\x9e\x3e\xac\x7d\xe4\x3d\xa7\x73\x78\xdf\
-\xbd\xf6\xb3\xf6\x5e\xef\x9e\xf5\x9b\x59\x9f\x60\x3d\xcf\x5a\xeb\
-\xf9\xbf\x7b\xad\xbd\xcf\x7a\xd6\x12\x55\xa5\x6e\x88\xc8\x00\x60\
-\x1e\x30\x17\x98\x01\x74\x78\x9a\xda\x0d\xac\x02\x96\xaa\xea\x4e\
-\xa3\xe6\x45\x85\xd4\x54\x00\xdf\x07\xbe\x66\x68\x72\x1f\x30\x5e\
-\x55\x77\x1b\xda\x8c\x82\xda\x09\x40\x44\x26\x02\x4f\x02\xfd\x8c\
-\x4d\x3f\xa6\xaa\x57\x1b\xdb\xac\x1c\xdf\x47\x63\xcc\x7c\x06\xfb\
-\xe0\x03\x5c\x25\x22\xa3\x02\xd8\xad\x94\x3a\x0a\x60\x7a\x9b\xda\
-\xae\x84\x5a\x09\x40\x44\x86\x03\xef\x0d\xe8\xe2\xe2\x80\xb6\x2b\
-\xa1\x56\x02\x00\xa6\x01\x12\xd0\x7e\x7a\x02\x44\x4e\xe8\x5f\xe8\
-\x04\x11\x39\x33\xb0\x8f\x52\xa9\x9b\x00\x42\xff\x42\x3b\x80\xa9\
-\x81\x7d\x94\x4a\x6d\x04\x20\x22\x43\x80\xf3\x4b\x70\x55\xab\x75\
-\x40\x6d\x04\x00\x4c\x21\xcc\xeb\x5f\x4f\x6a\xb5\x0e\xa8\x93\x00\
-\xca\xfa\x65\x5e\x20\x22\x67\x94\xe4\x2b\x38\xa5\x08\x40\x44\x3a\
-\x44\xe4\xec\xc0\x6e\xca\xfa\x65\x9e\x06\x5c\x14\xca\xb8\x88\x9c\
-\x21\x22\x23\x42\xd9\xef\x49\x50\x01\x88\x48\x3f\x11\xf9\x2c\xf0\
-\x3c\xf0\x0f\x11\xd9\x23\x22\xab\x44\x64\xac\xb1\x9f\xd3\x81\x89\
-\x96\x36\x9b\x60\x2a\xb6\x6c\x9c\x6e\x15\x91\xad\xc0\x1b\xc0\xbf\
-\x44\xe4\x7e\xeb\x71\xea\x15\x55\x0d\x52\x70\xf3\xf1\x03\x80\xf6\
-\x52\x8e\x01\xdf\x03\x06\x19\xf9\x9a\xd6\x87\x9f\x50\x65\x9d\xe1\
-\x38\x4d\x01\xb6\xf5\xe1\xe7\x00\x30\x29\x54\x8c\x54\x35\x8c\x00\
-\x9a\x04\xbf\xb1\xbc\x02\xcc\x31\xf0\xf7\xf5\x92\x05\x70\x08\xe8\
-\x5f\xb0\xcd\x23\x81\xe5\x40\x67\x13\x5f\x41\x45\x50\x65\xf0\x1b\
-\xcb\x6a\x60\x6c\x01\x9f\xbf\x2b\x59\x00\xea\x1b\x94\x6c\x7c\x6e\
-\x05\xf6\xe7\xf0\x15\x4c\x04\x31\x04\xbf\xab\x1c\x03\x16\x93\x73\
-\x5a\x00\x86\x00\x07\x2b\x10\xc0\x22\x8f\xf1\x99\x4c\xdf\x8f\xfb\
-\x4a\x44\x10\x4b\xf0\x1b\x4b\x4b\xd3\x02\x30\x0e\x58\x82\x5b\x34\
-\x95\x1d\xfc\xae\xb2\x09\x98\x0f\x0c\x6c\xd2\xd6\x11\xc0\x32\x9a\
-\x3f\xee\x4b\x17\x41\x6c\xc1\x6f\x2c\xab\x81\x31\x3d\xfc\x0c\x00\
-\xae\x07\x36\x54\x18\xf4\xde\xca\xeb\xc0\x8f\x7a\x69\x6f\x3f\xe0\
-\x16\xf2\x3d\xee\x4b\x15\x41\xac\xc1\xef\x2a\xc7\x80\xbb\x80\xf7\
-\xe0\xa6\x87\xd7\x22\x08\xf6\xa9\x4a\x27\xb0\x16\xb8\x06\xf7\x66\
-\xb2\x35\x90\x1f\x33\x11\x14\xda\x12\x26\x22\xfd\x80\x15\xc0\x27\
-\xbd\x8d\x24\x7c\x39\x08\xcc\x54\xd5\x4d\x45\x8c\x78\x7f\x08\x4a\
-\xc1\xaf\x9c\xa1\xc0\x1a\x11\x99\x54\xc4\x88\x97\x00\x52\xf0\xa3\
-\xa1\xb0\x08\xbc\xa6\x00\x11\xb9\x17\xb8\xc9\xd7\x69\xc2\x9c\x83\
-\xc0\x44\x55\x7d\x31\x6f\xc5\xdc\x4f\x00\x11\x39\x17\xf8\x5c\xde\
-\x7a\x89\xa0\x0c\x05\xbe\xe1\x53\xd1\x67\x0a\xb8\x8d\x72\xfe\xee\
-\x9e\xc8\xc7\x5c\x9f\xbf\x22\xfa\x08\xe0\x90\x47\x9d\x44\x78\x04\
-\x8f\xd8\xf8\x08\xe0\x19\x8f\x3a\x89\xf0\xec\x50\xd5\x23\x79\x2b\
-\xf9\x08\x60\x1d\xf0\x77\x8f\x7a\x89\xb0\x2c\xf3\xa9\xe4\xfb\x16\
-\x70\x2d\xf0\x6b\x1f\x87\x89\x20\x6c\x07\x2e\x50\xd5\x13\x79\x2b\
-\x7a\x7f\x09\x14\x91\x35\xc0\x15\x5e\x95\x13\x96\x28\x30\x4d\x55\
-\x9f\xf4\xa9\x5c\x64\x4b\xd8\x6d\xc0\xf1\x02\xf5\x13\x36\xac\xf0\
-\x0d\x3e\x14\x10\x40\xf6\xd1\xe1\x6e\xdf\xfa\x09\x13\x0e\x00\x5f\
-\x2d\x62\xa0\xe8\xa6\xd0\xc5\xa4\x05\x61\x95\xdc\xa1\xaa\xff\x2e\
-\x62\xa0\xf0\x01\x11\x22\x32\x07\x78\xa4\x90\x91\x84\x0f\xde\x0b\
-\xbf\x46\x4c\x4e\x08\x11\x91\xd5\xc0\xcc\xc2\x86\x12\xad\xa2\xc0\
-\x54\x55\x7d\xaa\xa8\x21\xab\xbc\x80\xb4\x20\x2c\x97\xfb\x2d\x82\
-\x0f\x46\x02\x50\xd5\x97\x48\x0b\xc2\xb2\x28\xbc\xf0\x6b\xc4\x32\
-\x33\x28\x2d\x08\xcb\xe1\x76\x55\xdd\x6b\x65\xcc\xf4\x94\x30\x11\
-\x99\x0d\x3c\x6a\x66\x30\xd1\x93\x6d\xc0\x85\x45\x17\x7e\x8d\x98\
-\x1f\x13\x27\x22\xeb\x80\x0f\x9b\x1a\x4d\x74\x31\x5d\x55\x37\x5a\
-\x1a\x0c\x91\x1c\x3a\x3c\x80\xcd\x84\xc3\x7c\x6c\x4d\x05\x20\x22\
-\x53\x80\xf7\x5b\xda\x4c\x74\xe3\x0b\xd6\x06\xad\x9f\x00\x37\x1b\
-\xdb\x4b\x74\xe7\x72\x11\x19\x63\x69\xd0\x6c\x0d\x90\x9d\xd1\xf7\
-\x4f\xe0\x74\x13\x83\x61\x38\x06\xbc\x88\x3b\x04\xfa\x55\x5c\xa2\
-\xc9\x10\x60\x74\x56\xde\x05\xbc\xb3\xaa\xc6\xb5\xc8\x8f\x55\xf5\
-\xcb\x66\xd6\xcc\x52\x8c\x60\x21\xd5\x67\xe6\xf4\x95\x45\xb3\x12\
-\xb8\x0e\x18\xd2\x42\x3f\x26\x00\x77\x00\x5b\x22\x68\x7b\x6f\xe5\
-\x75\x9a\xe4\x22\x96\x9a\x1a\x96\x0d\x5a\x07\xf0\x72\x04\x83\xd3\
-\x58\x0e\x01\xdf\x02\x06\x17\xe8\xd7\x14\xe0\x89\x08\xfa\xd2\xb3\
-\xcc\x8f\x4d\x00\x57\x46\x30\x28\x8d\xe5\x3e\x60\x94\xe1\xd3\x6d\
-\x0e\xb0\x2b\x82\x7e\x75\x95\x4d\x51\x08\x00\x38\x2b\x1b\x9c\xcd\
-\x11\x0c\x8a\x02\x47\x80\x79\x56\x83\xd3\xa3\xaf\xc3\x81\xc7\x23\
-\xe8\x63\x57\x59\x04\x5c\x08\xf4\x2b\xd2\xaf\x5c\x8b\x40\x11\x19\
-\x0a\x5c\x82\xbb\x85\x63\x06\xf0\x3e\xc2\x9e\xcd\x9b\x87\x57\x81\
-\xd9\xaa\x1a\x6c\xd7\xb2\x88\x9c\x06\xfc\x94\xb8\xb2\xa2\xfe\x83\
-\x9b\xa6\x36\x00\xeb\x81\x2d\xaa\xfa\x66\xab\x95\x4f\x29\x80\xec\
-\xf4\xcd\xe9\x9c\x0c\xf8\xf9\xc4\x99\x14\x72\x00\xb8\x48\x55\x5f\
-\x28\xc3\x59\xe4\xa9\x71\x87\x71\x17\x66\x6c\xc8\xca\x33\xaa\xda\
-\xe7\x5f\x6a\xbb\x09\x20\x3b\x00\x71\x2a\x27\x03\x7e\x21\xd0\x3f\
-\x64\x6b\x0d\x38\x01\x5c\xa5\xaa\xab\xcb\x72\x98\x3d\x09\xd6\x02\
-\x97\x96\xe5\xb3\x00\x47\x80\xa7\x39\x29\x88\xa7\x55\xf5\xe8\xdb\
-\xff\xda\x30\x97\x2f\xc7\xbd\x27\x57\x3d\xb7\xe5\x2d\x0b\x42\xcc\
-\xf9\x2d\xae\x09\x76\x45\xd0\xff\xbc\xe5\x68\x16\xeb\xb3\xba\x7e\
-\xfc\xe3\x81\xbd\x11\x34\xcc\xa7\x6c\x07\x3a\xaa\x10\x40\x36\x78\
-\x73\x22\x18\x03\xdf\xb2\x17\x18\xdf\x01\xdc\x48\xfb\xfe\x01\x67\
-\xa1\xaa\x76\x56\xe5\x5c\x55\x1f\xc5\xcd\xb7\xed\xc8\x70\xe0\x46\
-\xc1\xad\x9e\x47\x57\xdc\x18\x1f\xd6\xaa\x6a\xe5\xfb\x10\xb3\x3f\
-\x80\x3d\x51\x75\x3b\x3c\xd9\x2d\xb8\xc7\x41\x3b\xf2\x51\x55\xfd\
-\x6d\xd5\x8d\x00\x10\x91\x2d\xc0\x07\xab\x6e\x87\x0f\xed\x7a\x5c\
-\xfc\x61\xe0\xf7\x55\x37\xa2\x81\xdf\x54\xdd\x00\x5f\xda\x55\x00\
-\x6b\xba\xbd\xca\x54\x4f\x12\x40\xc9\x94\xf6\xce\xdf\x0a\xaa\xba\
-\x03\xb7\x96\x6a\x3b\xda\x55\x00\xbb\xaa\x6e\x40\x2f\xec\xaa\xba\
-\x01\x3e\xb4\xab\x00\x62\xbc\xc4\x39\xc6\x36\x35\x25\x09\xc0\x8e\
-\x18\xdb\xd4\x94\x76\x15\x40\x8c\x07\x55\xc5\xd8\xa6\xa6\xb4\xab\
-\x00\x62\xbc\xc5\x3b\xc6\x36\x35\xa5\x5d\x05\x10\xe3\xc6\xcd\x18\
-\xdb\xd4\x94\x76\x15\x40\x8c\x9f\xae\x63\x6c\x53\x53\xda\x55\x00\
-\x1f\xaa\xba\x01\x8d\x64\x1b\x67\xc2\x5f\xf1\x16\x80\x76\x15\xc0\
-\x35\x55\x37\xa0\x07\x57\x12\x77\x3e\x44\x9f\xb4\xab\x00\xce\xb3\
-\xce\x90\x29\x48\x6c\x82\x6c\x99\x0e\xdc\x35\x27\xed\xc8\x27\xaa\
-\x6e\x00\x80\x88\x0c\x06\x3e\x52\x75\x3b\x3c\xe9\xec\xc0\x6d\x75\
-\x6e\x47\xbe\x24\x22\xc3\xaa\x6e\x04\xf0\x15\xdc\x71\xed\xed\xc8\
-\xe3\x1d\xc0\x83\x55\xb7\xc2\x93\x61\xc0\x37\xab\x6c\x80\x88\x8c\
-\x02\x16\x54\xd9\x86\x82\x3c\x08\xee\x2a\xb6\x3b\x71\x9b\x05\xab\
-\xde\xa7\x96\xb7\x1c\x05\xce\xad\x70\x4f\xe0\x7d\x11\x8c\x81\xef\
-\xb8\xdd\x09\x0c\x68\xec\xcc\x58\xe0\x3b\xc0\x46\xdc\x89\x5f\x55\
-\x37\xb2\xd5\xb2\x9d\x02\xf9\x7f\x05\x82\x3f\x2f\x82\xbe\xe7\x29\
-\x47\x70\x89\x23\xdf\xa6\xe1\x9a\xde\x5e\x13\x43\xb2\x85\x4d\x57\
-\x7e\xc0\x65\xb8\xf7\xee\x18\x13\x42\xba\x78\x04\xb8\x4e\x7b\xeb\
-\x4c\x00\x44\x64\x22\x6e\x8f\xfd\xc0\x32\xfc\x79\xf2\x5f\xe0\x29\
-\x4e\xe6\x03\x6c\x52\xd5\x63\x3d\xff\x53\x4b\xa9\x61\x22\xf2\x0e\
-\x4e\x66\x08\x5d\x86\x3b\x05\x24\xb6\x57\xc8\xbb\x71\xbb\x84\x83\
-\x8a\x40\x44\xde\x0d\xfc\x91\xf8\x3e\xfd\x1e\xe2\x64\x8a\xd8\x06\
-\x60\xb3\xb6\x90\x22\xe6\x7b\x5f\xc0\x30\xba\xe7\x08\x8e\x27\x8e\
-\x1c\xc1\x47\x80\x4f\xa9\xea\xe1\x10\xc6\x45\x64\x16\xf0\x10\x70\
-\x66\x08\xfb\x39\x79\x03\x37\x5d\x77\x05\x7c\x8b\xaa\xbe\x95\xdb\
-\x8a\xd1\x7c\xb8\x88\xea\xe7\xb8\xc6\x35\x81\xe9\xc2\x10\xf7\xb4\
-\x5b\x00\xbc\x15\x41\xff\x34\x0b\x7e\xd3\xc3\x2e\x5a\xea\x9b\xd1\
-\x00\x8d\x06\xde\x8c\x60\x60\xba\xca\x51\xdc\x94\x30\xcc\xa0\x6f\
-\x57\x64\xa2\xaa\xba\x4f\x8d\x65\x89\x99\xb8\x0d\x7f\x25\x0f\x47\
-\x30\x30\x3d\xcb\x3e\xe0\x76\x7a\xdc\xea\xdd\x42\x5f\x06\x02\x57\
-\x03\x6b\x22\xe8\x43\x6f\x65\x9c\x55\xdc\x2c\x0f\x89\x9a\x81\x5b\
-\x1c\xc5\xca\x5f\x70\xdb\xb7\xb7\x70\xea\x43\xa2\x66\xe1\x4e\x3e\
-\x1f\x5c\x49\x2b\x9b\xf3\x27\x55\xbd\xc4\xca\x98\xf5\x51\xb1\xcf\
-\xe1\xae\x7a\x4f\x84\xe3\x06\x55\xfd\xa5\x95\x31\xeb\x57\xb9\x7b\
-\x8d\xed\x25\xba\xb3\x07\xe3\xb3\x98\xad\x05\xb0\x02\xf7\x01\x22\
-\x11\x86\xa5\x7a\x8a\xd3\x3e\x7c\x30\x15\x80\xaa\x1e\x04\xa2\x48\
-\xd8\xac\x29\xbf\xb0\x36\x68\x7d\x56\xf0\x08\xd2\xd5\x31\x21\x99\
-\x67\x6d\xd0\x7a\x11\xb8\x0c\xf8\xb4\x99\xc1\x44\x4f\x8e\x03\xe3\
-\xd5\xdd\xd0\x62\x82\xe5\x6b\xe0\x64\xdc\xb7\xe8\x18\x3e\x09\xd7\
-\x99\x35\xaa\x3a\xcb\xca\x98\xc9\x14\x20\x22\xfd\x80\x7b\x48\xc1\
-\x2f\x83\x99\xd9\x55\x7d\x26\x58\xad\x01\x6e\xc2\x9d\x21\x98\x28\
-\x87\x9f\x88\xc8\x20\x0b\x43\x85\x05\x20\x22\x23\x81\xbb\x0c\xda\
-\x92\x68\x9d\x73\x30\xda\x0e\x67\x71\x73\xe8\x72\x60\xbe\x45\x63\
-\x12\xb9\x38\x0e\x4c\x50\x77\x87\xb3\x37\x85\x04\x90\x9d\x90\xb5\
-\x91\x34\xf7\x57\x45\xe1\x05\xa1\xf7\x14\x90\x16\x7e\x51\x50\x78\
-\x41\x58\x64\x0d\x70\x33\xf0\x81\x22\xce\x13\x26\x14\x5a\x10\x7a\
-\x09\x20\x5b\xf8\x7d\xd7\xd7\x69\xc2\x94\x73\x70\x7b\x1e\xbc\xf0\
-\xdd\x13\x98\x16\x7e\x71\xe1\xbd\x20\xcc\x2d\x00\x11\x19\x07\xec\
-\x20\xcd\xfd\xb1\xf1\x2b\x55\xcd\x9d\x2f\xe9\x33\x05\x5c\x4c\x0a\
-\x7e\x8c\x5c\xea\x53\xc9\x47\x00\x51\x1d\xce\x90\x78\x9b\x91\x22\
-\x72\x76\xde\x4a\x3e\x02\xd8\xe0\x51\x27\x11\x9e\x97\xf0\x38\xad\
-\xd4\x47\x00\x0f\xd1\xa6\xa7\x62\xd6\x9c\x1f\xa8\xc7\xdd\x09\xb9\
-\x05\xa0\x2e\xfb\xe4\x7a\xe0\x60\xde\xba\x89\x60\xac\xc4\x5d\x03\
-\x93\x1b\xaf\xef\x00\xaa\xba\x09\xb7\xf3\x27\x89\xa0\x7a\x56\xe2\
-\xd2\xe1\x4e\xf8\x54\xf6\xfe\x12\x98\x44\x10\x05\x85\x82\x0f\x05\
-\xff\x1c\x5c\x92\x08\x0e\x00\xab\x68\xaf\xdd\xc6\x7f\x06\xfe\x10\
-\xd8\x47\xe1\xe0\x03\x36\xa9\x61\xc0\x24\x5c\xa0\x2c\xd3\x9f\x3a\
-\x81\x65\xc0\x88\xcc\xc7\x50\xe0\x8b\xc0\x73\xc6\x7e\xac\xca\x51\
-\xdc\xae\xdd\x29\x0d\xe3\x32\x1b\x78\x25\x80\xaf\x07\x28\x78\x65\
-\x6c\x88\xdc\x40\x4b\x11\x6c\x05\x26\x9f\xc2\xd7\x0c\x5c\x2e\x62\
-\x0c\x09\xa9\x2f\x03\x0b\x81\xe1\x7d\xb4\x75\x10\xb0\x18\xbb\x3b\
-\x19\xcd\x82\x6f\x2a\x00\x23\x11\xec\x07\x6e\x69\xb5\x83\xb8\x7c\
-\xbe\x45\xb8\xa7\x45\xd9\x81\xdf\x8c\x3b\x20\xb2\xa5\x7b\x0b\x81\
-\x31\xb8\x9b\x4e\xa2\x09\xbe\xb9\x00\x0a\x88\xa0\x13\xf7\x1a\x33\
-\xd2\xd3\xe7\xce\x0a\x04\xf0\x31\xcf\xb6\xce\xc1\x6f\x5a\x30\x0f\
-\x7e\x10\x01\x78\x88\x60\x1b\x0d\xf3\xa6\xa7\xbf\x25\x15\x08\x60\
-\x44\x81\xf6\xe6\x9d\x16\x82\x04\x3f\x98\x00\x5a\x14\xc1\x7e\xe0\
-\x56\x8b\x8e\x01\xd7\x95\x1c\xfc\x67\x8d\xc6\x68\x2c\xcd\xcf\x20\
-\x08\x16\xfc\xa0\x02\x68\x10\xc1\xdf\x7a\x74\xa8\xd0\xe3\xbe\x0f\
-\x3f\x23\x4b\x16\xc0\x3d\xc6\xe3\x74\x2d\xff\x3f\x2d\xbc\x85\xcb\
-\xb6\x0e\x16\x7c\x55\xc3\x03\x22\xfa\x42\x44\xfa\x03\x37\xe0\x0e\
-\x95\xda\x82\x3b\xe0\xe0\xd9\x00\x7e\x9e\x05\xce\xb3\xb6\xdb\x07\
-\x1f\x57\xd5\x87\x2d\x0d\x66\xdb\xba\x2e\x07\x26\xe2\x0e\xad\xf8\
-\x99\xaa\xfe\xd5\xd2\x47\xaf\x7e\x43\x0b\xa0\x2c\x44\xe4\xe7\xb8\
-\x7d\x8a\x65\x30\x4a\x55\xf7\x94\xe4\x2b\x28\xb1\x9d\xf5\x57\x84\
-\xf5\x25\xf9\x79\xae\x2e\xc1\x87\x7a\x09\xa0\xac\x7d\x0a\xb5\xda\
-\x0f\x51\x1b\x01\x64\xbf\xca\xe7\x4b\x70\xb5\xbe\x04\x1f\xa5\x51\
-\x1b\x01\x64\x94\xf1\xeb\x4c\x4f\x80\x88\x59\x1f\xd8\xfe\x0b\xaa\
-\xfa\x5a\x60\x1f\xa5\x52\x37\x01\x84\xfe\x75\xae\x0f\x6c\xbf\x74\
-\x6a\x25\x00\x55\xdd\x0d\x14\xca\x96\x6d\x42\xad\x1e\xff\x50\x33\
-\x01\x64\xac\x0f\x68\x3b\x09\xa0\x0d\x58\x0a\x14\xdb\x25\xd3\x3b\
-\x8f\xa9\x6a\xee\x6d\xd7\xb1\x53\x3b\x01\xa8\xea\x33\xc0\x0f\x8d\
-\xcd\xee\x03\x3e\x6f\x6c\x33\x0a\x6a\xf3\x29\xb8\x11\x11\x19\x80\
-\x3b\x53\x6f\x2e\x6e\xf7\x90\xaf\xd0\x77\xe3\xf6\x23\x2e\x55\xd5\
-\x9d\x46\xcd\x8b\x8a\xff\x01\xa7\x07\x5c\xb1\x8e\xc2\xb4\xdb\x00\
-\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x07\xb7\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3\x3e\x61\xcb\
-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x03\xb1\x00\x00\x03\xb1\
-\x01\xf5\x83\xed\x49\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
-\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
-\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x07\x34\x49\x44\
-\x41\x54\x78\x9c\xed\x9d\x71\x88\x15\x45\x1c\xc7\x3f\x7a\x2f\xaf\
-\xec\x4c\xef\xd2\xb2\xd2\x48\xc2\x4c\xeb\x2a\x50\x4b\xe1\xb2\x28\
-\x14\xa9\xe8\x9f\xc0\xa3\x42\x89\x0a\x42\x2d\x09\x22\x0a\x21\x50\
-\x52\xa4\x10\x4a\x4a\x49\x2a\x33\x42\x25\x2b\x28\xaf\x2c\x0d\x8c\
-\xfe\x48\x4b\xa9\x8b\xac\x30\x13\xf3\xb4\xe4\xc8\xf3\x52\x2f\x3d\
-\xbb\xf3\xbc\xfe\x98\xbb\xba\x77\xbe\xb7\xbb\xb3\x6f\x66\x67\xf7\
-\xcd\xef\x03\xbf\x7f\xde\xce\xce\x7c\x77\xe6\xbb\xbb\x6f\x67\x66\
-\x67\xc1\x1e\xe7\x03\xf3\x81\x6d\x40\x33\xd0\x01\x1c\x04\x36\x00\
-\x33\x2d\x96\x6b\x93\x51\xc0\x32\xa0\x11\x38\x01\x9c\x04\x7e\x02\
-\x5e\x06\xc6\x39\xd4\x95\x3a\xa6\x02\x4d\x40\x77\x40\x6c\x01\x2e\
-\x76\x25\x30\x06\x0b\x80\x53\x14\x3f\x9e\x4e\x60\x09\x30\xd0\x95\
-\xc0\xb4\x30\x0d\x68\x27\xb8\xf1\x7b\x63\x0f\x50\xed\x46\xa6\x16\
-\x8b\x89\x76\x3c\xdd\xc0\x1a\x47\x1a\x53\x41\x35\xf0\x27\xd1\x2b\
-\xab\x1b\xf8\xc0\x89\xd2\xe8\xcc\x04\xce\xa2\x77\x4c\x0f\x3b\x51\
-\x9a\x02\x96\xa2\x57\x51\xbd\x31\xc5\x85\xd8\x88\x34\xa2\x7f\x3c\
-\x87\x81\x41\x2e\xc4\xba\x66\x3f\xf1\x0c\xb0\xc2\x85\xd8\x08\x4c\
-\x20\xde\xf1\x74\x03\x33\x1c\xe8\xd5\xc6\xe4\x1f\x96\xe1\xc0\x98\
-\x98\xfb\x4e\x36\xa8\xc3\x24\xa5\xe8\xba\xd9\x98\x0a\x8b\x98\x34\
-\xc0\x88\x12\xf6\xbd\xd4\x98\x0a\xb3\x94\xe3\x31\xe5\x61\xd2\x00\
-\x39\x47\xfb\xda\xa4\x14\x5d\x15\xc6\x54\x58\xc4\xfb\x67\x56\xdf\
-\x11\x03\x78\x4e\x0e\xf8\x44\x23\xfd\x22\x60\x97\x1d\x29\x81\xcc\
-\x03\xee\xb6\x94\xb7\xad\x7c\xc3\x78\x0b\xb8\x24\x62\xda\x95\xc0\
-\x66\x1b\x22\x72\xc0\x5d\x1a\xe9\x57\xd9\x10\x11\x81\x5a\xf4\x74\
-\x66\x81\x3b\x81\xd1\x11\xd3\x7e\x6c\x4b\x84\xdc\x02\x3c\x47\x0c\
-\xe0\x39\x62\x00\xcf\x11\x03\x78\x8e\x18\xc0\x73\x4c\xf6\xc0\xb5\
-\x03\xdf\xc6\xdc\xb7\xd9\xa0\x0e\x93\x34\x13\xff\x98\x0e\x9a\x14\
-\x62\x0b\x93\x06\xd8\x07\x4c\x32\x98\x5f\x1a\x58\xdb\x13\x65\x8b\
-\xdc\x02\x3c\x47\x0c\xe0\x39\x62\x00\xcf\x11\x03\x78\x8e\x18\xc0\
-\x73\xc4\x00\x9e\xa3\xfb\x18\xf8\x34\xf0\xa0\x0d\x21\x21\xd8\x9c\
-\x33\xb8\xde\x62\xde\x41\xa4\xe2\xa5\x18\x5d\x03\xdc\x66\x45\x85\
-\x5b\xee\x77\x2d\xc0\x25\x72\x0b\xf0\x1c\x31\x80\xe7\x88\x01\x3c\
-\x47\x0c\xe0\x39\x62\x00\xcf\xc9\x01\x87\x5c\x8b\x10\x42\x69\x73\
-\x2d\x40\x10\x04\x41\x10\x04\x41\x10\x04\x41\x28\x0b\x06\x00\xab\
-\x5d\x8b\x10\x42\x59\x0f\x7c\x69\x2b\xf3\xb8\x8b\x20\x49\x24\x17\
-\x73\x8b\xb6\x5e\x89\x48\x57\xb0\xe7\x88\x01\x3c\x47\x0c\xe0\x39\
-\x62\x00\xcf\x11\x03\x78\x8e\x18\xc0\x73\xc4\x00\x9e\x23\x06\xf0\
-\x1c\x31\x80\xe7\x98\x5c\x20\xe2\x6f\xe0\x6b\x8d\xf4\x75\xa8\xef\
-\x0a\x15\xa2\x19\xf8\x31\x62\x3e\x39\xe0\xf6\x80\xed\xfb\x80\x03\
-\x11\xf3\x1a\x46\xf0\x22\x17\xdf\x03\x2d\x11\xf3\x1a\x05\x5c\x1b\
-\x31\xad\x53\x4c\x75\x57\xfe\xa0\x59\x6e\xd0\x37\x85\xd6\x69\xe4\
-\x33\x34\x44\xd7\xb3\x1a\x79\xd5\x85\xe4\xa5\xb3\xaa\xe8\xdc\x90\
-\xbc\xa4\x2b\x58\x70\x8f\x18\xc0\x73\xc4\x00\x9e\x23\x06\xf0\x1c\
-\x31\x80\xe7\x88\x01\x3c\xc7\x64\x3f\xc0\x18\xe0\x73\x8d\xf4\x41\
-\x1f\x4b\xb8\x43\x23\xaf\xb0\x63\x78\x04\xb5\x36\x7f\x14\x86\x85\
-\x6c\x5f\x02\x3c\x19\x31\xaf\x51\x11\xd3\x39\xc7\xf5\x74\x27\x09\
-\xe9\x07\x10\x5c\x21\x06\xf0\x1c\x31\x80\xe7\x88\x01\x3c\x47\x0c\
-\xe0\x39\x32\x1c\x9c\x4f\xd8\x70\xb0\x4d\x8e\x03\xc7\x7a\xa2\x1d\
-\xb8\x00\x18\x02\x54\x03\x67\x6c\x16\x6c\xea\x51\xc5\x87\xe1\x60\
-\x13\xd1\x89\x7a\xcd\xeb\x45\x60\x36\x70\x13\x30\x48\x43\xa3\x51\
-\xd2\xfa\xd1\xe6\x72\xa3\x1d\xd8\x04\x34\x00\x9f\x02\xad\x6e\xe5\
-\xfc\x8f\x18\xc0\x2e\x87\x81\xd7\x81\x57\x89\x3e\x93\x28\x51\xc4\
-\x00\x76\x68\x02\x16\x02\xef\x02\x5d\x8e\xb5\x04\x22\x06\x30\xcb\
-\x49\x60\x39\xf0\x02\xea\xb2\x9f\x7a\xc4\x00\xe6\xf8\x02\x98\x03\
-\xfc\xee\x5a\x88\x0e\xd2\x0f\x50\x3a\x67\x80\xc5\xc0\x74\x32\xd6\
-\xf8\xa0\x56\x08\xe9\x36\x94\x97\x8f\xfd\x00\x2d\xc0\xbd\xc0\x0e\
-\x8d\x7d\xfa\x92\x03\x6e\x00\xc6\xa1\xa6\x90\x8f\x04\x2e\x42\xd5\
-\x4b\x27\xaa\x6f\xe0\x38\xf0\x0b\xb0\x17\xf8\x0e\x0b\xab\x86\xba\
-\x1e\xea\xcc\x6a\x1c\x20\xde\xbc\xff\x1a\xd4\xf0\x6e\x03\x70\x42\
-\xb3\xcc\x4e\x60\x3b\xb0\x08\xb8\x26\x46\xd9\x05\x71\x5d\x91\x59\
-\x8c\xdd\xc0\xe5\x9a\xf5\x3c\x09\xd8\x08\x9c\x36\xa8\x63\x07\x50\
-\x4f\x89\xb7\x72\xd7\x95\x99\xb5\x38\x04\x8c\xd6\xa8\xdf\x1b\x81\
-\xcf\x2c\x6b\xda\x03\xcc\xd2\xd0\x94\x87\xeb\x0a\xcd\x52\xb4\x10\
-\xfd\xb2\x5f\x05\xbc\x84\xba\x6c\x27\xa5\x6f\x2b\x30\x36\xa2\xbe\
-\xff\x70\x5d\xa9\x59\x89\x0e\x60\x6a\xc4\x3a\x9d\x80\xba\x4d\xb8\
-\xd0\xd9\x86\xe6\x97\xdd\x5c\x57\x6c\x56\xe2\x99\x88\xf5\x59\x0f\
-\x9c\x4a\x81\xde\x57\x80\x8a\x30\xb1\x26\x1f\x03\xdb\x81\x9f\x35\
-\xd2\xd7\x52\x7c\x14\xac\x15\xf8\x2d\x62\x3e\x15\xa8\x11\x35\x9b\
-\x6c\x43\x3d\xe7\x9f\x0d\x49\x37\x0f\x55\xf1\x69\xe9\x5f\xf9\x10\
-\xf5\x59\xbc\xd3\x41\x89\x4c\x39\x2e\xad\xc3\xc1\xa5\xc6\x09\xe0\
-\x8a\x08\x3a\x4c\xbe\x0d\x6c\x32\x1a\x08\xe8\xf1\x4d\x8b\x53\xd3\
-\xcc\x52\xe0\x8f\x90\x34\xf5\xa8\x11\xbf\x34\x72\x0f\xf0\x5a\x50\
-\x02\xb9\x02\x14\x8f\xfd\x14\xef\xad\xec\xe5\x7a\xd4\x20\x90\xeb\
-\x33\x3d\x2c\x1e\x2f\x24\x5e\xae\x00\xc1\x2c\x24\xf8\xfe\x59\x05\
-\xbc\x0f\x0c\x4e\x46\x4e\x49\x2c\x07\x26\xf6\xff\x51\x0c\x50\x9c\
-\x26\xe0\xbd\x90\x34\xcf\xa3\xfa\xf1\xb3\x40\x25\xf0\x36\x70\x5e\
-\xdf\x1f\xc5\x00\xc5\x59\x49\xf0\x64\x8e\x5a\x60\x7e\x42\x5a\x4c\
-\x71\x1d\xb0\xa0\xef\x0f\x62\x80\xc2\xb4\x03\x6b\x42\xd2\x2c\xa7\
-\xdf\xd9\x94\x11\x9e\xa3\xcf\x4b\xb0\x26\x27\x84\x5c\x89\x1a\xec\
-\x88\xca\xf0\x80\x6d\x75\x1a\x79\xd9\x68\x84\x4d\xc0\xd1\x80\xed\
-\x93\x81\x19\x06\xcb\x6b\x41\xf5\x21\x14\xe3\x51\x83\xe5\x0d\x05\
-\x9e\x40\xdd\xbe\x00\xf7\xff\x4e\xd3\x18\x0f\x84\x54\xe2\x46\xc3\
-\xe5\x35\x85\x94\xb7\xca\x70\x79\x47\x50\xff\x09\xe4\x16\x50\x80\
-\x2e\x60\x4b\xc0\xf6\x1a\xd4\x24\x90\x2c\x33\x1c\xd5\x3f\x20\x06\
-\x28\xc0\x57\x04\x5f\xfe\xeb\xe9\x39\x7b\x32\xce\x6c\x10\x03\x14\
-\xe2\x9b\x90\xed\x3a\x8b\x45\xa6\x99\xe9\x40\xa5\x18\xe0\x5c\x76\
-\x07\x6c\xcb\x01\xb7\x26\x25\xc4\x32\x83\x81\x5b\xc4\x00\xe7\x12\
-\xd4\xa5\x5d\x8b\x9a\xb4\x59\x2e\xd4\xc9\x7b\x01\xf9\x74\xa3\xa6\
-\x57\x15\x63\x7c\x52\x42\xfa\xd1\x82\x1a\x97\x28\xc4\x40\xe0\xaa\
-\x98\xf9\x8e\x07\xf7\x8f\x5c\x69\x8a\x63\x21\x15\xb6\xd8\x52\xb9\
-\x61\x8f\x81\x41\x94\x32\x18\xb6\x53\x6e\x01\xf9\xfc\x15\xb2\xfd\
-\xb2\x44\x54\x24\xc7\x48\x31\x40\x3e\x61\x57\x80\xaa\x44\x54\x24\
-\xc7\x10\x31\x40\x3e\xa7\x42\xb6\x5f\x98\x88\x8a\xe4\xa8\x12\x03\
-\xe4\x13\xd6\xc0\xff\x24\xa2\x22\x39\x4e\x8b\x01\xf2\x09\x7b\xc4\
-\x33\xfe\x5e\x9e\x63\xda\xc4\x00\xf9\x84\x19\x20\x35\x4b\xbb\x18\
-\xe2\x68\x0e\x78\xcc\xb5\x8a\x14\x11\xb6\x1a\xd7\x5e\x4b\xe5\xd6\
-\x00\xab\x63\xee\x5b\xca\x02\x53\xbf\x96\xb0\xaf\x97\x4c\xc3\x7d\
-\x5f\x85\xc9\x58\x26\xb7\x00\x3d\x1a\x51\xef\xfa\x95\x0b\x3b\x5d\
-\x0b\xc8\x22\xdb\x71\x7f\xe6\x9a\x88\x2e\xa0\x46\xae\x00\xfa\x6c\
-\x75\x2d\xc0\x10\xbb\x80\x56\x31\x80\x3e\xeb\x50\x67\x50\xd6\x59\
-\xef\x5a\x40\x96\xd9\x81\xfb\x4b\x78\x29\xd1\x01\x8c\x00\x99\x11\
-\x14\x97\x15\xae\x05\x94\xc8\x3a\xd4\xc4\x50\x21\x26\x15\xa8\x79\
-\x03\xae\xcf\xe4\x38\x71\x86\xec\xbc\xcd\x94\x6a\x66\xe1\xbe\x31\
-\xe3\xc4\x9b\x36\x2a\xc3\x57\x36\xe3\xbe\x41\x75\xa2\x95\x9e\x7b\
-\xbf\x60\x86\xb1\xa8\x01\x22\xd7\x0d\x1b\x35\x1e\xb2\x52\x0b\x9e\
-\x53\x8f\xfb\x86\x8d\x12\x1b\x6c\x55\x80\xa0\xd6\x05\x72\xdd\xc0\
-\x41\xd1\x48\xf9\x4d\x66\x49\x15\x03\x31\xff\xbe\xa0\xa9\xd8\x8f\
-\x5a\x83\x58\xb0\x4c\x25\x6a\x55\x2e\xd7\x0d\xde\xbf\xf1\xaf\xb6\
-\x79\xd0\x42\x3e\x39\xe0\x0d\xdc\x37\x7c\xef\x65\x5f\xce\x7c\x47\
-\xcc\xc1\xed\x62\x91\xef\x50\x7e\x33\x98\x33\xc7\x44\xd4\x6b\x66\
-\x49\x36\xfc\x51\xe4\x51\x2f\x55\xe4\x80\xa7\x50\xef\x1b\xd8\x6c\
-\xf8\x2e\x54\x0f\x9f\x74\xf2\xa4\x94\x61\xa8\xb5\x79\x8e\x60\xb6\
-\xe1\x3b\x80\xb5\x48\xdf\x7e\x66\xa8\x04\xee\x03\x3e\x22\xfe\xe2\
-\x92\x5d\xa8\x4f\xf3\x2c\xc0\xc0\x19\x3f\xa0\xd4\x0c\x84\xd8\x0c\
-\x02\xa6\xa0\x16\xc4\x1a\x8f\x3a\x8b\x47\xa2\xfe\xbc\x55\xa3\xbe\
-\xc1\xd4\x86\xea\xbf\xef\xfd\x66\xd0\x4e\xd4\x67\x67\x8d\x4d\x4f\
-\xff\x17\x73\x4b\xdf\xe7\x60\x20\xbf\x29\x00\x00\x00\x00\x49\x45\
-\x4e\x44\xae\x42\x60\x82\
 \x00\x00\x0b\xff\
 \x89\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -728,6 +419,189 @@ qt_resource_data = b"\
 \x45\x51\x14\x45\x51\x14\x45\x51\x14\x45\x51\x14\x45\x51\x14\x45\
 \x51\x14\x45\x51\x14\x45\x99\x91\xfc\x0f\x2e\xb5\xeb\x44\x04\x1e\
 \xf9\x86\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x0b\x4c\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3\x3e\x61\xcb\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x03\x76\x00\x00\x03\x76\
+\x01\x7d\xd5\x82\xcc\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x0a\xc9\x49\x44\
+\x41\x54\x78\x9c\xed\x9d\x6b\xb0\x56\x55\x19\xc7\x7f\xcf\x01\x11\
+\x81\x09\x19\x81\x81\xc6\x71\x9a\x71\xa0\x12\xa8\x2c\x05\xb9\xa9\
+\x98\x23\x38\x69\x23\x98\xa5\xc4\x4c\x94\xd5\x68\x6a\x1f\x8a\xe8\
+\xa6\xd8\x45\x6a\xa6\xac\x66\x0a\xf3\x8b\x80\x4c\xa2\x91\xe9\x34\
+\x93\x33\x01\x51\x42\x83\x17\x64\xb8\x34\x60\xde\x26\xc3\x2e\x22\
+\x31\x72\x31\x88\x8b\x72\x9e\x3e\xac\x7d\xe4\x3d\xa7\x73\x78\xdf\
+\xbd\xf6\xb3\xf6\x5e\xef\x9e\xf5\x9b\x59\x9f\x60\x3d\xcf\x5a\xeb\
+\xf9\xbf\x7b\xad\xbd\xcf\x7a\xd6\x12\x55\xa5\x6e\x88\xc8\x00\x60\
+\x1e\x30\x17\x98\x01\x74\x78\x9a\xda\x0d\xac\x02\x96\xaa\xea\x4e\
+\xa3\xe6\x45\x85\xd4\x54\x00\xdf\x07\xbe\x66\x68\x72\x1f\x30\x5e\
+\x55\x77\x1b\xda\x8c\x82\xda\x09\x40\x44\x26\x02\x4f\x02\xfd\x8c\
+\x4d\x3f\xa6\xaa\x57\x1b\xdb\xac\x1c\xdf\x47\x63\xcc\x7c\x06\xfb\
+\xe0\x03\x5c\x25\x22\xa3\x02\xd8\xad\x94\x3a\x0a\x60\x7a\x9b\xda\
+\xae\x84\x5a\x09\x40\x44\x86\x03\xef\x0d\xe8\xe2\xe2\x80\xb6\x2b\
+\xa1\x56\x02\x00\xa6\x01\x12\xd0\x7e\x7a\x02\x44\x4e\xe8\x5f\xe8\
+\x04\x11\x39\x33\xb0\x8f\x52\xa9\x9b\x00\x42\xff\x42\x3b\x80\xa9\
+\x81\x7d\x94\x4a\x6d\x04\x20\x22\x43\x80\xf3\x4b\x70\x55\xab\x75\
+\x40\x6d\x04\x00\x4c\x21\xcc\xeb\x5f\x4f\x6a\xb5\x0e\xa8\x93\x00\
+\xca\xfa\x65\x5e\x20\x22\x67\x94\xe4\x2b\x38\xa5\x08\x40\x44\x3a\
+\x44\xe4\xec\xc0\x6e\xca\xfa\x65\x9e\x06\x5c\x14\xca\xb8\x88\x9c\
+\x21\x22\x23\x42\xd9\xef\x49\x50\x01\x88\x48\x3f\x11\xf9\x2c\xf0\
+\x3c\xf0\x0f\x11\xd9\x23\x22\xab\x44\x64\xac\xb1\x9f\xd3\x81\x89\
+\x96\x36\x9b\x60\x2a\xb6\x6c\x9c\x6e\x15\x91\xad\xc0\x1b\xc0\xbf\
+\x44\xe4\x7e\xeb\x71\xea\x15\x55\x0d\x52\x70\xf3\xf1\x03\x80\xf6\
+\x52\x8e\x01\xdf\x03\x06\x19\xf9\x9a\xd6\x87\x9f\x50\x65\x9d\xe1\
+\x38\x4d\x01\xb6\xf5\xe1\xe7\x00\x30\x29\x54\x8c\x54\x35\x8c\x00\
+\x9a\x04\xbf\xb1\xbc\x02\xcc\x31\xf0\xf7\xf5\x92\x05\x70\x08\xe8\
+\x5f\xb0\xcd\x23\x81\xe5\x40\x67\x13\x5f\x41\x45\x50\x65\xf0\x1b\
+\xcb\x6a\x60\x6c\x01\x9f\xbf\x2b\x59\x00\xea\x1b\x94\x6c\x7c\x6e\
+\x05\xf6\xe7\xf0\x15\x4c\x04\x31\x04\xbf\xab\x1c\x03\x16\x93\x73\
+\x5a\x00\x86\x00\x07\x2b\x10\xc0\x22\x8f\xf1\x99\x4c\xdf\x8f\xfb\
+\x4a\x44\x10\x4b\xf0\x1b\x4b\x4b\xd3\x02\x30\x0e\x58\x82\x5b\x34\
+\x95\x1d\xfc\xae\xb2\x09\x98\x0f\x0c\x6c\xd2\xd6\x11\xc0\x32\x9a\
+\x3f\xee\x4b\x17\x41\x6c\xc1\x6f\x2c\xab\x81\x31\x3d\xfc\x0c\x00\
+\xae\x07\x36\x54\x18\xf4\xde\xca\xeb\xc0\x8f\x7a\x69\x6f\x3f\xe0\
+\x16\xf2\x3d\xee\x4b\x15\x41\xac\xc1\xef\x2a\xc7\x80\xbb\x80\xf7\
+\xe0\xa6\x87\xd7\x22\x08\xf6\xa9\x4a\x27\xb0\x16\xb8\x06\xf7\x66\
+\xb2\x35\x90\x1f\x33\x11\x14\xda\x12\x26\x22\xfd\x80\x15\xc0\x27\
+\xbd\x8d\x24\x7c\x39\x08\xcc\x54\xd5\x4d\x45\x8c\x78\x7f\x08\x4a\
+\xc1\xaf\x9c\xa1\xc0\x1a\x11\x99\x54\xc4\x88\x97\x00\x52\xf0\xa3\
+\xa1\xb0\x08\xbc\xa6\x00\x11\xb9\x17\xb8\xc9\xd7\x69\xc2\x9c\x83\
+\xc0\x44\x55\x7d\x31\x6f\xc5\xdc\x4f\x00\x11\x39\x17\xf8\x5c\xde\
+\x7a\x89\xa0\x0c\x05\xbe\xe1\x53\xd1\x67\x0a\xb8\x8d\x72\xfe\xee\
+\x9e\xc8\xc7\x5c\x9f\xbf\x22\xfa\x08\xe0\x90\x47\x9d\x44\x78\x04\
+\x8f\xd8\xf8\x08\xe0\x19\x8f\x3a\x89\xf0\xec\x50\xd5\x23\x79\x2b\
+\xf9\x08\x60\x1d\xf0\x77\x8f\x7a\x89\xb0\x2c\xf3\xa9\xe4\xfb\x16\
+\x70\x2d\xf0\x6b\x1f\x87\x89\x20\x6c\x07\x2e\x50\xd5\x13\x79\x2b\
+\x7a\x7f\x09\x14\x91\x35\xc0\x15\x5e\x95\x13\x96\x28\x30\x4d\x55\
+\x9f\xf4\xa9\x5c\x64\x4b\xd8\x6d\xc0\xf1\x02\xf5\x13\x36\xac\xf0\
+\x0d\x3e\x14\x10\x40\xf6\xd1\xe1\x6e\xdf\xfa\x09\x13\x0e\x00\x5f\
+\x2d\x62\xa0\xe8\xa6\xd0\xc5\xa4\x05\x61\x95\xdc\xa1\xaa\xff\x2e\
+\x62\xa0\xf0\x01\x11\x22\x32\x07\x78\xa4\x90\x91\x84\x0f\xde\x0b\
+\xbf\x46\x4c\x4e\x08\x11\x91\xd5\xc0\xcc\xc2\x86\x12\xad\xa2\xc0\
+\x54\x55\x7d\xaa\xa8\x21\xab\xbc\x80\xb4\x20\x2c\x97\xfb\x2d\x82\
+\x0f\x46\x02\x50\xd5\x97\x48\x0b\xc2\xb2\x28\xbc\xf0\x6b\xc4\x32\
+\x33\x28\x2d\x08\xcb\xe1\x76\x55\xdd\x6b\x65\xcc\xf4\x94\x30\x11\
+\x99\x0d\x3c\x6a\x66\x30\xd1\x93\x6d\xc0\x85\x45\x17\x7e\x8d\x98\
+\x1f\x13\x27\x22\xeb\x80\x0f\x9b\x1a\x4d\x74\x31\x5d\x55\x37\x5a\
+\x1a\x0c\x91\x1c\x3a\x3c\x80\xcd\x84\xc3\x7c\x6c\x4d\x05\x20\x22\
+\x53\x80\xf7\x5b\xda\x4c\x74\xe3\x0b\xd6\x06\xad\x9f\x00\x37\x1b\
+\xdb\x4b\x74\xe7\x72\x11\x19\x63\x69\xd0\x6c\x0d\x90\x9d\xd1\xf7\
+\x4f\xe0\x74\x13\x83\x61\x38\x06\xbc\x88\x3b\x04\xfa\x55\x5c\xa2\
+\xc9\x10\x60\x74\x56\xde\x05\xbc\xb3\xaa\xc6\xb5\xc8\x8f\x55\xf5\
+\xcb\x66\xd6\xcc\x52\x8c\x60\x21\xd5\x67\xe6\xf4\x95\x45\xb3\x12\
+\xb8\x0e\x18\xd2\x42\x3f\x26\x00\x77\x00\x5b\x22\x68\x7b\x6f\xe5\
+\x75\x9a\xe4\x22\x96\x9a\x1a\x96\x0d\x5a\x07\xf0\x72\x04\x83\xd3\
+\x58\x0e\x01\xdf\x02\x06\x17\xe8\xd7\x14\xe0\x89\x08\xfa\xd2\xb3\
+\xcc\x8f\x4d\x00\x57\x46\x30\x28\x8d\xe5\x3e\x60\x94\xe1\xd3\x6d\
+\x0e\xb0\x2b\x82\x7e\x75\x95\x4d\x51\x08\x00\x38\x2b\x1b\x9c\xcd\
+\x11\x0c\x8a\x02\x47\x80\x79\x56\x83\xd3\xa3\xaf\xc3\x81\xc7\x23\
+\xe8\x63\x57\x59\x04\x5c\x08\xf4\x2b\xd2\xaf\x5c\x8b\x40\x11\x19\
+\x0a\x5c\x82\xbb\x85\x63\x06\xf0\x3e\xc2\x9e\xcd\x9b\x87\x57\x81\
+\xd9\xaa\x1a\x6c\xd7\xb2\x88\x9c\x06\xfc\x94\xb8\xb2\xa2\xfe\x83\
+\x9b\xa6\x36\x00\xeb\x81\x2d\xaa\xfa\x66\xab\x95\x4f\x29\x80\xec\
+\xf4\xcd\xe9\x9c\x0c\xf8\xf9\xc4\x99\x14\x72\x00\xb8\x48\x55\x5f\
+\x28\xc3\x59\xe4\xa9\x71\x87\x71\x17\x66\x6c\xc8\xca\x33\xaa\xda\
+\xe7\x5f\x6a\xbb\x09\x20\x3b\x00\x71\x2a\x27\x03\x7e\x21\xd0\x3f\
+\x64\x6b\x0d\x38\x01\x5c\xa5\xaa\xab\xcb\x72\x98\x3d\x09\xd6\x02\
+\x97\x96\xe5\xb3\x00\x47\x80\xa7\x39\x29\x88\xa7\x55\xf5\xe8\xdb\
+\xff\xda\x30\x97\x2f\xc7\xbd\x27\x57\x3d\xb7\xe5\x2d\x0b\x42\xcc\
+\xf9\x2d\xae\x09\x76\x45\xd0\xff\xbc\xe5\x68\x16\xeb\xb3\xba\x7e\
+\xfc\xe3\x81\xbd\x11\x34\xcc\xa7\x6c\x07\x3a\xaa\x10\x40\x36\x78\
+\x73\x22\x18\x03\xdf\xb2\x17\x18\xdf\x01\xdc\x48\xfb\xfe\x01\x67\
+\xa1\xaa\x76\x56\xe5\x5c\x55\x1f\xc5\xcd\xb7\xed\xc8\x70\xe0\x46\
+\xc1\xad\x9e\x47\x57\xdc\x18\x1f\xd6\xaa\x6a\xe5\xfb\x10\xb3\x3f\
+\x80\x3d\x51\x75\x3b\x3c\xd9\x2d\xb8\xc7\x41\x3b\xf2\x51\x55\xfd\
+\x6d\xd5\x8d\x00\x10\x91\x2d\xc0\x07\xab\x6e\x87\x0f\xed\x7a\x5c\
+\xfc\x61\xe0\xf7\x55\x37\xa2\x81\xdf\x54\xdd\x00\x5f\xda\x55\x00\
+\x6b\xba\xbd\xca\x54\x4f\x12\x40\xc9\x94\xf6\xce\xdf\x0a\xaa\xba\
+\x03\xb7\x96\x6a\x3b\xda\x55\x00\xbb\xaa\x6e\x40\x2f\xec\xaa\xba\
+\x01\x3e\xb4\xab\x00\x62\xbc\xc4\x39\xc6\x36\x35\x25\x09\xc0\x8e\
+\x18\xdb\xd4\x94\x76\x15\x40\x8c\x07\x55\xc5\xd8\xa6\xa6\xb4\xab\
+\x00\x62\xbc\xc5\x3b\xc6\x36\x35\xa5\x5d\x05\x10\xe3\xc6\xcd\x18\
+\xdb\xd4\x94\x76\x15\x40\x8c\x9f\xae\x63\x6c\x53\x53\xda\x55\x00\
+\x1f\xaa\xba\x01\x8d\x64\x1b\x67\xc2\x5f\xf1\x16\x80\x76\x15\xc0\
+\x35\x55\x37\xa0\x07\x57\x12\x77\x3e\x44\x9f\xb4\xab\x00\xce\xb3\
+\xce\x90\x29\x48\x6c\x82\x6c\x99\x0e\xdc\x35\x27\xed\xc8\x27\xaa\
+\x6e\x00\x80\x88\x0c\x06\x3e\x52\x75\x3b\x3c\xe9\xec\xc0\x6d\x75\
+\x6e\x47\xbe\x24\x22\xc3\xaa\x6e\x04\xf0\x15\xdc\x71\xed\xed\xc8\
+\xe3\x1d\xc0\x83\x55\xb7\xc2\x93\x61\xc0\x37\xab\x6c\x80\x88\x8c\
+\x02\x16\x54\xd9\x86\x82\x3c\x08\xee\x2a\xb6\x3b\x71\x9b\x05\xab\
+\xde\xa7\x96\xb7\x1c\x05\xce\xad\x70\x4f\xe0\x7d\x11\x8c\x81\xef\
+\xb8\xdd\x09\x0c\x68\xec\xcc\x58\xe0\x3b\xc0\x46\xdc\x89\x5f\x55\
+\x37\xb2\xd5\xb2\x9d\x02\xf9\x7f\x05\x82\x3f\x2f\x82\xbe\xe7\x29\
+\x47\x70\x89\x23\xdf\xa6\xe1\x9a\xde\x5e\x13\x43\xb2\x85\x4d\x57\
+\x7e\xc0\x65\xb8\xf7\xee\x18\x13\x42\xba\x78\x04\xb8\x4e\x7b\xeb\
+\x4c\x00\x44\x64\x22\x6e\x8f\xfd\xc0\x32\xfc\x79\xf2\x5f\xe0\x29\
+\x4e\xe6\x03\x6c\x52\xd5\x63\x3d\xff\x53\x4b\xa9\x61\x22\xf2\x0e\
+\x4e\x66\x08\x5d\x86\x3b\x05\x24\xb6\x57\xc8\xbb\x71\xbb\x84\x83\
+\x8a\x40\x44\xde\x0d\xfc\x91\xf8\x3e\xfd\x1e\xe2\x64\x8a\xd8\x06\
+\x60\xb3\xb6\x90\x22\xe6\x7b\x5f\xc0\x30\xba\xe7\x08\x8e\x27\x8e\
+\x1c\xc1\x47\x80\x4f\xa9\xea\xe1\x10\xc6\x45\x64\x16\xf0\x10\x70\
+\x66\x08\xfb\x39\x79\x03\x37\x5d\x77\x05\x7c\x8b\xaa\xbe\x95\xdb\
+\x8a\xd1\x7c\xb8\x88\xea\xe7\xb8\xc6\x35\x81\xe9\xc2\x10\xf7\xb4\
+\x5b\x00\xbc\x15\x41\xff\x34\x0b\x7e\xd3\xc3\x2e\x5a\xea\x9b\xd1\
+\x00\x8d\x06\xde\x8c\x60\x60\xba\xca\x51\xdc\x94\x30\xcc\xa0\x6f\
+\x57\x64\xa2\xaa\xba\x4f\x8d\x65\x89\x99\xb8\x0d\x7f\x25\x0f\x47\
+\x30\x30\x3d\xcb\x3e\xe0\x76\x7a\xdc\xea\xdd\x42\x5f\x06\x02\x57\
+\x03\x6b\x22\xe8\x43\x6f\x65\x9c\x55\xdc\x2c\x0f\x89\x9a\x81\x5b\
+\x1c\xc5\xca\x5f\x70\xdb\xb7\xb7\x70\xea\x43\xa2\x66\xe1\x4e\x3e\
+\x1f\x5c\x49\x2b\x9b\xf3\x27\x55\xbd\xc4\xca\x98\xf5\x51\xb1\xcf\
+\xe1\xae\x7a\x4f\x84\xe3\x06\x55\xfd\xa5\x95\x31\xeb\x57\xb9\x7b\
+\x8d\xed\x25\xba\xb3\x07\xe3\xb3\x98\xad\x05\xb0\x02\xf7\x01\x22\
+\x11\x86\xa5\x7a\x8a\xd3\x3e\x7c\x30\x15\x80\xaa\x1e\x04\xa2\x48\
+\xd8\xac\x29\xbf\xb0\x36\x68\x7d\x56\xf0\x08\xd2\xd5\x31\x21\x99\
+\x67\x6d\xd0\x7a\x11\xb8\x0c\xf8\xb4\x99\xc1\x44\x4f\x8e\x03\xe3\
+\xd5\xdd\xd0\x62\x82\xe5\x6b\xe0\x64\xdc\xb7\xe8\x18\x3e\x09\xd7\
+\x99\x35\xaa\x3a\xcb\xca\x98\xc9\x14\x20\x22\xfd\x80\x7b\x48\xc1\
+\x2f\x83\x99\xd9\x55\x7d\x26\x58\xad\x01\x6e\xc2\x9d\x21\x98\x28\
+\x87\x9f\x88\xc8\x20\x0b\x43\x85\x05\x20\x22\x23\x81\xbb\x0c\xda\
+\x92\x68\x9d\x73\x30\xda\x0e\x67\x71\x73\xe8\x72\x60\xbe\x45\x63\
+\x12\xb9\x38\x0e\x4c\x50\x77\x87\xb3\x37\x85\x04\x90\x9d\x90\xb5\
+\x91\x34\xf7\x57\x45\xe1\x05\xa1\xf7\x14\x90\x16\x7e\x51\x50\x78\
+\x41\x58\x64\x0d\x70\x33\xf0\x81\x22\xce\x13\x26\x14\x5a\x10\x7a\
+\x09\x20\x5b\xf8\x7d\xd7\xd7\x69\xc2\x94\x73\x70\x7b\x1e\xbc\xf0\
+\xdd\x13\x98\x16\x7e\x71\xe1\xbd\x20\xcc\x2d\x00\x11\x19\x07\xec\
+\x20\xcd\xfd\xb1\xf1\x2b\x55\xcd\x9d\x2f\xe9\x33\x05\x5c\x4c\x0a\
+\x7e\x8c\x5c\xea\x53\xc9\x47\x00\x51\x1d\xce\x90\x78\x9b\x91\x22\
+\x72\x76\xde\x4a\x3e\x02\xd8\xe0\x51\x27\x11\x9e\x97\xf0\x38\xad\
+\xd4\x47\x00\x0f\xd1\xa6\xa7\x62\xd6\x9c\x1f\xa8\xc7\xdd\x09\xb9\
+\x05\xa0\x2e\xfb\xe4\x7a\xe0\x60\xde\xba\x89\x60\xac\xc4\x5d\x03\
+\x93\x1b\xaf\xef\x00\xaa\xba\x09\xb7\xf3\x27\x89\xa0\x7a\x56\xe2\
+\xd2\xe1\x4e\xf8\x54\xf6\xfe\x12\x98\x44\x10\x05\x85\x82\x0f\x05\
+\xff\x1c\x5c\x92\x08\x0e\x00\xab\x68\xaf\xdd\xc6\x7f\x06\xfe\x10\
+\xd8\x47\xe1\xe0\x03\x36\xa9\x61\xc0\x24\x5c\xa0\x2c\xd3\x9f\x3a\
+\x81\x65\xc0\x88\xcc\xc7\x50\xe0\x8b\xc0\x73\xc6\x7e\xac\xca\x51\
+\xdc\xae\xdd\x29\x0d\xe3\x32\x1b\x78\x25\x80\xaf\x07\x28\x78\x65\
+\x6c\x88\xdc\x40\x4b\x11\x6c\x05\x26\x9f\xc2\xd7\x0c\x5c\x2e\x62\
+\x0c\x09\xa9\x2f\x03\x0b\x81\xe1\x7d\xb4\x75\x10\xb0\x18\xbb\x3b\
+\x19\xcd\x82\x6f\x2a\x00\x23\x11\xec\x07\x6e\x69\xb5\x83\xb8\x7c\
+\xbe\x45\xb8\xa7\x45\xd9\x81\xdf\x8c\x3b\x20\xb2\xa5\x7b\x0b\x81\
+\x31\xb8\x9b\x4e\xa2\x09\xbe\xb9\x00\x0a\x88\xa0\x13\xf7\x1a\x33\
+\xd2\xd3\xe7\xce\x0a\x04\xf0\x31\xcf\xb6\xce\xc1\x6f\x5a\x30\x0f\
+\x7e\x10\x01\x78\x88\x60\x1b\x0d\xf3\xa6\xa7\xbf\x25\x15\x08\x60\
+\x44\x81\xf6\xe6\x9d\x16\x82\x04\x3f\x98\x00\x5a\x14\xc1\x7e\xe0\
+\x56\x8b\x8e\x01\xd7\x95\x1c\xfc\x67\x8d\xc6\x68\x2c\xcd\xcf\x20\
+\x08\x16\xfc\xa0\x02\x68\x10\xc1\xdf\x7a\x74\xa8\xd0\xe3\xbe\x0f\
+\x3f\x23\x4b\x16\xc0\x3d\xc6\xe3\x74\x2d\xff\x3f\x2d\xbc\x85\xcb\
+\xb6\x0e\x16\x7c\x55\xc3\x03\x22\xfa\x42\x44\xfa\x03\x37\xe0\x0e\
+\x95\xda\x82\x3b\xe0\xe0\xd9\x00\x7e\x9e\x05\xce\xb3\xb6\xdb\x07\
+\x1f\x57\xd5\x87\x2d\x0d\x66\xdb\xba\x2e\x07\x26\xe2\x0e\xad\xf8\
+\x99\xaa\xfe\xd5\xd2\x47\xaf\x7e\x43\x0b\xa0\x2c\x44\xe4\xe7\xb8\
+\x7d\x8a\x65\x30\x4a\x55\xf7\x94\xe4\x2b\x28\xb1\x9d\xf5\x57\x84\
+\xf5\x25\xf9\x79\xae\x2e\xc1\x87\x7a\x09\xa0\xac\x7d\x0a\xb5\xda\
+\x0f\x51\x1b\x01\x64\xbf\xca\xe7\x4b\x70\xb5\xbe\x04\x1f\xa5\x51\
+\x1b\x01\x64\x94\xf1\xeb\x4c\x4f\x80\x88\x59\x1f\xd8\xfe\x0b\xaa\
+\xfa\x5a\x60\x1f\xa5\x52\x37\x01\x84\xfe\x75\xae\x0f\x6c\xbf\x74\
+\x6a\x25\x00\x55\xdd\x0d\x14\xca\x96\x6d\x42\xad\x1e\xff\x50\x33\
+\x01\x64\xac\x0f\x68\x3b\x09\xa0\x0d\x58\x0a\x14\xdb\x25\xd3\x3b\
+\x8f\xa9\x6a\xee\x6d\xd7\xb1\x53\x3b\x01\xa8\xea\x33\xc0\x0f\x8d\
+\xcd\xee\x03\x3e\x6f\x6c\x33\x0a\x6a\xf3\x29\xb8\x11\x11\x19\x80\
+\x3b\x53\x6f\x2e\x6e\xf7\x90\xaf\xd0\x77\xe3\xf6\x23\x2e\x55\xd5\
+\x9d\x46\xcd\x8b\x8a\xff\x01\xa7\x07\x5c\xb1\x8e\xc2\xb4\xdb\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
 \x00\x00\x0f\x7d\
 \x89\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -978,6 +852,132 @@ qt_resource_data = b"\
 \xdb\xbe\x5c\xbe\x5d\xb1\x2f\x72\xc7\x40\x1b\xb2\x5e\xf0\x36\xb2\
 \x81\x65\x54\x71\x2a\xd9\xf3\x7f\x20\x22\x95\x33\xb7\xa5\xfd\xce\
 \x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x07\xb7\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3\x3e\x61\xcb\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x03\xb1\x00\x00\x03\xb1\
+\x01\xf5\x83\xed\x49\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x07\x34\x49\x44\
+\x41\x54\x78\x9c\xed\x9d\x71\x88\x15\x45\x1c\xc7\x3f\x7a\x2f\xaf\
+\xec\x4c\xef\xd2\xb2\xd2\x48\xc2\x4c\xeb\x2a\x50\x4b\xe1\xb2\x28\
+\x14\xa9\xe8\x9f\xc0\xa3\x42\x89\x0a\x42\x2d\x09\x22\x0a\x21\x50\
+\x52\xa4\x10\x4a\x4a\x49\x2a\x33\x42\x25\x2b\x28\xaf\x2c\x0d\x8c\
+\xfe\x48\x4b\xa9\x8b\xac\x30\x13\xf3\xb4\xe4\xc8\xf3\x52\x2f\x3d\
+\xbb\xf3\xbc\xfe\x98\xbb\xba\x77\xbe\xb7\xbb\xb3\x6f\x66\x67\xf7\
+\xcd\xef\x03\xbf\x7f\xde\xce\xce\x7c\x77\xe6\xbb\xbb\x6f\x67\x66\
+\x67\xc1\x1e\xe7\x03\xf3\x81\x6d\x40\x33\xd0\x01\x1c\x04\x36\x00\
+\x33\x2d\x96\x6b\x93\x51\xc0\x32\xa0\x11\x38\x01\x9c\x04\x7e\x02\
+\x5e\x06\xc6\x39\xd4\x95\x3a\xa6\x02\x4d\x40\x77\x40\x6c\x01\x2e\
+\x76\x25\x30\x06\x0b\x80\x53\x14\x3f\x9e\x4e\x60\x09\x30\xd0\x95\
+\xc0\xb4\x30\x0d\x68\x27\xb8\xf1\x7b\x63\x0f\x50\xed\x46\xa6\x16\
+\x8b\x89\x76\x3c\xdd\xc0\x1a\x47\x1a\x53\x41\x35\xf0\x27\xd1\x2b\
+\xab\x1b\xf8\xc0\x89\xd2\xe8\xcc\x04\xce\xa2\x77\x4c\x0f\x3b\x51\
+\x9a\x02\x96\xa2\x57\x51\xbd\x31\xc5\x85\xd8\x88\x34\xa2\x7f\x3c\
+\x87\x81\x41\x2e\xc4\xba\x66\x3f\xf1\x0c\xb0\xc2\x85\xd8\x08\x4c\
+\x20\xde\xf1\x74\x03\x33\x1c\xe8\xd5\xc6\xe4\x1f\x96\xe1\xc0\x98\
+\x98\xfb\x4e\x36\xa8\xc3\x24\xa5\xe8\xba\xd9\x98\x0a\x8b\x98\x34\
+\xc0\x88\x12\xf6\xbd\xd4\x98\x0a\xb3\x94\xe3\x31\xe5\x61\xd2\x00\
+\x39\x47\xfb\xda\xa4\x14\x5d\x15\xc6\x54\x58\xc4\xfb\x67\x56\xdf\
+\x11\x03\x78\x4e\x0e\xf8\x44\x23\xfd\x22\x60\x97\x1d\x29\x81\xcc\
+\x03\xee\xb6\x94\xb7\xad\x7c\xc3\x78\x0b\xb8\x24\x62\xda\x95\xc0\
+\x66\x1b\x22\x72\xc0\x5d\x1a\xe9\x57\xd9\x10\x11\x81\x5a\xf4\x74\
+\x66\x81\x3b\x81\xd1\x11\xd3\x7e\x6c\x4b\x84\xdc\x02\x3c\x47\x0c\
+\xe0\x39\x62\x00\xcf\x11\x03\x78\x8e\x18\xc0\x73\x4c\xf6\xc0\xb5\
+\x03\xdf\xc6\xdc\xb7\xd9\xa0\x0e\x93\x34\x13\xff\x98\x0e\x9a\x14\
+\x62\x0b\x93\x06\xd8\x07\x4c\x32\x98\x5f\x1a\x58\xdb\x13\x65\x8b\
+\xdc\x02\x3c\x47\x0c\xe0\x39\x62\x00\xcf\x11\x03\x78\x8e\x18\xc0\
+\x73\xc4\x00\x9e\xa3\xfb\x18\xf8\x34\xf0\xa0\x0d\x21\x21\xd8\x9c\
+\x33\xb8\xde\x62\xde\x41\xa4\xe2\xa5\x18\x5d\x03\xdc\x66\x45\x85\
+\x5b\xee\x77\x2d\xc0\x25\x72\x0b\xf0\x1c\x31\x80\xe7\x88\x01\x3c\
+\x47\x0c\xe0\x39\x62\x00\xcf\xc9\x01\x87\x5c\x8b\x10\x42\x69\x73\
+\x2d\x40\x10\x04\x41\x10\x04\x41\x10\x04\x41\x28\x0b\x06\x00\xab\
+\x5d\x8b\x10\x42\x59\x0f\x7c\x69\x2b\xf3\xb8\x8b\x20\x49\x24\x17\
+\x73\x8b\xb6\x5e\x89\x48\x57\xb0\xe7\x88\x01\x3c\x47\x0c\xe0\x39\
+\x62\x00\xcf\x11\x03\x78\x8e\x18\xc0\x73\xc4\x00\x9e\x23\x06\xf0\
+\x1c\x31\x80\xe7\x98\x5c\x20\xe2\x6f\xe0\x6b\x8d\xf4\x75\xa8\xef\
+\x0a\x15\xa2\x19\xf8\x31\x62\x3e\x39\xe0\xf6\x80\xed\xfb\x80\x03\
+\x11\xf3\x1a\x46\xf0\x22\x17\xdf\x03\x2d\x11\xf3\x1a\x05\x5c\x1b\
+\x31\xad\x53\x4c\x75\x57\xfe\xa0\x59\x6e\xd0\x37\x85\xd6\x69\xe4\
+\x33\x34\x44\xd7\xb3\x1a\x79\xd5\x85\xe4\xa5\xb3\xaa\xe8\xdc\x90\
+\xbc\xa4\x2b\x58\x70\x8f\x18\xc0\x73\xc4\x00\x9e\x23\x06\xf0\x1c\
+\x31\x80\xe7\x88\x01\x3c\xc7\x64\x3f\xc0\x18\xe0\x73\x8d\xf4\x41\
+\x1f\x4b\xb8\x43\x23\xaf\xb0\x63\x78\x04\xb5\x36\x7f\x14\x86\x85\
+\x6c\x5f\x02\x3c\x19\x31\xaf\x51\x11\xd3\x39\xc7\xf5\x74\x27\x09\
+\xe9\x07\x10\x5c\x21\x06\xf0\x1c\x31\x80\xe7\x88\x01\x3c\x47\x0c\
+\xe0\x39\x32\x1c\x9c\x4f\xd8\x70\xb0\x4d\x8e\x03\xc7\x7a\xa2\x1d\
+\xb8\x00\x18\x02\x54\x03\x67\x6c\x16\x6c\xea\x51\xc5\x87\xe1\x60\
+\x13\xd1\x89\x7a\xcd\xeb\x45\x60\x36\x70\x13\x30\x48\x43\xa3\x51\
+\xd2\xfa\xd1\xe6\x72\xa3\x1d\xd8\x04\x34\x00\x9f\x02\xad\x6e\xe5\
+\xfc\x8f\x18\xc0\x2e\x87\x81\xd7\x81\x57\x89\x3e\x93\x28\x51\xc4\
+\x00\x76\x68\x02\x16\x02\xef\x02\x5d\x8e\xb5\x04\x22\x06\x30\xcb\
+\x49\x60\x39\xf0\x02\xea\xb2\x9f\x7a\xc4\x00\xe6\xf8\x02\x98\x03\
+\xfc\xee\x5a\x88\x0e\xd2\x0f\x50\x3a\x67\x80\xc5\xc0\x74\x32\xd6\
+\xf8\xa0\x56\x08\xe9\x36\x94\x97\x8f\xfd\x00\x2d\xc0\xbd\xc0\x0e\
+\x8d\x7d\xfa\x92\x03\x6e\x00\xc6\xa1\xa6\x90\x8f\x04\x2e\x42\xd5\
+\x4b\x27\xaa\x6f\xe0\x38\xf0\x0b\xb0\x17\xf8\x0e\x0b\xab\x86\xba\
+\x1e\xea\xcc\x6a\x1c\x20\xde\xbc\xff\x1a\xd4\xf0\x6e\x03\x70\x42\
+\xb3\xcc\x4e\x60\x3b\xb0\x08\xb8\x26\x46\xd9\x05\x71\x5d\x91\x59\
+\x8c\xdd\xc0\xe5\x9a\xf5\x3c\x09\xd8\x08\x9c\x36\xa8\x63\x07\x50\
+\x4f\x89\xb7\x72\xd7\x95\x99\xb5\x38\x04\x8c\xd6\xa8\xdf\x1b\x81\
+\xcf\x2c\x6b\xda\x03\xcc\xd2\xd0\x94\x87\xeb\x0a\xcd\x52\xb4\x10\
+\xfd\xb2\x5f\x05\xbc\x84\xba\x6c\x27\xa5\x6f\x2b\x30\x36\xa2\xbe\
+\xff\x70\x5d\xa9\x59\x89\x0e\x60\x6a\xc4\x3a\x9d\x80\xba\x4d\xb8\
+\xd0\xd9\x86\xe6\x97\xdd\x5c\x57\x6c\x56\xe2\x99\x88\xf5\x59\x0f\
+\x9c\x4a\x81\xde\x57\x80\x8a\x30\xb1\x26\x1f\x03\xdb\x81\x9f\x35\
+\xd2\xd7\x52\x7c\x14\xac\x15\xf8\x2d\x62\x3e\x15\xa8\x11\x35\x9b\
+\x6c\x43\x3d\xe7\x9f\x0d\x49\x37\x0f\x55\xf1\x69\xe9\x5f\xf9\x10\
+\xf5\x59\xbc\xd3\x41\x89\x4c\x39\x2e\xad\xc3\xc1\xa5\xc6\x09\xe0\
+\x8a\x08\x3a\x4c\xbe\x0d\x6c\x32\x1a\x08\xe8\xf1\x4d\x8b\x53\xd3\
+\xcc\x52\xe0\x8f\x90\x34\xf5\xa8\x11\xbf\x34\x72\x0f\xf0\x5a\x50\
+\x02\xb9\x02\x14\x8f\xfd\x14\xef\xad\xec\xe5\x7a\xd4\x20\x90\xeb\
+\x33\x3d\x2c\x1e\x2f\x24\x5e\xae\x00\xc1\x2c\x24\xf8\xfe\x59\x05\
+\xbc\x0f\x0c\x4e\x46\x4e\x49\x2c\x07\x26\xf6\xff\x51\x0c\x50\x9c\
+\x26\xe0\xbd\x90\x34\xcf\xa3\xfa\xf1\xb3\x40\x25\xf0\x36\x70\x5e\
+\xdf\x1f\xc5\x00\xc5\x59\x49\xf0\x64\x8e\x5a\x60\x7e\x42\x5a\x4c\
+\x71\x1d\xb0\xa0\xef\x0f\x62\x80\xc2\xb4\x03\x6b\x42\xd2\x2c\xa7\
+\xdf\xd9\x94\x11\x9e\xa3\xcf\x4b\xb0\x26\x27\x84\x5c\x89\x1a\xec\
+\x88\xca\xf0\x80\x6d\x75\x1a\x79\xd9\x68\x84\x4d\xc0\xd1\x80\xed\
+\x93\x81\x19\x06\xcb\x6b\x41\xf5\x21\x14\xe3\x51\x83\xe5\x0d\x05\
+\x9e\x40\xdd\xbe\x00\xf7\xff\x4e\xd3\x18\x0f\x84\x54\xe2\x46\xc3\
+\xe5\x35\x85\x94\xb7\xca\x70\x79\x47\x50\xff\x09\xe4\x16\x50\x80\
+\x2e\x60\x4b\xc0\xf6\x1a\xd4\x24\x90\x2c\x33\x1c\xd5\x3f\x20\x06\
+\x28\xc0\x57\x04\x5f\xfe\xeb\xe9\x39\x7b\x32\xce\x6c\x10\x03\x14\
+\xe2\x9b\x90\xed\x3a\x8b\x45\xa6\x99\xe9\x40\xa5\x18\xe0\x5c\x76\
+\x07\x6c\xcb\x01\xb7\x26\x25\xc4\x32\x83\x81\x5b\xc4\x00\xe7\x12\
+\xd4\xa5\x5d\x8b\x9a\xb4\x59\x2e\xd4\xc9\x7b\x01\xf9\x74\xa3\xa6\
+\x57\x15\x63\x7c\x52\x42\xfa\xd1\x82\x1a\x97\x28\xc4\x40\xe0\xaa\
+\x98\xf9\x8e\x07\xf7\x8f\x5c\x69\x8a\x63\x21\x15\xb6\xd8\x52\xb9\
+\x61\x8f\x81\x41\x94\x32\x18\xb6\x53\x6e\x01\xf9\xfc\x15\xb2\xfd\
+\xb2\x44\x54\x24\xc7\x48\x31\x40\x3e\x61\x57\x80\xaa\x44\x54\x24\
+\xc7\x10\x31\x40\x3e\xa7\x42\xb6\x5f\x98\x88\x8a\xe4\xa8\x12\x03\
+\xe4\x13\xd6\xc0\xff\x24\xa2\x22\x39\x4e\x8b\x01\xf2\x09\x7b\xc4\
+\x33\xfe\x5e\x9e\x63\xda\xc4\x00\xf9\x84\x19\x20\x35\x4b\xbb\x18\
+\xe2\x68\x0e\x78\xcc\xb5\x8a\x14\x11\xb6\x1a\xd7\x5e\x4b\xe5\xd6\
+\x00\xab\x63\xee\x5b\xca\x02\x53\xbf\x96\xb0\xaf\x97\x4c\xc3\x7d\
+\x5f\x85\xc9\x58\x26\xb7\x00\x3d\x1a\x51\xef\xfa\x95\x0b\x3b\x5d\
+\x0b\xc8\x22\xdb\x71\x7f\xe6\x9a\x88\x2e\xa0\x46\xae\x00\xfa\x6c\
+\x75\x2d\xc0\x10\xbb\x80\x56\x31\x80\x3e\xeb\x50\x67\x50\xd6\x59\
+\xef\x5a\x40\x96\xd9\x81\xfb\x4b\x78\x29\xd1\x01\x8c\x00\x99\x11\
+\x14\x97\x15\xae\x05\x94\xc8\x3a\xd4\xc4\x50\x21\x26\x15\xa8\x79\
+\x03\xae\xcf\xe4\x38\x71\x86\xec\xbc\xcd\x94\x6a\x66\xe1\xbe\x31\
+\xe3\xc4\x9b\x36\x2a\xc3\x57\x36\xe3\xbe\x41\x75\xa2\x95\x9e\x7b\
+\xbf\x60\x86\xb1\xa8\x01\x22\xd7\x0d\x1b\x35\x1e\xb2\x52\x0b\x9e\
+\x53\x8f\xfb\x86\x8d\x12\x1b\x6c\x55\x80\xa0\xd6\x05\x72\xdd\xc0\
+\x41\xd1\x48\xf9\x4d\x66\x49\x15\x03\x31\xff\xbe\xa0\xa9\xd8\x8f\
+\x5a\x83\x58\xb0\x4c\x25\x6a\x55\x2e\xd7\x0d\xde\xbf\xf1\xaf\xb6\
+\x79\xd0\x42\x3e\x39\xe0\x0d\xdc\x37\x7c\xef\x65\x5f\xce\x7c\x47\
+\xcc\xc1\xed\x62\x91\xef\x50\x7e\x33\x98\x33\xc7\x44\xd4\x6b\x66\
+\x49\x36\xfc\x51\xe4\x51\x2f\x55\xe4\x80\xa7\x50\xef\x1b\xd8\x6c\
+\xf8\x2e\x54\x0f\x9f\x74\xf2\xa4\x94\x61\xa8\xb5\x79\x8e\x60\xb6\
+\xe1\x3b\x80\xb5\x48\xdf\x7e\x66\xa8\x04\xee\x03\x3e\x22\xfe\xe2\
+\x92\x5d\xa8\x4f\xf3\x2c\xc0\xc0\x19\x3f\xa0\xd4\x0c\x84\xd8\x0c\
+\x02\xa6\xa0\x16\xc4\x1a\x8f\x3a\x8b\x47\xa2\xfe\xbc\x55\xa3\xbe\
+\xc1\xd4\x86\xea\xbf\xef\xfd\x66\xd0\x4e\xd4\x67\x67\x8d\x4d\x4f\
+\xff\x17\x73\x4b\xdf\xe7\x60\x20\xbf\x29\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
 "
 
 qt_resource_name = b"\
@@ -993,33 +993,33 @@ qt_resource_name = b"\
 \x04\x49\xba\x07\
 \x00\x77\
 \x00\x72\x00\x69\x00\x74\x00\x69\x00\x6e\x00\x67\x00\x2d\x00\x74\x00\x6f\x00\x6f\x00\x6c\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x0c\
-\x0b\xdf\x21\x47\
-\x00\x73\
-\x00\x65\x00\x74\x00\x74\x00\x69\x00\x6e\x00\x67\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x0c\
-\x07\xb5\x0f\xc7\
-\x00\x63\
-\x00\x61\x00\x6c\x00\x65\x00\x6e\x00\x64\x00\x61\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
 \x00\x07\
 \x03\x83\x57\xa7\
 \x00\x6d\
 \x00\x61\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x0b\xdf\x21\x47\
+\x00\x73\
+\x00\x65\x00\x74\x00\x74\x00\x69\x00\x6e\x00\x67\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
 \x00\x0b\
 \x00\x9f\x5e\x07\
 \x00\x64\
 \x00\x61\x00\x6e\x00\x63\x00\x69\x00\x6e\x00\x67\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x07\xb5\x0f\xc7\
+\x00\x63\
+\x00\x61\x00\x6c\x00\x65\x00\x6e\x00\x64\x00\x61\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
 "
 
 qt_resource_struct_v1 = b"\
 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
 \x00\x00\x00\x0c\x00\x02\x00\x00\x00\x05\x00\x00\x00\x03\
-\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x2c\x6a\
-\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x20\x67\
-\x00\x00\x00\x18\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x18\xac\
+\x00\x00\x00\x70\x00\x00\x00\x00\x00\x01\x00\x00\x24\xaf\
 \x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x5c\
+\x00\x00\x00\x18\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x34\x30\
+\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x19\x5f\
 "
 
 qt_resource_struct_v2 = b"\
@@ -1029,15 +1029,15 @@ qt_resource_struct_v2 = b"\
 \x00\x00\x00\x00\x00\x00\x00\x00\
 \x00\x00\x00\x0c\x00\x02\x00\x00\x00\x05\x00\x00\x00\x03\
 \x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x2c\x6a\
+\x00\x00\x00\x70\x00\x00\x00\x00\x00\x01\x00\x00\x24\xaf\
 \x00\x00\x01\x79\x67\x62\x7f\x71\
-\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x20\x67\
+\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x5c\
 \x00\x00\x01\x79\x67\x61\x29\x69\
 \x00\x00\x00\x18\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
 \x00\x00\x01\x79\x67\x5f\xb7\x25\
-\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x18\xac\
+\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x34\x30\
 \x00\x00\x01\x79\x67\x61\x88\xeb\
-\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x5c\
+\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x19\x5f\
 \x00\x00\x01\x79\x67\x61\xca\x95\
 "
 

+ 54 - 4
ui/window.py

@@ -4,10 +4,15 @@
 
     @author:[author], [year]
 """
+import re
+
+from path import Path
+
 from PyQt5.QtGui import QIcon
-from PyQt5.QtWidgets import QMainWindow, QListWidgetItem
+from PyQt5.QtWidgets import QMainWindow, QListWidgetItem, QTableWidgetItem, QFileDialog, QDialog, QMessageBox
 
-from core import discography
+from core.models import MusicFolder
+from core.repositories import MusicFolderRepository
 from ui.qt.main_ui import Ui_mainWindow
 
 
@@ -20,6 +25,7 @@ class MainWindow(QMainWindow):
         self.ui = Ui_mainWindow()
         self.ui.setupUi(self)
 
+        # --- Stack and menus
         self.ui.stack.setCurrentIndex(0)
 
         menu_items = [
@@ -37,11 +43,55 @@ class MainWindow(QMainWindow):
             self.ui.menu.addItem(item)
 
         # Menu item clicked
-        self.ui.menu.itemClicked.connect(self.menuItemSelected)
+        self.ui.menu.itemClicked.connect(self.menu_item_selected)
 
+        # Page 5 - settings
+        self.ui.musicFoldersTable.setColumnHidden(0, 1)
+        self.ui.musicFoldersAddButton.clicked.connect(self.add_music_folder)
+        self.ui.musicFoldersRemoveButton.clicked.connect(self.remove_music_folder)
+        self.populate_music_folders_table()
 
-    def menuItemSelected(self, e):
+
+    def menu_item_selected(self, e):
         self.ui.stack.setCurrentIndex(e.index)
 
+    def populate_music_folders_table(self):
+        music_folders = MusicFolderRepository().get_all()
+        self.ui.musicFoldersTable.setRowCount(0)
+        self.ui.musicFoldersTable.setRowCount(len(music_folders))
+        music_folder_statuses = [
+            ('Inconnu', 'status_unknown.png'),
+            ('Valide', 'status_found.png'),
+            ('Inaccessible', 'status_unavailable.png')
+        ]
+        for i, music_folder in enumerate(music_folders):
+            self.ui.musicFoldersTable.setItem(i, 0, QTableWidgetItem(music_folder.id))
+
+            status_lbl, status_pic = music_folder_statuses[music_folder.status]
+            self.ui.musicFoldersTable.setItem(i, 1, QTableWidgetItem(QIcon(status_pic), status_lbl))
+
+            self.ui.musicFoldersTable.setItem(i, 2, QTableWidgetItem(music_folder.path))
+
+    def add_music_folder(self):
+        path = QFileDialog.getExistingDirectory(self, "Sélectionnez le dossier à ajouter")
+        if not path:
+            return
+        path = Path(path)
+
+        repo = MusicFolderRepository()
+
+        music_folders = repo.get_all()
+        if any(re.match(str(path), f"^{f.path}.*") for f in music_folders):
+            QMessageBox.warning(self, "Ajout invalide",  "Ce dossier ou un dossier le contenant ont déjà été ajoutés")
+
+        folder = MusicFolder(None, path)
+        repo.create(folder, True)
+
+        self.populate_music_folders_table()
+
+    def remove_music_folder(self):
+        pass
+
     def run(self):
         pass
+