aboutsummaryrefslogtreecommitdiffstats
path: root/examples/corelib/tools
diff options
context:
space:
mode:
Diffstat (limited to 'examples/corelib/tools')
-rw-r--r--examples/corelib/tools/README25
-rwxr-xr-xexamples/corelib/tools/codecs/codecs.py251
-rw-r--r--examples/corelib/tools/codecs/encodedfiles/iso-8859-1.txt6
-rw-r--r--examples/corelib/tools/codecs/encodedfiles/iso-8859-15.txt8
-rw-r--r--examples/corelib/tools/codecs/encodedfiles/utf-16.txtbin0 -> 163 bytes
-rw-r--r--examples/corelib/tools/codecs/encodedfiles/utf-16be.txtbin0 -> 160 bytes
-rw-r--r--examples/corelib/tools/codecs/encodedfiles/utf-16le.txtbin0 -> 160 bytes
-rw-r--r--examples/corelib/tools/codecs/encodedfiles/utf-8.txt6
-rwxr-xr-xexamples/corelib/tools/i18n/i18n.py203
-rw-r--r--examples/corelib/tools/i18n/i18n.qrc18
-rw-r--r--examples/corelib/tools/i18n/i18n_rc.py863
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_ar.qmbin0 -> 736 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_ar.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_cs.qmbin0 -> 796 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_cs.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_de.qmbin0 -> 848 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_de.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_el.qmbin0 -> 804 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_el.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_en.qmbin0 -> 810 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_en.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_eo.qmbin0 -> 806 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_eo.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_fr.qmbin0 -> 844 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_fr.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_it.qmbin0 -> 808 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_it.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_jp.qmbin0 -> 722 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_jp.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_ko.qmbin0 -> 690 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_ko.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_no.qmbin0 -> 804 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_no.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_pt.qmbin0 -> 838 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_pt.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_ru.qmbin0 -> 806 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_ru.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_sv.qmbin0 -> 814 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_sv.ts57
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_zh.qmbin0 -> 700 bytes
-rw-r--r--examples/corelib/tools/i18n/translations/i18n_zh.ts57
-rw-r--r--examples/corelib/tools/qtdemo/demos.xml17
-rw-r--r--examples/corelib/tools/qtdemo/displayshape.py364
-rw-r--r--examples/corelib/tools/qtdemo/displaywidget.py162
-rw-r--r--examples/corelib/tools/qtdemo/examples.xml144
-rw-r--r--examples/corelib/tools/qtdemo/images/qt4-logo.pngbin0 -> 10772 bytes
-rw-r--r--examples/corelib/tools/qtdemo/images/rb-logo.pngbin0 -> 10743 bytes
-rw-r--r--examples/corelib/tools/qtdemo/launcher.py1008
-rwxr-xr-xexamples/corelib/tools/qtdemo/qtdemo.py49
-rw-r--r--examples/corelib/tools/qtdemo/qtdemo.qrc8
-rw-r--r--examples/corelib/tools/qtdemo/qtdemo.rc2
-rw-r--r--examples/corelib/tools/qtdemo/qtdemo_rc.py1987
-rwxr-xr-xexamples/corelib/tools/regexp.py195
-rw-r--r--examples/corelib/tools/settingseditor/inifiles/licensepage.ini46
-rw-r--r--examples/corelib/tools/settingseditor/inifiles/qsa.ini26
-rw-r--r--examples/corelib/tools/settingseditor/inifiles/troll.ini7
-rwxr-xr-xexamples/corelib/tools/settingseditor/settingseditor.py722
57 files changed, 6972 insertions, 0 deletions
diff --git a/examples/corelib/tools/README b/examples/corelib/tools/README
new file mode 100644
index 0000000..7ed1cba
--- /dev/null
+++ b/examples/corelib/tools/README
@@ -0,0 +1,25 @@
+PyQt is equipped with a range of capable tool classes, from containers and
+iterators to classes for string handling and manipulation.
+
+Other classes provide application infrastructure support, handling plugin
+loading and managing configuration files.
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PySide.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/tools/qtdemo
+directory in the PyQt package.
diff --git a/examples/corelib/tools/codecs/codecs.py b/examples/corelib/tools/codecs/codecs.py
new file mode 100755
index 0000000..15f7d95
--- /dev/null
+++ b/examples/corelib/tools/codecs/codecs.py
@@ -0,0 +1,251 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2016 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the PySide 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$
+##
+#############################################################################
+
+"""PySide2 port of the widgets/tools/codecs example from Qt v5.x"""
+
+from PySide2 import QtCore, QtGui, QtWidgets
+
+
+def codec_name(codec):
+ try:
+ # Python v3.
+ name = str(codec.name(), encoding='ascii')
+ except TypeError:
+ # Python v2.
+ name = str(codec.name())
+
+ return name
+
+
+class MainWindow(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(MainWindow, self).__init__()
+
+ self.textEdit = QtWidgets.QTextEdit()
+ self.textEdit.setLineWrapMode(QtWidgets.QTextEdit.NoWrap)
+ self.setCentralWidget(self.textEdit)
+
+ self.codecs = []
+ self.findCodecs()
+
+ self.previewForm = PreviewForm(self)
+ self.previewForm.setCodecList(self.codecs)
+
+ self.saveAsActs = []
+ self.createActions()
+ self.createMenus()
+
+ self.setWindowTitle("Codecs")
+ self.resize(500, 400)
+
+ def open(self):
+ fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self)
+ if fileName:
+ inFile = QtCore.QFile(fileName)
+ if not inFile.open(QtCore.QFile.ReadOnly):
+ QtWidgets.QMessageBox.warning(self, "Codecs",
+ "Cannot read file %s:\n%s" % (fileName, inFile.errorString()))
+ return
+
+ data = inFile.readAll()
+
+ self.previewForm.setEncodedData(data)
+ if self.previewForm.exec_():
+ self.textEdit.setPlainText(self.previewForm.decodedString())
+
+ def save(self):
+ fileName = QtWidgets.QFileDialog.getSaveFileName(self)
+ if fileName:
+ outFile = QtCore.QFile(fileName)
+ if not outFile.open(QtCore.QFile.WriteOnly|QtCore.QFile.Text):
+ QtWidgets.QMessageBox.warning(self, "Codecs",
+ "Cannot write file %s:\n%s" % (fileName, outFile.errorString()))
+ return
+
+ action = self.sender()
+ codecName = action.data()
+
+ out = QtCore.QTextStream(outFile)
+ out.setCodec(codecName)
+ out << self.textEdit.toPlainText()
+
+ def about(self):
+ QtWidgets.QMessageBox.about(self, "About Codecs",
+ "The <b>Codecs</b> example demonstrates how to read and "
+ "write files using various encodings.")
+
+ def aboutToShowSaveAsMenu(self):
+ currentText = self.textEdit.toPlainText()
+
+ for action in self.saveAsActs:
+ codecName = str(action.data())
+ codec = QtCore.QTextCodec.codecForName(codecName)
+ action.setVisible(codec and codec.canEncode(currentText))
+
+ def findCodecs(self):
+ codecMap = []
+ iso8859RegExp = QtCore.QRegExp('ISO[- ]8859-([0-9]+).*')
+
+ for mib in QtCore.QTextCodec.availableMibs():
+ codec = QtCore.QTextCodec.codecForMib(mib)
+ sortKey = codec_name(codec).upper()
+ rank = 0
+
+ if sortKey.startswith('UTF-8'):
+ rank = 1
+ elif sortKey.startswith('UTF-16'):
+ rank = 2
+ elif iso8859RegExp.exactMatch(sortKey):
+ if len(iso8859RegExp.cap(1)) == 1:
+ rank = 3
+ else:
+ rank = 4
+ else:
+ rank = 5
+
+ codecMap.append((str(rank) + sortKey, codec))
+
+ codecMap.sort()
+ self.codecs = [item[-1] for item in codecMap]
+
+ def createActions(self):
+ self.openAct = QtWidgets.QAction("&Open...", self, shortcut="Ctrl+O",
+ triggered=self.open)
+
+ for codec in self.codecs:
+ name = codec_name(codec)
+
+ action = QtWidgets.QAction(name + '...', self, triggered=self.save)
+ action.setData(name)
+ self.saveAsActs.append(action)
+
+ self.exitAct = QtWidgets.QAction("E&xit", self, shortcut="Ctrl+Q",
+ triggered=self.close)
+
+ self.aboutAct = QtWidgets.QAction("&About", self, triggered=self.about)
+
+ self.aboutQtAct = QtWidgets.QAction("About &Qt", self,
+ triggered=QtWidgets.qApp.aboutQt)
+
+ def createMenus(self):
+ self.saveAsMenu = QtWidgets.QMenu("&Save As", self)
+ for action in self.saveAsActs:
+ self.saveAsMenu.addAction(action)
+
+ self.saveAsMenu.aboutToShow.connect(self.aboutToShowSaveAsMenu)
+
+ self.fileMenu = QtWidgets.QMenu("&File", self)
+ self.fileMenu.addAction(self.openAct)
+ self.fileMenu.addMenu(self.saveAsMenu)
+ self.fileMenu.addSeparator()
+ self.fileMenu.addAction(self.exitAct)
+
+ self.helpMenu = QtWidgets.QMenu("&Help", self)
+ self.helpMenu.addAction(self.aboutAct)
+ self.helpMenu.addAction(self.aboutQtAct)
+
+ self.menuBar().addMenu(self.fileMenu)
+ self.menuBar().addSeparator()
+ self.menuBar().addMenu(self.helpMenu)
+
+
+class PreviewForm(QtWidgets.QDialog):
+ def __init__(self, parent):
+ super(PreviewForm, self).__init__(parent)
+
+ self.encodingComboBox = QtWidgets.QComboBox()
+ encodingLabel = QtWidgets.QLabel("&Encoding:")
+ encodingLabel.setBuddy(self.encodingComboBox)
+
+ self.textEdit = QtWidgets.QTextEdit()
+ self.textEdit.setLineWrapMode(QtWidgets.QTextEdit.NoWrap)
+ self.textEdit.setReadOnly(True)
+
+ buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel)
+
+ self.encodingComboBox.activated.connect(self.updateTextEdit)
+ buttonBox.accepted.connect(self.accept)
+ buttonBox.rejected.connect(self.reject)
+
+ mainLayout = QtWidgets.QGridLayout()
+ mainLayout.addWidget(encodingLabel, 0, 0)
+ mainLayout.addWidget(self.encodingComboBox, 0, 1)
+ mainLayout.addWidget(self.textEdit, 1, 0, 1, 2)
+ mainLayout.addWidget(buttonBox, 2, 0, 1, 2)
+ self.setLayout(mainLayout)
+
+ self.setWindowTitle("Choose Encoding")
+ self.resize(400, 300)
+
+ def setCodecList(self, codecs):
+ self.encodingComboBox.clear()
+ for codec in codecs:
+ self.encodingComboBox.addItem(codec_name(codec), codec.mibEnum())
+
+ def setEncodedData(self, data):
+ self.encodedData = data
+ self.updateTextEdit()
+
+ def decodedString(self):
+ return self.decodedStr
+
+ def updateTextEdit(self):
+ mib = self.encodingComboBox.itemData(self.encodingComboBox.currentIndex())
+ codec = QtCore.QTextCodec.codecForMib(mib)
+
+ data = QtCore.QTextStream(self.encodedData)
+ data.setAutoDetectUnicode(False)
+ data.setCodec(codec)
+
+ self.decodedStr = data.readAll()
+ self.textEdit.setPlainText(self.decodedStr)
+
+
+if __name__ == '__main__':
+
+ import sys
+
+ app = QtWidgets.QApplication(sys.argv)
+ mainWin = MainWindow()
+ mainWin.show()
+ sys.exit(app.exec_())
diff --git a/examples/corelib/tools/codecs/encodedfiles/iso-8859-1.txt b/examples/corelib/tools/codecs/encodedfiles/iso-8859-1.txt
new file mode 100644
index 0000000..4a7ebe3
--- /dev/null
+++ b/examples/corelib/tools/codecs/encodedfiles/iso-8859-1.txt
@@ -0,0 +1,6 @@
+Paulo Coelho: O Gênio e as Rosas
+Anna Hallström, Urban Östberg: Svår svenska
+Darrell Huff: How to Lie with Statistics
+Franz Kafka: Das Schloß
+Walter Moers: Die 13½ Leben des Käpt'n Blaubär
+Dag Solstad: Forsøk på å beskrive det ugjennomtrengelige
diff --git a/examples/corelib/tools/codecs/encodedfiles/iso-8859-15.txt b/examples/corelib/tools/codecs/encodedfiles/iso-8859-15.txt
new file mode 100644
index 0000000..cd43ea3
--- /dev/null
+++ b/examples/corelib/tools/codecs/encodedfiles/iso-8859-15.txt
@@ -0,0 +1,8 @@
+Paulo Coelho: O Gênio e as Rosas
+Jean-Pierre Coffe: À table en famille avec 15 ¤ par jour
+Anna Hallström, Urban Östberg: Svår svenska
+Darrell Huff: How to Lie with Statistics
+Franz Kafka: Das Schloß
+Helena Lehecková: T¨ekkiä suomalaisille
+Arthur Rimbaud: ¼uvres complètes
+Dag Solstad: Forsøk på å beskrive det ugjennomtrengelige
diff --git a/examples/corelib/tools/codecs/encodedfiles/utf-16.txt b/examples/corelib/tools/codecs/encodedfiles/utf-16.txt
new file mode 100644
index 0000000..96e65aa
--- /dev/null
+++ b/examples/corelib/tools/codecs/encodedfiles/utf-16.txt
Binary files differ
diff --git a/examples/corelib/tools/codecs/encodedfiles/utf-16be.txt b/examples/corelib/tools/codecs/encodedfiles/utf-16be.txt
new file mode 100644
index 0000000..d8ae642
--- /dev/null
+++ b/examples/corelib/tools/codecs/encodedfiles/utf-16be.txt
Binary files differ
diff --git a/examples/corelib/tools/codecs/encodedfiles/utf-16le.txt b/examples/corelib/tools/codecs/encodedfiles/utf-16le.txt
new file mode 100644
index 0000000..3779264
--- /dev/null
+++ b/examples/corelib/tools/codecs/encodedfiles/utf-16le.txt
Binary files differ
diff --git a/examples/corelib/tools/codecs/encodedfiles/utf-8.txt b/examples/corelib/tools/codecs/encodedfiles/utf-8.txt
new file mode 100644
index 0000000..a5e4ae6
--- /dev/null
+++ b/examples/corelib/tools/codecs/encodedfiles/utf-8.txt
@@ -0,0 +1,6 @@
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
diff --git a/examples/corelib/tools/i18n/i18n.py b/examples/corelib/tools/i18n/i18n.py
new file mode 100755
index 0000000..0d44851
--- /dev/null
+++ b/examples/corelib/tools/i18n/i18n.py
@@ -0,0 +1,203 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
+##
+## This file is part of the example classes of the Qt Toolkit.
+##
+## This file may be used under the terms of the GNU General Public
+## License version 2.0 as published by the Free Software Foundation
+## and appearing in the file LICENSE.GPL included in the packaging of
+## this file. Please review the following information to ensure GNU
+## General Public Licensing requirements will be met:
+## http://www.trolltech.com/products/qt/opensource.html
+##
+## If you are unsure which license is appropriate for your use, please
+## review the following information:
+## http://www.trolltech.com/products/qt/licensing.html or contact the
+## sales department at sales@trolltech.com.
+##
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+import sys
+import os.path
+from PySide2 import QtCore, QtGui
+
+import i18n_rc
+
+
+class LanguageChooser(QtGui.QDialog):
+ def __init__(self, parent=None):
+ QtGui.QDialog.__init__(self, parent, QtCore.Qt.WindowStaysOnTopHint)
+
+ self.qmFileForCheckBoxMap = {}
+ self.mainWindowForCheckBoxMap = {}
+
+ groupBox = QtGui.QGroupBox("Languages")
+
+ groupBoxLayout = QtGui.QGridLayout()
+
+ qmFiles = self.findQmFiles()
+
+ for i in range(len(qmFiles)):
+ checkBox = QtGui.QCheckBox(self.languageName(qmFiles[i]))
+ self.qmFileForCheckBoxMap[checkBox] = qmFiles[i]
+ self.connect(checkBox, QtCore.SIGNAL("toggled(bool)"), self.checkBoxToggled)
+ groupBoxLayout.addWidget(checkBox, i / 2, i % 2)
+
+ groupBox.setLayout(groupBoxLayout)
+
+ showAllButton = QtGui.QPushButton("Show All")
+ hideAllButton = QtGui.QPushButton("Hide All")
+ closeButton = QtGui.QPushButton("Close")
+ closeButton.setDefault(True)
+
+ self.connect(showAllButton, QtCore.SIGNAL("clicked()"), self.showAll)
+ self.connect(hideAllButton, QtCore.SIGNAL("clicked()"), self.hideAll)
+ self.connect(closeButton, QtCore.SIGNAL("clicked()"), self, QtCore.SLOT("close()"))
+
+ buttonLayout = QtGui.QHBoxLayout()
+ buttonLayout.addStretch(1)
+ buttonLayout.addWidget(showAllButton)
+ buttonLayout.addWidget(hideAllButton)
+ buttonLayout.addWidget(closeButton)
+
+ mainLayout = QtGui.QVBoxLayout()
+ mainLayout.addWidget(groupBox)
+ mainLayout.addLayout(buttonLayout)
+ self.setLayout(mainLayout)
+
+ # For Mac only.
+ #qt_mac_set_menubar_merge(False)
+
+ self.setWindowTitle("I18N")
+
+ def eventFilter(self, object, event):
+ if event.type() == QtCore.QEvent.Close:
+ if isinstance(object, MainWindow):
+ window = object
+
+ for checkBox, w in self.mainWindowForCheckBoxMap.items():
+ if w is window:
+ break
+ else:
+ checkBox = None
+
+ if checkBox:
+ checkBox.setChecked(False)
+
+ return QtGui.QWidget.eventFilter(self, object, event)
+
+ def closeEvent(self, event):
+ QtGui.qApp.quit()
+
+ def checkBoxToggled(self):
+ checkBox = self.sender()
+ window = self.mainWindowForCheckBoxMap.get(checkBox)
+
+ if not window:
+ translator = QtCore.QTranslator()
+ translator.load(self.qmFileForCheckBoxMap[checkBox])
+ QtGui.qApp.installTranslator(translator)
+
+ # Because we will be installing an event filter for the main window
+ # it is important that this instance isn't garbage collected before
+ # the main window when the program terminates. We ensure this by
+ # making the main window a child of this one.
+ window = MainWindow(self)
+ window.setPalette(QtGui.QPalette(self.colorForLanguage(checkBox.text())))
+
+ window.installEventFilter(self)
+ self.mainWindowForCheckBoxMap[checkBox] = window
+
+ window.setVisible(checkBox.isChecked())
+
+ def showAll(self):
+ for checkBox in self.qmFileForCheckBoxMap.keys():
+ checkBox.setChecked(True)
+
+ def hideAll(self):
+ for checkBox in self.qmFileForCheckBoxMap.keys():
+ checkBox.setChecked(False)
+
+ def findQmFiles(self):
+ trans_dir = QtCore.QDir("./translations")
+ fileNames = trans_dir.entryList(["*.qm"], QtCore.QDir.Files, QtCore.QDir.Name)
+
+ fileNames = [trans_dir.filePath(p) for p in fileNames]
+
+ return fileNames
+
+ def languageName(self, qmFile):
+ translator = QtCore.QTranslator()
+ translator.load(qmFile)
+
+ return translator.translate("MainWindow", "English")
+
+ def colorForLanguage(self, language):
+ hashValue = hash(language)
+ red = 156 + (hashValue & 0x3F)
+ green = 156 + ((hashValue >> 6) & 0x3F)
+ blue = 156 + ((hashValue >> 12) & 0x3F)
+ return QtGui.QColor(red, green, blue)
+
+
+class MainWindow(QtGui.QMainWindow):
+ listEntries = [QtCore.QT_TRANSLATE_NOOP("MainWindow", "First"),
+ QtCore.QT_TRANSLATE_NOOP("MainWindow", "Second"),
+ QtCore.QT_TRANSLATE_NOOP("MainWindow", "Third")]
+
+ def __init__(self, parent=None):
+ QtGui.QMainWindow.__init__(self, parent)
+
+ self.centralWidget = QtGui.QWidget()
+ self.setCentralWidget(self.centralWidget)
+
+ self.createGroupBox()
+
+ listWidget = QtGui.QListWidget()
+
+ for le in MainWindow.listEntries:
+ listWidget.addItem(self.tr(le))
+
+ mainLayout = QtGui.QVBoxLayout()
+ mainLayout.addWidget(self.groupBox)
+ mainLayout.addWidget(listWidget)
+ self.centralWidget.setLayout(mainLayout)
+
+ exitAction = QtGui.QAction(self.tr("E&xit"), self)
+ self.connect(exitAction, QtCore.SIGNAL("triggered()"), QtGui.qApp, QtCore.SLOT("quit()"))
+
+ fileMenu = self.menuBar().addMenu(self.tr("&File"))
+ fileMenu.setPalette(QtGui.QPalette(QtCore.Qt.red))
+ fileMenu.addAction(exitAction)
+
+ self.setWindowTitle(self.tr("Language: %s") % (self.tr("English")))
+ self.statusBar().showMessage(self.tr("Internationalization Example"))
+
+ if self.tr("LTR") == "RTL":
+ self.setLayoutDirection(QtCore.Qt.RightToLeft)
+
+ def createGroupBox(self):
+ self.groupBox = QtGui.QGroupBox(self.tr("View"))
+ perspectiveRadioButton = QtGui.QRadioButton(self.tr("Perspective"))
+ isometricRadioButton = QtGui.QRadioButton(self.tr("Isometric"))
+ obliqueRadioButton = QtGui.QRadioButton(self.tr("Oblique"))
+ perspectiveRadioButton.setChecked(True)
+
+ self.groupBoxLayout = QtGui.QVBoxLayout()
+ self.groupBoxLayout.addWidget(perspectiveRadioButton)
+ self.groupBoxLayout.addWidget(isometricRadioButton)
+ self.groupBoxLayout.addWidget(obliqueRadioButton)
+ self.groupBox.setLayout(self.groupBoxLayout)
+
+
+if __name__ == "__main__":
+ app = QtGui.QApplication(sys.argv)
+ chooser = LanguageChooser()
+ chooser.show()
+ sys.exit(app.exec_())
diff --git a/examples/corelib/tools/i18n/i18n.qrc b/examples/corelib/tools/i18n/i18n.qrc
new file mode 100644
index 0000000..16a89f1
--- /dev/null
+++ b/examples/corelib/tools/i18n/i18n.qrc
@@ -0,0 +1,18 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>translations/i18n_ar.qm</file>
+ <file>translations/i18n_cs.qm</file>
+ <file>translations/i18n_de.qm</file>
+ <file>translations/i18n_el.qm</file>
+ <file>translations/i18n_en.qm</file>
+ <file>translations/i18n_eo.qm</file>
+ <file>translations/i18n_fr.qm</file>
+ <file>translations/i18n_it.qm</file>
+ <file>translations/i18n_jp.qm</file>
+ <file>translations/i18n_ko.qm</file>
+ <file>translations/i18n_no.qm</file>
+ <file>translations/i18n_ru.qm</file>
+ <file>translations/i18n_sv.qm</file>
+ <file>translations/i18n_zh.qm</file>
+</qresource>
+</RCC>
diff --git a/examples/corelib/tools/i18n/i18n_rc.py b/examples/corelib/tools/i18n/i18n_rc.py
new file mode 100644
index 0000000..e79668c
--- /dev/null
+++ b/examples/corelib/tools/i18n/i18n_rc.py
@@ -0,0 +1,863 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2016 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the PySide 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$
+##
+#############################################################################
+
+# Resource object code
+#
+# Created: Fri Jan 6 09:39:04 2006
+# by: The Resource Compiler for PyQt (Qt v4.1.0)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PySide2 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x03\x4c\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x22\x00\x47\xdf\x04\
+\x00\x00\x00\x3d\x00\x4d\x09\xa4\x00\x00\x00\x58\x00\x5a\xf0\x84\
+\x00\x00\x00\x71\x02\xf0\x8c\x31\x00\x00\x00\x8e\x05\x93\x08\xe5\
+\x00\x00\x00\xaf\x05\x9b\xa6\x44\x00\x00\x00\xc8\x06\x3c\xe8\x53\
+\x00\x00\x00\xe3\x06\xec\x79\x65\x00\x00\x01\x04\x0c\x4e\x30\xd8\
+\x00\x00\x01\x25\x0e\x9f\xe7\x05\x00\x00\x01\x40\x69\x00\x00\x01\
+\x87\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x06\x00\x56\x00\x75\x00\x65\x05\x00\x05\
+\xcf\xc7\x01\x03\x00\x00\x00\x10\x00\x26\x00\x46\x00\x69\x00\x63\
+\x00\x68\x00\x69\x00\x65\x00\x72\x05\x00\x2a\xd0\x25\x01\x03\x00\
+\x00\x00\x10\x00\x26\x00\x51\x00\x75\x00\x69\x00\x74\x00\x74\x00\
+\x65\x00\x72\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0e\x00\x50\
+\x00\x72\x00\x65\x00\x6d\x00\x69\x00\x65\x00\x72\x05\x00\x4d\x09\
+\xa4\x01\x03\x00\x00\x00\x12\x00\x54\x00\x72\x00\x6f\x00\x69\x00\
+\x73\x00\x69\x00\xe8\x00\x6d\x00\x65\x05\x00\x5a\xf0\x84\x01\x03\
+\x00\x00\x00\x16\x00\x4c\x00\x61\x00\x6e\x00\x67\x00\x75\x00\x65\
+\x00\x20\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\
+\x03\x00\x00\x00\x0e\x00\x4f\x00\x62\x00\x6c\x00\x69\x00\x71\x00\
+\x75\x00\x65\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x10\x00\x44\
+\x00\x65\x00\x75\x00\x78\x00\x69\x00\xe8\x00\x6d\x00\x65\x05\x05\
+\x9b\xa6\x44\x01\x03\x00\x00\x00\x16\x00\x49\x00\x73\x00\x6f\x00\
+\x6d\x00\xe9\x00\x74\x00\x72\x00\x69\x00\x71\x00\x75\x00\x65\x05\
+\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\x00\x50\x00\x65\x00\x72\
+\x00\x73\x00\x70\x00\x65\x00\x63\x00\x74\x00\x69\x00\x76\x00\x65\
+\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x10\x00\x46\x00\x72\x00\
+\x61\x00\x6e\x00\xe7\x00\x61\x00\x69\x00\x73\x05\x0c\x4e\x30\xd8\
+\x01\x03\x00\x00\x00\x3c\x00\x45\x00\x78\x00\x65\x00\x6d\x00\x70\
+\x00\x6c\x00\x65\x00\x20\x00\x64\x00\x27\x00\x69\x00\x6e\x00\x74\
+\x00\x65\x00\x72\x00\x6e\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\
+\x00\x61\x00\x6c\x00\x69\x00\x73\x00\x61\x00\x74\x00\x69\x00\x6f\
+\x00\x6e\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\
+\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x02\xb2\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x20\x00\x47\xdf\x04\
+\x00\x00\x00\x33\x00\x4d\x09\xa4\x00\x00\x00\x46\x00\x5a\xf0\x84\
+\x00\x00\x00\x57\x02\xf0\x8c\x31\x00\x00\x00\x68\x05\x93\x08\xe5\
+\x00\x00\x00\x81\x05\x9b\xa6\x44\x00\x00\x00\x90\x06\x3c\xe8\x53\
+\x00\x00\x00\xa1\x06\xec\x79\x65\x00\x00\x00\xb2\x0c\x4e\x30\xd8\
+\x00\x00\x00\xc5\x0e\x9f\xe7\x05\x00\x00\x00\xd6\x69\x00\x00\x00\
+\xed\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x04\xbc\xf4\xae\x30\x05\x00\x05\xcf\xc7\
+\x01\x03\x00\x00\x00\x08\xd3\x0c\xc7\x7c\x00\x26\x00\x46\x05\x00\
+\x2a\xd0\x25\x01\x03\x00\x00\x00\x08\xc8\x85\xb8\xcc\x00\x26\x00\
+\x58\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x06\xcc\xab\xbc\x88\
+\xc9\xf8\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x06\xc1\x38\xbc\
+\x88\xc9\xf8\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x0e\xc5\xb8\
+\xc5\xb4\x00\x20\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\
+\x31\x01\x03\x00\x00\x00\x04\xbe\x57\xac\x01\x05\x05\x93\x08\xe5\
+\x01\x03\x00\x00\x00\x06\xb4\x50\xbc\x88\xc9\xf8\x05\x05\x9b\xa6\
+\x44\x01\x03\x00\x00\x00\x06\xb4\xf1\xce\x21\xb3\xc4\x05\x06\x3c\
+\xe8\x53\x01\x03\x00\x00\x00\x08\xc6\xd0\xad\xfc\xd6\x54\xbc\x95\
+\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x06\xd5\x5c\xad\x6d\xc5\
+\xb4\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x0c\xad\x6d\xc8\x1c\
+\xd6\x54\x00\x20\xc6\x08\xc8\x1c\x05\x0e\x9f\xe7\x05\x01\x2f\x00\
+\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\
+\x00\
+\x00\x00\x03\x26\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x22\x00\x47\xdf\x04\
+\x00\x00\x00\x35\x00\x4d\x09\xa4\x00\x00\x00\x4a\x00\x5a\xf0\x84\
+\x00\x00\x00\x61\x02\xf0\x8c\x31\x00\x00\x00\x78\x05\x93\x08\xe5\
+\x00\x00\x00\x93\x05\x9b\xa6\x44\x00\x00\x00\xaa\x06\x3c\xe8\x53\
+\x00\x00\x00\xc1\x06\xec\x79\x65\x00\x00\x00\xe8\x0c\x4e\x30\xd8\
+\x00\x00\x01\x09\x0e\x9f\xe7\x05\x00\x00\x01\x22\x69\x00\x00\x01\
+\x61\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x06\x04\x12\x04\x38\x04\x34\x05\x00\x05\
+\xcf\xc7\x01\x03\x00\x00\x00\x08\x04\x24\x04\x30\x04\x39\x04\x3b\
+\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x0a\x04\x12\x04\x4b\x04\
+\x45\x04\x3e\x04\x34\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0c\
+\x04\x1f\x04\x35\x04\x40\x04\x32\x04\x4b\x04\x39\x05\x00\x4d\x09\
+\xa4\x01\x03\x00\x00\x00\x0c\x04\x22\x04\x40\x04\x35\x04\x42\x04\
+\x38\x04\x39\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x10\x04\x2f\
+\x04\x37\x04\x4b\x04\x3a\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\
+\xf0\x8c\x31\x01\x03\x00\x00\x00\x0c\x04\x1a\x04\x43\x04\x40\x04\
+\x41\x04\x38\x04\x32\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x0c\
+\x04\x12\x04\x42\x04\x3e\x04\x40\x04\x3e\x04\x39\x05\x05\x9b\xa6\
+\x44\x01\x03\x00\x00\x00\x1c\x04\x18\x04\x37\x04\x3e\x04\x3c\x04\
+\x35\x04\x42\x04\x40\x04\x38\x04\x47\x04\x35\x04\x41\x04\x3a\x04\
+\x38\x04\x39\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\x04\x1f\
+\x04\x35\x04\x40\x04\x41\x04\x3f\x04\x35\x04\x3a\x04\x42\x04\x38\
+\x04\x32\x04\x30\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x0e\x04\
+\x20\x04\x43\x04\x41\x04\x41\x04\x3a\x04\x38\x04\x39\x05\x0c\x4e\
+\x30\xd8\x01\x03\x00\x00\x00\x34\x04\x1f\x04\x40\x04\x38\x04\x3c\
+\x04\x35\x04\x40\x00\x20\x04\x38\x04\x3d\x04\x42\x04\x35\x04\x40\
+\x04\x3d\x04\x30\x04\x46\x04\x38\x04\x3d\x04\x3e\x04\x30\x04\x3b\
+\x04\x38\x04\x37\x04\x30\x04\x46\x04\x38\x04\x38\x05\x0e\x9f\xe7\
+\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\
+\x6e\x64\x6f\x77\x00\
+\x00\x00\x03\x2e\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x24\x00\x47\xdf\x04\
+\x00\x00\x00\x3b\x00\x4d\x09\xa4\x00\x00\x00\x56\x00\x5a\xf0\x84\
+\x00\x00\x00\x6d\x02\xf0\x8c\x31\x00\x00\x00\x84\x05\x93\x08\xe5\
+\x00\x00\x00\xa1\x05\x9b\xa6\x44\x00\x00\x00\xb6\x06\x3c\xe8\x53\
+\x00\x00\x00\xcb\x06\xec\x79\x65\x00\x00\x00\xec\x0c\x4e\x30\xd8\
+\x00\x00\x01\x0d\x0e\x9f\xe7\x05\x00\x00\x01\x26\x69\x00\x00\x01\
+\x69\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x08\x00\x56\x00\x69\x00\x73\x00\x61\x05\
+\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0c\x00\x26\x00\x41\x00\x72\
+\x00\x6b\x00\x69\x00\x76\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\
+\x10\x00\x26\x00\x41\x00\x76\x00\x73\x00\x6c\x00\x75\x00\x74\x00\
+\x61\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0c\x00\x46\x00\xf6\
+\x00\x72\x00\x73\x00\x74\x00\x61\x05\x00\x4d\x09\xa4\x01\x03\x00\
+\x00\x00\x0c\x00\x54\x00\x72\x00\x65\x00\x64\x00\x6a\x00\x65\x05\
+\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x12\x00\x53\x00\x70\x00\x72\
+\x00\xe5\x00\x6b\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\
+\x31\x01\x03\x00\x00\x00\x0a\x00\x53\x00\x6b\x00\x65\x00\x76\x00\
+\x74\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x0a\x00\x41\x00\x6e\
+\x00\x64\x00\x72\x00\x61\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\
+\x16\x00\x49\x00\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\
+\x69\x00\x73\x00\x6b\x00\x74\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\
+\x00\x16\x00\x50\x00\x65\x00\x72\x00\x73\x00\x70\x00\x65\x00\x6b\
+\x00\x74\x00\x69\x00\x76\x00\x74\x05\x06\xec\x79\x65\x01\x03\x00\
+\x00\x00\x0e\x00\x53\x00\x76\x00\x65\x00\x6e\x00\x73\x00\x6b\x00\
+\x61\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x38\x00\x49\x00\x6e\
+\x00\x74\x00\x65\x00\x72\x00\x6e\x00\x61\x00\x74\x00\x69\x00\x6f\
+\x00\x6e\x00\x61\x00\x6c\x00\x69\x00\x73\x00\x65\x00\x72\x00\x69\
+\x00\x6e\x00\x67\x00\x73\x00\x65\x00\x78\x00\x65\x00\x6d\x00\x70\
+\x00\x65\x00\x6c\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\
+\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x03\x50\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x2a\x00\x47\xdf\x04\
+\x00\x00\x00\x41\x00\x4d\x09\xa4\x00\x00\x00\x5c\x00\x5a\xf0\x84\
+\x00\x00\x00\x75\x02\xf0\x8c\x31\x00\x00\x00\x90\x05\x93\x08\xe5\
+\x00\x00\x00\xb1\x05\x9b\xa6\x44\x00\x00\x00\xc8\x06\x3c\xe8\x53\
+\x00\x00\x00\xe3\x06\xec\x79\x65\x00\x00\x01\x04\x0c\x4e\x30\xd8\
+\x00\x00\x01\x2b\x0e\x9f\xe7\x05\x00\x00\x01\x44\x69\x00\x00\x01\
+\x8b\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x0e\x00\x41\x00\x6e\x00\x73\x00\x69\x00\
+\x63\x00\x68\x00\x74\x05\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0c\
+\x00\x26\x00\x44\x00\x61\x00\x74\x00\x65\x00\x69\x05\x00\x2a\xd0\
+\x25\x01\x03\x00\x00\x00\x10\x00\x42\x00\x65\x00\x26\x00\x65\x00\
+\x6e\x00\x64\x00\x65\x00\x6e\x05\x00\x47\xdf\x04\x01\x03\x00\x00\
+\x00\x0e\x00\x45\x00\x72\x00\x73\x00\x74\x00\x65\x00\x6e\x00\x73\
+\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x10\x00\x44\x00\x72\x00\
+\x69\x00\x74\x00\x74\x00\x65\x00\x6e\x00\x73\x05\x00\x5a\xf0\x84\
+\x01\x03\x00\x00\x00\x16\x00\x53\x00\x70\x00\x72\x00\x61\x00\x63\
+\x00\x68\x00\x65\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\
+\x31\x01\x03\x00\x00\x00\x0c\x00\x53\x00\x63\x00\x68\x00\x69\x00\
+\x65\x00\x66\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x10\x00\x5a\
+\x00\x77\x00\x65\x00\x69\x00\x74\x00\x65\x00\x6e\x00\x73\x05\x05\
+\x9b\xa6\x44\x01\x03\x00\x00\x00\x16\x00\x49\x00\x73\x00\x6f\x00\
+\x6d\x00\x65\x00\x74\x00\x72\x00\x69\x00\x73\x00\x63\x00\x68\x05\
+\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x1c\x00\x50\x00\x65\x00\x72\
+\x00\x73\x00\x70\x00\x65\x00\x6b\x00\x74\x00\x69\x00\x76\x00\x69\
+\x00\x73\x00\x63\x00\x68\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\
+\x0e\x00\x44\x00\x65\x00\x75\x00\x74\x00\x73\x00\x63\x00\x68\x05\
+\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x3c\x00\x49\x00\x6e\x00\x74\
+\x00\x65\x00\x72\x00\x6e\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\
+\x00\x61\x00\x6c\x00\x69\x00\x73\x00\x69\x00\x65\x00\x72\x00\x75\
+\x00\x6e\x00\x67\x00\x73\x00\x62\x00\x65\x00\x69\x00\x73\x00\x70\
+\x00\x69\x00\x65\x00\x6c\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\
+\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x02\xbc\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x20\x00\x47\xdf\x04\
+\x00\x00\x00\x37\x00\x4d\x09\xa4\x00\x00\x00\x4e\x00\x5a\xf0\x84\
+\x00\x00\x00\x5f\x02\xf0\x8c\x31\x00\x00\x00\x70\x05\x93\x08\xe5\
+\x00\x00\x00\x87\x05\x9b\xa6\x44\x00\x00\x00\x98\x06\x3c\xe8\x53\
+\x00\x00\x00\xa9\x06\xec\x79\x65\x00\x00\x00\xbc\x0c\x4e\x30\xd8\
+\x00\x00\x00\xcf\x0e\x9f\xe7\x05\x00\x00\x00\xe2\x69\x00\x00\x00\
+\xf7\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x04\x89\xc6\x56\xfe\x05\x00\x05\xcf\xc7\
+\x01\x03\x00\x00\x00\x0c\x65\x87\x4e\xf6\x00\x5b\x00\x26\x00\x46\
+\x00\x5d\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x0c\x90\x00\x51\
+\xfa\x00\x5b\x00\x26\x00\x78\x00\x5d\x05\x00\x47\xdf\x04\x01\x03\
+\x00\x00\x00\x06\x7b\x2c\x4e\x00\x4e\x2a\x05\x00\x4d\x09\xa4\x01\
+\x03\x00\x00\x00\x06\x7b\x2c\x4e\x09\x4e\x2a\x05\x00\x5a\xf0\x84\
+\x01\x03\x00\x00\x00\x0c\x8b\xed\x8a\x00\x00\x3a\x00\x20\x00\x25\
+\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\x00\x00\x06\x65\x9c\x62\
+\x95\x5f\x71\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x06\x7b\x2c\
+\x4e\x8c\x4e\x2a\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\x08\x7b\
+\x49\x89\xd2\x62\x95\x5f\x71\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\
+\x00\x08\x90\x0f\x89\xc6\x62\x95\x5f\x71\x05\x06\xec\x79\x65\x01\
+\x03\x00\x00\x00\x08\x7b\x80\x4f\x53\x4e\x2d\x65\x87\x05\x0c\x4e\
+\x30\xd8\x01\x03\x00\x00\x00\x0a\x56\xfd\x96\x45\x53\x16\x83\x03\
+\x4f\x8b\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\
+\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x02\xe0\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x24\x00\x47\xdf\x04\
+\x00\x00\x00\x39\x00\x4d\x09\xa4\x00\x00\x00\x4c\x00\x5a\xf0\x84\
+\x00\x00\x00\x5d\x02\xf0\x8c\x31\x00\x00\x00\x70\x05\x93\x08\xe5\
+\x00\x00\x00\x8d\x05\x9b\xa6\x44\x00\x00\x00\xa0\x06\x3c\xe8\x53\
+\x00\x00\x00\xb3\x06\xec\x79\x65\x00\x00\x00\xca\x0c\x4e\x30\xd8\
+\x00\x00\x00\xdf\x0e\x9f\xe7\x05\x00\x00\x00\xf8\x69\x00\x00\x01\
+\x1b\x03\x00\x00\x00\x06\x00\x52\x00\x54\x00\x4c\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x08\x06\x45\x06\x31\x06\x26\x06\x49\x05\
+\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0a\x06\x27\x06\x44\x06\x45\
+\x06\x44\x06\x41\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x08\x06\
+\x23\x06\x2e\x06\x31\x06\x2c\x05\x00\x47\xdf\x04\x01\x03\x00\x00\
+\x00\x06\x06\x23\x06\x48\x06\x44\x05\x00\x4d\x09\xa4\x01\x03\x00\
+\x00\x00\x08\x06\x2b\x06\x27\x06\x44\x06\x2b\x05\x00\x5a\xf0\x84\
+\x01\x03\x00\x00\x00\x12\x06\x27\x06\x44\x06\x44\x06\x3a\x06\x29\
+\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\
+\x00\x00\x08\x06\x45\x06\x35\x06\x45\x06\x2a\x05\x05\x93\x08\xe5\
+\x01\x03\x00\x00\x00\x08\x06\x2b\x06\x27\x06\x46\x06\x49\x05\x05\
+\x9b\xa6\x44\x01\x03\x00\x00\x00\x0c\x06\x45\x06\x2a\x06\x45\x06\
+\x27\x06\x2b\x06\x44\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x0a\
+\x06\x45\x06\x46\x06\x38\x06\x48\x06\x31\x05\x06\xec\x79\x65\x01\
+\x03\x00\x00\x00\x0e\x06\x27\x06\x44\x06\x39\x06\x31\x06\x28\x06\
+\x4a\x06\x29\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x18\x06\x45\
+\x06\x2b\x06\x27\x06\x44\x00\x20\x06\x27\x06\x44\x06\x2a\x06\x2f\
+\x06\x48\x06\x4a\x06\x44\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\
+\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x03\x1c\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x28\x00\x47\xdf\x04\
+\x00\x00\x00\x41\x00\x4d\x09\xa4\x00\x00\x00\x58\x00\x5a\xf0\x84\
+\x00\x00\x00\x6d\x02\xf0\x8c\x31\x00\x00\x00\x82\x05\x93\x08\xe5\
+\x00\x00\x00\x9f\x05\x9b\xa6\x44\x00\x00\x00\xbc\x06\x3c\xe8\x53\
+\x00\x00\x00\xd1\x06\xec\x79\x65\x00\x00\x00\xf2\x0c\x4e\x30\xd8\
+\x00\x00\x01\x15\x0e\x9f\xe7\x05\x00\x00\x01\x2a\x69\x00\x00\x01\
+\x57\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x0c\x00\x50\x00\x6f\x00\x68\x00\x6c\x00\
+\x65\x00\x64\x05\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0e\x00\x26\
+\x00\x53\x00\x6f\x00\x75\x00\x62\x00\x6f\x00\x72\x05\x00\x2a\xd0\
+\x25\x01\x03\x00\x00\x00\x0c\x00\x26\x00\x4b\x00\x6f\x00\x6e\x00\
+\x65\x00\x63\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0a\x00\x50\
+\x00\x72\x00\x76\x00\x6e\x00\xed\x05\x00\x4d\x09\xa4\x01\x03\x00\
+\x00\x00\x0a\x00\x54\x01\x59\x00\x65\x00\x74\x00\xed\x05\x00\x5a\
+\xf0\x84\x01\x03\x00\x00\x00\x12\x00\x4a\x00\x61\x00\x79\x00\x7a\
+\x00\x6b\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\
+\x03\x00\x00\x00\x12\x00\x4e\x00\x61\x00\x6b\x00\x6c\x00\x6f\x00\
+\x6e\x01\x1b\x00\x6e\x00\xfd\x05\x05\x93\x08\xe5\x01\x03\x00\x00\
+\x00\x0a\x00\x44\x00\x72\x00\x75\x00\x68\x00\xfd\x05\x05\x9b\xa6\
+\x44\x01\x03\x00\x00\x00\x16\x00\x49\x00\x73\x00\x6f\x00\x6d\x00\
+\x65\x00\x74\x00\x72\x00\x69\x00\x63\x00\x6b\x00\xfd\x05\x06\x3c\
+\xe8\x53\x01\x03\x00\x00\x00\x18\x00\x50\x00\x65\x00\x72\x00\x73\
+\x00\x70\x00\x65\x00\x6b\x00\x74\x00\x69\x00\x76\x00\x6e\x00\xed\
+\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x0a\x01\x0c\x00\x65\x00\
+\x73\x00\x6b\x00\xfd\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x22\
+\x00\x55\x00\x6b\x00\xe1\x00\x7a\x00\x6b\x00\x61\x00\x20\x00\x6c\
+\x00\x6f\x00\x6b\x00\x61\x00\x6c\x00\x69\x00\x7a\x00\x61\x00\x63\
+\x00\x65\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\
+\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x03\x28\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x26\x00\x47\xdf\x04\
+\x00\x00\x00\x3b\x00\x4d\x09\xa4\x00\x00\x00\x50\x00\x5a\xf0\x84\
+\x00\x00\x00\x65\x02\xf0\x8c\x31\x00\x00\x00\x7a\x05\x93\x08\xe5\
+\x00\x00\x00\x99\x05\x9b\xa6\x44\x00\x00\x00\xb2\x06\x3c\xe8\x53\
+\x00\x00\x00\xcb\x06\xec\x79\x65\x00\x00\x00\xea\x0c\x4e\x30\xd8\
+\x00\x00\x01\x0b\x0e\x9f\xe7\x05\x00\x00\x01\x26\x69\x00\x00\x01\
+\x63\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x0a\x00\x56\x00\x69\x00\x73\x00\x74\x00\
+\x61\x05\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0a\x00\x26\x00\x46\
+\x00\x69\x00\x6c\x00\x65\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\
+\x0a\x00\x26\x00\x45\x00\x73\x00\x63\x00\x69\x05\x00\x47\xdf\x04\
+\x01\x03\x00\x00\x00\x0a\x00\x50\x00\x72\x00\x69\x00\x6d\x00\x6f\
+\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x0a\x00\x54\x00\x65\x00\
+\x72\x00\x7a\x00\x6f\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x14\
+\x00\x4c\x00\x69\x00\x6e\x00\x67\x00\x75\x00\x61\x00\x3a\x00\x20\
+\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\x00\x00\x0e\x00\
+\x4f\x00\x62\x00\x6c\x00\x69\x00\x71\x00\x75\x00\x61\x05\x05\x93\
+\x08\xe5\x01\x03\x00\x00\x00\x0e\x00\x53\x00\x65\x00\x63\x00\x6f\
+\x00\x6e\x00\x64\x00\x6f\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\
+\x14\x00\x49\x00\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\
+\x69\x00\x63\x00\x61\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\
+\x00\x50\x00\x72\x00\x6f\x00\x73\x00\x70\x00\x65\x00\x74\x00\x74\
+\x00\x69\x00\x63\x00\x61\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\
+\x10\x00\x49\x00\x74\x00\x61\x00\x6c\x00\x69\x00\x61\x00\x6e\x00\
+\x6f\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x32\x00\x45\x00\x73\
+\x00\x65\x00\x6d\x00\x70\x00\x69\x00\x6f\x00\x20\x00\x64\x00\x69\
+\x00\x20\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x6c\x00\x69\x00\x7a\
+\x00\x7a\x00\x61\x00\x7a\x00\x69\x00\x6f\x00\x6e\x00\x65\x05\x0e\
+\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\
+\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x03\x24\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x22\x00\x47\xdf\x04\
+\x00\x00\x00\x35\x00\x4d\x09\xa4\x00\x00\x00\x50\x00\x5a\xf0\x84\
+\x00\x00\x00\x67\x02\xf0\x8c\x31\x00\x00\x00\x7e\x05\x93\x08\xe5\
+\x00\x00\x00\x9b\x05\x9b\xa6\x44\x00\x00\x00\xb2\x06\x3c\xe8\x53\
+\x00\x00\x00\xc7\x06\xec\x79\x65\x00\x00\x00\xe6\x0c\x4e\x30\xd8\
+\x00\x00\x01\x05\x0e\x9f\xe7\x05\x00\x00\x01\x1a\x69\x00\x00\x01\
+\x5f\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x06\x00\x56\x00\x69\x00\x73\x05\x00\x05\
+\xcf\xc7\x01\x03\x00\x00\x00\x08\x00\x26\x00\x46\x00\x69\x00\x6c\
+\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x10\x00\x26\x00\x41\x00\
+\x76\x00\x73\x00\x6c\x00\x75\x00\x74\x00\x74\x05\x00\x47\xdf\x04\
+\x01\x03\x00\x00\x00\x0c\x00\x46\x00\xf8\x00\x72\x00\x73\x00\x74\
+\x00\x65\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x0c\x00\x54\x00\
+\x72\x00\x65\x00\x64\x00\x6a\x00\x65\x05\x00\x5a\xf0\x84\x01\x03\
+\x00\x00\x00\x12\x00\x53\x00\x70\x00\x72\x00\xe5\x00\x6b\x00\x3a\
+\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\x00\x00\
+\x0c\x00\x53\x00\x6b\x00\x6a\x00\x65\x00\x76\x00\x74\x05\x05\x93\
+\x08\xe5\x01\x03\x00\x00\x00\x0a\x00\x41\x00\x6e\x00\x64\x00\x72\
+\x00\x65\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\x14\x00\x49\x00\
+\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\x69\x00\x73\x00\
+\x6b\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x14\x00\x50\x00\x65\
+\x00\x72\x00\x73\x00\x70\x00\x65\x00\x6b\x00\x74\x00\x69\x00\x76\
+\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x0a\x00\x4e\x00\x6f\x00\
+\x72\x00\x73\x00\x6b\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x3a\
+\x00\x49\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6e\x00\x61\x00\x73\
+\x00\x6a\x00\x6f\x00\x6e\x00\x61\x00\x6c\x00\x69\x00\x73\x00\x65\
+\x00\x72\x00\x69\x00\x6e\x00\x67\x00\x73\x00\x65\x00\x6b\x00\x73\
+\x00\x65\x00\x6d\x00\x70\x00\x65\x00\x6c\x05\x0e\x9f\xe7\x05\x01\
+\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\
+\x6f\x77\x00\
+\x00\x00\x03\x24\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x22\x00\x47\xdf\x04\
+\x00\x00\x00\x3b\x00\x4d\x09\xa4\x00\x00\x00\x54\x00\x5a\xf0\x84\
+\x00\x00\x00\x69\x02\xf0\x8c\x31\x00\x00\x00\x7e\x05\x93\x08\xe5\
+\x00\x00\x00\x9d\x05\x9b\xa6\x44\x00\x00\x00\xb4\x06\x3c\xe8\x53\
+\x00\x00\x00\xcd\x06\xec\x79\x65\x00\x00\x00\xec\x0c\x4e\x30\xd8\
+\x00\x00\x01\x09\x0e\x9f\xe7\x05\x00\x00\x01\x24\x69\x00\x00\x01\
+\x5f\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x06\x03\x8c\x03\xc8\x03\xb7\x05\x00\x05\
+\xcf\xc7\x01\x03\x00\x00\x00\x0e\x00\x26\x03\x91\x03\xc1\x03\xc7\
+\x03\xb5\x03\xaf\x03\xbf\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\
+\x0e\x03\x88\x00\x26\x03\xbe\x03\xbf\x03\xb4\x03\xbf\x03\xc2\x05\
+\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0a\x03\xa0\x03\xc1\x03\xce\
+\x03\xc4\x03\xbf\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x0a\x03\
+\xa4\x03\xc1\x03\xaf\x03\xc4\x03\xbf\x05\x00\x5a\xf0\x84\x01\x03\
+\x00\x00\x00\x14\x03\x93\x03\xbb\x03\xce\x03\xc3\x03\xc3\x03\xb1\
+\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\
+\x00\x00\x0c\x03\xa0\x03\xbb\x03\xac\x03\xb3\x03\xb9\x03\xb1\x05\
+\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x0e\x03\x94\x03\xb5\x03\xcd\
+\x03\xc4\x03\xb5\x03\xc1\x03\xbf\x05\x05\x9b\xa6\x44\x01\x03\x00\
+\x00\x00\x14\x03\x99\x03\xc3\x03\xbf\x03\xbc\x03\xb5\x03\xc4\x03\
+\xc1\x03\xb9\x03\xba\x03\xae\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\
+\x00\x12\x03\xa0\x03\xc1\x03\xbf\x03\xbf\x03\xc0\x03\xc4\x03\xb9\
+\x03\xba\x03\xae\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x10\x03\
+\x95\x03\xbb\x03\xbb\x03\xb7\x03\xbd\x03\xb9\x03\xba\x03\xac\x05\
+\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x30\x03\xa0\x03\xb1\x03\xc1\
+\x03\xac\x03\xb4\x03\xb5\x03\xb9\x03\xb3\x03\xbc\x03\xb1\x00\x20\
+\x03\xb4\x03\xb9\x03\xb5\x03\xb8\x03\xbd\x03\xbf\x03\xc0\x03\xbf\
+\x03\xaf\x03\xb7\x03\xc3\x03\xb7\x03\xc2\x05\x0e\x9f\xe7\x05\x01\
+\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\
+\x6f\x77\x00\
+\x00\x00\x03\x26\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x2a\x00\x47\xdf\x04\
+\x00\x00\x00\x45\x00\x4d\x09\xa4\x00\x00\x00\x5a\x00\x5a\xf0\x84\
+\x00\x00\x00\x6d\x02\xf0\x8c\x31\x00\x00\x00\x80\x05\x93\x08\xe5\
+\x00\x00\x00\x9f\x05\x9b\xa6\x44\x00\x00\x00\xb8\x06\x3c\xe8\x53\
+\x00\x00\x00\xc9\x06\xec\x79\x65\x00\x00\x00\xe6\x0c\x4e\x30\xd8\
+\x00\x00\x01\x07\x0e\x9f\xe7\x05\x00\x00\x01\x24\x69\x00\x00\x01\
+\x61\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x0e\x00\x41\x00\x73\x00\x70\x00\x65\x00\
+\x6b\x00\x74\x00\x6f\x05\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x10\
+\x00\x26\x00\x44\x00\x6f\x00\x73\x00\x69\x00\x65\x00\x72\x00\x6f\
+\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x0a\x00\x26\x00\x46\x00\
+\x69\x00\x6e\x00\x69\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x08\
+\x00\x55\x00\x6e\x00\x75\x00\x65\x05\x00\x4d\x09\xa4\x01\x03\x00\
+\x00\x00\x08\x00\x54\x00\x72\x00\x69\x00\x65\x05\x00\x5a\xf0\x84\
+\x01\x03\x00\x00\x00\x14\x00\x4c\x00\x69\x00\x6e\x00\x67\x00\x76\
+\x00\x6f\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\
+\x03\x00\x00\x00\x0e\x00\x4f\x00\x62\x00\x6c\x00\x69\x00\x6b\x00\
+\x76\x00\x61\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x06\x00\x44\
+\x00\x75\x00\x65\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\x12\x00\
+\x49\x00\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\x69\x00\
+\x61\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\x00\x50\x00\x65\
+\x00\x72\x00\x73\x00\x70\x00\x65\x00\x6b\x00\x74\x00\x69\x00\x76\
+\x00\x61\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x12\x00\x45\x00\
+\x73\x00\x70\x00\x65\x00\x72\x00\x61\x00\x6e\x00\x74\x00\x6f\x05\
+\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x32\x00\x45\x00\x6b\x00\x7a\
+\x00\x65\x00\x6d\x00\x70\x00\x6c\x00\x6f\x00\x20\x00\x70\x00\x72\
+\x00\x69\x00\x20\x00\x69\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6e\
+\x00\x61\x00\x63\x00\x69\x00\x69\x00\x67\x00\x6f\x05\x0e\x9f\xe7\
+\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\
+\x6e\x64\x6f\x77\x00\
+\x00\x00\x03\x2a\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x24\x00\x47\xdf\x04\
+\x00\x00\x00\x39\x00\x4d\x09\xa4\x00\x00\x00\x4e\x00\x5a\xf0\x84\
+\x00\x00\x00\x63\x02\xf0\x8c\x31\x00\x00\x00\x78\x05\x93\x08\xe5\
+\x00\x00\x00\x9b\x05\x9b\xa6\x44\x00\x00\x00\xb4\x06\x3c\xe8\x53\
+\x00\x00\x00\xcb\x06\xec\x79\x65\x00\x00\x00\xe8\x0c\x4e\x30\xd8\
+\x00\x00\x01\x09\x0e\x9f\xe7\x05\x00\x00\x01\x22\x69\x00\x00\x01\
+\x65\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x08\x00\x56\x00\x69\x00\x65\x00\x77\x05\
+\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0a\x00\x26\x00\x46\x00\x69\
+\x00\x6c\x00\x65\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x0a\x00\
+\x45\x00\x26\x00\x78\x00\x69\x00\x74\x05\x00\x47\xdf\x04\x01\x03\
+\x00\x00\x00\x0a\x00\x46\x00\x69\x00\x72\x00\x73\x00\x74\x05\x00\
+\x4d\x09\xa4\x01\x03\x00\x00\x00\x0a\x00\x54\x00\x68\x00\x69\x00\
+\x72\x00\x64\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x18\x00\x4c\
+\x00\x61\x00\x6e\x00\x67\x00\x75\x00\x61\x00\x67\x00\x65\x00\x3a\
+\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\x00\x00\
+\x0e\x00\x4f\x00\x62\x00\x6c\x00\x69\x00\x71\x00\x75\x00\x65\x05\
+\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x0c\x00\x53\x00\x65\x00\x63\
+\x00\x6f\x00\x6e\x00\x64\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\
+\x12\x00\x49\x00\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\
+\x69\x00\x63\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\x00\x50\
+\x00\x65\x00\x72\x00\x73\x00\x70\x00\x65\x00\x63\x00\x74\x00\x69\
+\x00\x76\x00\x65\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x0e\x00\
+\x45\x00\x6e\x00\x67\x00\x6c\x00\x69\x00\x73\x00\x68\x05\x0c\x4e\
+\x30\xd8\x01\x03\x00\x00\x00\x38\x00\x49\x00\x6e\x00\x74\x00\x65\
+\x00\x72\x00\x6e\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x61\
+\x00\x6c\x00\x69\x00\x7a\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\
+\x00\x20\x00\x45\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\
+\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\
+\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x02\xd2\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x24\x00\x47\xdf\x04\
+\x00\x00\x00\x3f\x00\x4d\x09\xa4\x00\x00\x00\x56\x00\x5a\xf0\x84\
+\x00\x00\x00\x67\x02\xf0\x8c\x31\x00\x00\x00\x78\x05\x93\x08\xe5\
+\x00\x00\x00\x8f\x05\x9b\xa6\x44\x00\x00\x00\xa4\x06\x3c\xe8\x53\
+\x00\x00\x00\xb5\x06\xec\x79\x65\x00\x00\x00\xca\x0c\x4e\x30\xd8\
+\x00\x00\x00\xdb\x0e\x9f\xe7\x05\x00\x00\x00\xec\x69\x00\x00\x01\
+\x0d\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x08\x88\x68\x79\x3a\x65\xb9\x5f\x0f\x05\
+\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x10\x30\xd5\x30\xa1\x30\xa4\
+\x30\xeb\x00\x28\x00\x26\x00\x46\x00\x29\x05\x00\x2a\xd0\x25\x01\
+\x03\x00\x00\x00\x0c\x7d\x42\x4e\x86\x00\x28\x00\x26\x00\x58\x00\
+\x29\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x06\x7b\x2c\x4e\x00\
+\x88\x4c\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x06\x7b\x2c\x4e\
+\x09\x88\x4c\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x0c\x8a\x00\
+\x8a\x9e\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\
+\x03\x00\x00\x00\x0a\x65\x9c\x30\x81\x62\x95\x5f\x71\x6c\xd5\x05\
+\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x06\x7b\x2c\x4e\x8c\x88\x4c\
+\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\x0a\x7b\x49\x89\xd2\x62\
+\x95\x5f\x71\x6c\xd5\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x06\
+\x90\x60\x8f\xd1\x6c\xd5\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\
+\x06\x65\xe5\x67\x2c\x8a\x9e\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\
+\x00\x16\x56\xfd\x96\x9b\x53\x16\x00\x28\x00\x69\x00\x31\x00\x38\
+\x00\x6e\x00\x29\x30\x6e\x4f\x8b\x05\x0e\x9f\xe7\x05\x01\x2f\x00\
+\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\
+\x00\
+"
+
+qt_resource_name = b"\
+\x00\x0c\
+\x0d\xfc\x11\x13\
+\x00\x74\
+\x00\x72\x00\x61\x00\x6e\x00\x73\x00\x6c\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x73\
+\x00\x0a\
+\x04\x50\xdc\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x66\x00\x72\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x6f\xac\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x6b\x00\x6f\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x65\x0c\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x72\x00\x75\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x67\x1c\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x73\x00\x76\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x58\x0c\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x64\x00\x65\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x7d\x3c\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x7a\x00\x68\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x55\xdc\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x57\xec\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x63\x00\x73\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x6d\xfc\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x69\x00\x74\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x68\xac\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x6e\x00\x6f\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x56\x7c\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x65\x00\x6c\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x59\xac\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x65\x00\x6f\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x59\x9c\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x65\x00\x6e\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x6c\xbc\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x6a\x00\x70\x00\x2e\x00\x71\x00\x6d\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\
+\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\xba\x00\x00\x00\x00\x00\x01\x00\x00\x12\x76\
+\x00\x00\x01\x22\x00\x00\x00\x00\x00\x01\x00\x00\x1e\xce\
+\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x15\x5a\
+\x00\x00\x00\x86\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x62\
+\x00\x00\x01\x56\x00\x00\x00\x00\x00\x01\x00\x00\x25\x20\
+\x00\x00\x01\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x21\xf6\
+\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x06\x06\
+\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x01\x00\x00\x09\x30\
+\x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xa6\
+\x00\x00\x01\x70\x00\x00\x00\x00\x00\x01\x00\x00\x28\x4e\
+\x00\x00\x00\xee\x00\x00\x00\x00\x00\x01\x00\x00\x18\x7a\
+\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x03\x50\
+\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xb6\
+"
+
+def qInitResources():
+ QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/corelib/tools/i18n/translations/i18n_ar.qm b/examples/corelib/tools/i18n/translations/i18n_ar.qm
new file mode 100644
index 0000000..a134c46
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_ar.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_ar.ts b/examples/corelib/tools/i18n/translations/i18n_ar.ts
new file mode 100644
index 0000000..a7ec2c9
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_ar.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>First</source>
+ <translation>أول</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>مثال التدويل</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>متماثل</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>اللغة: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>العربية</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>مصمت</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>منظور</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>ثانى</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>ثالث</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>مرئى</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>أخرج</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>الملÙ</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>RTL</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_cs.qm b/examples/corelib/tools/i18n/translations/i18n_cs.qm
new file mode 100644
index 0000000..5b7ff95
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_cs.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_cs.ts b/examples/corelib/tools/i18n/translations/i18n_cs.ts
new file mode 100644
index 0000000..6c4dee9
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_cs.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>Pohled</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Soubor</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Konec</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>První</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Třetí</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Jayzk: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Český</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Nakloněný</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Druhý</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometrický</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspektivní</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Ukázka lokalizace</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_de.qm b/examples/corelib/tools/i18n/translations/i18n_de.qm
new file mode 100644
index 0000000..177fc49
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_de.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_de.ts b/examples/corelib/tools/i18n/translations/i18n_de.ts
new file mode 100644
index 0000000..249a61d
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_de.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>Ansicht</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Datei</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>Be&amp;enden</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Erstens</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Drittens</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Deutsch</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Sprache: %1</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Schief</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Zweitens</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometrisch</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspektivisch</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Internationalisierungsbeispiel</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_el.qm b/examples/corelib/tools/i18n/translations/i18n_el.qm
new file mode 100644
index 0000000..5483291
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_el.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_el.ts b/examples/corelib/tools/i18n/translations/i18n_el.ts
new file mode 100644
index 0000000..d23a0aa
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_el.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;ΑÏχείο</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>Έ&amp;ξοδος</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>ΠÏώτο</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>ΠαÏάδειγμα διεθνοποίησης</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>ΙσομετÏική</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Γλώσσα: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Ελληνικά</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Πλάγια</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>ΠÏοοπτική</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>ΔεÏτεÏο</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>ΤÏίτο</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Όψη</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_en.qm b/examples/corelib/tools/i18n/translations/i18n_en.qm
new file mode 100644
index 0000000..9190ac7
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_en.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_en.ts b/examples/corelib/tools/i18n/translations/i18n_en.ts
new file mode 100644
index 0000000..ca38e95
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_en.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>E&amp;xit</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;File</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Internationalization Example</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Language: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>English</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>View</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspective</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometric</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Oblique</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>First</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Second</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Third</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_eo.qm b/examples/corelib/tools/i18n/translations/i18n_eo.qm
new file mode 100644
index 0000000..a8457be
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_eo.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_eo.ts b/examples/corelib/tools/i18n/translations/i18n_eo.ts
new file mode 100644
index 0000000..16a37be
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_eo.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Dosiero</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Unue</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Ekzemplo pri internaciigo</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometria</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Lingvo: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Esperanto</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Oblikva</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspektiva</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Due</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Trie</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Aspekto</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Fini</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_fr.qm b/examples/corelib/tools/i18n/translations/i18n_fr.qm
new file mode 100644
index 0000000..3e8a69b
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_fr.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_fr.ts b/examples/corelib/tools/i18n/translations/i18n_fr.ts
new file mode 100644
index 0000000..0012892
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_fr.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>Vue</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Fichier</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Quitter</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Premier</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Troisième</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Langue : %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Français</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Oblique</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Deuxième</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isométrique</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspective</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Exemple d&apos;internationalisation</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_it.qm b/examples/corelib/tools/i18n/translations/i18n_it.qm
new file mode 100644
index 0000000..3dffd30
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_it.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_it.ts b/examples/corelib/tools/i18n/translations/i18n_it.ts
new file mode 100644
index 0000000..d516a27
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_it.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>First</source>
+ <translation>Primo</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Esempio di localizzazione</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometrica</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Lingua: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Italiano</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Obliqua</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Prospettica</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Secondo</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Terzo</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Vista</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Esci</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;File</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_jp.qm b/examples/corelib/tools/i18n/translations/i18n_jp.qm
new file mode 100644
index 0000000..017bc96
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_jp.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_jp.ts b/examples/corelib/tools/i18n/translations/i18n_jp.ts
new file mode 100644
index 0000000..067b5a8
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_jp.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>&amp;File</source>
+ <translation>ファイル(&amp;F)</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>終了(&amp;X)</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>第一行</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>国際化(i18n)ã®ä¾‹</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>等角投影法</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>言語: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>日本語</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>æ–œã‚投影法</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>é è¿‘法</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>第二行</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>第三行</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>表示方å¼</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_ko.qm b/examples/corelib/tools/i18n/translations/i18n_ko.qm
new file mode 100644
index 0000000..d61b93d
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_ko.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_ko.ts b/examples/corelib/tools/i18n/translations/i18n_ko.ts
new file mode 100644
index 0000000..bfd5924
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_ko.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>&amp;File</source>
+ <translation>파ì¼&amp;F</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>종료&amp;X</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>첫번째</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>국제화 예제</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>등측ë„</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>언어 : %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>한국어</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>ë¹—ê°</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>ì›ê·¼í™”법</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>ë‘번째</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>세번째</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>보기</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_no.qm b/examples/corelib/tools/i18n/translations/i18n_no.qm
new file mode 100644
index 0000000..c84b0d7
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_no.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_no.ts b/examples/corelib/tools/i18n/translations/i18n_no.ts
new file mode 100644
index 0000000..2e06974
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_no.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>Vis</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Fil</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Avslutt</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Første</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Tredje</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Språk: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Norsk</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Skjevt</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Andre</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometrisk</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspektiv</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Internasjonaliseringseksempel</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_pt.qm b/examples/corelib/tools/i18n/translations/i18n_pt.qm
new file mode 100644
index 0000000..d1d3e6d
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_pt.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_pt.ts b/examples/corelib/tools/i18n/translations/i18n_pt.ts
new file mode 100644
index 0000000..9365639
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_pt.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Sair</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Arquivo</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Exemplo de Internacionalização</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Idioma: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Português</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Visão</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspectiva</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isométrico</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Oblíquo</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Primeiro</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Segundo</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Terceiro</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_ru.qm b/examples/corelib/tools/i18n/translations/i18n_ru.qm
new file mode 100644
index 0000000..a76e1b8
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_ru.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_ru.ts b/examples/corelib/tools/i18n/translations/i18n_ru.ts
new file mode 100644
index 0000000..c9a9db8
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_ru.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>Вид</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>Файл</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>Выход</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Первый</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Третий</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Язык: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>РуÑÑкий</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>КурÑив</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Второй</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>ИзометричеÑкий</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>ПерÑпектива</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Пример интернациноализации</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_sv.qm b/examples/corelib/tools/i18n/translations/i18n_sv.qm
new file mode 100644
index 0000000..7204b30
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_sv.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_sv.ts b/examples/corelib/tools/i18n/translations/i18n_sv.ts
new file mode 100644
index 0000000..ac4ab98
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_sv.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>Visa</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>&amp;Arkiv</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>&amp;Avsluta</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>Första</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>Tredje</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>Språk: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Svenska</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Skevt</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>Andra</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>Isometriskt</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>Perspektivt</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>Internationaliseringsexempel</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/i18n/translations/i18n_zh.qm b/examples/corelib/tools/i18n/translations/i18n_zh.qm
new file mode 100644
index 0000000..32053f4
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_zh.qm
Binary files differ
diff --git a/examples/corelib/tools/i18n/translations/i18n_zh.ts b/examples/corelib/tools/i18n/translations/i18n_zh.ts
new file mode 100644
index 0000000..3b71547
--- /dev/null
+++ b/examples/corelib/tools/i18n/translations/i18n_zh.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>View</source>
+ <translation>视图</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>文件[&amp;F]</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>退出[&amp;x]</translation>
+ </message>
+ <message>
+ <source>First</source>
+ <translation>第一个</translation>
+ </message>
+ <message>
+ <source>Third</source>
+ <translation>第三个</translation>
+ </message>
+ <message>
+ <source>Language: %1</source>
+ <translation>语言: %1</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>简体中文</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>斜投影</translation>
+ </message>
+ <message>
+ <source>Second</source>
+ <translation>第二个</translation>
+ </message>
+ <message>
+ <source>Isometric</source>
+ <translation>等角投影</translation>
+ </message>
+ <message>
+ <source>Perspective</source>
+ <translation>é€è§†æŠ•å½±</translation>
+ </message>
+ <message>
+ <source>Internationalization Example</source>
+ <translation>国际化范例</translation>
+ </message>
+ <message>
+ <source>LTR</source>
+ <translation>LTR</translation>
+ </message>
+</context>
+</TS>
diff --git a/examples/corelib/tools/qtdemo/demos.xml b/examples/corelib/tools/qtdemo/demos.xml
new file mode 100644
index 0000000..7bc212a
--- /dev/null
+++ b/examples/corelib/tools/qtdemo/demos.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<categories>
+ <category dirname="." docname="demos" name="Demonstrations">
+ <example filename="affine" name="Affine Transformations" />
+ <example filename="arthurplugin" name="Arthur Plugin" />
+ <example filename="composition" name="Composition Modes" />
+ <example filename="gradients" name="Gradients" />
+ <example filename="pathstroke" name="Path Stroking" />
+ <example filename="deform" name="Vector Deformation" />
+ <example filename="books" name="Books" />
+ <example filename="mainwindow" name="Main Window" />
+ <example filename="spreadsheet" name="Spreadsheet" />
+ <example filename="sqlbrowser" name="SQL Browser" />
+ <example filename="textedit" name="Text Edit" />
+ <example filename="embeddeddialogs" name="Embedded Dialogs" />
+ </category>
+</categories>
diff --git a/examples/corelib/tools/qtdemo/displayshape.py b/examples/corelib/tools/qtdemo/displayshape.py
new file mode 100644
index 0000000..ca81905
--- /dev/null
+++ b/examples/corelib/tools/qtdemo/displayshape.py
@@ -0,0 +1,364 @@
+############################################################################
+##
+## Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
+##
+## This file is part of the example classes of the Qt Toolkit.
+##
+## This file may be used under the terms of the GNU General Public
+## License version 2.0 as published by the Free Software Foundation
+## and appearing in the file LICENSE.GPL included in the packaging of
+## this file. Please review the following information to ensure GNU
+## General Public Licensing requirements will be met:
+## http://www.trolltech.com/products/qt/opensource.html
+##
+## If you are unsure which license is appropriate for your use, please
+## review the following information:
+## http://www.trolltech.com/products/qt/licensing.html or contact the
+## sales department at sales@trolltech.com.
+##
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+############################################################################
+
+from math import ceil
+from PySide2 import QtCore, QtGui, QtNetwork, QtXml
+
+
+class DisplayShape:
+ def __init__(self, position, maxSize):
+ self.metadata = {}
+ self.image = QtGui.QImage()
+ self.pos = position
+ self.targetPos = QtCore.QPointF()
+ self.maxSize = maxSize
+ self.interactive = False
+
+ def animate(self):
+ if not self.targetPos.isNull():
+ displacement = QtCore.QLineF(self.pos, self.targetPos)
+ newPosition = displacement.pointAt(0.25)
+ if displacement.length() <= 1.0:
+ self.pos = self.targetPos
+ self.targetPos = QtCore.QPointF()
+ else:
+ self.pos = newPosition
+
+ return True
+
+ return False
+
+ def isInteractive(self):
+ return self.interactive
+
+ def paint(self, painter):
+ painter.save()
+ painter.drawImage(self.pos, self.image)
+ painter.restore()
+
+ def position(self):
+ return self.pos
+
+ def rect(self):
+ return QtCore.QRectF(self.pos, self.image.size())
+
+ def setInteractive(self, enable):
+ self.interactive = enable
+
+ def setPosition(self, position):
+ self.pos = position
+
+ def setSize(self, size):
+ self.maxSize = size
+
+ def setTarget(self, position):
+ self.targetPos = position
+
+ def size(self):
+ return self.maxSize
+
+ def target(self):
+ return self.targetPos
+
+
+class PanelShape(DisplayShape):
+ def __init__(self, path, normal, highlighted, pen, position, maxSize):
+ DisplayShape.__init__(self, position, maxSize)
+
+ self.normalBrush = normal
+ self.path = path
+ self.highlightedBrush = highlighted
+ self.pen = pen
+ self.brush = QtGui.QBrush(self.normalBrush)
+
+ def animate(self):
+ updated = False
+
+ if not "destroy" in self.metadata:
+ if "fade" in self.metadata:
+ penColor = self.pen.color()
+ brushColor = self.brush.color()
+ penAlpha = penColor.alpha()
+ brushAlpha = brushColor.alpha()
+ fadeMinimum = int(self.metadata.get("fade minimum", "0"))
+
+ if penAlpha != fadeMinimum or brushAlpha != fadeMinimum or self.metadata["fade"] > 0:
+ penAlpha = max(fadeMinimum, min(penAlpha + self.metadata["fade"], 255))
+ brushAlpha = max(fadeMinimum, min(brushAlpha + self.metadata["fade"], 255))
+
+ penColor.setAlpha(penAlpha)
+ brushColor.setAlpha(brushAlpha)
+ self.pen.setColor(penColor)
+ self.brush.setColor(brushColor)
+
+ if penAlpha == 0 and brushAlpha == 0:
+ self.metadata["destroy"] = True
+ del self.metadata["fade"]
+ elif penAlpha == 255 and brushAlpha == 255:
+ del self.metadata["fade"]
+
+ updated = True
+ elif "highlight" in self.metadata:
+ scale = float(self.metadata.get("highlight scale", "0.0"))
+ color = QtGui.QColor(self.brush.color())
+
+ if self.metadata["highlight"]:
+ scale = max(0.0, min(scale + 0.5, 1.0))
+ else:
+ scale = max(0.0, min(scale - 0.2, 1.0))
+
+ if scale == 0.0:
+ self.brush = QtGui.QBrush(self.normalBrush)
+ del self.metadata["highlight"]
+
+ try:
+ del self.metadata["highlight scale"]
+ except KeyError:
+ pass
+
+ updated = True
+ elif scale != float(self.metadata.get("highlight scale", "0.0")):
+ self.metadata["highlight scale"] = scale
+
+ if scale == 1.0:
+ self.brush = QtGui.QBrush(self.highlightedBrush)
+ else:
+ normal = self.normalBrush.color()
+ highlighted = self.highlightedBrush.color()
+
+ color.setRedF((1.0 - scale) * normal.redF() + scale * highlighted.redF())
+ color.setGreenF((1.0 - scale) * normal.greenF() + scale * highlighted.greenF())
+ color.setBlueF((1.0 - scale) * normal.blueF() + scale * highlighted.blueF())
+ self.brush.setColor(color)
+
+ updated = True
+
+ return (DisplayShape.animate(self) or updated)
+
+ def paint(self, painter):
+ painter.save()
+ painter.setRenderHint(QtGui.QPainter.Antialiasing)
+ painter.setBrush(self.brush)
+ painter.setPen(self.pen)
+ painter.translate(self.pos)
+ painter.drawPath(self.path)
+ painter.restore()
+
+ def rect(self):
+ return QtCore.QRectF(self.pos + self.path.boundingRect().topLeft(),
+ self.path.boundingRect().size())
+
+
+class TitleShape(DisplayShape):
+ def __init__(self, text, font, pen, position, maxSize, alignment=QtCore.Qt.AlignVCenter|QtCore.Qt.AlignLeft):
+ DisplayShape.__init__(self, position, maxSize)
+
+ self.font = QtGui.QFont(font)
+ self.text = QtCore.QString(text)
+ self.pen = pen
+ self.alignment = alignment
+
+ fm = QtGui.QFontMetricsF(self.font)
+ self.textRect = fm.boundingRect(QtCore.QRectF(QtCore.QPointF(0, 0), maxSize), self.alignment, self.text)
+
+ textWidth = max(fm.width(self.text), self.textRect.width())
+ textHeight = max(fm.height(), self.textRect.height())
+
+ scale = min(maxSize.width() / textWidth, maxSize.height() / textHeight)
+
+ self.font.setPointSizeF(self.font.pointSizeF() * scale)
+ fm = QtGui.QFontMetricsF(self.font)
+ self.textRect = fm.boundingRect(QtCore.QRectF(QtCore.QPointF(0, 0), maxSize), self.alignment, self.text)
+ self.baselineStart = QtCore.QPointF(self.textRect.left(), self.textRect.bottom() - fm.descent())
+
+ def animate(self):
+ updated = False
+
+ if "destroy" not in self.metadata:
+ if "fade" in self.metadata:
+ penColor = self.pen.color()
+ penAlpha = penColor.alpha()
+
+ penAlpha = max(int(self.metadata.get("fade minimum", "0")), min(penAlpha + self.metadata["fade"], 255))
+
+ penColor.setAlpha(penAlpha)
+ self.pen.setColor(penColor)
+
+ if penAlpha == 0:
+ self.metadata["destroy"] = True
+ del self.metadata["fade"]
+ elif penAlpha == 255:
+ del self.metadata["fade"]
+
+ updated = True
+
+ return (DisplayShape.animate(self) or updated)
+
+ def paint(self, painter):
+ rect = QtCore.QRectF(self.textRect)
+ rect.translate(self.pos)
+ painter.save()
+ painter.setRenderHint(QtGui.QPainter.TextAntialiasing)
+ painter.setPen(self.pen)
+ painter.setFont(self.font)
+ painter.drawText(self.pos + self.baselineStart, self.text)
+ painter.restore()
+
+ def rect(self):
+ rect = QtCore.QRectF(self.textRect)
+ return rect.translated(self.pos)
+
+
+class ImageShape(DisplayShape):
+ def __init__(self, original, position, maxSize, alpha=0, alignment=QtCore.Qt.AlignCenter):
+ DisplayShape.__init__(self, position, maxSize)
+
+ self.alpha = alpha
+ self.alignment = alignment
+
+ self.source = original.convertToFormat(QtGui.QImage.Format_ARGB32_Premultiplied)
+ scale = min(min(self.maxSize.width() / self.source.width(), self.maxSize.height() / self.source.height()), 1.0)
+
+ self.source = self.source.scaled(int(ceil(self.source.width() * scale)),
+ int(ceil(self.source.height() * scale)),
+ QtCore.Qt.KeepAspectRatio,
+ QtCore.Qt.SmoothTransformation)
+
+ self.image = QtGui.QImage(self.source.size(), QtGui.QImage.Format_ARGB32_Premultiplied)
+
+ self.offset = QtCore.QPointF(0.0, 0.0)
+
+ if self.alignment & QtCore.Qt.AlignHCenter:
+ self.offset.setX((self.maxSize.width() - self.image.width()) / 2)
+ elif self.alignment & QtCore.Qt.AlignRight:
+ self.offset.setX(self.maxSize.width() - self.image.width())
+
+ if alignment & QtCore.Qt.AlignVCenter:
+ self.offset.setY((self.maxSize.height() - self.image.height()) / 2)
+ elif self.alignment & QtCore.Qt.AlignBottom:
+ self.offset.setY(self.maxSize.height() - self.image.height())
+
+ self.redraw()
+
+ def redraw(self):
+ self.image.fill(QtGui.qRgba(self.alpha, self.alpha, self.alpha, self.alpha))
+
+ painter = QtGui.QPainter()
+ painter.begin(self.image)
+ painter.setCompositionMode(QtGui.QPainter.CompositionMode_SourceIn)
+ painter.drawImage(0, 0, self.source)
+ painter.end()
+
+ def paint(self, painter):
+ painter.drawImage(self.pos + self.offset, self.image)
+
+ def rect(self):
+ return QtCore.QRectF(self.pos, self.maxSize)
+
+ def animate(self):
+ updated = False
+
+ if "destroy" not in self.metadata:
+ if "fade" in self.metadata:
+ self.alpha = max(int(self.metadata.get("fade minimum", "0")), min(self.alpha + self.metadata["fade"], 255))
+ self.redraw()
+
+ if self.alpha == 0:
+ self.metadata["destroy"] = True
+ del self.metadata["fade"]
+ elif self.alpha == 255:
+ del self.metadata["fade"]
+
+ updated = True
+
+ return (DisplayShape.animate(self) or updated)
+
+
+class DocumentShape(DisplayShape):
+ def __init__(self, text, font, position, maxSize, alpha=0):
+ DisplayShape.__init__(self, position, maxSize)
+
+ self.alpha = alpha
+ self.textDocument = QtGui.QTextDocument()
+
+ self.textDocument.setHtml(text)
+ self.textDocument.setDefaultFont(font)
+ self.textDocument.setPageSize(maxSize)
+ documentSize = self.textDocument.documentLayout().documentSize()
+ self.setSize(QtCore.QSizeF(self.maxSize.width(), min(self.maxSize.height(), documentSize.height())))
+
+ self.source = QtGui.QImage(int(ceil(documentSize.width())),
+ int(ceil(documentSize.height())),
+ QtGui.QImage.Format_ARGB32_Premultiplied)
+ self.source.fill(QtGui.qRgba(255, 255, 255, 255))
+
+ context = QtGui.QAbstractTextDocumentLayout.PaintContext()
+ self.textDocument.documentLayout().setPaintDevice(self.source)
+
+ painter = QtGui.QPainter()
+ painter.begin(self.source)
+ painter.setRenderHint(QtGui.QPainter.TextAntialiasing)
+ painter.setRenderHint(QtGui.QPainter.Antialiasing)
+ self.textDocument.documentLayout().draw(painter, context)
+ painter.end()
+
+ self.source = self.source.scaled(int(ceil(self.maxSize.width())),
+ int(ceil(self.maxSize.height())),
+ QtCore.Qt.KeepAspectRatio,
+ QtCore.Qt.SmoothTransformation)
+
+ self.image = QtGui.QImage(self.source.size(), self.source.format())
+ self.redraw()
+
+ def animate(self):
+ updated = False
+
+ if "destroy" not in self.metadata:
+ if "fade" in self.metadata:
+ self.alpha = max(int(self.metadata.get("fade minimum", "0")), min(self.alpha + self.metadata["fade"], 255))
+ self.redraw()
+
+ if self.alpha == 0:
+ self.metadata["destroy"] = True
+ del self.metadata["fade"]
+ elif self.alpha == 255:
+ del self.metadata["fade"]
+
+ updated = True
+
+ return (DisplayShape.animate(self) or updated)
+
+ def redraw(self):
+ self.image.fill(QtGui.qRgba(self.alpha, self.alpha, self.alpha, self.alpha))
+
+ painter = QtGui.QPainter()
+ painter.begin(self.image)
+ painter.setCompositionMode(QtGui.QPainter.CompositionMode_SourceIn)
+ painter.drawImage(0, 0, self.source)
+ painter.end()
+
+ def paint(self, painter):
+ painter.drawImage(self.pos, self.image)
+
+ def rect(self):
+ return QtCore.QRectF(self.pos, self.maxSize)
diff --git a/examples/corelib/tools/qtdemo/displaywidget.py b/examples/corelib/tools/qtdemo/displaywidget.py
new file mode 100644
index 0000000..3f0527e
--- /dev/null
+++ b/examples/corelib/tools/qtdemo/displaywidget.py
@@ -0,0 +1,162 @@
+############################################################################
+##
+## Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
+##
+## This file is part of the example classes of the Qt Toolkit.
+##
+## This file may be used under the terms of the GNU General Public
+## License version 2.0 as published by the Free Software Foundation
+## and appearing in the file LICENSE.GPL included in the packaging of
+## this file. Please review the following information to ensure GNU
+## General Public Licensing requirements will be met:
+## http://www.trolltech.com/products/qt/opensource.html
+##
+## If you are unsure which license is appropriate for your use, please
+## review the following information:
+## http://www.trolltech.com/products/qt/licensing.html or contact the
+## sales department at sales@trolltech.com.
+##
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+############################################################################
+
+from PySide2 import QtCore, QtGui, QtNetwork, QtXml
+
+
+class DisplayWidget(QtGui.QWidget):
+ def __init__(self, parent=None):
+ QtGui.QWidget.__init__(self, parent)
+
+ self.empty = True
+ self.emptying = False
+ self.shapes = []
+ self.timer = QtCore.QBasicTimer()
+
+ self.enableUpdates()
+
+ self.setBackgroundRole(QtGui.QPalette.Base)
+ self.setMouseTracking(True)
+
+ def appendShape(self, shape):
+ self.shapes.append(shape)
+ self.empty = False
+ self.enableUpdates()
+
+ def insertShape(self, position, shape):
+ self.shapes.insert(position, shape)
+ self.empty = False
+ self.enableUpdates()
+
+ def minimumSizeHint(self):
+ return QtCore.QSize(800, 600)
+
+ def mouseMoveEvent(self, event):
+ if self.emptying:
+ return
+
+ updated = False
+
+ for shape in self.shapes:
+ if shape.rect().contains(QtCore.QPointF(event.pos())):
+ if shape.isInteractive() and "fade" not in shape.metadata and "highlight" not in shape.metadata:
+ shape.metadata["highlight"] = True
+ updated = True
+ elif shape.isInteractive() and "highlight" in shape.metadata and shape.metadata["highlight"]:
+ shape.metadata["highlight"] = False
+ updated = True
+
+ if updated:
+ self.enableUpdates()
+
+ def mousePressEvent(self, event):
+ if event.button() != QtCore.Qt.LeftButton:
+ return
+
+ if self.emptying:
+ return
+
+ for shape in self.shapes:
+ if shape.rect().contains(QtCore.QPointF(event.pos())) and "fade" not in shape.metadata:
+ if "action" in shape.metadata:
+ self.emit(QtCore.SIGNAL("actionRequested"), shape.metadata["action"])
+ elif "category" in shape.metadata:
+ self.emit(QtCore.SIGNAL("categoryRequested"), shape.metadata["category"])
+ elif "example" in shape.metadata:
+ self.emit(QtCore.SIGNAL("exampleRequested"), shape.metadata["example"])
+ elif "documentation" in shape.metadata:
+ self.emit(QtCore.SIGNAL("documentationRequested"), shape.metadata["documentation"])
+ shape.metadata["highlight"] = False
+ self.enableUpdates()
+ elif "launch" in shape.metadata:
+ self.emit(QtCore.SIGNAL("launchRequested"), shape.metadata["launch"])
+ shape.metadata["fade"] = -5
+ self.enableUpdates()
+
+ def paintEvent(self, event):
+ painter = QtGui.QPainter()
+ painter.begin(self)
+ painter.fillRect(event.rect(), QtCore.Qt.white)
+ for shape in self.shapes:
+ if shape.rect().intersects(QtCore.QRectF(event.rect())):
+ shape.paint(painter)
+ painter.end()
+
+ def reset(self):
+ if self.emptying:
+ return
+
+ if len(self.shapes) == 0:
+ self.empty = True
+ self.timer.stop()
+ self.emit(QtCore.SIGNAL("displayEmpty()"))
+ else:
+ self.enableUpdates()
+ self.emptying = True
+ self.empty = False
+ for shape in self.shapes:
+ shape.metadata["fade"] = -15
+ shape.metadata["fade minimum"] = 0
+
+ def shape(self, index):
+ return self.shapes[index]
+
+ def shapesCount(self):
+ return len(self.shapes)
+
+ def enableUpdates(self):
+ if not self.timer.isActive():
+ self.timer.start(50, self)
+
+ def timerEvent(self, event):
+ if event.timerId() == self.timer.timerId():
+ discard = []
+
+ updated = 0
+
+ for shape in self.shapes:
+ oldRect = shape.rect().toRect().adjusted(-1, -1, 1, 1)
+
+ if shape.animate():
+ self.update(oldRect)
+ newRect = shape.rect().toRect().adjusted(-1, -1, 1, 1)
+ updated += 1
+
+ if "destroy" in shape.metadata:
+ discard.append(shape)
+ else:
+ self.update(newRect)
+
+ if updated == 0:
+ self.timer.stop()
+
+ for shape in discard:
+ self.shapes.remove(shape)
+
+ if len(self.shapes) == 0 and not self.empty:
+ self.empty = True
+ self.emptying = False
+ self.timer.stop()
+ self.emit(QtCore.SIGNAL("displayEmpty()"))
+ else:
+ QtGui.QWidget.timerEvent(self, event)
diff --git a/examples/corelib/tools/qtdemo/examples.xml b/examples/corelib/tools/qtdemo/examples.xml
new file mode 100644
index 0000000..1933cea
--- /dev/null
+++ b/examples/corelib/tools/qtdemo/examples.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<categories>
+ <category dirname="designer" name="Qt Designer">
+ <example filename="calculatorbuilder" name="Calculator Builder" />
+ <example filename="calculatorform" name="Calculator Form" />
+ <example filename="containerextension" name="Container Extension" />
+ <example filename="plugins" name="Custom Widget Plugins" />
+ <example filename="taskmenuextension" name="Task Menu Extension" />
+ <example filename="worldtimeclockbuilder" name="World Time Clock Builder" />
+ <example filename="worldtimeclockplugin" name="World Time Clock Plugin" />
+ </category>
+ <category dirname="desktop" name="Desktop">
+ <example filename="systray" name="System Tray" />
+ </category>
+ <category dirname="dialogs" name="Dialogs">
+ <example filename="complexwizard" name="Complex Wizard" />
+ <example filename="configdialog" name="Configuration Dialog" />
+ <example filename="extension" name="Extension Dialog" />
+ <example filename="findfiles" name="Find Files Dialog" />
+ <example filename="simplewizard" name="Simple Wizard" />
+ <example filename="standarddialogs" name="Standard Dialogs" />
+ <example filename="tabdialog" name="Tab Dialog" />
+ </category>
+ <category dirname="draganddrop" name="Drag and Drop">
+ <example filename="draggableicons" name="Draggable Icons" />
+ <example filename="draggabletext" name="Draggable Text" />
+ <example filename="dropsite" name="Drop Site" />
+ <example filename="fridgemagnets" name="Fridge Magnets" />
+ <example filename="puzzle" name="Puzzle" />
+ </category>
+ <category dirname="graphicsview" name="Graphics View">
+ <example filename="elasticnodes" name="Elastic Nodes" />
+ <example filename="collidingmice" name="Colliding Mice" />
+ <example filename="diagramscene" name="Diagram Scene" />
+ <example filename="dragdroprobot" name="Drag and Drop Robot" />
+ <example filename="portedcanvas" name="Ported Canvas" />
+ <example filename="portedasteroids" name="Ported Asteroids" />
+ </category>
+ <category dirname="itemviews" name="Item Views">
+ <example filename="basicsortfiltermodel" name="Basic Sort/Filter Model" />
+ <example filename="chart" name="Chart" />
+ <example filename="dirview" name="Directory View" />
+ <example filename="pixelator" name="Pixelator" />
+ <example filename="puzzle" name="Puzzle" />
+ <example filename="simpledommodel" name="Simple DOM Model" />
+ <example filename="simpletreemodel" name="Simple Tree Model" />
+ <example filename="spinboxdelegate" name="Spin Box Delegate" />
+ </category>
+ <category dirname="layouts" name="Layouts">
+ <example filename="basiclayouts" name="Basic Layouts" />
+ <example filename="borderlayout" name="Border Layout" />
+ <example filename="flowlayout" name="Flow Layout" />
+ </category>
+ <category dirname="linguist" name="Qt Linguist">
+ <example filename="arrowpad" name="Arrow Pad" />
+ <example filename="hellotr" name="Hello World" />
+ <example filename="trollprint" name="Troll Print" />
+ </category>
+ <category dirname="mainwindows" name="Main Windows">
+ <example filename="application" name="Application" />
+ <example filename="dockwidgets" name="Dock Widgets" />
+ <example filename="mdi" name="Multiple Document Interface" />
+ <example filename="menus" name="Menus" />
+ <example filename="recentfiles" name="Recent Files" />
+ <example filename="sdi" name="Single Document Interface" />
+ </category>
+ <category dirname="network" name="Networking">
+ <example filename="blockingfortuneclient" name="Blocking Fortune Client" />
+ <example filename="broadcastreceiver" name="Broadcast Receiver" />
+ <example filename="broadcastsender" name="Broadcast Sender" />
+ <example filename="fortuneclient" name="Fortune Client" />
+ <example filename="fortuneserver" name="Fortune Server" />
+ <example filename="ftp" changedirectory="false" name="FTP Client" />
+ <example filename="http" changedirectory="false" name="HTTP Client" />
+ <example filename="loopback" name="Loopback" />
+ <example filename="threadedfortuneserver" name="Threaded Fortune Server" />
+ <example filename="torrent" name="Torrent Client" />
+ </category>
+ <category dirname="opengl" name="OpenGL">
+ <example filename="2dpainting" name="2D Painting" />
+ <example filename="grabber" name="Grabber" />
+ <example filename="hellogl" name="Hello GL" />
+ <example filename="overpainting" name="Overpainting" />
+ <example filename="pbuffers" name="Pixel Buffers" />
+ <example filename="samplebuffers" name="Sample Buffers" />
+ <example filename="textures" name="Textures" />
+ </category>
+ <category dirname="painting" name="Painting">
+ <example filename="basicdrawing" name="Basic Drawing" />
+ <example filename="concentriccircles" name="Concentric Circles" />
+ <example filename="painterpaths" name="Painter Paths" />
+ <example filename="transformations" name="Transformations" />
+ <example filename="svgviewer" name="SVG Viewer" />
+ </category>
+ <category dirname="richtext" name="Rich Text">
+ <example filename="calendar" name="Calendar" />
+ <example filename="orderform" name="Order Form" />
+ <example filename="syntaxhighlighter" name="Syntax Highlighter" />
+ </category>
+ <category dirname="sql" name="SQL">
+ <example filename="cachedtable" name="Cached Table" />
+ <example filename="querymodel" name="Query Model" />
+ <example filename="relationaltablemodel" name="Relational Table Model" />
+ <example filename="tablemodel" name="Table Model" />
+ </category>
+ <category dirname="threads" name="Threading">
+ <example filename="mandelbrot" name="Mandelbrot" />
+ <example filename="semaphores" name="Semaphores" executable="false" />
+ <example filename="waitconditions" name="Wait Conditions" executable="false" />
+ </category>
+ <category dirname="tools" name="Tools">
+ <example filename="codecs" name="Codecs" />
+ <example filename="i18n" name="Internationalization" />
+ <example filename="plugandpaint" name="Plug and Paint" />
+ <example filename="qtdemo" name="Qt Demo" executable="false" />
+ <example filename="regexp" name="Regular Expressions" />
+ <example filename="settingseditor" name="Settings Editor" />
+ </category>
+ <category dirname="widgets" name="Widgets">
+ <example filename="analogclock" name="Analog Clock" />
+ <example filename="calculator" name="Calculator" />
+ <example filename="charactermap" name="Character Map" />
+ <example filename="digitalclock" name="Digital Clock" />
+ <example filename="groupbox" name="Group Box" />
+ <example filename="icons" name="Icons" />
+ <example filename="imageviewer" name="Image Viewer" />
+ <example filename="lineedits" name="Line Edits" />
+ <example filename="movie" name="Movie Player" />
+ <example filename="screenshot" name="Screenshot" />
+ <example filename="scribble" name="Scribble" />
+ <example filename="shapedclock" name="Shaped Clock" />
+ <example filename="sliders" name="Sliders" />
+ <example filename="spinboxes" name="Spin Boxes" />
+ <example filename="styles" name="Styles" />
+ <example filename="tetrix" name="Tetrix" />
+ <example filename="tooltips" name="Tool Tips" />
+ <example filename="wiggly" name="Wiggly" />
+ <example filename="windowflags" name="Window Flags" />
+ </category>
+ <category dirname="xml" name="XML">
+ <example filename="saxbookmarks" name="SAX Bookmarks" />
+ <example filename="dombookmarks" name="DOM Bookmarks" />
+ </category>
+</categories>
diff --git a/examples/corelib/tools/qtdemo/images/qt4-logo.png b/examples/corelib/tools/qtdemo/images/qt4-logo.png
new file mode 100644
index 0000000..585a19d
--- /dev/null
+++ b/examples/corelib/tools/qtdemo/images/qt4-logo.png
Binary files differ
diff --git a/examples/corelib/tools/qtdemo/images/rb-logo.png b/examples/corelib/tools/qtdemo/images/rb-logo.png
new file mode 100644
index 0000000..2b23fe4
--- /dev/null
+++ b/examples/corelib/tools/qtdemo/images/rb-logo.png
Binary files differ
diff --git a/examples/corelib/tools/qtdemo/launcher.py b/examples/corelib/tools/qtdemo/launcher.py
new file mode 100644
index 0000000..65ffb91
--- /dev/null
+++ b/examples/corelib/tools/qtdemo/launcher.py
@@ -0,0 +1,1008 @@
+#!/usr/bin/env python
+############################################################################
+##
+## Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
+##
+## This file is part of the example classes of the Qt Toolkit.
+##
+## This file may be used under the terms of the GNU General Public
+## License version 2.0 as published by the Free Software Foundation
+## and appearing in the file LICENSE.GPL included in the packaging of
+## this file. Please review the following information to ensure GNU
+## General Public Licensing requirements will be met:
+## http://www.trolltech.com/products/qt/opensource.html
+##
+## If you are unsure which license is appropriate for your use, please
+## review the following information:
+## http://www.trolltech.com/products/qt/licensing.html or contact the
+## sales department at sales@trolltech.com.
+##
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+############################################################################
+
+import sys
+import re
+
+from PySide2 import QtCore, QtGui, QtHelp, QtNetwork, QtXml
+
+from displaywidget import DisplayWidget
+from displayshape import TitleShape, DisplayShape, PanelShape, ImageShape, DocumentShape
+
+class Launcher(QtGui.QMainWindow):
+ def __init__(self, parent = None):
+ QtGui.QMainWindow.__init__(self, parent)
+
+ self.categories = {}
+ self.runningProcesses = {}
+ self.examples = {}
+ self.runningExamples = []
+ self.titleFont = QtGui.QFont(self.font())
+ self.titleFont.setWeight(QtGui.QFont.Bold)
+ self.fontRatio = 0.8
+ self.documentFont = self.font()
+ self.inFullScreenResize = False
+ self.currentCategory = "[starting]"
+ self.qtLogo = QtGui.QImage()
+ self.rbLogo = QtGui.QImage()
+ self.currentExample = ""
+ self.assistantProcess = QtCore.QProcess()
+
+ parentPageAction1 = QtGui.QAction(self.tr("Show Parent Page"), self)
+ parentPageAction2 = QtGui.QAction(self.tr("Show Parent Page"), self)
+ parentPageAction3 = QtGui.QAction(self.tr("Show Parent Page"), self)
+ parentPageAction1.setShortcut(QtGui.QKeySequence(self.tr("Escape")))
+ parentPageAction2.setShortcut(QtGui.QKeySequence(self.tr("Backspace")))
+ parentPageAction3.setShortcut(QtGui.QKeySequence(self.tr("Alt+Left")))
+
+ fullScreenAction = QtGui.QAction(self.tr("Toggle &Full Screen"), self)
+ fullScreenAction.setShortcut(QtGui.QKeySequence(self.tr("Ctrl+F")))
+
+ exitAction = QtGui.QAction(self.tr("E&xit"), self)
+ exitAction.setShortcut(QtGui.QKeySequence(self.tr("Ctrl+Q")))
+
+ self.connect(parentPageAction1, QtCore.SIGNAL("triggered()"), self, QtCore.SIGNAL("showPage()"))
+ self.connect(parentPageAction2, QtCore.SIGNAL("triggered()"), self, QtCore.SIGNAL("showPage()"))
+ self.connect(parentPageAction3, QtCore.SIGNAL("triggered()"), self, QtCore.SIGNAL("showPage()"))
+ self.connect(fullScreenAction, QtCore.SIGNAL("triggered()"), self.toggleFullScreen)
+ self.connect(exitAction, QtCore.SIGNAL("triggered()"), self.close)
+
+ self.display = DisplayWidget()
+
+ self.addAction(parentPageAction1)
+ self.addAction(parentPageAction2)
+ self.addAction(parentPageAction3)
+ self.addAction(fullScreenAction)
+ self.addAction(exitAction)
+
+ self.slideshowTimer = QtCore.QTimer(self)
+ self.slideshowTimer.setInterval(5000)
+ self.resizeTimer = QtCore.QTimer(self)
+ self.resizeTimer.setSingleShot(True)
+ self.connect(self.resizeTimer, QtCore.SIGNAL("timeout()"), self.redisplayWindow)
+
+ self.connect(self.display, QtCore.SIGNAL("actionRequested"),
+ self.executeAction)
+ self.connect(self.display, QtCore.SIGNAL("categoryRequested"),
+ self.showExamples)
+ self.connect(self.display, QtCore.SIGNAL("documentationRequested"),
+ self.showExampleDocumentation)
+ self.connect(self.display, QtCore.SIGNAL("exampleRequested"),
+ self.showExampleSummary)
+
+ self.connect(self.display, QtCore.SIGNAL("launchRequested"),
+ self.launchExample)
+
+ self.connect(self, QtCore.SIGNAL("showPage()"), self.showParentPage,
+ QtCore.Qt.QueuedConnection)
+ self.connect(self, QtCore.SIGNAL("windowResized()"), self.redisplayWindow,
+ QtCore.Qt.QueuedConnection)
+
+ self.setCentralWidget(self.display)
+ self.setMaximumSize(QtGui.QApplication.desktop().screenGeometry().size())
+ self.setWindowTitle(self.tr("PyQt Examples and Demos"))
+ self.setWindowIcon(QtGui.QIcon(QtGui.QPixmap(":/images/qt4-logo.png")))
+
+ def initHelpEngine(self):
+ self.helpRootUrl = QtCore.QString("qthelp://com.trolltech.qt.%d%d%d/qdoc/" % (QtCore.QT_VERSION >> 16, ((QtCore.QT_VERSION >> 8) & 0xff), (QtCore.QT_VERSION & 0xff)))
+
+ # Store help collection file in cache dir of assistant.
+ cacheDir = QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.DataLocation) + "/Trolltech/Assistant"
+ helpDataFile = "qtdemo_%s.qhc" % QtCore.QT_VERSION_STR
+
+ dir = QtCore.QDir()
+ if not dir.exists(cacheDir):
+ dir.mkpath(cacheDir)
+
+ # Create the help engine (and a new helpDataFile if it does not exist).
+ self.helpEngine = QtHelp.QHelpEngineCore(cacheDir + helpDataFile)
+ self.helpEngine.setupData()
+
+ qtDocRoot = QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.DocumentationPath) + "/qch"
+ qtDocRoot = QtCore.QDir(qtDocRoot).absolutePath()
+
+ qchFiles = ["/qt.qch", "/designer.qch", "/linguist.qch"]
+
+ oldDir = self.helpEngine.customValue("docDir", QtCore.QVariant(QtCore.QString())).toString()
+ if oldDir != qtDocRoot:
+ for qchFile in qchFiles:
+ self.helpEngine.unregisterDocumentation(QtHelp.QHelpEngineCore.namespaceName(qtDocRoot + qchFile))
+
+ # If the data that the engine will work on is not yet registered, do it
+ # now.
+ for qchFile in qchFiles:
+ self.helpEngine.registerDocumentation(qtDocRoot + qchFile)
+
+ self.helpEngine.setCustomValue("docDir", QtCore.QVariant(qtDocRoot))
+
+ def setup(self):
+ self.initHelpEngine()
+
+ self.documentationDir = QtCore.QDir(
+ QtCore.QLibraryInfo.location(
+ QtCore.QLibraryInfo.DocumentationPath))
+
+ self.imagesDir = QtCore.QDir(self.documentationDir)
+
+ if self.documentationDir.cd("html") and self.documentationDir.cd("images"):
+ self.imagesDir.setPath(self.documentationDir.path())
+ self.documentationDir.cdUp()
+ else:
+ QtGui.QMessageBox.warning(self, self.tr("No Documentation Found"),
+ self.tr("I could not find the Qt documentation."))
+
+ self.maximumLabels = 0
+
+ self.demosDir = QtCore.QDir("./../../demos")
+ demoCategories = self.readInfo(":/demos.xml", self.demosDir)
+
+ self.examplesDir = QtCore.QDir("./../../")
+ exampleCategories = self.readInfo(":/examples.xml", self.examplesDir)
+
+ if demoCategories + exampleCategories <= 0:
+ QtGui.QMessageBox.warning(self, self.tr("No Examples or Demos found"),
+ self.tr("I could not find any PyQt examples or demos.\n"\
+ "Please ensure that PyQt is installed correctly."),
+ QtGui.QMessageBox.Cancel, QtGui.QMessageBox.NoButton)
+ return False
+
+ self.maximumLabels = max(demoCategories + exampleCategories, self.maximumLabels)
+
+ for category in self.categories:
+ self.maximumLabels = max(len(self.categories[category]['examples']) + 1, self.maximumLabels)
+
+ mainDescription = self.categories['[main]']['description']
+ if len(mainDescription) > 0:
+ mainDescription += self.tr("\n")
+
+ self.categories['[main]']['description'] = mainDescription + self.tr(
+ "<p>Press <b>Escape</b>, <b>Backspace</b>, or <b>%1</b> to "
+ "return to a previous menu.</p>"
+ "<p>Press <b>%2</b> to switch between normal and full screen "
+ "modes.</p>"
+ "<p>Use <b>%3</b> to exit the launcher.</p>") \
+ .arg(QtCore.QString(QtGui.QKeySequence(self.tr("Alt+Left")))) \
+ .arg(QtCore.QString(QtGui.QKeySequence(self.tr("Ctrl+F")))) \
+ .arg(QtCore.QString(QtGui.QKeySequence(self.tr("Ctrl+Q"))))
+
+ self.emit(QtCore.SIGNAL("showPage()"))
+ return True
+
+ def enableLaunching(self):
+ process = self.sender()
+ example = self.runningProcesses[process]
+ del self.runningProcesses[process]
+ process.deleteLater()
+ self.runningExamples.remove(example)
+
+ if example == self.currentExample:
+ for i in range(0, self.display.shapesCount()):
+ shape = self.display.shape(i)
+ if shape.metadata.get("launch", "") == example:
+ shape.metadata["fade"] = 15
+ self.display.enableUpdates()
+
+ self.slideshowTimer.start()
+
+ def executeAction(self, action):
+ if action == "parent":
+ self.showParentPage()
+ elif action == "exit":
+ if len(self.runningExamples) == 0:
+ self.connect(self.display, QtCore.SIGNAL("displayEmpty()"), self.close)
+ self.display.reset()
+ else:
+ self.close()
+
+ def launchExample(self, uniquename):
+ if uniquename in self.runningExamples:
+ return
+
+ process = QtCore.QProcess(self)
+ self.connect(process, QtCore.SIGNAL("finished(int)"), self.enableLaunching)
+
+ self.runningExamples.append(uniquename)
+ self.runningProcesses[process] = uniquename
+
+ if self.examples[uniquename]['changedirectory'] == 'true':
+ process.setWorkingDirectory(self.examples[uniquename]['absolute path'])
+
+ process.start(sys.executable, [self.examples[uniquename]['path']])
+
+ if process.state() == QtCore.QProcess.Starting:
+ self.slideshowTimer.stop()
+
+ def showCategories(self):
+ self.newPage()
+ self.fadeShapes()
+ self.currentCategory = ""
+ self.currentExample = ""
+
+ # Sort the category names excluding any "Qt" prefix.
+ def csort(c1, c2):
+ if c1.startsWith("Qt "):
+ c1 = c1[3:]
+
+ if c2.startsWith("Qt "):
+ c2 = c2[3:]
+
+ return cmp(c1, c2)
+
+ categories = [c for c in self.categories.keys() if c != "[main]"]
+ categories.sort(csort)
+
+ horizontalMargin = 0.025*self.width()
+ verticalMargin = 0.025*self.height()
+ title = TitleShape(self.tr("PyQt Examples and Demos"),
+ self.titleFont, QtGui.QPen(QtGui.QColor("#a6ce39")), QtCore.QPointF(),
+ QtCore.QSizeF(0.5*self.width(), 4*verticalMargin))
+
+ title.setPosition(QtCore.QPointF(self.width() / 2 - title.rect().width() / 2,
+ -title.rect().height()))
+ title.setTarget(QtCore.QPointF(title.position().x(), verticalMargin))
+
+ self.display.appendShape(title)
+
+ topMargin = 6*verticalMargin
+ bottomMargin = self.height() - 3.2*verticalMargin
+ space = bottomMargin - topMargin
+ step = min(title.rect().height() / self.fontRatio, space/self.maximumLabels )
+ textHeight = self.fontRatio * step
+
+ startPosition = QtCore.QPointF(0.0, topMargin)
+ maxSize = QtCore.QSizeF(10.8*horizontalMargin, textHeight)
+ maxWidth = 0.0
+
+ newShapes = []
+
+ for category in categories:
+ caption = TitleShape(category, self.font(), QtGui.QPen(), QtCore.QPointF(startPosition), QtCore.QSizeF(maxSize))
+ caption.setPosition(QtCore.QPointF(-caption.rect().width(),
+ caption.position().y()))
+ caption.setTarget(QtCore.QPointF(2*horizontalMargin, caption.position().y()))
+
+ newShapes.append(caption)
+ startPosition += QtCore.QPointF(0.0, step)
+ maxWidth = max(maxWidth, caption.rect().width() )
+
+ exitButton = TitleShape(self.tr("Exit"), self.font(), QtGui.QPen(QtCore.Qt.white),
+ QtCore.QPointF(startPosition), QtCore.QSizeF(maxSize))
+ exitButton.setTarget(QtCore.QPointF(2*horizontalMargin, exitButton.position().y()))
+ newShapes.append(exitButton)
+
+ startPosition = QtCore.QPointF(self.width(), topMargin )
+
+ extra = (step - textHeight)/4
+
+ backgroundPath = QtGui.QPainterPath()
+ backgroundPath.addRect(-2*extra, -extra, maxWidth + 4*extra, textHeight + 2*extra)
+
+ for category in categories:
+ background = PanelShape(backgroundPath,
+ QtGui.QBrush(self.categories[category]['color']), QtGui.QBrush(QtGui.QColor("#e0e0ff")),
+ QtGui.QPen(QtCore.Qt.NoPen), QtCore.QPointF(startPosition),
+ QtCore.QSizeF(maxWidth + 4*extra, textHeight + 2*extra))
+
+ background.metadata["category"] = category
+ background.setInteractive(True)
+ background.setTarget(QtCore.QPointF(2*horizontalMargin,
+ background.position().y()))
+ self.display.insertShape(0, background)
+ startPosition += QtCore.QPointF(0.0, step)
+
+ exitPath = QtGui.QPainterPath()
+ exitPath.moveTo(-2*extra, -extra)
+ exitPath.lineTo(-8*extra, textHeight/2)
+ exitPath.lineTo(-extra, textHeight + extra)
+ exitPath.lineTo(maxWidth + 2*extra, textHeight + extra)
+ exitPath.lineTo(maxWidth + 2*extra, -extra)
+ exitPath.closeSubpath()
+
+ exitBackground = PanelShape(exitPath,
+ QtGui.QBrush(QtGui.QColor("#a6ce39")), QtGui.QBrush(QtGui.QColor("#c7f745")),
+ QtGui.QPen(QtCore.Qt.NoPen), QtCore.QPointF(startPosition),
+ QtCore.QSizeF(maxWidth + 10*extra, textHeight + 2*extra))
+
+ exitBackground.metadata["action"] = "exit"
+ exitBackground.setInteractive(True)
+ exitBackground.setTarget(QtCore.QPointF(2*horizontalMargin,
+ exitBackground.position().y()))
+ self.display.insertShape(0, exitBackground)
+
+ for caption in newShapes:
+ position = caption.target()
+ size = caption.rect().size()
+ caption.setPosition(QtCore.QPointF(-maxWidth, position.y()))
+ self.display.appendShape(caption)
+
+ leftMargin = 3*horizontalMargin + maxWidth
+ rightMargin = self.width() - 3*horizontalMargin
+
+ description = DocumentShape(self.categories['[main]']['description'],
+ self.documentFont, QtCore.QPointF(leftMargin, topMargin),
+ QtCore.QSizeF(rightMargin - leftMargin, space))
+
+ description.metadata["fade"] = 10
+ self.display.appendShape(description)
+
+ imageHeight = title.rect().height() + verticalMargin
+
+ qtLength = min(imageHeight, title.rect().left()-3*horizontalMargin)
+ qtMaxSize = QtCore.QSizeF(qtLength, qtLength)
+
+ qtShape = ImageShape(self.qtLogo,
+ QtCore.QPointF(2*horizontalMargin-extra, -imageHeight), qtMaxSize, 0,
+ QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
+
+ qtShape.metadata["fade"] = 15
+ qtShape.setTarget(QtCore.QPointF(qtShape.rect().x(), verticalMargin))
+ self.display.insertShape(0, qtShape)
+
+ trolltechMaxSize = QtCore.QSizeF(
+ self.width()-3*horizontalMargin-title.rect().right(), imageHeight)
+
+ trolltechShape = ImageShape(self.rbLogo,
+ QtCore.QPointF(self.width()-2*horizontalMargin-trolltechMaxSize.width()+extra,
+ -imageHeight),
+ trolltechMaxSize, 0, QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
+
+ trolltechShape.metadata["fade"] = 15
+ trolltechShape.setTarget(QtCore.QPointF(trolltechShape.rect().x(),
+ verticalMargin))
+
+ self.display.insertShape(0, trolltechShape)
+
+ self.addVersionAndCopyright(QtCore.QRectF(2*horizontalMargin,
+ self.height() - verticalMargin - textHeight,
+ self.width() - 4*horizontalMargin, textHeight))
+
+ def showExampleDocumentation(self, uniqueName):
+ self.disconnect(self.display, QtCore.SIGNAL("displayEmpty()"), self.resizeWindow)
+ self.disconnect(self.display, QtCore.SIGNAL("displayEmpty()"), self.close)
+ self.currentExample = uniqueName
+
+ url = self.helpRootUrl + self.examples[uniqueName]["document path"]
+
+ # Start assistant if it isn't already running.
+ if self.assistantProcess.state() != QtCore.QProcess.Running:
+ app = QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.BinariesPath) + QtCore.QDir.separator()
+ if sys.platform == 'darwin':
+ app += "Assistant.app/Contents/MacOS/Assistant"
+ else:
+ app += "assistant"
+
+ self.assistantProcess.start(app, ["-enableRemoteControl"])
+
+ if not self.assistantProcess.waitForStarted():
+ QtGui.QMessageBox.critical(None, "Qt Demo", "Could not start Qt Assistant.")
+ return
+
+ # Send command through remote control even if the process was started
+ # to activate assistant and bring it to front.
+ str = QtCore.QTextStream(self.assistantProcess)
+ str << "SetSource " << url << '\n'
+
+ def showExamples(self, category):
+ self.newPage()
+ self.fadeShapes()
+ self.currentCategory = category
+ self.currentExample = ""
+
+ horizontalMargin = 0.025*self.width()
+ verticalMargin = 0.025*self.height()
+
+ title = self.addTitle(category, verticalMargin)
+ self.addTitleBackground(title)
+
+ topMargin = 6*verticalMargin
+ bottomMargin = self.height() - 3.2*verticalMargin
+ space = bottomMargin - topMargin
+ step = min(title.rect().height() / self.fontRatio, space/self.maximumLabels )
+ textHeight = self.fontRatio * step
+
+ startPosition = QtCore.QPointF(2*horizontalMargin, self.height()+topMargin)
+ finishPosition = QtCore.QPointF(2*horizontalMargin, topMargin)
+ maxSize = QtCore.QSizeF(32*horizontalMargin, textHeight)
+ maxWidth = 0.0
+
+ for example in self.categories[self.currentCategory]['examples']:
+ caption = TitleShape(example, self.font(), QtGui.QPen(), QtCore.QPointF(startPosition), QtCore.QSizeF(maxSize))
+ caption.setTarget(QtCore.QPointF(finishPosition))
+
+ self.display.appendShape(caption)
+
+ startPosition += QtCore.QPointF(0.0, step)
+
+ finishPosition += QtCore.QPointF(0.0, step)
+ maxWidth = max(maxWidth, caption.rect().width() )
+
+ menuButton = TitleShape(self.tr("Main Menu"), self.font(),
+ QtGui.QPen(QtCore.Qt.white),
+ QtCore.QPointF(startPosition),
+ QtCore.QSizeF(maxSize))
+ menuButton.setTarget(QtCore.QPointF(finishPosition))
+ self.display.appendShape(menuButton)
+
+ startPosition = QtCore.QPointF(self.width(), topMargin )
+ extra = (step - textHeight)/4
+
+ for example in self.categories[self.currentCategory]['examples']:
+ uniquename = self.currentCategory + "-" + example
+
+ path = QtGui.QPainterPath()
+
+ path.addRect(-2*extra, -extra, maxWidth + 4*extra, textHeight+2*extra)
+
+ background = PanelShape(path,
+ QtGui.QBrush(self.examples[uniquename]['color']),
+ QtGui.QBrush(QtGui.QColor("#e0e0ff")),
+ QtGui.QPen(QtCore.Qt.NoPen), QtCore.QPointF(startPosition),
+ QtCore.QSizeF(maxWidth + 4*extra, textHeight + 2*extra))
+
+ background.metadata["example"] = uniquename
+ background.setInteractive(True)
+ background.setTarget(QtCore.QPointF(2*horizontalMargin,
+ background.position().y()))
+ self.display.insertShape(0, background)
+ startPosition += QtCore.QPointF(0.0, step)
+
+ backPath = QtGui.QPainterPath()
+ backPath.moveTo(-2*extra, -extra)
+ backPath.lineTo(-8*extra, textHeight/2)
+ backPath.lineTo(-extra, textHeight + extra)
+ backPath.lineTo(maxWidth + 2*extra, textHeight + extra)
+ backPath.lineTo(maxWidth + 2*extra, -extra)
+ backPath.closeSubpath()
+
+ buttonBackground = PanelShape(backPath,
+ QtGui.QBrush(QtGui.QColor("#a6ce39")), QtGui.QBrush(QtGui.QColor("#c7f745")),
+ QtGui.QPen(QtCore.Qt.NoPen), QtCore.QPointF(startPosition),
+ QtCore.QSizeF(maxWidth + 10*extra, textHeight + 2*extra))
+
+ buttonBackground.metadata["action"] = "parent"
+ buttonBackground.setInteractive(True)
+ buttonBackground.setTarget(QtCore.QPointF(2*horizontalMargin,
+ buttonBackground.position().y()))
+ self.display.insertShape(0, buttonBackground)
+
+ leftMargin = 3*horizontalMargin + maxWidth
+ rightMargin = self.width() - 3*horizontalMargin
+
+ description = DocumentShape(self.categories[self.currentCategory]['description'],
+ self.documentFont, QtCore.QPointF(leftMargin, topMargin),
+ QtCore.QSizeF(rightMargin - leftMargin, space), 0)
+
+ description.metadata["fade"] = 10
+ self.display.appendShape(description)
+
+ self.addVersionAndCopyright(QtCore.QRectF(2*horizontalMargin,
+ self.height() - verticalMargin - textHeight,
+ self.width() - 4*horizontalMargin, textHeight))
+
+ def showExampleSummary(self, uniquename):
+ self.newPage()
+ self.fadeShapes()
+ self.currentExample = uniquename
+
+ horizontalMargin = 0.025*self.width()
+ verticalMargin = 0.025*self.height()
+
+ title = self.addTitle(self.examples[uniquename]['name'], verticalMargin)
+ titleBackground = self.addTitleBackground(title)
+
+ topMargin = 2*verticalMargin + titleBackground.rect().bottom()
+ bottomMargin = self.height() - 8*verticalMargin
+ space = bottomMargin - topMargin
+ step = min(title.rect().height() / self.fontRatio,
+ ( bottomMargin + 4.8*verticalMargin - topMargin )/self.maximumLabels )
+ footerTextHeight = self.fontRatio * step
+
+ leftMargin = 3*horizontalMargin
+ rightMargin = self.width() - 3*horizontalMargin
+
+ if self.examples[self.currentExample].has_key('description'):
+ description = DocumentShape( self.examples[self.currentExample]['description'],
+ self.documentFont, QtCore.QPointF(leftMargin, topMargin),
+ QtCore.QSizeF(rightMargin-leftMargin, space), 0 )
+ description.metadata["fade"] = 10
+
+ description.setPosition(QtCore.QPointF(description.position().x(),
+ 0.8*self.height()-description.rect().height()))
+
+ self.display.appendShape(description)
+ space = description.position().y() - topMargin - 2*verticalMargin
+
+ if self.examples[self.currentExample].has_key('image files'):
+ image = QtGui.QImage(self.examples[self.currentExample]['image files'][0])
+ imageMaxSize = QtCore.QSizeF(self.width() - 8*horizontalMargin, space)
+
+ self.currentFrame = ImageShape( image,
+ QtCore.QPointF(self.width()-imageMaxSize.width()/2, topMargin),
+ QtCore.QSizeF(imageMaxSize ))
+
+ self.currentFrame.metadata["fade"] = 15
+ self.currentFrame.setTarget(QtCore.QPointF(self.width()/2-imageMaxSize.width()/2,
+ topMargin))
+ self.display.appendShape(self.currentFrame)
+
+ if len(self.examples[self.currentExample]['image files']) > 1:
+ self.connect(self.slideshowTimer, QtCore.SIGNAL("timeout()"),
+ self.updateExampleSummary)
+ self.slideshowFrame = 0
+ self.slideshowTimer.start()
+
+ maxSize = QtCore.QSizeF(0.3*self.width(),2*verticalMargin)
+ leftMargin = 0.0
+ rightMargin = 0.0
+
+ backButton = TitleShape(self.currentCategory, self.font(),
+ QtGui.QPen(QtCore.Qt.white), QtCore.QPointF(0.1*self.width(), self.height()), QtCore.QSizeF(maxSize),
+ QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
+ backButton.setTarget(QtCore.QPointF(backButton.position().x(),
+ self.height() - 5.2*verticalMargin))
+
+ self.display.appendShape(backButton)
+
+ maxWidth = backButton.rect().width()
+ textHeight = backButton.rect().height()
+ extra = (3*verticalMargin - textHeight)/4
+
+ path = QtGui.QPainterPath()
+ path.moveTo(-extra, -extra)
+ path.lineTo(-4*extra, textHeight/2)
+ path.lineTo(-extra, textHeight + extra)
+ path.lineTo(maxWidth + 2*extra, textHeight + extra)
+ path.lineTo(maxWidth + 2*extra, -extra)
+ path.closeSubpath()
+
+ buttonBackground = PanelShape(path,
+ QtGui.QBrush(QtGui.QColor("#a6ce39")), QtGui.QBrush(QtGui.QColor("#c7f745")), QtGui.QPen(QtCore.Qt.NoPen),
+ QtCore.QPointF(backButton.position()),
+ QtCore.QSizeF(maxWidth + 6*extra, textHeight + 2*extra))
+
+ buttonBackground.metadata["category"] = self.currentCategory
+ buttonBackground.setInteractive(True)
+ buttonBackground.setTarget(QtCore.QPointF(backButton.target()))
+
+ self.display.insertShape(0, buttonBackground)
+
+ leftMargin = buttonBackground.rect().right()
+
+ if self.examples[self.currentExample].has_key('absolute path'):
+ launchCaption = TitleShape(self.tr("Launch"),
+ self.font(), QtGui.QPen(QtCore.Qt.white), QtCore.QPointF(0.0, 0.0), QtCore.QSizeF(maxSize),
+ QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
+ launchCaption.setPosition(QtCore.QPointF(
+ 0.9*self.width() - launchCaption.rect().width(), self.height()))
+ launchCaption.setTarget(QtCore.QPointF(launchCaption.position().x(),
+ self.height() - 5.2*verticalMargin))
+
+ self.display.appendShape(launchCaption)
+
+ maxWidth = launchCaption.rect().width()
+ textHeight = launchCaption.rect().height()
+ extra = (3*verticalMargin - textHeight)/4
+
+ path = QtGui.QPainterPath()
+ path.addRect(-2*extra, -extra, maxWidth + 4*extra, textHeight + 2*extra)
+
+ backgroundColor = QtGui.QColor("#a63e39")
+ highlightedColor = QtGui.QColor("#f95e56")
+
+ background = PanelShape(path,
+ QtGui.QBrush(backgroundColor), QtGui.QBrush(highlightedColor), QtGui.QPen(QtCore.Qt.NoPen),
+ QtCore.QPointF(launchCaption.position()),
+ QtCore.QSizeF(maxWidth + 4*extra, textHeight + 2*extra))
+
+ background.metadata["fade minimum"] = 120
+ background.metadata["launch"] = self.currentExample
+ background.setInteractive(True)
+ background.setTarget(QtCore.QPointF(launchCaption.target()))
+
+ if self.currentExample in self.runningExamples:
+ background.metadata["highlight"] = True
+ background.metadata["highlight scale"] = 0.99
+ background.animate()
+ background.metadata["fade"] = -135
+ self.slideshowTimer.stop()
+ self.display.insertShape(0, background)
+
+ rightMargin = background.rect().left()
+
+ if self.examples[self.currentExample]['document path']:
+
+ documentCaption = TitleShape(self.tr("Show Documentation"),
+ self.font(), QtGui.QPen(QtCore.Qt.white), QtCore.QPointF(0.0, 0.0), QtCore.QSizeF(maxSize),
+ QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
+
+ if rightMargin == 0.0:
+ documentCaption.setPosition(QtCore.QPointF(
+ 0.9*self.width() - documentCaption.rect().width(), self.height()))
+ else:
+ documentCaption.setPosition(QtCore.QPointF(
+ leftMargin/2 + rightMargin/2 - documentCaption.rect().width()/2,
+ self.height()))
+
+ documentCaption.setTarget(QtCore.QPointF(documentCaption.position().x(),
+ self.height() - 5.2*verticalMargin))
+
+ self.display.appendShape(documentCaption)
+
+ maxWidth = documentCaption.rect().width()
+ textHeight = documentCaption.rect().height()
+ extra = (3*verticalMargin - textHeight)/4
+
+ path = QtGui.QPainterPath()
+ path.addRect(-2*extra, -extra, maxWidth + 4*extra, textHeight + 2*extra)
+
+ background = PanelShape(path,
+ QtGui.QBrush(QtGui.QColor("#9c9cff")), QtGui.QBrush(QtGui.QColor("#cfcfff")), QtGui.QPen(QtCore.Qt.NoPen),
+ QtCore.QPointF(documentCaption.position()),
+ QtCore.QSizeF(maxWidth + 4*extra, textHeight + 2*extra))
+
+ background.metadata["fade minimum"] = 120
+ background.metadata["documentation"] = self.currentExample
+ background.setInteractive(True)
+ background.setTarget(QtCore.QPointF(documentCaption.target()))
+
+ self.display.insertShape(0, background)
+
+ self.addVersionAndCopyright(QtCore.QRectF(2*horizontalMargin,
+ self.height() - verticalMargin - footerTextHeight,
+ self.width() - 4*horizontalMargin, footerTextHeight))
+
+ def showParentPage(self):
+ self.slideshowTimer.stop()
+ self.disconnect(self.slideshowTimer, QtCore.SIGNAL("timeout()"), self.updateExampleSummary)
+
+ if len(self.currentExample) > 0:
+ self.currentExample = ""
+ self.redisplayWindow()
+ elif len(self.currentCategory) > 0:
+ self.currentCategory = ""
+ self.redisplayWindow()
+
+ def updateExampleSummary(self):
+ if self.examples[self.currentExample].has_key('image files'):
+ self.currentFrame.metadata["fade"] = -15
+ self.currentFrame.setTarget(QtCore.QPointF((self.currentFrame.position() -
+ QtCore.QPointF(0.5*self.width(), 0))))
+ self.slideshowFrame = (self.slideshowFrame+1) % len(self.examples[self.currentExample]['image files'])
+ image = QtGui.QImage(self.examples[self.currentExample]['image files'][self.slideshowFrame])
+
+ imageSize = self.currentFrame.maxSize
+ imagePosition = QtCore.QPointF(self.width() - imageSize.width()/2,
+ self.currentFrame.position().y())
+
+ self.currentFrame = ImageShape(image, QtCore.QPointF(imagePosition), QtCore.QSizeF(imageSize))
+ self.currentFrame.metadata["fade"] = 15
+ self.currentFrame.setTarget(QtCore.QPointF(self.width()/2-imageSize.width()/2,
+ imagePosition.y()))
+
+ self.display.appendShape(self.currentFrame)
+
+ def closeEvent(self, event):
+ if len(self.runningExamples) > 0:
+ if QtGui.QMessageBox.warning(self, self.tr("Examples Running"),
+ self.tr("There are examples running. Do you really want to exit?"),
+ QtGui.QMessageBox.Yes, QtGui.QMessageBox.No ) == QtGui.QMessageBox.No:
+ event.ignore()
+ return
+
+ for example in self.runningProcesses.keys():
+ example.terminate()
+ example.waitForFinished(1000)
+
+ self.runningProcesses.clear()
+ self.resizeTimer.stop()
+ self.slideshowTimer.stop()
+
+ def resizeEvent(self, event):
+ self.documentFont = QtGui.QFont(self.font())
+ self.documentFont.setPointSizeF(min(self.documentFont.pointSizeF()*self.width()/640.0,
+ self.documentFont.pointSizeF()*self.height()/480.0))
+
+ if self.inFullScreenResize:
+ self.emit(QtCore.SIGNAL("windowResized()"))
+ self.inFullScreenResize = False
+ elif self.currentCategory != "[starting]":
+ self.resizeTimer.start(500)
+
+ def toggleFullScreen(self):
+ if self.inFullScreenResize:
+ return
+
+ self.inFullScreenResize = True
+ self.connect(self.display, QtCore.SIGNAL("displayEmpty()"), self.resizeWindow, QtCore.Qt.QueuedConnection)
+ self.display.reset()
+
+ def redisplayWindow(self):
+ if len(self.currentExample) > 0:
+ self.showExampleSummary(self.currentExample)
+ elif len(self.currentCategory) > 0:
+ self.showExamples(self.currentCategory)
+ else:
+ self.showCategories()
+
+ def resizeWindow(self):
+ self.disconnect(self.display, QtCore.SIGNAL("displayEmpty()"), self.resizeWindow)
+
+ if self.isFullScreen():
+ self.showNormal()
+ else:
+ self.showFullScreen()
+
+ def addTitle(self, title, verticalMargin):
+ titlePosition = QtCore.QPointF(0.0, 2*verticalMargin)
+
+ newTitle = TitleShape(title, self.titleFont, QtGui.QPen(QtCore.Qt.white),
+ QtCore.QPointF(titlePosition), QtCore.QSizeF(0.5*self.width(), 2*verticalMargin ),
+ QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop )
+ newTitle.setPosition(QtCore.QPointF(-newTitle.rect().width(), titlePosition.y()))
+ newTitle.setTarget(QtCore.QPointF(0.25*self.width(), titlePosition.y()))
+ newTitle.metadata["fade"] = 15
+
+ self.display.appendShape(newTitle)
+
+ return newTitle
+
+ def addTitleBackground(self, titleShape):
+ backgroundPath = QtGui.QPainterPath()
+
+ backgroundPath.addRect(0, -titleShape.rect().height()*0.3, self.width(),
+ titleShape.rect().height()*1.6)
+
+ titleBackground = PanelShape(backgroundPath, QtGui.QBrush(QtGui.QColor("#a6ce39") ),
+ QtGui.QBrush(QtGui.QColor("#a6ce39") ), QtGui.QPen(QtCore.Qt.NoPen),
+ QtCore.QPointF( self.width(), titleShape.position().y() ),
+ QtCore.QSizeF(backgroundPath.boundingRect().size() ))
+ titleBackground.setTarget(QtCore.QPointF(0.0, titleShape.position().y()))
+
+ self.display.insertShape(0, titleBackground)
+
+ return titleBackground
+
+ def readExampleDescription(self, parentNode):
+ node = parentNode.firstChild()
+ description = ""
+ while not node.isNull():
+ if node.isText():
+ description += node.nodeValue()
+ elif node.hasChildNodes():
+ if node.nodeName() == "b":
+ beginTag = "<b>"
+ endTag = "</b>"
+ elif node.nodeName() == "a":
+ beginTag = "<font color=\"blue\">"
+ endTag = "</font>"
+ elif node.nodeName() == "i":
+ beginTag = "<i>"
+ endTag = "</i>"
+ elif node.nodeName() == "tt":
+ beginTag = "<tt>"
+ endTag = "</tt>"
+
+ description += beginTag + self.readExampleDescription(node) + endTag
+
+ node = node.nextSibling()
+
+ return description
+
+ def readInfo(self, resource, dir_):
+ categoriesFile = QtCore.QFile(resource)
+ document = QtXml.QDomDocument()
+ document.setContent(categoriesFile)
+ documentElement = document.documentElement()
+ categoryNodes = documentElement.elementsByTagName("category")
+
+ self.categories['[main]'] = {}
+ self.categories['[main]']['examples'] = []
+ self.categories['[main]']['color'] = QtGui.QColor("#f0f0f0")
+
+ self.readCategoryDescription(dir_, '[main]')
+ self.qtLogo.load(self.imagesDir.absoluteFilePath(":/images/qt4-logo.png"))
+ self.rbLogo.load(self.imagesDir.absoluteFilePath(":/images/rb-logo.png"))
+
+ for i in range(categoryNodes.length()):
+ elem = categoryNodes.item(i).toElement()
+ categoryName = QtCore.QString(elem.attribute("name"))
+ categoryDirName = QtCore.QString(elem.attribute("dirname"))
+ categoryDocName = QtCore.QString(elem.attribute("docname"))
+ categoryColor = QtGui.QColor(elem.attribute("color", "#f0f0f0"))
+
+ categoryDir = QtCore.QDir(dir_)
+
+ if categoryDir.cd(categoryDirName):
+ self.categories[categoryName] = {}
+
+ self.readCategoryDescription(categoryDir, categoryName)
+
+ self.categories[categoryName]['examples'] = []
+
+ exampleNodes = elem.elementsByTagName("example")
+ self.maximumLabels = max(self.maximumLabels, exampleNodes.length())
+
+ # Only add those examples we can find.
+ for j in range(exampleNodes.length()):
+ exampleDir = QtCore.QDir(categoryDir)
+
+ exampleNode = exampleNodes.item(j)
+ element = exampleNode.toElement()
+ exampleName = element.attribute("name")
+ exampleFileName = element.attribute("filename")
+
+ uniqueName = categoryName + "-" + exampleName
+
+ self.examples[uniqueName] = {}
+
+ if not categoryDocName.isEmpty():
+ docName = categoryDocName + "-" + exampleFileName + ".html"
+ else:
+ docName = categoryDirName + "-" + exampleFileName + ".html"
+
+ self.examples[uniqueName]['name'] = exampleName
+ self.examples[uniqueName]['document path'] = ""
+ self.findDescriptionAndImages(uniqueName, docName)
+
+ self.examples[uniqueName]['changedirectory'] = element.attribute("changedirectory", "true")
+ self.examples[uniqueName]['color'] = QtGui.QColor(element.attribute("color", "#f0f0f0"))
+
+ if element.attribute("executable", "true") != "true":
+ del self.examples[uniqueName]
+ continue
+
+ examplePath = None
+
+ if sys.platform == "win32":
+ examplePyName = exampleFileName + ".pyw"
+ else:
+ examplePyName = exampleFileName + ".py"
+
+ if exampleDir.exists(examplePyName):
+ examplePath = exampleDir.absoluteFilePath(examplePyName)
+ elif exampleDir.cd(exampleFileName):
+ if exampleDir.exists(examplePyName):
+ examplePath = exampleDir.absoluteFilePath(examplePyName)
+
+ if examplePath and not examplePath.isNull():
+ self.examples[uniqueName]['absolute path'] = exampleDir.absolutePath()
+ self.examples[uniqueName]['path'] = examplePath
+
+ self.categories[categoryName]['examples'].append(exampleName)
+ else:
+ del self.examples[uniqueName]
+
+ self.categories[categoryName]['color'] = categoryColor
+
+ return len(self.categories)
+
+ def addVersionAndCopyright(self, rect):
+ versionCaption = TitleShape(QtCore.QString("Qt %1").arg(QtCore.QT_VERSION_STR),
+ self.font(), QtGui.QPen(QtGui.QColor(0,0,0,0)),
+ QtCore.QPointF(rect.center().x(), rect.top()),
+ QtCore.QSizeF(0.5*rect.width(), rect.height()),
+ QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
+
+ versionCaption.metadata["fade"] = 15
+ self.display.appendShape(versionCaption)
+
+ copyrightCaption = TitleShape(QtCore.QString("Copyright \xa9 2005-2006 Trolltech AS"),
+ self.font(), QtGui.QPen(QtGui.QColor(0,0,0,0)),
+ QtCore.QPointF(rect.topLeft()),
+ QtCore.QSizeF(0.5*rect.width(), rect.height()),
+ QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
+
+ copyrightCaption.metadata["fade"] = 15
+ self.display.appendShape(copyrightCaption)
+
+ def fadeShapes(self):
+ for i in range(0, self.display.shapesCount()):
+ shape = self.display.shape(i)
+ shape.metadata["fade"] = -15
+ shape.metadata["fade minimum"] = 0
+
+ def findDescriptionAndImages(self, uniqueName, docName):
+ if self.documentationDir.exists(docName):
+ self.examples[uniqueName]['document path'] = docName
+
+ exampleDoc = QtXml.QDomDocument()
+
+ exampleFile = QtCore.QFile(self.documentationDir.absoluteFilePath(docName))
+ exampleDoc.setContent(exampleFile)
+
+ paragraphs = exampleDoc.elementsByTagName("p")
+
+ for p in range(paragraphs.length()):
+ descriptionNode = paragraphs.item(p)
+ description = self.readExampleDescription(descriptionNode)
+
+ if QtCore.QString(description).indexOf(QtCore.QRegExp(QtCore.QString("((The|This) )?(%1 )?.*(example|demo)").arg(self.examples[uniqueName]['name']), QtCore.Qt.CaseInsensitive)) != -1:
+ self.examples[uniqueName]['description'] = description
+ break
+
+ images = exampleDoc.elementsByTagName("img")
+ imageFiles = []
+
+ for i in range(images.length()):
+ imageElement = images.item(i).toElement()
+ source = QtCore.QString(imageElement.attribute("src"))
+ if "-logo" not in source:
+ imageFiles.append(self.documentationDir.absoluteFilePath(source))
+
+ if len(imageFiles) > 0:
+ self.examples[uniqueName]['image files'] = imageFiles
+
+ def newPage(self):
+ self.slideshowTimer.stop()
+ self.disconnect(self.slideshowTimer, QtCore.SIGNAL("timeout()"), self.updateExampleSummary)
+ self.disconnect(self.display, QtCore.SIGNAL("displayEmpty()"), self.resizeWindow)
+
+ def readCategoryDescription(self, categoryDir, categoryName):
+## categoryDirName = categoryDir.absolutePath()
+## if categoryDirName.find("examples") != -1:
+## categoryDirName = re.sub(".*/examples(.*)", r"%s\1" % QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.ExamplesPath), categoryDirName)
+## else:
+## categoryDirName = re.sub(".*/demos(.*)", r"%s\1" % QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.DemosPath), categoryDirName)
+## categoryDir = QtCore.QDir(categoryDirName)
+ if categoryDir.exists("README"):
+ file = QtCore.QFile(categoryDir.absoluteFilePath("README"))
+
+ if not file.open(QtCore.QFile.ReadOnly):
+ return
+
+ inputStream = QtCore.QTextStream(file)
+
+ paragraphs = []
+ currentPara = []
+ openQuote = True
+
+ while not inputStream.atEnd():
+ line = inputStream.readLine()
+
+ at = line.indexOf("\"", 0)
+
+ while at != -1:
+ if openQuote:
+ line.replace(at, 1, QtCore.QChar(QtCore.QChar.Punctuation_InitialQuote))
+ else:
+ line.replace(at, 1, QtCore.QChar(QtCore.QChar.Punctuation_FinalQuote))
+ openQuote = not openQuote
+ at = line.indexOf("\"", at)
+
+ if not line.trimmed().isEmpty():
+ currentPara.append(str(line.trimmed()))
+ elif len(currentPara) > 0:
+ paragraphs.append(" ".join(currentPara))
+ currentPara = []
+ else:
+ break
+
+
+ if len(currentPara) > 0:
+ paragraphs.append(" ".join(currentPara))
+
+ self.categories[categoryName]['description'] = "<p>"+"\n</p><p>".join(paragraphs)+"</p>"
+
+ def slotShowPage(self):
+ self.emit(QtCore.SIGNAL("showPage()"))
diff --git a/examples/corelib/tools/qtdemo/qtdemo.py b/examples/corelib/tools/qtdemo/qtdemo.py
new file mode 100755
index 0000000..d1d1627
--- /dev/null
+++ b/examples/corelib/tools/qtdemo/qtdemo.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+############################################################################
+##
+## Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
+##
+## This file is part of the example classes of the Qt Toolkit.
+##
+## This file may be used under the terms of the GNU General Public
+## License version 2.0 as published by the Free Software Foundation
+## and appearing in the file LICENSE.GPL included in the packaging of
+## this file. Please review the following information to ensure GNU
+## General Public Licensing requirements will be met:
+## http://www.trolltech.com/products/qt/opensource.html
+##
+## If you are unsure which license is appropriate for your use, please
+## review the following information:
+## http://www.trolltech.com/products/qt/licensing.html or contact the
+## sales department at sales@trolltech.com.
+##
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+############################################################################
+
+import sys
+import os
+
+from PySide2 import QtGui
+
+import qtdemo_rc
+
+from displaywidget import DisplayWidget
+from displayshape import PanelShape
+from launcher import Launcher
+
+if __name__ == "__main__":
+ # Make sure we run from the right directory. (I don't think this should be
+ # necessary.)
+ dir = os.path.dirname(__file__)
+
+ if dir:
+ os.chdir(dir)
+
+ app = QtGui.QApplication(sys.argv)
+ launcher = Launcher()
+ if not launcher.setup():
+ sys.exit(1)
+ launcher.show()
+ sys.exit(app.exec_())
diff --git a/examples/corelib/tools/qtdemo/qtdemo.qrc b/examples/corelib/tools/qtdemo/qtdemo.qrc
new file mode 100644
index 0000000..11b1f27
--- /dev/null
+++ b/examples/corelib/tools/qtdemo/qtdemo.qrc
@@ -0,0 +1,8 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+ <file>demos.xml</file>
+ <file>examples.xml</file>
+ <file>images/qt4-logo.png</file>
+ <file>images/rb-logo.png</file>
+</qresource>
+</RCC>
diff --git a/examples/corelib/tools/qtdemo/qtdemo.rc b/examples/corelib/tools/qtdemo/qtdemo.rc
new file mode 100644
index 0000000..4cf2a63
--- /dev/null
+++ b/examples/corelib/tools/qtdemo/qtdemo.rc
@@ -0,0 +1,2 @@
+IDI_ICON1 ICON DISCARDABLE "qtdemo.ico"
+
diff --git a/examples/corelib/tools/qtdemo/qtdemo_rc.py b/examples/corelib/tools/qtdemo/qtdemo_rc.py
new file mode 100644
index 0000000..dddae2a
--- /dev/null
+++ b/examples/corelib/tools/qtdemo/qtdemo_rc.py
@@ -0,0 +1,1987 @@
+# -*- coding: utf-8 -*-
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2016 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the PySide 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$
+##
+#############################################################################
+
+# Resource object code
+#
+# Created: Thu May 29 21:25:23 2008
+# by: The Resource Compiler for PyQt (Qt v4.4.0)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PySide2 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x1e\x55\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
+\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x63\x61\x74\x65\
+\x67\x6f\x72\x69\x65\x73\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\
+\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x64\x65\x73\
+\x69\x67\x6e\x65\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x51\x74\x20\
+\x44\x65\x73\x69\x67\x6e\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\x3c\
+\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\
+\x3d\x22\x63\x61\x6c\x63\x75\x6c\x61\x74\x6f\x72\x62\x75\x69\x6c\
+\x64\x65\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x61\x6c\x63\x75\
+\x6c\x61\x74\x6f\x72\x20\x42\x75\x69\x6c\x64\x65\x72\x22\x20\x2f\
+\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\
+\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x61\x6c\x63\x75\x6c\x61\
+\x74\x6f\x72\x66\x6f\x72\x6d\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\
+\x61\x6c\x63\x75\x6c\x61\x74\x6f\x72\x20\x46\x6f\x72\x6d\x22\x20\
+\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\
+\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6e\x74\x61\x69\
+\x6e\x65\x72\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x22\x20\x6e\x61\
+\x6d\x65\x3d\x22\x43\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x45\x78\
+\x74\x65\x6e\x73\x69\x6f\x6e\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\
+\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\
+\x65\x3d\x22\x70\x6c\x75\x67\x69\x6e\x73\x22\x20\x6e\x61\x6d\x65\
+\x3d\x22\x43\x75\x73\x74\x6f\x6d\x20\x57\x69\x64\x67\x65\x74\x20\
+\x50\x6c\x75\x67\x69\x6e\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\
+\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\
+\x65\x3d\x22\x74\x61\x73\x6b\x6d\x65\x6e\x75\x65\x78\x74\x65\x6e\
+\x73\x69\x6f\x6e\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\x61\x73\x6b\
+\x20\x4d\x65\x6e\x75\x20\x45\x78\x74\x65\x6e\x73\x69\x6f\x6e\x22\
+\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\
+\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x77\x6f\x72\x6c\x64\
+\x74\x69\x6d\x65\x63\x6c\x6f\x63\x6b\x62\x75\x69\x6c\x64\x65\x72\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x57\x6f\x72\x6c\x64\x20\x54\x69\
+\x6d\x65\x20\x43\x6c\x6f\x63\x6b\x20\x42\x75\x69\x6c\x64\x65\x72\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x77\x6f\x72\x6c\
+\x64\x74\x69\x6d\x65\x63\x6c\x6f\x63\x6b\x70\x6c\x75\x67\x69\x6e\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x57\x6f\x72\x6c\x64\x20\x54\x69\
+\x6d\x65\x20\x43\x6c\x6f\x63\x6b\x20\x50\x6c\x75\x67\x69\x6e\x22\
+\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\
+\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\
+\x72\x6e\x61\x6d\x65\x3d\x22\x64\x65\x73\x6b\x74\x6f\x70\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x44\x65\x73\x6b\x74\x6f\x70\x22\x3e\x0a\
+\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\
+\x65\x6e\x61\x6d\x65\x3d\x22\x73\x79\x73\x74\x72\x61\x79\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x53\x79\x73\x74\x65\x6d\x20\x54\x72\x61\
+\x79\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\
+\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\
+\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x64\x69\x61\x6c\x6f\x67\x73\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x69\x61\x6c\x6f\x67\x73\x22\
+\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\
+\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6d\x70\x6c\x65\x78\
+\x77\x69\x7a\x61\x72\x64\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x6f\
+\x6d\x70\x6c\x65\x78\x20\x57\x69\x7a\x61\x72\x64\x22\x20\x2f\x3e\
+\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\
+\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6e\x66\x69\x67\x64\x69\
+\x61\x6c\x6f\x67\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x6f\x6e\x66\
+\x69\x67\x75\x72\x61\x74\x69\x6f\x6e\x20\x44\x69\x61\x6c\x6f\x67\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x65\x78\x74\x65\
+\x6e\x73\x69\x6f\x6e\x22\x20\x6e\x61\x6d\x65\x3d\x22\x45\x78\x74\
+\x65\x6e\x73\x69\x6f\x6e\x20\x44\x69\x61\x6c\x6f\x67\x22\x20\x2f\
+\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\
+\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x66\x69\x6e\x64\x66\x69\x6c\
+\x65\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x46\x69\x6e\x64\x20\x46\
+\x69\x6c\x65\x73\x20\x44\x69\x61\x6c\x6f\x67\x22\x20\x2f\x3e\x0a\
+\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\
+\x65\x6e\x61\x6d\x65\x3d\x22\x73\x69\x6d\x70\x6c\x65\x77\x69\x7a\
+\x61\x72\x64\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x69\x6d\x70\x6c\
+\x65\x20\x57\x69\x7a\x61\x72\x64\x22\x20\x2f\x3e\x0a\x20\x20\x20\
+\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\
+\x6d\x65\x3d\x22\x73\x74\x61\x6e\x64\x61\x72\x64\x64\x69\x61\x6c\
+\x6f\x67\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x74\x61\x6e\x64\
+\x61\x72\x64\x20\x44\x69\x61\x6c\x6f\x67\x73\x22\x20\x2f\x3e\x0a\
+\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\
+\x65\x6e\x61\x6d\x65\x3d\x22\x74\x61\x62\x64\x69\x61\x6c\x6f\x67\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\x61\x62\x20\x44\x69\x61\x6c\
+\x6f\x67\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\
+\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\
+\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x64\x72\x61\x67\x61\x6e\
+\x64\x64\x72\x6f\x70\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x72\x61\
+\x67\x20\x61\x6e\x64\x20\x44\x72\x6f\x70\x22\x3e\x0a\x20\x20\x20\
+\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\
+\x6d\x65\x3d\x22\x64\x72\x61\x67\x67\x61\x62\x6c\x65\x69\x63\x6f\
+\x6e\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x72\x61\x67\x67\x61\
+\x62\x6c\x65\x20\x49\x63\x6f\x6e\x73\x22\x20\x2f\x3e\x0a\x20\x20\
+\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\
+\x61\x6d\x65\x3d\x22\x64\x72\x61\x67\x67\x61\x62\x6c\x65\x74\x65\
+\x78\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x72\x61\x67\x67\x61\
+\x62\x6c\x65\x20\x54\x65\x78\x74\x22\x20\x2f\x3e\x0a\x20\x20\x20\
+\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\
+\x6d\x65\x3d\x22\x64\x72\x6f\x70\x73\x69\x74\x65\x22\x20\x6e\x61\
+\x6d\x65\x3d\x22\x44\x72\x6f\x70\x20\x53\x69\x74\x65\x22\x20\x2f\
+\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\
+\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x66\x72\x69\x64\x67\x65\x6d\
+\x61\x67\x6e\x65\x74\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x46\x72\
+\x69\x64\x67\x65\x20\x4d\x61\x67\x6e\x65\x74\x73\x22\x20\x2f\x3e\
+\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\
+\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x70\x75\x7a\x7a\x6c\x65\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x50\x75\x7a\x7a\x6c\x65\x22\x20\x2f\x3e\
+\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\
+\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\
+\x6d\x65\x3d\x22\x67\x72\x61\x70\x68\x69\x63\x73\x76\x69\x65\x77\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x47\x72\x61\x70\x68\x69\x63\x73\
+\x20\x56\x69\x65\x77\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\
+\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x65\
+\x6c\x61\x73\x74\x69\x63\x6e\x6f\x64\x65\x73\x22\x20\x6e\x61\x6d\
+\x65\x3d\x22\x45\x6c\x61\x73\x74\x69\x63\x20\x4e\x6f\x64\x65\x73\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6c\x6c\
+\x69\x64\x69\x6e\x67\x6d\x69\x63\x65\x22\x20\x6e\x61\x6d\x65\x3d\
+\x22\x43\x6f\x6c\x6c\x69\x64\x69\x6e\x67\x20\x4d\x69\x63\x65\x22\
+\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\
+\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x64\x69\x61\x67\x72\
+\x61\x6d\x73\x63\x65\x6e\x65\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\
+\x69\x61\x67\x72\x61\x6d\x20\x53\x63\x65\x6e\x65\x22\x20\x2f\x3e\
+\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\
+\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x64\x72\x61\x67\x64\x72\x6f\x70\
+\x72\x6f\x62\x6f\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x72\x61\
+\x67\x20\x61\x6e\x64\x20\x44\x72\x6f\x70\x20\x52\x6f\x62\x6f\x74\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x70\x6f\x72\x74\
+\x65\x64\x63\x61\x6e\x76\x61\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x50\x6f\x72\x74\x65\x64\x20\x43\x61\x6e\x76\x61\x73\x22\x20\x2f\
+\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\
+\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x70\x6f\x72\x74\x65\x64\x61\
+\x73\x74\x65\x72\x6f\x69\x64\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x50\x6f\x72\x74\x65\x64\x20\x41\x73\x74\x65\x72\x6f\x69\x64\x73\
+\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\
+\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\
+\x69\x72\x6e\x61\x6d\x65\x3d\x22\x69\x74\x65\x6d\x76\x69\x65\x77\
+\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x49\x74\x65\x6d\x20\x56\x69\
+\x65\x77\x73\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\
+\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x62\x61\x73\
+\x69\x63\x73\x6f\x72\x74\x66\x69\x6c\x74\x65\x72\x6d\x6f\x64\x65\
+\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x42\x61\x73\x69\x63\x20\x53\
+\x6f\x72\x74\x2f\x46\x69\x6c\x74\x65\x72\x20\x4d\x6f\x64\x65\x6c\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x68\x61\x72\
+\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x68\x61\x72\x74\x22\x20\
+\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\
+\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x64\x69\x72\x76\x69\x65\
+\x77\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x69\x72\x65\x63\x74\x6f\
+\x72\x79\x20\x56\x69\x65\x77\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\
+\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\
+\x65\x3d\x22\x70\x69\x78\x65\x6c\x61\x74\x6f\x72\x22\x20\x6e\x61\
+\x6d\x65\x3d\x22\x50\x69\x78\x65\x6c\x61\x74\x6f\x72\x22\x20\x2f\
+\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\
+\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x70\x75\x7a\x7a\x6c\x65\x22\
+\x20\x6e\x61\x6d\x65\x3d\x22\x50\x75\x7a\x7a\x6c\x65\x22\x20\x2f\
+\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\
+\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x69\x6d\x70\x6c\x65\x64\
+\x6f\x6d\x6d\x6f\x64\x65\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\
+\x69\x6d\x70\x6c\x65\x20\x44\x4f\x4d\x20\x4d\x6f\x64\x65\x6c\x22\
+\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\
+\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x69\x6d\x70\x6c\
+\x65\x74\x72\x65\x65\x6d\x6f\x64\x65\x6c\x22\x20\x6e\x61\x6d\x65\
+\x3d\x22\x53\x69\x6d\x70\x6c\x65\x20\x54\x72\x65\x65\x20\x4d\x6f\
+\x64\x65\x6c\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\
+\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\
+\x70\x69\x6e\x62\x6f\x78\x64\x65\x6c\x65\x67\x61\x74\x65\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x53\x70\x69\x6e\x20\x42\x6f\x78\x20\x44\
+\x65\x6c\x65\x67\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\
+\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\
+\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x6c\
+\x61\x79\x6f\x75\x74\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4c\x61\
+\x79\x6f\x75\x74\x73\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\
+\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x62\
+\x61\x73\x69\x63\x6c\x61\x79\x6f\x75\x74\x73\x22\x20\x6e\x61\x6d\
+\x65\x3d\x22\x42\x61\x73\x69\x63\x20\x4c\x61\x79\x6f\x75\x74\x73\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x62\x6f\x72\x64\
+\x65\x72\x6c\x61\x79\x6f\x75\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x42\x6f\x72\x64\x65\x72\x20\x4c\x61\x79\x6f\x75\x74\x22\x20\x2f\
+\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\
+\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x66\x6c\x6f\x77\x6c\x61\x79\
+\x6f\x75\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x46\x6c\x6f\x77\x20\
+\x4c\x61\x79\x6f\x75\x74\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\
+\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\
+\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x6c\x69\
+\x6e\x67\x75\x69\x73\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x51\x74\
+\x20\x4c\x69\x6e\x67\x75\x69\x73\x74\x22\x3e\x0a\x20\x20\x20\x20\
+\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\
+\x65\x3d\x22\x61\x72\x72\x6f\x77\x70\x61\x64\x22\x20\x6e\x61\x6d\
+\x65\x3d\x22\x41\x72\x72\x6f\x77\x20\x50\x61\x64\x22\x20\x2f\x3e\
+\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\
+\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x68\x65\x6c\x6c\x6f\x74\x72\x22\
+\x20\x6e\x61\x6d\x65\x3d\x22\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\
+\x6c\x64\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\
+\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x74\x72\
+\x6f\x6c\x6c\x70\x72\x69\x6e\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x54\x72\x6f\x6c\x6c\x20\x50\x72\x69\x6e\x74\x22\x20\x2f\x3e\x0a\
+\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\
+\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\
+\x65\x3d\x22\x6d\x61\x69\x6e\x77\x69\x6e\x64\x6f\x77\x73\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x4d\x61\x69\x6e\x20\x57\x69\x6e\x64\x6f\
+\x77\x73\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x61\x70\x70\x6c\
+\x69\x63\x61\x74\x69\x6f\x6e\x22\x20\x6e\x61\x6d\x65\x3d\x22\x41\
+\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x22\x20\x2f\x3e\x0a\x20\
+\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\
+\x6e\x61\x6d\x65\x3d\x22\x64\x6f\x63\x6b\x77\x69\x64\x67\x65\x74\
+\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x6f\x63\x6b\x20\x57\x69\
+\x64\x67\x65\x74\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\
+\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\
+\x22\x6d\x64\x69\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4d\x75\x6c\x74\
+\x69\x70\x6c\x65\x20\x44\x6f\x63\x75\x6d\x65\x6e\x74\x20\x49\x6e\
+\x74\x65\x72\x66\x61\x63\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\
+\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\
+\x65\x3d\x22\x6d\x65\x6e\x75\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x4d\x65\x6e\x75\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\
+\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\
+\x22\x72\x65\x63\x65\x6e\x74\x66\x69\x6c\x65\x73\x22\x20\x6e\x61\
+\x6d\x65\x3d\x22\x52\x65\x63\x65\x6e\x74\x20\x46\x69\x6c\x65\x73\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x64\x69\x22\
+\x20\x6e\x61\x6d\x65\x3d\x22\x53\x69\x6e\x67\x6c\x65\x20\x44\x6f\
+\x63\x75\x6d\x65\x6e\x74\x20\x49\x6e\x74\x65\x72\x66\x61\x63\x65\
+\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\
+\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\
+\x69\x72\x6e\x61\x6d\x65\x3d\x22\x6e\x65\x74\x77\x6f\x72\x6b\x22\
+\x20\x6e\x61\x6d\x65\x3d\x22\x4e\x65\x74\x77\x6f\x72\x6b\x69\x6e\
+\x67\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\
+\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x62\x6c\x6f\x63\x6b\
+\x69\x6e\x67\x66\x6f\x72\x74\x75\x6e\x65\x63\x6c\x69\x65\x6e\x74\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x42\x6c\x6f\x63\x6b\x69\x6e\x67\
+\x20\x46\x6f\x72\x74\x75\x6e\x65\x20\x43\x6c\x69\x65\x6e\x74\x22\
+\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\
+\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x62\x72\x6f\x61\x64\
+\x63\x61\x73\x74\x72\x65\x63\x65\x69\x76\x65\x72\x22\x20\x6e\x61\
+\x6d\x65\x3d\x22\x42\x72\x6f\x61\x64\x63\x61\x73\x74\x20\x52\x65\
+\x63\x65\x69\x76\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\
+\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\
+\x3d\x22\x62\x72\x6f\x61\x64\x63\x61\x73\x74\x73\x65\x6e\x64\x65\
+\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x42\x72\x6f\x61\x64\x63\x61\
+\x73\x74\x20\x53\x65\x6e\x64\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\
+\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\
+\x61\x6d\x65\x3d\x22\x66\x6f\x72\x74\x75\x6e\x65\x63\x6c\x69\x65\
+\x6e\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x46\x6f\x72\x74\x75\x6e\
+\x65\x20\x43\x6c\x69\x65\x6e\x74\x22\x20\x2f\x3e\x0a\x20\x20\x20\
+\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\
+\x6d\x65\x3d\x22\x66\x6f\x72\x74\x75\x6e\x65\x73\x65\x72\x76\x65\
+\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x46\x6f\x72\x74\x75\x6e\x65\
+\x20\x53\x65\x72\x76\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\
+\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\
+\x65\x3d\x22\x66\x74\x70\x22\x20\x63\x68\x61\x6e\x67\x65\x64\x69\
+\x72\x65\x63\x74\x6f\x72\x79\x3d\x22\x66\x61\x6c\x73\x65\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x46\x54\x50\x20\x43\x6c\x69\x65\x6e\x74\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x68\x74\x74\x70\
+\x22\x20\x63\x68\x61\x6e\x67\x65\x64\x69\x72\x65\x63\x74\x6f\x72\
+\x79\x3d\x22\x66\x61\x6c\x73\x65\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x48\x54\x54\x50\x20\x43\x6c\x69\x65\x6e\x74\x22\x20\x2f\x3e\x0a\
+\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\
+\x65\x6e\x61\x6d\x65\x3d\x22\x6c\x6f\x6f\x70\x62\x61\x63\x6b\x22\
+\x20\x6e\x61\x6d\x65\x3d\x22\x4c\x6f\x6f\x70\x62\x61\x63\x6b\x22\
+\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\
+\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x74\x68\x72\x65\x61\
+\x64\x65\x64\x66\x6f\x72\x74\x75\x6e\x65\x73\x65\x72\x76\x65\x72\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\x68\x72\x65\x61\x64\x65\x64\
+\x20\x46\x6f\x72\x74\x75\x6e\x65\x20\x53\x65\x72\x76\x65\x72\x22\
+\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\
+\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x72\x72\x65\
+\x6e\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\x6f\x72\x72\x65\x6e\
+\x74\x20\x43\x6c\x69\x65\x6e\x74\x22\x20\x2f\x3e\x0a\x20\x20\x3c\
+\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\
+\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\
+\x6f\x70\x65\x6e\x67\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4f\x70\
+\x65\x6e\x47\x4c\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\
+\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x32\x64\
+\x70\x61\x69\x6e\x74\x69\x6e\x67\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x32\x44\x20\x50\x61\x69\x6e\x74\x69\x6e\x67\x22\x20\x2f\x3e\x0a\
+\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\
+\x65\x6e\x61\x6d\x65\x3d\x22\x67\x72\x61\x62\x62\x65\x72\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x47\x72\x61\x62\x62\x65\x72\x22\x20\x2f\
+\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\
+\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x68\x65\x6c\x6c\x6f\x67\x6c\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x48\x65\x6c\x6c\x6f\x20\x47\x4c\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x6f\x76\x65\x72\
+\x70\x61\x69\x6e\x74\x69\x6e\x67\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x4f\x76\x65\x72\x70\x61\x69\x6e\x74\x69\x6e\x67\x22\x20\x2f\x3e\
+\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\
+\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x70\x62\x75\x66\x66\x65\x72\x73\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x50\x69\x78\x65\x6c\x20\x42\x75\
+\x66\x66\x65\x72\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\
+\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\
+\x22\x73\x61\x6d\x70\x6c\x65\x62\x75\x66\x66\x65\x72\x73\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x53\x61\x6d\x70\x6c\x65\x20\x42\x75\x66\
+\x66\x65\x72\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\
+\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\
+\x74\x65\x78\x74\x75\x72\x65\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x54\x65\x78\x74\x75\x72\x65\x73\x22\x20\x2f\x3e\x0a\x20\x20\x3c\
+\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\
+\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\
+\x70\x61\x69\x6e\x74\x69\x6e\x67\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x50\x61\x69\x6e\x74\x69\x6e\x67\x22\x3e\x0a\x20\x20\x20\x20\x3c\
+\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\
+\x3d\x22\x62\x61\x73\x69\x63\x64\x72\x61\x77\x69\x6e\x67\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x42\x61\x73\x69\x63\x20\x44\x72\x61\x77\
+\x69\x6e\x67\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\
+\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\
+\x6f\x6e\x63\x65\x6e\x74\x72\x69\x63\x63\x69\x72\x63\x6c\x65\x73\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x6f\x6e\x63\x65\x6e\x74\x72\
+\x69\x63\x20\x43\x69\x72\x63\x6c\x65\x73\x22\x20\x2f\x3e\x0a\x20\
+\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\
+\x6e\x61\x6d\x65\x3d\x22\x70\x61\x69\x6e\x74\x65\x72\x70\x61\x74\
+\x68\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x50\x61\x69\x6e\x74\x65\
+\x72\x20\x50\x61\x74\x68\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\
+\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\
+\x65\x3d\x22\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x61\x74\x69\x6f\
+\x6e\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\x72\x61\x6e\x73\x66\
+\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x73\x22\x20\x2f\x3e\x0a\x20\x20\
+\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\
+\x61\x6d\x65\x3d\x22\x73\x76\x67\x76\x69\x65\x77\x65\x72\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x53\x56\x47\x20\x56\x69\x65\x77\x65\x72\
+\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\
+\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\
+\x69\x72\x6e\x61\x6d\x65\x3d\x22\x70\x68\x6f\x6e\x6f\x6e\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x50\x68\x6f\x6e\x6f\x6e\x22\x3e\x0a\x20\
+\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\
+\x6e\x61\x6d\x65\x3d\x22\x63\x61\x70\x61\x62\x69\x6c\x69\x74\x69\
+\x65\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x42\x61\x63\x6b\x65\x6e\
+\x64\x20\x43\x61\x70\x61\x62\x69\x6c\x69\x74\x69\x65\x73\x22\x20\
+\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\
+\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x6d\x75\x73\x69\x63\x70\
+\x6c\x61\x79\x65\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4d\x75\x73\
+\x69\x63\x20\x50\x6c\x61\x79\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\
+\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\
+\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\
+\x22\x72\x69\x63\x68\x74\x65\x78\x74\x22\x20\x6e\x61\x6d\x65\x3d\
+\x22\x52\x69\x63\x68\x20\x54\x65\x78\x74\x22\x3e\x0a\x20\x20\x20\
+\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\
+\x6d\x65\x3d\x22\x63\x61\x6c\x65\x6e\x64\x61\x72\x22\x20\x6e\x61\
+\x6d\x65\x3d\x22\x43\x61\x6c\x65\x6e\x64\x61\x72\x22\x20\x2f\x3e\
+\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\
+\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x6f\x72\x64\x65\x72\x66\x6f\x72\
+\x6d\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4f\x72\x64\x65\x72\x20\x46\
+\x6f\x72\x6d\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\
+\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\
+\x79\x6e\x74\x61\x78\x68\x69\x67\x68\x6c\x69\x67\x68\x74\x65\x72\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x79\x6e\x74\x61\x78\x20\x48\
+\x69\x67\x68\x6c\x69\x67\x68\x74\x65\x72\x22\x20\x2f\x3e\x0a\x20\
+\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\
+\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\
+\x3d\x22\x73\x71\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x51\x4c\
+\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\
+\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x61\x63\x68\x65\x64\
+\x74\x61\x62\x6c\x65\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x61\x63\
+\x68\x65\x64\x20\x54\x61\x62\x6c\x65\x22\x20\x2f\x3e\x0a\x20\x20\
+\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\
+\x61\x6d\x65\x3d\x22\x71\x75\x65\x72\x79\x6d\x6f\x64\x65\x6c\x22\
+\x20\x6e\x61\x6d\x65\x3d\x22\x51\x75\x65\x72\x79\x20\x4d\x6f\x64\
+\x65\x6c\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\
+\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x72\x65\
+\x6c\x61\x74\x69\x6f\x6e\x61\x6c\x74\x61\x62\x6c\x65\x6d\x6f\x64\
+\x65\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x52\x65\x6c\x61\x74\x69\
+\x6f\x6e\x61\x6c\x20\x54\x61\x62\x6c\x65\x20\x4d\x6f\x64\x65\x6c\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x74\x61\x62\x6c\
+\x65\x6d\x6f\x64\x65\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\x61\
+\x62\x6c\x65\x20\x4d\x6f\x64\x65\x6c\x22\x20\x2f\x3e\x0a\x20\x20\
+\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\
+\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\
+\x22\x74\x68\x72\x65\x61\x64\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x54\x68\x72\x65\x61\x64\x69\x6e\x67\x22\x3e\x0a\x20\x20\x20\x20\
+\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\
+\x65\x3d\x22\x6d\x61\x6e\x64\x65\x6c\x62\x72\x6f\x74\x22\x20\x6e\
+\x61\x6d\x65\x3d\x22\x4d\x61\x6e\x64\x65\x6c\x62\x72\x6f\x74\x22\
+\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\
+\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x65\x6d\x61\x70\
+\x68\x6f\x72\x65\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x65\x6d\
+\x61\x70\x68\x6f\x72\x65\x73\x22\x20\x65\x78\x65\x63\x75\x74\x61\
+\x62\x6c\x65\x3d\x22\x66\x61\x6c\x73\x65\x22\x20\x2f\x3e\x0a\x20\
+\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\
+\x6e\x61\x6d\x65\x3d\x22\x77\x61\x69\x74\x63\x6f\x6e\x64\x69\x74\
+\x69\x6f\x6e\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x57\x61\x69\x74\
+\x20\x43\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x22\x20\x65\x78\x65\
+\x63\x75\x74\x61\x62\x6c\x65\x3d\x22\x66\x61\x6c\x73\x65\x22\x20\
+\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\
+\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\x20\x64\x69\x72\
+\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x73\x22\x20\x6e\x61\x6d\
+\x65\x3d\x22\x54\x6f\x6f\x6c\x73\x22\x3e\x0a\x20\x20\x20\x20\x3c\
+\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\
+\x3d\x22\x63\x6f\x64\x65\x63\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x43\x6f\x64\x65\x63\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\
+\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\
+\x3d\x22\x69\x31\x38\x6e\x22\x20\x6e\x61\x6d\x65\x3d\x22\x49\x6e\
+\x74\x65\x72\x6e\x61\x74\x69\x6f\x6e\x61\x6c\x69\x7a\x61\x74\x69\
+\x6f\x6e\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\
+\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x70\x6c\
+\x75\x67\x61\x6e\x64\x70\x61\x69\x6e\x74\x22\x20\x6e\x61\x6d\x65\
+\x3d\x22\x50\x6c\x75\x67\x20\x61\x6e\x64\x20\x50\x61\x69\x6e\x74\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x71\x74\x64\x65\
+\x6d\x6f\x22\x20\x6e\x61\x6d\x65\x3d\x22\x51\x74\x20\x44\x65\x6d\
+\x6f\x22\x20\x65\x78\x65\x63\x75\x74\x61\x62\x6c\x65\x3d\x22\x66\
+\x61\x6c\x73\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\
+\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\
+\x72\x65\x67\x65\x78\x70\x22\x20\x6e\x61\x6d\x65\x3d\x22\x52\x65\
+\x67\x75\x6c\x61\x72\x20\x45\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\
+\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\
+\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x65\x74\
+\x74\x69\x6e\x67\x73\x65\x64\x69\x74\x6f\x72\x22\x20\x6e\x61\x6d\
+\x65\x3d\x22\x53\x65\x74\x74\x69\x6e\x67\x73\x20\x45\x64\x69\x74\
+\x6f\x72\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\
+\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\x6f\x72\x79\
+\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x77\x69\x64\x67\x65\x74\
+\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x57\x69\x64\x67\x65\x74\x73\
+\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\
+\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x61\x6e\x61\x6c\x6f\x67\
+\x63\x6c\x6f\x63\x6b\x22\x20\x6e\x61\x6d\x65\x3d\x22\x41\x6e\x61\
+\x6c\x6f\x67\x20\x43\x6c\x6f\x63\x6b\x22\x20\x2f\x3e\x0a\x20\x20\
+\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\
+\x61\x6d\x65\x3d\x22\x63\x61\x6c\x63\x75\x6c\x61\x74\x6f\x72\x22\
+\x20\x6e\x61\x6d\x65\x3d\x22\x43\x61\x6c\x63\x75\x6c\x61\x74\x6f\
+\x72\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\
+\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x68\x61\
+\x72\x61\x63\x74\x65\x72\x6d\x61\x70\x22\x20\x6e\x61\x6d\x65\x3d\
+\x22\x43\x68\x61\x72\x61\x63\x74\x65\x72\x20\x4d\x61\x70\x22\x20\
+\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\
+\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x64\x69\x67\x69\x74\x61\
+\x6c\x63\x6c\x6f\x63\x6b\x22\x20\x6e\x61\x6d\x65\x3d\x22\x44\x69\
+\x67\x69\x74\x61\x6c\x20\x43\x6c\x6f\x63\x6b\x22\x20\x2f\x3e\x0a\
+\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\
+\x65\x6e\x61\x6d\x65\x3d\x22\x67\x72\x6f\x75\x70\x62\x6f\x78\x22\
+\x20\x6e\x61\x6d\x65\x3d\x22\x47\x72\x6f\x75\x70\x20\x42\x6f\x78\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x69\x63\x6f\x6e\
+\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x49\x63\x6f\x6e\x73\x22\x20\
+\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\
+\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x69\x6d\x61\x67\x65\x76\
+\x69\x65\x77\x65\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x49\x6d\x61\
+\x67\x65\x20\x56\x69\x65\x77\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\
+\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\
+\x61\x6d\x65\x3d\x22\x6c\x69\x6e\x65\x65\x64\x69\x74\x73\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x4c\x69\x6e\x65\x20\x45\x64\x69\x74\x73\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x6d\x6f\x76\x69\
+\x65\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4d\x6f\x76\x69\x65\x20\x50\
+\x6c\x61\x79\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\
+\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\
+\x22\x73\x63\x72\x65\x65\x6e\x73\x68\x6f\x74\x22\x20\x6e\x61\x6d\
+\x65\x3d\x22\x53\x63\x72\x65\x65\x6e\x73\x68\x6f\x74\x22\x20\x2f\
+\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\
+\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x63\x72\x69\x62\x62\x6c\
+\x65\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x63\x72\x69\x62\x62\x6c\
+\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\
+\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x68\x61\
+\x70\x65\x64\x63\x6c\x6f\x63\x6b\x22\x20\x6e\x61\x6d\x65\x3d\x22\
+\x53\x68\x61\x70\x65\x64\x20\x43\x6c\x6f\x63\x6b\x22\x20\x2f\x3e\
+\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\
+\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x6c\x69\x64\x65\x72\x73\x22\
+\x20\x6e\x61\x6d\x65\x3d\x22\x53\x6c\x69\x64\x65\x72\x73\x22\x20\
+\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\
+\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x70\x69\x6e\x62\x6f\
+\x78\x65\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x70\x69\x6e\x20\
+\x42\x6f\x78\x65\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\
+\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\
+\x22\x73\x74\x79\x6c\x65\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\
+\x74\x79\x6c\x65\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\
+\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\
+\x22\x74\x65\x74\x72\x69\x78\x22\x20\x6e\x61\x6d\x65\x3d\x22\x54\
+\x65\x74\x72\x69\x78\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\
+\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\
+\x22\x74\x6f\x6f\x6c\x74\x69\x70\x73\x22\x20\x6e\x61\x6d\x65\x3d\
+\x22\x54\x6f\x6f\x6c\x20\x54\x69\x70\x73\x22\x20\x2f\x3e\x0a\x20\
+\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\
+\x6e\x61\x6d\x65\x3d\x22\x77\x69\x67\x67\x6c\x79\x22\x20\x6e\x61\
+\x6d\x65\x3d\x22\x57\x69\x67\x67\x6c\x79\x22\x20\x2f\x3e\x0a\x20\
+\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\
+\x6e\x61\x6d\x65\x3d\x22\x77\x69\x6e\x64\x6f\x77\x66\x6c\x61\x67\
+\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x57\x69\x6e\x64\x6f\x77\x20\
+\x46\x6c\x61\x67\x73\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\
+\x74\x65\x67\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\
+\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x78\x6d\x6c\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x58\x4d\x4c\x22\x3e\x0a\x20\x20\
+\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\
+\x61\x6d\x65\x3d\x22\x73\x61\x78\x62\x6f\x6f\x6b\x6d\x61\x72\x6b\
+\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x41\x58\x20\x42\x6f\x6f\
+\x6b\x6d\x61\x72\x6b\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\
+\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\
+\x3d\x22\x64\x6f\x6d\x62\x6f\x6f\x6b\x6d\x61\x72\x6b\x73\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x44\x4f\x4d\x20\x42\x6f\x6f\x6b\x6d\x61\
+\x72\x6b\x73\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\
+\x67\x6f\x72\x79\x3e\x0a\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x69\
+\x65\x73\x3e\x0a\
+\x00\x00\x03\x50\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
+\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x63\x61\x74\x65\
+\x67\x6f\x72\x69\x65\x73\x3e\x0a\x20\x20\x3c\x63\x61\x74\x65\x67\
+\x6f\x72\x79\x20\x64\x69\x72\x6e\x61\x6d\x65\x3d\x22\x2e\x22\x20\
+\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x64\x65\x6d\x6f\x73\x22\x20\
+\x6e\x61\x6d\x65\x3d\x22\x44\x65\x6d\x6f\x6e\x73\x74\x72\x61\x74\
+\x69\x6f\x6e\x73\x22\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\
+\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x61\x66\
+\x66\x69\x6e\x65\x22\x20\x6e\x61\x6d\x65\x3d\x22\x41\x66\x66\x69\
+\x6e\x65\x20\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x61\x74\x69\x6f\
+\x6e\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\
+\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x61\x72\
+\x74\x68\x75\x72\x70\x6c\x75\x67\x69\x6e\x22\x20\x6e\x61\x6d\x65\
+\x3d\x22\x41\x72\x74\x68\x75\x72\x20\x50\x6c\x75\x67\x69\x6e\x22\
+\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\
+\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6d\x70\x6f\
+\x73\x69\x74\x69\x6f\x6e\x22\x20\x6e\x61\x6d\x65\x3d\x22\x43\x6f\
+\x6d\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x4d\x6f\x64\x65\x73\x22\
+\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\
+\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x67\x72\x61\x64\x69\
+\x65\x6e\x74\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x47\x72\x61\x64\
+\x69\x65\x6e\x74\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\
+\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\
+\x22\x70\x61\x74\x68\x73\x74\x72\x6f\x6b\x65\x22\x20\x6e\x61\x6d\
+\x65\x3d\x22\x50\x61\x74\x68\x20\x53\x74\x72\x6f\x6b\x69\x6e\x67\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\
+\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x64\x65\x66\x6f\
+\x72\x6d\x22\x20\x6e\x61\x6d\x65\x3d\x22\x56\x65\x63\x74\x6f\x72\
+\x20\x44\x65\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x22\x20\x2f\x3e\
+\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\
+\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x62\x6f\x6f\x6b\x73\x22\x20\x6e\
+\x61\x6d\x65\x3d\x22\x42\x6f\x6f\x6b\x73\x22\x20\x2f\x3e\x0a\x20\
+\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\
+\x6e\x61\x6d\x65\x3d\x22\x6d\x61\x69\x6e\x77\x69\x6e\x64\x6f\x77\
+\x22\x20\x6e\x61\x6d\x65\x3d\x22\x4d\x61\x69\x6e\x20\x57\x69\x6e\
+\x64\x6f\x77\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\
+\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\
+\x70\x72\x65\x61\x64\x73\x68\x65\x65\x74\x22\x20\x6e\x61\x6d\x65\
+\x3d\x22\x53\x70\x72\x65\x61\x64\x73\x68\x65\x65\x74\x22\x20\x2f\
+\x3e\x0a\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\
+\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x73\x71\x6c\x62\x72\x6f\x77\
+\x73\x65\x72\x22\x20\x6e\x61\x6d\x65\x3d\x22\x53\x51\x4c\x20\x42\
+\x72\x6f\x77\x73\x65\x72\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\
+\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\
+\x3d\x22\x74\x65\x78\x74\x65\x64\x69\x74\x22\x20\x6e\x61\x6d\x65\
+\x3d\x22\x54\x65\x78\x74\x20\x45\x64\x69\x74\x22\x20\x2f\x3e\x0a\
+\x20\x20\x20\x20\x3c\x65\x78\x61\x6d\x70\x6c\x65\x20\x66\x69\x6c\
+\x65\x6e\x61\x6d\x65\x3d\x22\x65\x6d\x62\x65\x64\x64\x65\x64\x64\
+\x69\x61\x6c\x6f\x67\x73\x22\x20\x6e\x61\x6d\x65\x3d\x22\x45\x6d\
+\x62\x65\x64\x64\x65\x64\x20\x44\x69\x61\x6c\x6f\x67\x73\x22\x20\
+\x2f\x3e\x0a\x20\x20\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x79\x3e\
+\x0a\x3c\x2f\x63\x61\x74\x65\x67\x6f\x72\x69\x65\x73\x3e\x0a\
+\x00\x00\x2a\x14\
+\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\x09\x70\x48\x59\x73\x00\x00\x2e\x23\x00\x00\x2e\x23\
+\x01\x78\xa5\x3f\x76\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd5\x08\
+\x08\x0f\x1b\x36\x16\x33\x5d\x2c\x00\x00\x00\x1d\x74\x45\x58\x74\
+\x43\x6f\x6d\x6d\x65\x6e\x74\x00\x43\x72\x65\x61\x74\x65\x64\x20\
+\x77\x69\x74\x68\x20\x54\x68\x65\x20\x47\x49\x4d\x50\xef\x64\x25\
+\x6e\x00\x00\x29\x8a\x49\x44\x41\x54\x78\xda\xed\x9d\x79\xbc\x1c\
+\x65\x99\xef\xbf\x6f\x55\x75\xf7\x39\x7d\x36\xc8\x4e\x16\xb3\x02\
+\x61\x0b\x21\x91\x4d\x10\x46\x51\x84\xcf\x04\x17\x64\x9c\xc5\x91\
+\xeb\x32\x5e\x9d\xe5\xc3\x75\x74\x44\xe7\x08\x6e\x28\xc2\x38\x57\
+\xc7\xab\x33\x23\x2a\xf7\x8e\xeb\x8c\xa0\x32\x33\xa0\xa0\x28\x12\
+\x08\x3b\x24\x21\x84\x84\x6c\x90\x04\xb2\x9d\xac\x67\xe9\xa5\xba\
+\xaa\xde\xf7\xfe\x51\x4b\xbf\xb5\xf5\x09\x21\x21\x27\x87\x53\x50\
+\xe9\xee\xaa\x3e\x5d\xdd\xf5\xfc\x9e\xdf\xb3\xbe\xef\x2b\x38\x94\
+\x6d\x09\xa7\x5f\x77\x6b\xf1\xc9\x72\x97\x58\x01\x2c\x05\xee\x07\
+\x96\xf7\x96\xed\x3e\xc6\xb6\x63\x6a\x13\x87\x20\x7c\x80\xc7\x3f\
+\x7d\x4b\xf1\xec\xee\xe3\x63\x7f\x3e\x08\xac\x0d\x00\xb1\x14\x78\
+\x18\x18\xe8\x2d\xdb\xde\xd8\x6d\x1e\x5d\x00\xb8\x1c\xf8\xd5\xa7\
+\x6f\x29\x92\x00\x40\xd6\xf6\x2c\xb0\x2c\x04\x44\x6f\xd9\xde\x32\
+\x76\xcb\x8f\x65\x00\x2c\xa1\x23\x10\xe8\xc2\x83\x04\x80\xbe\x39\
+\xc0\x0b\x09\x86\xd8\xde\x5b\xb6\xed\x31\x31\x1c\xbd\xcd\x7a\x99\
+\xef\xff\x00\xb0\xf0\x10\xaf\x55\x00\x4e\x0a\xf6\x0f\x07\xc7\xb6\
+\xde\x58\x2d\x3d\xa2\x81\x62\x7d\x6f\xd9\x76\xc7\xc4\x32\x12\x19\
+\x60\x09\xe5\x80\xd2\x67\x01\x1c\x02\x03\x1c\xcc\xb6\x23\x60\x98\
+\xe5\x81\x63\xb9\xaa\xb7\x6c\x57\xc7\xc4\x34\x32\x18\xe0\xcb\xa1\
+\xf0\x8f\xe0\x76\x02\xf0\x47\xc1\x0e\xb0\xff\xc6\x6a\xe9\x09\x2d\
+\xd2\x58\xdd\x5b\xb6\x07\xc6\xc4\xf6\x6a\x33\xc0\x12\xa6\x02\xeb\
+\x81\x8e\xf0\xd0\x11\x62\x80\xe1\xb6\xbd\xc0\x0a\x8d\x21\x96\xf5\
+\x96\xed\xc1\x31\x31\x1e\x79\x00\xdc\x19\x05\x80\x2d\x00\x50\x10\
+\x02\x4f\x29\xe4\xab\xf7\xfd\xdd\x00\x0c\xa1\x0f\xf1\x54\x6f\xd9\
+\xde\x39\x26\xd6\xc3\x09\x80\x25\x9c\x03\x3c\x94\x34\x17\x79\x0c\
+\x30\xbf\x50\x66\x9c\x69\x01\x8a\x7e\xe9\xe1\x2a\xc9\x01\xe9\xd1\
+\x50\x92\x01\x29\x91\x28\xd4\x91\xfb\x3d\x43\xc0\x73\x1a\x43\x2c\
+\x05\xfa\xc6\x1c\xcb\x57\x06\x80\x07\x81\x0b\x93\x87\xb3\x00\x50\
+\x14\x06\x17\xb4\x8d\xc3\x40\x41\x24\x68\x15\xec\xfe\xf3\x9a\xf2\
+\xa8\x2b\x49\xbf\xf4\xa8\x48\x8f\x9a\x52\x0c\x49\xef\x48\xb2\xc6\
+\x5a\x2d\x17\xf1\x48\x6f\xd9\x7e\x7e\x4c\xec\x07\x0b\x80\x25\xfc\
+\x11\xf0\xd3\xac\xf7\x65\x01\xe0\x04\xb3\x9d\xd3\x8a\x3d\x31\x81\
+\xfb\x40\x50\x89\xe7\xf1\x73\x1e\x8a\xaa\x94\x54\x94\xc7\x01\xcf\
+\x63\x50\x79\xd8\x4a\xe1\xa8\xc3\xce\x15\x0d\xe0\xc5\x80\x21\x7e\
+\x1f\x80\xe2\xf9\xde\xb2\x5d\x1f\x03\x40\x76\xd8\xb7\x0a\x98\x9b\
+\x75\x3a\x0b\x00\xb3\xac\x2e\x4e\x2c\xf4\x64\x08\x9e\x83\x00\x45\
+\xf3\xbc\x42\xe1\x2a\x85\x8d\x64\x28\x60\x8a\x41\x25\xd9\xef\x79\
+\x47\xc2\x7c\x6c\x05\x1e\xd7\x4c\xc6\xb3\xbd\x65\x5b\xbd\x56\x00\
+\xd0\x2a\x0c\xbc\x26\x4f\xf8\x79\x5b\xb7\xd1\x86\xc0\xd2\x68\x3f\
+\x2e\x74\x5d\xd8\x42\x03\x85\x48\x9d\x53\x14\x84\xa2\x80\xa2\xd3\
+\x2c\x80\xd9\x3c\x57\x55\x1e\x15\xe9\xfb\x15\x07\xa4\x47\x4d\xfa\
+\x0c\xf2\x0a\xb6\xd7\x05\xfb\x55\xc1\xeb\x3d\x37\x56\x4b\x2b\x02\
+\x40\xdc\x0f\x3c\x33\x9a\x23\x0d\x91\xa3\xfd\x13\x80\x67\x80\x29\
+\x79\x7f\x98\xc5\x00\x67\x15\x4f\x60\x92\xd9\x91\xab\xe9\x59\x26\
+\x20\x9b\x29\xe2\x6c\x90\xf5\x39\xe1\x59\x57\x49\xea\x4a\x32\xa4\
+\x3c\xf6\x7b\x1e\x43\x4a\x52\x57\x3e\x83\x1c\xa6\x6d\x5f\x22\xd2\
+\x58\x39\x9a\x00\x91\xc7\x00\x37\xb4\x12\x7e\xde\x36\xde\xe8\x46\
+\x60\xc4\x04\x25\x12\x82\x14\x19\xc2\x14\x29\x87\x31\xcd\x14\x22\
+\x07\x30\x05\xe1\xb3\x45\x17\x8a\x29\xa6\x7f\x5c\xa2\x18\x0c\x18\
+\x62\x50\x7a\x54\xa5\xa2\xa2\x0e\xd9\xcd\x1c\x07\xbc\x25\xd8\x01\
+\xfa\x6f\xac\x96\x36\x68\x3e\xc4\x23\xbd\x65\x7b\xdf\x68\x63\x00\
+\x0f\x30\x5a\xfd\x61\x16\x03\xbc\xa5\xed\x54\x0a\xc2\x6c\xa9\xed\
+\xc3\xfb\x01\x2f\x97\x29\x86\xf7\x27\x42\x50\xec\xf7\x3c\x0e\x48\
+\x97\x8a\x52\x54\xa4\xcf\x1c\x87\xc9\xb1\x5c\xa5\x31\xc4\xb3\xc7\
+\x52\xa4\x91\xc7\x00\xc6\xa1\xa1\xc9\x44\x60\x46\xc2\x13\xc3\xd0\
+\xba\x7e\x3e\xcb\x0f\x48\x33\x05\x99\x40\x11\x19\x4c\xa3\x9b\x09\
+\x50\x18\x28\x26\x98\x16\x13\xcc\x62\x74\xbc\xa6\x3c\x86\x02\x7f\
+\xa2\x22\x3d\xfa\x83\x3c\xc5\xcb\xdc\x8a\xc0\xeb\x83\xfd\x13\x80\
+\xba\xb1\x5a\xda\xa4\x31\xc4\x52\x60\xc7\x48\xed\x8b\xb0\x0e\xd7\
+\x07\x1d\x67\x74\x50\x14\xa5\x4c\x81\xc7\x73\x02\x68\x74\x4e\x0b\
+\xe7\x30\x0d\x0a\x32\xfc\x00\x91\x02\x03\x99\x26\x28\x79\x1d\x85\
+\xa2\x43\x98\x74\x98\x8a\x49\x9a\xe9\xe8\x0f\xcc\x46\x45\xfa\xb9\
+\x8a\xea\xcb\x67\x09\x01\xcc\x0b\xf6\xb0\xea\xb9\xfe\xc6\x6a\xe9\
+\x41\x8d\x21\x96\x8f\x3a\x00\x80\x08\x22\x80\xb8\x80\x55\xae\x9d\
+\x27\x46\xf5\x22\xc7\x5c\xa8\x84\xfd\x8f\xbf\x4f\xa6\xae\x91\x05\
+\x2c\x91\x01\x30\xfd\xb8\xfe\xf7\xe3\x0c\x8b\xe3\x8d\x26\x20\xfc\
+\x4c\xa6\x1b\xb0\x84\x64\x50\xc9\x43\x71\x30\xc3\x32\xf8\x87\x00\
+\x6e\xac\x96\xf6\x6a\x0c\x71\x3f\xb0\xa9\xb7\x6c\xd7\x46\x0d\x00\
+\x54\xa6\x86\x26\xc3\xbd\x56\xbe\x01\x39\x1a\x1c\x17\x1e\x2d\xc0\
+\xe3\x57\x24\x92\x4e\x64\x5a\xf8\x22\x76\x2e\x34\x00\x32\x38\x27\
+\x31\x85\x62\x92\x69\x31\xc9\x0c\x93\x56\x92\x9a\x16\x86\x1e\x90\
+\xde\xa1\x24\xac\xc6\x07\x61\x67\x18\x7a\xbe\x74\x63\xb5\xf4\x78\
+\x00\x88\xd5\xbd\x65\xfb\xbe\x63\x1a\x00\xe4\x84\x75\xf9\x34\x4f\
+\xca\x0c\xa8\xdc\x5c\x42\xbe\x6f\x91\xcc\x2f\xa8\x9c\x08\x23\x2b\
+\xbc\x54\x01\xa3\x88\x04\xc0\x92\xe7\x0d\x14\x96\x21\xe9\x32\x60\
+\x7a\x70\xcc\x56\x1a\x20\x3c\x0f\x5b\x49\x5e\xa6\xc1\x9f\x1e\xec\
+\x57\x06\x0c\xf1\x44\x6f\xd9\x3e\xe7\x98\x02\x40\xb7\xe8\x44\x50\
+\x68\x91\x04\x3a\x18\x60\x24\x9d\x42\x32\xed\x7e\xfe\xe7\xe9\x9b\
+\x0f\x06\x91\xe3\x14\xea\x40\x48\x0a\x59\x7f\x14\xd1\x63\xd3\xc7\
+\x08\xd9\x25\x7c\x6c\x13\x7e\x08\x3a\xc5\x54\xa8\x82\xc2\x51\x92\
+\x81\x88\x21\x5c\x2a\x2f\x3f\x59\x65\x1c\xaa\x1c\xe6\xce\xbb\xae\
+\x6d\xd3\xc6\x2f\xd5\x5f\x75\x00\xb4\x8b\x72\x4b\x1f\x60\x78\x20\
+\x1c\xec\xb9\xf8\xa3\x48\x08\x3d\xbc\xbe\xca\x31\x1f\x59\xd1\x48\
+\x1a\x08\x3a\x08\x64\x70\x26\xce\x0e\x2a\x87\x2d\x04\x8a\x92\x50\
+\x4c\x30\xfd\x3d\x3c\x3e\x20\x5d\xf6\x49\x8f\x03\x9e\x7b\xa8\x7e\
+\x44\x2b\xa1\x2f\x06\x2e\x02\x2e\x3e\xf7\xdc\x73\xcf\xb9\xea\xaa\
+\x95\x9b\xb5\xd3\x5b\x80\x75\xc1\xf3\x15\xc0\xaf\x6f\xbe\x69\x61\
+\xfd\x08\x98\x00\xa3\x85\x0f\x40\x2e\xdd\xeb\x94\x2f\x32\xfd\x03\
+\x72\xa8\x9f\x16\x9f\x9f\x04\x01\x2d\x99\x27\xae\xf9\x2a\xf6\x1f\
+\x1a\x00\x94\x06\x88\xe6\xe7\xcb\xcc\x28\x25\x09\x8a\xe3\x0c\x8b\
+\x1e\x43\x81\xe5\xfb\x11\xfb\x3c\x37\x72\x2e\x87\xe4\xc1\xf3\xc3\
+\xdc\x79\xd7\xb5\x07\x11\xc6\xc5\xc1\x7e\x29\xd0\x05\x88\x19\x33\
+\x66\x30\x7d\xfa\x74\xf0\x3b\xab\xc2\xed\xfc\xc4\x47\xcc\x03\x36\
+\x1d\x76\x00\x08\x04\x60\xe6\x0a\x2a\xe9\xe0\x89\x4c\xbb\xae\x12\
+\x5a\x45\x06\x08\x5a\x01\x20\xce\x0a\x22\x87\x35\x5a\xa5\x9a\x9b\
+\x1a\x9f\x7e\xee\x93\xbf\xd4\x40\x11\x32\x81\x4c\x45\x1b\xb4\x00\
+\x85\x40\x31\xc9\x2c\x30\xd1\xf4\x01\x56\x51\x1e\x5b\x1c\x9b\x9d\
+\x5e\x63\x38\xe1\x7f\x0b\x78\x47\xe0\x2f\xc4\x93\x11\xc5\x22\x67\
+\x9d\x75\x16\x42\x88\xa3\xe3\x03\x34\x19\x20\x7e\xc3\xd5\xb0\x5a\
+\xac\x52\xac\x61\x24\x84\xd4\x14\xa4\x48\x80\x25\x4b\xe0\xd9\xa0\
+\x48\x83\x91\x54\xc4\x10\xd7\xff\x38\xfd\xab\x84\xc6\xab\x18\x63\
+\x48\xed\x33\xb2\x9d\xca\x56\x80\xe8\x12\x8a\x93\x0b\x45\xfa\xbc\
+\x7d\xb9\x89\xa8\xb9\xf3\xae\xfb\x53\xe0\xa3\x91\x96\xe9\xca\x27\
+\x04\x8b\x17\x2f\xa6\x58\x2c\x1e\x3d\x27\x50\x68\x26\x20\xa9\xd9\
+\xaa\x85\xd0\xc5\x30\xe0\x10\x9a\xe8\x45\x86\xa6\x8b\x88\x7f\x54\
+\xe2\x98\x0a\x58\x29\x1b\x0c\x2a\x27\x11\x15\x17\xb8\x4c\xfc\x2b\
+\x35\x28\xc8\x98\xe0\x45\xf0\x4a\xa4\x4c\x80\xcc\xc8\x72\xa6\xcd\
+\x46\x41\x28\x0c\x21\x90\x19\xbe\xc1\xdc\x79\xd7\xcd\x05\xfe\x4f\
+\x96\xf0\x01\xe6\xce\x9d\xcb\xb4\x69\xd3\x8e\x76\x18\x98\x04\x00\
+\xc3\x7a\xff\xd9\xb1\x3c\x29\x07\xcf\xc8\xd0\xf4\xf8\xf3\xbc\x73\
+\x49\xb3\xe1\xdf\xfc\xb8\x09\xd0\x8d\x93\xca\xa0\x7f\x89\xa1\x09\
+\x5e\xe0\x25\x38\xc1\x8b\x5e\x99\x09\x67\xb2\xb5\x5f\x20\x53\xa0\
+\x38\xce\x28\xb1\xc7\xab\x25\x85\xdf\x01\x7c\x1b\x98\x90\x75\xd7\
+\xbb\xba\xba\x38\xfd\xf4\xd3\x8f\x7e\x18\x28\x5e\x16\x00\xf2\xcf\
+\x89\x14\x08\x44\x42\xb3\x7d\x7d\x17\xa9\x63\x09\xe1\x2b\x68\xd4\
+\x3a\xa8\x0f\xf6\xd0\xa8\x8c\xa7\x7a\x60\x0a\xb5\xc1\x13\xfc\xbf\
+\x15\x80\xf0\x3f\x59\x08\xe1\x3f\x17\x36\x56\xa9\x42\xc7\xf8\x17\
+\x68\xeb\xd9\x4e\xa9\xfb\x25\x84\x69\x47\xda\x1f\x82\xc0\x7f\x94\
+\xd1\xa3\xc2\x8c\x31\x84\x68\x09\x02\xfd\xf7\xca\x54\x95\xd3\xc8\
+\x8e\xfe\xae\xd1\x2a\x91\xa9\x6d\xd1\xa2\x45\x58\x96\x75\xf4\x01\
+\x30\x3c\x03\xb4\x06\x42\xda\x5b\x47\x8b\xe3\x43\x2d\x17\x29\x61\
+\x8b\x08\x10\xc1\x7b\xa5\x60\xff\x8e\xa9\xec\xd9\x3a\x8f\x4a\xff\
+\x24\x84\x10\xd1\x0e\x0a\x5f\xde\x4d\xd3\x10\xc8\x1f\x21\x4a\x38\
+\x8d\x12\xf5\xa1\xf1\x08\x21\x30\x8b\x35\x4a\x9d\xbb\xe8\x98\xb0\
+\x81\x8e\x89\x1b\x30\xcc\x46\x20\x5c\x2f\xa0\x7b\xdf\xf9\x6b\x3e\
+\x2a\x2d\x42\x48\x47\x14\xad\xc1\x10\xb2\x80\x91\xd4\xfe\xd3\x80\
+\xeb\xf2\xee\xf8\x9c\x39\x73\x98\x38\x71\xe2\x48\xc9\x04\x1a\x41\
+\x22\x88\x8c\x5c\xfe\x70\x09\x21\x12\x20\x48\x0a\x3f\x4f\xe0\xcd\
+\x5d\xb9\x82\xdd\x5b\xa7\xb2\x7d\xe3\x49\x34\xec\xf6\x40\xe8\x9e\
+\x26\x7c\x52\xcf\xf3\x8e\x01\xb8\x6e\x01\xbb\x3a\x9d\xc1\xdd\x33\
+\xb0\x36\x9d\xcf\xf8\xd9\x4f\xd0\x7d\xc2\x5a\x94\xf0\x30\x90\x78\
+\x91\xc6\x87\x20\x08\x3d\x84\x34\x08\x44\x46\x6d\x22\x2b\x0f\xd1\
+\x65\x94\xd9\xe5\x0d\x86\xc2\xef\x04\x7e\x06\x94\xb3\xee\xf6\xb8\
+\x71\xe3\x58\xb0\x60\xc1\xc8\xc9\x04\xe6\x99\x00\x91\x11\x09\xe4\
+\xe7\xf9\xf3\x84\x2f\xf2\x85\xaf\x60\xfb\xc6\xc9\xbc\xb4\x61\x26\
+\x8d\x7a\x39\x25\xf8\xe4\x9e\x14\x74\x16\x20\x92\x8f\x5e\xad\xc8\
+\xf6\x35\x17\xb0\x6f\xeb\x29\x8c\x9f\xbd\x92\xae\x89\x5b\x10\x86\
+\x17\x69\xff\x70\x20\x18\xce\x27\x08\x01\x60\x45\x0a\x04\xf8\x4d\
+\x39\xf3\x33\x55\xcd\x30\x58\xbc\x78\xf1\x2b\xa2\xfe\xc3\x0e\x80\
+\x89\xc6\x74\x44\xe4\xa4\xaa\x94\x33\xa7\x72\x72\x03\x22\xc3\x0c\
+\xe4\xd9\xf6\x24\x00\x64\x43\xb0\xe2\x81\x13\xe9\xdf\x7b\x1c\x86\
+\x61\x20\x84\x6c\x29\xf4\x56\x42\x4e\xc6\xcf\x59\x20\xa9\xf4\xf7\
+\x50\x59\x79\x31\x1d\xe3\xb7\x32\xfd\xb4\x27\xb1\xda\xab\x88\xc0\
+\x24\xf8\x20\xf0\x62\x20\xc8\x4a\x35\xb7\x2a\x71\x87\xf7\x6f\xf3\
+\xbd\x27\x9d\x4a\x8b\x41\xb8\xf3\xe7\xcf\xa7\xa7\xa7\x67\x64\xd5\
+\x02\x2c\x51\x8a\x7e\x80\x1a\x46\xd0\x69\xbb\x4f\x2a\x79\x13\x17\
+\x76\x9c\x01\x0c\x14\xfd\xbb\x8b\x3c\xfd\xd0\x4c\xea\xd5\x76\x84\
+\x90\x31\x41\x1e\x8c\xf0\x5b\x69\x7d\xd6\x31\xa5\x54\xf4\x7c\xa0\
+\x6f\x1a\x1b\x07\x7b\x78\xdd\x82\x27\xe8\x18\xbf\x27\x62\x81\x90\
+\x09\xf4\xec\x61\xab\xec\x60\xb2\x01\xc6\xa2\x48\x63\xa0\x8d\x65\
+\x5f\x7c\x5b\x7b\xde\x7d\x3e\xfe\xf8\xe3\x39\xf5\xd4\x53\x47\x5e\
+\x31\x48\x60\x69\xc5\x20\x86\x7d\x14\xa9\xbf\x27\xe1\xf1\x67\xd3\
+\xbe\x81\xe2\xf9\xd5\x9d\x3c\xb7\x62\x12\x4a\x59\x18\x86\xc4\x30\
+\x0c\xa4\x6c\x6a\xbf\x61\x18\x31\xa1\xe9\xc2\x1b\x4e\xd0\x79\xef\
+\x49\x7e\x56\x75\xb0\x8d\xf5\x8f\x5c\xc0\xdc\xd7\x3f\x49\xcf\xe4\
+\x5d\x08\xe1\x45\xde\x7d\xdc\x29\xd4\xcd\x00\x2d\xcd\x80\x50\x45\
+\xee\xbb\xf6\x0a\xec\xfe\xb6\xcc\x7b\x5c\x28\x14\x58\xb4\x68\xd1\
+\xc8\xac\x06\xfa\xed\x60\x96\x96\xfc\xc9\xf7\x05\x44\x94\xda\x51\
+\x09\xad\xcf\xb3\xf5\x81\xff\xef\xc1\x53\x0f\x76\xb1\x75\x63\x37\
+\xa6\x29\x30\x0c\x85\x52\x0a\x29\x65\x24\x74\x00\x29\x65\xae\xa0\
+\x87\xd3\xfc\x56\x7f\x17\x0b\x50\x95\xc2\xf3\x60\xed\xc3\x8b\x98\
+\x7a\xe2\x0b\xcc\x3c\x63\x63\x50\x2e\x96\x78\x78\x1a\xfd\x7b\x89\
+\xda\x42\x7e\x6e\x64\xf5\xed\x67\xb0\xed\xe1\x19\xb9\xf7\x78\xc1\
+\x82\x05\x1c\x7f\xfc\xf1\x99\xe7\x5e\x78\x7e\x3d\xb3\xe7\x9c\x34\
+\x32\xc2\x40\x95\x61\xdb\x55\xac\x3c\x9b\x4d\xfd\x69\xbb\xef\x07\
+\x46\x02\x50\x9e\xe2\x91\xdf\x74\xb0\x7d\x6b\x39\x12\x7c\xb8\x87\
+\x9a\x99\xa4\xea\x83\x02\x6e\x0b\x53\x91\x07\x90\xf0\x3a\xe1\xe3\
+\x8b\xcf\xcd\x40\x4a\x98\xbd\x60\x0b\x52\x78\x29\x16\x90\x89\xfc\
+\x80\xc8\xe8\x5d\xdc\xb4\xa6\xc8\xbf\x7d\x39\x3f\x9b\x37\x79\xf2\
+\x64\x66\xcd\x9a\x95\x79\x6e\xc7\x8e\x97\x78\xe4\xd1\xfb\x8f\x2e\
+\x00\x84\x32\x50\x4a\x17\xa1\xaf\xe5\xe1\xbd\x13\x39\x59\x3e\xa1\
+\xe5\xf7\xb3\x6d\xbe\x9f\x09\x5c\xb3\x52\xb0\xf5\xf9\x22\xa6\xa9\
+\x52\x82\x48\x0a\x5f\x7f\x9d\x14\x58\x1e\x48\xc2\xd7\x21\x93\xe4\
+\xf9\x13\x49\xbf\x20\xdc\xb7\xac\x99\x4a\xcf\xc4\x21\xc6\x4d\xdd\
+\x1f\x24\x79\xfc\x3d\x4c\x1e\x29\xad\x85\x2d\xd9\xf4\xea\x3a\xf0\
+\x8d\xbf\x9f\x84\xd3\xc8\x06\xae\x69\x9a\x2c\x5a\xb4\x28\x13\x88\
+\x8d\x86\xcd\xaf\xef\xb9\x83\xc2\x21\xd4\x01\x0e\x33\x03\x98\x5a\
+\x18\xa8\x51\x9c\x22\x23\x34\x14\x5a\x46\x4f\x80\xd0\xed\xbe\x48\
+\x69\xff\xda\xe5\x92\x27\x1e\x2c\x60\x59\x2a\x25\xf8\x50\xe0\xa1\
+\x80\x93\x00\xc8\xda\xb3\x40\x90\x14\xb6\x1f\x55\xc4\x7d\x0a\x1d\
+\x1c\xc9\xef\xa1\x94\xe2\xe9\xfb\x67\xb3\xe8\x12\x45\xcf\xe4\xa1\
+\x14\x08\xf4\xcc\x5f\xb2\x4f\xf2\xdb\x37\x74\xb1\x69\x4d\xbe\x00\
+\xcf\x3c\xf3\x4c\x3a\x3a\x3a\x32\xcf\x3d\xfe\xf8\x83\xec\xda\xb5\
+\x9d\xe9\x33\x66\x8d\x04\x1f\xa0\x30\xac\x03\xa8\x57\xf6\xf4\xb4\
+\x6d\x96\xdd\x07\xd8\xb3\x53\xf2\xe4\x43\x06\x86\x61\xc4\x84\x92\
+\xd4\xc2\x24\x2d\x87\xbe\x41\xfc\xd1\xc3\x30\x1d\xca\xdd\x55\x26\
+\x9e\x20\xe9\xea\x31\xe8\xec\x32\x40\x15\x00\x41\xdf\x36\x83\xbe\
+\x9d\x0e\x76\xd5\x44\x36\xba\xa2\x6b\xea\x7b\x16\x23\x84\xd7\xf3\
+\x3c\x58\xb5\x6c\x2a\xe7\x5e\xf6\x12\xa5\x8e\x46\x04\x80\x78\x7e\
+\x20\xee\x08\x2e\x5f\x66\x71\xcf\x4f\xcb\xb9\xf7\x75\xc6\x8c\x19\
+\xcc\x9e\x3d\x3b\xf3\xdc\xae\x9d\xdb\x79\xf4\x91\xfb\x47\x92\x13\
+\x68\x66\x94\x5c\xf5\x52\xae\x3a\x28\xbb\x1f\x3e\x77\x6d\xc5\x7d\
+\x77\x39\x78\xae\x45\xa1\x70\x70\x42\x90\x52\x46\xbb\xe7\x79\xc1\
+\x73\x87\x8e\x9e\x41\x16\x9e\x57\x62\xd2\x54\xe8\xea\x6e\xcb\x0c\
+\x55\x67\x9e\xe4\x22\x10\x0c\x0d\x56\xd9\xbd\xdd\xe5\xf9\xb5\xd0\
+\xb7\xbd\x8c\x61\x14\x30\x4d\x33\xda\xf5\xef\x91\x04\xe1\x50\xbf\
+\xc5\xe3\xbf\x99\xcc\x1b\xdf\xd1\x87\x61\x78\x90\xd9\x5d\xe4\x5f\
+\x6f\xb0\x1f\xbe\x7c\x4d\x3b\x32\xa7\xf3\xbc\x58\x2c\xe6\x52\xbf\
+\xe7\x79\xfc\xea\x57\x3f\xc3\xf3\xbc\x91\x01\x80\x8a\xea\xcf\x49\
+\x04\x91\xeb\xf4\x65\x65\xfa\x08\xa8\xdf\x10\xf0\xc8\x83\x43\xf4\
+\xef\x57\x14\x8b\xad\x9d\xb0\xd0\xf3\xd7\x05\xef\x79\x1e\xae\xeb\
+\xd2\x3d\xae\xc6\x82\x73\xeb\xcc\x3b\x79\x02\x88\xa0\x40\xab\x34\
+\xf1\x0b\x95\x0a\x49\x3b\xba\x3a\xe8\x3c\x19\x66\x9f\x04\xbb\xb6\
+\x55\x79\xfa\x31\x93\xbe\xed\x16\xa6\x59\xc4\xb2\x2c\x2c\xcb\x8a\
+\x80\x90\xe5\x4b\xec\xdf\x5d\x60\xeb\xba\x0e\x66\x9d\x52\x8f\xe5\
+\x06\xa4\x56\xf9\x73\x3d\xf8\x5a\xaf\x49\x65\x50\xe4\x3a\xa7\x8b\
+\x17\x2f\xa6\x50\x28\x64\x9e\x5f\xb6\xec\xb7\xf4\xf5\xed\x18\x39\
+\x61\x60\xbf\xda\x9d\xe1\x03\x90\x53\xe2\x15\x5a\xaa\x37\x2b\xf4\
+\x13\xec\xef\x73\x78\xe6\xa9\x3a\x96\x55\xca\x74\xc6\x74\xdb\xab\
+\x0b\xde\x75\x5d\x5c\xd7\x45\xaa\x0a\xa7\xbe\x7e\x88\x73\x2e\x98\
+\x85\x69\x91\xc8\xca\x35\x5f\xfb\xff\xab\x84\xeb\xda\x7c\x9c\x32\
+\xbd\x8d\x29\xd3\x60\xcb\xa6\x06\x0f\xdc\xd3\xc0\xb3\xdb\x91\x52\
+\x62\x9a\x26\x96\x65\xe5\x32\xc1\x33\x8f\xb6\x33\x6d\xb6\xa2\xd0\
+\xe6\x69\xfe\x40\xb3\x60\xb4\xf4\x2e\xc9\xb2\xdf\xe4\x47\x2b\xd3\
+\xa7\x4f\xcf\xad\xf1\xbf\xf0\xc2\x06\x1e\x7b\x74\xe9\x48\xcb\x03\
+\x18\x89\x44\x10\x19\x39\xfe\x78\x57\x8f\xd0\xe2\x00\x1d\x00\xa6\
+\x10\xdc\x7b\x57\x1f\x4a\x19\x91\x13\x96\xa5\x6d\xbe\xdd\xf5\x62\
+\x82\x77\x1c\x07\xa3\xb8\x93\xcb\xde\x35\x8d\xe9\x33\x4f\xd0\x08\
+\x57\x4f\xc9\xd2\xf2\x7b\xea\xc7\x94\xf2\x23\x99\x59\xf3\x0a\x4c\
+\xb8\xda\xe1\xee\x5f\xbc\xc4\xd0\x81\x13\xa2\xee\x9b\x90\x0d\x42\
+\xad\x0d\xbf\xa7\x5d\x33\x79\xfa\xa1\x02\xe7\x5c\x62\xa6\x00\xb0\
+\xe5\x79\xc9\xd7\xae\xcf\x6f\xff\xea\xea\xea\xca\x2d\xf4\xd4\x6a\
+\x55\x7e\x7d\xcf\x1d\xb1\xa8\xe6\x95\x05\xef\x87\x39\x0f\x20\x28\
+\x04\x8f\xe1\xf3\xe4\x6b\x0b\x03\x0b\x41\x51\x3b\x5f\xd0\xce\x15\
+\xd8\xbc\xa1\xc6\xf6\x17\xed\x94\x37\x1e\xee\xa1\xd6\x87\xc2\x77\
+\x1c\x87\x46\xa3\x41\xbd\x5e\xa7\xbd\x6b\x80\xcb\xdf\x3d\x89\x19\
+\x33\xc7\xe3\x37\xd0\x98\xc1\xc8\x40\x23\x78\x6e\x05\xc7\xad\x60\
+\xd7\x9f\xeb\xaf\x0b\x40\x01\x85\x85\x52\x16\x0a\x8b\xae\xee\x76\
+\xae\x7c\xef\x2c\xa6\xce\xec\xa7\x56\xab\xd2\x68\x34\x70\x5d\x37\
+\x66\x87\x75\xc0\x6e\x5c\x63\x32\xb0\xcf\x44\x28\x0b\xa1\x0a\x08\
+\x65\x61\xd7\x2c\xbe\x76\xbd\x47\xbd\x96\x9f\x97\x58\xb4\x68\x11\
+\xed\xed\xd9\xd9\xe0\x07\x1e\xf8\x0d\xfd\xfd\xfb\x0f\xa3\xd4\x0e\
+\x73\x35\x30\x0d\x82\xe4\x5e\x00\xed\xb9\x11\x3c\x37\x34\x10\x2c\
+\xfb\xfd\x1e\x84\x48\x7b\xdf\x49\x67\xcf\x75\x5d\x1a\x8d\x46\x24\
+\xfc\x72\xf7\x10\xef\x7e\xef\x6c\x66\xcc\x98\x0e\x58\x81\xb0\xad\
+\x0c\x01\x87\xbb\x11\x3d\x17\xc1\xb9\xe6\xa3\x7e\xdc\x02\xe5\x83\
+\xc7\x2a\x94\xb8\xf4\x8a\x69\x8c\x9b\xd2\x47\xb5\x5a\xc5\xb6\x6d\
+\x1c\xc7\xc1\xf3\xbc\x58\x28\x2a\x84\x00\x25\x78\xf4\x77\x32\x02\
+\xbb\x41\x81\x1f\x7c\xcb\x65\xe5\xe3\xf9\x8e\xdb\xec\xd9\xb3\x73\
+\x6b\xfc\x5b\x36\x6f\xe4\x99\x55\x4f\x1e\xd6\x54\xf0\x11\x60\x00\
+\x2b\x4a\x0b\x67\x09\xbf\x29\xec\xe6\x71\x43\x3b\xbe\x65\x53\x85\
+\x17\x37\x57\x73\x43\x30\x9d\xfa\x43\x00\xd4\x6a\x35\x3c\xf6\x72\
+\xc9\x1f\x4e\xa2\xb3\xbb\x0b\x15\x68\x6e\x53\xe8\x85\x14\xf0\xb2\
+\xd8\x27\xff\x78\x13\x04\x60\x61\x5a\x45\xde\x76\xc5\x4c\x4a\xed\
+\x03\xd4\x6a\xb5\x88\x09\xc2\x70\x53\x67\x81\x9d\x2f\x79\x0c\x1d\
+\x30\x31\x28\xb2\xf6\x69\xc1\xcf\x7e\x98\x3f\x35\x72\x67\x67\x27\
+\x67\x9e\x79\x66\xe6\x39\xc7\x71\xf8\xe5\x2f\x5f\xb9\xd7\xff\xaa\
+\xd4\x02\xf2\x7d\x80\xd6\x11\x80\x21\xe0\x81\xdf\x6e\xcb\x8d\xbd\
+\x43\xe1\xeb\x0e\x5f\xa3\xd1\xa0\x6e\x57\x78\xe3\xa5\xdd\xcc\x9c\
+\x35\x63\xd8\x7c\x7b\xf2\x7b\xc5\x33\x92\x2a\xd5\x76\xf6\xfb\xbb\
+\xb7\x70\xea\x59\xc7\x31\x79\x4a\x8f\x16\xd1\x0a\xba\xbb\x8f\xe7\
+\xaa\x3f\x6f\xe7\xdf\xfe\x65\x4b\x14\x1e\x0a\x21\x52\xfe\x80\xe7\
+\x0a\x36\xac\x6e\xb0\xf8\xc2\x4e\x56\x3c\xbe\x8d\x75\x6b\x57\xa5\
+\xee\x5d\x5b\x7b\x17\x42\x08\x16\x2e\xbc\x22\xfa\xfb\xe4\xb6\x77\
+\x6f\x1f\xe7\x9e\x7b\x91\x1f\xff\xf7\x6d\xc7\xae\xd7\x63\xb5\x0f\
+\x79\x90\xa3\x98\x5d\xd7\xbd\xf9\xe3\x9f\x78\x62\x00\xb0\x0b\x85\
+\xc2\xd2\xc3\x3c\x36\xd0\xcc\x10\xb7\x8a\xa5\x7c\x69\x11\xfb\x57\
+\x06\x6d\xb6\x6e\x1e\xa0\x54\x2a\x67\xc6\xdc\x3a\xfd\x7b\x9e\x47\
+\xa3\xd1\xc0\xb6\x6b\xcc\x98\x5b\xe7\xc2\x8b\x2e\x48\xe5\xd7\xe3\
+\x23\x79\xb2\xc6\x14\xd0\xe2\x3b\xc1\x53\x0f\xef\xe0\xa1\xdf\xef\
+\x65\xc3\xba\xfd\xbc\xff\x2f\x17\x52\x2a\x59\xfe\xa7\x2a\xbf\x8d\
+\xac\xfb\xb8\x02\x17\x5e\xd2\xcd\x03\xf7\x56\xa2\xef\x98\xf4\x59\
+\x4c\xd3\x64\xf5\xf2\x0a\x67\x5f\x38\x0e\x25\x05\xae\xeb\xa4\xee\
+\xdc\xd0\xe0\xbe\x40\x90\xf9\xd3\x19\x4e\x99\x32\x8d\x29\x53\xa6\
+\xbd\x72\x8d\xb7\xac\x77\x6b\x2f\x3f\x7a\x84\x7c\x00\x2b\x4a\x0c\
+\x35\x29\xd4\xd4\x8e\x99\x18\xb1\xf3\xfe\xe3\xea\x95\x7d\x78\x1e\
+\xb9\xda\x1f\xa2\x3d\xd4\x7c\xdb\xb6\x51\x62\x90\x2b\xdf\x73\x71\
+\xcc\x71\x23\xa0\x6e\x22\x9f\x43\xa7\xf4\xa6\x3d\x6e\xfa\x21\x85\
+\xd8\xa3\xa0\xc0\x13\x0f\x6d\xe3\x57\xff\xb9\x05\xd3\xb4\xd8\xb3\
+\x53\x70\xcf\x7f\xad\x07\xd5\x34\x09\x4a\xf9\xd7\x3b\xe3\xac\x19\
+\xf4\x8c\xf7\x4d\x41\xe8\x0b\x84\x0c\x10\x82\xb8\x32\x28\x59\xff\
+\x6c\x25\x83\x21\x8f\xfe\x66\x1c\x4e\x06\x20\xd7\xf1\xb3\x22\x67\
+\x4f\xb7\xa9\xba\x8d\x35\x84\xc9\xd3\xcb\xb7\xa7\x32\x6e\x21\xb5\
+\xea\xf4\xef\xba\x2e\xb6\x6d\x53\xab\x55\x59\x7c\xde\x14\x3a\x3a\
+\x3a\x23\x07\xaf\x99\x91\xd4\x1d\xce\x42\xce\x5e\xc4\xd0\x00\x61\
+\x04\xaf\x77\xbe\x58\xe1\xd7\xff\xbd\x15\xd3\x2c\x44\x89\x9f\x55\
+\x4f\x0d\xb2\xf2\xa9\x97\x02\x80\x35\xfd\x8b\x62\xb1\xcc\xc5\x6f\
+\x9e\x47\xa5\x3a\x80\x6d\xdb\x91\x2f\x10\xb2\x41\xf8\x5b\xd6\x3d\
+\x33\x98\x60\xc8\x51\x07\x00\xcd\x63\xd6\x3c\xee\xb8\xc0\xad\x0c\
+\x96\xf0\x05\x34\x70\xa0\xc1\xe6\xe7\xd3\x73\x2d\xe9\x19\xbe\x30\
+\xce\xb7\x6d\x9b\x7a\xbd\x8e\xa4\x9f\x0b\xde\xb8\x20\x26\x7c\xb4\
+\x6b\x11\x73\x46\x75\xf6\xb1\x32\x9c\x50\x1f\x8c\x3b\x5e\xec\xe7\
+\xd6\x7f\x7e\x02\x21\x0a\x14\x8b\x45\x0a\x85\x02\x85\x42\x81\x62\
+\xa1\x8d\x3b\x6f\xdf\x4c\xdf\x8e\x5a\xc4\x22\x04\x2c\x30\xef\xe4\
+\x59\x4c\x9d\x56\xa6\x5a\xad\xe2\x38\x4e\xd4\x8f\xa0\x03\xe0\xf9\
+\x0d\x07\xf0\x5c\x31\x7a\x01\xb0\x4f\x6e\x8e\x34\xcb\x08\xc2\x3b\
+\x23\xd3\xbb\xb6\x32\xbd\xec\x17\x36\xed\xc5\x71\xbc\x98\xa6\xeb\
+\x19\xbe\x30\xd6\xf7\x35\xbf\x46\xa5\x52\xe1\xec\xf3\xe6\xd0\xd9\
+\xd9\x13\xf7\xd4\x73\x01\x57\xd0\xc2\xce\xf8\xf7\x0c\x9f\xd7\xab\
+\x1e\xb7\xff\x78\x15\xae\x6b\xc6\x84\x1f\xb2\x80\xc0\xe4\xfb\xdf\
+\x79\x22\x10\x64\x3c\x32\x78\xfd\xf9\x53\xa9\x56\x2b\xd4\xeb\xf5\
+\x98\x19\x08\x41\xe0\x34\x04\xfd\xfb\x9d\xd1\x0b\x80\x2a\xfb\x33\
+\x6f\xb8\xc8\x11\x44\xec\xb9\xb0\x58\xbf\x76\x67\xaa\x6c\x1b\x7a\
+\xfa\x8e\xe3\xc4\x92\x3d\x7e\xe8\x55\xe7\xbc\x0b\xce\x48\xc4\xf5\
+\x96\x16\xbf\x9b\x99\x3e\x09\x09\x36\x08\x5f\xd7\x6b\x1e\xb7\x7c\
+\x63\x29\xbb\x76\x54\x22\xe1\xeb\xf9\xfe\x50\x98\xfb\xf7\xd6\xf8\
+\xfe\x77\x1e\x42\x7a\x22\xba\x16\xca\x64\xfe\x29\xaf\xa3\x50\xf4\
+\xa2\xb0\x30\x04\x81\xce\x02\x9b\x37\xed\x1f\x71\x00\x38\x42\x33\
+\x84\x24\x3b\x7f\x44\x6e\x18\x08\x02\xa4\x62\xdd\x73\xdb\x33\xab\
+\x7a\xe1\xb1\xd0\xee\x87\x00\xe8\xe8\x76\x99\x38\x71\x62\xce\x1c\
+\x43\xf9\x29\xde\x64\x08\x1a\x5c\x80\x5f\xde\xf1\x38\xdb\x5e\x1a\
+\xa0\x5c\x2e\xc7\x84\x9f\x55\x5e\x5e\xf1\xe4\x56\x66\xce\x59\xcb\
+\x5b\x2e\x5b\xa8\x55\xee\x0a\x9c\x7a\xc6\x64\x96\x3f\xde\x47\x5b\
+\x5b\x1b\xa6\xe9\xb3\x48\x98\x20\x12\x42\xb0\x77\xf7\x20\xc5\xa2\
+\x49\xa3\x71\x54\x27\x0c\xdb\x05\xec\x3f\x02\x00\x20\xc7\xcb\x55\
+\x31\xf1\x8b\x8c\xf8\xdb\x71\x1a\x3c\xbf\x69\x07\x3d\x3d\x3d\xb1\
+\x30\xcf\x30\x8c\xe8\x75\xd2\x04\x9c\x76\xe6\xd4\x40\x7b\xb3\x07\
+\x9a\x66\x7f\xbf\x44\x1f\x42\xf0\xea\xb6\x7f\xbf\x9f\x07\xef\x5f\
+\x47\x67\x67\x27\xc5\x62\x31\x56\xe4\x09\x85\x1e\xd6\x1a\xc2\xfd\
+\xe1\x65\xab\x79\xeb\x65\xe7\x68\xd7\x13\x9c\xb9\x70\x0e\x0f\xdc\
+\xb7\x91\x72\xb9\x1c\xeb\xd9\x0f\xc1\x7c\xd6\xa2\xf1\x7c\xe3\x3b\
+\x7f\xc2\x86\xf5\x7b\x59\xb3\xba\x8f\x07\x97\x6e\x61\xeb\x96\x03\
+\xac\x7f\x6e\x2f\x95\xa1\xdc\xda\x40\x43\x4a\x29\x5d\xd7\x89\x3a\
+\x45\x0f\x1c\xd8\xc7\xfe\xfd\x7b\x53\x6f\x3c\xf9\xe4\x83\x1a\x23\
+\xf8\x96\x9b\x6f\x5a\xb8\xfa\x08\x31\x80\x99\xa9\x6d\xc9\x77\x25\
+\x01\x50\xad\x54\x86\xa9\xe7\xcb\x98\x09\xa8\xdb\x35\xce\x5a\x74\
+\x9a\x1f\x8e\xc5\x66\xfe\x82\xf4\xf8\x42\x72\x92\x3e\xfe\xeb\xe5\
+\x4f\x3c\xc7\xd2\xfb\x9e\xa5\xbd\xbd\x1c\xd9\xfb\x30\xf2\xc8\x03\
+\x5f\x7b\x87\xe0\x63\x9f\xf8\x93\x00\x80\x4d\xb2\x99\x30\x69\x02\
+\xae\x57\xa3\x5a\xad\x52\x2a\x95\xa2\x50\x36\x64\x81\x03\xfb\x87\
+\x68\x2f\x59\x5c\xf4\x07\xf3\x78\xe3\x1f\xcc\xe5\x23\x7f\x73\x3e\
+\x0a\x89\xe7\x29\x9e\x7c\x6c\x1b\xdb\x8b\x6b\xd8\xda\xf3\x4f\x28\
+\xa7\x6d\x5d\xe5\x47\xdf\xfc\x60\xf0\xc9\xdb\xbf\xfa\x0f\x9f\x39\
+\x07\x7f\xd6\xf6\xfc\xea\xe1\x8c\x59\x07\x0b\x80\xda\x11\x31\x01\
+\x7d\x72\x2d\x0e\x35\x8a\x74\xb5\x04\x41\x16\x00\xd6\x3f\xb7\x2d\
+\x26\xec\x50\xf8\xa1\x23\xd5\x4c\xfa\xd8\xd8\xb6\x0d\xa2\xce\x89\
+\x27\xcd\x8d\x18\xa0\x39\x7c\x3c\xb9\x18\x85\x4a\x71\x8f\x5e\x81\
+\x7c\xe2\xb1\xd5\xfc\xf3\x37\xee\xa0\x5c\xee\x88\xd5\xf8\x75\xda\
+\x0f\x7d\x90\x10\x7c\x52\x36\xf8\xe8\xdf\xbc\x87\xe3\x8e\x1f\x9f\
+\xba\x07\xc7\xf5\x8c\x67\xdc\xb8\x32\x43\x83\x55\xda\xdb\xdb\x23\
+\xdb\x1f\x16\xad\x6c\xdb\xc1\x69\x88\xc0\xf7\x69\x02\xd6\x32\xe1\
+\xbc\x37\xcc\xe1\x29\xf7\x21\xb6\xb9\xab\x00\x86\x6e\xbe\x69\xe1\
+\xc3\xcd\x4f\xbe\xfc\x9c\x11\xef\x03\x28\x24\x28\x13\x21\xac\x0c\
+\x00\x88\x5c\x73\x20\x84\x60\xa0\xbf\x9a\xaa\xeb\xeb\x39\x6f\x3d\
+\xed\x6b\xdb\x36\xe3\xc7\x8d\xa7\xb3\xf3\xb8\x66\x66\x36\x63\x3e\
+\x81\x34\x00\x45\x0c\x8c\xbb\x77\xed\xe5\x96\x7f\xf9\x4f\x2c\xab\
+\x40\xa9\x54\x8a\xec\x7e\x98\x73\xd0\xb3\x8d\xf5\x7a\x9d\x4a\xa5\
+\xc2\xc0\xe0\x01\xfe\xf8\xcf\xde\xc4\x69\xa7\x9d\x92\x82\x5a\xf8\
+\xe9\x73\xe7\xbd\x8e\x47\x1e\xda\x10\x99\x01\xcb\xb2\xa2\xdf\x23\
+\xa5\x7f\x8f\x0c\x0a\x31\xb6\x6a\x3e\x7f\xf5\xf3\x04\x87\xd5\x07\
+\x70\xb0\x69\x6b\xf1\x91\x22\xe3\x86\x81\x60\xfd\xfa\xad\x29\xe1\
+\x87\x00\xd0\xb5\x30\xcc\x01\x14\x4a\xc5\x8c\x71\x88\xba\x35\xa6\
+\x65\xba\x77\xe7\x8e\xdd\x5c\xff\xf7\xdf\xc4\xae\xbb\x74\x77\x97\
+\x53\xda\x1f\xda\x7d\xc7\x71\x22\xe1\xf7\xf7\xf7\x73\xe1\x45\xa7\
+\xf3\xf6\x77\x5c\x9e\x99\x56\xf6\x5f\x0a\x26\x4c\x18\x47\xb5\x5a\
+\xa5\x5e\xaf\x53\x2c\x16\x63\xd1\x8c\xe7\x79\xac\x5c\xb1\x91\xcb\
+\xa7\x9e\x40\x72\x6e\x24\x3f\x92\xda\x77\x6c\x03\x60\x87\x7c\x86\
+\x6e\xf3\x75\x19\x1e\xb8\xc8\x1c\x09\x14\x9e\x51\x92\x98\xe0\xc3\
+\x3d\x8b\x86\x1b\x8d\x06\x53\x26\x9f\x80\xa0\xa0\x4d\xdb\xa6\x7f\
+\x66\x9e\xe7\xef\xff\xeb\x3a\x0e\xdf\xfc\xa7\x1f\x71\xe0\x40\x85\
+\xae\xae\xae\x58\x43\x47\xd2\x07\x09\x6d\xfe\xc0\xc0\x00\x27\x9e\
+\x3c\x95\x0f\x7d\xf8\x7d\x41\x5a\x39\xbd\xee\x51\xf8\x7b\x4e\x98\
+\x76\x02\xf5\x7a\x1d\xdb\xb6\x69\x34\x1a\xb1\xf4\xb5\xeb\xba\x3e\
+\x4b\x06\x8d\x33\x49\x20\x0d\xaa\xbe\x63\x1b\x00\xf1\x11\xc2\xad\
+\x18\x20\x3e\xce\xdf\xf3\xd2\x5e\x76\x98\x4b\x0f\x35\x51\x67\x80\
+\xae\x20\xf9\x43\x0b\xc1\xab\x0c\xd8\x39\x8e\xc3\x17\x3e\xfb\x0d\
+\x56\x3d\xbd\x9e\xee\xee\xee\x18\xed\x87\x40\x8b\xfe\x5e\x29\x6c\
+\xdb\xa6\x52\xa9\x60\x59\x8a\xbf\xfd\xf8\x47\x69\x6f\xeb\x8c\xfa\
+\x09\x45\x66\xd5\x53\xa0\x3c\x23\x62\x80\xb6\xb6\xb6\x08\x00\x8d\
+\x46\x23\xc8\x12\x0a\x04\xc5\x14\xfd\x47\x66\xf4\x58\x06\xc0\x56\
+\xf9\x30\xf3\xcd\x77\x1d\x94\x09\xd0\x8f\x4a\x99\x0d\x00\x3d\x04\
+\xd3\x41\xe0\xa7\x07\x0a\x5a\x08\x48\xcb\x78\x3f\x84\xc2\xed\x3f\
+\xbd\x83\x47\x1f\x59\x49\x4f\x4f\x4f\x4a\xf8\x49\xbf\x23\x14\x5a\
+\xa5\x32\xc4\xf5\x9f\xfb\x18\xe3\xc7\x4d\x4a\xf9\x1b\x59\x1c\x57\
+\x2c\x96\xa3\x7c\x85\x1d\x2c\x8b\xac\x94\x8a\x00\xb0\x73\xfb\x6e\
+\xad\x7d\x9e\x18\x83\x39\x2a\x77\x7e\xc7\x87\x80\xaf\xe0\x4f\x0b\
+\x77\x1a\xd0\x33\x22\x01\x50\x51\x7b\x82\x8c\x9c\x38\x08\xc1\x37\
+\xe3\xf0\x90\x01\x1c\xc7\x89\x1e\xc3\x2c\x9a\x1e\x83\x87\xe7\xa5\
+\x24\x98\x96\xbe\xf5\xe7\xeb\xc2\xf9\xf7\x9f\xdc\xce\x2d\xff\xfa\
+\x43\x3a\x3b\x3b\x33\x43\x3d\x99\xe8\xcd\x0e\x69\x5b\x29\xf8\xf1\
+\x8f\x7e\xce\x57\x6e\x5a\x10\x38\x88\x32\xf7\xba\x02\x98\x31\x7d\
+\x66\x64\xaa\x1a\x8d\x46\x74\x8d\xd0\x84\x6d\xdc\xb8\x39\x00\x6f\
+\x9a\x41\x76\xca\x15\x39\xbf\xe0\xee\x6d\x40\x6f\x10\x11\x4c\x00\
+\xce\xa2\x39\x4f\xe0\xb9\x41\x85\x2a\xdf\x3f\x87\xb0\x0b\xe5\x45\
+\xa0\x72\xc4\x00\xb0\x53\xad\x40\xe2\x60\xd1\x3e\x4c\xd5\x30\xfe\
+\x4c\x7a\x4d\x0d\x71\x1c\x27\x12\x4e\x38\xea\x37\x8c\x00\x42\x10\
+\x48\x29\xe2\x31\x78\x8b\xeb\x08\x60\xe5\xca\xa7\xb9\xe5\xdb\xff\
+\x16\x6b\xe9\x4e\xc6\xf9\x59\x45\xa8\xd0\x24\x3c\xf6\xe8\x0a\xbe\
+\xfa\x0f\xff\xc4\x27\x3f\xf9\x09\x84\x30\x5b\x5e\x71\xfd\xfa\x17\
+\xa2\xdf\x62\xdb\x76\xc4\x64\x61\x08\x3b\x7f\xfe\x29\x18\x81\x09\
+\xd0\x81\x34\xa8\xb6\xe1\x71\x30\xcb\x1b\xde\xbd\x07\xb8\x37\xd8\
+\x81\xcb\xa7\x03\x6f\x28\x97\x3b\x2f\x06\x06\x68\x8e\x3f\xbb\x0f\
+\x7f\xc5\xf6\xea\xcd\x37\x2d\x7c\xf2\x55\x61\x80\xaa\xda\xc3\x26\
+\xef\x77\xcc\x37\xdf\x79\x90\xe5\xe3\x90\x01\x64\xcc\xc9\xd3\x87\
+\x62\x25\x4d\x80\xeb\xba\x48\x8f\x18\x8d\xe6\x05\x7e\x00\x2b\x96\
+\xaf\xe0\xaf\xff\xfa\x6f\x91\x52\xd1\xd9\xd9\x79\x50\xc2\x0f\x69\
+\xdb\xf3\xfc\x99\x46\x8a\xc5\x22\x3f\xbb\xfd\x4e\x16\x9c\x71\x16\
+\x97\x5f\x7e\x59\xcb\x5f\xa4\xa4\x19\x01\xd6\x71\x9c\xe8\x5a\x21\
+\x00\x4a\x1d\x2e\xdb\xe4\xbd\xd4\xe9\xc7\x55\x8a\x7e\x5e\x64\x8f\
+\x5c\xc7\x6e\xb5\x0e\xc9\xa1\x14\x8b\xee\x7e\x09\xb8\x6d\xfd\xba\
+\xbb\x6f\xbb\xf9\xa6\xaf\x1e\x5d\x13\x00\xf0\xdf\xce\x07\x78\xd4\
+\xfd\x47\xda\x44\x0f\xdd\x62\x2a\x02\x41\xa7\x98\x82\x89\x89\x89\
+\xc0\x10\x7e\x19\x66\x92\x58\x8c\x25\x2c\x0c\x24\x15\x6f\x53\x24\
+\x7c\xdb\xb6\x23\x00\x84\x4e\x60\xd2\x04\xec\xd8\xf7\x02\x7b\xd5\
+\xc3\x99\xeb\x83\xe8\x2d\x66\x8d\x01\xb8\xf6\xda\x2f\x51\xad\xd6\
+\x22\xe1\xeb\xc2\xd5\x41\x16\x26\x9d\xf4\x76\xeb\xf0\x3d\xa6\x69\
+\x52\x28\x14\xf8\xdc\xe7\x6e\xa0\xf3\xc4\x15\x14\x66\xaf\xa4\xa6\
+\xf6\x45\x83\xc0\x8d\xa0\xfc\x54\x14\x26\x8f\xed\xdf\x13\x63\xad\
+\x90\x4d\x42\x00\xac\x71\xbe\x4a\xc9\xab\x50\x55\x1e\x75\xe5\xd1\
+\xc0\x9f\x5c\x5a\xc6\xc6\x2c\x1c\xa3\x4e\x60\x94\x64\x51\xcf\x62\
+\x28\xc1\x76\x08\x04\x6e\x44\x75\x37\x4b\xf8\x2d\x18\x1b\x84\xdf\
+\x7e\x51\x12\x06\xd3\x2e\x00\xe7\x8e\x49\x91\x96\x87\x79\xf4\x50\
+\x60\x61\x1c\x1d\x3a\x85\x0f\x3c\xfc\x4b\xde\xe8\xfc\x1c\xcf\xf0\
+\x27\x5d\xf6\xb4\x5b\x17\x0a\xc3\x39\xa0\xf8\xe7\xf7\x5b\xf4\x6d\
+\x3b\x2e\xb2\xfb\x61\x6a\x36\x04\x40\x72\x34\x71\x08\x82\xe4\xac\
+\x20\x96\x65\xd1\xd6\xd6\x46\x7f\x7f\x3f\xd7\xbc\xef\x7b\x5c\x7b\
+\x7b\x83\xee\x29\xe0\x2a\x19\x85\x72\x05\x61\xe0\x62\xb2\x66\x65\
+\x0d\x21\xa6\xc7\xc2\x4a\x7d\xdc\x82\xd5\xe6\x65\xce\x5a\x7c\xcc\
+\x97\x83\xd3\x9e\x87\x1a\x76\xf1\xb7\xf0\x5c\xcf\x04\x19\x4b\x96\
+\xe8\x99\xb3\x70\xd7\x47\xdd\x6c\xdb\xea\x52\xe9\xf7\x35\x2f\x14\
+\xb8\xde\xe0\x5d\x54\x8a\xff\xbe\xc9\x60\xfb\xfa\x4e\x4a\xa5\x52\
+\xa6\xdd\x0f\x7b\x0c\xea\xf5\x3a\xf5\x7a\x9d\x6a\xb5\x4a\xad\x56\
+\x8b\xe2\xf7\x10\x70\x21\x10\x8b\xc5\x22\xe5\x72\x19\x59\x3d\x9e\
+\x1f\x7e\xba\x80\xac\x0b\x0a\xc2\xa4\x20\x8c\x60\x37\x29\x08\x78\
+\xe9\x05\x99\x79\xad\x70\x9f\xbd\xc8\x4b\x8c\x51\x3a\xba\x10\x30\
+\x8e\xf4\x05\x54\xc6\x0c\xa0\x49\x60\x4c\x9f\xaf\x22\xe1\x87\x9a\
+\x92\x04\x42\x28\x7c\xc3\x30\x28\x28\x93\x17\x56\x7a\x7e\x45\x5f\
+\x08\x0d\x04\x7e\x32\xf5\xb6\xcf\x4a\x1e\xfa\x45\xb3\xac\x9b\x4c\
+\xf1\x46\xdd\xc4\x41\x69\x79\x68\x68\x88\xc1\xc1\x41\x86\x86\x86\
+\xa8\x54\xfc\xa6\x8e\x66\xdc\x2e\x23\x16\x28\x16\x8b\xb4\xb7\xb7\
+\xb3\x79\x79\x17\xff\xf5\x35\x41\x49\x18\x14\x85\x49\x51\x98\x58\
+\x42\x20\x1d\xc5\xee\x4d\xc5\x54\x78\xa9\xfb\x30\x52\xa9\x96\xab\
+\x1c\x8c\x3a\x00\x90\xa0\xbb\xac\xe9\x13\x8d\x22\x4c\x99\xed\xc4\
+\xf2\x00\x49\x16\x08\xe9\x58\x08\x81\x29\x4a\x6c\x5f\x67\x60\x08\
+\x03\x03\x81\x21\xfc\x1f\x62\x01\x6b\x7e\x29\xf9\xdd\x8f\xda\x52\
+\xdd\xc4\xc9\xce\x22\x5d\xf8\x07\x0e\x1c\x60\xa8\xb6\x9b\xfd\xfb\
+\xf7\x33\x38\x38\x18\x03\x81\x6e\x2a\x0a\x85\x02\x6d\x6d\x6d\x94\
+\xcb\x65\x1e\xfc\x49\x27\xcb\x7e\x6a\x04\x20\xf0\xcd\xd9\xf3\x6b\
+\x1a\x1c\xd8\xde\x16\xbb\x6e\x6c\xa0\xea\x24\x87\xf1\x33\x83\xa1\
+\xea\x39\xf3\xa6\x8d\x3e\x00\xa8\x61\x96\x82\x50\x20\x0d\x41\xb9\
+\xc7\x8d\x99\x81\x24\x0b\xe8\x13\x42\x98\xa6\xc9\x53\xbf\x36\x62\
+\x5d\x7e\x86\x10\x58\x06\xac\x79\x48\xcb\x0d\x26\xda\xc8\x43\x4d\
+\x0c\x85\x5f\xa9\x54\x18\x1c\x1c\xc4\xea\xea\xe3\x53\x3f\xd8\x8d\
+\x28\xef\xa0\xbf\xbf\x9f\x4a\xa5\x92\x1a\xf5\x13\xb2\x4f\xe8\x0f\
+\x94\xdb\x3b\xf8\x8f\x1b\x2d\xd6\x3d\xea\x51\x0c\x9a\xcb\xd6\x3c\
+\xea\x50\x30\xdb\x52\xa9\xe5\x50\xfb\x27\xcc\x6a\xf8\xfd\x2f\x09\
+\x45\x18\x35\x0c\x90\x1e\x76\xa9\x52\x93\xc6\x47\x0b\xae\xa8\xe6\
+\x68\x79\x47\x19\x9c\x71\x81\x13\xdd\xec\x24\x13\x84\x37\x52\xef\
+\xb1\xdb\xb1\xce\x62\xf3\x73\x0e\x66\xc8\x02\x08\xa4\x12\xfc\xf9\
+\x57\x4c\x2e\xba\xca\x49\x65\x16\xf5\x9a\x7e\x68\xf3\x2b\x95\x0a\
+\x9e\xb9\x97\x6b\x6f\xf5\x98\x3a\xa7\xc8\x27\xbf\xe7\x50\x73\x7d\
+\x16\x08\x7d\x82\x7a\xbd\x1e\x1b\xff\x17\x46\x04\x6d\x6d\x6d\x58\
+\xa2\x93\x6f\x5e\x63\x31\xb8\x4b\x60\x09\xc9\x63\xbf\xb4\x28\x16\
+\x9a\x26\x40\xaf\x01\x34\x1a\x0d\x66\xbf\xde\x6d\xce\x12\xa0\xb2\
+\x4b\xd7\xa3\xc8\x09\xcc\x86\x47\x72\x97\x80\xa7\x60\xda\x49\x5e\
+\x2c\xd4\xcb\x2b\x0c\x45\xa3\x6f\x64\x81\x65\xbf\xf0\x7c\xfb\x2f\
+\x7c\x00\x08\x04\x2e\x82\xff\x71\x33\x9c\xff\xf6\x46\x2c\xb7\xa0\
+\x0b\x3f\x72\xfa\xec\x01\xae\xfe\x92\xc3\xb8\xd7\x41\x03\xc9\x09\
+\xf3\x4a\xfc\xd5\xd7\x6b\xd4\x9d\x01\x2a\x95\x4a\x4b\xa7\xb0\x50\
+\x28\xd0\xde\xde\x8e\x5b\xed\xe4\x86\xf7\xbb\xac\x7a\xb2\xc6\xb6\
+\xb5\x65\x8a\xc5\x62\xc4\x00\x7a\x27\xb3\xe3\x38\x4c\x9e\xe7\x44\
+\x53\x48\x46\x2c\xa0\xd4\x68\x33\x01\xaa\xb5\xe0\x95\x8a\x2d\xd1\
+\x10\xce\x9d\x31\x7b\xa1\xc2\xb0\xdc\x94\xe6\x26\x9d\xc0\x90\x05\
+\x0a\x56\x91\x65\xb7\x99\xe0\x05\x2d\xa0\x01\x13\x08\x04\xca\x34\
+\x78\xcf\x67\x60\xf2\xec\x5a\x14\x7f\xeb\x00\xa8\xd5\x6a\x54\x6b\
+\x43\xbc\xfd\xe3\x35\x16\xbe\xd5\xc0\x56\xfe\xca\x5f\x0d\x25\x59\
+\x74\x69\x1b\xef\xbe\xb6\x42\xa5\x32\x14\x8b\x0c\xf4\x01\xa0\xba\
+\x53\x58\x2e\x97\xd9\xbd\xb5\x8b\x9b\x3e\x54\xa2\xdc\xd6\x45\xb1\
+\x58\x8c\x85\x9a\xa1\xf6\x9b\xa5\x06\x27\xbd\x41\xa1\xcf\x19\x72\
+\xf4\x0d\xc0\x11\xf6\x01\xe2\x73\xf1\xeb\xc7\xe2\x93\xa6\x48\xa5\
+\xe8\x98\x24\x38\xe5\x3c\x3b\x93\x05\xf4\x5c\x7d\xc8\x00\x96\x65\
+\xe1\x0d\x75\x70\xcf\xf7\x1b\x51\x38\xe8\x3b\x85\xfe\xd6\x39\x51\
+\xd0\xfb\x1f\x92\xc9\xb3\x6a\x31\xcd\x0f\x4b\xbc\xe7\x5c\x55\xe5\
+\xcd\x1f\x14\xd8\xca\xc3\x56\x2e\x0d\xe5\x05\x40\x50\xbc\xed\xfd\
+\xed\x5c\xf2\xfe\xfe\x88\x05\xc2\x4e\xdf\x2c\x10\x94\x4a\x25\x3a\
+\x3b\x3b\x69\x37\x27\xd2\xd1\xd1\x99\x02\x40\xc8\x42\xf3\x2f\x6c\
+\x60\x96\xfc\xf5\x82\xd2\x93\xc5\x8c\xe2\x30\xb0\xe9\x08\xaa\xf4\
+\xfc\xd8\x8a\x88\x12\x1b\x4a\xf0\x96\xf7\x36\xd3\xbd\xc9\x68\x40\
+\x37\x01\xa1\x1f\x60\x59\x16\x77\x7c\x1d\x06\xf7\x35\x73\x02\x42\
+\xf8\x3c\xa0\x94\xa2\x34\xce\xe4\x53\x3f\x91\x4c\x9e\x55\x8f\x98\
+\xa0\x5e\xaf\x33\xf5\xf4\x2a\x57\x7e\xca\xc0\x13\x12\x27\x58\xc1\
+\xcb\x7f\xf4\x77\x4f\x28\xde\x7b\x5d\x3b\x27\xbe\x61\x20\xea\xf5\
+\x0f\xa3\x02\xdd\x14\x84\x4e\x61\xa9\x54\xa2\x5c\x2e\x47\x7d\x80\
+\xfa\x08\xa6\x10\x00\x67\x5e\xea\x06\xbe\x4f\xd6\xc4\xf1\xa3\x28\
+\x11\x94\xdd\x9c\x9d\x36\x03\x4d\x5b\xe8\x3f\xba\x0a\x4e\x3a\x57\
+\xd1\xde\xed\xc4\x4a\xbf\x49\x10\x24\x59\xc0\xa9\xb4\xf1\xdd\x2f\
+\x54\x31\x82\x7c\x80\x11\xa6\x74\x01\xa9\x14\x6d\x13\x0c\x3e\xf2\
+\x4d\x0f\xc3\xf2\x05\x68\x76\xd6\xf8\xe0\x37\x15\xa5\x1e\x70\x14\
+\x38\x28\x1c\x64\xf0\xe8\x03\xa1\xa1\x3c\x5c\x21\xf8\xf8\xbf\x16\
+\x99\x76\xca\x40\x54\xdf\xcf\x9a\x0b\x40\x07\x63\x56\xfc\xdf\x68\
+\x34\x10\x96\xcd\xa9\x17\x69\xbf\x39\xb4\xfb\xea\x68\x1b\x80\x23\
+\xc6\x00\xf9\xab\x04\xab\x98\xe0\x7d\xfa\x0f\x6f\x8c\xd1\x61\x72\
+\xd1\x95\x76\xae\xf0\x93\x2c\xe0\xdb\xe1\x36\x96\xdf\x59\xe4\xc1\
+\x7b\xea\x18\x22\x3e\xdd\x4c\x38\x23\xcf\xa4\xf9\x06\x7f\xf7\x03\
+\x49\xa1\xc3\xe6\x23\xb7\x28\xc6\xcf\x30\x70\x51\xb8\xc8\x8c\x5d\
+\xe1\x29\x7f\xcd\xe0\x62\xa7\xc9\x75\x3f\x2e\x50\x1e\x3f\x14\x45\
+\x04\x21\x08\x74\xff\x44\xaf\x20\xea\x71\x7f\xa8\xfd\xe7\xbe\xb3\
+\x41\xb1\x43\x65\x4e\x1e\xcf\x68\xf6\x01\x62\x70\x50\x2a\x33\x02\
+\x88\xc0\xa0\x14\xb6\x14\x9c\x77\x85\x97\xcb\x00\xba\x1f\x10\x02\
+\xa0\x50\x28\x50\x34\x3a\xb8\xe5\x63\x2e\x7b\xb6\xc9\x20\x24\xf4\
+\x6b\x10\x7a\xaf\xd0\xcc\x73\x0d\x6e\x78\xc0\xe4\xa4\xf3\x0d\xbc\
+\x60\x06\x5f\x0f\x89\x54\x0a\x4f\xf9\x5a\x19\xda\x67\x4f\xfb\x5e\
+\x6d\x3d\x05\xae\xfd\x1e\x88\xe2\x60\x26\x00\x74\x81\x67\x09\xbf\
+\xde\xa8\x73\xce\x15\x32\x97\xf6\x47\xa5\x13\x98\x9f\xf8\xd1\x9c\
+\x3f\x4d\xf3\x9b\x02\x51\x4c\x5f\x60\x30\x63\x7e\x23\xd3\x17\xc8\
+\x8a\x06\x42\x6f\xdc\xa8\x77\x73\xc3\x9f\xd8\xec\xdb\x21\xa3\x19\
+\x46\x0d\xad\x1b\x59\x02\xdd\x13\x45\x6c\x29\x48\xdf\x07\xd1\x56\
+\xf0\x51\x24\xd6\x0e\xf3\xb7\x13\x17\xb4\x73\xed\xf7\x24\x35\x7b\
+\x28\xe6\x0b\x64\x25\xad\xf4\x63\x8e\xe3\x70\xfa\x1b\x5c\x4e\x39\
+\xdb\x4a\x65\x44\x46\x82\xf6\x1f\x61\x06\x50\x99\x46\x21\x99\x12\
+\xd6\xc1\xe0\x29\x45\x5d\x1a\xbc\xe7\x13\x2e\xae\x1b\x67\x81\xe1\
+\x98\xa0\x54\x2a\xb1\x6f\x6b\x99\x2f\xfc\x71\x8d\xfd\x7d\x32\x62\
+\x01\x43\x9b\x7e\x36\xbf\x2b\x81\xd4\xa2\x54\xc9\x6d\xf1\x05\x5d\
+\x7c\xe0\x0b\x0e\x8d\x46\x2d\x36\x39\x54\x56\x0d\x43\x07\xee\x82\
+\x4b\xbc\x98\x23\x3c\xd2\x36\xe3\x55\x20\xff\x84\x1f\xd0\x9a\x05\
+\x5c\x14\xa7\xbd\xd5\x64\xe1\x9b\x9c\x94\xf6\xeb\x2c\xa0\xd7\x06\
+\x74\x47\x6c\xcf\x0b\xed\x7c\xf6\x4f\x07\x58\xbd\xbc\xe1\x57\x07\
+\xc3\xfc\x40\xe0\x1f\x84\x59\x43\x23\xe8\x4d\x88\xaa\x88\x42\x07\
+\x4c\xf3\x7d\xfa\xac\xc6\x97\xbc\xab\xcc\xb4\x33\x87\x32\x3b\x98\
+\x93\x55\xbf\x30\x74\xfd\xf7\xaf\xd7\xd8\xb5\xdd\xcd\x05\xd6\xa8\
+\x05\x40\xa6\x19\x50\xf1\x88\x20\xb4\xb3\x5e\xa0\xfd\xe1\xa3\x2d\
+\x05\xef\xbd\x5e\xa1\x44\x3c\x22\xc8\xaa\x10\xea\x13\x32\x85\x3e\
+\xc1\x9e\xe7\x3a\xb9\xf1\xcf\x86\xf8\xc5\xad\x95\x20\x53\xe8\x0f\
+\x56\x37\x45\x72\xec\xb0\x81\x29\x4c\x4c\x61\x60\x62\x36\xa7\xb1\
+\x10\xcd\xf1\xc3\x61\x85\x71\xd5\xaa\x2a\x7f\x79\xd5\x5e\x5e\x78\
+\xaa\x2d\xe5\xf0\x65\xd5\x2e\x42\xc7\xb5\xd6\xd7\xc6\x17\xde\x53\
+\xc1\x69\xc4\x39\x47\xbc\x36\x18\x20\x1d\x11\xe8\xf6\x35\x46\xff\
+\x09\x5f\xe0\xf8\x39\x06\x57\x7d\xac\x41\xc3\x69\xc4\xfa\x05\x75\
+\x46\x48\x96\x89\x43\x16\x28\x16\x4b\x30\xd8\xc3\x4f\x3e\x23\xf9\
+\xfc\xfb\xfa\x59\xf7\x84\x83\x3f\x1e\xc7\xc4\x12\x06\x96\x48\x0e\
+\x50\xd7\xa6\x88\x10\xc1\x2c\x02\xc2\xc0\x14\xb0\x6b\x87\xcb\x4d\
+\x5f\xdc\xc3\xb5\x57\x0e\xb2\x7f\x75\x27\x45\xab\x94\xe9\xf1\x27\
+\xa9\x3f\xfc\x6e\x86\x61\xb0\x7b\x7d\x81\x6f\x7d\xa4\x8a\xf4\x54\
+\xee\xf8\x88\xa3\xb5\xbd\x2a\x93\xd6\x28\x6d\x8a\x78\xa5\x40\x89\
+\xe6\x78\x98\x78\x48\x08\x9e\x50\xb8\x4a\x61\x20\xb8\xe2\x1a\xc1\
+\xfd\xb7\x39\xf4\x6d\x8d\x4f\x11\xa3\x8f\xe2\x09\x8f\xeb\xf9\x81\
+\xa6\x89\xe8\xe0\xb9\x7b\x1d\x3e\xfb\xfb\x21\x4e\x7d\x33\xbc\xe3\
+\x23\x65\x4e\x3b\xbb\x48\xb1\x18\x5f\xfe\x39\xa4\x67\x23\xe8\x2f\
+\x30\x11\xac\x7a\xdc\x66\xd9\x6f\x6b\x3c\xfa\x73\x8f\xea\xd6\x36\
+\x0a\x56\x73\xce\x00\x20\xea\x17\xcc\x5b\x9b\x20\xee\xab\x18\x2c\
+\xbf\x53\xf0\xbb\x5b\x1b\x5c\xf8\xe1\x91\x35\x4f\x90\x75\xa4\x75\
+\x5f\xc4\x2a\x02\x5a\x99\x56\xf8\xab\xee\x09\xfc\x30\x4c\x08\x15\
+\xd8\x5c\x3f\x94\x73\x95\xa4\xea\x19\xfc\xc5\x4d\x2e\x5f\xfc\xe3\
+\x46\x2c\xd6\xd6\xa9\x3f\x0b\x04\xa1\x39\x88\x7c\x04\xcf\xe4\xb9\
+\x5f\xbb\x3c\x7b\x9f\x4d\xc7\x84\x0a\xf3\xce\x37\x98\x31\xd7\x62\
+\xe6\x7c\x13\x65\x81\x70\x14\xa2\x6e\xb2\x6f\x9f\xc3\xd6\x75\x1e\
+\x2b\x1f\x73\x19\x7c\xd1\xc0\xa8\x15\x31\x8d\x76\x8a\x05\x33\xd6\
+\x58\xa2\x33\x8f\x5e\x76\xd6\xbf\x47\x92\xa1\x40\xf0\xfb\xef\x4a\
+\x2e\xf8\xb0\x7a\xed\x00\x20\x1f\x0c\xf1\x15\x74\x85\xe6\x0b\x08\
+\x25\x70\x85\x0c\x2c\xb0\x62\xce\x1b\x2c\xde\xff\x79\x97\xff\x7b\
+\x7d\x03\xa5\x14\x96\x65\x45\xd4\x9a\x9c\x3f\x38\x09\x82\xc8\xce\
+\x05\xef\x95\xd2\xc2\xde\xe1\xb1\xfa\xe7\x1e\xab\x24\x28\xc3\x43\
+\x09\x89\x1f\xf8\x7b\x3e\x0f\x08\x0b\xc3\x28\x52\x30\x0c\x0c\xcb\
+\x88\x4c\x4b\xb2\xb9\x44\x17\x7c\x2b\x00\xe8\xe6\xea\xaa\x2f\x5a\
+\x39\x6b\xaa\x8f\x62\x00\xe4\xb2\x40\xb4\xda\xb6\xd0\xe8\x5f\x22\
+\x30\x30\x14\xfe\x1a\x80\xca\xa0\x01\xbc\xe9\x43\x05\x10\x0e\xff\
+\xef\x7a\x95\x32\x03\x59\x20\xd0\xb5\x33\x0b\x08\x4a\x59\x31\xed\
+\x54\xa6\x02\x33\xbe\x88\x54\xde\xe2\x14\xfa\xe8\x21\x7d\x50\x49\
+\xf2\xba\x49\x3f\xe1\xc2\xf7\x1a\x2c\xb8\xcc\xa0\x9e\xbb\x40\xfc\
+\x28\x67\x80\x26\x18\x82\x7f\x15\x20\x54\xc0\x00\x22\xd0\x7e\xdf\
+\x07\xf0\x57\x04\x55\x18\x42\xe1\xfa\x69\x44\xde\xfc\x41\x8b\xad\
+\x6b\x1d\xee\xfd\x51\x53\xbb\xb2\x16\x90\xc8\x5a\x2e\x26\x14\x6a\
+\x08\x82\x56\x6b\x0b\xe9\xef\xd5\x05\xd9\x6a\x71\x0a\x4f\x7a\x4c\
+\x9c\x26\xe9\x7b\x31\xf0\x26\xb4\xcf\xf6\x3c\x8f\xe3\xa7\x49\xde\
+\xfd\xd9\x92\x56\x05\x1c\x19\xa5\xe0\x57\x37\x15\x9c\x91\x11\xd4\
+\x7b\x03\xfc\x5c\x00\x78\xc8\x28\x1f\xe0\xe0\xe1\xe0\xe7\xe5\x6d\
+\xa5\x78\xdf\x97\x2d\xce\xbe\x2c\x3e\x4e\x30\xaf\x7a\xa8\x6b\x65\
+\xde\xd4\xea\xad\x96\x97\x4d\x6a\x78\x32\xcd\xab\x77\x18\xbd\xeb\
+\x2f\x4d\xbe\xff\x74\x17\x27\x9f\x13\xff\x4e\x8e\xe3\x60\x14\x3c\
+\xae\xfe\x6a\x81\xf2\x44\x3f\xca\xf1\xa3\x9e\x64\x54\x34\xca\x01\
+\x40\x0a\x00\xe9\xca\x60\x33\x39\x44\x94\xa7\xf7\x14\xb8\x61\xa5\
+\x4e\x29\xdc\x02\x5c\xf3\xdd\x02\xe7\x2d\xf1\x70\xbd\x34\x08\xb2\
+\x72\xf4\x7a\x6b\x79\x16\x55\xe7\x2d\x2c\x95\x9c\xad\x24\x39\x40\
+\x35\xdc\xaf\xfc\x5f\x16\x57\x7f\xbe\x0d\x5b\xc1\x67\x7f\xda\xcd\
+\xa9\xe7\xca\xd8\x77\x78\xf3\x07\x4d\x4e\x7f\x9b\x19\x8c\x5f\x90\
+\xcd\x15\x05\xd5\xc8\x30\x04\xaf\x6a\x57\x70\x7e\x7e\x40\xc6\x33\
+\x82\x4a\x05\xd5\x3a\x3f\x24\x74\x03\x26\x70\x94\xa2\x61\xc2\x35\
+\xb7\x96\xf8\xf8\xb7\xa1\xd8\xee\xa4\x86\x8d\x65\xed\x79\x60\xd0\
+\x99\x22\x6b\xc9\x99\x64\x6c\xaf\x83\x4c\x09\x87\x0f\xff\x63\x91\
+\x3f\xff\x7c\x3b\xb6\xf0\xa8\x2b\x17\xd1\xa9\xf8\x9b\x5b\xda\xe9\
+\x38\xce\xff\x8c\x49\xb3\x15\xef\xe8\x2d\xfa\xbd\x06\xc1\x6f\x49\
+\x9a\x81\xd7\xa0\x0f\x90\x9c\xd3\x43\x80\x02\x29\xe2\xee\xa2\x08\
+\x9c\x42\x30\x40\x09\x10\x1e\x60\x46\x05\x9b\x45\xef\x2c\xf2\x8f\
+\x0b\x3d\xbe\xf5\xd7\x36\xab\x1f\x69\x3a\x78\x3a\xb5\x1f\xd4\x77\
+\xca\xf1\x19\xf2\x96\x9e\x93\x52\x32\x69\x96\xe0\x53\x3f\xee\x64\
+\xf6\x02\x93\xba\x72\xb5\x26\x57\xe8\x9c\x69\x72\xc3\xdd\x65\xbe\
+\xf0\xf6\x0a\x1f\xba\xa5\x1d\xb3\xc3\x67\x30\x37\x30\x6d\x61\xf2\
+\x6b\xa4\x94\x83\x8f\x5a\x56\x42\xa5\x25\x81\x12\x32\xc8\x02\xf8\
+\x4c\xe0\xe3\xa3\x09\x02\x25\xfc\xb8\x41\x29\xc3\x1f\x51\x34\xcb\
+\xe4\x73\x77\xb6\x73\xdb\x8d\x36\x77\x7c\xcb\xc5\xb1\x5b\x2f\x15\
+\x9f\x95\xb0\x19\xee\x51\xdf\xad\x22\xbc\xf3\x9a\x12\xef\xbe\xb6\
+\x9d\x62\x97\xa2\xae\xbc\x40\xa8\xf1\x7e\x87\x9e\x53\x05\x5f\x59\
+\xd1\x81\xd9\x25\x68\x84\x7d\x07\x2a\xdd\x0f\xf8\x9a\x08\x03\x87\
+\xcb\x07\x84\x03\x3a\xc3\x0e\x1e\x43\x48\xbc\xc8\x32\x05\x8b\x3a\
+\x09\x19\x44\x0e\xbe\xe0\x95\x08\x16\x67\x55\x12\x69\x08\xae\xba\
+\xae\x8d\xcb\x3f\x2c\xf9\xd9\xff\xb6\xf9\xcd\x0f\x5c\xec\x5a\xeb\
+\xf5\x7f\x5b\xad\x28\x9a\xc5\x06\x5d\xe3\x05\x67\x5f\x5e\xe0\xaa\
+\x4f\xb5\x33\x71\x8e\x88\x9c\x52\x37\x34\x5d\x2a\xed\xd0\xa9\x2e\
+\x68\xe0\x05\x35\x0e\x46\xa4\xf6\x1f\x35\x06\xc8\x4a\x0a\x85\x47\
+\xb2\x40\x10\x86\x8c\xd1\x7a\x9b\x4a\x22\x45\xb0\x60\xbb\x32\xf0\
+\x80\xd2\x64\xc1\xd5\xff\xd0\xce\xd5\x37\x28\x7e\x73\xab\xcd\x5d\
+\xdf\x6d\xf0\xd2\x06\xd9\x72\xf1\xe7\x56\xa0\x50\x4a\x31\x7e\xba\
+\xc1\x1f\xfe\xcf\x36\x2e\xff\x48\x3b\xc5\x6e\xdf\x86\xdb\xca\xef\
+\x1c\xd2\x05\xab\x92\x4b\x42\x86\xc9\xa0\x28\xc1\x15\x3c\x2a\x39\
+\xa2\xb4\xff\xa8\x9b\x00\x91\x72\x07\xd3\x20\x68\x36\x90\x6a\x26\
+\x00\x03\x19\x36\x94\x0a\xe5\x8f\x3e\x56\xfe\x9c\x21\x46\x49\xf0\
+\xd6\xbf\x6a\xe3\xb2\x8f\xb6\xb1\xe2\xb7\x0e\x2f\xae\x71\x59\xfd\
+\xb0\xc7\xce\xe7\x5d\xb6\x6d\x94\x5a\x55\x2e\x2e\x74\xc3\x54\xb4\
+\x75\x08\xce\xb8\xa8\xc8\xc2\x4b\x0a\x9c\x71\x71\x91\xc9\x73\x04\
+\x46\x09\xbc\x48\xe3\x7d\x21\xea\x45\x2b\x3d\xac\x23\x63\x91\xf8\
+\x70\xc5\xc0\x50\xf3\xe5\x08\xeb\x0a\x18\x11\x95\x89\xa6\x73\x18\
+\x07\x81\x08\xa9\x3f\x3c\xab\x82\x35\x40\x84\xef\x29\xf8\x0c\x80\
+\xbf\x60\x7b\x50\xc4\x31\x54\xb3\xa8\x73\xda\xa5\x16\x67\x5c\x6a\
+\xb1\xe4\x63\x7e\x3d\x5f\x36\x24\x6b\x1f\xf3\x62\x8e\x68\x90\x67\
+\x62\xd2\x4c\xc1\xc4\x99\x66\xac\x4a\xe9\xa1\x68\x84\x02\x0f\xcb\
+\xd5\x61\xae\x42\x35\x2b\x9a\x2a\x33\xd7\xa1\xf5\x3f\x64\x08\x5f\
+\x8d\x01\x20\x3e\xbd\x5b\x16\x08\x50\xbe\x86\x1b\x18\x78\x08\x8c\
+\x28\x81\x84\xbf\x10\x5c\x60\x06\x3c\x04\x66\x90\x3f\x08\x9b\x3a\
+\x0c\x84\x9f\x52\x0e\xfe\x4e\x00\xa2\x20\x38\xf1\x8d\xa6\xff\xe9\
+\xc1\xba\x2f\x2a\x40\x80\x04\xea\x4a\xc6\xab\x93\x81\xe0\xa5\x96\
+\xa0\xd2\x05\x9f\x35\xc6\x2f\xf6\x6f\x66\x0b\x38\x63\x0c\xf0\x72\
+\x98\xc0\x0f\x11\xc3\xba\xa1\x3f\xf0\x23\x9c\x95\xc3\x50\x60\x04\
+\x55\x44\x19\x09\x5d\x45\x2b\x8f\x1b\x22\xbd\x22\x39\x4a\xab\xc1\
+\xab\xe4\xbc\x05\xa1\x43\xa7\x12\xf6\x3b\x68\x1e\xd5\x04\x2f\x13\
+\xda\xad\x5a\x00\x5c\x8d\x40\xcd\x1f\x91\x26\x80\xac\x1c\x41\xa8\
+\xac\xf8\x26\x41\x05\x82\xd6\x05\x66\x04\x86\x22\x6c\xf1\x0a\x6b\
+\xfb\xcd\x55\xc9\x55\x6a\x96\xf2\xa4\x90\x24\xad\x1b\x57\xe3\x5a\
+\xdf\xb4\xe9\x59\xa9\xee\xf8\xe7\xab\x16\xc9\xb0\x31\x00\x64\x82\
+\x20\x49\xa5\xba\x49\x00\x85\x14\xe1\xa2\x6e\x22\x2a\x25\x0b\xd0\
+\xb4\x3f\x98\x2b\x48\x10\x6b\x08\xcd\xea\xc9\x8b\x0f\xcf\x6a\x32\
+\x80\xde\xb6\x1e\x1b\xcb\x18\x98\x09\x20\xc3\xf6\xab\x83\xcc\x82\
+\x8e\x01\x60\x58\x9f\x40\xbf\xc1\x42\x9f\x89\x13\xbf\x52\xe8\x33\
+\x82\x88\xf5\xfc\x86\xef\xf5\x82\xcf\x10\x2a\x4b\xfb\x85\xf6\x4e\
+\x95\xaa\x4f\xa0\x79\xef\x71\xd3\xd0\x0c\xe0\x0e\x76\x58\xd7\x48\
+\x16\xfc\x88\x04\x40\x6b\x36\x48\xb4\x96\x05\x40\x20\x02\x42\x38\
+\xf9\xaa\xc8\xa1\x7d\x91\xfa\x34\x32\x8e\xc4\x67\x30\x51\x51\x23\
+\x2b\xa4\x47\x3a\x1d\x2b\x42\x3e\xe6\x00\x90\xc7\x06\xfa\xad\xd7\
+\xe9\x5c\x29\x15\x09\x1d\x81\xee\xf2\xa1\xaf\x56\xde\x4a\x43\x63\
+\x03\x37\x14\xa9\x84\x8d\x22\x6b\xe2\x8b\x57\x2f\x53\xfe\x9a\x03\
+\xc0\x21\x01\x41\xfb\x47\xe8\x8b\x45\x08\x91\xa6\x95\x30\xd3\xac\
+\x25\x05\x92\x9f\xad\x72\xae\x79\x04\x36\x0f\x78\x16\xf8\x2d\xb0\
+\x14\x78\x70\x0c\x00\x07\x09\x84\xe6\x94\xf1\xd9\xc3\x2e\x62\xa3\
+\x70\x73\x62\x35\x95\x69\x6e\x38\x08\xf7\xee\x90\xb7\x01\xe0\x29\
+\x60\x75\x20\xf0\x65\xbd\x65\x7b\xd7\x98\x09\x38\x04\x20\x90\x48\
+\xc3\x8a\xc4\xe4\xf1\xf1\x24\x13\xa9\x15\x45\x86\xe3\xdd\xc3\x24\
+\x7a\x17\x7f\xc6\xef\xdf\x05\x02\x5f\xd1\x5b\xb6\x07\xc7\x7c\x80\
+\xc3\x68\x24\x45\x4a\x60\x22\x53\xa3\xd5\x41\x7d\xf6\x2b\x16\xfa\
+\x36\xe0\xf1\x40\xd8\xab\x03\x0d\xb7\x8f\x25\x27\x30\x28\xc2\x1f\
+\xcb\x80\x68\x25\x44\x71\x38\x05\xae\x80\x21\xfc\xd9\xb9\x7f\x07\
+\xdc\x0f\x6c\xec\x2d\xdb\xb5\x63\x39\x0a\xf8\x0e\xf0\xd1\x63\x39\
+\xbc\x51\x47\xd6\xc9\x5e\x17\x50\xfa\x52\x60\x4d\x6f\xd9\x7e\x72\
+\xb4\x85\x81\x37\x03\x57\x03\x65\xc6\x36\x17\xd8\x11\x68\x77\x68\
+\xc3\x77\xf6\x96\x6d\x67\x34\xfc\xb8\x6c\x00\xdc\xc5\x66\x96\xf0\
+\x75\xe0\x33\xaf\x51\xa1\x3f\x15\x08\x7a\x29\xf0\x5c\x6f\xd9\x5e\
+\x3f\x5a\x7f\x68\x2b\x27\xf0\x46\xe0\x2f\x80\xc9\xa3\x5c\xd8\x8d\
+\x80\xd2\x75\x0d\x1f\xec\x2d\xdb\xaf\x09\xa4\xe7\x03\xe0\x2e\xaa\
+\x2c\xe1\x93\xc0\xf7\x61\x04\xce\x6c\x70\xe8\xdb\xa0\xe6\xa1\x2f\
+\x05\xd6\xf7\x96\xed\x9d\xaf\x55\xfb\xd6\x3a\x0c\xbc\x8b\x1f\xb2\
+\x84\x6b\x81\xd3\x8f\xe1\xdf\xb8\x03\xd8\xa0\x69\xf8\xf2\x63\xc5\
+\x43\x1f\x29\x79\x80\x5e\xe0\x17\xc7\x50\xce\x60\x3b\xf0\x48\x10\
+\x8e\x85\x1a\x6e\x8f\x89\xfa\x50\x01\x70\x17\x77\xb2\x84\x7b\x80\
+\x25\x23\xf0\xfb\x4b\x60\x33\x7e\xb2\x25\xd4\xf0\x0d\xbd\x65\xbb\
+\x31\x26\xda\xc3\xc7\x00\x00\xd7\x8d\x20\x00\x3c\x07\x2c\x0b\xb4\
+\xfb\xc1\xde\xb2\xbd\x65\x4c\x8c\x47\x1e\x00\xab\x80\x7f\x01\xfe\
+\xea\x55\xfe\x7e\x95\x40\xe0\xa1\x86\xdf\x07\xec\xea\x2d\xdb\xee\
+\x98\xe8\x5e\x4d\x00\xdc\x85\x62\x09\x5f\x02\x3e\x00\x2d\x57\x85\
+\x3c\x1c\xdb\xe3\xc0\x03\x81\x86\x3f\x71\xb4\xaa\x64\x63\x00\x48\
+\x83\x60\x07\x4b\xf8\x34\xf0\x8d\xc3\x78\xfd\x3d\xc0\xd3\x09\x1b\
+\x5e\xeb\x2d\xdb\x6a\x4c\x34\x23\x0d\x00\xfe\x76\x2b\xf0\x77\xc0\
+\x8c\x43\xbc\x5e\x95\x66\x0e\xfd\x7e\xe0\xd9\xde\xb2\x7d\x60\x4c\
+\x0c\xc7\x0a\x00\xee\xa2\xc2\x12\x7a\x81\x1f\x1e\xe4\x5f\xbc\x04\
+\x3c\x1a\x08\x7c\x25\xf0\xe8\x98\xfd\x3e\xb6\x19\x00\xe0\x47\xc0\
+\x35\xc0\xd9\x19\xe7\x76\xe0\xb7\x33\x85\x59\xb6\x4d\xbd\x65\xbb\
+\x3e\x76\x9b\x47\x13\x00\xee\x02\x96\x70\xad\x65\x71\x0f\xb0\x55\
+\x13\xf6\x4a\x60\x6d\x6f\xd9\xf6\xc6\x6e\xeb\xb1\xb3\xfd\x7f\xd1\
+\xc4\x69\xbf\xbc\x70\x16\xb1\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+\x00\x00\x29\xf7\
+\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\x02\x00\x00\x00\x4c\x5c\xf6\x9c\
+\x00\x00\x29\xbe\x49\x44\x41\x54\x78\x9c\xac\x8e\xbf\x4a\xc3\x60\
+\x1c\x45\xcf\xef\xcb\x97\x34\x1a\x5a\x34\x50\xa7\xa0\xd9\xec\xe0\
+\xe0\xd0\xd1\x37\xa8\x8b\x4f\xe3\x03\xf8\x42\x2d\xf4\x35\x04\x5d\
+\x74\x8b\x10\xb7\x64\x10\x1a\x44\x93\x7e\x7f\x1c\x94\xc6\xe0\x26\
+\xbd\xe3\xe5\x72\xee\x11\xef\x3d\xfb\xc8\x37\x46\x84\xc7\xb2\xb9\
+\x5b\x15\xf5\xa6\xd3\x81\xec\xd8\x81\x92\xce\xb8\xf7\xd6\x66\x69\
+\x7c\x7d\x39\xbd\x99\x9f\xa4\x49\x88\x20\x03\x86\xc3\x3b\x44\x20\
+\xf8\xd5\x35\x98\x92\xed\x13\xdd\x33\xe6\x05\xfb\x8a\x29\xb1\x6f\
+\xd0\xe2\x9a\x7e\x26\x09\x72\x80\x9a\xa0\x4f\xd1\x19\x3a\x27\x9c\
+\x11\x5d\xa0\xcf\x50\x47\x7f\x2e\x14\xa8\xde\x1c\xf0\x34\x9f\x66\
+\xfd\x50\x2f\xef\xab\xa2\xfa\x38\x8c\x82\x51\xa8\xac\xfb\xb1\x17\
+\xb0\xde\x8f\x63\x7d\xbb\xc8\xaf\xce\x8f\x01\xe7\x51\x43\xf5\x7f\
+\xe7\x0b\x00\x00\xff\xff\xac\x91\x3d\x0e\x01\x61\x18\x84\x9f\x77\
+\x7f\x6c\x24\x68\x44\x96\xc2\x09\x14\xa2\xf1\xd3\xea\x95\x5c\xc1\
+\xb9\x68\x1c\xc1\x01\x48\xa8\xb9\x82\x20\x11\x0a\x0a\x76\xb3\xdf\
+\xf7\x2a\x08\x8b\xd6\x14\x4f\x37\x93\xc9\x8c\xfc\xe5\x00\x6b\xd5\
+\x71\x04\x18\xcd\xb7\xe3\xd9\x36\x36\x9a\xf1\x9e\xeb\x3b\x22\xc0\
+\xf9\x9a\x94\xf2\x7e\xbf\x55\xee\x35\x4a\xc5\x9c\xff\xe9\x56\xb0\
+\x20\xef\x51\xcc\x81\x78\x4d\xb4\x20\x5a\x12\xad\x30\x7b\x34\xe6\
+\x51\x53\x52\xfc\x95\xa6\x28\x20\x1e\x6e\x48\xa6\x46\xd0\x21\x68\
+\x13\xd4\x71\x2b\xaf\xca\xa0\xe0\x7c\x65\x5d\xae\xc9\x74\x75\x9c\
+\x2c\x77\x9b\xd3\xad\x90\xf5\x04\xb1\xaa\x80\x08\x89\x51\x85\x41\
+\x33\x1c\x76\xab\xbe\x2b\xc6\xaa\xfb\x8f\x13\xee\x00\x00\x00\xff\
+\xff\xac\x92\x31\x0a\xc2\x50\x10\x44\xdf\x4f\x82\x24\x10\x4c\x23\
+\x58\x89\x5a\x5a\x59\x58\x5a\x89\x9d\x08\x1e\xc3\x4b\x58\x7b\x0c\
+\x8f\x60\x21\xd6\x42\xac\x3d\x80\x95\x56\x16\x62\x11\x41\x0c\x51\
+\xf2\xff\x5a\xe4\x47\x3d\x40\x60\x59\xb6\x98\x1d\x76\x67\xa6\x02\
+\x03\x8a\x53\x6e\x8f\xf7\x72\x73\x8e\x8f\x49\x14\x78\xae\x83\x11\
+\x14\x38\x8e\x4a\x5f\x5a\x8b\x4c\xfa\x8d\xf9\xa8\xd5\x8c\x6a\x80\
+\x11\x94\xcd\xbe\x80\x06\xcf\x12\xe5\x27\x9e\x5b\xb2\x1d\xd9\x1e\
+\x9d\x58\x53\x8a\xfa\x29\x25\xa5\xc0\xfc\x0d\xf6\x97\xb2\x7f\x91\
+\xc6\xc2\x05\x14\xb8\x21\xfe\x90\x60\x4c\x30\xa5\xd6\x2b\x39\x72\
+\x94\x5b\xac\x18\x91\x22\x2e\xf7\x34\x5f\xc5\x97\xf5\xe1\xaa\x0d\
+\xa1\xef\x1a\x11\x11\x94\x02\x21\x49\xf3\x41\xa7\xbe\x98\x75\xdb\
+\x8d\xa0\x12\x0f\x3e\x00\x00\x00\xff\xff\xa4\x94\xbd\x6d\x02\x51\
+\x10\x84\xbf\x5d\x3d\x23\x1d\x87\x0e\x8b\xd4\x4e\x48\x08\x68\x81\
+\xc4\xe4\x8e\x1c\xba\x00\x6a\x70\xee\x2a\x68\x80\xd8\xc4\x48\xae\
+\x00\x44\x07\xfe\x11\x89\x53\x7c\x27\x0c\xd2\xbd\x5d\x07\xf7\x88\
+\x88\x80\x2d\x60\xa4\xf9\x66\x67\xae\x0d\xa0\xf9\xfd\xe5\xe7\xef\
+\xeb\xdb\xc7\xcf\xf6\xd0\xcd\x42\x34\x77\x50\x91\x68\x5e\xed\xeb\
+\xe1\x5d\x67\x32\xbe\x1f\x0d\x6e\x81\x68\xae\x22\x22\x80\x81\x25\
+\xf4\x7e\x60\x37\xa7\x9a\xf1\xb7\x20\xee\xa0\x69\x82\x22\x8a\x37\
+\xe5\xe0\x84\xf5\x19\x06\x41\x11\xc1\x0d\x2c\x89\xe9\x0d\xd9\x03\
+\xf9\x33\xf9\x13\x5a\x00\x50\x83\x82\x3a\xd8\x11\xeb\xfa\xbb\x9c\
+\xbe\x6f\x56\x5f\x65\xbb\xa5\xad\x90\x16\x29\xa8\x94\xfb\xba\xc8\
+\xc2\xcb\x63\x7f\x3c\xec\x99\x7b\x32\x74\xe9\xfd\x03\x00\x00\xff\
+\xff\x22\x3f\x02\xe0\x6e\x5d\x75\xf2\xc5\xc4\x9d\x8f\x98\x99\x18\
+\xe1\xe5\x26\x0b\x13\xe3\x97\x9f\x7f\x39\x59\x99\x12\xed\xa4\xc3\
+\x2d\x24\x58\x99\x19\xff\xfd\xff\xcf\xc8\x00\x71\x29\x24\x4c\x99\
+\x19\x18\x18\x18\xfe\xbe\x66\xf8\x3c\x8f\xe1\xcb\x22\x86\x9f\xd7\
+\x18\x18\x20\xa9\x9c\x05\x16\xe8\xd4\xa9\x99\x50\x01\x3c\x32\xfe\
+\x40\x63\x82\x4d\x91\x81\x27\x96\x81\x37\x99\x81\x45\x8e\x81\x81\
+\x81\x81\xe1\x2f\xc4\x11\xff\xff\x33\xfc\xfb\x0f\x8d\x86\x0d\x67\
+\x5f\xcd\xda\xff\xe4\xdd\xd7\xdf\x7c\x1c\x2c\x7f\xfe\xfd\x67\x60\
+\x60\x60\x66\x62\xfc\xfd\xe7\xdf\xf7\xdf\xff\x92\xec\xa5\xd3\x1d\
+\x65\x20\x79\x9d\xec\x48\x00\x00\x00\x00\xff\xff\x22\x33\x02\xfe\
+\xff\x67\xf8\xcf\xf0\x9f\x89\x91\x71\xfa\xde\xc7\x73\x0f\x3e\xe5\
+\xe7\x64\x61\x64\x84\x84\x32\x03\x13\x13\xe3\xfb\xaf\xbf\x35\xa5\
+\xb8\x6b\xfc\x95\xd4\x25\xb9\x19\x90\xb2\x36\x03\xc3\x5f\x68\xd0\
+\xff\xb9\xcf\xf0\x69\x1e\xc3\x97\x39\x0c\xbf\x5f\x30\x30\x32\x30\
+\x30\x42\x6a\x5d\x1a\x85\x3b\x26\x80\xc4\x04\x03\xc3\xbf\xbf\x0c\
+\xff\x18\x18\x58\x05\x19\x78\x12\x18\xf8\x92\x19\x58\xb5\x19\x18\
+\x18\x18\x18\xfe\x30\x30\x30\x33\x30\x20\x12\xcd\xe3\x77\x3f\xda\
+\x36\xdd\x3f\x7d\xef\xa3\x00\x17\xeb\x7f\x06\x68\x71\xc4\xc8\xc0\
+\xf8\xfe\xeb\xef\x60\x53\xf1\x2a\x3f\x45\x48\x80\x90\x17\x07\x00\
+\x00\x00\x00\xff\xff\x22\x27\x02\xfe\xff\x67\x60\x60\xf8\xcf\xc8\
+\xc8\xd8\xb7\xe3\xe1\xb2\x63\xcf\x05\xb8\x59\xff\xff\xff\xff\xff\
+\x3f\x03\x13\x23\xc3\xbf\xff\x0c\x5f\x7e\xfc\xf5\x37\x16\x2d\xf2\
+\x90\xe7\x64\x63\x46\x2a\x25\x61\x25\xfa\xbf\x4f\x0c\x9f\x66\x30\
+\x7c\x68\x67\xf8\xfb\x81\x81\x91\x81\x81\x89\x05\x5a\x38\x0c\x0c\
+\x80\x14\x74\x7f\x18\xfe\x31\x30\x30\x71\x32\x08\x14\x32\xf0\x15\
+\x30\x30\x8b\xc2\x1c\xcc\xc4\x00\xab\xe1\xfe\xfe\xfb\x3f\x6d\xef\
+\xe3\xa5\xc7\x9e\x73\xb0\x32\xb3\x30\x41\x6b\x66\x66\x26\xc6\xf7\
+\x5f\x7f\x7b\xe9\x8b\xd6\x06\x28\xb1\x32\x33\x92\x17\x07\x00\x00\
+\x00\x00\xff\xff\x22\x39\x02\xe0\xcd\xcd\xd6\x4d\xf7\xd6\x9c\x7a\
+\x25\xc2\xcb\xfa\x17\x96\x31\x7f\xfe\xf9\xf7\xf7\xdf\xff\x7c\x37\
+\xf9\x30\x73\x71\x06\x94\x84\xff\x07\x5a\xdc\x7f\x9a\xc2\xf0\xb1\
+\x8f\xe1\xd7\x7d\x58\x69\xf3\x97\x5e\x49\x1e\x3f\x60\x64\x60\x64\
+\x86\x46\x03\x8b\x04\x03\x7f\x2e\x83\x40\x19\x03\x03\x0b\xbc\x44\
+\x82\x17\x32\x3b\x2f\xbf\xed\xd8\x72\xff\xf7\x9f\x7f\x90\xb4\xc5\
+\xc0\xc0\xc0\xc2\xcc\xf8\xe6\xf3\x6f\x27\x2d\xa1\xf6\x30\x55\xf2\
+\xe2\x00\x00\x00\x00\xff\xff\x22\x2d\x02\xe0\xe5\x7e\xeb\xc6\x7b\
+\xeb\xce\xbc\x12\xe6\x65\xfd\xf3\x17\x1a\xfa\x5f\x7e\xfe\x15\xe1\
+\x61\x6d\x0c\x52\x36\x52\xe0\x43\xaa\x6c\x61\x4d\xc2\xdf\xd7\x19\
+\xde\x96\x32\x7c\xd9\xca\xc0\xc4\xc0\xc0\xc4\xcc\xf0\x9f\x6e\xa5\
+\x0d\xf1\x80\x91\x81\x91\x09\x5a\x28\x71\xd9\x30\x08\xf7\x31\xb0\
+\x9b\x32\x30\x30\x40\xb2\x02\xdc\xe3\xb7\x5e\x7c\xab\x5d\x73\xe7\
+\xc1\x9b\xef\xfc\x9c\xd0\x2a\x81\x85\x99\xf1\xdd\x97\xdf\x0e\x9a\
+\x42\x6d\xa1\x2a\xac\xcc\x4c\x0c\x24\xd6\x07\x00\x00\x00\x00\xff\
+\xff\x22\x21\x02\xfe\x33\x30\xfc\xff\xff\x9f\x89\x91\xb1\x73\xcb\
+\xfd\x95\x27\x5f\x8a\xf0\xb0\xfe\x81\x55\xb9\x1f\xbf\xff\x51\x93\
+\xe0\x6a\x0f\x53\x95\x11\xe2\x40\x2a\x76\x20\x25\xfe\x7f\x86\xf7\
+\x2d\x0c\x1f\x5a\x19\xfe\xfd\x64\x60\x62\x81\xb5\x7f\x06\x2d\x60\
+\x64\x60\x64\x66\xf8\xf7\x87\x81\x81\x91\x81\xbf\x80\x41\xa8\x9d\
+\x81\x91\x1d\x9e\x83\x21\x5e\x7b\xff\xf5\x77\xf5\x9a\x3b\x67\xee\
+\x7d\x12\xe0\x42\x89\x03\x67\x6d\xe1\xce\x70\xd5\xff\xff\x19\x30\
+\x3a\x98\xf8\x00\x00\x00\x00\xff\xff\x22\x21\x02\x20\xd6\x4f\xdb\
+\xfb\x78\xde\xc1\xa7\x82\xdc\x88\x92\xe7\xe3\xb7\x3f\x7a\x72\x3c\
+\x7d\x51\xea\x7c\x9c\x2c\x48\xa1\xff\x87\x81\x81\x85\xe1\xdf\x5b\
+\x86\x57\xf1\x0c\x5f\xb6\x32\x30\x33\x30\x30\x30\x33\x30\xfc\x25\
+\x31\x38\x06\x0a\x30\x31\x30\x30\x30\xfc\xfd\xc7\xc0\x65\xc9\x20\
+\xb6\x82\x81\x45\x0e\xde\x7c\x80\x34\xbb\x7f\xfd\xf9\x57\xb9\xea\
+\xf6\xc1\x1b\xef\xe1\xe1\x00\x89\x83\x40\x63\xb1\x6a\x7f\x25\x92\
+\xda\xa6\x00\x00\x00\x00\xff\xff\x62\x22\xac\x84\x01\xe2\x98\xff\
+\xcc\x4c\x8c\x4b\x8e\x3e\x9f\x73\x00\x11\xfa\x90\xb4\x6f\xa3\x26\
+\x30\x29\x56\x83\x8f\x93\x05\xde\x74\x63\xf8\xff\x87\x81\x81\x85\
+\xe1\xfb\x1e\x86\x27\x66\x0c\x5f\xb7\x32\x30\xb3\x40\xfa\xf3\xa4\
+\x07\xc4\x40\x81\x7f\x0c\x0c\xff\x18\x58\x58\x18\xbe\x1f\x67\x78\
+\x6a\xca\xf0\x75\x35\x03\x03\x33\xc3\xff\x3f\x0c\x0c\xff\x99\x98\
+\x18\xff\xfd\xff\xcf\xc6\xc2\xd4\x15\xa1\xe6\x67\x24\xfa\xe1\xdb\
+\x6f\x16\x26\x46\x06\x06\x86\x3f\x7f\xff\x0b\x71\xb3\xae\x39\xfd\
+\x72\xe2\xce\x47\x4c\x8c\x8c\xff\xfe\x11\x9b\xac\x01\x00\x00\x00\
+\xff\xff\x22\x2a\x02\x20\xa1\x7f\xe8\xe6\xfb\x49\xbb\x1e\x09\x71\
+\xb3\xfe\x83\x85\xfe\x87\x6f\x7f\x8c\x15\xf8\x3a\xc2\x55\xb9\xd8\
+\x98\x61\x55\xee\x7f\x06\x86\xbf\x0c\x8c\x2c\x0c\x5f\x97\x33\x3c\
+\x77\x63\xf8\x73\x8f\x81\x99\x99\x81\xe1\xcf\xe0\x2b\xf1\x89\x00\
+\xff\xff\x30\x30\x31\x33\xfc\x7d\xc5\xf0\x22\x8c\xe1\xd3\x44\x06\
+\x46\x48\x8f\xfd\x3f\x13\x23\xe3\xff\xff\x0c\x4c\x8c\x8c\x75\x01\
+\xca\x2e\xda\xc2\x6f\xbf\xfe\x66\x61\x66\x64\x60\x60\xf8\xf3\xef\
+\xbf\x08\x2f\xdb\xa2\x23\xcf\xd6\x9f\x7d\x05\x69\x38\x11\x63\x09\
+\x00\x00\x00\xff\xff\x22\x1c\x01\xff\xfe\x33\x30\x33\x31\x3e\x7e\
+\xf7\xa3\x75\xe3\x3d\x2e\x76\xa6\xff\x0c\xff\xff\x33\x30\x30\x33\
+\x31\x7e\xfa\xf1\x47\x5b\x86\xa7\x23\x5c\x95\x8d\x85\x09\x29\xf4\
+\xff\x33\x30\x30\x33\xbc\xaf\x61\x78\x19\xc5\xc0\xc8\xc0\xc0\xc8\
+\xc4\xf0\x7f\x08\x25\x7c\x4c\xf0\x97\x81\x91\x89\x81\x89\x99\xe1\
+\x75\x01\xc3\x9b\x2c\x58\x26\xfe\x07\x29\x5f\xfe\xff\x67\x68\x08\
+\x52\xb6\x53\x17\xfc\xf0\xf5\x0f\x24\x1f\xfc\xfb\xf7\x9f\x9f\x8b\
+\xa5\x7f\xfb\xc3\xab\x4f\xbf\x30\xc3\x5a\xab\xf8\x01\x00\x00\x00\
+\xff\xff\x22\x10\x01\xff\xff\x33\x30\xfc\xff\xff\xfb\xef\xff\xa6\
+\xf5\x77\x3f\x7e\xff\xc3\xca\xcc\x04\x89\xfc\xef\xbf\xfe\x49\xf2\
+\xb3\x77\x45\xa8\xf2\x73\xb2\x20\x85\xfe\x3f\x06\x06\x26\x86\x37\
+\x29\x0c\x6f\x5b\x91\xfa\x56\x43\x1d\xfc\x63\x60\xf8\xcb\xc0\xc4\
+\xcc\xf0\x61\x3a\xc3\xcb\x60\x86\xff\x7f\x19\x18\x18\xe1\x71\xc0\
+\xce\xc2\xd4\x12\xa2\xa2\x21\xc5\xfd\xf9\xe7\x5f\x66\x26\x46\xe8\
+\x18\xcc\xff\xff\x8d\xeb\xef\x7e\xfe\xfe\x97\x91\x81\x91\x60\x14\
+\x00\x00\x00\x00\xff\xff\x22\x10\x01\xff\xfe\xff\x67\x62\x62\x9c\
+\xba\xe7\xd1\xb9\x87\x9f\x21\x75\x2c\x23\x23\xc3\x9f\x7f\xff\x59\
+\x99\x19\x3b\xc2\x55\x45\x79\xd9\x20\x2d\x4e\x44\xda\x7f\x93\xca\
+\xf0\x61\x2e\x03\x0b\x2b\x1d\xbb\xb5\xf4\x01\x7f\x19\x58\x58\x19\
+\xbe\x6c\x62\x78\x05\x8f\x83\xff\x8c\x8c\x0c\xff\xfe\xff\xe7\x66\
+\x67\xee\x0c\x57\x15\xe2\x66\xf9\xf9\xfb\x1f\x13\x44\x84\x8d\xf9\
+\xfe\xeb\xef\x5d\xdb\xee\x43\x14\xe0\x37\x17\x00\x00\x00\xff\xff\
+\xc2\x17\x01\x90\x4a\xf5\xe4\xdd\x8f\x2b\x8e\xbf\x10\xe4\x82\x36\
+\xf9\x19\x19\x19\xbf\xfd\xfc\x5b\xe6\xad\xa0\x2e\xc9\x0d\x6b\xf3\
+\xfc\x67\xf8\xff\x17\x9a\xf6\x3f\xce\x61\x60\x61\x65\xf8\xff\x7b\
+\x78\x85\x3e\x03\x03\x03\x03\xc3\xff\xdf\x0c\xcc\xf0\x38\xf8\x03\
+\x49\x61\x90\x31\x47\x49\x01\xf6\xda\x00\x65\xc8\x28\x24\x23\x03\
+\xc3\x9f\x7f\xff\x05\xb8\x58\xb7\x5f\x7c\xb3\xed\xe2\x1b\x82\x95\
+\x01\x00\x00\x00\xff\xff\xc2\x19\x01\xff\xff\x33\x30\x32\x30\xbe\
+\xfb\xfa\xbb\x6d\xd3\x3d\x36\x16\x26\x48\x80\xb2\x30\x31\x7e\xf8\
+\xfa\x3b\xde\x56\xca\x53\x5f\x04\xa5\xbd\xcf\xc8\xc2\xf0\x36\x97\
+\xe1\xc3\x5c\x06\x66\x48\xe8\x0f\x53\x00\x89\x83\xcf\x9b\x18\x5e\
+\x47\xc1\x5a\xd5\xd0\x81\x0a\x0b\x65\xfe\x3c\x37\xb9\x8f\xdf\xfe\
+\x40\xe6\x45\xfe\xfd\xff\xcf\xcb\xc1\xd2\xb7\xfd\xc1\xa3\xb7\x3f\
+\x98\x99\x18\xf1\x44\x01\x00\x00\x00\xff\xff\xc2\x19\x01\xff\xfe\
+\xff\x67\x64\x64\x98\xb8\xf3\xd1\xb3\x0f\x3f\x39\x58\x99\x20\x55\
+\xf1\xa7\xef\x7f\xcc\x94\xf8\x33\x9c\x64\xfe\xc2\x66\x60\xa0\xed\
+\xfd\x2f\x0b\x19\x3e\x4c\x19\xe6\xa1\x0f\x01\xff\x7f\x33\xb0\xb0\
+\x32\x7c\x5a\xc3\xf0\xb1\x13\x36\x5c\xc1\x00\x89\x83\x70\x0b\x09\
+\x0f\x3d\x91\x0f\xdf\xfe\x30\x33\x31\xfe\xff\xcf\xc0\xc2\xcc\xf8\
+\xe5\xc7\xdf\xee\xad\x0f\xfe\x41\x46\xca\x70\x00\x00\x00\x00\x00\
+\xff\xff\xc2\x1e\x01\x90\xd4\x7d\xf0\xc6\xfb\x6d\x17\x5f\x0b\x70\
+\xb1\xfe\xf9\xf7\x9f\x91\x91\xe1\xd7\x9f\x7f\x82\x3c\xac\xb5\x01\
+\x4a\xcc\x4c\x8c\xb0\x19\x95\xbf\x0c\x0c\x2c\x0c\xdf\x36\x32\xbc\
+\x4a\x62\x60\x62\x61\x60\xf8\x43\x1b\x4f\x0f\x32\xf0\xff\x37\x03\
+\x33\x0b\xc3\x9b\x0a\x86\xcf\x33\x19\x18\x58\x18\xfe\xff\x61\x60\
+\x60\x80\xb4\x4d\xcb\xbc\x15\x14\x44\x38\x7e\xfc\xfa\xcb\xc4\xc8\
+\xf0\xf7\xdf\x7f\x3e\x4e\x96\x63\x77\x3e\x6c\xc0\xdb\x2a\x05\x00\
+\x00\x00\xff\xff\xc2\x12\x01\xff\x19\x18\x18\x19\x19\xbe\xff\xfa\
+\x3b\x7d\xef\x63\x0e\x56\x26\x48\xec\x41\x5a\x3e\x25\x5e\x0a\x92\
+\x02\xec\xb0\x8a\xf7\x1f\x03\x03\x33\xc3\x9f\xc7\x0c\xaf\xe2\x61\
+\x4d\xa0\x61\x57\xee\xe3\x04\x7f\x19\x98\x98\x18\xde\xe4\x30\xfc\
+\xba\xc0\xc0\xc8\xc2\xc0\xf0\x97\x91\x91\xe1\x3f\xc3\x7f\x3e\x4e\
+\x96\x6a\x3f\x25\x78\x50\xff\xfd\xff\x9f\x87\x9d\x79\xee\xc1\x67\
+\x6f\xbf\xfc\x86\xc4\x10\x26\x00\x00\x00\x00\xff\xff\xc2\x16\x01\
+\xff\xfe\x33\x31\x32\x2e\x38\xfc\xec\xce\xcb\x6f\x9c\xac\xcc\xf0\
+\xc2\xc7\x5e\x53\xd0\x59\x4b\x08\x51\xf1\x32\xfc\x67\xf8\xff\x8b\
+\xe1\x75\x34\xc3\xdf\x8f\x0c\x8c\x4c\xc3\xa2\xc5\x49\x3c\xf8\xcf\
+\xc0\xc0\xc8\xf0\xff\x0f\xc3\xab\x68\x86\x7f\x1f\x20\x8d\x22\x48\
+\x85\x6c\x20\xcf\xeb\x67\x24\xfa\xf1\x3b\xb4\x20\x62\x63\x61\x7a\
+\xf5\xe9\xe7\xb4\xbd\x8f\x19\x19\x19\xb0\x16\x44\x00\x00\x00\x00\
+\xff\xff\x42\x8f\x80\x7f\xff\x19\x18\x99\x18\x1f\xbf\xfb\xb1\xfa\
+\xd4\x4b\x3e\x4e\x96\x3f\xff\xfe\x33\x32\x30\xfc\xfd\xf7\x9f\x83\
+\x95\x29\xd3\x49\xf6\x3f\x62\xa8\xef\x2f\x03\x03\x33\xc3\xbb\x22\
+\x86\xaf\x87\x19\x98\x59\x86\xd4\x30\x03\xb5\xc0\x5f\x06\x26\x16\
+\x86\x9f\xd7\x18\xde\x24\x31\x30\x40\xd3\x1f\x24\x99\x27\xdb\x4b\
+\x8b\xf0\xb0\xfd\xfe\xf3\x8f\x91\x91\xe1\xef\xbf\xff\xfc\x9c\x2c\
+\xdb\x2f\xbe\xb9\xfc\xf8\x0b\x13\xb6\xae\x19\x00\x00\x00\xff\xff\
+\xc2\xcc\x01\xff\x19\x19\x18\x16\x1c\x7a\xf6\xf9\xc7\x5f\x48\x23\
+\x87\x89\x89\xf1\xd3\xf7\x3f\xd1\x56\x92\x4a\x62\x9c\xff\xa0\x85\
+\xcf\x5f\x06\x06\x16\x86\xef\x7b\x19\x3e\x4c\x65\x60\x86\x16\x82\
+\x23\x11\xfc\xff\xc3\xc0\xcc\xca\xf0\x79\x3d\xc3\x97\xc5\x90\xc1\
+\x22\x48\xc3\x5f\x84\x97\x2d\xd5\x51\xe6\xcb\xcf\xbf\x90\xe9\x10\
+\x46\x46\xc6\x7f\xff\xfe\xcf\x3d\xf8\x94\x81\x81\x01\x73\x41\x07\
+\x00\x00\x00\xff\xff\x42\x89\x80\x7f\xff\x19\x98\x18\x19\x1f\xbd\
+\xfd\xb1\xf7\xda\x5b\x5e\x0e\xe6\xbf\xff\xfe\x33\x31\x32\x7c\xff\
+\xf5\x57\x4d\x82\x2b\xce\x46\x0a\xa9\xc7\xcb\xc0\xf0\xff\x37\xc3\
+\xbb\x12\x06\x38\x77\xc4\x82\xff\x7f\x19\x18\x99\x18\xde\xd5\x30\
+\xfc\x83\x94\xc3\xff\x21\x23\x10\x01\xc6\x62\x66\x4a\xfc\x5f\x7e\
+\xfc\x85\x94\x4b\x3c\x1c\x2c\x27\xef\x7d\xb8\xf0\xe8\x33\x13\x23\
+\x03\xda\x38\x1d\x00\x00\x00\xff\xff\x42\xcb\x01\xff\x19\x18\x18\
+\x56\x9c\x78\xf1\xed\x27\x34\xf9\x33\x32\x32\xfe\xfe\xfb\x3f\xd3\
+\x59\x96\x83\x95\x09\x36\xdd\xf3\x8f\x81\x81\x99\xe1\x7d\x2d\xc3\
+\x8f\x0b\x0c\x8c\x4c\x23\xb2\xf0\x41\x06\xff\x18\x18\x19\x19\x7e\
+\x3f\x62\x78\x9b\x03\x2f\x88\x18\x18\x18\x98\x18\x19\xb2\x5d\x65\
+\x99\x99\x18\xfe\x33\x40\x97\x15\xfd\xff\xcf\xb0\xfc\xf8\x73\x06\
+\x06\xf4\x3c\x00\x00\x00\x00\xff\xff\x42\x44\x00\x24\xf9\x3f\x7e\
+\xf7\x63\xfb\xc5\x37\x3c\x1c\x2c\x90\xe4\xff\xf5\xe7\x5f\x43\x79\
+\x5e\x1b\x35\x41\xd8\x50\xf3\x3f\x06\x06\x26\x86\xdf\xf7\x18\x3e\
+\xf6\x31\x30\x31\x8f\xb0\x8a\x17\x17\xf8\xcb\xc0\xc4\xcc\xf0\x79\
+\x09\xc3\xcf\x93\x90\xde\x19\x13\x23\xe3\xbf\xff\xff\xb5\xa5\x79\
+\xec\xd4\x05\xbf\xfc\xf8\x0b\x69\x83\xf2\xb0\x33\x1f\xba\xf1\xe1\
+\xf2\xe3\x2f\x10\x59\xb8\x66\x00\x00\x00\x00\xff\xff\x42\x5a\xa1\
+\xf7\xff\x3f\x03\x03\xc3\x8e\x4b\x6f\x3e\xff\xf8\x83\x94\xfc\xff\
+\x85\x98\x8a\x43\x22\x10\xa2\x88\x81\x81\x91\xe1\x63\x2b\xc3\xbf\
+\xdf\xa3\xe5\x0f\x0a\xf8\xcf\xc0\xf0\xbe\x01\x85\xcb\xc0\x10\x6a\
+\x2e\xc1\xc4\xc4\x08\x9b\x45\x67\xfc\xf3\xef\xff\x96\x0b\xaf\xe1\
+\xb2\x10\x00\x00\x00\x00\xff\xff\x42\x44\x00\x33\x13\xe3\x8f\xdf\
+\xff\x76\x5f\x79\xc7\xc9\xc6\x0c\xe9\x06\x7f\xff\xf5\x57\x45\x9c\
+\xcb\x56\x43\xf0\xff\x7f\x06\x66\x26\x46\xe8\xd8\xec\xcf\x93\x0c\
+\x9f\x17\x32\x30\x31\x8d\xdc\xba\x17\x0b\xf8\xcb\xc0\xc4\xcc\xf0\
+\x6d\x07\xc3\xb7\x4d\xd0\x4c\xc0\xc4\xf8\xff\x3f\x83\x81\x1c\xaf\
+\x81\x1c\xef\xd7\x5f\xd0\x9a\x80\x9b\x9d\xe9\xf0\xcd\xf7\x6f\xbf\
+\xfc\x86\xc7\x0a\x03\x03\x03\x00\x00\x00\xff\xff\x82\x46\x00\xa4\
+\x9f\x76\xe8\xc6\xfb\xfb\xaf\xbf\x41\x8a\x7b\x26\x46\xc6\x1f\xbf\
+\xff\x85\x99\x49\xb0\xb3\x30\x21\x65\x19\x46\x86\xf7\x0d\x0c\xff\
+\xfe\x22\x2f\x6e\x1d\x05\x50\xf0\x9f\x81\xe1\x7d\x1d\x03\x03\x03\
+\x7c\xa1\x23\x23\x23\x43\x94\xa5\xc4\xbf\x7f\xff\x21\x6d\x77\x56\
+\x66\xa6\x57\x9f\x7e\xed\xb8\xf4\x06\x22\x0b\xd1\x04\x00\x00\x00\
+\xff\xff\x82\x86\x23\x64\x5c\x67\xcb\x85\xd7\x90\x41\x6d\xc8\xc0\
+\x83\x9c\x30\x87\x9b\xae\xf0\x7f\x06\x06\x26\x48\xf2\x67\x60\x62\
+\xf8\x75\x99\xe1\xfb\x5e\x06\x26\xa6\x91\x32\xea\x40\x02\xf8\xcb\
+\xc0\xc4\xcc\xf0\xf3\x22\xc3\xf7\x3d\x0c\x0c\x4c\xd0\x4c\xc0\xc0\
+\x60\xa9\x22\xa0\x29\xc5\xfd\xfd\xd7\x5f\xc8\x48\x35\x3b\x2b\xd3\
+\xce\xcb\x6f\xfe\xfc\x85\x8f\xa4\x31\x00\x00\x00\x00\xff\xff\x62\
+\x62\x80\xae\x96\x65\x7c\xf0\xe6\xfb\xa5\x47\x9f\xb9\xd8\x98\x21\
+\x8d\xfd\xaf\x3f\xff\xba\xea\x08\x73\xb3\x33\xff\xfb\xf7\x1f\x56\
+\x6f\x33\x32\x7c\x6c\x63\xf8\xf7\x7b\x34\xf9\xe3\x04\xff\x19\x18\
+\x3e\xb4\x30\x30\x30\x40\x3a\xac\xff\xfe\xfd\x67\x61\x66\xf4\x36\
+\x10\xfd\xf1\xfb\x1f\x23\x23\xe3\xff\xff\x0c\x9c\xac\xcc\xb7\x5f\
+\x7c\xbf\xf4\xf8\x0b\x23\x2c\x13\x00\x00\x00\x00\xff\xff\x62\x62\
+\x80\x55\xbf\x87\x6f\x7e\xf8\x02\x6b\x7d\xfe\xfb\xf7\x9f\x8b\x8d\
+\xd9\x45\x5b\x98\x81\x01\xb2\xa2\xf3\x1f\x03\x03\x33\xc3\xdf\x27\
+\x0c\x5f\x37\x31\x30\x0d\xad\xe9\x75\x7a\x82\xbf\x0c\x4c\x4c\x0c\
+\xdf\x0f\x33\xfc\xba\x00\xcd\x04\x8c\x8c\x0c\x0c\x0c\xf6\x1a\x82\
+\xc2\x3c\xac\x7f\xfe\xfe\x67\x84\x2e\x73\xff\x77\xf0\xc6\x3b\x06\
+\xd8\x12\x37\x00\x00\x00\x00\xff\xff\x62\x62\x60\x60\x80\xcc\xe2\
+\x1f\xb8\xfe\x8e\x9d\x85\x09\xb2\xf2\xe7\xdb\xaf\x7f\x86\x0a\x7c\
+\xaa\x12\x5c\xd0\x9d\x08\xff\xff\x31\x30\x30\x30\x7c\x9a\xca\xf0\
+\xf7\x1b\x03\x23\xf3\x68\xe3\x07\x27\x60\x64\x62\xf8\xff\x8f\xe1\
+\x63\x1f\x03\x03\x03\xc3\x7f\x06\x48\xc7\x58\x8c\x8f\xcd\x5a\x55\
+\xf0\xeb\xcf\xbf\x90\xa1\x08\x0e\x36\xe6\xa3\xb7\x3f\x7c\xfb\x05\
+\x9d\xc2\x04\x00\x00\x00\xff\xff\x62\x82\xd4\x15\x77\x5f\x7f\xbf\
+\xfd\xf2\x1b\x07\x1b\x13\x64\xf1\xfe\xef\xbf\xff\x1c\x34\x04\x19\
+\xa0\x99\xe3\x3f\x03\x23\x33\xc3\xff\x1f\x0c\x5f\x96\x33\xc0\x23\
+\x63\x14\x60\x05\xff\xff\x32\x30\x31\x30\x7c\xdb\xc8\xf0\xf7\x0d\
+\x24\xa5\x42\x92\xb9\xa3\x96\x20\x23\x23\x64\x65\x1b\x03\x3b\x2b\
+\xd3\x93\x77\x3f\x2e\x3f\xfe\xc2\xc0\xc0\xf0\xef\xdf\x7f\x00\x00\
+\x00\x00\xff\xff\x62\x82\xa8\x38\x75\xf7\xe3\x37\xd8\xd8\xc5\x9f\
+\xbf\xff\x05\xb9\x59\x2d\x54\xf9\x19\xa0\xfb\x5b\xfe\x31\x30\x30\
+\x32\xfc\xd8\xc7\xf0\xfb\x21\x03\xe3\x68\xe7\x0b\x3f\xf8\xcf\xc0\
+\xc8\xc2\xf0\xe7\x13\xc3\xb7\x0d\x0c\x0c\x0c\xf0\x52\xc8\x50\x81\
+\x4f\x52\x80\x1d\x32\x3c\xc7\xc8\xc0\xf0\xf7\xef\xff\x13\x77\x3e\
+\x40\x34\x00\x00\x00\x00\xff\xff\x62\x82\xa8\x38\x79\xf7\x23\x64\
+\x6d\x29\x13\x23\xe3\xf7\xdf\x7f\x75\x65\x79\x24\xf9\xd9\x51\x96\
+\x9a\x7e\x5e\xcc\xf0\x9f\x11\x73\x2c\x69\x14\xa0\x03\x48\x5f\xf5\
+\xcb\x12\x06\x06\x06\x48\x02\xfe\xf7\xef\x3f\x0f\x3b\xb3\xa9\x12\
+\xdf\xf7\x5f\x7f\x99\x18\x19\xff\xff\xff\xcf\xce\xca\x74\xe6\xfe\
+\x27\x48\x5b\x08\x00\x00\x00\xff\xff\xec\x98\x31\x12\x40\x30\x00\
+\x04\xef\x12\x93\x32\x5f\xe0\x0b\xfc\xbf\xd2\xfa\x83\x4a\x81\x42\
+\x41\x21\x42\x9c\x22\x1e\xe0\x01\xf6\x0d\x37\xb3\x73\x6b\x48\x6c\
+\xe1\xea\xe7\xdd\x15\x46\x10\x89\x33\xa9\x2e\x3d\x5e\x4d\x0b\xb0\
+\x50\xc0\xd1\x82\xfa\xe7\xff\x81\x1b\x14\x62\x87\x34\xe5\x3a\x94\
+\x85\xd9\x54\x5e\xca\xff\x00\xce\x9a\x61\x39\xc6\x35\x12\x78\x00\
+\x00\x00\xff\xff\x62\x62\x60\x60\xb8\xf1\xfc\xdb\xdb\x2f\xbf\x21\
+\x6b\x7e\xfe\xff\xff\xcf\xc9\xca\xa4\x27\xcb\xc3\xc0\x00\x1f\x7a\
+\x63\x60\xf8\x79\x8c\xe1\xf7\xb3\x91\x37\xeb\x42\x1e\xf8\xcf\xc0\
+\xc4\xcc\xf0\xe7\x1b\xc3\xf7\x3d\x0c\x0c\x0c\x0c\xff\xff\x41\x96\
+\x89\x6a\x4b\x73\xf3\x71\x42\x17\xb5\x33\x33\x33\x7e\xf9\xf9\xf7\
+\xea\x93\x2f\x0c\x0c\x0c\x00\x00\x00\x00\xff\xff\x62\x62\x60\x60\
+\xb8\xf4\xe8\xf3\xaf\xbf\xff\x18\x19\x21\xfd\xaf\xff\x12\xfc\xec\
+\x90\x9d\x2d\x8c\xf0\x31\xa0\xef\x07\x18\xfe\x33\x30\x30\x8e\x36\
+\xff\x89\x04\x8c\x0c\x0c\x0c\x0c\x3f\xf6\x41\x98\x90\x2e\x97\xac\
+\x10\xa7\x82\x28\x27\x64\xed\x10\x03\x03\xc3\xff\xff\xff\x2f\x3e\
+\xfa\xcc\xc0\xc0\x00\x00\x00\x00\xff\xff\x62\x62\x60\x60\x78\xf8\
+\xe6\x3b\x33\x23\xa4\x03\xcc\xf8\xeb\xcf\x3f\x45\x31\x4e\x0e\x56\
+\x26\xc8\x7e\x23\x68\xa0\xff\x3c\x06\xd1\x34\x00\x7e\x19\x8a\xe0\
+\xff\x3f\x06\x46\x06\x86\x1f\x27\xe1\xbb\xe1\x20\x0b\xda\x54\x25\
+\xb8\x7e\xfd\x85\xf4\xc8\xfe\xb3\x32\x33\x3d\x7a\xfb\x83\x81\x81\
+\x01\x00\x00\x00\xff\xff\x62\xfa\xf3\xf7\xff\x83\x37\x3f\x58\x99\
+\x19\xff\xff\xff\x0f\x59\x54\xa4\x2a\xce\xc5\x00\xdb\x87\xc4\xc0\
+\xc0\xc4\xf0\xef\x33\xc3\xaf\x8b\x0c\xf0\xe2\x68\x14\x10\x06\xff\
+\x19\x18\x19\x18\xfe\xdc\x61\xf8\xf3\x18\xb2\x8e\x11\x22\xaa\x26\
+\xc1\x0d\x1f\x53\x66\x65\x66\x7c\xfa\xee\xc7\xa7\xef\x7f\x00\x00\
+\x00\x00\xff\xff\x62\x7a\xfe\xf1\xe7\xab\x8f\xbf\x58\x59\x18\xff\
+\xff\x67\xf8\xff\x9f\x81\x85\x89\x51\x53\x8a\x1b\x66\xd0\x3f\x06\
+\x06\x06\x86\x5f\x17\x19\xfe\xbc\x81\x4c\xf7\x0c\x80\x5f\x86\x24\
+\xf8\xcf\xc0\xc0\xcc\xf0\xf7\x27\xc3\xcf\xd3\x0c\x0c\x0c\x0c\xff\
+\xa1\x83\x71\xea\x92\x5c\x9c\xac\x4c\xff\xfe\xfd\xff\xcf\xc0\xc0\
+\xc2\xcc\xf8\xfe\xeb\x9f\x07\x6f\xbe\x03\x00\x00\x00\xff\xff\x62\
+\x7a\xfa\xee\x07\x62\x04\xe2\xff\x7f\x0e\x36\x66\x19\x21\x0e\x06\
+\x48\x0d\x0c\x29\x73\x7e\x5f\x65\x80\x0d\x5a\x8c\x02\x62\x01\x24\
+\xc8\x7f\x5d\x64\x60\x60\x60\x60\xf8\x0f\x59\x45\x25\x29\xc0\xce\
+\xcb\xc1\xf2\xf7\x1f\x03\x23\x03\x03\x13\x23\xe3\xcf\x3f\xff\x1e\
+\xbe\xf9\x01\x00\x00\x00\xff\xff\x62\x7a\xf1\xf1\xd7\xdf\x7f\xd0\
+\xfd\x98\x7f\xff\xfd\xe7\xe7\x64\x16\xe1\x65\x63\x80\x0e\x01\x31\
+\x30\x30\x30\x30\xfc\xba\xcc\xc0\x30\xda\x01\x20\x11\x40\xd2\xee\
+\xaf\xab\x0c\x0c\x0c\x0c\xb0\xed\x32\xfc\x9c\x2c\xc2\x3c\xac\x7f\
+\xfe\xc1\x57\xb7\xff\x7f\xf1\xe1\x27\x00\x00\x00\xff\xff\x62\xba\
+\xff\xfa\x3b\x74\xde\x92\x81\xe1\xf7\xdf\xff\xe2\xfc\xec\xbc\x1c\
+\xcc\x90\x45\xa6\xd0\x1a\xf8\xd7\x35\x84\x89\xa3\x80\x58\xf0\x9f\
+\x81\x91\x81\xe1\xf7\x4d\x58\x3d\xfc\x1f\xb2\xbc\x4a\x4a\x90\xe3\
+\xf7\xdf\xff\xd0\x75\x44\x4c\x8c\xf7\x5e\x7f\x07\x00\x00\x00\xff\
+\xff\x62\x7a\xf9\xf1\x27\x6c\xad\x03\xe3\xdf\x7f\xff\x05\xb8\x58\
+\x18\x90\x6b\xe0\xff\xff\x18\xfe\x3e\x63\x40\xec\x77\x1c\x05\x44\
+\x82\xff\x0c\x0c\x0c\x0c\xff\x5e\x31\xfc\xfb\x02\xe5\xff\xff\xcf\
+\xc0\xc0\x20\xcc\xc3\x0a\x19\x6d\xfb\xcf\xc0\xc0\xc4\xc8\xf0\xfa\
+\xf3\x2f\x00\x00\x00\x00\xff\xff\x62\x7a\xf7\xf5\x0f\x13\x23\x74\
+\x39\xe2\xbf\xff\x0c\x90\xf2\x07\xb1\x86\xeb\xff\x67\x86\xbf\x6f\
+\x10\x26\x8e\x02\xe2\x01\x23\x03\xc3\xdf\x0f\x0c\xff\xde\x32\x30\
+\x30\xc0\x43\x4f\x84\x97\x0d\x1a\xb6\xff\x19\x98\x98\x18\x3f\x7c\
+\xfd\x03\x00\x00\x00\xff\xff\x62\xfa\xf0\xf5\x37\x13\x24\x46\x18\
+\x18\xfe\xff\xff\x0f\x89\x00\x84\x9e\xbf\x6f\x18\xfe\x7d\x18\xad\
+\x00\x48\x07\x90\xf2\xe3\x0f\xc3\x9f\xe7\x30\x2e\x03\x03\x03\x83\
+\x08\x2f\x2b\xb4\x02\x60\x60\x60\x66\x64\xfc\xf4\xe3\x0f\x00\x00\
+\x00\xff\xff\x62\xfa\xfd\xf7\x3f\xf2\x8e\x4a\x3e\x4e\x66\x24\x23\
+\x18\x18\xfe\xbe\x80\x6e\xbe\x18\xcd\x01\x24\x03\x46\x86\xff\x0c\
+\x0c\x7f\x9f\x31\x30\x30\xc0\x43\x8f\x8f\x83\x05\x76\x7a\x00\x64\
+\xd8\xff\x3f\x00\x00\x00\xff\xff\x62\xfa\xf5\xe7\x1f\x3c\x02\x18\
+\x19\x18\x58\x99\xd1\x52\xfb\xe8\xdc\x2f\x85\x00\x25\x00\x59\x98\
+\x51\x36\x10\x33\x32\x30\x00\x00\x00\x00\xff\xff\x62\xfa\xf6\xeb\
+\x1f\x13\x23\x23\x24\x82\x98\x98\x18\x05\x38\xe1\xc7\x59\x41\x72\
+\xc0\x6b\x58\x13\x69\x14\x90\x08\x20\x21\xfd\xe7\x15\x03\x03\x74\
+\x76\x8c\x81\x81\x41\x80\x93\x05\x6d\xf7\x24\x00\x00\x00\xff\xff\
+\x62\x62\x44\x0d\x5b\x8c\x82\x66\x74\xf8\x81\x42\x80\x12\x80\x98\
+\xe5\x38\x00\x00\x00\xff\xff\x1a\xed\xdf\x0e\x30\x00\x00\x00\x00\
+\xff\xff\x42\x8f\x00\x8c\xb2\x66\x34\x07\x50\x08\x50\x02\x10\xb3\
+\x28\x07\x00\x00\x00\xff\xff\x42\x8f\x80\x3f\x68\x5b\x99\x18\xb9\
+\xa8\xee\xa2\x91\x05\x18\xb9\x91\x79\x7f\x30\x76\x68\x00\x00\x00\
+\x00\xff\xff\x62\xe2\xe5\x60\xf9\x0b\x5b\x7a\xf5\xf7\xdf\xff\x0f\
+\xdf\xe0\xdb\x1c\x19\x19\x18\x18\x18\x98\x04\x47\xbb\xc1\x64\x02\
+\x48\x50\x33\x0b\x32\x30\x30\x30\xc0\x66\xb6\x3e\x7e\xfb\xf3\xf7\
+\xef\x7f\xe4\x8a\x17\x00\x00\x00\xff\xff\x82\x2f\x91\x83\x82\xbf\
+\x68\x31\xc4\xc8\x01\x31\x8c\x96\x2e\x1d\xd6\x00\x1a\x80\x50\x80\
+\x16\xbc\xff\x19\x18\x00\x00\x00\x00\xff\xff\x62\xe2\x62\x67\xfe\
+\xf7\xff\x3f\xbc\x70\x7a\xfb\x05\xde\x6e\x65\x62\x60\x60\x60\x60\
+\x96\x62\x60\xe2\x80\xce\xf4\x8f\x02\x12\x00\x23\x03\xc3\x3f\x06\
+\x26\x06\xd8\x79\x8c\xd0\xa2\xfe\xed\xd7\xdf\x90\x69\x61\xc8\xd2\
+\x44\x2e\x56\x26\x00\x00\x00\x00\xff\xff\x62\x12\xe4\x66\xf9\x07\
+\xab\x27\x98\x18\x19\xdf\x7c\xfe\x85\x62\x0e\x93\x10\x03\x93\x20\
+\xcc\xc4\x51\x40\x0a\xf8\xff\x9f\x81\x91\x83\x81\x09\x72\x04\x20\
+\x34\xf4\xde\x7c\x42\x6c\x64\xff\xfb\xef\x3f\x1f\x17\x0b\x00\x00\
+\x00\xff\xff\x62\x12\xe2\x66\x85\x1c\x68\xf8\xff\x3f\x03\x13\x13\
+\xc3\xbb\x2f\xbf\x19\xa0\x93\x01\x8c\x0c\x0c\xff\x19\x98\x38\x18\
+\x98\xc5\x46\xfb\x62\xa4\x03\x48\x0d\x2a\xc4\xc0\x24\x84\x2c\xfa\
+\xf6\xcb\x2f\x68\x05\xc0\xc8\xf0\xef\x3f\x83\x20\x37\x2b\x00\x00\
+\x00\xff\xff\x62\x92\x11\xe2\xf8\xff\x0f\x3a\x42\xcd\xcc\xc4\xf8\
+\xf6\xcb\xef\x7f\xff\xff\xc3\x2a\x86\x7f\x0c\x0c\x8c\xb0\x4c\x34\
+\x0a\x48\x02\x8c\x0c\xff\x19\x18\x58\xa4\x19\x98\x38\xa1\x5b\xdf\
+\x19\x19\x19\x18\x18\x5e\x7f\xfe\xc5\xc4\x04\x3d\x87\xe3\xdf\xbf\
+\xff\x52\x02\xec\x00\x00\x00\x00\xff\xff\x62\x92\x17\xe1\x84\xc4\
+\xc9\xff\xff\x0c\xac\x4c\x4c\xaf\x3f\xfd\x7a\xf7\xe5\x0f\x03\xec\
+\xa4\x20\x06\x06\x06\x06\x36\x3d\x06\x06\x0a\x8e\x86\x1d\x99\x00\
+\xba\x25\x43\x9b\x81\x81\x81\xe1\xff\x5f\xc8\xe8\xff\xcf\x3f\xff\
+\x9e\xbd\xff\xc9\xca\xcc\x04\x99\x01\xfb\xff\x9f\x41\x41\x84\x13\
+\x00\x00\x00\xff\xff\x62\x12\xe7\x63\x65\x65\x61\xfc\xf7\x1f\x72\
+\x0e\x16\xc3\x97\x9f\x7f\x21\xd5\xc0\x7f\x78\xcb\x87\x55\x8b\x81\
+\x61\xb4\x1d\x44\x16\x60\xd3\x82\x32\xfe\x33\x30\x30\x30\xbc\xff\
+\xf2\xfb\xc3\xb7\x3f\x2c\x4c\xd0\xc1\x7f\x26\x26\x46\x09\x01\x36\
+\x00\x00\x00\x00\xff\xff\x62\x92\x15\xe6\x84\x9c\xb8\xcd\xc8\xc0\
+\xc0\xc4\xc4\xf8\xe3\xf7\xdf\x7b\xaf\xbf\x33\x40\x97\x38\x32\x31\
+\x30\x30\x30\xb0\xeb\x33\x30\x0d\xa1\x03\x0f\x07\x07\x80\x2c\x0d\
+\x62\x37\x66\x60\x60\x60\x80\x6d\x8b\x7c\xf8\xf6\xc7\x97\x1f\x7f\
+\x20\xab\xd2\xff\xfe\xfb\xcf\xc5\xc6\xac\x28\xca\x09\x00\x00\x00\
+\xff\xff\x62\x12\xe2\x61\x95\x12\xe4\xf8\xf5\x07\x31\x2b\x70\xfd\
+\xd9\x57\x98\x31\x90\x7c\xa4\xce\xc0\x22\xcf\xf0\xff\xff\xe8\xc2\
+\x08\xa2\x01\x23\x03\xc3\x3f\x06\x66\x01\x06\x36\x43\x06\x06\x06\
+\x78\xb8\xdd\x7c\xfe\x15\x32\xfb\x02\xd9\x00\x20\xca\xc7\x26\x23\
+\xc8\x01\x00\x00\x00\xff\xff\x62\x62\x64\x60\x50\x10\xe5\xf8\x83\
+\xb4\x62\xeb\xce\xcb\x6f\x0c\xd0\x7d\x61\xb0\x53\x09\xd8\x8d\x19\
+\xfe\x8f\x56\x03\xc4\x03\x26\x86\x7f\x0c\x0c\x6c\xba\x0c\x4c\x82\
+\x90\x86\x0c\x24\xe4\x6e\xbe\xf8\x06\xdb\x82\xc7\xf8\xfb\xef\x7f\
+\x59\x21\x76\x76\x56\x26\x00\x00\x00\x00\xff\xff\x62\x62\x60\x60\
+\x50\x16\xe3\x82\x1e\xd2\xff\x9f\x81\x8d\x85\xf1\xe1\x9b\xef\xef\
+\xbf\xfe\x66\x44\xae\x87\x39\x6c\x18\x18\x18\x46\x5b\xa2\xc4\x02\
+\xe8\x81\x7e\x16\x0c\x0c\x90\xe5\x10\x0c\x4c\x8c\x8c\xbf\xfe\xfc\
+\xbb\xf3\xe2\x1b\x1b\x0b\x13\x7c\x05\xa2\xa2\x28\x27\x03\x03\x03\
+\x00\x00\x00\xff\xff\x62\x62\x60\x60\x30\x90\xe7\xe5\x61\x67\x86\
+\xac\xd8\x62\x65\x66\x7a\xfb\xe5\x37\x64\xdd\xe8\xbf\xff\xff\xa1\
+\xd5\x00\xa7\x0b\x03\x13\xcb\x10\x3f\x80\x92\x8e\x00\x52\x01\x70\
+\x79\x30\x30\x30\x30\x30\x42\xcf\x26\xbe\xf9\xfc\xeb\xd3\xf7\x3f\
+\xd8\x61\x2b\x10\x59\x99\x19\x8d\x15\xf9\x19\x18\x18\x00\x00\x00\
+\x00\xff\xff\x62\x62\x60\x60\x90\x13\xe6\x10\xe5\x63\xfb\x05\x9b\
+\x1c\xfe\xfb\xef\xff\x95\xa7\xc8\xd5\xc0\x7f\x06\x56\x2d\x06\x36\
+\xb5\xd1\x6a\x80\x38\xc0\xc8\xf0\xff\x1f\x03\x8b\x18\x34\x07\x30\
+\x40\xf7\x20\x5d\x7d\xf6\x15\xb2\x57\x92\x11\x76\xaa\x9f\x8a\x38\
+\x27\x03\x03\x03\x00\x00\x00\xff\xff\x62\xfa\xf7\xef\x3f\x3b\x0b\
+\x93\xb6\x34\xcf\xcf\x3f\xff\x20\xc7\x18\xb0\xb3\x30\x9d\xb9\xf7\
+\xf1\xef\xbf\xff\xcc\x90\xfe\x30\x24\xe1\x73\x7a\x8f\xae\x50\x27\
+\x0e\x30\x33\xfc\x67\x64\xe0\x74\x65\x60\xe4\x62\x60\xf8\xcb\xc0\
+\xc0\x08\xdd\x83\x74\xe7\x23\x0b\xf4\x7c\x7b\xc6\x9f\xbf\xff\xa9\
+\x8a\x73\x09\x71\xb3\xfe\xff\xcf\x00\x00\x00\x00\xff\xff\x62\x82\
+\xb4\xef\x2d\x55\xf8\x21\x39\xe5\xff\x7f\x06\x0e\x36\xa6\x3b\x2f\
+\xbf\xdd\x7a\xf1\x8d\x81\x11\xa9\x14\xe2\x89\x65\x60\x62\x1e\x2d\
+\x85\x88\x00\xff\x18\x18\xff\x33\xf0\xc4\x43\x38\x90\x6d\x5e\xcf\
+\x3f\xfc\xbc\xfc\xf8\x0b\x27\x2b\xf4\x0c\x88\xdf\x7f\xff\x99\x2b\
+\xf3\x33\x30\x30\xfc\xfb\xff\x1f\x00\x00\x00\xff\xff\x82\xee\x11\
+\x33\x52\xe0\x13\xe4\x66\xfd\xfd\x17\x7a\xec\xd3\x8f\xdf\xff\x0e\
+\xdf\x7c\xcf\x00\xad\x83\x99\x18\x18\xfe\x31\xb0\xe9\x32\xb0\x9b\
+\x40\x8e\x2d\x1e\x30\xaf\x0d\x01\xc0\xc4\xf0\xff\x1f\x03\x9b\x22\
+\x03\x87\x3d\x64\xed\x0f\xa4\x07\x70\xe2\xce\xc7\x0f\xdf\xa0\x47\
+\x4c\xff\xfb\xff\x9f\x8b\x8d\x19\x12\x01\x8c\x8c\x0c\x00\x00\x00\
+\x00\xff\xff\x62\x82\xef\x65\x35\x94\xe7\xfd\xfe\xeb\x1f\x74\x2f\
+\x2b\x2b\xf3\xc1\x1b\xef\x7f\xfe\xf9\x07\x9d\x2e\x80\x6c\x4d\xe5\
+\xcb\x60\x18\x1d\x96\xc6\x0f\x18\x99\x18\xfe\x33\x30\xf0\x24\x33\
+\x30\xb2\x41\x4a\x0b\xc8\x21\x66\x7b\xae\xbe\x65\x65\x86\xec\xc1\
+\x66\xf8\xfe\xeb\x9f\xba\x14\xb7\xb2\x38\x27\x64\x4b\x24\x00\x00\
+\x00\xff\xff\x82\xec\x94\x67\x60\x60\x60\x70\xd2\x12\x86\xdc\xd5\
+\x01\x2f\x85\xce\xde\xff\xc4\x08\x39\xc7\x03\x72\x10\x34\x77\x04\
+\x03\x9b\x34\xc3\xbf\x7f\xa3\x55\x31\x0e\xc0\xc8\xf0\xff\x2f\x03\
+\x33\x0f\x03\x6f\x1a\x03\x03\x03\x03\x23\x74\xd3\xf5\xcd\x17\x5f\
+\x2f\x3e\xfa\xcc\xc5\xce\x0c\x39\x12\xe2\xd7\x9f\x7f\x0e\x1a\x82\
+\xf0\x53\x83\x00\x00\x00\x00\xff\xff\x82\xee\x94\x67\x60\x60\x30\
+\x53\xe2\x17\xe3\x65\xfd\xf5\xe7\x1f\x7c\x33\x2a\xe4\x5c\x0f\xc8\
+\xb9\x67\x0c\x0c\x7f\x18\x18\x39\x18\x78\xd3\x19\xe0\xb5\xc2\x28\
+\x40\x07\xcc\x0c\xff\xfe\x33\xf0\x44\x31\x30\x8b\x42\xce\x36\x81\
+\x54\xab\x3b\x2f\xbd\xfd\xf9\x07\xba\x35\xec\xef\xbf\xff\xbc\x1c\
+\x2c\x36\x6a\x82\x0c\xb0\xee\x19\x00\x00\x00\xff\xff\x82\xde\x79\
+\xf2\xef\xdf\x7f\x41\x6e\x16\x6b\x35\x81\x6f\xbf\xfe\x32\x31\x41\
+\x0e\xb7\x61\x3e\x72\xeb\xc3\x93\x77\x3f\x98\x18\x21\x27\xef\x32\
+\x33\x30\xfc\x67\xe0\xcb\x61\x60\x11\x66\xf8\xf7\x77\xb4\x24\xc2\
+\x00\x90\x29\x30\x76\x06\x81\x72\x08\xf7\xff\x7f\x06\x26\x26\xc6\
+\x8f\xdf\xfe\xec\xbe\xf2\x96\x1b\x72\x04\x0a\x13\xe3\xd7\x9f\x7f\
+\x8d\x14\x78\xe5\x45\x38\xe0\x63\xfe\x00\x00\x00\x00\xff\xff\x42\
+\x49\xcb\xbe\x86\x62\x6c\x2c\x4c\x90\x75\x11\xcc\x4c\x8c\x9f\xbf\
+\xff\x59\x73\xfa\x25\x03\x03\x6c\xf3\x31\xc3\x5f\x06\x26\x41\x06\
+\x9e\xd8\xd1\xaa\x18\x1b\x60\x66\xf8\xf7\x8f\x81\xdb\x97\x81\x45\
+\x09\x92\xfc\x21\xbb\x1c\x37\x5f\x78\xfd\xe2\xe3\x4f\x56\x16\x26\
+\xe8\x94\x0b\x03\x83\xaf\xa1\x18\x03\xd2\x76\x0b\x00\x00\x00\x00\
+\xff\xff\x82\x9d\x17\xc4\xc4\xf8\xff\x3f\x83\xae\x2c\x8f\x81\x1c\
+\xef\xb7\x5f\x7f\xa0\x27\x3c\x71\xb0\x6c\xbf\xf8\xe6\xf5\xa7\x5f\
+\x8c\xd0\x13\x9e\x98\x19\x18\xfe\x31\x08\x54\x31\xb0\x8a\x33\xfc\
+\x1f\xad\x09\x90\x01\x64\xf4\x8d\x8b\x41\xb0\x1d\x32\xfd\x02\xa9\
+\x60\xbf\xfd\xfa\xbb\xfe\xcc\x2b\xc4\x09\x64\xbf\xff\xaa\x8a\x73\
+\x59\xab\x0a\xfc\x67\x60\x80\x5f\x42\x09\x00\x00\x00\xff\xff\x42\
+\x3e\xb4\xef\x3f\x03\x03\x83\x97\xbe\xc8\xef\x3f\xf0\x13\x9e\x18\
+\xdf\x7e\xf9\xbd\xe5\xc2\x1b\x46\xa8\x2c\x23\xc3\xff\x7f\x0c\xcc\
+\xa2\x0c\x02\x95\xb0\x4b\x61\x47\x01\x03\x03\x03\x03\x03\x23\x33\
+\xc3\xbf\x7f\x0c\x7c\x59\x0c\xac\x2a\x90\xc5\xe4\x90\x10\xdf\x77\
+\xed\xdd\xa3\xb7\xdf\x21\x27\x90\x31\x33\x32\x7e\xff\xf9\xcf\x55\
+\x47\x88\x95\x05\xe5\x86\x19\x00\x00\x00\x00\xff\xff\x42\x04\x22\
+\xe4\x84\x27\x7b\x0d\x21\x39\x61\x8e\x9f\x7f\xfe\x41\x9a\xa7\x5c\
+\xec\xcc\x9b\xce\xbd\xfa\xfa\xf3\x2f\xf4\xe8\x63\xc8\x61\x1d\x3c\
+\x29\x0c\xac\xd2\x0c\xff\xfe\x8c\x66\x02\x06\x06\x06\x58\xba\xe4\
+\x61\xe0\x2f\x62\x60\xf8\xc7\xc0\xc8\x04\x19\x38\xfe\xfb\xef\xff\
+\xea\x93\x2f\xe1\xa3\x6f\xbf\xff\xfe\x17\xe6\x65\xf5\xd0\x13\x65\
+\x40\xde\x7f\xc7\xc0\x00\x00\x00\x00\xff\xff\x62\x42\x32\x86\xe1\
+\xdf\xbf\xff\x3c\x1c\xcc\x91\x16\x92\xdf\x60\x21\xce\xce\xc2\xf4\
+\xf8\xdd\x8f\x95\x27\x5f\xc0\x2e\x83\x80\xcc\xd4\x73\x33\x08\x4f\
+\x81\x69\x1a\x05\x4c\x0c\xff\xfe\x31\x08\x75\x32\x30\x4b\x42\x56\
+\xfa\x40\x8e\x1c\xdb\x76\xf1\xcd\xb5\xa7\x5f\xb8\xd8\x98\xff\xfd\
+\x67\x60\x62\x62\xfc\xfc\xe3\x4f\x80\x91\x98\x04\x3f\xe4\xce\x11\
+\x84\x66\x00\x00\x00\x00\xff\xff\x42\x49\xc2\x90\x40\xf7\xd0\x17\
+\x96\x11\x82\x65\x82\x7f\xff\x79\x39\x59\x96\x1e\x7b\x0e\xbb\x88\
+\xe0\x3f\xf4\x42\x27\xee\x00\x06\xde\x18\x86\x7f\x7f\x61\x77\x0b\
+\x8d\x58\xc0\xcc\xf0\xef\x2f\x03\xb7\x13\x03\x5f\x16\xc3\xff\xbf\
+\x0c\x0c\xcc\x90\xd2\xff\xfd\xd7\xdf\xb3\xf6\x3f\xe1\x64\x67\x86\
+\x54\xc5\x90\x13\x80\x02\x4d\xc4\xfe\xc3\x1a\xfd\x70\x00\x00\x00\
+\x00\xff\xff\x42\x89\x00\x48\x32\xe7\xe5\x60\x09\x31\x13\x87\x66\
+\x02\xc8\xdd\xb4\x3f\xfe\x4e\xda\xf5\x88\x81\x01\x36\x33\x0c\x39\
+\xb5\x43\xb0\x95\x81\x99\x9f\xe1\xdf\xbf\x11\x9c\x0f\x20\x0d\x49\
+\x16\x06\xa1\x5e\xe8\xb6\x48\xd8\x61\x89\x33\xf6\x3d\x79\xf1\xf1\
+\x27\x3b\x0b\xd3\x7f\x58\xf2\xf7\xd6\x17\x91\x14\x60\x87\x9f\xa0\
+\x08\x07\x00\x00\x00\x00\xff\xff\x42\x2f\xc4\x21\x99\x20\xd8\x44\
+\x4c\x49\x94\xeb\xc7\xaf\xbf\x8c\xb0\x8b\x08\x0e\xde\x78\xb7\xef\
+\xda\x3b\x26\xe8\x45\x04\x4c\x0c\x0c\xff\x19\x58\xe4\x18\x44\xa7\
+\x33\xfc\xff\x37\x72\x9b\xa4\x8c\xcc\x0c\xff\xfe\x32\x08\x75\x32\
+\xb0\x19\x40\xb6\xa3\x42\xce\x17\xbe\xf8\xe8\xf3\xa6\x73\xaf\xf8\
+\x39\x59\x21\x47\x44\xfc\xfe\xf3\x4f\x94\x97\x2d\xd6\x46\x0a\x92\
+\x39\xd0\xcc\x00\x00\x00\x00\xff\xff\xc2\x58\x9e\xce\xc8\xf0\xff\
+\xff\x7f\x4e\x36\xe6\x0c\x67\x99\x5f\xb0\x65\xa4\x90\xd1\xa1\x99\
+\xfb\x9e\x7c\xff\xf5\x17\x76\x82\x0a\x33\x03\xc3\x1f\x06\xee\x48\
+\x06\xa1\x72\x86\x7f\x7f\x18\x18\xd1\xae\x89\x1f\x01\x80\x91\x85\
+\xe1\xef\x1f\x06\xbe\x38\x06\xfe\x22\xc8\x15\xc4\x90\xad\xbd\xff\
+\xfe\xff\x9f\xba\xe7\x31\xbc\x9a\x85\x9c\x3f\x99\x68\x2f\x2d\xcc\
+\xc3\xfa\xff\x3f\x7a\xf2\x67\x60\x60\x00\x00\x00\x00\xff\xff\xc2\
+\xd2\x8c\x81\x8c\xc7\x39\x69\x09\x39\x68\x0a\x7d\x82\x5d\x44\xc0\
+\xc1\xca\x74\xef\xd5\xb7\x39\x07\x9e\x22\x1d\x7d\xcc\xcc\xc0\xf0\
+\x97\x41\xb0\x95\x81\xd3\x9c\xe1\xef\xef\x11\x56\x19\x30\x33\xfc\
+\xfb\xc3\xc0\xa6\xcc\x20\x3c\x15\x7e\x24\x0a\xa4\xaf\xbb\xf2\xc4\
+\xcb\xf3\x0f\x3e\x71\xb3\x33\x43\x86\x9a\xbf\xfe\xfc\x6b\x20\xcf\
+\x17\x62\x2a\xf6\xef\xff\x7f\x46\x6c\x17\xd0\x03\x00\x00\x00\xff\
+\xff\xc2\x7d\x8b\x12\x03\x43\x96\x8b\x2c\x37\x3b\x33\xfc\x0e\x07\
+\x7e\x2e\x96\xa5\xc7\x9e\x1f\xbe\xf9\x1e\x76\x23\x0a\x64\xd0\x88\
+\x89\x41\x6c\x35\x03\x9b\xca\x48\x6a\x95\x32\x31\xfc\xff\xcf\xc0\
+\x2c\xc6\x20\xbe\x81\x81\x89\x87\x81\x81\x81\x81\x81\x11\x72\xd9\
+\xed\x95\x27\x5f\xa6\xed\x7d\xcc\xcb\xc9\x02\xbd\x31\xe6\x3f\x03\
+\x23\x03\x43\xae\x9b\x2c\x13\x6c\x40\x0d\x13\x00\x00\x00\x00\xff\
+\xff\xc2\x1e\x64\x90\x83\x2c\xe5\x85\x39\xd2\x9d\x64\x3e\x7d\x83\
+\x9e\xe5\xfd\x9f\x81\x81\x9d\x95\xa9\x6d\xd3\xfd\xe7\x1f\x7e\xc2\
+\xae\x66\x62\x62\x60\xf8\xc7\xc0\x22\xcb\x20\xb1\x95\x81\x91\x6b\
+\x64\xcc\x59\x32\x42\xfb\xbd\x12\xeb\x18\xd8\x74\x18\x18\xfe\x40\
+\x26\x1d\x19\x19\x19\x3f\x7d\xff\xd3\xb8\xfe\xee\x7f\xd8\x35\xd6\
+\x2c\xcc\x8c\xef\xbf\xfe\x8e\xb2\x92\xd4\x93\xe5\x85\xdd\xba\x83\
+\x05\x00\x00\x00\x00\xff\xff\xc2\x19\x5e\x90\x64\x1e\x66\x26\x61\
+\xaf\x29\x88\x7c\x23\xca\x87\x6f\xbf\x9b\xd6\xdf\xfb\xfd\xf7\x3f\
+\x6c\x3f\x3d\x33\x03\xc3\x1f\x06\x56\x35\x06\xf1\xc5\x48\x4e\x1c\
+\xae\x80\x91\x81\x81\x89\xe1\xdf\x5f\x06\xd1\x69\x0c\xec\xd6\x90\
+\x2b\xbc\xfe\xc3\x5a\x3e\x1d\x5b\xee\x3f\x7c\xf3\x03\x7a\xaf\x29\
+\x13\xe3\x97\x1f\x7f\xf5\xe4\x78\x52\xec\xa5\x91\x6e\x16\xc7\x02\
+\x00\x00\x00\x00\xff\xff\xc2\x97\x60\x19\x19\x19\x19\x19\x19\x2a\
+\x7c\x14\x05\xb9\x59\x7f\xc1\x6e\x44\xe1\xe5\x60\x39\x75\xff\x63\
+\xcf\xb6\x07\x48\x95\x01\x0b\x03\xc3\x1f\x06\xae\x20\x06\xf1\x15\
+\xb0\x61\xbb\x61\x99\x0f\xe0\xa1\x3f\x99\x81\x37\x13\x7a\x65\x2f\
+\xec\xca\xaf\xd9\x07\x9e\xec\xbc\xf4\x16\x72\xc5\x33\xa4\x4b\xcb\
+\xc2\xc4\x58\xed\xa7\xc4\xce\x4a\xe0\x8e\x6d\x00\x00\x00\x00\xff\
+\xff\xc2\x17\x52\x90\xcb\xb0\xc4\xf8\xd8\x4a\xbd\x14\xbe\xff\x82\
+\x1e\x3e\xf7\xe7\xdf\x7f\x21\x6e\xd6\x75\x67\x5e\xae\x39\xf5\x92\
+\x99\x89\x11\xb6\xa7\x8c\x85\x81\xe1\x37\x03\x77\x18\x2c\x0e\x86\
+\xdf\x70\x29\x13\x2c\xf4\xa7\x30\xf0\xe5\x30\x30\xfc\x81\x34\x3a\
+\xfe\xfc\xfb\xcf\xc2\xc4\xb8\xef\xda\xbb\xb9\x07\x9f\x0a\x72\x43\
+\xaf\x18\x67\x62\x62\xfc\xf8\xfd\x4f\x8e\xab\x9c\x8a\x38\x17\x9e\
+\xc2\x07\x02\x00\x00\x00\x00\xff\xff\x22\x90\x54\x21\x05\x91\xb3\
+\xb6\x50\x94\x95\xc4\xfb\x2f\xb0\x59\xcd\x7f\xff\xf9\x38\x58\x7a\
+\xb7\x3f\x3c\x72\xeb\x03\x0b\xe2\x8a\x32\x56\x86\xff\xf0\x38\x60\
+\x66\xf8\xff\x17\x76\xa1\xea\x30\x00\x4c\x0c\xff\xff\x41\xd3\x3e\
+\x5f\x36\x72\xda\x67\x61\x62\xbc\xf2\xe4\x4b\xd3\xfa\xbb\x1c\xac\
+\xcc\xff\xe1\xb7\x3d\x7e\xfb\xed\xa5\x27\x12\x66\x2e\x8e\x74\xdb\
+\x23\x4e\x00\x00\x00\x00\xff\xff\x22\x5c\x56\x40\x5a\xa5\xd9\x2e\
+\x72\xa6\x4a\x7c\xd0\x56\x29\x03\x03\x03\x23\x03\x3b\x2b\x53\xcd\
+\x9a\xdb\x67\xee\x7f\x42\xe4\x03\x46\x56\x06\x86\x3f\x0c\xdc\x61\
+\x0c\xd2\x07\x19\x58\x95\x18\xfe\xfe\x1d\x0e\xfd\x03\x46\x16\xe8\
+\x18\xb0\xd4\x56\xe4\xb4\x0f\x09\xdc\xdb\x2f\xbe\x95\xae\xb8\xf5\
+\xef\x3f\x03\x0b\x13\x23\xe4\x9a\x8b\xaf\xbf\xfe\xaa\x88\x71\x95\
+\xf9\x28\x62\xed\x76\x61\x02\x00\x00\x00\x00\xff\xff\x22\x1c\x01\
+\x90\xfd\x1c\xac\xcc\x8c\xf5\x81\xca\xc2\x3c\xac\x3f\x7e\x43\x96\
+\x0f\x31\xb0\x30\x31\xfe\xfb\xc7\x50\xb9\xea\xf6\xcd\xe7\x5f\x91\
+\xf2\x01\x0b\x03\xc3\x1f\x06\x76\x2b\x06\xc9\x7d\x0c\xec\x3a\x0c\
+\x7f\x7f\x33\x30\x30\x0f\xe1\x6a\x19\xd2\xdb\x62\x91\x63\x90\xdc\
+\xcd\xc0\xe9\x05\xbd\x38\x13\x16\xfa\xcf\x3e\xfc\x2c\x5d\x71\xeb\
+\xd3\xb7\x3f\xec\xac\x4c\x7f\xff\xff\x67\x62\x64\xf8\xfd\xf7\x3f\
+\x1b\x33\x53\x43\x90\x32\x2f\x07\x33\xe4\x14\x5c\x82\x00\x00\x00\
+\x00\xff\xff\x22\xaa\xb6\x84\x5c\xbe\x24\x29\xc0\xde\x11\xa6\xc6\
+\xcc\xc4\xf0\xe7\xdf\x3f\x66\x46\x86\xbf\xff\xff\xb3\xb1\x32\xfd\
+\xf8\xfd\xaf\x60\xc9\xcd\x0b\x0f\x3f\x33\xa3\xc5\x01\x8b\x3c\x83\
+\xd4\x51\x06\xfe\x14\x86\x7f\x7f\x87\x66\x95\xc0\xcc\xc0\xc0\xc4\
+\xf0\xf7\x0f\x03\x4f\x30\x83\xf4\x29\x06\x36\x7d\xb4\x5a\xf7\xce\
+\xcb\x6f\xb9\x8b\x6e\xbc\xfe\xf4\x8b\x8b\x9d\xf9\xcf\xbf\xff\x4c\
+\x8c\x0c\xff\xfe\x33\xfc\xfc\xfd\xaf\x29\x58\x19\x72\xd1\x2f\x31\
+\xc9\x9f\x81\x81\x01\x00\x00\x00\xff\xff\x22\xb6\xb9\x02\x19\x05\
+\xd2\x95\xe5\xe9\x8e\x50\xfb\xf7\x8f\xe1\xef\x3f\x06\x66\x46\x86\
+\xbf\xff\xfe\xb3\xb3\x32\x7d\xf9\xf9\xb7\x60\xe9\xcd\x13\x77\x3e\
+\x42\xe2\xe0\x3f\x03\x03\x03\x03\x0b\x03\xc3\x3f\x06\x26\x3e\x06\
+\x91\xd9\x0c\xa2\x53\x18\x18\xd8\x18\xfe\xfd\x1d\x3a\x59\x81\x11\
+\x3a\xc8\xf3\xff\x1f\x83\x50\x03\x83\xf8\x1a\x06\x66\x71\xe8\x95\
+\xbd\xb0\xd0\xbf\xf6\xec\x6b\xee\xa2\x1b\x2f\x3e\xfc\x84\x87\x3e\
+\x03\x03\xc3\xb7\x9f\x7f\x1b\x83\x95\x6d\xd5\x05\x89\x29\xfa\xe1\
+\x00\x00\x00\x00\xff\xff\x62\xc4\x73\xd3\x2a\x26\x80\x18\xbd\xe7\
+\xea\xbb\xda\xb5\xb7\x39\x59\x99\x99\x18\x19\xfe\xfe\x67\x60\x66\
+\x64\xfc\xf3\xef\xff\xdf\x7f\xff\x4b\xbd\x15\xfc\x0c\x45\x61\x97\
+\x06\x31\x30\x30\xfc\x87\xae\x6e\xff\x79\x9a\xe1\x6d\x09\xc3\xf7\
+\x43\x0c\x4c\x90\x22\xf5\xef\xe0\xdd\x70\xc3\xc8\xc2\xf0\xff\x0f\
+\xc3\x3f\x06\x06\x0e\x63\x06\xa1\x0e\x06\x4e\x17\xc8\xf2\x42\x48\
+\x6f\xeb\x3f\xc3\x7f\x26\x46\xc6\x43\x37\xde\x37\x6e\xb8\xfb\xfb\
+\xcf\x7f\x76\x56\x26\x78\xe8\x7f\xfa\xfe\xa7\xcc\x5b\x31\xd4\x8c\
+\xa8\x8a\x17\x19\x00\x00\x00\x00\xff\xff\x22\x2d\x02\x18\x60\x71\
+\xb0\xfb\xca\xdb\xfa\x75\x77\xd9\x59\x99\x98\xa1\x71\xc0\xf0\xef\
+\x3f\xc3\xd7\x9f\x7f\x63\xad\x25\xb3\x5c\xe4\x20\xed\x57\xc4\x75\
+\xcf\x90\xf2\xe7\xd3\x74\x86\x77\x65\x0c\x7f\xbf\x30\x30\x31\xc0\
+\x6e\x43\x1e\x54\x80\x99\x81\xe1\x2f\xc3\x3f\x06\x06\x26\x56\x06\
+\xc1\x06\x06\x81\x0a\xc8\x2d\x18\xd0\x71\x1e\x58\x67\x6a\xd1\x91\
+\x67\x33\xf7\x3d\x61\x65\x61\x64\x61\x82\xce\x3b\x32\x30\x30\x7c\
+\xfe\xfe\xb7\xc4\x4b\x3e\xcc\x5c\x82\xd4\xd0\x67\x60\x60\x00\x00\
+\x00\x00\xff\xff\x22\x39\x02\x18\x50\xe3\x80\x8d\x85\x89\x85\x89\
+\x11\xe2\x14\x46\x46\xc6\x77\x5f\x7e\x3b\x68\x08\xd6\x04\x28\x09\
+\x71\xb3\x22\xb9\x06\xb2\xfd\x80\x89\xe1\xf7\x2d\x86\x8f\x7d\x0c\
+\x9f\x17\x30\xfc\xfb\xc9\xc0\xc4\x08\xbb\x7a\x6e\xc0\x73\x03\x33\
+\x03\xc3\x7f\x86\x7f\xff\x18\x98\x18\x19\xb8\x23\x19\x04\x4a\x19\
+\xd8\x0c\x18\xa0\x17\xf4\x42\x0f\x1e\x66\x66\x62\xfc\xfe\xeb\x6f\
+\xe7\xd6\x07\x9b\xcf\xbd\x16\xe0\x86\x9e\x6b\x08\x29\xf7\xbf\xfc\
+\x20\x3f\xf4\x19\x18\x18\x00\x00\x00\x00\xff\xff\x22\x27\x02\xe0\
+\x6e\x3a\x7e\xfb\x43\xd5\xea\x3b\x7f\xfe\xfd\xe7\x60\x65\x82\xd4\
+\xc0\x2c\xcc\x8c\x1f\xbf\xfd\x91\x11\xe2\xa8\xf2\x55\x34\x56\xe4\
+\x83\x67\x5b\x88\x26\x68\x56\xf8\x75\x99\xe1\x5d\x15\xc3\xb7\x2d\
+\x90\x73\xd5\x06\xae\x50\x62\x84\xa6\x71\xc8\x94\x12\xa7\x3d\x83\
+\x50\x1b\x03\xbb\x15\xb2\x53\xff\xfd\x67\x60\x60\xf8\xcf\xc4\xc8\
+\x78\xf3\xf9\xd7\x96\x8d\xf7\x6e\x3c\xff\x26\xc0\x05\x1d\x68\x63\
+\x62\x62\xfc\xf3\xf7\xdf\xaf\x3f\xff\x6b\xfd\x95\x50\x2f\x78\x27\
+\x0d\x00\x00\x00\x00\xff\xff\x22\x33\x02\x18\x60\x71\x70\xe6\xfe\
+\xa7\xea\xd5\xb7\x3f\xff\xf8\xcb\xc3\xce\x0c\xe9\x0d\x40\x2e\x84\
+\xfb\xff\xff\x7f\x9a\xa3\x4c\x9c\x8d\x14\x03\x03\xc3\xbf\x7f\xff\
+\x19\xa1\xfb\x64\xff\x21\x5a\x44\x3f\x4f\x31\x7c\x9c\xc8\xf0\x75\
+\x15\xc3\xbf\x3f\x0c\x8c\x0c\xb0\x5e\x1b\x1d\x32\x04\x23\x03\x03\
+\x13\x03\x23\x03\xc3\x7f\x58\xd0\x73\xfb\x31\xf0\x17\x31\x70\xd8\
+\x43\xbc\x05\x2d\xf1\x19\x18\xfe\xc1\xc2\x74\xc3\xd9\x57\x93\x76\
+\x3d\xfa\xf1\xfb\x1f\xdc\x8f\x2c\x4c\x8c\x90\x4b\x60\xea\x03\x95\
+\x9d\x10\x77\x2c\x93\x03\x00\x00\x00\x00\xff\xff\x22\x3f\x02\x18\
+\x60\x71\x70\xf7\xd5\xb7\xfa\x75\x77\x6f\x3e\xff\x26\xc0\xc5\x02\
+\xd9\x66\x03\xc9\x9b\x9f\x7f\xfc\x31\x55\xe4\xcf\x70\x96\xd1\x93\
+\xe5\x85\x2b\x66\x60\x60\x40\x94\x48\x0c\x0c\x0c\xbf\xae\x32\x7c\
+\x9e\xcf\xf0\x65\x31\xf4\x68\x2f\x68\xf5\xc0\x00\x2b\x01\xa8\x08\
+\x98\x60\x6d\xb0\xbf\x50\x83\x99\xf9\x19\x78\x22\x18\x78\x53\x18\
+\xd8\x4d\x60\x36\x42\x47\x73\x21\x23\xfb\x0c\x0c\x0c\xb7\x5f\x7e\
+\x9b\xb9\xef\xc9\xa1\x9b\xef\xb9\xd9\x98\x99\x99\xa1\xcb\x49\x58\
+\x98\x18\x3f\x7c\xff\x23\x23\xc8\x5e\x17\xa8\x6c\x20\xc7\x4b\x49\
+\xe8\x33\x30\x30\x00\x00\x00\x00\xff\xff\xa2\x28\x02\x18\x60\xc1\
+\xfa\xed\xd7\xdf\xae\x2d\x0f\xb6\x5c\x78\xcd\xc7\xc9\x02\xef\x10\
+\x30\x33\x31\x7e\xf9\xf1\x97\x99\x89\xc1\xd7\x50\x34\xd5\x51\x46\
+\x88\x9b\xf5\x3f\x03\xc3\xff\x7f\xf0\x3b\xcc\x90\x72\xc3\xdf\x37\
+\x0c\xdf\xb7\x30\x7c\x59\xc6\xf0\xfd\x10\xc3\xbf\x9f\x0c\x0c\xb0\
+\x41\x5f\x06\x16\xe8\x6a\x61\x68\x98\x91\xe4\x54\x46\x68\xa0\x43\
+\x12\xfb\x7f\xd8\xc6\x67\x26\x16\x06\x76\x4b\x06\x9e\x08\x06\x2e\
+\x7f\x06\x16\x69\x34\x97\x40\x56\x7e\x30\x31\x32\x7c\xfb\xf9\x77\
+\xfe\xe1\x67\x6b\x4e\xbd\xfc\xfe\xeb\x2f\x2f\x27\xcb\xbf\xff\xff\
+\x21\x3d\xdb\xff\x0c\xff\x3f\x7e\xfb\x63\xa7\x21\x58\xed\xa7\x24\
+\xcc\xc3\x4a\x61\xe8\x33\x30\x30\x00\x00\x00\x00\xff\xff\xa2\x34\
+\x02\x18\x90\x5a\x08\x6b\x4e\xbd\x9c\xb2\xe7\xd1\xaf\x3f\xff\x79\
+\x38\x98\xa1\x97\x64\x31\x32\xfc\xff\xcf\xf0\xf1\xfb\x1f\x19\x21\
+\x8e\x14\x7b\x69\x4f\x7d\x11\x4c\xdd\x28\xdd\xb4\xdf\x77\x19\x7e\
+\x1c\x65\xf8\xb6\x99\xe1\xd7\x59\x86\x3f\xf7\x11\x79\x00\x1a\x1f\
+\x4c\xd0\xd2\x03\x02\x90\x1d\x8e\x22\xf8\x8f\x81\xe1\x1f\x54\xf6\
+\x3f\x4c\x96\x45\x86\x81\xdd\x90\x81\xcb\x87\x81\xc3\x96\x81\x55\
+\x13\xa6\xfa\x2f\xd6\xb1\xdb\x43\x37\xdf\xcf\xdc\xf7\xe4\xce\xcb\
+\x6f\x7c\x9c\x2c\x90\xdc\xcc\xc0\xc0\xc0\xc8\xc8\xf0\xed\xe7\xdf\
+\xff\xff\x19\x92\xed\xa5\x93\xec\xa5\x91\x3d\x4e\x09\x00\x00\x00\
+\x00\xff\xff\xa2\x42\x04\x30\x30\x30\xc0\x2b\xdb\x1b\xcf\xbf\xf6\
+\x6c\x7d\x70\xee\xe1\x67\xc8\x95\x40\x10\xc0\xcc\xc4\xf8\xf3\xcf\
+\xbf\x1f\xbf\xff\x1a\xc9\xf3\x85\x59\x48\xd8\xaa\x09\x08\x72\xa3\
+\x8d\x11\xfd\x87\x9e\x4b\x01\x0f\x8b\xff\x3f\x18\x7e\xdf\x64\xf8\
+\x79\x9a\xe1\xc7\x31\x86\xdf\x37\x18\xfe\xdc\x65\xf8\xfb\x1a\x91\
+\x8a\x09\x02\x26\x06\x06\x26\x61\x06\x56\x25\x06\x56\x75\x06\x76\
+\x0b\x06\x76\x0b\x06\x56\x0d\x06\x26\xf8\xe1\x55\xff\x61\xd5\x2c\
+\x4a\xf0\x7d\xf9\xf1\xf7\xf8\x9d\x0f\x2b\x4f\xbe\x38\x71\xe7\x23\
+\x0b\x33\x23\x27\x2b\xf3\x5f\x98\x8d\x90\x33\x3e\xd5\x25\xb9\x4a\
+\x3c\x15\x20\x8d\x0b\x06\x2a\x6d\xdb\x05\x00\x00\x00\xff\xff\xa2\
+\x4e\x04\x40\x00\x24\x3f\xfe\xfe\xfb\x7f\xc1\xa1\xa7\x8f\xdf\xfd\
+\x80\x1f\x8a\xc0\xf0\x1f\x3a\xb5\xf0\xf5\xe7\xdf\x7f\xff\xff\xab\
+\x4b\x70\x7b\x1b\x88\x8a\xf1\xb3\x31\xfc\xc7\xf4\xc3\x3f\x58\x4c\
+\xa0\x0e\x5d\xfc\xfb\xc4\xf0\xf7\x19\xc3\x9f\x67\x0c\x7f\x9f\x31\
+\xfc\x79\xc8\xf0\xf7\x0d\xc3\xff\xef\x0c\xff\xde\x23\x14\x30\xf1\
+\x31\x30\xf2\x30\x30\x0b\x32\xb0\xc8\x33\x30\x4b\x31\x30\x4b\x32\
+\xb0\x48\xc3\x0e\xda\x41\x38\x10\x56\xca\xa3\x24\x79\x88\xff\x3f\
+\x7c\xfd\xbd\xed\xe2\x9b\xcb\x4f\xbe\x30\xfc\x67\xe0\xe1\x60\x86\
+\x94\x96\xd0\x81\x30\x06\xc6\x3f\xff\xfe\x0b\xf3\xb0\x26\xd9\x49\
+\xf3\x70\x30\x53\x5e\xec\x20\x03\x00\x00\x00\x00\xff\xff\xa2\x66\
+\x04\x30\x40\x6f\x85\x26\xac\xec\x3f\x96\xa0\x47\x57\xc2\xc0\xf0\
+\x1f\xba\xdf\x93\xfc\x31\x8c\xff\x0c\x0c\xff\x60\x1b\x1a\x18\xf1\
+\x1b\x42\x84\x93\x18\x18\xa8\x54\xec\x20\x03\x00\x00\x00\x00\xff\
+\xff\xa2\x72\x04\x30\x40\x3c\xfd\x0f\x9f\x99\x4c\x8c\x8c\xa4\x7b\
+\xe1\x3f\x02\xc1\xcd\x46\x31\xe5\x3f\xa2\xb8\x87\x86\x35\x81\x10\
+\xc7\x6e\x07\xc6\xa1\x7a\x0c\x30\x53\xff\x93\xe9\x72\x02\x00\x00\
+\x00\x00\xff\xff\x62\xfc\x37\x7a\x35\xe1\x80\x02\x00\x00\x00\x00\
+\xff\xff\x62\x61\x1c\x1a\x23\x94\xc3\x16\x00\x00\x00\x00\xff\xff\
+\x62\x79\xff\xf3\xd3\x40\xbb\x61\x44\x03\x00\x00\x00\x00\xff\xff\
+\x62\x14\x5c\xe0\x38\xd0\x6e\x18\xd1\x00\x00\x00\x00\xff\xff\x62\
+\x79\xff\xfd\xdd\x40\xbb\x61\x44\x03\x00\x00\x00\x00\xff\xff\x62\
+\x61\x64\x1a\xfa\xf3\xe6\x43\x19\x00\x00\x00\x00\xff\xff\x62\x61\
+\x1a\xdd\xea\x35\xa0\x00\x00\x00\x00\xff\xff\x62\xf9\xfb\xf3\xe3\
+\x40\xbb\x61\x44\x03\x00\x00\x00\x00\xff\xff\x62\x5c\x79\x77\xf7\
+\x40\xbb\x61\x44\x03\x00\x00\x00\x00\xff\xff\xa2\x7e\x4f\x78\x14\
+\x90\x04\x00\x00\x00\x00\xff\xff\x62\xf9\x33\x7a\x04\xd0\x80\x02\
+\x00\x00\x00\x00\xff\xff\x62\x61\xfc\x3f\x5a\x09\x0f\x24\x00\x00\
+\x00\x00\xff\xff\x1a\x2d\x82\x06\x18\x00\x00\x00\x00\xff\xff\x62\
+\x39\x70\xfd\x3d\x61\x55\xa3\x80\x66\x00\x00\x00\x00\xff\xff\x62\
+\x34\xab\x3f\x31\xd0\x6e\x18\xd1\x00\x00\x00\x00\xff\xff\x62\xe1\
+\xe3\x1c\x51\xbb\x1b\x07\x1d\x00\x00\x00\x00\xff\xff\x82\xed\xe7\
+\x1b\x05\x03\x04\x00\x00\x00\x00\xff\xff\x1a\x6d\x02\x0d\x30\x00\
+\x00\x00\x00\xff\xff\x1a\x8d\x80\x01\x06\x00\x00\x00\x00\xff\xff\
+\x03\x00\x1f\xbf\x8a\x32\x7b\x4a\xae\xcd\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x0c\
+\x0f\x5b\x57\xdc\
+\x00\x65\
+\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x73\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+\x00\x09\
+\x04\x66\x8a\xbc\
+\x00\x64\
+\x00\x65\x00\x6d\x00\x6f\x00\x73\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0c\
+\x0a\xf0\xbf\x27\
+\x00\x71\
+\x00\x74\x00\x34\x00\x2d\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x05\x52\xff\x27\
+\x00\x72\
+\x00\x62\x00\x2d\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\
+\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x59\
+\x00\x00\x00\x36\x00\x02\x00\x00\x00\x02\x00\x00\x00\x04\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x66\x00\x00\x00\x00\x00\x01\x00\x00\x4b\xc5\
+\x00\x00\x00\x48\x00\x00\x00\x00\x00\x01\x00\x00\x21\xad\
+"
+
+def qInitResources():
+ QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/corelib/tools/regexp.py b/examples/corelib/tools/regexp.py
new file mode 100755
index 0000000..7e28a53
--- /dev/null
+++ b/examples/corelib/tools/regexp.py
@@ -0,0 +1,195 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2016 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the PySide 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$
+##
+#############################################################################
+
+"""PySide2 port of the widgets/tools/regexp example from Qt v5.x"""
+
+from PySide2 import QtCore, QtGui, QtWidgets
+
+
+class RegExpDialog(QtWidgets.QDialog):
+ MaxCaptures = 6
+
+ def __init__(self, parent=None):
+ super(RegExpDialog, self).__init__(parent)
+
+ self.patternComboBox = QtWidgets.QComboBox()
+ self.patternComboBox.setEditable(True)
+ self.patternComboBox.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
+ QtWidgets.QSizePolicy.Preferred)
+
+ patternLabel = QtWidgets.QLabel("&Pattern:")
+ patternLabel.setBuddy(self.patternComboBox)
+
+ self.escapedPatternLineEdit = QtWidgets.QLineEdit()
+ self.escapedPatternLineEdit.setReadOnly(True)
+ palette = self.escapedPatternLineEdit.palette()
+ palette.setBrush(QtGui.QPalette.Base,
+ palette.brush(QtGui.QPalette.Disabled, QtGui.QPalette.Base))
+ self.escapedPatternLineEdit.setPalette(palette)
+
+ escapedPatternLabel = QtWidgets.QLabel("&Escaped Pattern:")
+ escapedPatternLabel.setBuddy(self.escapedPatternLineEdit)
+
+ self.syntaxComboBox = QtWidgets.QComboBox()
+ self.syntaxComboBox.addItem("Regular expression v1",
+ QtCore.QRegExp.RegExp)
+ self.syntaxComboBox.addItem("Regular expression v2",
+ QtCore.QRegExp.RegExp2)
+ self.syntaxComboBox.addItem("Wildcard", QtCore.QRegExp.Wildcard)
+ self.syntaxComboBox.addItem("Fixed string",
+ QtCore.QRegExp.FixedString)
+
+ syntaxLabel = QtWidgets.QLabel("&Pattern Syntax:")
+ syntaxLabel.setBuddy(self.syntaxComboBox)
+
+ self.textComboBox = QtWidgets.QComboBox()
+ self.textComboBox.setEditable(True)
+ self.textComboBox.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
+ QtWidgets.QSizePolicy.Preferred)
+
+ textLabel = QtWidgets.QLabel("&Text:")
+ textLabel.setBuddy(self.textComboBox)
+
+ self.caseSensitiveCheckBox = QtWidgets.QCheckBox("Case &Sensitive")
+ self.caseSensitiveCheckBox.setChecked(True)
+ self.minimalCheckBox = QtWidgets.QCheckBox("&Minimal")
+
+ indexLabel = QtWidgets.QLabel("Index of Match:")
+ self.indexEdit = QtWidgets.QLineEdit()
+ self.indexEdit.setReadOnly(True)
+
+ matchedLengthLabel = QtWidgets.QLabel("Matched Length:")
+ self.matchedLengthEdit = QtWidgets.QLineEdit()
+ self.matchedLengthEdit.setReadOnly(True)
+
+ self.captureLabels = []
+ self.captureEdits = []
+ for i in range(self.MaxCaptures):
+ self.captureLabels.append(QtWidgets.QLabel("Capture %d:" % i))
+ self.captureEdits.append(QtWidgets.QLineEdit())
+ self.captureEdits[i].setReadOnly(True)
+ self.captureLabels[0].setText("Match:")
+
+ checkBoxLayout = QtWidgets.QHBoxLayout()
+ checkBoxLayout.addWidget(self.caseSensitiveCheckBox)
+ checkBoxLayout.addWidget(self.minimalCheckBox)
+ checkBoxLayout.addStretch(1)
+
+ mainLayout = QtWidgets.QGridLayout()
+ mainLayout.addWidget(patternLabel, 0, 0)
+ mainLayout.addWidget(self.patternComboBox, 0, 1)
+ mainLayout.addWidget(escapedPatternLabel, 1, 0)
+ mainLayout.addWidget(self.escapedPatternLineEdit, 1, 1)
+ mainLayout.addWidget(syntaxLabel, 2, 0)
+ mainLayout.addWidget(self.syntaxComboBox, 2, 1)
+ mainLayout.addLayout(checkBoxLayout, 3, 0, 1, 2)
+ mainLayout.addWidget(textLabel, 4, 0)
+ mainLayout.addWidget(self.textComboBox, 4, 1)
+ mainLayout.addWidget(indexLabel, 5, 0)
+ mainLayout.addWidget(self.indexEdit, 5, 1)
+ mainLayout.addWidget(matchedLengthLabel, 6, 0)
+ mainLayout.addWidget(self.matchedLengthEdit, 6, 1)
+
+ for i in range(self.MaxCaptures):
+ mainLayout.addWidget(self.captureLabels[i], 7 + i, 0)
+ mainLayout.addWidget(self.captureEdits[i], 7 + i, 1)
+ self.setLayout(mainLayout)
+
+ self.patternComboBox.editTextChanged.connect(self.refresh)
+ self.textComboBox.editTextChanged.connect(self.refresh)
+ self.caseSensitiveCheckBox.toggled.connect(self.refresh)
+ self.minimalCheckBox.toggled.connect(self.refresh)
+ self.syntaxComboBox.currentIndexChanged.connect(self.refresh)
+
+ self.patternComboBox.addItem("[A-Za-z_]+([A-Za-z_0-9]*)")
+ self.textComboBox.addItem("(10 + delta4)* 32")
+
+ self.setWindowTitle("RegExp")
+ self.setFixedHeight(self.sizeHint().height())
+ self.refresh()
+
+ def refresh(self):
+ self.setUpdatesEnabled(False)
+
+ pattern = self.patternComboBox.currentText()
+ text = self.textComboBox.currentText()
+
+ escaped = str(pattern)
+ escaped.replace('\\', '\\\\')
+ escaped.replace('"', '\\"')
+ self.escapedPatternLineEdit.setText('"' + escaped + '"')
+
+ rx = QtCore.QRegExp(pattern)
+ cs = QtCore.Qt.CaseInsensitive
+ if self.caseSensitiveCheckBox.isChecked():
+ cs = QtCore.Qt.CaseSensitive
+ rx.setCaseSensitivity(cs)
+ rx.setMinimal(self.minimalCheckBox.isChecked())
+ syntax = self.syntaxComboBox.itemData(self.syntaxComboBox.currentIndex())
+ rx.setPatternSyntax(QtCore.QRegExp.PatternSyntax(syntax))
+
+ palette = self.patternComboBox.palette()
+ if rx.isValid():
+ palette.setColor(QtGui.QPalette.Text,
+ self.textComboBox.palette().color(QtGui.QPalette.Text))
+ else:
+ palette.setColor(QtGui.QPalette.Text, QtCore.Qt.red)
+ self.patternComboBox.setPalette(palette)
+
+ self.indexEdit.setText(str(rx.indexIn(text)))
+ self.matchedLengthEdit.setText(str(rx.matchedLength()))
+
+ for i in range(self.MaxCaptures):
+ self.captureLabels[i].setEnabled(i <= rx.captureCount())
+ self.captureEdits[i].setEnabled(i <= rx.captureCount())
+ self.captureEdits[i].setText(rx.cap(i))
+
+ self.setUpdatesEnabled(True)
+
+if __name__ == '__main__':
+
+ import sys
+
+ app = QtWidgets.QApplication(sys.argv)
+ dialog = RegExpDialog()
+ sys.exit(dialog.exec_())
diff --git a/examples/corelib/tools/settingseditor/inifiles/licensepage.ini b/examples/corelib/tools/settingseditor/inifiles/licensepage.ini
new file mode 100644
index 0000000..608d1b7
--- /dev/null
+++ b/examples/corelib/tools/settingseditor/inifiles/licensepage.ini
@@ -0,0 +1,46 @@
+[Field%201]
+Bottom=89
+Flags=MULTILINE|VSCROLL|READONLY
+Left=4
+Right=296
+State=No license agreement file found. Please contact support.
+Top=14
+Type=Text
+
+[Field%202]
+Bottom=8
+Left=4
+Right=294
+Text=Press Page Down to see the rest of the agreement.
+Top=0
+Type=Label
+
+[Field%203]
+Bottom=111
+Left=4
+Right=297
+Text=If you accept the terms of the agreement, select the first option below. You must accept the agreement to install this software. Click Next to continue.
+Top=92
+Type=Label
+
+[Field%204]
+Bottom=129
+Flags=GROUP|NOTIFY
+Left=4
+Right=299
+Text=I &accept the terms in the License Agreement
+Top=120
+Type=RadioButton
+
+[Field%205]
+Bottom=140
+Flags=NOTIFY
+Left=4
+Right=300
+State=1
+Text=I &do not accept the terms in the License Agreement
+Top=129
+Type=RadioButton
+
+[Settings]
+NumFields=5
diff --git a/examples/corelib/tools/settingseditor/inifiles/qsa.ini b/examples/corelib/tools/settingseditor/inifiles/qsa.ini
new file mode 100644
index 0000000..56a2964
--- /dev/null
+++ b/examples/corelib/tools/settingseditor/inifiles/qsa.ini
@@ -0,0 +1,26 @@
+[Field%201]
+Bottom=65
+Left=0
+Right=299
+Text=QSA Build Options
+Top=9
+Type=Groupbox
+
+[Field%202]
+Bottom=37
+Left=20
+Right=284
+Text=Don't compile QSA Workbench into QSA.
+Top=27
+Type=Checkbox
+
+[Field%203]
+Bottom=56
+Left=20
+Right=247
+Text=Don't compile QSA Workbench nor QSA Editor into QSA.
+Top=45
+Type=Checkbox
+
+[Settings]
+NumFields=3
diff --git a/examples/corelib/tools/settingseditor/inifiles/troll.ini b/examples/corelib/tools/settingseditor/inifiles/troll.ini
new file mode 100644
index 0000000..4535291
--- /dev/null
+++ b/examples/corelib/tools/settingseditor/inifiles/troll.ini
@@ -0,0 +1,7 @@
+[Alpha]
+Beta\Beta=1, 3, 4
+Beta\Delta=1111
+Beta\Epsilon=5
+Beta\Gamma=2
+Iota=7
+Omicron=10
diff --git a/examples/corelib/tools/settingseditor/settingseditor.py b/examples/corelib/tools/settingseditor/settingseditor.py
new file mode 100755
index 0000000..9050497
--- /dev/null
+++ b/examples/corelib/tools/settingseditor/settingseditor.py
@@ -0,0 +1,722 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2016 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the PySide 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$
+##
+#############################################################################
+
+"""PySide2 port of the widgets/tools/settingseditor example from Qt v5.x"""
+
+import sys
+
+from PySide2 import QtCore, QtGui, QtWidgets
+
+
+class MainWindow(QtWidgets.QMainWindow):
+ def __init__(self, parent=None):
+ super(MainWindow, self).__init__(parent)
+
+ self.settingsTree = SettingsTree()
+ self.setCentralWidget(self.settingsTree)
+
+ self.locationDialog = None
+
+ self.createActions()
+ self.createMenus()
+
+ self.autoRefreshAct.setChecked(True)
+ self.fallbacksAct.setChecked(True)
+
+ self.setWindowTitle("Settings Editor")
+ self.resize(500, 600)
+
+ def openSettings(self):
+ if self.locationDialog is None:
+ self.locationDialog = LocationDialog(self)
+
+ if self.locationDialog.exec_():
+ settings = QtCore.QSettings(self.locationDialog.format(),
+ self.locationDialog.scope(),
+ self.locationDialog.organization(),
+ self.locationDialog.application())
+ self.setSettingsObject(settings)
+ self.fallbacksAct.setEnabled(True)
+
+ def openIniFile(self):
+ fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open INI File",
+ '', "INI Files (*.ini *.conf)")
+
+ if fileName:
+ settings = QtCore.QSettings(fileName, QtCore.QSettings.IniFormat)
+ self.setSettingsObject(settings)
+ self.fallbacksAct.setEnabled(False)
+
+ def openPropertyList(self):
+ fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self,
+ "Open Property List", '', "Property List Files (*.plist)")
+
+ if fileName:
+ settings = QtCore.QSettings(fileName, QtCore.QSettings.NativeFormat)
+ self.setSettingsObject(settings)
+ self.fallbacksAct.setEnabled(False)
+
+ def openRegistryPath(self):
+ path, ok = QtWidgets.QInputDialog.getText(self, "Open Registry Path",
+ "Enter the path in the Windows registry:",
+ QtWidgets.QLineEdit.Normal, 'HKEY_CURRENT_USER\\')
+
+ if ok and path != '':
+ settings = QtCore.QSettings(path, QtCore.QSettings.NativeFormat)
+ self.setSettingsObject(settings)
+ self.fallbacksAct.setEnabled(False)
+
+ def about(self):
+ QtWidgets.QMessageBox.about(self, "About Settings Editor",
+ "The <b>Settings Editor</b> example shows how to access "
+ "application settings using Qt.")
+
+ def createActions(self):
+ self.openSettingsAct = QtWidgets.QAction("&Open Application Settings...",
+ self, shortcut="Ctrl+O", triggered=self.openSettings)
+
+ self.openIniFileAct = QtWidgets.QAction("Open I&NI File...", self,
+ shortcut="Ctrl+N", triggered=self.openIniFile)
+
+ self.openPropertyListAct = QtWidgets.QAction("Open macOS &Property List...",
+ self, shortcut="Ctrl+P", triggered=self.openPropertyList)
+ if sys.platform != 'darwin':
+ self.openPropertyListAct.setEnabled(False)
+
+ self.openRegistryPathAct = QtWidgets.QAction(
+ "Open Windows &Registry Path...", self, shortcut="Ctrl+G",
+ triggered=self.openRegistryPath)
+ if sys.platform != 'win32':
+ self.openRegistryPathAct.setEnabled(False)
+
+ self.refreshAct = QtWidgets.QAction("&Refresh", self, shortcut="Ctrl+R",
+ enabled=False, triggered=self.settingsTree.refresh)
+
+ self.exitAct = QtWidgets.QAction("E&xit", self, shortcut="Ctrl+Q",
+ triggered=self.close)
+
+ self.autoRefreshAct = QtWidgets.QAction("&Auto-Refresh", self,
+ shortcut="Ctrl+A", checkable=True, enabled=False)
+ self.autoRefreshAct.triggered[bool].connect(self.settingsTree.setAutoRefresh)
+ self.autoRefreshAct.triggered[bool].connect(self.refreshAct.setDisabled)
+
+ self.fallbacksAct = QtWidgets.QAction("&Fallbacks", self,
+ shortcut="Ctrl+F", checkable=True, enabled=False)
+ self.fallbacksAct.triggered[bool].connect(self.settingsTree.setFallbacksEnabled)
+
+ self.aboutAct = QtWidgets.QAction("&About", self, triggered=self.about)
+
+ self.aboutQtAct = QtWidgets.QAction("About &Qt", self,
+ triggered=QtWidgets.qApp.aboutQt)
+
+ def createMenus(self):
+ self.fileMenu = self.menuBar().addMenu("&File")
+ self.fileMenu.addAction(self.openSettingsAct)
+ self.fileMenu.addAction(self.openIniFileAct)
+ self.fileMenu.addAction(self.openPropertyListAct)
+ self.fileMenu.addAction(self.openRegistryPathAct)
+ self.fileMenu.addSeparator()
+ self.fileMenu.addAction(self.refreshAct)
+ self.fileMenu.addSeparator()
+ self.fileMenu.addAction(self.exitAct)
+
+ self.optionsMenu = self.menuBar().addMenu("&Options")
+ self.optionsMenu.addAction(self.autoRefreshAct)
+ self.optionsMenu.addAction(self.fallbacksAct)
+
+ self.menuBar().addSeparator()
+
+ self.helpMenu = self.menuBar().addMenu("&Help")
+ self.helpMenu.addAction(self.aboutAct)
+ self.helpMenu.addAction(self.aboutQtAct)
+
+ def setSettingsObject(self, settings):
+ settings.setFallbacksEnabled(self.fallbacksAct.isChecked())
+ self.settingsTree.setSettingsObject(settings)
+
+ self.refreshAct.setEnabled(True)
+ self.autoRefreshAct.setEnabled(True)
+
+ niceName = settings.fileName()
+ niceName.replace('\\', '/')
+ niceName = niceName.split('/')[-1]
+
+ if not settings.isWritable():
+ niceName += " (read only)"
+
+ self.setWindowTitle("%s - Settings Editor" % niceName)
+
+
+class LocationDialog(QtWidgets.QDialog):
+ def __init__(self, parent=None):
+ super(LocationDialog, self).__init__(parent)
+
+ self.formatComboBox = QtWidgets.QComboBox()
+ self.formatComboBox.addItem("Native")
+ self.formatComboBox.addItem("INI")
+
+ self.scopeComboBox = QtWidgets.QComboBox()
+ self.scopeComboBox.addItem("User")
+ self.scopeComboBox.addItem("System")
+
+ self.organizationComboBox = QtWidgets.QComboBox()
+ self.organizationComboBox.addItem("Trolltech")
+ self.organizationComboBox.setEditable(True)
+
+ self.applicationComboBox = QtWidgets.QComboBox()
+ self.applicationComboBox.addItem("Any")
+ self.applicationComboBox.addItem("Application Example")
+ self.applicationComboBox.addItem("Assistant")
+ self.applicationComboBox.addItem("Designer")
+ self.applicationComboBox.addItem("Linguist")
+ self.applicationComboBox.setEditable(True)
+ self.applicationComboBox.setCurrentIndex(3)
+
+ formatLabel = QtWidgets.QLabel("&Format:")
+ formatLabel.setBuddy(self.formatComboBox)
+
+ scopeLabel = QtWidgets.QLabel("&Scope:")
+ scopeLabel.setBuddy(self.scopeComboBox)
+
+ organizationLabel = QtWidgets.QLabel("&Organization:")
+ organizationLabel.setBuddy(self.organizationComboBox)
+
+ applicationLabel = QtWidgets.QLabel("&Application:")
+ applicationLabel.setBuddy(self.applicationComboBox)
+
+ self.locationsGroupBox = QtWidgets.QGroupBox("Setting Locations")
+
+ self.locationsTable = QtWidgets.QTableWidget()
+ self.locationsTable.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
+ self.locationsTable.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
+ self.locationsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
+ self.locationsTable.setColumnCount(2)
+ self.locationsTable.setHorizontalHeaderLabels(("Location", "Access"))
+ self.locationsTable.horizontalHeader().setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
+ self.locationsTable.horizontalHeader().resizeSection(1, 180)
+
+ self.buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel)
+
+ self.formatComboBox.activated.connect(self.updateLocationsTable)
+ self.scopeComboBox.activated.connect(self.updateLocationsTable)
+ self.organizationComboBox.lineEdit().editingFinished.connect(self.updateLocationsTable)
+ self.applicationComboBox.lineEdit().editingFinished.connect(self.updateLocationsTable)
+ self.buttonBox.accepted.connect(self.accept)
+ self.buttonBox.rejected.connect(self.reject)
+
+ locationsLayout = QtWidgets.QVBoxLayout()
+ locationsLayout.addWidget(self.locationsTable)
+ self.locationsGroupBox.setLayout(locationsLayout)
+
+ mainLayout = QtWidgets.QGridLayout()
+ mainLayout.addWidget(formatLabel, 0, 0)
+ mainLayout.addWidget(self.formatComboBox, 0, 1)
+ mainLayout.addWidget(scopeLabel, 1, 0)
+ mainLayout.addWidget(self.scopeComboBox, 1, 1)
+ mainLayout.addWidget(organizationLabel, 2, 0)
+ mainLayout.addWidget(self.organizationComboBox, 2, 1)
+ mainLayout.addWidget(applicationLabel, 3, 0)
+ mainLayout.addWidget(self.applicationComboBox, 3, 1)
+ mainLayout.addWidget(self.locationsGroupBox, 4, 0, 1, 2)
+ mainLayout.addWidget(self.buttonBox, 5, 0, 1, 2)
+ self.setLayout(mainLayout)
+
+ self.updateLocationsTable()
+
+ self.setWindowTitle("Open Application Settings")
+ self.resize(650, 400)
+
+ def format(self):
+ if self.formatComboBox.currentIndex() == 0:
+ return QtCore.QSettings.NativeFormat
+ else:
+ return QtCore.QSettings.IniFormat
+
+ def scope(self):
+ if self.scopeComboBox.currentIndex() == 0:
+ return QtCore.QSettings.UserScope
+ else:
+ return QtCore.QSettings.SystemScope
+
+ def organization(self):
+ return self.organizationComboBox.currentText()
+
+ def application(self):
+ if self.applicationComboBox.currentText() == "Any":
+ return ''
+
+ return self.applicationComboBox.currentText()
+
+ def updateLocationsTable(self):
+ self.locationsTable.setUpdatesEnabled(False)
+ self.locationsTable.setRowCount(0)
+
+ for i in range(2):
+ if i == 0:
+ if self.scope() == QtCore.QSettings.SystemScope:
+ continue
+
+ actualScope = QtCore.QSettings.UserScope
+ else:
+ actualScope = QtCore.QSettings.SystemScope
+
+ for j in range(2):
+ if j == 0:
+ if not self.application():
+ continue
+
+ actualApplication = self.application()
+ else:
+ actualApplication = ''
+
+ settings = QtCore.QSettings(self.format(), actualScope,
+ self.organization(), actualApplication)
+
+ row = self.locationsTable.rowCount()
+ self.locationsTable.setRowCount(row + 1)
+
+ item0 = QtWidgets.QTableWidgetItem()
+ item0.setText(settings.fileName())
+
+ item1 = QtWidgets.QTableWidgetItem()
+ disable = not (settings.childKeys() or settings.childGroups())
+
+ if row == 0:
+ if settings.isWritable():
+ item1.setText("Read-write")
+ disable = False
+ else:
+ item1.setText("Read-only")
+ self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setDisabled(disable)
+ else:
+ item1.setText("Read-only fallback")
+
+ if disable:
+ item0.setFlags(item0.flags() & ~QtCore.Qt.ItemIsEnabled)
+ item1.setFlags(item1.flags() & ~QtCore.Qt.ItemIsEnabled)
+
+ self.locationsTable.setItem(row, 0, item0)
+ self.locationsTable.setItem(row, 1, item1)
+
+ self.locationsTable.setUpdatesEnabled(True)
+
+
+class SettingsTree(QtWidgets.QTreeWidget):
+ def __init__(self, parent=None):
+ super(SettingsTree, self).__init__(parent)
+
+ self.setItemDelegate(VariantDelegate(self))
+
+ self.setHeaderLabels(("Setting", "Type", "Value"))
+ self.header().setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
+ self.header().setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch)
+
+ self.settings = None
+ self.refreshTimer = QtCore.QTimer()
+ self.refreshTimer.setInterval(2000)
+ self.autoRefresh = False
+
+ self.groupIcon = QtGui.QIcon()
+ self.groupIcon.addPixmap(self.style().standardPixmap(QtWidgets.QStyle.SP_DirClosedIcon),
+ QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.groupIcon.addPixmap(self.style().standardPixmap(QtWidgets.QStyle.SP_DirOpenIcon),
+ QtGui.QIcon.Normal, QtGui.QIcon.On)
+ self.keyIcon = QtGui.QIcon()
+ self.keyIcon.addPixmap(self.style().standardPixmap(QtWidgets.QStyle.SP_FileIcon))
+
+ self.refreshTimer.timeout.connect(self.maybeRefresh)
+
+ def setSettingsObject(self, settings):
+ self.settings = settings
+ self.clear()
+
+ if self.settings is not None:
+ self.settings.setParent(self)
+ self.refresh()
+ if self.autoRefresh:
+ self.refreshTimer.start()
+ else:
+ self.refreshTimer.stop()
+
+ def sizeHint(self):
+ return QtCore.QSize(800, 600)
+
+ def setAutoRefresh(self, autoRefresh):
+ self.autoRefresh = autoRefresh
+
+ if self.settings is not None:
+ if self.autoRefresh:
+ self.maybeRefresh()
+ self.refreshTimer.start()
+ else:
+ self.refreshTimer.stop()
+
+ def setFallbacksEnabled(self, enabled):
+ if self.settings is not None:
+ self.settings.setFallbacksEnabled(enabled)
+ self.refresh()
+
+ def maybeRefresh(self):
+ if self.state() != QtWidgets.QAbstractItemView.EditingState:
+ self.refresh()
+
+ def refresh(self):
+ if self.settings is None:
+ return
+
+ # The signal might not be connected.
+ try:
+ self.itemChanged.disconnect(self.updateSetting)
+ except:
+ pass
+
+ self.settings.sync()
+ self.updateChildItems(None)
+
+ self.itemChanged.connect(self.updateSetting)
+
+ def event(self, event):
+ if event.type() == QtCore.QEvent.WindowActivate:
+ if self.isActiveWindow() and self.autoRefresh:
+ self.maybeRefresh()
+
+ return super(SettingsTree, self).event(event)
+
+ def updateSetting(self, item):
+ key = item.text(0)
+ ancestor = item.parent()
+
+ while ancestor:
+ key = ancestor.text(0) + '/' + key
+ ancestor = ancestor.parent()
+
+ d = item.data(2, QtCore.Qt.UserRole)
+ self.settings.setValue(key, item.data(2, QtCore.Qt.UserRole))
+
+ if self.autoRefresh:
+ self.refresh()
+
+ def updateChildItems(self, parent):
+ dividerIndex = 0
+
+ for group in self.settings.childGroups():
+ childIndex = self.findChild(parent, group, dividerIndex)
+ if childIndex != -1:
+ child = self.childAt(parent, childIndex)
+ child.setText(1, '')
+ child.setText(2, '')
+ child.setData(2, QtCore.Qt.UserRole, None)
+ self.moveItemForward(parent, childIndex, dividerIndex)
+ else:
+ child = self.createItem(group, parent, dividerIndex)
+
+ child.setIcon(0, self.groupIcon)
+ dividerIndex += 1
+
+ self.settings.beginGroup(group)
+ self.updateChildItems(child)
+ self.settings.endGroup()
+
+ for key in self.settings.childKeys():
+ childIndex = self.findChild(parent, key, 0)
+ if childIndex == -1 or childIndex >= dividerIndex:
+ if childIndex != -1:
+ child = self.childAt(parent, childIndex)
+ for i in range(child.childCount()):
+ self.deleteItem(child, i)
+ self.moveItemForward(parent, childIndex, dividerIndex)
+ else:
+ child = self.createItem(key, parent, dividerIndex)
+ child.setIcon(0, self.keyIcon)
+ dividerIndex += 1
+ else:
+ child = self.childAt(parent, childIndex)
+
+ value = self.settings.value(key)
+ if value is None:
+ child.setText(1, 'Invalid')
+ else:
+ child.setText(1, value.__class__.__name__)
+ child.setText(2, VariantDelegate.displayText(value))
+ child.setData(2, QtCore.Qt.UserRole, value)
+
+ while dividerIndex < self.childCount(parent):
+ self.deleteItem(parent, dividerIndex)
+
+ def createItem(self, text, parent, index):
+ after = None
+
+ if index != 0:
+ after = self.childAt(parent, index - 1)
+
+ if parent is not None:
+ item = QtWidgets.QTreeWidgetItem(parent, after)
+ else:
+ item = QtWidgets.QTreeWidgetItem(self, after)
+
+ item.setText(0, text)
+ item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable)
+ return item
+
+ def deleteItem(self, parent, index):
+ if parent is not None:
+ item = parent.takeChild(index)
+ else:
+ item = self.takeTopLevelItem(index)
+ del item
+
+ def childAt(self, parent, index):
+ if parent is not None:
+ return parent.child(index)
+ else:
+ return self.topLevelItem(index)
+
+ def childCount(self, parent):
+ if parent is not None:
+ return parent.childCount()
+ else:
+ return self.topLevelItemCount()
+
+ def findChild(self, parent, text, startIndex):
+ for i in range(self.childCount(parent)):
+ if self.childAt(parent, i).text(0) == text:
+ return i
+ return -1
+
+ def moveItemForward(self, parent, oldIndex, newIndex):
+ for int in range(oldIndex - newIndex):
+ self.deleteItem(parent, newIndex)
+
+
+class VariantDelegate(QtWidgets.QItemDelegate):
+ def __init__(self, parent=None):
+ super(VariantDelegate, self).__init__(parent)
+
+ self.boolExp = QtCore.QRegExp()
+ self.boolExp.setPattern('true|false')
+ self.boolExp.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
+
+ self.byteArrayExp = QtCore.QRegExp()
+ self.byteArrayExp.setPattern('[\\x00-\\xff]*')
+
+ self.charExp = QtCore.QRegExp()
+ self.charExp.setPattern('.')
+
+ self.colorExp = QtCore.QRegExp()
+ self.colorExp.setPattern('\\(([0-9]*),([0-9]*),([0-9]*),([0-9]*)\\)')
+
+ self.doubleExp = QtCore.QRegExp()
+ self.doubleExp.setPattern('')
+
+ self.pointExp = QtCore.QRegExp()
+ self.pointExp.setPattern('\\((-?[0-9]*),(-?[0-9]*)\\)')
+
+ self.rectExp = QtCore.QRegExp()
+ self.rectExp.setPattern('\\((-?[0-9]*),(-?[0-9]*),(-?[0-9]*),(-?[0-9]*)\\)')
+
+ self.signedIntegerExp = QtCore.QRegExp()
+ self.signedIntegerExp.setPattern('-?[0-9]*')
+
+ self.sizeExp = QtCore.QRegExp(self.pointExp)
+
+ self.unsignedIntegerExp = QtCore.QRegExp()
+ self.unsignedIntegerExp.setPattern('[0-9]*')
+
+ self.dateExp = QtCore.QRegExp()
+ self.dateExp.setPattern('([0-9]{,4})-([0-9]{,2})-([0-9]{,2})')
+
+ self.timeExp = QtCore.QRegExp()
+ self.timeExp.setPattern('([0-9]{,2}):([0-9]{,2}):([0-9]{,2})')
+
+ self.dateTimeExp = QtCore.QRegExp()
+ self.dateTimeExp.setPattern(self.dateExp.pattern() + 'T' + self.timeExp.pattern())
+
+ def paint(self, painter, option, index):
+ if index.column() == 2:
+ value = index.model().data(index, QtCore.Qt.UserRole)
+ if not self.isSupportedType(value):
+ myOption = QtWidgets.QStyleOptionViewItem(option)
+ myOption.state &= ~QtWidgets.QStyle.State_Enabled
+ super(VariantDelegate, self).paint(painter, myOption, index)
+ return
+
+ super(VariantDelegate, self).paint(painter, option, index)
+
+ def createEditor(self, parent, option, index):
+ if index.column() != 2:
+ return None
+
+ originalValue = index.model().data(index, QtCore.Qt.UserRole)
+ if not self.isSupportedType(originalValue):
+ return None
+
+ lineEdit = QtWidgets.QLineEdit(parent)
+ lineEdit.setFrame(False)
+
+ if isinstance(originalValue, bool):
+ regExp = self.boolExp
+ elif isinstance(originalValue, float):
+ regExp = self.doubleExp
+ elif isinstance(originalValue, int):
+ regExp = self.signedIntegerExp
+ elif isinstance(originalValue, QtCore.QByteArray):
+ regExp = self.byteArrayExp
+ elif isinstance(originalValue, QtGui.QColor):
+ regExp = self.colorExp
+ elif isinstance(originalValue, QtCore.QDate):
+ regExp = self.dateExp
+ elif isinstance(originalValue, QtCore.QDateTime):
+ regExp = self.dateTimeExp
+ elif isinstance(originalValue, QtCore.QTime):
+ regExp = self.timeExp
+ elif isinstance(originalValue, QtCore.QPoint):
+ regExp = self.pointExp
+ elif isinstance(originalValue, QtCore.QRect):
+ regExp = self.rectExp
+ elif isinstance(originalValue, QtCore.QSize):
+ regExp = self.sizeExp
+ else:
+ regExp = QtCore.QRegExp()
+
+ if not regExp.isEmpty():
+ validator = QtGui.QRegExpValidator(regExp, lineEdit)
+ lineEdit.setValidator(validator)
+
+ return lineEdit
+
+ def setEditorData(self, editor, index):
+ value = index.model().data(index, QtCore.Qt.UserRole)
+ if editor is not None:
+ editor.setText(self.displayText(value))
+
+ def setModelData(self, editor, model, index):
+ if not editor.isModified():
+ return
+
+ text = editor.text()
+ validator = editor.validator()
+ if validator is not None:
+ state, text, _ = validator.validate(text, 0)
+ if state != QtGui.QValidator.Acceptable:
+ return
+
+ originalValue = index.model().data(index, QtCore.Qt.UserRole)
+
+ if isinstance(originalValue, QtGui.QColor):
+ self.colorExp.exactMatch(text)
+ value = QtGui.QColor(min(int(self.colorExp.cap(1)), 255),
+ min(int(self.colorExp.cap(2)), 255),
+ min(int(self.colorExp.cap(3)), 255),
+ min(int(self.colorExp.cap(4)), 255))
+ elif isinstance(originalValue, QtCore.QDate):
+ value = QtCore.QDate.fromString(text, QtCore.Qt.ISODate)
+ if not value.isValid():
+ return
+ elif isinstance(originalValue, QtCore.QDateTime):
+ value = QtCore.QDateTime.fromString(text, QtCore.Qt.ISODate)
+ if not value.isValid():
+ return
+ elif isinstance(originalValue, QtCore.QTime):
+ value = QtCore.QTime.fromString(text, QtCore.Qt.ISODate)
+ if not value.isValid():
+ return
+ elif isinstance(originalValue, QtCore.QPoint):
+ self.pointExp.exactMatch(text)
+ value = QtCore.QPoint(int(self.pointExp.cap(1)),
+ int(self.pointExp.cap(2)))
+ elif isinstance(originalValue, QtCore.QRect):
+ self.rectExp.exactMatch(text)
+ value = QtCore.QRect(int(self.rectExp.cap(1)),
+ int(self.rectExp.cap(2)),
+ int(self.rectExp.cap(3)),
+ int(self.rectExp.cap(4)))
+ elif isinstance(originalValue, QtCore.QSize):
+ self.sizeExp.exactMatch(text)
+ value = QtCore.QSize(int(self.sizeExp.cap(1)),
+ int(self.sizeExp.cap(2)))
+ elif isinstance(originalValue, list):
+ value = text.split(',')
+ else:
+ value = type(originalValue)(text)
+
+ model.setData(index, self.displayText(value), QtCore.Qt.DisplayRole)
+ model.setData(index, value, QtCore.Qt.UserRole)
+
+ @staticmethod
+ def isSupportedType(value):
+ return isinstance(value, (bool, float, int, QtCore.QByteArray,
+ str, QtGui.QColor, QtCore.QDate, QtCore.QDateTime,
+ QtCore.QTime, QtCore.QPoint, QtCore.QRect, QtCore.QSize,
+ list))
+
+ @staticmethod
+ def displayText(value):
+ if isinstance(value, (bool, int, QtCore.QByteArray)):
+ return str(value)
+ if isinstance(value, str):
+ return value
+ elif isinstance(value, float):
+ return '%g' % value
+ elif isinstance(value, QtGui.QColor):
+ return '(%u,%u,%u,%u)' % (value.red(), value.green(), value.blue(), value.alpha())
+ elif isinstance(value, (QtCore.QDate, QtCore.QDateTime, QtCore.QTime)):
+ return value.toString(QtCore.Qt.ISODate)
+ elif isinstance(value, QtCore.QPoint):
+ return '(%d,%d)' % (value.x(), value.y())
+ elif isinstance(value, QtCore.QRect):
+ return '(%d,%d,%d,%d)' % (value.x(), value.y(), value.width(), value.height())
+ elif isinstance(value, QtCore.QSize):
+ return '(%d,%d)' % (value.width(), value.height())
+ elif isinstance(value, list):
+ return ','.join(value)
+ elif value is None:
+ return '<Invalid>'
+
+ return '<%s>' % value
+
+
+if __name__ == '__main__':
+ app = QtWidgets.QApplication(sys.argv)
+ mainWin = MainWindow()
+ mainWin.show()
+ sys.exit(app.exec_())