aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorCristián Maureira-Fredes <cmaureirafredes@gmail.com>2021-06-28 16:42:55 +0200
committerCristián Maureira-Fredes <Cristian.Maureira-Fredes@qt.io>2021-07-21 10:01:45 +0200
commitc9330b0acf680d4c2a0933b8bf67dc9b3114de5d (patch)
treef58d82c3ce57f04960e39f3af596e5a010f21a7f /examples
parentb1b2cc2ebed2fcf6e31c1fbbdd3638216e34717b (diff)
qml: replace context properties and code updates
Most of the qml code in the repository was outdated, and followed bad practices, like context properties. Complementary, after the major updates for Qt6 most of the code was not relying on the new ways of register types (singletons, and using the decorator QmlElement). Drop the context property usage in the following examples: - signals/qmltopy1 - signals/qmltopy2 - signals/pytoqml2 - usingmodel - quickcontrols2/gallery - textproperties Additionally: - all the tests related to context properties - tutorials/qmlapp - tutorials/qmlsqlintegration - Removing 'scrolling' example - Fixing some flake8 warnings Change-Id: I649248c0149876bf2bf94e78e27cef7110f42f1d Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Keith Kyzivat <keith.kyzivat@qt.io>
Diffstat (limited to 'examples')
-rw-r--r--examples/declarative/extending/chapter1-basics/basics.py2
-rw-r--r--examples/declarative/scrolling/doc/scrolling.pngbin79 -> 0 bytes
-rw-r--r--examples/declarative/scrolling/doc/scrolling.rst9
-rw-r--r--examples/declarative/scrolling/scrolling.py70
-rw-r--r--examples/declarative/scrolling/scrolling.pyproject3
-rw-r--r--examples/declarative/signals/pytoqml1/view.qml2
-rw-r--r--examples/declarative/signals/pytoqml2/main.py11
-rw-r--r--examples/declarative/signals/pytoqml2/view.qml5
-rw-r--r--examples/declarative/signals/qmltopy1/main.py15
-rw-r--r--examples/declarative/signals/qmltopy1/view.qml18
-rw-r--r--examples/declarative/signals/qmltopy2/main.py13
-rw-r--r--examples/declarative/signals/qmltopy2/view.qml8
-rw-r--r--examples/declarative/textproperties/main.py24
-rw-r--r--examples/declarative/textproperties/view.qml52
-rw-r--r--examples/declarative/usingmodel/usingmodel.py25
-rw-r--r--examples/declarative/usingmodel/view.qml5
-rw-r--r--examples/quickcontrols2/gallery/gallery.py10
-rw-r--r--examples/quickcontrols2/gallery/gallery.qml6
-rw-r--r--examples/quickcontrols2/gallery/rc_gallery.py643
19 files changed, 442 insertions, 479 deletions
diff --git a/examples/declarative/extending/chapter1-basics/basics.py b/examples/declarative/extending/chapter1-basics/basics.py
index f1492d959..412b25cad 100644
--- a/examples/declarative/extending/chapter1-basics/basics.py
+++ b/examples/declarative/extending/chapter1-basics/basics.py
@@ -45,7 +45,7 @@ import os
from pathlib import Path
import sys
-from PySide6.QtCore import Property, Signal, Qt, QUrl
+from PySide6.QtCore import Property, Signal, QUrl
from PySide6.QtGui import QGuiApplication, QPen, QPainter, QColor
from PySide6.QtQml import qmlRegisterType
from PySide6.QtQuick import QQuickPaintedItem, QQuickView
diff --git a/examples/declarative/scrolling/doc/scrolling.png b/examples/declarative/scrolling/doc/scrolling.png
deleted file mode 100644
index 6058c5930..000000000
--- a/examples/declarative/scrolling/doc/scrolling.png
+++ /dev/null
Binary files differ
diff --git a/examples/declarative/scrolling/doc/scrolling.rst b/examples/declarative/scrolling/doc/scrolling.rst
deleted file mode 100644
index a16e39df7..000000000
--- a/examples/declarative/scrolling/doc/scrolling.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-Scrolling Example
-=================
-
-A Python application that demonstrates how to use a qml view
-and make it scrollable.
-
-.. image:: scrolling.png
- :width: 400
- :alt: Scrolling Screenshot
diff --git a/examples/declarative/scrolling/scrolling.py b/examples/declarative/scrolling/scrolling.py
deleted file mode 100644
index c585cc962..000000000
--- a/examples/declarative/scrolling/scrolling.py
+++ /dev/null
@@ -1,70 +0,0 @@
-
-#############################################################################
-##
-## Copyright (C) 2016 The Qt Company Ltd.
-## Contact: http://www.qt.io/licensing/
-##
-## This file is part of the Qt for Python examples of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:BSD$
-## You may use this file under the terms of the BSD license as follows:
-##
-## "Redistribution and use in source and binary forms, with or without
-## modification, are permitted provided that the following conditions are
-## met:
-## * Redistributions of source code must retain the above copyright
-## notice, this list of conditions and the following disclaimer.
-## * Redistributions in binary form must reproduce the above copyright
-## notice, this list of conditions and the following disclaimer in
-## the documentation and/or other materials provided with the
-## distribution.
-## * Neither the name of The Qt Company Ltd nor the names of its
-## contributors may be used to endorse or promote products derived
-## from this software without specific prior written permission.
-##
-##
-## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-import os
-from pathlib import Path
-import sys
-from PySide6.QtCore import QUrl
-from PySide6.QtGui import QGuiApplication
-from PySide6.QtQuick import QQuickView
-
-# This example uses a QML file to show a scrolling list containing
-# all the items listed in dataList.
-
-if __name__ == '__main__':
- dataList = ["Item 1", "Item 2", "Item 3", "Item 4"]
-
- app = QGuiApplication(sys.argv)
- view = QQuickView()
-
- ctxt = view.rootContext()
- ctxt.setContextProperty("myModel", dataList)
-
- qml_file = os.fspath(Path(__file__).resolve().parents[1] / 'usingmodel' / 'view.qml')
- view.setSource(QUrl.fromLocalFile(qml_file))
- if view.status() == QQuickView.Error:
- sys.exit(-1)
- view.show()
-
- app.exec()
- # Deleting the view before it goes out of scope is required to make sure all child QML instances
- # are destroyed in the correct order.
- del view
diff --git a/examples/declarative/scrolling/scrolling.pyproject b/examples/declarative/scrolling/scrolling.pyproject
deleted file mode 100644
index 105c321ca..000000000
--- a/examples/declarative/scrolling/scrolling.pyproject
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "files": ["scrolling.py"]
-}
diff --git a/examples/declarative/signals/pytoqml1/view.qml b/examples/declarative/signals/pytoqml1/view.qml
index a35b4866a..aebf8432b 100644
--- a/examples/declarative/signals/pytoqml1/view.qml
+++ b/examples/declarative/signals/pytoqml1/view.qml
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt for Python examples of the Qt Toolkit.
diff --git a/examples/declarative/signals/pytoqml2/main.py b/examples/declarative/signals/pytoqml2/main.py
index 30ec5a4f6..31e860dc1 100644
--- a/examples/declarative/signals/pytoqml2/main.py
+++ b/examples/declarative/signals/pytoqml2/main.py
@@ -45,8 +45,16 @@ import sys
from PySide6.QtCore import QObject, QTimer, QUrl, Signal, Slot
from PySide6.QtGui import QGuiApplication
from PySide6.QtQuick import QQuickView
+from PySide6.QtQml import QmlElement
+# To be used on the @QmlElement decorator
+# (QML_IMPORT_MINOR_VERSION is optional)
+QML_IMPORT_NAME = "examples.signals.pytoqml2"
+QML_IMPORT_MAJOR_VERSION = 1
+
+
+@QmlElement
class RotateValue(QObject):
valueChanged = Signal(int, arguments=['val'])
@@ -67,8 +75,7 @@ if __name__ == '__main__':
rotatevalue = RotateValue()
timer = QTimer()
timer.start(2000)
- context = view.rootContext()
- context.setContextProperty("rotatevalue", rotatevalue)
+ view.setInitialProperties({"rotatevalue": rotatevalue})
qml_file = os.fspath(Path(__file__).resolve().parent / 'view.qml')
view.setSource(QUrl.fromLocalFile(qml_file))
diff --git a/examples/declarative/signals/pytoqml2/view.qml b/examples/declarative/signals/pytoqml2/view.qml
index 41b185af0..ca2fb46f0 100644
--- a/examples/declarative/signals/pytoqml2/view.qml
+++ b/examples/declarative/signals/pytoqml2/view.qml
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2020 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt for Python examples of the Qt Toolkit.
@@ -41,11 +41,14 @@
import QtQuick 2.0
import QtQml 2.0
+import examples.signals.pytoqml2 1.0
+
Rectangle {
id: page
width: 500; height: 200
color: "lightgray"
+ required property RotateValue rotatevalue
Text {
id: helloText
diff --git a/examples/declarative/signals/qmltopy1/main.py b/examples/declarative/signals/qmltopy1/main.py
index d323d9a0f..b84d98a71 100644
--- a/examples/declarative/signals/qmltopy1/main.py
+++ b/examples/declarative/signals/qmltopy1/main.py
@@ -45,8 +45,16 @@ import sys
from PySide6.QtCore import QObject, QUrl, Slot
from PySide6.QtGui import QGuiApplication
from PySide6.QtQuick import QQuickView
+from PySide6.QtQml import QmlElement
+# To be used on the @QmlElement decorator
+# (QML_IMPORT_MINOR_VERSION is optional)
+QML_IMPORT_NAME = "examples.signals.qmltopy1"
+QML_IMPORT_MAJOR_VERSION = 1
+
+
+@QmlElement
class Console(QObject):
"""Output stuff on the console."""
@@ -68,13 +76,6 @@ if __name__ == '__main__':
app = QGuiApplication(sys.argv)
view = QQuickView()
- # Instantiate the Python object.
- con = Console()
-
- # Expose the object to QML.
- context = view.rootContext()
- context.setContextProperty("con", con)
-
qml_file = os.fspath(Path(__file__).resolve().parent / 'view.qml')
view.setSource(QUrl.fromLocalFile(qml_file))
if view.status() == QQuickView.Error:
diff --git a/examples/declarative/signals/qmltopy1/view.qml b/examples/declarative/signals/qmltopy1/view.qml
index 32a66eff4..ec8b3452c 100644
--- a/examples/declarative/signals/qmltopy1/view.qml
+++ b/examples/declarative/signals/qmltopy1/view.qml
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt for Python examples of the Qt Toolkit.
@@ -41,12 +41,18 @@
import QtQuick 2.0
+import examples.signals.qmltopy1 1.0
+
Rectangle {
id: page
width: 500; height: 200
color: "lightgray"
+ Console {
+ id: pyConsole
+ }
+
Text {
id: helloText
text: "Hello world!"
@@ -66,12 +72,12 @@ Rectangle {
objectName: "buttonMouseArea"
anchors.fill: parent
onClicked: {
- // once the "con" context has been declared,
+ // once the "console" context has been declared,
// slots can be called like functions
- con.outputFloat(123)
- con.outputStr("foobar")
- con.output(helloText.x)
- con.output(helloText.text)
+ pyConsole.outputFloat(123)
+ pyConsole.outputStr("foobar")
+ pyConsole.output(helloText.x)
+ pyConsole.output(helloText.text)
}
}
Text {
diff --git a/examples/declarative/signals/qmltopy2/main.py b/examples/declarative/signals/qmltopy2/main.py
index 1bf22b2af..21addc13b 100644
--- a/examples/declarative/signals/qmltopy2/main.py
+++ b/examples/declarative/signals/qmltopy2/main.py
@@ -1,7 +1,7 @@
#############################################################################
##
-## Copyright (C) 2016 The Qt Company Ltd.
+## Copyright (C) 2021 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the Qt for Python examples of the Qt Toolkit.
@@ -45,8 +45,15 @@ import sys
from PySide6.QtCore import QObject, QUrl, Slot
from PySide6.QtGui import QGuiApplication
from PySide6.QtQuick import QQuickView
+from PySide6.QtQml import QmlElement
+# To be used on the @QmlElement decorator
+# (QML_IMPORT_MINOR_VERSION is optional)
+QML_IMPORT_NAME = "examples.signals.qmltopy2"
+QML_IMPORT_MAJOR_VERSION = 1
+
+@QmlElement
class RotateValue(QObject):
def __init__(self):
super().__init__()
@@ -64,10 +71,6 @@ if __name__ == '__main__':
app = QGuiApplication(sys.argv)
view = QQuickView()
- rotatevalue = RotateValue()
- context = view.rootContext()
- context.setContextProperty("rotatevalue", rotatevalue)
-
qml_file = os.fspath(Path(__file__).resolve().parent / 'view.qml')
view.setSource(QUrl.fromLocalFile(qml_file))
if view.status() == QQuickView.Error:
diff --git a/examples/declarative/signals/qmltopy2/view.qml b/examples/declarative/signals/qmltopy2/view.qml
index 6fe6087f2..b8cb23cc2 100644
--- a/examples/declarative/signals/qmltopy2/view.qml
+++ b/examples/declarative/signals/qmltopy2/view.qml
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt for Python examples of the Qt Toolkit.
@@ -40,12 +40,18 @@
import QtQuick 2.0
+import examples.signals.qmltopy2 1.0
+
Rectangle {
id: page
width: 500; height: 200
color: "lightgray"
+ RotateValue {
+ id: rotatevalue
+ }
+
Text {
id: helloText
text: "Hello world!"
diff --git a/examples/declarative/textproperties/main.py b/examples/declarative/textproperties/main.py
index 48a3f1d91..0408313d3 100644
--- a/examples/declarative/textproperties/main.py
+++ b/examples/declarative/textproperties/main.py
@@ -1,6 +1,6 @@
#############################################################################
##
-## Copyright (C) 2018 The Qt Company Ltd.
+## Copyright (C) 2021 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the Qt for Python examples of the Qt Toolkit.
@@ -39,14 +39,21 @@
#############################################################################
import sys
-from os.path import abspath, dirname, join
+from pathlib import Path
from PySide6.QtCore import QObject, Slot
from PySide6.QtGui import QGuiApplication
-from PySide6.QtQml import QQmlApplicationEngine
+from PySide6.QtQml import QQmlApplicationEngine, QmlElement
from PySide6.QtQuickControls2 import QQuickStyle
+# To be used on the @QmlElement decorator
+# (QML_IMPORT_MINOR_VERSION is optional)
+QML_IMPORT_NAME = "io.qt.textproperties"
+QML_IMPORT_MAJOR_VERSION = 1
+
+
+@QmlElement
class Bridge(QObject):
@Slot(str, result=str)
@@ -95,17 +102,10 @@ if __name__ == '__main__':
QQuickStyle.setStyle("Material")
engine = QQmlApplicationEngine()
- # Instance of the Python object
- bridge = Bridge()
-
- # Expose the Python object to QML
- context = engine.rootContext()
- context.setContextProperty("con", bridge)
-
# Get the path of the current directory, and then add the name
# of the QML file, to load it.
- qmlFile = join(dirname(__file__), 'view.qml')
- engine.load(abspath(qmlFile))
+ qml_file = Path(__file__).parent / 'view.qml'
+ engine.load(qml_file)
if not engine.rootObjects():
sys.exit(-1)
diff --git a/examples/declarative/textproperties/view.qml b/examples/declarative/textproperties/view.qml
index 98289a1ba..cb7992e45 100644
--- a/examples/declarative/textproperties/view.qml
+++ b/examples/declarative/textproperties/view.qml
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2018 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt for Python examples of the Qt Toolkit.
@@ -39,11 +39,13 @@
****************************************************************************/
-import QtQuick 2.0
-import QtQuick.Layouts 1.11
-import QtQuick.Controls 2.1
-import QtQuick.Window 2.1
-import QtQuick.Controls.Material 2.1
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Window
+import QtQuick.Controls.Material
+
+import io.qt.textproperties 1.0
ApplicationWindow {
id: page
@@ -53,6 +55,10 @@ ApplicationWindow {
Material.theme: Material.Dark
Material.accent: Material.Red
+ Bridge {
+ id: bridge
+ }
+
GridLayout {
id: grid
columns: 2
@@ -78,9 +84,9 @@ ApplicationWindow {
Layout.alignment: Qt.AlignLeft
text: "Italic"
onToggled: {
- leftlabel.font.italic = con.getItalic(italic.text)
- leftlabel.font.bold = con.getBold(italic.text)
- leftlabel.font.underline = con.getUnderline(italic.text)
+ leftlabel.font.italic = bridge.getItalic(italic.text)
+ leftlabel.font.bold = bridge.getBold(italic.text)
+ leftlabel.font.underline = bridge.getUnderline(italic.text)
}
}
@@ -89,9 +95,9 @@ ApplicationWindow {
Layout.alignment: Qt.AlignLeft
text: "Bold"
onToggled: {
- leftlabel.font.italic = con.getItalic(bold.text)
- leftlabel.font.bold = con.getBold(bold.text)
- leftlabel.font.underline = con.getUnderline(bold.text)
+ leftlabel.font.italic = bridge.getItalic(bold.text)
+ leftlabel.font.bold = bridge.getBold(bold.text)
+ leftlabel.font.underline = bridge.getUnderline(bold.text)
}
}
RadioButton {
@@ -99,9 +105,9 @@ ApplicationWindow {
Layout.alignment: Qt.AlignLeft
text: "Underline"
onToggled: {
- leftlabel.font.italic = con.getItalic(underline.text)
- leftlabel.font.bold = con.getBold(underline.text)
- leftlabel.font.underline = con.getUnderline(underline.text)
+ leftlabel.font.italic = bridge.getItalic(underline.text)
+ leftlabel.font.bold = bridge.getBold(underline.text)
+ leftlabel.font.underline = bridge.getUnderline(underline.text)
}
}
RadioButton {
@@ -110,9 +116,9 @@ ApplicationWindow {
text: "None"
checked: true
onToggled: {
- leftlabel.font.italic = con.getItalic(noneradio.text)
- leftlabel.font.bold = con.getBold(noneradio.text)
- leftlabel.font.underline = con.getUnderline(noneradio.text)
+ leftlabel.font.italic = bridge.getItalic(noneradio.text)
+ leftlabel.font.bold = bridge.getBold(noneradio.text)
+ leftlabel.font.underline = bridge.getUnderline(noneradio.text)
}
}
}
@@ -135,7 +141,7 @@ ApplicationWindow {
highlighted: true
Material.accent: Material.Red
onClicked: {
- leftlabel.color = con.getColor(red.text)
+ leftlabel.color = bridge.getColor(red.text)
}
}
Button {
@@ -144,7 +150,7 @@ ApplicationWindow {
highlighted: true
Material.accent: Material.Green
onClicked: {
- leftlabel.color = con.getColor(green.text)
+ leftlabel.color = bridge.getColor(green.text)
}
}
Button {
@@ -153,7 +159,7 @@ ApplicationWindow {
highlighted: true
Material.accent: Material.Blue
onClicked: {
- leftlabel.color = con.getColor(blue.text)
+ leftlabel.color = bridge.getColor(blue.text)
}
}
Button {
@@ -162,7 +168,7 @@ ApplicationWindow {
highlighted: true
Material.accent: Material.BlueGrey
onClicked: {
- leftlabel.color = con.getColor(nonebutton.text)
+ leftlabel.color = bridge.getColor(nonebutton.text)
}
}
}
@@ -182,7 +188,7 @@ ApplicationWindow {
id: slider
value: 0.5
onValueChanged: {
- leftlabel.font.pointSize = con.getSize(value)
+ leftlabel.font.pointSize = bridge.getSize(value)
}
}
}
diff --git a/examples/declarative/usingmodel/usingmodel.py b/examples/declarative/usingmodel/usingmodel.py
index bd1fa2eba..3d5a03964 100644
--- a/examples/declarative/usingmodel/usingmodel.py
+++ b/examples/declarative/usingmodel/usingmodel.py
@@ -1,7 +1,7 @@
#############################################################################
##
-## Copyright (C) 2016 The Qt Company Ltd.
+## Copyright (C) 2021 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the Qt for Python examples of the Qt Toolkit.
@@ -45,6 +45,7 @@ import sys
from PySide6.QtCore import QAbstractListModel, Qt, QUrl, QByteArray
from PySide6.QtGui import QGuiApplication
from PySide6.QtQuick import QQuickView
+from PySide6.QtQml import qmlRegisterSingletonType
class PersonModel (QAbstractListModel):
@@ -75,9 +76,17 @@ class PersonModel (QAbstractListModel):
return d['myrole']
return None
- def populate(self):
- self._data.append({'name': 'Qt', 'myrole': 'role1'})
- self._data.append({'name': 'PySide', 'myrole': 'role2'})
+ def populate(self, data=None):
+ for item in data:
+ self._data.append(item)
+
+
+def model_callback(engine):
+ my_model = PersonModel()
+ data = [{'name': 'Qt', 'myrole': 'role1'},
+ {'name': 'PySide', 'myrole': 'role2'}]
+ my_model.populate(data)
+ return my_model
if __name__ == '__main__':
@@ -85,17 +94,15 @@ if __name__ == '__main__':
view = QQuickView()
view.setResizeMode(QQuickView.SizeRootObjectToView)
- myModel = PersonModel()
- myModel.populate()
-
- view.rootContext().setContextProperty("myModel", myModel)
+ qmlRegisterSingletonType(PersonModel, "PersonModel", 1, 0, "MyModel", model_callback)
qml_file = os.fspath(Path(__file__).resolve().parent / 'view.qml')
view.setSource(QUrl.fromLocalFile(qml_file))
if view.status() == QQuickView.Error:
sys.exit(-1)
view.show()
- app.exec()
+ r = app.exec()
# Deleting the view before it goes out of scope is required to make sure all child QML instances
# are destroyed in the correct order.
del view
+ sys.exit(r)
diff --git a/examples/declarative/usingmodel/view.qml b/examples/declarative/usingmodel/view.qml
index 8eb4f7f97..682723d27 100644
--- a/examples/declarative/usingmodel/view.qml
+++ b/examples/declarative/usingmodel/view.qml
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt for Python examples of the Qt Toolkit.
@@ -39,12 +39,13 @@
****************************************************************************/
import QtQuick 2.0
+import PersonModel 1.0
ListView {
width: 100
height: 100
anchors.fill: parent
- model: myModel
+ model: MyModel
delegate: Component {
Rectangle {
height: 25
diff --git a/examples/quickcontrols2/gallery/gallery.py b/examples/quickcontrols2/gallery/gallery.py
index 2c123fb7e..f4c3f3795 100644
--- a/examples/quickcontrols2/gallery/gallery.py
+++ b/examples/quickcontrols2/gallery/gallery.py
@@ -60,8 +60,8 @@ import sys
import platform
from PySide6.QtGui import QGuiApplication, QIcon
-from PySide6.QtCore import QSettings, QUrl
-from PySide6.QtQml import QQmlApplicationEngine, QQmlContext
+from PySide6.QtCore import QSettings
+from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtQuickControls2 import QQuickStyle
import rc_gallery
@@ -75,7 +75,9 @@ if __name__ == "__main__":
settings = QSettings()
if not os.environ.get("QT_QUICK_CONTROLS_STYLE"):
- QQuickStyle.setStyle(settings.value("style", str))
+ style_name = settings.value("style")
+ if style_name:
+ QQuickStyle.setStyle(style_name)
engine = QQmlApplicationEngine()
@@ -84,7 +86,7 @@ if __name__ == "__main__":
built_in_styles.append("macOS")
elif platform.system() == "Windows":
built_in_styles.append("Windows")
- engine.rootContext().setContextProperty("builtInStyles", built_in_styles)
+ engine.setInitialProperties({"builtInStyles": built_in_styles})
engine.load(":/gallery.qml")
rootObjects = engine.rootObjects()
diff --git a/examples/quickcontrols2/gallery/gallery.qml b/examples/quickcontrols2/gallery/gallery.qml
index f8714199e..398aa73a1 100644
--- a/examples/quickcontrols2/gallery/gallery.qml
+++ b/examples/quickcontrols2/gallery/gallery.qml
@@ -73,9 +73,11 @@ ApplicationWindow {
Qt.openUrlExternally(url)
}
+ required property var builtInStyles
+
Settings {
id: settings
- property string style: "Basic"
+ property string style
}
Shortcut {
@@ -285,7 +287,7 @@ ApplicationWindow {
ComboBox {
id: styleBox
property int styleIndex: -1
- model: builtInStyles
+ model: window.builtInStyles
Component.onCompleted: {
styleIndex = find(settings.style, Qt.MatchFixedString)
if (styleIndex !== -1)
diff --git a/examples/quickcontrols2/gallery/rc_gallery.py b/examples/quickcontrols2/gallery/rc_gallery.py
index 0815c05ea..8b0dcec7f 100644
--- a/examples/quickcontrols2/gallery/rc_gallery.py
+++ b/examples/quickcontrols2/gallery/rc_gallery.py
@@ -1,6 +1,6 @@
# Resource object code (Python 3)
# Created by: object code
-# Created by: The Resource Compiler for Qt version 6.0.0
+# Created by: The Resource Compiler for Qt version 6.1.2
# WARNING! All changes made in this file will be lost!
from PySide6 import QtCore
@@ -25,7 +25,7 @@ l]\x0aAccent=#41cd5\
****************\
************\x0a**\x0a\
** Copyright (C)\
- 2020 The Qt Com\
+ 2021 The Qt Com\
pany Ltd.\x0a** Con\
tact: https://ww\
w.qt.io/licensin\
@@ -175,216 +175,217 @@ SE$\x0a**\x0a*********\
***/\x0a\x0aimport QtQ\
uick.Controls\x0a\x0aT\
oolBar {}\x0a\
-\x00\x00\x0c\xff\
+\x00\x00\x0d\x09\
\x00\
-\x00/~x\x9c\xbd\x1a\xefs\xa3\xb8\xf5{\xfe\x0a\xd5\
-\xbd\x0f\xc9\x9dC6\xb9\xeeu\xc67\xdb\x1b\xc7&\x09\
-S\xc7\xce\x02\xdet\xa7\xd3\xb9\xc1 \xdbj0\x22B\
-\xc4\xf1m\xf3\xbf\xf7=\x090\x18p\x12\xf7\xae\xcc\xce\
-\x06\xa4\xa7\xf7[\xef==\xf9\xec\xfb\xdf\xf19R\xff\
-\xc8\x80\xc7\x1b\xc1\x16KI\x8e\x07'\xe4\xe2\xc3\xf9_\
-\x89\xbb\xa4\xe4\xb3\x84\x99U\xecE\x1b2\x92\x81\xa1!\
-#\xe9\xf9\xb2G\x96R\xc6I\xef\xecl\xbd^\x1b\x8f\
-\xd2`\xfc,d>\x8d\x12\x16-\xce2\xac\xee\x92%\
-d\xceBJ\xe0o\xec\x09I\xf8\x9cH\xc0K\x9f\xbd\
-U\x1c\xd2$\xff\x06:.\xe7\xe1\x03\x93F\xb6\xf4\xbb\
-\xcf\xee\xaf\x97\xe6\xb55\xfeud\x0d\xcc\xb1c\xf6.\
-\x9d\xe1w\x9a\x81\xd5\x8a\x0a\x9fy!\x19)\x82\x94L\
-\x13oAq.\x1b\x00\xc4K\x1e\x06\xc0\x09y\xf2B\
-\x16\x10\x7f\xbb\x06Hi>\x01h\xe5mH\x0a\xeb\xe5\
-\x96\xcf\x08\xd1x\xbe\xcfE\xe0E>%k&\x97\x8a\
-\xc5\x12\x8al=\xf1\x16\x82\xd2\x15\x8d$\x89\x05\x7fb\
-\x01\x0d\x0ap\xc4\xe2\xf0\xb9\x5c{\x82\x12.\xba\xc4\x0b\
-%\x15\x91'\xd9\x13\x0d7]\xa0\xd3H\x04`V\x09\
-\x90\x02\x15\xb3\x08\xd0e\xec\x90\xb5`R\xd2\xa8Dq\
-F\xe5\x9a\xc2\xc8\x86\xa7\xc4\x8b\x82\x1dk\x19\xe4\x8a\x0b\
-R\xd8C\xe3U\xa8\x22TF\x140\xc9x\x94\x10P\
-U\x83\x1d\x15\xf4\xe9\x16Lc\x9b\xa7\x02X\x14\x88\x85\
-Es.V\x1eNf\xfa\xa3\x9ai_\x12\x9c!\x9e\
-l@\x9bA\x9c\xa6Ind0i\xdd\x86\xfd\xaa\xa6\
-P\xc0\xba\x9d\xd2(\xa0\xa2\xa4\xb2\xcc\x8f\x10af\x1d\
-%-@\xf30\xe4\xeb\xa4\x97Q\xec\xd84`\x89\x14\
-l\x96*\xeeQ\x1f\x88\x19\xec\x91\xf0T\x80-pd\
-\xc6\x22Ol\x94(IW[\x07\x14\x80\x7fy*\x11\
-\xcd\x8a\x07l\xce|\xa5\x01\xb0-\xd88\x066\xd0F\
-\xc1\xd6\x17\xe4\x12\xd4\x80\x5ci\x1e\xd0\x0e%\xd5\xc3\x22\
-\x85\x89J\xe4\x8d\x10\xf2=\xa9\xf2\xa6\x84\xca\x98\xf2y\
-@\xc9*M$\x11\x14]C\xa1\xf5f\xfc\x09\xa7\xb2\
-\x9d\xab\xb1\x10\x12q\x09\x1a\xe8je\x85\x80\x10\xf1\x94\
-\x09G\xc1\x0eW@\xd5\x0f=\x06\xeem\xb4\xb1\x02$\
-KJ\xc9Y\x01Q\x83\xd4\xa7\x7f\x147\x99\xfb\xe3\x83\
- \x01\xf7S\xf4}/\xb7\xdc\x19\x18\x85\xa3O\x82\x83\
-\x80\x1b\xc0\xd6L\x9aw\x22>ey\x0a1\xc7\x94\xa9\
-\xf5\x88>\xf2V\x14\x99\xab\xc7=\x10b\x0b\xa2\xcc\xc2\
-d\x92\xe3E\xafVx\xb9\xd0\x01eF\xd1\xa3@*\
-Nh\x14\xc0(\x06\x00\xe4k\xc5%%Ze2!\
-\xe0\xbf\xe0\xe1A\x8ef\x0e\xf3ZII\x1e62\x7f\
-#IL}\xf46X\xcb\xd0\x0d\xb3X\xa0<.I\
-2q\xf2\x88{c9\xc4\x99\x5c\xb9\xf7}\xdb$\xf0\
-~gO\xbeXCsH.\xbf\xc2\xa4I\x06\x93\xbb\
-\xaf\xb6u}\xe3\x92\x9b\xc9hh\xda\x0e\xe9\x8f\x870\
-:vm\xebr\xeaNlGm\x93\xbe\x03\x8b;j\
-\xae?\xfeJ\xcc\x7f\xdc\xd9\xa6\xe3\x90\x89M\xac\xdb\xbb\
-\x91\x05\xf8\x80\x80\xdd\x1f\xbb\x96\xe9t\x895\x1e\x8c\xa6\
-Ck|\xdd%\x80\x83\x8c'\xae\x0a\xc6\xd6\xad\xe5\x02\
-\xa4;\xe9*\xd2\xf5\x95drEnM{p\x03\x9f\
-\xfdKkd\xb9_\x15\xc9+\xcb\x1d#\xb9\xab\x89\xad\
-\x22\x02\xb9\xeb\xdb\xae5\x98\x8e\xfa6\xb9\x9b\xdaw\x13\
-\xc7$(\xdf\xd0r\x06\xa3\xbeuk\x0e\x0d\xe0\x01\xe8\
-\x12\xf3\x8b9v\x89s\xd3\x1f\x8d\xaa\xe2\x22\x9e\xc9\xfd\
-\xd8\xb4Q\x86\xb2\xb8\xe4\xd2\x04N\xfb\x97#\x13\xc9)\
-i\x87\x96m\x0e\x5c\x14k\xfb6\x00%\x02\x93\xa3\xae\
-\x8a\xecw\xe6\xc0\x82w\xd0\x8b\x09B\xf5\xed\xaf\xdd\x0c\
-\xadc~\x9e\x02\x1cL\x92a\xff\xb6\x7f\x0d2\x1e\xbf\
-\xae\x1d0\xd2`j\x9b\xb7\xc8;\xa8\xc4\x99^:\xae\
-\xe5N]\x93\x5cO&C\xa5v\xc7\xb4\xbf@\x22t\
-~&\xa3\x89\xa3\x147uL\xc5\xcc\xb0\xef\xf6\x15y\
-\xc0\x02\x8a\x03\x08x\xbf\x9c:\x96R\xa15vM\xdb\
-\x9e\xde\xb9\xd6d|\x026\xbf\x07\x0d\x01\xa7}X=\
-T\xba\x9e\x8cQf\xed;\xe6\xc4\xfe\x8a\xa8Q\x1f\xca\
-\x1a]r\x7fc\xc2\xb8\x8d\xeaUZ\xeb\xa3:\x1c\xd0\
-\xde\xc0-\x83\x01IP\xa6\x12l+/\x19\x9b\xd7#\
-\xeb\xda\x1c\x0fL\x04\x98 \xa2{\xcb1O\xc0x\x96\
-\x83\x00\x96\x22\x0e\x1e\x01d\xa7Jv4\x1a\xf0\xa6\xcc\
-uUu\xe7\xae\xb2.\xb1\xaeH\x7f\xf8\xc5B\xfe3\
-x\xf0\x07\xc7\xca\xdcG\xa9op\x93i\xdf\xe8\x94\xca\
-\x09s<\xcc\x8b\x89\xef\xf4\xf0\xef\xf7\x9c\x1d\x1d\xb1U\
-\xcc\xa1\xc2\xf9,?\xa7\xcc\x7f\xd8\xf94F\x1e$2\
-\x88\x1a;\xc3XM\x09\x1e\x96\xc6\x8d\xd0\x9b%FB\
-\xa5\x84`\x98\x14h;F\x07\xd3Y?\x8e\x8f\x8e\xe0\
-\xbf0K>\xf7\x0cB\xcc\x9a|;\xc2\x18\xc2\x82\x1e\
-\x04\x0d\x1cP\x9fk\x16\xc8e\x8f\xfc\xf8\xd3\x07\xf5\xb9\
-\xa4\x18\x97{\xe4\xe3\x85\xfe~b\x09\x9b\x85\xb4G\xa4\
-H\xa9\x1a\x91L\xe2w\x07\xa2\x9f\xe2\x8e\xe4\xdcu\x8e\
-\xd4\xfc<\x8d|\x15{\x974\x8c\x8fO2\xaa\xf8\x84\
-Tb\x80\x8dCo\x03\x5cg\xcb\xc8'\x15\xf0\xbf0\
-\xba6\xfcT\x08\x08\xdd\x16\xa4\xedg\xf2\xa7O\x9f\xc8\
-\xe9yeq6\x9f\xad\x1cc(\xfeT\xc7X,\xc1\
-\xe7\x97-vH\xc744\x16T\x1e7\x12<1\x94\
-d\x86\xe4#\xbe\xa6b\xe0%\x14\xb8\x07A;\x15\x1e\
-R\x81,w\xf2\xc2\x05\xd2MV\xb8<\xca\xd3\x8fg\
-\x9d\x0a\xf1\x1f\xc8\xf1~\xee\x14\x83\x9d\xc7Ux\xfa(\
-\x1fQ\x99\xa7~\xa6\xcc\x8b\xd3\x0e,o\x10\xf8\x070\
-\xf2R\xae\xc2\xce.\x22\xe0\xb4\x8e\x04P\x83\xd8)\x88\
-\xa5\xd6\x9c\xfc\x5c\xac\x02\x1f\xe21\x8d\xa6\x224\x9fU\
-)\x15\x86\x9bc\x10\xeeDA\xbch[:\x99\x83\x95\
-\x8c\x88\xeeS\xf8]>\x08\xf9\x0a\x12\x8d\xdc\x10\xcc\x9e\
-\x90\x9d\x13\xb9Q>r\xe9%\xcc\xefT0.\xc1O\
-}\xc8W[\x8c\x09}L)\x14\xb8I\x8f\xfc\xb3c\
-&~\xa7\x8b\x0b\xfd\x87\xce\xbf\x0a\x10\x1ay\xe0\x84H\
-\x19j\xc3\x07e\xba\x80\xc6\x90\xba\xffF\xb6\x1e\xc2\xa3\
->8\xde\x13$y\x00\x8c\xbc'\xb6\x80WD\xd4W\
-\xfeh\x00k\x8b\x05\x15\xc7'o\xe4\xa7G\x1c\x09\xf5\
-\x83'\x82\xbf\xd3\x8dq\x03\xde\x8cv\x00s$\xcd$\
-\xb5\xbf\x97\x91k\xc2;\xca\xabs\xb6\x9d\x06\xc3\x19X\
->4\x0a\x8a\xae2C\xbd\xa0\xa9\x03\xe1\x81\x93vJ\
-\x9c\xb8Z<\xe4\xe4[\xc57\xd8\x9c\x1c7\xa0;\xd9\
-\x01S\xa2\x17`1\xcfe)?\xcd;\xb5\xb2O\x95\
-\xf8\x84\x86P\xd0\xd4\xf1k\xae\x95\xe3\xed`\x7f9\xaa\
-\xbe\xbd\xc5<\x9d[\x1a\xa5\x9dfc\xf0XU\x8e\x08\
-\xb1\xcf\xfc\x8d\x16\xaa\xadm2Pg\xb5C\xbc\xa4\xff\
-\x12\x82\xb2\xac\x19\xcd%\xf5\xa0\xac\xeba\x946\xf0<\
-{\xe9\x89\x12\x036_\xeb,\xb0\xa3\xbe$\xf6|\xd8\
-Z=\x92\x05\xe6\xfc\x81\xa3!\xe8(1\xe0\xc0\x13\xf6\
-\xf0\xf8\x0cf9\xaa@(\x1a\xa9\x94\x159\x8b\xe5J\
-\xc0\xbd^Yb=\x7fF\xde\x8c\x86\x0d\xd8P{*\
-\x8a*\x80\xda\xb4\xa4\xcf\x90ZjN$\xe9\xaa\x1c\xa7\
-K\xc3\x06\xae@w\xbf\x86\xf0D\xc5\xa6\x16\xf4\xe0D\
-\x10I#f\xcf4t\xd8o\xb4\xa6\x1d|(\x9c\xed\
-aF\xb1d\x98\xf8a\xab\xb3\xc7.\x1c\xa8\x91\xfd\x86\
-\xa7\xcf\xb0\x1f\xb2E\x84\x87\x88\x1e\x86I\xf5u3\x80\
-O8\xd7\xee.z\x82\xb0\x07Y\xb6i\xc9\x97\x96%\
-\xda\xbc\xca`\xf7:\xf9\x16\xb9\xb5E\xddo\xb2`\xdd\
-kk\xa08\xd7\x80\x01\x9f\x1d\xbfo\x84y\xce\xfd\xcb\
-PE\x039\xd5\xc5C#\xac\x14^\x94\xe0)p\x02\
-\xdb\x82\x01{j3\xb8<\xd6\xbao\x5cS\xdb\x8c5\
-\xa4\xca\x7f:yV\xaa{C\xfeTvc\x9e\xad\x86\
-p\xf4\xe3\x8b\xa6\xe0\x93?/\xff\x13[\x98!\xde\xc8\
-R)U\xfc\xbe<\xf4g\xe0Zod\xc2C\xd8C\
-\x94\xf2r\xd4\xfcU\x89\xdcC\x15\xeaw\x22\xab\x8e\xff\
-\xc5PV{\xdezri\xacXt\xac\xcbR\xed]\
-\xdd\xacH5tEzB\xce\xc8\x8fp\x16\xbf(\x16\
-\xe7\x95j\x05lK\x0d\xb7\x1en\x8d\xa7\x86d\xfa\x09\
-J\xcb\xf3\xad\x0f\x8e\xb2\xc8\xb3\x9b7\x83m\xac\xaa:\
-\xec\x9c\xfbi\xd2\xb0m\xcbY\xb1\xb7\x9b\x14_\x0f\xd4\
-P\x9eR\x8c\xc1=\x82\xb1o\x98}5\x18=\xd3[\
-\x111\x9b\xb7\xa1v\x09]\xf5\xaa\xa0\x5c\x8fx\xa0\xb2\
-\x10\xd5\x86\xee\x90k\xc1`\xc9`\x1b\x81kkx4\
-\x80c\xc5C\xbd\xcc\xc8\x9f\xb6\x1a\x81\xe1\xdf\xc6\x15\xa5\
-\xaa#M\x96\xc7\x9ac\xdd\xd3jv\xc9\xac\x8c\xf0C\
-\x8e5\xfa\xab\xfeY\xf9T\xd8\xb5\xb4\xb7\xf8\xda \x05\
-\xce\x99\xa1\xee\xa0~+\xce;\x97i\xb2\x01Y\xf0H\
-\xc5E\xe7\xe7\xac\xe9\x86U\xb7\xf0{g\xb1\xb7\xa0\xc9\
-Y\x05\xe6\x0e\x86\x0c(\xc0;\x0d[\xa8\x8d\x04\xc6\xf8\
-V\xdc8\xf9~\xa4\x83%\xf5\x1f.\xf9s\x0b\xda|\
-\xfa\x00\xc4|5\xe3{\x10g\xd3\xefG\x0c\x9e\xefm\
-\xf6\xea\xa2\x04q\x00z\x08ymxa\xea0\x84|\
-\xb1\x07%_\x1c\xa4\x04\xb5\xfd\x93v\x15\xa8\xf9\xf7c\
-\xbe\x12P\xc0\xb6`Us\xefGy-x\x1a\xb7\xbb\
-B>\xfd~\xc4\xb8\xe2\xb5MW\x819\x80\x84\xe0\x0b\
-A\x93\x04\xca\xf06\x02[\x88\xf7\xa3\xb7\xbd\x80\xf1\xbd\
-\xce\x5c\x828\x04}\xb4\xa0\x0e\x16\xb5m\xdc\x97 \xde\
-\x8f\xde\xf1\x05\x0f\xc3v\xd5\x14\xf3\x87\xa2~\xcd\xb8;\
-P\x07\x90\xd9\xa7\x9b\x83\xd5\x12\xb3\xa8\xdd\xdd\xb3\xd9\x03\
-\xd0\xe6\x89\xb0\x0dq>\x7f\x00\xea5\x8b\xe9>\xd4\xf9\
-\xfcA\xa8\xa5\xbfl\xc7\x0b\x93\xefG\xeaz\xb3v\xaf\
-\xd3\x93\x07 \x85\x8a\xa8/\xa8\xd7\x866\x9b>\x0c\xf1\
-\x15\xa3a\xb0\x07\xb3\x9a?\x005\x9c\xfd\x5c\x16\xb7!\
-\xd6\xb3\x07\xa0MW\xb3\xb0u_d\xb3mhwJ\
-\xaa\x9d=j\xe4g\xe2\xde\xee\x0c\xd0o\xeb\xf3\xe4\x9e\
-\xbd\xdbi\xcc\xc7\x8b\xd1\xfde4\x8b\x98\x84\x84\x8b\x95\
-k\x8f\xdcy\xd1n\xf5\x8c8c\x18\xae\x0a`\xad@\
-\xd0\x96v\x06$o\xdeV\x80#&\xc3{\xf2X\x88\
-\xedIu\x98\x87c\xcaE\x0d<?\xaaT\xe1o\xd4\
-h\xe3\x82\x5cH_u\x10\xac\xa8\x10\xb4\x0d0W\xb9\
-n9L\xe6s8\xf4\xc2\x09\xe4c\xbd\x1b\x82z\xc3\
-\xc2\xb7\xa7\xa56\xee \xb3Q\xf1D\xfbx\x81\x08N\
-Z\xa7Q8\x08[)\xe7x\x94\xa7\xa8\x14#\x8e\x16\
-\x9d}n\xd1\xd6$\xca\x8e\xaa\xb5\xfb\x83\xfcV6!\
-\x1e\x9e\xd9\xb3+`=\xa5n\xc9}/*\xdf\x9b\xce\
-R\x16\xaa\x1fm\xc4!\x95T\x9f\xf8\xe6\x9eO\xd5=\
-t\x8e\xdd\xa8\x1f\x86s\x9d\xad<\xb1`Q\xd2\xd83\
-\xcaa$\x8f\xb5\x0b\x183\x0e\x09\xba~\x1c\xca\x01C\
-:\x97E{\x04?Z!E\xee\x0b\x0aT4\xb6\xa2\
-rXM\x14\x8e\xeaB\xc0\x11\x17\x98y[\xd3J\xb7\
-\xba\xde\xdb\xb7*\xadjk]\xad\x85\x17k\xe7\xd1\xc0\
-\xf7\xf0\xbd\xcf\x05\xf6m,%\xd3\xab\xce\xa6%\xaf\xb9\
-ZYIoW}\xae\xce\x0c\xb6\xc1\xa4m\xcd\x0cU\
-\xc4\xb7\xdc\x82\xe8\xc9b\xea9kh@\xcd\x1b\x05\xc7\
-\x95\x9eF\xde1\xc3f\xc6\xc5\xf6\xdc\xba\xa9\xac\xa8\xf4\
-3\x00\xf0\xa7-`\xb9_\xa2\x81\xdf\xd5:\xd9\x22\x82\
-C0\x86\xe7J\x03\xa3\xa9\xa9Q\xa4\xf8\xa2\xe3VL\
-%\xd9\xdd\x88.\x5caa\xd6I\x9a<\x90\xff\xe4\xef\
-\x03\xfc\xdd\xd2\xb6\x0d\x8c\x0dz\x9f\xc6\xb2\xde;\xc8U\
-i\xa8\x8b#\xf2I_ A\x0ded\xf7g\x98@\
-\x1bWd\x94v[\x01/%\xa26\xfd7D\xb6\x06\
-\xa29\x8d\x9dFE1\xae^\xacZ\xdb\xe2U\xd2\xc5\
-\xab\xaf\xef\x8bt6\x1a\xf00]E\x8d\xbd\xfd\xb27\
-i\xb0*\xc1R\xeb\xbf2\xd1vWPYt\xfe\xa1\
-\xdemm\x0b\xcd\xf8\xe4MVu\x85W\xdfu/u\
-l\xf9I\x7fOk9\xd7i#@q{\x08!\x9c\
-l\x95^\xeb\xa0\xe5O\xd6\xc2\xc1\xf8\x0fFS\x8c&\
-\x8d\x80\xf8\xeb\x1c\x1e\xe1V\xe7\xd1 \xcb\x13\xad}+\
-|\xb6\xc4\xc1\x0f\xe6\xb0\x89\x8e\xab\x9e\xd9\xc5\xe6>\xec\
-9\x7fy\xc5\x9ei\xe0\xa8\xdb\xce\xe6\x1e\x95\x92\x5c\xdd\
-\xbc\x15(\xf5\x8dv;8>M\xbeXw\xc1\xfci\
-n\x16\xbf\xe1\x82\xa1\xbe\xf8}\xc9\xdb\xa6\xb0\xff\x05\xfe\
-\xba\xeb1e\x82\x06u?\xf1y\xc8\x05@\xfe\x99\xfe\
-\xe5\x9c^|\xac\x03ptP\xb9\xe9\xb5\xecCTV\
-\xc3N$\xbf\x90s\xe3\x03\xe9\x91\x0fF=k\xff\x7f\
-\x93\xe1\x1b\xd5\x5c\x02\xbb\xc9\xea\xc0\x86\xfb\x9e\xea\xdb\xbe\
-\xb4Sj\xdb\x1f\x1c\xcfw\xae\x09`\xab\xb5\xe7\xa9r\
-\x9a\xaa\xe5\xa6\xc6\xd4\xf4\xeeV~\x16's\xf5(\x09\
-u\x1c\xcc\xdb\xfa\x05\xa8\x1en\x88\x9f\xa5Eo\x0b\x9e\
-m\x1e\x9eIR\xbe\x1d\xa9\x96\xf8m{\x22\xfbI\xe0\
-NQ\xab\x7f~\x81\xbd}\x06n\x96\xe8_\x08\xe2\xad\
-\xe6\x82FT\x14\xbf\x8e\x15\xdb\xfau[\xf5\xce<,\
-u\xf9\xdej\xf6\xd5\x92L\xfbB\xf5\x96\xf4\xfc\xe2\x90\
-\xbd\x7f\xb0f\xacH\x95\xe9\x9e`\x09\x08\x03\xa5{]\
-M\xe7\xdd\x86\xc1\xe6\x8b\xac\x1fH\x07\x7f\xf8\x08\x87\x01\
-.\xf0\xf7\xbdpN\x80Z\x11\x0e~i@I\xc20\
-\xcc\x8b.\xd1\xf7\x1a\xf8\x9b\xea( s/\x81\xf7?\
-L{\xd5\xb7\x97\xa3\x97\xa3\xff\x02\xb1ebi\
+\x00/\xa5x\x9c\xbdZ_s\xe3\xb6\x11\x7f\xf7\xa7@\
+\xd5<\xd8\x89L\x9f\x9d^\x1e\x94\xb9vd\x89\xb69\
+\x95%\x1fI\x9f{\xd3\xe9d(\x12\x92PS\x04\x0f\
+\x84,+\xa9\xbf{w\x01\x90\x22ER\xb6\xd5\xa4\x9c\
+\x9b3\x09,~\xfb\x07\x8b\xc5b\xa1\xb3\xef\x7f\xc7\xe7\
+H\xfd#\x03\x9en\x04\x9b/$9\x1e\x9c\x90\x8b\x0f\
+\x17\xe7\xc4_P\xf2YB\xcf2\x0d\x92\x0d\x19\xc9\xc8\
+\xd2\x94\x89\x0cB\xd9#\x0b)\xd3\xacwv\xb6^\xaf\
+\xado\xd2b\xfc,f!M2\x96\xcc\xcf\x0c\xaa\xbf\
+`\x19\x99\xb1\x98\x12\xf8\x9b\x06B\x12>#\x12p\xe9\
+s\xb0Lc\x9a\xe5\xdf\xc0\xc7\xe7<~d\xd22C\
+\xbf\xfb\xec\xffri_;\xe3_F\xce\xc0\x1e{v\
+\xef\xd2\x1b~\xa7\x05X.\xa9\x08Y\x10\x93\x91bH\
+\xc9}\x16\xcc)\xf6\x99\x06\x00^\xf08\x02I\xc8S\
+\x10\xb3\x88\x84\xdb1\xc0J\xcb\x09D\xcb`CV0\
+^n\xe5L\x10&\x08C.\xa2 \x09)Y3\xb9\
+P\x22\x96 \xccx\x12\xcc\x05\xa5K\x9aH\x92\x0a\xfe\
+\xc4\x22\x1a\x15\xe4\x88\xe2\xf1\x99\x5c\x07\x82\x12.\xba$\
+\x88%\x15I \xd9\x13\x8d7]\xe0\xd3\xc8\x04h\x96\
+\x19\xb0\x02\x13\xb3\x04\xe0\x8c8d-\x98\x944)q\
+\x9cR\xb9\xa6\xd0\xb2\xe1+\x12$\xd1\xcelY\xe4\x8a\
+\x0bR\xcc\x87\xc6UP\x09\x1a#\x89\x98d<\xc9\x08\
+\x98\xaaa\x1e\x15\xf5\xe9\x96L\xa3\xcdV\x02D\x14\x88\
+\xc2\x92\x19\x17\xcb\x00;\x8d\xfd\xa8\x16:\x94\x04{H\
+ \x1b`\x0d\xc5\xe9*\xcb'\x19\xa6\xb4>\x87\xfd\xaa\
+\xa5P\xc1\xfa<\xad\x92\x88\x8a\x92\xc9\x8c\x1f!\xa0\x99\
+\x1d\xa5-P\xf38\xe6\xeb\xacg8v\x5c\x1a\xb1L\
+\x0a6])\xe9\xd1\x1e\x88\x0c\xf3\x91\xf1\x95\x80\xb9\xc0\
+\x96)K\x02\xb1Q\xaad]=;`\x00\xfc\xcbW\
+\x12a\x96<b3\x16*\x0b\xc0\xdc\xc2\x1c\xa7 \x06\
+\xceQ\xb4\xf5\x05\xb9\x003\xa0TZ\x06\x9c\x87\x92\xe9\
+a\x90B\xa2\x12e#\x84|O\xaa\xb2)\xa5\x8cP\
+!\x8f(Y\xae2I\x04E\xd7P\xb0\xc1\x94?a\
+\x97Y\xb9\x1a\x85\x90\x84K\xb0@W\x1b+\x06@\xc4\
+)3N\xa2\x1d\xa9\x80k\x18\x07\x0c\xdc\xdbj\x13\x05\
+X\x96\x8c\x92\x8b\x02\xaaF\xab\x90\xfeQ\xd2\x18\xf7\xc7\
+\x07I\x22\x1e\xae\xd0\xf7\x83|\xe6\xce`R8\xfa$\
+8\x08\xb8\x01,\xcd\xacy%\xe2S\xd6\xa7PsL\
+\x99\x1a\x8f\xf0I\xb0\xa4(\x5c=\xee\x81\x12[\x125\
+-Lf9.z\xb5\xc2\xe5B\x07\x94)E\x8f\x02\
+\xad8\xa1I\x04\xad\x18\x00P\xae%\x97\x94h\x93\xc9\
+\x8c\x80\xff\x82\x87G9\xcc\x0c\xfa\xb5\x91\xb2<l\x18\
+\x7f#YJC\xf46\x18\xcb\xd0\x0dM,P\x1e\x97\
+eF\x9d<\xe2\xde8\x1e\xf1&W\xfeC\xdf\xb5\x09\
+\xbc\xdf\xb9\x93/\xce\xd0\x1e\x92\xcb\xaf\xd0i\x93\xc1\xe4\
+\xee\xab\xeb\x5c\xdf\xf8\xe4f2\x1a\xda\xaeG\xfa\xe3!\
+\xb4\x8e}\xd7\xb9\xbc\xf7'\xae\xa7\x96I\xdf\x83\xc1\x1d\
+\xd5\xd7\x1f\x7f%\xf6?\xee\x5c\xdb\xf3\xc8\xc4%\xce\xed\
+\xdd\xc8\x01<`\xe0\xf6\xc7\xbec{]\xe2\x8c\x07\xa3\
+\xfb\xa13\xbe\xee\x12\xc0 \xe3\x89\xaf\x82\xb1s\xeb\xf8\
+@\xe9O\xba\x8au}$\x99\x5c\x91[\xdb\x1d\xdc\xc0\
+g\xff\xd2\x199\xfeW\xc5\xf2\xca\xf1\xc7\xc8\xeej\xe2\
+\xaa\x88@\xee\xfa\xae\xef\x0c\xeeG}\x97\xdc\xdd\xbbw\
+\x13\xcf&\xa8\xdf\xd0\xf1\x06\xa3\xbesk\x0f-\x90\x01\
+\xf8\x12\xfb\x8b=\xf6\x89w\xd3\x1f\x8d\xaa\xea\x22\xce\xe4\
+al\xbb\xa8CY]ri\x83\xa4\xfd\xcb\x91\x8d\xec\
+\x94\xb6C\xc7\xb5\x07>\xaa\xb5}\x1b\x80\x11A\xc8Q\
+WE\xf6;{\xe0\xc0;\xd8\xc5\x06\xa5\xfa\xee\xd7\xae\
+\x81\xf5\xec\xcf\xf7@\x07\x9dd\xd8\xbf\xed_\x83\x8e\xc7\
+\xaf[\x07&ip\xef\xda\xb7(;\x98\xc4\xbb\xbf\xf4\
+|\xc7\xbf\xf7mr=\x99\x0c\x95\xd9=\xdb\xfd\x02\x1b\
+\xa1\xf73\x19M<e\xb8{\xcfV\xc2\x0c\xfb~_\
+\xb1\x07\x140\x1cP\xc0\xfb\xe5\xbd\xe7(\x13:c\xdf\
+v\xdd\xfb;\xdf\x99\x8cO`\xce\x1f\xc0B i\x1f\
+F\x0f\x95\xad'c\xd4Y\xfb\x8e=q\xbf\x224\xda\
+C\xcdF\x97<\xdc\xd8\xd0\xee\xa2y\x95\xd5\xfah\x0e\
+\x0f\xac7\xf0\xcbd\xc0\x12\x8c\xa9\x14\xdb\xeaK\xc6\xf6\
+\xf5\xc8\xb9\xb6\xc7\x03\x1b\x09&\x08\xf4\xe0x\xf6\x09L\
+\x9e\xe3!\x81\xa3\x98\x83G\x00\xdb{\xa5;N\x1a\xc8\
+\xa6\xa6\xeb\xaa\xea\xce]5\xbb\xc4\xb9\x22\xfd\xe1\x17\x07\
+\xe57\xf4\xe0\x0f\x9ec\xdcG\x99opc\xacou\
+J\xe9\x84=\x1e\xe6\xc9\xc4w\xba\xf9\xf7{\xce\x8e\x8e\
+\xd82\xe5\x90\xe1|\x96\x9fW,|\xdc\xf9\xb4F\x01\
+ld\x105v\x9a1\x9b\x12<.\xb5[q0\xcd\
+\xac\x8cJ\x09\xc10+`;V\x07\xb7\xb3~\x9a\x1e\
+\x1d\xc1\x7f\xb1\xd9|\x1e\x18\x84\x985\xf9\xed\x08c\x08\
+\x8bz\x104\xb0A}\xaeY$\x17=\xf2\xe3O\x1f\
+\xd4\xe7\x82b\x5c\xee\x91\x8f\x17\xfa\xfb\x89el\x1a\xd3\
+\x1e\x91bEU\x8bd\x12\xbf;\x10\xfd\x94t$\x97\
+\xaes\xa4\xfag\xab$T\xb1wA\xe3\xf4\xf8\xc4p\
+\xc5'\xa6\x12\x03l\x1a\x07\x1b\x90\xda\x0c#\x9fT\xc0\
+\xff\xc2\xe8\xda\x0aWB@\xe8v`\xdb~&\x7f\xfa\
+\xf4\x89\x9c\x9eW\x06\x9b~3r\x8c\xa1\xf8S\x1d\xb1\
+\x18\x82\xcf\xdf\xb6\xe8\xb0\x1d\xd3\xd8\x9aSy\xdc\xc8\xf0\
+\xc4R\x9aY\x92\x8f\xf8\x9a\x8aA\x90Q\x90\x1e\x14\xed\
+TdX\x09\x14\xb9\x93'.\xb0\xdd\x98\xc4\xe5\x9b<\
+\xfdx\xd6\xa90\xff\x81\x1c\xef\x97N\x09\xd8\xf9\xb6\x8c\
+O\xbf\xc9oh\xcc\xd3\xd0\x18\xf3\xe2\xb4\x03\xc3\x1b\x14\
+\xfe\x01&y!\x97qg\x17\x08$\xad\x83\x004\xa8\
+\xbd\x02\xb5\xd4\x98\x93\x9f\x8bQ\xe0C<\xa5\xc9\xbd\x88\
+\xedg\x95J\xc5\xf1\xe6\x18\x94;Q\x14/z.\x05\
+\x05@\xa1\xd3\x15\xd8I\xe4\x062eA\xa6+\x16\x83\
+\xcd<\xb9\x81\xe4\x5c\x13z\xc6\x13K\xb3\x8d~V8\
+h\xdeX\xe0\xe06\x0b\xdbx\x86\x18e\x8e\xde\x02\xfc\
+8\x84\xfdl\x0b\x94\x81\x10\x14\x12\xe0\xacG\xfe\xd9\xb1\
+\xb3\xb0\xd3%\x9d\xcb |\xec\xfc\xab \xa1I\x00N\
+\x8a\x0c!w|TS\x1b\xd1\x14\xb6\xf6\xbf\x92\xad\x07\
+\xf1\xa4\x0f\x8e\xf9\x04I\x00\x10&\xc1\x13\x9b\xc3+\x02\
+\xf5\x95\xbfZ \xd1|N\xc5\xf1\xc9\x1b\xe5\xe9\x11O\
+B~\x11\x88\xe8\xeftc\xdd\x80\xb7\xe3<\xc1te\
+\xcd,\xf5z(\x83k\xc6;6\xabK\xb6\xed\x86\x89\
+\xb50\xbdhT\x14]i\x8avAW\x88D\x00N\
+\xdc)I\xe2k\xf5P\x92\xdf*\xbe\xc3f\xe4\xb8\x01\
+\xeed\x87L\xa9^\x90\xa5<\xd7\xa5\xfc4\xaf\xe4\xca\
+:V\xea\x13\x1aC\xc2S\xc7\xd7R+\xc7\xdcA\x7f\
+9\xaa\xbe\xbdez:\xb74Yu\x9a'\x83\xa7*\
+\xb3D\x8a}\xd3\xdf8C\xb5\xb1M\x13\xd4Y\xee0\
+/\xd9\xbf\x04P\xd6\xd5\xf0\x5c\xd0\x00\xd2\xbe\x1eFq\
+\x0b\xcf\xbb\x97\xb0\xe4\xb6\x02\xb8|\xadw\x89\x1d\xf3e\
+i\x10\xc2\x8a\xea\x11\x13\xb8\xf3\x07\x8e\x8e`\xa3\xcc\x82\
+\x03Q\xdc\xc3\xe35L\xcbQ\x85B\xf1XIY\xd1\
+\xb3\x18\xae\x14\xdc\xeb\x95%\xd1\xf3g\x14Li\xdc\x80\
+\x86\xd6SQV\x11\xd4\xba%}\x86\xad\xa7\xe6D\x92\
+.\xcbq\xbc\xd4l\xe1\x08t\xf7k\x08_Tlj\
+A\x11N\x0c\x89\xb4R\xf6Lc\x8f\xfdJk\xd6\xc1\
+\x87\xc2\xd9\x1fz\x94H\x96\x8d\x1f\xae:\x9b\xec\xd2\x81\
+\x19\xd9\xafx:\x8d\xfb1\x9b'x\xc8\xe8a\x18U\
+_7\x03\xf8\x84s\xef\xee\xa0'\x88v\xb0\x0b7\x0d\
+\xf9\xd22DO\xaf\x9a\xb0\x07\xbd9\x17{o\x8b\xb9\
+\xdf4\x83u\xaf\xad\x91b_\x03\x02>;~\xdfH\
+\xf3\x9c\xfb\x97\xa5\x92\x0ar\xaa\x93\x8bFZ)\x82$\
+\xc3S\xe2\x04\x96\x05\x03\xf1\xd4b\xf0y\xaam\xdf8\
+\xa6\xb6\x18k\xa0\xca\x7f:\xf9fT\xf7\x86\xfc\xa9\xac\
+\xc6|\x93\x1a\xc2\xd1\x90\xcf\x9b\x82O\xfe\xbc\xfcOb\
+\xe1\x0e\xf1F\x91J[\xc5\xef+C\x7f\x0a\xae\xf5F\
+!\x02\xa4=\xc4(/G\xcd_\x95\xc8=T\xa1~\
+'\xb2\xea\xf8_4\x99\xdc\xf46\x90\x0bk\xc9\x92c\
+\x9d\xb6j\xef\xea\x9a$\xd6\xd2\x19\xeb\x099#?\xc2\
+Y\xfd\xa2\x18\x9cg\xb2\x15\xb2-7\x5cz\xb84\x9e\
+\x1a6\xd3O\x90z\x9eo}pd\x22\xcf\xee\xbe\x19\
+mcU\xd5ag<\x5ce\x0d\xcb\xb6\xbc+\xf6v\
+7\xc5\xd7\x035\xa4\xaf\x14cp\x8f`\xec\x1b\x9a\xaf\
+\x86I7v+\x22f\xf32\xd4.\xa1\xb3b\x15\x94\
+\xeb\x11\x0fL\x16\xa3\xd9\xd0\x1dr+X,\x1bl#\
+pm\x0cO\x06p\xecx\xac\xa7\x19\xf9\xd3\x96#0\
+\xfc\xdb8\xa2\x94u\xac\xb2\xc5\xb1\x96X\xd7\xbc\x9a]\
+\xd2\xa4\x11a\xcc1\x87\x7f\xd5?+\x9f\x0a]k{\
+\x8b\xaf\x0dZ`\x9f\x1d\xeb\x0a\xebo\xc5y\xe8r\x95\
+m@\x17<rq\xd1\xf9\xd9\x14\xe50+\x17a\xef\
+,\x0d\xe64;\xab\xd0\xdcA\x93\x05\x09z\xa7a\x09\
+\xb5\xb1\xc0\x18\xdf\x8a\x8d\x9d\xef\x07\x1d,h\xf8x\xc9\
+\x9f[`\xf3\xee\x03\x80\xf9r\xca\xf7\x00\x9b\xee\xf7\x03\
+\x83\xe7\x07\x9b\xbd\xb6(Q\x1c\x00\x0f!\xaf\x0d\x17\xba\
+\x0e\x03\xe4\xf3=\x90|~\x90\x11\xd4\xf2\xcf\xdaM\xa0\
+\xfa\xdf\x8f|% \x81mAU}\xef\x87\xbc\x16|\
+\x95\xb6\xbbB\xde\xfd~`\x1c\xf1\xda\xa2\xab\xd0\x1c\xc0\
+B\xf0\xb9\xa0Y\x06ix\x1b\x83-\xc5\xfb\xe1\xdd \
+b|\xaf3\x97(\x0e\x81O\xe6\xd4\xc3\xa4\xb6M\xfa\
+\x12\xc5\xfb\xe1\xbdP\xf08n7M\xd1\x7f(\xf4k\
+\x93\xbbCu\x00\x9b}\xb69\xd8,)K\xda\xdd\xdd\
+\xf4\x1e\x00\x9bo\x84m\xc0y\xff\x01\xd0k\x96\xd2}\
+\xd0y\xffA\xd02\x5c\xb4\xe3B\xe7\xfbA\xfd`\xda\
+\xeeu\xba\xf3\x00P\xc8\x88\xfa\x82\x06m\xb0\xa6\xfb0\
+\xe0+F\xe3h\x0f\xb2\xea?\x00\x1a\xce~>K\xdb\
+\x80u\xef\x01\xb0\xab\xe54n]\x17\xa6\xb7\x0dv'\
+\xa5\xdaY\xa3V~&\xee\xed\xf6\x00\xff\xb6:O\xee\
+\xd9\xbb\x05\xc6\xbc\xbdh\xdd\x9fF\xb3\x84I\xd8p1\
+s\xed\x91\xbb \xd9\xcd\x9e\x113\x85\xe6\xaa\x02\xce\x12\
+\x14m)g\xc0\xe6\xcd\xdb\x12pD\xb2\x82\xa7\x80\xc5\
+X\x9eT\x87y8\xa6\x5c\xd4\xc8\xf3\xa3J\x95\xfeF\
+\xb56\x0e\xc8\x95\x0cU\x05\xc1I\x0aE\xdb\x08s\x93\
+\xeb\x92\xc3d6\x83C/\x9c@>\xd6\xab!h7\
+L|{Zk\xeb\x0ev6*\x9eh\x1f/\x18\xc1\
+I\xeb<\x0a\x07aK\xe5\x1c\xdf\xe4)\x1a\xc5J\x93\
+yg\x9f[\xb4\x15\x89\xccQ\xb5v\xbf\x90\xdf\xdaf\
+$\xc03\xbb\xb9\x22\xd6]\xea\x16=\x0c\x92\xf2\xbd*\
+\x96\xa9\xd5\x8f:\xd2\x98J\xaaO|\xb3 \xa4\xea\x9e\
+:G\xb7\xea\x87\xe1\xdcf\xcb@\xccY\x925\xd6\x8c\
+r\x1a\xc9S\xed\x02\xd6\x94\xc3\x06]?\x0e\xe5\x841\
+\x9d\xc9\xa2<\x82\x1f\xad\x94\x22\xf7\x05E*\x1aKQ\
+9\xadf\x0aGu!\xe0\x88\x0b\xc2\xbc\xadh\xa5K\
+]\xef\xad[\x95F\xb5\x95\xae\xd6\x22H\xb5\xf3h\xe2\
+\x07\xf8\xde\xe7\x02\xfb\x16\x96\xd2\xe9Ug\xd3\x9a\xd7\x5c\
+\xadl\xa4\xb7\x9b>7\xa7\xa1m\x98\xd2\xb6b\x86J\
+\xe2[.?tg\xd1\xf5l\x0a\x1a\x90\xf3&\xd1q\
+\xa5\xa6\x91W\xcc\xb0\x98q\xb1=\xb7n*#*\xf5\
+\x0c \xfciKX\xae\x97h\xe2w\x95N\xb6@p\
+\x08\xc6\xf0\x5c)`4\x155\x8a-\xbe\xa8\xb8\x15]\
+\x99\xb9\x1b\xd1\x89+\x0c4\x95\xa4\xc9#\xf9O\xfe>\
+\xc0\xdf5m\xcb\xc0X\xa0\x0fi*\xeb\xb5\x83\xdc\x94\
+\x96\xba/\x22\x9f\xf4\xbd\x11\xe4P\x96\xb9_\xc3\x0d\xb4\
+q\x84\xe1\xb4[\x0ax)1u\xe9\xbf!\xb250\
+\xcdy\xec\x14*\x8av\xf5\xe2\xd4\xca\x16\xaf\xb2.^\
+C}_\xa4w\xa3\x01\x8fW\xcb\xa4\xb1\xb6_\xf6&\
+MVeX*\xfdW:\xda\xee\x0a*\x83\xce?\xd4\
+\xab\xadm\xa1\x19\x9f\xbc\xc8\x8a\xca\xf7\xea\xab\xee\xa5\x8e\
+\x96\x9f\xf4\xf7\x94\x96s\x9b6\x12\x14\x97\x86\x10\xc2\xc9\
+\xd6\xe8\xb5\x0aZ\xfe\x98\x12\x8eq\xf2\xeame\x13=\
+\xfe\x88\x87'\xb8\xe2y20\xdbEk\xf9\x0a\x9f\xad\
+\x0c\xe0\x0e3`s\x5cu\xd0.\xd6\xf8a\xe9\x85\x8b\
++\xf6L#O\xddu6\x97\xaa\x94\x01\xd4\x05\x5c\x01\
+\xa9/\xbe\xdb\xc9\xf1ir\xc9\xba'\xe6Os\xcd\xf8\
+\x0d\xf7\x0c\xf5\xc1\xef\xdb\xc3]\x0aa@\xc8\xe2\x1e\xb9\
+\xee.!\x8f\xb9\x00\xca?\xd3\xbf\x9c\xd3\x8b\x8fu\x02\
+\x8e~*7\xbd\x96\xe5\x88\xc6jX\x90\xe4o\xe4\xdc\
+\xfa@z\xe4\x83U\xdf\xbc\xff\xbf{\xe2\x1b\xcd\x5c\x22\
+\xbb1\xe9`\xc3\xb5O\xf5m\xdf\xeeS\xaa\xde\x1f\x1c\
+\xd6wn\x0b`\xc5\xb5oW\xe5\xdd\xaa\xb6E5\xee\
+P\xef\xae\xe8\x9bp\x99\x9bGi\xa8\xc3a^\xdd/\
+HusC\x18-\x0dz[\x0cm\xf3p\xa3I\xf9\
+\x92\xa4\x9a\xe9\xb7\xad\x09\xf3\xcb\xc1\x9d\xdcV\xffJ\x03\
+K\xfc\x0c\xdc,\xd3?$\xc4\xcb\xcd9M\xa8(~\
+D+\xb6i\xec6\xf9\x9d\x06\x98\xf1\xf2\xbdI\xed\xab\
+\x99\x99\xf6\x85\xeae\xe9\xf9\xc5!k\xff`\xcb8\x89\
+\xca\xd6\x03\xc12P\x062\xf8\xba\x99\xce\xbb\x0d\x8d\xcd\
+\xf7Y?\x90\x0e\xfe>\x12\xce\x04\x5c\xe0\xcf\x80\xe1\xb8\
+\x00)#\x9c\xffV\x11%\x19\xc30/\xbaD_o\
+\xe0O\xaf\x93\x88\xcc\x82\x0c\xde\xff0\xebU\xdf^\x8e\
+^\x8e\xfe\x0b\xf7\x83q(\
\x00\x00\x09\xe6\
/\
****************\
@@ -7718,95 +7719,95 @@ qt_resource_struct = b"\
\x00\x00\x00\x10\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x0a\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x22\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01w\x86\xd1zT\
+\x00\x00\x01y\xear\xba!\
\x00\x00\x004\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0f\
-\x00\x00\x01w\x86\xd1zQ\
+\x00\x00\x01y\xear\xba!\
\x00\x00\x00t\x00\x00\x00\x00\x00\x01\x00\x00\x00s\
-\x00\x00\x01w\x86\xd1zT\
+\x00\x00\x01y\xear\xba\x14\
\x00\x00\x00\xac\x00\x02\x00\x00\x00\x01\x00\x00\x00\x09\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x90\x00\x01\x00\x00\x00\x01\x00\x00\x0a2\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x00t\x00\x00\x00\x00\x00\x01\x00\x00\x175\
-\x00\x00\x01w\x86\xd1zT\
-\x00\x00\x04\xe4\x00\x00\x00\x00\x00\x01\x00\x01u%\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x05\x8e\x00\x00\x00\x00\x00\x01\x00\x01\x86\xe8\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x05\xee\x00\x00\x00\x00\x00\x01\x00\x01\xa4!\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x056\x00\x00\x00\x00\x00\x01\x00\x01|\xf5\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x05\x1c\x00\x00\x00\x00\x00\x01\x00\x01{'\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x05\x04\x00\x00\x00\x00\x00\x01\x00\x01y\xe4\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x06\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xa6\xe0\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x060\x00\x00\x00\x00\x00\x01\x00\x01\xb1\x17\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x05\xcc\x00\x00\x00\x00\x00\x01\x00\x01\x8d\x01\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x05R\x00\x00\x00\x00\x00\x01\x00\x01\x82\x0e\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x05p\x00\x00\x00\x00\x00\x01\x00\x01\x83\xee\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x05\xae\x00\x00\x00\x00\x00\x01\x00\x01\x8a\x9a\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x03*\x00\x00\x00\x00\x00\x01\x00\x00\xe7\xb0\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x00\xea\x00\x01\x00\x00\x00\x01\x00\x000\x04\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x02\x98\x00\x00\x00\x00\x00\x01\x00\x00\xb6\xab\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x03\x06\x00\x00\x00\x00\x00\x01\x00\x00\xdc@\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\xd0\x16\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x01r\x00\x00\x00\x00\x00\x01\x00\x00^\x95\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x02J\x00\x00\x00\x00\x00\x01\x00\x00\x9cV\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x04 \x00\x00\x00\x00\x00\x01\x00\x014&\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x84\xb0\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x04F\x00\x00\x00\x00\x00\x01\x00\x01A1\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x01\x00\x00!\x1f\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x02r\x00\x00\x00\x00\x00\x01\x00\x00\xaa\xaf\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x04\x94\x00\x00\x00\x00\x00\x01\x00\x01Y\xe1\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x01.\x00\x00\x00\x00\x00\x01\x00\x00DL\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x03\xdc\x00\x01\x00\x00\x00\x01\x00\x01\x1d\x05\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x01\xa2\x00\x00\x00\x00\x00\x01\x00\x00jD\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x03\xa8\x00\x00\x00\x00\x00\x01\x00\x01\x0f\x85\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x04r\x00\x00\x00\x00\x00\x01\x00\x01M\x11\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x02\xc0\x00\x00\x00\x00\x00\x01\x00\x00\xc4\x11\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x01R\x00\x00\x00\x00\x00\x01\x00\x00P\x82\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x02\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x8f\xdc\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x01\x10\x00\x00\x00\x00\x00\x01\x00\x008Y\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x03\xfe\x00\x00\x00\x00\x00\x01\x00\x01&\x92\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x01\xc4\x00\x00\x00\x00\x00\x01\x00\x00x\xe0\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x03|\x00\x00\x00\x00\x00\x01\x00\x01\x02\x93\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x03V\x00\x00\x00\x00\x00\x01\x00\x00\xf4Q\
-\x00\x00\x01w\x86\xd1zQ\
-\x00\x00\x04\xbc\x00\x00\x00\x00\x00\x01\x00\x01i\x99\
-\x00\x00\x01w\x86\xd1zQ\
+\x00\x00\x01z\xa0c\xec\x84\
+\x00\x00\x00t\x00\x00\x00\x00\x00\x01\x00\x00\x17?\
+\x00\x00\x01y\xear\xba\x14\
+\x00\x00\x04\xe4\x00\x00\x00\x00\x00\x01\x00\x01u/\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x05\x8e\x00\x00\x00\x00\x00\x01\x00\x01\x86\xf2\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x05\xee\x00\x00\x00\x00\x00\x01\x00\x01\xa4+\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x056\x00\x00\x00\x00\x00\x01\x00\x01|\xff\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x05\x1c\x00\x00\x00\x00\x00\x01\x00\x01{1\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x05\x04\x00\x00\x00\x00\x00\x01\x00\x01y\xee\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x06\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xa6\xea\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x060\x00\x00\x00\x00\x00\x01\x00\x01\xb1!\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x05\xcc\x00\x00\x00\x00\x00\x01\x00\x01\x8d\x0b\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x05R\x00\x00\x00\x00\x00\x01\x00\x01\x82\x18\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x05p\x00\x00\x00\x00\x00\x01\x00\x01\x83\xf8\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x05\xae\x00\x00\x00\x00\x00\x01\x00\x01\x8a\xa4\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x03*\x00\x00\x00\x00\x00\x01\x00\x00\xe7\xba\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x00\xea\x00\x01\x00\x00\x00\x01\x00\x000\x0e\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x02\x98\x00\x00\x00\x00\x00\x01\x00\x00\xb6\xb5\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x03\x06\x00\x00\x00\x00\x00\x01\x00\x00\xdcJ\
+\x00\x00\x01y\xear\xba!\
+\x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\xd0 \
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x01r\x00\x00\x00\x00\x00\x01\x00\x00^\x9f\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x02J\x00\x00\x00\x00\x00\x01\x00\x00\x9c`\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x04 \x00\x00\x00\x00\x00\x01\x00\x0140\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x84\xba\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x04F\x00\x00\x00\x00\x00\x01\x00\x01A;\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x01\x00\x00!)\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x02r\x00\x00\x00\x00\x00\x01\x00\x00\xaa\xb9\
+\x00\x00\x01y\xear\xba!\
+\x00\x00\x04\x94\x00\x00\x00\x00\x00\x01\x00\x01Y\xeb\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x01.\x00\x00\x00\x00\x00\x01\x00\x00DV\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x03\xdc\x00\x01\x00\x00\x00\x01\x00\x01\x1d\x0f\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x01\xa2\x00\x00\x00\x00\x00\x01\x00\x00jN\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x03\xa8\x00\x00\x00\x00\x00\x01\x00\x01\x0f\x8f\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x04r\x00\x00\x00\x00\x00\x01\x00\x01M\x1b\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x02\xc0\x00\x00\x00\x00\x00\x01\x00\x00\xc4\x1b\
+\x00\x00\x01y\xear\xba!\
+\x00\x00\x01R\x00\x00\x00\x00\x00\x01\x00\x00P\x8c\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x02\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x8f\xe6\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x01\x10\x00\x00\x00\x00\x00\x01\x00\x008c\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x03\xfe\x00\x00\x00\x00\x00\x01\x00\x01&\x9c\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x01\xc4\x00\x00\x00\x00\x00\x01\x00\x00x\xea\
+\x00\x00\x01y\xear\xba\x1a\
+\x00\x00\x03|\x00\x00\x00\x00\x00\x01\x00\x01\x02\x9d\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x03V\x00\x00\x00\x00\x00\x01\x00\x00\xf4[\
+\x00\x00\x01y\xear\xba\x1e\
+\x00\x00\x04\xbc\x00\x00\x00\x00\x00\x01\x00\x01i\xa3\
+\x00\x00\x01y\xear\xba!\
\x00\x00\x06R\x00\x02\x00\x00\x00\x05\x00\x00\x002\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x06\x8e\x00\x02\x00\x00\x00\x03\x00\x00\x00@\
@@ -7817,32 +7818,32 @@ qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x06\x9e\x00\x02\x00\x00\x00\x03\x00\x00\x007\
\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x06\xb2\x00\x00\x00\x00\x00\x01\x00\x01\xc1V\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x06\xfe\x00\x00\x00\x00\x00\x01\x00\x01\xc3\xce\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x06\xe8\x00\x00\x00\x00\x00\x01\x00\x01\xc2\xeb\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x06\xce\x00\x00\x00\x00\x00\x01\x00\x01\xc2d\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x06\xfe\x00\x00\x00\x00\x00\x01\x00\x01\xc9\x87\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x06\xe8\x00\x00\x00\x00\x00\x01\x00\x01\xc8\xc2\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x06\xce\x00\x00\x00\x00\x00\x01\x00\x01\xc8<\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x06\xfe\x00\x00\x00\x00\x00\x01\x00\x01\xc7\x80\
-\x00\x00\x01w\x86\xd1zJ\
-\x00\x00\x06\xe8\x00\x00\x00\x00\x00\x01\x00\x01\xc6\xde\
-\x00\x00\x01w\x86\xd1zM\
-\x00\x00\x06\xce\x00\x00\x00\x00\x00\x01\x00\x01\xc6\x5c\
-\x00\x00\x01w\x86\xd1zJ\
-\x00\x00\x06\xfe\x00\x00\x00\x00\x00\x01\x00\x01\xc5\xc6\
-\x00\x00\x01w\x86\xd1zJ\
-\x00\x00\x06\xe8\x00\x00\x00\x00\x00\x01\x00\x01\xc5G\
-\x00\x00\x01w\x86\xd1zJ\
-\x00\x00\x06\xce\x00\x00\x00\x00\x00\x01\x00\x01\xc4\xc8\
-\x00\x00\x01w\x86\xd1zJ\
+\x00\x00\x06\xb2\x00\x00\x00\x00\x00\x01\x00\x01\xc1`\
+\x00\x00\x01y\xear\xba\x17\
+\x00\x00\x06\xfe\x00\x00\x00\x00\x00\x01\x00\x01\xc3\xd8\
+\x00\x00\x01y\xear\xba\x17\
+\x00\x00\x06\xe8\x00\x00\x00\x00\x00\x01\x00\x01\xc2\xf5\
+\x00\x00\x01y\xear\xba\x17\
+\x00\x00\x06\xce\x00\x00\x00\x00\x00\x01\x00\x01\xc2n\
+\x00\x00\x01y\xear\xba\x17\
+\x00\x00\x06\xfe\x00\x00\x00\x00\x00\x01\x00\x01\xc9\x91\
+\x00\x00\x01y\xear\xba\x17\
+\x00\x00\x06\xe8\x00\x00\x00\x00\x00\x01\x00\x01\xc8\xcc\
+\x00\x00\x01y\xear\xba\x17\
+\x00\x00\x06\xce\x00\x00\x00\x00\x00\x01\x00\x01\xc8F\
+\x00\x00\x01y\xear\xba\x17\
+\x00\x00\x06\xfe\x00\x00\x00\x00\x00\x01\x00\x01\xc7\x8a\
+\x00\x00\x01y\xear\xba\x17\
+\x00\x00\x06\xe8\x00\x00\x00\x00\x00\x01\x00\x01\xc6\xe8\
+\x00\x00\x01y\xear\xba\x17\
+\x00\x00\x06\xce\x00\x00\x00\x00\x00\x01\x00\x01\xc6f\
+\x00\x00\x01y\xear\xba\x17\
+\x00\x00\x06\xfe\x00\x00\x00\x00\x00\x01\x00\x01\xc5\xd0\
+\x00\x00\x01y\xear\xba\x14\
+\x00\x00\x06\xe8\x00\x00\x00\x00\x00\x01\x00\x01\xc5Q\
+\x00\x00\x01y\xear\xba\x17\
+\x00\x00\x06\xce\x00\x00\x00\x00\x00\x01\x00\x01\xc4\xd2\
+\x00\x00\x01y\xear\xba\x17\
"
def qInitResources():