From 5aab51c623e65940c05fefa5f8ff8c29ec7de438 Mon Sep 17 00:00:00 2001 From: PaulHummelRESPEC Date: Wed, 31 Jul 2019 14:15:08 -0400 Subject: [PATCH 01/27] frmSourcesQuality.py - added missing Help reference --- src/ui/EPANET/frmSourcesQuality.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/EPANET/frmSourcesQuality.py b/src/ui/EPANET/frmSourcesQuality.py index 78ebbbcb..cb58fb74 100644 --- a/src/ui/EPANET/frmSourcesQuality.py +++ b/src/ui/EPANET/frmSourcesQuality.py @@ -4,12 +4,14 @@ from core.epanet.hydraulics.node import SourceType from core.epanet.hydraulics.node import Source from ui.EPANET.frmSourcesQualityDesigner import Ui_frmSourcesQuality +from ui.help import HelpHandler class frmSourcesQuality(QMainWindow, Ui_frmSourcesQuality): def __init__(self, main_form=None): QMainWindow.__init__(self, main_form) + self.helper = HelpHandler(self) self.help_topic = "epanet/src/src/Source_Q.htm" self.setupUi(self) self.cmdOK.clicked.connect(self.cmdOK_Clicked) From e680810581e0deff4efef1f5e0a9a2a9725b05aa Mon Sep 17 00:00:00 2001 From: PaulDudaRESPEC Date: Wed, 31 Jul 2019 16:28:17 -0400 Subject: [PATCH 02/27] frmMain.py -- make editor windows modal property_editor_backend.py -- make headers of property editor visible to enable column resizing addressing issues in Issue #87 --- src/ui/frmMain.py | 1 + src/ui/property_editor_backend.py | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ui/frmMain.py b/src/ui/frmMain.py index 90efd72e..be2ae6d1 100644 --- a/src/ui/frmMain.py +++ b/src/ui/frmMain.py @@ -1875,6 +1875,7 @@ def show_edit_window(self, window): # window.destroyed.connect(lambda s, e, a: self._forms.remove(s)) # window.destroyed = lambda s, e, a: self._forms.remove(s) # window.connect(window, QtCore.SIGNAL('triggered()'), self.editor_closing) + window.setWindowModality(QtCore.Qt.ApplicationModal) window.show() # def editor_closing(self, event): diff --git a/src/ui/property_editor_backend.py b/src/ui/property_editor_backend.py index 7ffa9136..9abcb3e5 100644 --- a/src/ui/property_editor_backend.py +++ b/src/ui/property_editor_backend.py @@ -21,8 +21,11 @@ def set_from(self, edit_these, new_item): self.new_item = new_item if edit_these: self.meta = edit_these[0].metadata - self.table.horizontalHeader().hide() + # self.table.horizontalHeader().hide() self.table.setColumnCount(len(edit_these)) + listofblanks = [''] * len(edit_these) + self.table.setHorizontalHeaderLabels(listofblanks) + self.table.horizontalHeader().setFixedHeight(5) self.table.setRowCount(len(self.meta)) self.table.setVerticalHeaderLabels(self.meta.labels()) column = 0 From cadefabd834d89690d1527be7b9ea730edb105c8 Mon Sep 17 00:00:00 2001 From: PaulHummelRESPEC Date: Wed, 31 Jul 2019 16:49:04 -0400 Subject: [PATCH 03/27] Added Help references to EPANET/frmDefaultsEditor.py; Updated Help references to SWMM/frmDefaultsEditor.py --- src/ui/EPANET/frmDefaultsEditor.py | 12 +++++++++--- src/ui/SWMM/frmDefaultsEditor.py | 11 +++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/ui/EPANET/frmDefaultsEditor.py b/src/ui/EPANET/frmDefaultsEditor.py index 07667f30..c3b11c0e 100644 --- a/src/ui/EPANET/frmDefaultsEditor.py +++ b/src/ui/EPANET/frmDefaultsEditor.py @@ -1,6 +1,7 @@ import PyQt5.QtCore as QtCore import PyQt5.QtGui as QtGui from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QTableWidget, QWidget, QTableWidgetItem, QComboBox +from ui.help import HelpHandler from ui.frmGenericDefaultsEditorDesigner import Ui_frmGenericDefaultsEditor from ui.inifile import ini_setting from ui.convenience import set_combo_items @@ -25,6 +26,8 @@ class frmDefaultsEditor(QMainWindow, Ui_frmGenericDefaultsEditor): """ def __init__(self, session, project, defaults): QMainWindow.__init__(self, session) + self.helper = HelpHandler(self) + self.help_topic = "epanet/src/src/Sett0005.htm" self.setupUi(self) self.defaults = defaults self.session = session @@ -268,11 +271,14 @@ def move_table(self, index): def tab_changed(self, index): #self.move_table(index) - #if index == 0: + if index == 0: + self.help_topic = "epanet/src/src/Proj0043.htm" # self.set_tab_prefix() - #elif index == 1: + elif index == 1: + self.help_topic = "epanet/src/src/Proj0045.htm" # self.set_tab_properties() - #elif index == 2: + elif index == 2: + self.help_topic = "epanet/src/src/Proj0044.htm" # self.set_tab_hydraulics() pass diff --git a/src/ui/SWMM/frmDefaultsEditor.py b/src/ui/SWMM/frmDefaultsEditor.py index 476ddc25..f137a8b1 100644 --- a/src/ui/SWMM/frmDefaultsEditor.py +++ b/src/ui/SWMM/frmDefaultsEditor.py @@ -38,7 +38,7 @@ def __init__(self, session, project, defaults): QMainWindow.__init__(self, session) self.setupUi(self) self.helper = HelpHandler(self) - self.help_topic = "swmm/src/src/settingprojectdefaults.htm" + self.help_topic = "swmm/src/src/projectdefaultsdialog.htm" self.defaults = defaults self.session = session self.project = project @@ -330,11 +330,14 @@ def move_table(self, index): def tab_changed(self, index): #self.move_table(index) - #if index == 0: + if index == 0: + self.help_topic = "epanet/src/src/defaultidlabels.htm" # self.set_tab_prefix() - #elif index == 1: + elif index == 1: + self.help_topic = "epanet/src/src/defaultsubcatchmentproperties.htm" # self.set_sub_properties() - #elif index == 2: + elif index == 2: + self.help_topic = "epanet/src/src/defaultnodelinkproperties.htm" # self.set_tab_hydraulics() pass From 4976e45e8d60e8c9f7c00bd47470fe50b4819baf Mon Sep 17 00:00:00 2001 From: PaulHummelRESPEC Date: Thu, 1 Aug 2019 10:47:43 -0400 Subject: [PATCH 04/27] Disabled Help button in frmDefaultsEditor.py for both UIs as no other forms have Help buttons --- src/ui/EPANET/frmDefaultsEditor.py | 2 ++ src/ui/SWMM/frmDefaultsEditor.py | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ui/EPANET/frmDefaultsEditor.py b/src/ui/EPANET/frmDefaultsEditor.py index c3b11c0e..40be718f 100644 --- a/src/ui/EPANET/frmDefaultsEditor.py +++ b/src/ui/EPANET/frmDefaultsEditor.py @@ -40,6 +40,8 @@ def __init__(self, session, project, defaults): self.setWindowTitle(self.session.model + " Project Defaults") self.cmdOK.clicked.connect(self.cmdOK_Clicked) self.cmdCancel.clicked.connect(self.cmdCancel_Clicked) + #disable Help button on form since no other forms have one + self.cmdHelp.setVisible(False) # self.tabDefaults.currentChanged(int).connect(self.tab_changed) # self.tblGeneric.cellChanged(int, int).connect(self.tblGeneric_changed) self.tabDefaults.currentChanged.connect(self.tab_changed) diff --git a/src/ui/SWMM/frmDefaultsEditor.py b/src/ui/SWMM/frmDefaultsEditor.py index f137a8b1..3b755368 100644 --- a/src/ui/SWMM/frmDefaultsEditor.py +++ b/src/ui/SWMM/frmDefaultsEditor.py @@ -51,7 +51,9 @@ def __init__(self, session, project, defaults): self.setWindowTitle(self.session.model + " Project Defaults") self.cmdOK.clicked.connect(self.cmdOK_Clicked) self.cmdCancel.clicked.connect(self.cmdCancel_Clicked) - self.cmdHelp.clicked.connect(self.cmdHelp_Clicked) + #disable Help button on form since no other forms have one + self.cmdHelp.setVisible(False) + #self.cmdHelp.clicked.connect(self.cmdHelp_Clicked) # self.tabDefaults.currentChanged(int).connect(self.tab_changed) # self.tblGeneric.cellChanged(int, int).connect(self.tblGeneric_changed) self.tabDefaults.currentChanged.connect(self.tab_changed) From f36feb308946e8f8c3ac5a767c9039e3f8311cf5 Mon Sep 17 00:00:00 2001 From: PaulDudaRESPEC Date: Thu, 1 Aug 2019 11:40:06 -0400 Subject: [PATCH 05/27] frmTable and frmGenericListOutput -- allow copy to clipboard with ctrl-c, partially resolves issue #112 --- src/ui/EPANET/frmTable.py | 26 ++++++++++++++++++++++++-- src/ui/SWMM/frmTableSelection.py | 5 +++++ src/ui/frmGenericListOutput.py | 23 +++++++++++++++++++++++ src/ui/frmGenericPropertyEditor.py | 2 -- 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/ui/EPANET/frmTable.py b/src/ui/EPANET/frmTable.py index c5988662..6f85d125 100644 --- a/src/ui/EPANET/frmTable.py +++ b/src/ui/EPANET/frmTable.py @@ -2,6 +2,7 @@ import PyQt5.QtGui as QtGui from PyQt5.QtWidgets import QMainWindow, QTableWidgetItem from PyQt5.QtCore import Qt +from PyQt5.Qt import QApplication, QClipboard from Externals.epanet.outputapi.ENOutputWrapper import ENR_node_type, ENR_link_type from core.epanet.reports import Reports @@ -280,7 +281,7 @@ def make_table(self, frm, title, time_index, row_headers, column_headers, for attribute in requested_output_attributes: val_str = attribute.str(values[attribute.index]) table_cell_widget = QTableWidgetItem(val_str) - table_cell_widget.setFlags(QtCore.Qt.ItemIsSelectable) # | QtCore.Qt.ItemIsEnabled) + table_cell_widget.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) table_cell_widget.setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight) tbl.setItem(row, col, table_cell_widget) col += 1 @@ -324,6 +325,8 @@ def make_table(self, frm, title, time_index, row_headers, column_headers, for row_number in rows_to_remove: tbl.removeRow(int(row_number)-removed_count) removed_count += 1 + for row in range(tbl.rowCount()): + tbl.setRowHeight(row, 10) # do sort # tbl.sortByColumn(1, Qt.AscendingOrder) @@ -349,11 +352,13 @@ def make_timeseries_table(self, frm, title, item, attributes, column_headers): for attribute in attributes: val_str = attribute.str(values[attribute.index]) table_cell_widget = QTableWidgetItem(val_str) - table_cell_widget.setFlags(QtCore.Qt.ItemIsSelectable) # | QtCore.Qt.ItemIsEnabled) + table_cell_widget.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) table_cell_widget.setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight) tbl.setItem(row, col, table_cell_widget) col += 1 row += 1 + for row in range(tbl.rowCount()): + tbl.setRowHeight(row, 10) def cmdCancel_Clicked(self): self.close() @@ -375,3 +380,20 @@ def cmdDelete_Clicked(self): for wi in self.lstFilter.selectedItems(): self.lstFilter.takeItem(self.lstFilter.row(wi)) pass + + def copy(self): + selected_range = self.tblGeneric.selectedRanges()[0] + str = "" + for i in range(selected_range.rowCount()): + if i > 0: + str += "\n" + for j in range(selected_range.columnCount()): + if j > 0: + str += "\t" + str += self.tblGeneric.item(selected_range.topRow() + i, selected_range.leftColumn() + j).text() + str += "\n" + QApplication.clipboard().setText(str) + + def keyPressEvent(self, event): + if event.matches(QtGui.QKeySequence.Copy): + self.copy() \ No newline at end of file diff --git a/src/ui/SWMM/frmTableSelection.py b/src/ui/SWMM/frmTableSelection.py index 51ae40d3..1e96118a 100644 --- a/src/ui/SWMM/frmTableSelection.py +++ b/src/ui/SWMM/frmTableSelection.py @@ -42,6 +42,11 @@ def cmdOK_Clicked(self): "No locations are selected.", QMessageBox.Ok) return + if len(self.lstVariables.selectedIndexes()) == 0: + QMessageBox.information(None, "Table", + "No variables are selected.", + QMessageBox.Ok) + return object_label = self.cboObject.currentText() start_index = self.cboStart.currentIndex() end_index = self.cboEnd.currentIndex() diff --git a/src/ui/frmGenericListOutput.py b/src/ui/frmGenericListOutput.py index ce85693b..fbf09cc9 100644 --- a/src/ui/frmGenericListOutput.py +++ b/src/ui/frmGenericListOutput.py @@ -2,6 +2,7 @@ import PyQt5.QtGui as QtGui from PyQt5.QtWidgets import QMainWindow, QTableWidgetItem from ui.frmGenericPropertyEditorDesigner import Ui_frmGenericPropertyEditor +from PyQt5.Qt import QApplication, QClipboard class frmGenericListOutput(QMainWindow, Ui_frmGenericPropertyEditor): @@ -43,6 +44,8 @@ def set_data_by_rows(self, row_headers, column_headers, data_rows): col += 1 row += 1 self.tblGeneric.resizeColumnsToContents() + for row in range(self.tblGeneric.rowCount()): + self.tblGeneric.setRowHeight(row, 10) def set_data_by_columns(self, row_headers, column_headers, data_columns): """Populate the table. @@ -73,6 +76,8 @@ def set_data_by_columns(self, row_headers, column_headers, data_columns): row += 1 col += 1 self.tblGeneric.resizeColumnsToContents() + for row in range(self.tblGeneric.rowCount()): + self.tblGeneric.setRowHeight(row, 10) def set_data(self, nrows, ncols, headers, data): counter = -1 @@ -87,7 +92,25 @@ def set_data(self, nrows, ncols, headers, data): item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) self.tblGeneric.setItem(row, col, item) self.tblGeneric.resizeColumnsToContents() + for row in range(self.tblGeneric.rowCount()): + self.tblGeneric.setRowHeight(row, 10) def cmdCancel_Clicked(self): self.close() + def copy(self): + selected_range = self.tblGeneric.selectedRanges()[0] + str = "" + for i in range(selected_range.rowCount()): + if i > 0: + str += "\n" + for j in range(selected_range.columnCount()): + if j > 0: + str += "\t" + str += self.tblGeneric.item(selected_range.topRow() + i, selected_range.leftColumn() + j).text() + str += "\n" + QApplication.clipboard().setText(str) + + def keyPressEvent(self, event): + if event.matches(QtGui.QKeySequence.Copy): + self.copy() \ No newline at end of file diff --git a/src/ui/frmGenericPropertyEditor.py b/src/ui/frmGenericPropertyEditor.py index a33747f4..b4d6bc6d 100644 --- a/src/ui/frmGenericPropertyEditor.py +++ b/src/ui/frmGenericPropertyEditor.py @@ -121,8 +121,6 @@ def paste(self): pass def keyPressEvent(self, event): - x = event.key() - y = QtGui.QKeySequence.Copy if event.matches(QtGui.QKeySequence.Copy): self.copy() if event.matches(QtGui.QKeySequence.Paste): From 9576ebcb8de0155fe1c563314f3092dc3bd61506 Mon Sep 17 00:00:00 2001 From: PaulHummelRESPEC Date: Thu, 1 Aug 2019 16:22:02 -0400 Subject: [PATCH 06/27] Added explicit HelpHandler references to ensure context-sensitive help if properly displayed (formerly no Help appeared from F1 click). --- src/ui/SWMM/frmPatternEditor.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/SWMM/frmPatternEditor.py b/src/ui/SWMM/frmPatternEditor.py index 999fda95..aaeec2d4 100644 --- a/src/ui/SWMM/frmPatternEditor.py +++ b/src/ui/SWMM/frmPatternEditor.py @@ -5,12 +5,14 @@ from core.swmm.patterns import PatternType from core.swmm.patterns import Pattern from ui.SWMM.frmPatternEditorDesigner import Ui_frmPatternEditor +from ui.help import HelpHandler class frmPatternEditor(QMainWindow, Ui_frmPatternEditor): def __init__(self, main_form, edit_these=[], new_item=None): QMainWindow.__init__(self, main_form) self.help_topic = "swmm/src/src/timepatterneditordialog.htm" + self.helper = HelpHandler(self) self.setupUi(self) self.cboType.clear() ui.convenience.set_combo_items(PatternType, self.cboType) From 2dec43999135d9f69c8b25f9fe88cfd0d06c23b9 Mon Sep 17 00:00:00 2001 From: PaulHummelRESPEC Date: Thu, 1 Aug 2019 17:32:32 -0400 Subject: [PATCH 07/27] frmCrossSection.py - Added explicit HelpHandler references to ensure context-sensitive help is properly displayed (formerly no Help appeared from F1 click). frmDividers.py - corrected help_topic file name --- src/ui/SWMM/frmCrossSection.py | 2 ++ src/ui/SWMM/frmDividers.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ui/SWMM/frmCrossSection.py b/src/ui/SWMM/frmCrossSection.py index e88cb304..239e7932 100644 --- a/src/ui/SWMM/frmCrossSection.py +++ b/src/ui/SWMM/frmCrossSection.py @@ -5,6 +5,7 @@ import core.swmm.hydraulics.link import core.swmm.options.dynamic_wave from ui.SWMM.frmCrossSectionDesigner import Ui_frmCrossSection +from ui.help import HelpHandler from ui.SWMM.frmTransect import frmTransect from ui.SWMM.frmCurveEditor import frmCurveEditor from core.swmm.curves import CurveType @@ -15,6 +16,7 @@ class frmCrossSection(QMainWindow, Ui_frmCrossSection): def __init__(self, main_form=None, **kwargs): QMainWindow.__init__(self, main_form) self.help_topic = "swmm/src/src/cross_sectioneditordialog.htm" + self.helper = HelpHandler(self) self.units = main_form.project.options.flow_units.value self.setupUi(self) self.cmdOK.clicked.connect(self.cmdOK_Clicked) diff --git a/src/ui/SWMM/frmDividers.py b/src/ui/SWMM/frmDividers.py index cfa4790c..c1a4e26b 100644 --- a/src/ui/SWMM/frmDividers.py +++ b/src/ui/SWMM/frmDividers.py @@ -17,7 +17,7 @@ class frmDividers(frmGenericPropertyEditor): SECTION_TYPE = Divider def __init__(self, main_form, edit_these, new_item): - self.help_topic = "swmm/src/src/dividerproperties.htm" + self.help_topic = "swmm/src/src/flowdividerproperties.htm" self._main_form = main_form self.project = main_form.project self.refresh_column = -1 From 3642939527016ac0caf8a64ab459188ae957bc33 Mon Sep 17 00:00:00 2001 From: "tong.zhai" Date: Thu, 1 Aug 2019 20:07:15 -0400 Subject: [PATCH 08/27] implement label text editor per #197 and #130 --- src/ui/map_tools.py | 78 +- src/ui/qgis_icons_rc.py | 2768 +++++++++++++++++++++++++++++++-------- 2 files changed, 2266 insertions(+), 580 deletions(-) diff --git a/src/ui/map_tools.py b/src/ui/map_tools.py index ba1276a9..edfe32af 100644 --- a/src/ui/map_tools.py +++ b/src/ui/map_tools.py @@ -755,11 +755,7 @@ def addCoordinates(self, coordinates, layer_name): else: provider.addAttributes([QgsField("name", QtCore.QVariant.String), QgsField("color", QtCore.QVariant.String), - QgsField("value", QtCore.QVariant.Double), - QgsField("bold", QtCore.QVariant.Bool), - QgsField("italic", QtCore.QVariant.Bool), - QgsField("size", QtCore.QVariant.Double), - QgsField("font", QtCore.QVariant.String)]) + QgsField("value", QtCore.QVariant.Double)]) layer.updateFields() features = [] @@ -856,47 +852,6 @@ def set_default_point_renderer(layer, coordinates=None, size=3.5, do_labels=True # symbol_layer.setOutlineColor(QColor('transparent')) # symbol_layer.setColor(QColor('transparent')) symbol_layer.setEnabled(False) - - # new code to implement bold, italics, font - provider = layer.dataProvider() - for feature in provider.getFeatures(): - font_name = QFont().family() - format = pal_layer.format() - font = format.font() - isBold = feature[3] - isItalic = feature[4] - font_size = 10 - if float(feature[5]): - font_size = float(feature[5]) - if len(str(feature[6])) > 0: - font_name = str(feature[6]) - font.setFamily(font_name) - font.setBold(isBold) - font.setItalic(isItalic) - format.setFont(font) - format.setSize(font_size) - pal_layer.setFormat(format) - - pc = QgsPropertyCollection('ddp') - - qgs_prop_bold = QgsProperty() - qgs_prop_bold.setField("bold") - pc.setProperty(1, qgs_prop_bold) - - qgs_prop_italic = QgsProperty() - qgs_prop_italic.setField("italic") - pc.setProperty(2, qgs_prop_italic) - - qgs_prop_size = QgsProperty() - qgs_prop_size.setField("size") - pc.setProperty(0, qgs_prop_size) - - qgs_prop_font = QgsProperty() - qgs_prop_font.setField("family") - pc.setProperty(6, qgs_prop_font) - - pal_layer.setDataDefinedProperties(pc) - else: pal_layer.xOffset = size pal_layer.yOffset = -size @@ -912,6 +867,29 @@ def set_default_point_renderer(layer, coordinates=None, size=3.5, do_labels=True layer.setRenderer(renderer) # layer.rendererV2().symbols()[0].changeSymbolLayer(0, symbol_layer) + @staticmethod + def config_labeling(layer, txt_format): + layer.setLabelsEnabled(False) + layer.setLabeling(None) + pal_layer = QgsPalLayerSettings() + pal_layer.enabled = True + pal_layer.fontSizeInMapUnits = False + pal_layer.labelOffsetInMapUnits = False + pal_layer.fieldName = 'name' + pal_layer.placement = QgsPalLayerSettings.OverPoint + # expr = "case when size < 3 then size * 2 else size end case" + # pal_layer.setDataDefinedProperty(QgsPalLayerSettings.Size, True, True, expr, '') + if "LABELS" in layer.name().upper(): + new_format = QgsTextFormat(txt_format) + pal_layer.setFormat(new_format) + else: + # pal_layer.xOffset = size + # pal_layer.yOffset = -size + pass + labeler = QgsVectorLayerSimpleLabeling(pal_layer) + layer.setLabeling(labeler) + layer.setLabelsEnabled(True) + def addLinks(self, coordinates, links, layer_name, link_color=QColor('black'), link_width=1): try: if self.session.crs and self.session.crs.isValid(): @@ -3152,6 +3130,14 @@ def edit_style(self): ed = GraduatedSymbolV2(lyr, None) if ed.exec_(): new_renderer = QgsGraduatedSymbolRenderer.convertFromRenderer(ed.get_renderer()) + elif lyr.name().lower() == "map labels" or lyr.name().lower() == "labels": + ed = QgsTextFormatDialog(lyr.labeling().settings().format(), self.map_control.canvas) + if ed.exec_(): + EmbedMap.config_labeling(lyr, ed.format()) + self.map_control.config_labeling(lyr, ed.format()) + lyr.triggerRepaint() + self.map_control.session.update_thematic_map() + pass else: old_renderer = self.view.currentLayer().renderer() ed = QgsSymbolSelectorDialog(old_renderer.symbol(), diff --git a/src/ui/qgis_icons_rc.py b/src/ui/qgis_icons_rc.py index 6a1cc9cc..513cb1ab 100644 --- a/src/ui/qgis_icons_rc.py +++ b/src/ui/qgis_icons_rc.py @@ -2,61 +2,13 @@ # Resource object code # -# Created by: The Resource Compiler for PyQt5 (Qt v5.9.2) +# Created by: The Resource Compiler for PyQt5 (Qt v5.11.2) # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore qt_resource_data = b"\ -\x00\x00\x02\xd4\ -\x3c\ -\x73\x76\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ -\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\ -\x34\x20\x32\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\ -\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x31\ -\x36\x20\x31\x36\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\ -\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\ -\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\ -\x76\x67\x22\x3e\x0d\x0a\x3c\x67\x20\x73\x74\x72\x6f\x6b\x65\x2d\ -\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x73\x71\x75\x61\x72\x65\x22\ -\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\ -\x73\x6c\x61\x74\x65\x28\x30\x20\x2d\x31\x36\x29\x22\x3e\x0d\x0a\ -\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x34\x2e\x34\x30\x36\x37\ -\x36\x39\x35\x20\x32\x32\x2e\x38\x36\x35\x32\x30\x32\x63\x2e\x31\ -\x31\x38\x36\x33\x37\x2d\x33\x2e\x38\x31\x38\x34\x35\x32\x2e\x39\ -\x34\x39\x30\x37\x32\x36\x2d\x35\x2e\x35\x34\x37\x31\x33\x20\x33\ -\x2e\x38\x31\x39\x38\x36\x35\x36\x2d\x35\x2e\x33\x31\x34\x32\x39\ -\x34\x20\x32\x2e\x38\x37\x30\x34\x36\x39\x39\x2e\x32\x33\x32\x32\ -\x37\x36\x20\x33\x2e\x35\x31\x35\x39\x37\x36\x39\x20\x32\x2e\x30\ -\x37\x38\x39\x38\x33\x20\x33\x2e\x33\x39\x36\x38\x30\x38\x39\x20\ -\x35\x2e\x38\x39\x37\x37\x34\x31\x22\x20\x66\x69\x6c\x6c\x3d\x22\ -\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\ -\x38\x38\x61\x38\x35\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ -\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x20\x73\ -\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x33\x22\x2f\ -\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x34\x2e\x33\ -\x39\x32\x34\x36\x32\x35\x20\x32\x32\x2e\x38\x36\x35\x32\x30\x32\ -\x63\x2e\x31\x31\x38\x36\x33\x37\x2d\x33\x2e\x38\x31\x38\x34\x35\ -\x32\x2e\x39\x34\x39\x30\x37\x32\x36\x2d\x35\x2e\x35\x39\x31\x33\ -\x32\x34\x20\x33\x2e\x38\x31\x39\x38\x36\x35\x36\x2d\x35\x2e\x33\ -\x35\x38\x34\x38\x38\x20\x32\x2e\x38\x37\x30\x34\x36\x39\x39\x2e\ -\x32\x33\x32\x32\x37\x36\x20\x33\x2e\x35\x31\x35\x39\x37\x36\x39\ -\x20\x32\x2e\x31\x32\x33\x31\x37\x37\x20\x33\x2e\x33\x39\x36\x38\ -\x30\x38\x39\x20\x35\x2e\x39\x34\x31\x39\x33\x35\x22\x20\x66\x69\ -\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\ -\x3d\x22\x23\x65\x65\x65\x65\x65\x63\x22\x20\x73\x74\x72\x6f\x6b\ -\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\ -\x64\x22\x2f\x3e\x0d\x0a\x3c\x72\x65\x63\x74\x20\x66\x69\x6c\x6c\ -\x3d\x22\x23\x66\x31\x64\x62\x31\x65\x22\x20\x68\x65\x69\x67\x68\ -\x74\x3d\x22\x37\x22\x20\x72\x78\x3d\x22\x2e\x38\x34\x36\x31\x35\ -\x33\x38\x36\x22\x20\x72\x79\x3d\x22\x31\x22\x20\x73\x74\x72\x6f\ -\x6b\x65\x3d\x22\x23\x63\x34\x61\x30\x30\x30\x22\x20\x73\x74\x72\ -\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x2e\x39\x39\x39\x39\ -\x39\x39\x39\x34\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x31\x22\ -\x20\x78\x3d\x22\x32\x2e\x35\x22\x20\x79\x3d\x22\x32\x33\x2e\x35\ -\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\ -\x3e\x0d\x0a\ \x00\x00\x06\x23\ \x00\ \x00\x16\x3f\x78\x9c\xed\x58\x4b\x6f\xdb\x46\x10\xbe\xe7\x57\x2c\ @@ -158,362 +110,49 @@ \x1f\x76\x03\x5b\xc6\xad\x97\x9c\xa3\x92\x73\x9a\x8c\x85\xba\x54\ \x27\x4f\xdf\x1b\x3d\x9f\xab\x6b\xdc\xb0\x6e\x5e\xfd\x03\x69\xb4\ \x4b\xe9\ -\x00\x00\x06\x24\ -\x00\ -\x00\x16\x4c\x78\x9c\xed\x58\x4b\x6f\xdb\x46\x10\xbe\xe7\x57\x2c\ -\xe8\x63\xc5\xe5\x3e\xf9\x50\x2c\x07\x4d\x8c\x02\x2d\xda\x4b\x9b\ -\xa2\x40\x2f\x02\x4d\xae\x24\xc6\x24\x57\x58\xae\x2c\x4b\xbf\xbe\ -\xb3\x7c\x4a\xb6\xdc\x04\x41\xd0\xe6\x60\xda\x12\xc5\x99\x6f\x66\ -\x77\xe6\x1b\x2e\x77\x78\xfd\xee\xb1\x2a\xd1\x83\x32\x4d\xa1\xeb\ -\x85\x47\x31\xf1\x90\xaa\x33\x9d\x17\xf5\x7a\xe1\xfd\xf9\xf1\x27\ -\x3f\xf6\x50\x63\xd3\x3a\x4f\x4b\x5d\xab\x85\x57\x6b\xef\xdd\xcd\ -\x9b\xeb\xe6\x61\xfd\x06\x21\x04\xc6\x75\x33\xcf\xb3\x85\xb7\xb1\ -\x76\x3b\x0f\x82\xed\xce\x94\x58\x9b\x75\x90\x67\x81\x2a\x55\xa5\ -\x6a\xdb\x04\x14\xd3\xc0\x9b\xe0\xd9\x04\xcf\x8c\x4a\x6d\xf1\xa0\ -\x32\x5d\x55\xba\x6e\x5a\xcb\xba\xb9\x3a\x01\x9b\x7c\x35\xa2\xf7\ -\xfb\x3d\xde\xf3\x16\x44\x93\x24\x09\x08\x0b\x18\xf3\x01\xe1\x37\ -\x87\xda\xa6\x8f\xfe\xb9\x29\xcc\xf1\x92\x29\x23\x84\x04\xa0\x9b\ -\x90\x5f\x86\x9a\x37\x90\x95\x2d\x7c\x46\xf8\x20\xc0\x8d\xde\x99\ -\x4c\xad\xc0\x4e\xe1\x5a\xd9\xe0\xf6\xe3\xed\xa8\xf4\x09\xce\x6d\ -\x7e\xe2\xa6\xa8\xef\x9b\x2c\xdd\xaa\xb3\x51\x07\x61\x97\x81\xb4\ -\x52\xcd\x36\xcd\x54\x13\x0c\xf2\xd6\xfe\x84\x26\xda\x0a\x8a\x7c\ -\xe1\xc1\x1c\xb9\x10\x71\x07\x28\xd4\xfe\xbd\x7e\x5c\x78\x04\x11\ -\xc4\x24\xfc\xb7\xe2\x8d\x2a\xd6\x1b\xbb\xf0\xfa\xcb\x7d\x91\xdb\ -\xcd\x78\x35\x8c\x30\x1f\xbd\x13\x9c\x50\x64\x28\x8f\x7a\xc4\x10\ -\xc9\x3c\xd7\x99\x9b\x1a\x8c\x79\xa8\xee\x74\xa9\xd7\x87\x5b\xbd\ -\xaf\xb1\xcb\xd2\x0d\x00\xaf\x47\xa0\x43\xe5\x6e\x32\xce\x1c\xa1\ -\x6d\xba\x06\x86\x4b\x6d\x16\xde\xd5\xaa\x3d\xbc\x4e\x71\xa7\x4d\ -\xae\xcc\xa0\x0a\xdb\xe3\x4c\xa5\x21\x0b\x85\x3d\x40\xc4\xbd\x58\ -\xdf\x7d\x52\x99\xb5\xba\x54\x26\xad\x33\x98\x0a\x25\xbd\x66\x6d\ -\x20\xac\x4b\xf2\x5d\x91\xab\x4b\x8a\x31\x70\x37\xbd\x71\xa0\x8b\ -\xda\x66\x93\xe6\x7a\x0f\x29\x7b\xaa\xdc\x17\x35\x28\xfc\x3e\xa3\ -\x31\x7d\x09\x30\x30\x10\x45\xf1\x80\x00\xea\xc6\x34\x71\x2e\x86\ -\xb8\x9b\x8d\xde\xbb\x50\x16\xde\x2a\x2d\x1b\xf5\xd4\xdf\x51\xeb\ -\x6a\xe1\x25\x58\x3e\x1b\x29\x03\xda\xa9\xc0\xa1\x90\x21\x0b\x9f\ -\x29\x5d\x0a\x43\x1c\x85\x4c\x26\xe2\x85\x39\x82\x7d\x18\xbd\x14\ -\x80\xb3\x7f\xc9\xb0\x4a\x1f\x8b\xaa\x38\xaa\xfc\x42\xf6\xb2\x9d\ -\x31\xb0\x06\xf8\x65\x7a\x50\x66\x2a\x56\x14\xb4\x05\x93\xab\x55\ -\x33\xa5\xc3\x5d\x71\x21\x49\x5b\x4c\xa0\x3d\xa1\xc0\x6e\x7c\xb5\ -\x5a\x01\xf3\x1d\x1a\xa1\xee\x6a\xe1\x6d\xf5\x1e\xca\xd6\x1a\x7d\ -\x3f\xa4\xaa\xf3\x75\x62\x12\xd3\x48\x4c\xba\x66\xf9\x50\x34\xc5\ -\x5d\x09\x95\x60\xcd\x6e\x32\xd2\xab\x55\xa3\xec\x72\xab\x0b\x58\ -\xb1\x20\x90\x19\xc1\x72\x54\x36\xda\x4c\xaa\x33\x33\x10\x29\xb3\ -\xd5\x65\x6a\xb5\x59\xda\x83\xbb\xab\x3f\xec\xee\x8a\xec\xbd\x3a\ -\x16\xca\xfc\xa2\x37\x69\x7d\x19\x7b\xa7\x6c\xea\x6e\x35\x36\x0d\ -\x62\x53\x18\xa5\x2c\x6a\x05\x41\xf7\xbe\x8e\x70\x0b\xb4\xc5\x35\ -\xa2\x9c\xfe\x13\xcc\xa4\x07\x18\xbd\xab\xf3\x51\x59\x15\x30\x02\ -\xb8\x80\xf3\xc2\x9b\x82\x56\x75\xfe\x59\xbf\xd9\xae\xd9\x3e\x01\ -\x75\xbe\x3b\xaa\xbe\x29\x1d\xe4\x2b\xe8\x60\x98\x87\x4c\x10\x12\ -\x7e\x1d\x29\xbf\x42\x64\xa9\x79\xa5\xe2\x09\x15\x61\xf8\x7a\x67\ -\x7c\x4f\x74\xb0\x57\x3a\xfe\x1b\x3a\x9a\x7b\xd8\x9d\xda\xb4\x7c\ -\x99\x0b\x19\x7f\x9e\x0b\x30\x80\x38\x60\xcb\xf4\x1b\x22\x33\x89\ -\x3e\x20\xb7\x4e\x31\x81\xdc\xd7\x8c\x20\x09\x9f\x08\x1e\xba\x70\ -\xa2\xbd\x86\x3a\x1c\x7c\x39\x71\xa7\xa3\x0e\x07\x5f\xad\x0d\x9c\ -\x7b\x9d\xc3\xfd\x3d\x05\xad\xb7\x87\x2e\xd6\x06\x36\xe6\xa5\x5a\ -\x42\x25\x29\x9b\x6d\xd4\x94\xd2\x2d\x6c\x96\x96\x10\xb7\x9b\x24\ -\x9d\xb8\x72\x82\xe5\x61\x69\x54\x79\xbe\xa3\x00\x95\xdb\xf2\xb8\ -\x5d\xfe\xb4\x1c\xd7\xda\x54\x69\xb9\xec\x4a\xec\x54\x01\x0d\xc0\ -\xfa\x82\xb8\x1d\x73\x57\x17\xae\xda\xce\x9d\xc3\x66\xd2\x16\x30\ -\xf6\x72\x4c\xd1\xb9\x7e\xb5\x6b\xd4\xf2\x64\x57\x46\xbe\x39\x7d\ -\x5f\xf0\xcc\x7f\xa5\xef\x3b\xa5\x2f\xe2\xec\xf5\xee\xfb\xbf\xe9\ -\x83\xc7\xd5\x16\xb8\x80\xee\x7c\x7a\xba\xf4\xfd\x5d\x97\x8c\x73\ -\x28\x9f\x92\x31\xb5\x94\xdb\x65\xdb\x8c\xce\x11\x65\x58\xba\xd3\ -\x45\xcc\xa1\xc7\x40\xcb\x0d\x27\x72\x11\x73\x74\x0d\xeb\xbf\x3a\ -\xea\x67\xe1\x6b\x53\xac\x0b\xd7\x24\x77\xc8\x18\xf3\xee\x38\xb7\ -\x72\x05\x37\x45\x08\x0d\xd8\xd8\x94\x04\xae\x0f\x69\x7f\x55\x50\ -\xa3\x79\x6a\xd3\xa9\x45\x19\x24\xd0\xa6\xf0\xa1\x4d\x31\xf9\x6a\ -\xfe\xfb\xed\x4f\x37\xbd\xeb\xeb\x2c\x9b\xff\xa5\xcd\xfd\x30\x12\ -\x42\x0e\x90\xde\xe9\x1d\x90\xe7\xdd\x8c\xe2\xeb\x3c\x9b\xaf\x1c\ -\xe3\xf6\xa6\xa8\xa0\xc7\x74\x2f\x1b\x7e\x78\xac\x4a\x18\x7f\x54\ -\x9c\x81\x5d\xd2\x27\xa7\x9d\x5b\xa3\xba\x57\x0f\x17\xdf\xbf\xe4\ -\x19\x3c\x5e\xc1\x28\xf8\xc3\x16\x65\xf9\xb3\x1b\x64\xe4\x79\x74\ -\x5a\xd8\x52\xdd\xb4\x63\x76\x3f\x87\x28\x82\x3e\x8c\x3e\xc8\xe0\ -\x24\xca\xeb\x60\x48\x43\x7b\xe5\xee\xdb\xbe\x77\xb5\x07\x57\xff\ -\x2b\x18\x6d\x7e\x45\xda\xe3\xad\xbb\xf0\xcd\xae\x54\x73\xf5\xa0\ -\x6a\x9d\xe7\x6f\xbb\x4d\x90\x03\xc4\x0e\xd0\x5d\x76\x2d\xf4\x9c\ -\x6e\x1f\x07\x41\xff\x88\x9f\xdf\xed\xac\x3d\x95\xb9\x3d\xc5\xbc\ -\xdd\x3f\x0c\xd2\xbe\x77\x9f\x0f\xec\xe6\x6e\x45\x00\xf6\x13\x46\ -\x29\x87\x5b\x3c\xc1\x3c\x8e\x44\x18\x21\x89\x09\x25\x2c\xa2\x21\ -\xdc\xe4\x84\x85\x91\x80\x25\xa1\x44\x54\x62\x1a\x45\x34\x21\x6e\ -\xd1\xf0\x63\x4c\x89\x94\x1c\x16\x03\xe8\x38\xa4\x4c\x92\x30\x44\ -\x47\x54\x21\x9f\x60\x42\x38\x75\xbb\x2d\xc1\xa3\x98\x41\x5d\x85\ -\x14\x7a\x59\x39\xf3\x29\xc7\x94\x13\x26\xa9\x40\x3f\x22\xd0\xb7\ -\x81\xbb\x75\x07\x8b\xa4\x3d\x38\x22\xed\x1f\xa3\x98\x3a\x1b\x31\ -\x0b\x4f\xc6\xf7\x29\xcc\x86\x86\x31\xcc\x0c\x26\xe0\x3c\x74\x66\ -\x71\x34\xeb\x9d\x51\x39\x78\xe0\x38\x8c\xa4\x24\x1c\x1c\x44\x09\ -\xf4\xf9\xe0\xba\x84\x99\x08\xc2\x79\x48\x67\xe3\x44\x22\x74\x3c\ -\x79\xcd\xe0\x08\x82\xae\xeb\x59\x6b\x7f\xb2\xe0\x2e\xbc\xab\xcb\ -\x1d\xf3\x08\xee\xee\xaa\xb4\xf4\x87\xec\x4a\x97\xd8\x50\x86\x49\ -\x22\x90\xc0\x04\xf2\x04\x59\x86\x79\xc9\x29\xb1\x7d\x5c\x21\x87\ -\xb8\x8e\x4f\x1d\x66\xba\x06\x82\x61\x87\xe9\x67\x3b\xf3\x90\xda\ -\x9d\x39\x59\x88\x5e\x2e\xaa\x93\x9a\xb9\x5c\x42\xc4\x11\x48\x04\ -\x23\x6c\x2a\x87\x0a\x41\xc2\x23\x41\x93\x88\x02\xf5\xd0\x47\x0a\ -\x22\x05\xca\x90\xdb\x3c\x83\x1c\xd8\x0c\xb1\x7b\xe1\x97\x44\xc9\ -\x2c\xc1\x91\xa4\xb1\x10\x21\xc8\x60\x55\xa0\x82\x39\x59\x02\x23\ -\x25\x1c\x1e\x0c\xe0\x9d\xf3\x88\xcd\xdc\x8f\x84\xc2\x75\x14\x85\ -\xb1\x88\x66\x50\x1f\xb1\x64\x4c\xc6\xc0\x91\x20\x2c\x01\x88\x2f\ -\x40\x14\x41\x09\x21\x8a\x61\x9e\x91\xe4\x33\x9f\x61\xa8\x44\x11\ -\xc7\x21\xc0\x58\x24\x48\x02\xf5\xe3\xca\xd2\x8d\xf9\x44\x06\x15\ -\xcb\x99\x7b\x14\xb9\xd2\x63\x50\xcc\x08\xac\x13\x4e\x42\xe7\x1a\ -\x44\x92\x53\x86\x7c\x48\x38\x65\x21\x91\x27\x22\x8e\x65\x4c\x13\ -\xb0\x75\xf5\xdc\xeb\x45\xe2\x42\x65\xcc\x79\x39\x13\x89\x84\xcb\ -\x4b\xd5\xf2\xfc\x15\xd2\xcb\x7c\x5d\xbb\xb5\xeb\xe6\xcd\x3f\xad\ -\xca\x4f\x3b\ -\x00\x00\x08\xb0\ +\x00\x00\x02\x47\ \x3c\ -\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x20\ -\x77\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x20\x78\x6d\x6c\x6e\x73\ -\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\ -\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\ -\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\ -\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\ -\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x3e\x0d\x0a\x3c\x66\x69\x6c\x74\ -\x65\x72\x20\x69\x64\x3d\x22\x61\x22\x20\x68\x65\x69\x67\x68\x74\ -\x3d\x22\x31\x2e\x35\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x2e\ -\x35\x22\x20\x78\x3d\x22\x2d\x2e\x32\x35\x22\x20\x79\x3d\x22\x2d\ -\x2e\x32\x35\x22\x3e\x0d\x0a\x3c\x66\x65\x47\x61\x75\x73\x73\x69\ -\x61\x6e\x42\x6c\x75\x72\x20\x69\x6e\x3d\x22\x53\x6f\x75\x72\x63\ -\x65\x41\x6c\x70\x68\x61\x22\x20\x72\x65\x73\x75\x6c\x74\x3d\x22\ -\x62\x6c\x75\x72\x22\x20\x73\x74\x64\x44\x65\x76\x69\x61\x74\x69\ -\x6f\x6e\x3d\x22\x32\x22\x2f\x3e\x0d\x0a\x3c\x66\x65\x43\x6f\x6c\ -\x6f\x72\x4d\x61\x74\x72\x69\x78\x20\x72\x65\x73\x75\x6c\x74\x3d\ -\x22\x62\x6c\x75\x72\x61\x6c\x70\x68\x61\x22\x20\x74\x79\x70\x65\ -\x3d\x22\x6d\x61\x74\x72\x69\x78\x22\x20\x76\x61\x6c\x75\x65\x73\ -\x3d\x22\x31\x20\x30\x20\x30\x20\x30\x20\x30\x20\x30\x20\x31\x20\ -\x30\x20\x30\x20\x30\x20\x30\x20\x30\x20\x31\x20\x30\x20\x30\x20\ -\x30\x20\x30\x20\x30\x20\x30\x2e\x33\x35\x31\x30\x30\x30\x20\x30\ -\x22\x2f\x3e\x0d\x0a\x3c\x66\x65\x4f\x66\x66\x73\x65\x74\x20\x64\ -\x78\x3d\x22\x37\x2e\x35\x22\x20\x64\x79\x3d\x22\x37\x2e\x35\x22\ -\x20\x69\x6e\x3d\x22\x62\x6c\x75\x72\x61\x6c\x70\x68\x61\x22\x20\ -\x72\x65\x73\x75\x6c\x74\x3d\x22\x6f\x66\x66\x73\x65\x74\x42\x6c\ -\x75\x72\x22\x2f\x3e\x0d\x0a\x3c\x66\x65\x4d\x65\x72\x67\x65\x3e\ -\x0d\x0a\x3c\x66\x65\x4d\x65\x72\x67\x65\x4e\x6f\x64\x65\x20\x69\ -\x6e\x3d\x22\x6f\x66\x66\x73\x65\x74\x42\x6c\x75\x72\x22\x2f\x3e\ -\x0d\x0a\x3c\x66\x65\x4d\x65\x72\x67\x65\x4e\x6f\x64\x65\x20\x69\ -\x6e\x3d\x22\x53\x6f\x75\x72\x63\x65\x47\x72\x61\x70\x68\x69\x63\ -\x22\x2f\x3e\x0d\x0a\x3c\x2f\x66\x65\x4d\x65\x72\x67\x65\x3e\x0d\ -\x0a\x3c\x2f\x66\x69\x6c\x74\x65\x72\x3e\x0d\x0a\x3c\x67\x20\x74\ -\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\ -\x61\x74\x65\x28\x30\x20\x2d\x38\x29\x22\x3e\x0d\x0a\x3c\x72\x65\ -\x63\x74\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x30\x2e\x35\x22\ -\x20\x72\x78\x3d\x22\x31\x2e\x38\x38\x39\x31\x31\x39\x22\x20\x72\ -\x79\x3d\x22\x31\x2e\x35\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ -\x69\x6c\x6c\x3a\x23\x36\x64\x39\x37\x63\x34\x3b\x66\x69\x6c\x6c\ -\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\ -\x72\x6f\x6b\x65\x3a\x23\x34\x31\x35\x61\x37\x35\x3b\x73\x74\x72\ -\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x2e\x38\x30\x30\x30\x30\ -\x30\x30\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\ -\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ -\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x6f\ -\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x22\ -\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x39\x2e\x32\x30\x30\x30\x30\ -\x31\x22\x20\x78\x3d\x22\x32\x2e\x34\x30\x30\x30\x30\x30\x31\x22\ -\x20\x79\x3d\x22\x38\x2e\x33\x39\x39\x39\x39\x39\x36\x22\x2f\x3e\ -\x0d\x0a\x3c\x72\x65\x63\x74\x20\x68\x65\x69\x67\x68\x74\x3d\x22\ -\x39\x22\x20\x72\x78\x3d\x22\x2e\x35\x22\x20\x73\x74\x79\x6c\x65\ -\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x64\x65\x64\x3b\x66\ -\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\ -\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x36\x36\x36\x3b\x73\x74\x72\ -\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x2e\x35\x3b\x73\x74\x72\ -\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\ -\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\ -\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\ -\x3a\x76\x69\x73\x69\x62\x6c\x65\x22\x20\x77\x69\x64\x74\x68\x3d\ -\x22\x31\x34\x22\x20\x78\x3d\x22\x35\x22\x20\x79\x3d\x22\x39\x22\ -\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x37\x20\ -\x31\x31\x2e\x35\x68\x31\x30\x22\x20\x66\x69\x6c\x6c\x3d\x22\x6e\ -\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x36\x36\ -\x36\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\ -\x70\x3d\x22\x72\x6f\x75\x6e\x64\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\ -\x74\x68\x20\x64\x3d\x22\x6d\x36\x2e\x30\x31\x30\x37\x38\x39\x39\ -\x20\x32\x31\x2e\x35\x31\x36\x38\x34\x68\x31\x31\x2e\x39\x38\x39\ -\x32\x31\x76\x36\x2e\x39\x38\x33\x31\x36\x68\x2d\x31\x31\x2e\x39\ -\x38\x39\x32\x31\x7a\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ -\x6c\x6c\x3a\x23\x65\x64\x65\x64\x65\x64\x3b\x66\x69\x6c\x6c\x2d\ -\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\ -\x6f\x6b\x65\x3a\x23\x36\x36\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ -\x77\x69\x64\x74\x68\x3a\x2e\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ -\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\ -\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\ -\x75\x6e\x64\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\ -\x69\x62\x6c\x65\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\ -\x3d\x22\x6d\x37\x2e\x30\x30\x38\x39\x39\x31\x37\x20\x32\x32\x2e\ -\x34\x31\x30\x33\x30\x33\x68\x33\x2e\x39\x39\x32\x38\x30\x36\x37\ -\x76\x34\x2e\x39\x36\x38\x36\x38\x36\x31\x68\x2d\x33\x2e\x39\x39\ -\x32\x38\x30\x36\x37\x7a\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ -\x69\x6c\x6c\x3a\x23\x34\x31\x35\x61\x37\x35\x3b\x66\x69\x6c\x6c\ -\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\ -\x72\x6f\x6b\x65\x3a\x23\x65\x36\x65\x36\x65\x36\x3b\x73\x74\x72\ -\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x2e\x39\x39\x35\x39\x36\ -\x36\x39\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\ -\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ -\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x6f\ -\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x22\ -\x2f\x3e\x0d\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\ -\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x2e\x37\x36\x39\x32\x33\x30\ -\x37\x37\x20\x30\x20\x30\x20\x2e\x37\x36\x39\x32\x33\x30\x37\x37\ -\x20\x2d\x2e\x36\x31\x35\x33\x38\x34\x36\x34\x20\x37\x2e\x33\x38\ -\x34\x36\x31\x35\x34\x29\x22\x3e\x0d\x0a\x3c\x72\x65\x63\x74\x20\ -\x66\x69\x6c\x6c\x3d\x22\x23\x35\x61\x38\x63\x35\x61\x22\x20\x68\ -\x65\x69\x67\x68\x74\x3d\x22\x31\x33\x22\x20\x72\x78\x3d\x22\x32\ -\x2e\x36\x31\x34\x39\x33\x37\x31\x22\x20\x72\x79\x3d\x22\x32\x2e\ -\x36\x31\x34\x39\x33\x36\x38\x22\x20\x77\x69\x64\x74\x68\x3d\x22\ -\x31\x33\x22\x20\x78\x3d\x22\x31\x39\x22\x20\x79\x3d\x22\x31\x39\ -\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x32\ -\x30\x2e\x32\x39\x39\x39\x39\x38\x20\x32\x35\x2e\x34\x39\x39\x39\ -\x39\x39\x68\x31\x30\x2e\x34\x63\x30\x20\x30\x20\x30\x20\x30\x20\ -\x30\x2d\x32\x2e\x36\x20\x30\x2d\x32\x2e\x35\x39\x39\x39\x39\x39\ -\x2d\x2e\x36\x35\x2d\x32\x2e\x35\x39\x39\x39\x39\x39\x2d\x35\x2e\ -\x32\x2d\x32\x2e\x35\x39\x39\x39\x39\x39\x2d\x34\x2e\x35\x35\x20\ -\x30\x2d\x35\x2e\x32\x20\x30\x2d\x35\x2e\x32\x20\x32\x2e\x35\x39\ -\x39\x39\x39\x39\x20\x30\x20\x32\x2e\x36\x20\x30\x20\x32\x2e\x36\ -\x20\x30\x20\x32\x2e\x36\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\ -\x66\x63\x66\x66\x66\x66\x22\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\ -\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x6f\x70\x61\x63\ -\x69\x74\x79\x3d\x22\x2e\x33\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\ -\x68\x20\x64\x3d\x22\x6d\x32\x32\x2e\x39\x33\x35\x37\x32\x34\x20\ -\x32\x38\x2e\x30\x36\x34\x32\x37\x35\x6c\x35\x2e\x31\x32\x38\x35\ -\x35\x31\x2d\x35\x2e\x31\x32\x38\x35\x35\x31\x22\x20\x73\x74\x79\ -\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\x66\x3b\x66\x69\ -\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\ -\x73\x74\x72\x6f\x6b\x65\x3a\x23\x66\x66\x66\x3b\x73\x74\x72\x6f\ -\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x2e\x38\x37\x31\x34\x34\ -\x38\x35\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\ -\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ -\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x6f\ -\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x22\ -\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\x20\x66\x69\x6c\ -\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x66\x69\x6c\x74\x65\x72\x3d\ -\x22\x75\x72\x6c\x28\x23\x61\x29\x22\x20\x73\x74\x72\x6f\x6b\x65\ -\x3d\x22\x23\x34\x31\x35\x61\x37\x35\x22\x20\x74\x72\x61\x6e\x73\ -\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x2e\x30\x35\ -\x33\x33\x36\x39\x36\x36\x20\x30\x20\x30\x20\x2e\x30\x35\x33\x33\ -\x36\x39\x36\x36\x20\x2d\x36\x38\x2e\x30\x33\x33\x36\x38\x34\x20\ -\x34\x32\x2e\x31\x30\x35\x30\x34\x38\x29\x22\x2f\x3e\x0d\x0a\x3c\ -\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x37\x20\x31\x33\x2e\x35\x68\ -\x31\x30\x22\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\ -\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x36\x36\x36\x22\x20\x73\x74\ -\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\x6f\ -\x75\x6e\x64\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\ -\x22\x6d\x37\x20\x31\x35\x2e\x35\x68\x31\x30\x22\x20\x66\x69\x6c\ -\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\ -\x22\x23\x36\x36\x36\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ -\x6e\x65\x63\x61\x70\x3d\x22\x72\x6f\x75\x6e\x64\x22\x2f\x3e\x0d\ -\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\ -\x00\x00\x02\x47\ -\x3c\ -\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\x22\x20\ -\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x34\x2e\x32\ -\x33\x33\x33\x33\x33\x33\x20\x34\x2e\x32\x33\x33\x33\x33\x33\x35\ -\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\x20\x78\x6d\x6c\ -\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\ -\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\ -\x0d\x0a\x3c\x67\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x35\x61\ -\x38\x63\x35\x61\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ -\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x30\x20\x2d\x32\x39\ -\x32\x2e\x37\x36\x36\x36\x35\x29\x22\x3e\x0d\x0a\x3c\x70\x61\x74\ -\x68\x20\x64\x3d\x22\x6d\x31\x2e\x34\x35\x35\x32\x30\x38\x33\x20\ -\x32\x39\x33\x2e\x31\x36\x33\x35\x33\x76\x31\x2e\x30\x35\x38\x33\ -\x33\x68\x2d\x31\x2e\x30\x35\x38\x33\x33\x33\x33\x31\x76\x31\x2e\ -\x33\x32\x32\x39\x32\x68\x31\x2e\x30\x35\x38\x33\x33\x33\x33\x31\ -\x76\x31\x2e\x30\x35\x38\x33\x33\x68\x31\x2e\x33\x32\x32\x39\x31\ -\x36\x37\x76\x2d\x31\x2e\x30\x35\x38\x33\x33\x68\x31\x2e\x30\x35\ -\x38\x33\x33\x33\x33\x76\x2d\x31\x2e\x33\x32\x32\x39\x32\x68\x2d\ -\x31\x2e\x30\x35\x38\x33\x33\x33\x33\x76\x2d\x31\x2e\x30\x35\x38\ -\x33\x33\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x66\x66\x22\ -\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x2e\ -\x32\x36\x34\x35\x38\x33\x33\x32\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\ -\x74\x68\x20\x64\x3d\x22\x6d\x2d\x32\x39\x35\x2e\x30\x31\x35\x35\ -\x39\x2e\x39\x32\x36\x30\x34\x31\x36\x36\x68\x2e\x32\x36\x34\x35\ -\x38\x33\x33\x35\x76\x32\x2e\x33\x38\x31\x32\x34\x39\x39\x68\x2d\ -\x2e\x32\x36\x34\x35\x38\x33\x33\x35\x7a\x22\x20\x66\x69\x6c\x6c\ -\x3d\x22\x23\x35\x61\x38\x63\x35\x61\x22\x20\x73\x74\x72\x6f\x6b\ -\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x2e\x32\x36\x34\x35\x38\x33\ -\x33\x32\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x72\ -\x6f\x74\x61\x74\x65\x28\x2d\x39\x30\x29\x22\x2f\x3e\x0d\x0a\x3c\ -\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x31\x2e\x39\x38\x34\x33\x37\ -\x35\x20\x32\x39\x33\x2e\x36\x39\x32\x36\x39\x68\x2e\x32\x36\x34\ -\x35\x38\x33\x33\x38\x76\x32\x2e\x33\x38\x31\x32\x35\x30\x31\x68\ -\x2d\x2e\x32\x36\x34\x35\x38\x33\x33\x38\x7a\x22\x20\x66\x69\x6c\ -\x6c\x3d\x22\x23\x35\x61\x38\x63\x35\x61\x22\x20\x73\x74\x72\x6f\ -\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x2e\x32\x36\x34\x35\x38\ -\x33\x32\x39\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\ -\x73\x76\x67\x3e\x0d\x0a\ -\x00\x00\x02\xb6\ -\x3c\ -\x73\x76\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ -\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\ -\x34\x20\x32\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\ -\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x31\ -\x36\x20\x31\x36\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\ -\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\ -\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\ -\x76\x67\x22\x3e\x0d\x0a\x3c\x67\x20\x73\x74\x72\x6f\x6b\x65\x2d\ -\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x73\x71\x75\x61\x72\x65\x22\ -\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\ -\x73\x6c\x61\x74\x65\x28\x30\x20\x2d\x31\x36\x29\x22\x3e\x0d\x0a\ -\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x36\x20\x31\x39\x2e\x32\ -\x31\x36\x31\x33\x32\x63\x2e\x36\x36\x34\x35\x31\x31\x37\x2d\x2e\ -\x39\x34\x36\x37\x31\x20\x32\x2e\x33\x30\x37\x30\x35\x35\x37\x2d\ -\x32\x2e\x34\x30\x34\x36\x33\x34\x20\x34\x2e\x35\x36\x32\x34\x31\ -\x2d\x31\x2e\x30\x30\x39\x31\x32\x20\x32\x2e\x33\x36\x39\x37\x36\ -\x32\x20\x31\x2e\x36\x33\x36\x33\x39\x31\x20\x31\x2e\x39\x37\x33\ -\x33\x37\x32\x20\x33\x2e\x36\x38\x30\x32\x36\x34\x2d\x2e\x30\x33\ -\x39\x32\x31\x20\x36\x2e\x39\x32\x37\x38\x32\x32\x22\x20\x66\x69\ -\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\ -\x3d\x22\x23\x38\x38\x38\x61\x38\x35\x22\x20\x73\x74\x72\x6f\x6b\ -\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\ -\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\ -\x22\x33\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\ -\x6d\x36\x20\x31\x39\x2e\x32\x31\x36\x31\x33\x32\x63\x31\x2d\x31\ -\x2e\x32\x31\x36\x31\x33\x32\x20\x32\x2e\x31\x39\x32\x36\x34\x38\ -\x39\x2d\x32\x2e\x36\x34\x36\x31\x35\x39\x20\x34\x2e\x35\x36\x32\ -\x34\x31\x2d\x31\x2e\x30\x30\x39\x31\x32\x20\x32\x2e\x33\x36\x39\ -\x37\x36\x32\x20\x31\x2e\x36\x33\x36\x33\x39\x31\x20\x31\x2e\x39\ -\x37\x33\x33\x37\x32\x20\x33\x2e\x36\x38\x30\x32\x36\x34\x2d\x2e\ -\x30\x33\x39\x32\x31\x20\x36\x2e\x39\x32\x37\x38\x32\x32\x22\x20\ -\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\ -\x6b\x65\x3d\x22\x23\x65\x65\x65\x65\x65\x63\x22\x20\x73\x74\x72\ -\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\ -\x75\x6e\x64\x22\x2f\x3e\x0d\x0a\x3c\x72\x65\x63\x74\x20\x66\x69\ -\x6c\x6c\x3d\x22\x23\x66\x31\x64\x62\x31\x65\x22\x20\x68\x65\x69\ -\x67\x68\x74\x3d\x22\x37\x22\x20\x72\x78\x3d\x22\x2e\x38\x34\x36\ -\x31\x35\x33\x38\x36\x22\x20\x72\x79\x3d\x22\x31\x22\x20\x73\x74\ -\x72\x6f\x6b\x65\x3d\x22\x23\x63\x34\x61\x30\x30\x30\x22\x20\x73\ -\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x2e\x39\x39\ -\x39\x39\x39\x39\x39\x34\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\ -\x31\x22\x20\x78\x3d\x22\x32\x2e\x35\x22\x20\x79\x3d\x22\x32\x33\ -\x2e\x35\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\ -\x76\x67\x3e\x0d\x0a\ -\x00\x00\x01\x65\ -\x3c\ -\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\x22\x20\ -\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x34\x2e\x32\ -\x33\x33\x33\x33\x33\x32\x20\x34\x2e\x32\x33\x33\x33\x33\x33\x35\ -\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\x20\x78\x6d\x6c\ -\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\ -\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\ -\x0d\x0a\x3c\x67\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x66\x30\ -\x35\x30\x35\x30\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ -\x74\x68\x3d\x22\x2e\x32\x36\x34\x35\x38\x33\x33\x32\x22\x20\x74\ -\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\ -\x61\x74\x65\x28\x30\x20\x2d\x32\x39\x32\x2e\x37\x36\x36\x36\x35\ -\x29\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x20\ -\x2e\x33\x39\x36\x38\x37\x34\x39\x39\x20\x32\x39\x34\x2e\x32\x32\ -\x31\x38\x36\x68\x33\x2e\x34\x33\x39\x35\x38\x33\x33\x76\x31\x2e\ -\x33\x32\x32\x39\x31\x36\x36\x68\x2d\x33\x2e\x34\x33\x39\x35\x38\ -\x33\x33\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x66\x66\x22\ -\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x20\x2e\ -\x39\x32\x36\x30\x34\x31\x36\x36\x20\x32\x39\x34\x2e\x37\x35\x31\ -\x30\x34\x68\x32\x2e\x33\x38\x31\x32\x34\x39\x39\x76\x2e\x32\x36\ -\x34\x35\x38\x33\x33\x35\x68\x2d\x32\x2e\x33\x38\x31\x32\x34\x39\ -\x39\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x30\x35\x30\x35\ -\x30\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\ -\x67\x3e\x0d\x0a\ -\x00\x00\x07\x22\ -\x3c\ -\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\x22\x20\ -\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\x20\x78\x6d\x6c\x6e\x73\ +\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\x22\x20\ +\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x34\x2e\x32\ +\x33\x33\x33\x33\x33\x33\x20\x34\x2e\x32\x33\x33\x33\x33\x33\x35\ +\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\x20\x78\x6d\x6c\ +\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\ +\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\ +\x0d\x0a\x3c\x67\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x35\x61\ +\x38\x63\x35\x61\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ +\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x30\x20\x2d\x32\x39\ +\x32\x2e\x37\x36\x36\x36\x35\x29\x22\x3e\x0d\x0a\x3c\x70\x61\x74\ +\x68\x20\x64\x3d\x22\x6d\x31\x2e\x34\x35\x35\x32\x30\x38\x33\x20\ +\x32\x39\x33\x2e\x31\x36\x33\x35\x33\x76\x31\x2e\x30\x35\x38\x33\ +\x33\x68\x2d\x31\x2e\x30\x35\x38\x33\x33\x33\x33\x31\x76\x31\x2e\ +\x33\x32\x32\x39\x32\x68\x31\x2e\x30\x35\x38\x33\x33\x33\x33\x31\ +\x76\x31\x2e\x30\x35\x38\x33\x33\x68\x31\x2e\x33\x32\x32\x39\x31\ +\x36\x37\x76\x2d\x31\x2e\x30\x35\x38\x33\x33\x68\x31\x2e\x30\x35\ +\x38\x33\x33\x33\x33\x76\x2d\x31\x2e\x33\x32\x32\x39\x32\x68\x2d\ +\x31\x2e\x30\x35\x38\x33\x33\x33\x33\x76\x2d\x31\x2e\x30\x35\x38\ +\x33\x33\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x66\x66\x22\ +\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x2e\ +\x32\x36\x34\x35\x38\x33\x33\x32\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\ +\x74\x68\x20\x64\x3d\x22\x6d\x2d\x32\x39\x35\x2e\x30\x31\x35\x35\ +\x39\x2e\x39\x32\x36\x30\x34\x31\x36\x36\x68\x2e\x32\x36\x34\x35\ +\x38\x33\x33\x35\x76\x32\x2e\x33\x38\x31\x32\x34\x39\x39\x68\x2d\ +\x2e\x32\x36\x34\x35\x38\x33\x33\x35\x7a\x22\x20\x66\x69\x6c\x6c\ +\x3d\x22\x23\x35\x61\x38\x63\x35\x61\x22\x20\x73\x74\x72\x6f\x6b\ +\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x2e\x32\x36\x34\x35\x38\x33\ +\x33\x32\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x72\ +\x6f\x74\x61\x74\x65\x28\x2d\x39\x30\x29\x22\x2f\x3e\x0d\x0a\x3c\ +\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x31\x2e\x39\x38\x34\x33\x37\ +\x35\x20\x32\x39\x33\x2e\x36\x39\x32\x36\x39\x68\x2e\x32\x36\x34\ +\x35\x38\x33\x33\x38\x76\x32\x2e\x33\x38\x31\x32\x35\x30\x31\x68\ +\x2d\x2e\x32\x36\x34\x35\x38\x33\x33\x38\x7a\x22\x20\x66\x69\x6c\ +\x6c\x3d\x22\x23\x35\x61\x38\x63\x35\x61\x22\x20\x73\x74\x72\x6f\ +\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x2e\x32\x36\x34\x35\x38\ +\x33\x32\x39\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\ +\x73\x76\x67\x3e\x0d\x0a\ +\x00\x00\x07\x22\ +\x3c\ +\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\x22\x20\ +\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\x20\x78\x6d\x6c\x6e\x73\ \x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\ \x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\ \x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\ @@ -627,78 +266,234 @@ \x22\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\ \x6e\x6f\x64\x64\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\ \x0a\ -\x00\x00\x04\x58\ -\x00\ -\x00\x0e\xd0\x78\x9c\xa5\x97\xdb\x72\xe2\x46\x10\x86\xef\x53\x95\ -\x77\x98\x92\x6f\xec\x0b\x0d\xd3\xdd\x73\xdc\x5a\x72\x9b\xcb\x5c\ -\x24\xfb\x00\x02\x4b\x40\x2d\x06\x17\x90\xd8\x9b\xa7\xcf\x3f\x83\ -\x6c\x0e\xb6\x41\xce\x5a\x55\xb6\x9a\x91\xd5\x7f\x7f\xd3\x87\xe1\ -\xeb\xf6\x9f\x99\x9a\xb7\x8b\xd9\x7c\x37\xae\xc8\x57\xea\x69\x71\ -\xbf\x9b\xef\x6f\x9f\x1f\x96\xab\xed\xb8\x9a\xef\x76\x8f\x5f\x46\ -\xa3\xa7\xa7\x27\xfd\x24\x7a\xbd\x99\x8d\xd8\x18\x33\xc2\x3f\xf6\ -\x8f\x7c\x79\x5e\x2e\x56\xdf\xdf\x7b\x90\x52\x4a\xa3\xb2\x5a\xfd\ -\xf6\xeb\x2f\x5f\x71\xd3\x36\x9b\xdf\x37\xcd\xfd\xa2\x5d\xed\xd4\ -\xe2\x7e\x5c\x35\x95\x9a\xf5\xf6\x5f\x9b\x66\xb5\xed\xd6\x9b\x87\ -\x71\xf5\xd0\xec\x36\x8b\xe7\x5b\xa3\x6a\x6d\x42\x4c\xe4\x8d\xcd\ -\xb7\x8e\x48\x4c\x14\x65\x94\x0d\x56\x1b\x11\x8a\xca\xd9\xa4\xad\ -\x31\x29\xdd\x1d\xde\xf4\x6d\xb5\xd8\x41\xf8\xdf\xdb\x76\xf3\xe7\ -\x63\x33\x6d\xff\x58\x7d\xdb\xb6\x10\x4b\xe3\xaa\x0e\x4e\xb3\xf7\ -\x64\x72\x7c\x3c\xae\x9c\x4e\x29\xc6\xc4\xb1\x52\x3f\xf2\xb2\x13\ -\x4d\x62\xa3\xc9\x36\x96\x6b\x18\x5a\xf0\x08\x95\x00\xb6\xbb\xf5\ -\xa3\x5a\x77\xdd\xb6\x05\x2d\x53\xa9\x6c\xd7\xd3\xf5\x72\xbd\x19\ -\x57\x37\x9d\xe9\xaa\xd1\x9b\xa7\xe8\xcd\x53\x66\xff\xd4\xe8\x94\ -\xc6\x07\x7c\x26\x3f\xc7\x27\x14\x3e\xc9\x78\xe3\x07\xf2\x39\x02\ -\x92\xf9\x1c\xe1\x2a\x7c\x0e\x3c\xf6\x7c\x0e\xbc\x06\xf0\x31\x43\ -\xf8\x74\x9f\xe2\x33\xbd\xc4\x47\x1b\x23\x41\x10\xce\x9e\x53\xe4\ -\x20\x61\xcf\xc9\x04\x91\xf2\xa9\x61\xcb\x42\x5c\x80\x25\xb2\x49\ -\x0a\x30\xe7\x23\xc9\x30\x60\x67\xbc\xea\x33\x60\x67\xbc\x3e\x81\ -\xcb\x74\x43\xd2\xc9\xbc\x24\xdd\x30\x5c\xf7\x97\x70\x65\x1c\xe4\ -\x9d\x04\xca\x64\x84\x84\x39\x66\x5e\xc4\xd1\x7a\x06\x1a\xac\xfb\ -\x10\x99\x53\xc1\xc5\xc9\xa4\x42\x8b\x9c\xf7\x76\x60\x7a\x31\x79\ -\x2d\xec\x44\x7a\x5c\x47\x76\xc6\xc5\x51\xbb\x80\xb2\x0e\x7d\x7a\ -\x1d\xec\xeb\xbc\x06\x96\xdf\xa7\x78\xb5\xff\xbf\xfc\xa2\x93\xc4\ -\x85\x0f\x90\x3a\x1e\xc6\xe7\xac\x3b\xd5\x67\xed\xe9\xac\x3b\x7d\ -\xa2\x39\x99\x6e\x48\xf1\xbd\xe6\xdc\x30\x3a\xdd\x95\xe2\xa3\x68\ -\x99\x6d\x9f\x4c\xc4\x62\xfb\x64\xa2\x14\x4a\x1d\x9a\xe0\x1c\x00\ -\x15\x5c\x94\x58\xfa\x6e\xe5\x92\x19\x58\x7c\xe4\x90\x7d\xd8\x81\ -\x1e\xd7\x91\x59\x9a\xd5\x59\x36\x7d\x22\x99\xba\x81\xb8\x3e\xee\ -\x55\xf9\xb6\x59\x9e\xe0\xc2\xbc\x9c\x3e\x8f\x2b\x68\x64\x9b\x92\ -\x63\x98\x3f\xb2\x99\xc4\x72\xde\xf1\x4b\x95\x29\xde\x90\xf5\x29\ -\x28\xd1\x36\x92\x65\x12\x55\x8b\xf6\xec\x30\x8a\x19\x2c\x25\xe0\ -\x95\x29\x79\x95\xbb\x97\x0d\x51\xb0\x4e\x88\xd7\xb2\x1f\xc0\x12\ -\xc1\xf8\xeb\x50\x26\x94\xaf\x01\x5c\x2c\xe7\xab\x47\x73\x0a\xe2\ -\x03\x34\xf3\x3d\x1a\x1b\x48\xb3\xdb\x73\x41\x14\x1a\xad\x26\x5e\ -\x04\x83\x1c\xc2\x4f\x60\x56\xac\xb1\xb1\x4e\xac\x53\x35\x6b\xa6\ -\x18\x31\xf2\x54\x59\x26\xeb\xac\x22\x1f\x3d\x68\x08\x96\x6d\x04\ -\x38\xa2\xe8\x06\x71\x11\xed\x88\x03\xde\x32\x20\x69\xa6\xd9\xdd\ -\xa0\x19\x97\x26\x69\xf2\x21\x9f\x99\xda\x1d\x02\x2d\xb7\xcb\x66\ -\xd7\xde\xd6\xd6\x7b\xd0\x51\xb5\xb3\xa4\x2d\x49\x0a\x77\x45\xd3\ -\x63\xb3\x9b\x2b\x30\x7c\x60\xa3\xc8\x36\x5e\x79\x74\x20\xc2\x55\ -\x63\xae\x19\x75\xb0\x55\xb6\xff\xad\x54\xb7\x58\x2e\x11\xeb\x66\ -\x79\x7b\x33\x03\x83\x35\x02\x5e\xec\x40\x5c\xbb\x18\x6d\xc0\x8c\ -\xac\x8e\x05\xf4\xa4\x49\xe7\x71\x40\x68\xf9\x26\xbf\xee\xd5\xb2\ -\xce\xe9\x90\x24\x60\x14\x88\x41\xed\x86\x80\x93\xc6\xe8\x27\x74\ -\xdd\xb4\x93\x7c\xbd\xaf\x21\xf7\x14\xf4\x8e\x2c\x01\x9d\x91\xc4\ -\x59\x17\x94\xf5\x46\x63\x3f\x31\xe6\xd1\x68\x41\x26\x84\x74\x2e\ -\x01\x1e\x62\x63\x95\x7b\x51\x10\x73\x93\x7e\x35\x55\x3c\xf2\xbf\ -\x5a\xaf\xda\x63\x28\x21\xe1\x84\x10\x7d\xcc\x7b\xb8\x59\x7f\x6f\ -\xa1\x30\x76\xf9\x7a\x5f\x21\xe5\x24\x4b\xd2\x4b\x24\x47\x30\xb3\ -\x44\xa7\x0d\x8c\x7c\xbc\x60\x8d\x6e\x18\xcf\x15\x02\xbc\x0e\xc6\ -\x96\x13\x9b\xd5\x3e\x22\xba\x06\xa3\x31\x61\x36\x3a\x52\xb8\x23\ -\x46\x8c\x82\xfa\x17\x1f\x0c\xaa\xbd\x78\xa8\xb1\x10\xf1\xde\xdc\ -\x00\x9c\xf5\xa7\x31\xbc\xe8\x2d\x3b\xdd\xdd\xbd\x7c\x50\xf7\x47\ -\x7c\x7e\xa3\x80\x30\xaa\x82\x77\x45\x01\x38\xb3\xbc\xab\xc0\xec\ -\x3d\x63\x14\x25\xcf\x90\xab\x91\x97\x9c\x2e\xb8\x6e\x07\xb9\x16\ -\x38\xc4\xdb\x9c\xd5\xe8\x5e\xd1\x35\x07\x87\x07\x11\xa8\x61\x8c\ -\x8e\x28\xbe\x48\xc8\xb1\x8b\x77\x88\x5d\x82\x91\x0b\x02\xee\xaf\ -\x0b\xf0\xe8\x95\x8c\xec\x2d\x13\x88\xbd\xa3\xf8\x6e\xec\xac\x03\ -\x79\x31\x98\xf7\x59\x00\xa3\x75\x8b\xc7\x9e\xe6\x7e\xe2\xed\x05\ -\x05\xd3\xeb\x0a\xa2\xd1\x96\x1d\xce\x5e\xaf\x27\xf6\x01\xf4\xeb\ -\xeb\xf4\x27\x03\xe8\x97\x4e\x8b\xd6\x99\xe9\x47\x1f\x38\x5d\x70\ -\x7d\xe2\xf9\x12\xf5\x66\x80\x63\xd4\x82\x49\x94\x63\xf6\xf9\xfb\ -\x0a\x87\xa5\x36\x0c\xa7\x41\x9b\x84\xa3\x15\x9c\x33\x46\x5d\x9e\ -\x74\x38\x92\xc7\xd3\xde\x35\xef\x4b\x68\x34\x2b\xbf\xf1\x7d\x14\ -\x7f\xff\x03\x20\x3e\x02\xe1\ +\x00\x00\x01\x65\ +\x3c\ +\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\x22\x20\ +\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x34\x2e\x32\ +\x33\x33\x33\x33\x33\x32\x20\x34\x2e\x32\x33\x33\x33\x33\x33\x35\ +\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\x20\x78\x6d\x6c\ +\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\ +\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\ +\x0d\x0a\x3c\x67\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x66\x30\ +\x35\x30\x35\x30\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3d\x22\x2e\x32\x36\x34\x35\x38\x33\x33\x32\x22\x20\x74\ +\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\ +\x61\x74\x65\x28\x30\x20\x2d\x32\x39\x32\x2e\x37\x36\x36\x36\x35\ +\x29\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x20\ +\x2e\x33\x39\x36\x38\x37\x34\x39\x39\x20\x32\x39\x34\x2e\x32\x32\ +\x31\x38\x36\x68\x33\x2e\x34\x33\x39\x35\x38\x33\x33\x76\x31\x2e\ +\x33\x32\x32\x39\x31\x36\x36\x68\x2d\x33\x2e\x34\x33\x39\x35\x38\ +\x33\x33\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x66\x66\x22\ +\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x20\x2e\ +\x39\x32\x36\x30\x34\x31\x36\x36\x20\x32\x39\x34\x2e\x37\x35\x31\ +\x30\x34\x68\x32\x2e\x33\x38\x31\x32\x34\x39\x39\x76\x2e\x32\x36\ +\x34\x35\x38\x33\x33\x35\x68\x2d\x32\x2e\x33\x38\x31\x32\x34\x39\ +\x39\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x30\x35\x30\x35\ +\x30\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\ +\x67\x3e\x0d\x0a\ +\x00\x00\x09\x26\ +\x3c\ +\x73\x76\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x32\x31\x20\x32\x34\ +\x20\x32\x32\x20\x31\x36\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\ +\x31\x36\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x32\x31\x20\ +\x32\x34\x20\x32\x32\x20\x31\x36\x22\x20\x77\x69\x64\x74\x68\x3d\ +\x22\x32\x32\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\ +\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\ +\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\ +\x6b\x22\x3e\x0d\x0a\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x20\x69\x64\x3d\x22\x61\x22\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ +\x61\x74\x72\x69\x78\x28\x31\x2e\x33\x33\x33\x33\x20\x30\x20\x30\ +\x20\x2d\x31\x2e\x33\x33\x33\x33\x20\x39\x30\x2e\x39\x32\x30\x33\ +\x20\x31\x39\x37\x2e\x34\x31\x30\x39\x29\x22\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\ +\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x20\x78\x31\x3d\x22\x2d\ +\x34\x30\x2e\x39\x34\x35\x38\x22\x20\x78\x32\x3d\x22\x2d\x34\x33\ +\x2e\x37\x33\x34\x35\x22\x20\x79\x31\x3d\x22\x31\x32\x30\x2e\x31\ +\x38\x31\x36\x22\x20\x79\x32\x3d\x22\x31\x32\x34\x2e\x33\x36\x34\ +\x36\x22\x3e\x0d\x0a\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\ +\x74\x3d\x22\x30\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3d\x22\x23\x64\x62\x64\x62\x64\x62\x22\x2f\x3e\x0d\x0a\x3c\x73\ +\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x2e\x36\x30\x38\ +\x37\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\x22\x23\ +\x66\x34\x66\x34\x66\x34\x22\x2f\x3e\x0d\x0a\x3c\x73\x74\x6f\x70\ +\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x20\x73\x74\x6f\x70\ +\x2d\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x22\x2f\x3e\x0d\ +\x0a\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x3e\x0d\x0a\x3c\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\ +\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x22\x3e\x0d\ +\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x32\x32\x2e\x31\x31\ +\x36\x20\x33\x32\x2e\x31\x30\x32\x6c\x33\x2e\x37\x30\x38\x2d\x34\ +\x2e\x36\x35\x39\x68\x31\x34\x2e\x38\x34\x33\x76\x39\x2e\x33\x31\ +\x36\x68\x2d\x31\x34\x2e\x38\x34\x33\x7a\x22\x20\x66\x69\x6c\x6c\ +\x3d\x22\x75\x72\x6c\x28\x23\x61\x29\x22\x20\x73\x74\x72\x6f\x6b\ +\x65\x3d\x22\x23\x38\x30\x38\x30\x38\x30\x22\x20\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\x6f\x75\x6e\ +\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\ +\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x2f\x3e\x0d\x0a\x3c\x70\ +\x61\x74\x68\x20\x64\x3d\x22\x6d\x32\x39\x2e\x38\x35\x36\x20\x33\ +\x34\x2e\x36\x36\x32\x76\x2e\x31\x34\x32\x68\x2d\x31\x2e\x32\x37\ +\x63\x2d\x2e\x30\x38\x38\x2d\x2e\x31\x33\x34\x2d\x2e\x31\x33\x34\ +\x2d\x2e\x32\x38\x36\x2d\x2e\x31\x33\x34\x2d\x2e\x34\x35\x35\x2d\ +\x2e\x34\x31\x33\x2e\x34\x33\x31\x2d\x2e\x38\x36\x38\x2e\x36\x34\ +\x36\x2d\x31\x2e\x33\x37\x31\x2e\x36\x34\x36\x2d\x2e\x34\x33\x34\ +\x20\x30\x2d\x2e\x37\x38\x39\x2d\x2e\x31\x34\x32\x2d\x31\x2e\x30\ +\x36\x31\x2d\x2e\x34\x32\x35\x2d\x2e\x32\x31\x33\x2d\x2e\x32\x32\ +\x39\x2d\x2e\x33\x31\x37\x2d\x2e\x35\x33\x39\x2d\x2e\x33\x31\x37\ +\x2d\x2e\x39\x33\x35\x20\x30\x2d\x2e\x38\x30\x36\x2e\x34\x34\x32\ +\x2d\x31\x2e\x32\x38\x20\x31\x2e\x33\x33\x36\x2d\x31\x2e\x34\x33\ +\x35\x6c\x2e\x34\x37\x2d\x2e\x30\x38\x34\x63\x2e\x33\x37\x37\x2d\ +\x2e\x30\x36\x2e\x36\x30\x38\x2d\x2e\x31\x31\x2e\x36\x39\x31\x2d\ +\x2e\x31\x35\x2e\x30\x30\x36\x2d\x2e\x30\x30\x35\x2e\x30\x32\x2d\ +\x2e\x30\x31\x33\x2e\x30\x34\x32\x2d\x2e\x30\x32\x34\x2e\x31\x33\ +\x33\x2d\x2e\x30\x37\x33\x2e\x32\x2d\x2e\x31\x39\x31\x2e\x32\x2d\ +\x2e\x33\x35\x32\x20\x30\x2d\x2e\x33\x30\x34\x2d\x2e\x32\x32\x37\ +\x2d\x2e\x34\x35\x34\x2d\x2e\x36\x37\x37\x2d\x2e\x34\x35\x34\x2d\ +\x2e\x33\x37\x38\x20\x30\x2d\x2e\x36\x32\x2e\x30\x38\x39\x2d\x2e\ +\x37\x33\x2e\x32\x36\x39\x6c\x2d\x2e\x30\x37\x35\x2e\x32\x30\x32\ +\x2d\x2e\x30\x32\x34\x2e\x31\x35\x31\x68\x2d\x31\x2e\x31\x33\x36\ +\x63\x2e\x30\x37\x33\x2d\x31\x2e\x30\x34\x36\x2e\x37\x31\x39\x2d\ +\x31\x2e\x35\x37\x31\x20\x31\x2e\x39\x33\x38\x2d\x31\x2e\x35\x37\ +\x31\x20\x31\x2e\x32\x33\x32\x20\x30\x20\x31\x2e\x38\x34\x38\x2e\ +\x34\x36\x34\x20\x31\x2e\x38\x34\x38\x20\x31\x2e\x33\x39\x34\x76\ +\x32\x2e\x35\x32\x37\x63\x30\x20\x2e\x31\x38\x39\x2e\x30\x37\x32\ +\x2e\x33\x35\x37\x2e\x32\x31\x38\x2e\x35\x30\x34\x2e\x30\x32\x31\ +\x2e\x30\x31\x37\x2e\x30\x33\x38\x2e\x30\x33\x34\x2e\x30\x35\x32\ +\x2e\x30\x35\x7a\x6d\x2d\x31\x2e\x34\x31\x2d\x31\x2e\x36\x38\x33\ +\x76\x2d\x2e\x33\x32\x31\x63\x2d\x2e\x31\x30\x38\x2e\x30\x35\x2d\ +\x2e\x32\x37\x32\x2e\x31\x30\x32\x2d\x2e\x34\x39\x34\x2e\x31\x34\ +\x35\x6c\x2d\x2e\x34\x30\x32\x2e\x30\x37\x36\x63\x2d\x2e\x33\x36\ +\x39\x2e\x30\x37\x36\x2d\x2e\x35\x38\x35\x2e\x32\x31\x39\x2d\x2e\ +\x36\x34\x36\x2e\x34\x32\x32\x6c\x2d\x2e\x30\x32\x34\x2e\x32\x30\ +\x32\x63\x30\x20\x2e\x32\x37\x33\x2e\x31\x33\x38\x2e\x34\x34\x37\ +\x2e\x34\x31\x33\x2e\x35\x32\x2e\x30\x36\x37\x2e\x30\x32\x31\x2e\ +\x31\x34\x33\x2e\x30\x32\x34\x2e\x32\x32\x37\x2e\x30\x32\x34\x2e\ +\x34\x38\x34\x20\x30\x20\x2e\x37\x37\x37\x2d\x2e\x32\x33\x2e\x38\ +\x38\x33\x2d\x2e\x36\x39\x36\x2e\x30\x32\x38\x2d\x2e\x31\x31\x34\ +\x2e\x30\x34\x33\x2d\x2e\x32\x33\x35\x2e\x30\x34\x33\x2d\x2e\x33\ +\x37\x32\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x32\x65\x33\x34\ +\x33\x36\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\ +\x6d\x33\x30\x2e\x34\x36\x39\x20\x32\x38\x2e\x36\x37\x35\x68\x31\ +\x2e\x31\x36\x39\x76\x32\x2e\x31\x37\x36\x63\x2e\x32\x37\x38\x2d\ +\x2e\x34\x34\x32\x2e\x36\x39\x34\x2d\x2e\x36\x36\x34\x20\x31\x2e\ +\x32\x34\x32\x2d\x2e\x36\x36\x34\x2e\x34\x37\x31\x20\x30\x20\x2e\ +\x38\x37\x39\x2e\x31\x36\x37\x20\x31\x2e\x32\x31\x38\x2e\x35\x30\ +\x34\x2e\x30\x37\x34\x2e\x30\x37\x33\x2e\x31\x34\x2e\x31\x34\x39\ +\x2e\x31\x39\x34\x2e\x32\x32\x37\x2e\x33\x32\x32\x2e\x34\x37\x31\ +\x2e\x34\x38\x36\x20\x31\x2e\x30\x32\x38\x2e\x34\x38\x36\x20\x31\ +\x2e\x36\x37\x33\x20\x30\x20\x2e\x37\x37\x31\x2d\x2e\x32\x32\x32\ +\x20\x31\x2e\x33\x39\x31\x2d\x2e\x36\x36\x20\x31\x2e\x38\x36\x31\ +\x2d\x2e\x33\x35\x32\x2e\x33\x36\x33\x2d\x2e\x37\x36\x34\x2e\x35\ +\x34\x37\x2d\x31\x2e\x32\x33\x38\x2e\x35\x34\x37\x2d\x2e\x35\x34\ +\x37\x20\x30\x2d\x2e\x39\x36\x32\x2d\x2e\x32\x32\x2d\x31\x2e\x32\ +\x34\x32\x2d\x2e\x36\x35\x35\x76\x2e\x34\x36\x31\x68\x2d\x31\x2e\ +\x31\x36\x39\x7a\x6d\x32\x2e\x31\x35\x31\x20\x32\x2e\x34\x39\x34\ +\x63\x2d\x2e\x33\x36\x33\x20\x30\x2d\x2e\x36\x34\x2e\x31\x39\x39\ +\x2d\x2e\x38\x32\x34\x2e\x35\x39\x37\x6c\x2d\x2e\x31\x2e\x32\x39\ +\x35\x63\x2d\x2e\x30\x34\x2e\x31\x36\x32\x2d\x2e\x30\x35\x39\x2e\ +\x33\x33\x34\x2d\x2e\x30\x35\x39\x2e\x35\x31\x34\x20\x30\x20\x2e\ +\x36\x31\x35\x2e\x31\x36\x37\x20\x31\x2e\x30\x34\x31\x2e\x35\x30\ +\x33\x20\x31\x2e\x32\x37\x39\x2e\x31\x33\x39\x2e\x31\x31\x2e\x32\ +\x39\x38\x2e\x31\x36\x2e\x34\x38\x2e\x31\x36\x2e\x33\x35\x37\x20\ +\x30\x20\x2e\x36\x33\x33\x2d\x2e\x31\x39\x2e\x38\x31\x39\x2d\x2e\ +\x35\x37\x38\x2e\x31\x31\x31\x2d\x2e\x32\x34\x32\x2e\x31\x36\x37\ +\x2d\x2e\x35\x32\x31\x2e\x31\x36\x37\x2d\x2e\x38\x33\x35\x20\x30\ +\x2d\x2e\x35\x37\x35\x2d\x2e\x31\x35\x37\x2d\x2e\x39\x38\x38\x2d\ +\x2e\x34\x37\x2d\x31\x2e\x32\x34\x37\x2d\x2e\x31\x35\x35\x2d\x2e\ +\x31\x32\x34\x2d\x2e\x33\x32\x37\x2d\x2e\x31\x38\x35\x2d\x2e\x35\ +\x31\x36\x2d\x2e\x31\x38\x35\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\ +\x23\x32\x65\x33\x34\x33\x36\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\ +\x68\x20\x64\x3d\x22\x6d\x33\x39\x2e\x34\x33\x35\x20\x33\x31\x2e\ +\x39\x36\x68\x2d\x31\x2e\x31\x31\x39\x63\x2d\x2e\x30\x39\x33\x2d\ +\x2e\x34\x33\x32\x2d\x2e\x32\x36\x35\x2d\x2e\x36\x39\x2d\x2e\x35\ +\x31\x2d\x2e\x37\x37\x33\x6c\x2d\x2e\x32\x33\x31\x2d\x2e\x30\x35\ +\x31\x63\x2d\x2e\x30\x32\x37\x20\x30\x2d\x2e\x30\x35\x37\x20\x30\ +\x2d\x2e\x30\x39\x33\x20\x30\x2d\x2e\x33\x34\x33\x20\x30\x2d\x2e\ +\x35\x38\x34\x2e\x31\x32\x38\x2d\x2e\x37\x32\x36\x2e\x33\x38\x36\ +\x2d\x2e\x31\x34\x38\x2e\x32\x38\x35\x2d\x2e\x32\x32\x35\x2e\x36\ +\x35\x32\x2d\x2e\x32\x32\x35\x20\x31\x2e\x31\x30\x34\x20\x30\x20\ +\x2e\x36\x38\x37\x2e\x31\x38\x35\x20\x31\x2e\x31\x32\x37\x2e\x35\ +\x35\x33\x20\x31\x2e\x33\x32\x32\x2e\x31\x32\x34\x2e\x30\x36\x35\ +\x2e\x32\x35\x34\x2e\x31\x30\x31\x2e\x33\x39\x39\x2e\x31\x30\x31\ +\x2e\x33\x33\x34\x20\x30\x20\x2e\x35\x37\x31\x2d\x2e\x31\x35\x32\ +\x2e\x37\x31\x34\x2d\x2e\x34\x36\x34\x2e\x30\x34\x38\x2d\x2e\x30\ +\x39\x39\x2e\x30\x38\x34\x2d\x2e\x32\x31\x39\x2e\x31\x31\x38\x2d\ +\x2e\x33\x35\x32\x68\x31\x2e\x31\x31\x39\x63\x2d\x2e\x30\x37\x33\ +\x2e\x36\x39\x34\x2d\x2e\x33\x37\x34\x20\x31\x2e\x31\x39\x36\x2d\ +\x2e\x39\x31\x20\x31\x2e\x35\x30\x36\x2d\x2e\x33\x30\x37\x2e\x31\ +\x37\x34\x2d\x2e\x36\x35\x36\x2e\x32\x35\x39\x2d\x31\x2e\x30\x34\ +\x39\x2e\x32\x35\x39\x2d\x2e\x38\x37\x39\x20\x30\x2d\x31\x2e\x34\ +\x39\x34\x2d\x2e\x33\x34\x36\x2d\x31\x2e\x38\x33\x38\x2d\x31\x2e\ +\x30\x34\x33\x2d\x2e\x31\x38\x36\x2d\x2e\x33\x37\x2d\x2e\x32\x37\ +\x37\x2d\x2e\x38\x31\x31\x2d\x2e\x32\x37\x37\x2d\x31\x2e\x33\x33\ +\x33\x20\x30\x2d\x31\x2e\x30\x34\x36\x2e\x33\x33\x33\x2d\x31\x2e\ +\x37\x36\x36\x2e\x39\x39\x35\x2d\x32\x2e\x31\x35\x39\x2e\x33\x31\ +\x39\x2d\x2e\x31\x38\x34\x2e\x36\x39\x36\x2d\x2e\x32\x37\x38\x20\ +\x31\x2e\x31\x33\x35\x2d\x2e\x32\x37\x38\x2e\x37\x36\x38\x20\x30\ +\x20\x31\x2e\x33\x32\x32\x2e\x32\x37\x34\x20\x31\x2e\x36\x36\x31\ +\x2e\x38\x32\x35\x2e\x31\x30\x37\x2e\x31\x38\x35\x2e\x31\x38\x35\ +\x2e\x33\x38\x39\x2e\x32\x33\x34\x2e\x36\x31\x32\x2e\x30\x32\x34\ +\x2e\x31\x30\x38\x2e\x30\x34\x2e\x32\x31\x39\x2e\x30\x35\x2e\x33\ +\x33\x38\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x32\x65\x33\x34\ +\x33\x36\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\ +\x76\x67\x3e\x0d\x0a\ +\x00\x00\x01\xc4\ +\x3c\ +\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\x22\x20\ +\x77\x69\x64\x74\x68\x3d\x22\x36\x34\x22\x20\x78\x6d\x6c\x6e\x73\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\ +\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x0d\x0a\ +\x3c\x74\x65\x78\x74\x20\x6c\x69\x6e\x65\x2d\x68\x65\x69\x67\x68\ +\x74\x3d\x22\x31\x30\x30\x25\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x62\x6f\x6c\x64\ +\x3b\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x33\x36\x2e\x35\x39\ +\x34\x31\x32\x33\x38\x34\x3b\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\ +\x6c\x79\x3a\x44\x65\x6a\x61\x56\x75\x20\x53\x61\x6e\x73\x20\x4d\ +\x6f\x6e\x6f\x3b\x6c\x65\x74\x74\x65\x72\x2d\x73\x70\x61\x63\x69\ +\x6e\x67\x3a\x30\x3b\x77\x6f\x72\x64\x2d\x73\x70\x61\x63\x69\x6e\ +\x67\x3a\x30\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x2e\x36\ +\x37\x36\x38\x37\x35\x31\x31\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\ +\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x30\x20\ +\x33\x32\x29\x22\x20\x78\x3d\x22\x2d\x2e\x33\x33\x32\x35\x35\x32\ +\x34\x36\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\ +\x72\x65\x73\x65\x72\x76\x65\x22\x20\x79\x3d\x22\x31\x33\x2e\x36\ +\x34\x32\x33\x38\x39\x22\x3e\x3c\x74\x73\x70\x61\x6e\x20\x66\x6f\ +\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3d\x22\x44\x65\x6a\x61\x56\ +\x75\x20\x53\x61\x6e\x73\x20\x4d\x6f\x6e\x6f\x22\x20\x66\x6f\x6e\ +\x74\x2d\x77\x65\x69\x67\x68\x74\x3d\x22\x62\x6f\x6c\x64\x22\x20\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x2e\ +\x36\x37\x36\x38\x37\x35\x31\x31\x22\x20\x78\x3d\x22\x2d\x2e\x33\ +\x33\x32\x35\x35\x32\x34\x36\x22\x20\x79\x3d\x22\x31\x33\x2e\x36\ +\x34\x32\x33\x38\x39\x22\x3e\x61\x62\x63\x3c\x2f\x74\x73\x70\x61\ +\x6e\x3e\x3c\x2f\x74\x65\x78\x74\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\ +\x3e\x0d\x0a\ +\x00\x00\x01\x44\ +\x3c\ +\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\x22\x20\ +\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\x20\x78\x6d\x6c\x6e\x73\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\ +\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x3c\x70\ +\x61\x74\x68\x20\x64\x3d\x22\x6d\x30\x20\x37\x68\x39\x76\x39\x22\ +\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x30\x30\x30\x22\x20\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\ +\x72\x6f\x75\x6e\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3d\x22\x31\x30\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ +\x64\x3d\x22\x6d\x30\x20\x37\x68\x39\x76\x39\x22\x20\x66\x69\x6c\ +\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\ +\x22\x23\x36\x33\x38\x39\x62\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\ +\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\ +\x38\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x30\x20\ +\x37\x68\x39\x76\x39\x22\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\ +\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x64\x33\x63\x30\ +\x32\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\ +\x72\x72\x61\x79\x3d\x22\x32\x20\x32\x22\x20\x73\x74\x72\x6f\x6b\ +\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x2f\x3e\x3c\x2f\x73\ +\x76\x67\x3e\ \x00\x00\x14\x96\ \x3c\ \x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x20\ @@ -1031,6 +826,340 @@ \x32\x32\x32\x32\x34\x22\x20\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3d\ \x22\x76\x69\x73\x69\x62\x6c\x65\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\ \x76\x67\x3e\x0d\x0a\ +\x00\x00\x06\x24\ +\x00\ +\x00\x16\x4c\x78\x9c\xed\x58\x4b\x6f\xdb\x46\x10\xbe\xe7\x57\x2c\ +\xe8\x63\xc5\xe5\x3e\xf9\x50\x2c\x07\x4d\x8c\x02\x2d\xda\x4b\x9b\ +\xa2\x40\x2f\x02\x4d\xae\x24\xc6\x24\x57\x58\xae\x2c\x4b\xbf\xbe\ +\xb3\x7c\x4a\xb6\xdc\x04\x41\xd0\xe6\x60\xda\x12\xc5\x99\x6f\x66\ +\x77\xe6\x1b\x2e\x77\x78\xfd\xee\xb1\x2a\xd1\x83\x32\x4d\xa1\xeb\ +\x85\x47\x31\xf1\x90\xaa\x33\x9d\x17\xf5\x7a\xe1\xfd\xf9\xf1\x27\ +\x3f\xf6\x50\x63\xd3\x3a\x4f\x4b\x5d\xab\x85\x57\x6b\xef\xdd\xcd\ +\x9b\xeb\xe6\x61\xfd\x06\x21\x04\xc6\x75\x33\xcf\xb3\x85\xb7\xb1\ +\x76\x3b\x0f\x82\xed\xce\x94\x58\x9b\x75\x90\x67\x81\x2a\x55\xa5\ +\x6a\xdb\x04\x14\xd3\xc0\x9b\xe0\xd9\x04\xcf\x8c\x4a\x6d\xf1\xa0\ +\x32\x5d\x55\xba\x6e\x5a\xcb\xba\xb9\x3a\x01\x9b\x7c\x35\xa2\xf7\ +\xfb\x3d\xde\xf3\x16\x44\x93\x24\x09\x08\x0b\x18\xf3\x01\xe1\x37\ +\x87\xda\xa6\x8f\xfe\xb9\x29\xcc\xf1\x92\x29\x23\x84\x04\xa0\x9b\ +\x90\x5f\x86\x9a\x37\x90\x95\x2d\x7c\x46\xf8\x20\xc0\x8d\xde\x99\ +\x4c\xad\xc0\x4e\xe1\x5a\xd9\xe0\xf6\xe3\xed\xa8\xf4\x09\xce\x6d\ +\x7e\xe2\xa6\xa8\xef\x9b\x2c\xdd\xaa\xb3\x51\x07\x61\x97\x81\xb4\ +\x52\xcd\x36\xcd\x54\x13\x0c\xf2\xd6\xfe\x84\x26\xda\x0a\x8a\x7c\ +\xe1\xc1\x1c\xb9\x10\x71\x07\x28\xd4\xfe\xbd\x7e\x5c\x78\x04\x11\ +\xc4\x24\xfc\xb7\xe2\x8d\x2a\xd6\x1b\xbb\xf0\xfa\xcb\x7d\x91\xdb\ +\xcd\x78\x35\x8c\x30\x1f\xbd\x13\x9c\x50\x64\x28\x8f\x7a\xc4\x10\ +\xc9\x3c\xd7\x99\x9b\x1a\x8c\x79\xa8\xee\x74\xa9\xd7\x87\x5b\xbd\ +\xaf\xb1\xcb\xd2\x0d\x00\xaf\x47\xa0\x43\xe5\x6e\x32\xce\x1c\xa1\ +\x6d\xba\x06\x86\x4b\x6d\x16\xde\xd5\xaa\x3d\xbc\x4e\x71\xa7\x4d\ +\xae\xcc\xa0\x0a\xdb\xe3\x4c\xa5\x21\x0b\x85\x3d\x40\xc4\xbd\x58\ +\xdf\x7d\x52\x99\xb5\xba\x54\x26\xad\x33\x98\x0a\x25\xbd\x66\x6d\ +\x20\xac\x4b\xf2\x5d\x91\xab\x4b\x8a\x31\x70\x37\xbd\x71\xa0\x8b\ +\xda\x66\x93\xe6\x7a\x0f\x29\x7b\xaa\xdc\x17\x35\x28\xfc\x3e\xa3\ +\x31\x7d\x09\x30\x30\x10\x45\xf1\x80\x00\xea\xc6\x34\x71\x2e\x86\ +\xb8\x9b\x8d\xde\xbb\x50\x16\xde\x2a\x2d\x1b\xf5\xd4\xdf\x51\xeb\ +\x6a\xe1\x25\x58\x3e\x1b\x29\x03\xda\xa9\xc0\xa1\x90\x21\x0b\x9f\ +\x29\x5d\x0a\x43\x1c\x85\x4c\x26\xe2\x85\x39\x82\x7d\x18\xbd\x14\ +\x80\xb3\x7f\xc9\xb0\x4a\x1f\x8b\xaa\x38\xaa\xfc\x42\xf6\xb2\x9d\ +\x31\xb0\x06\xf8\x65\x7a\x50\x66\x2a\x56\x14\xb4\x05\x93\xab\x55\ +\x33\xa5\xc3\x5d\x71\x21\x49\x5b\x4c\xa0\x3d\xa1\xc0\x6e\x7c\xb5\ +\x5a\x01\xf3\x1d\x1a\xa1\xee\x6a\xe1\x6d\xf5\x1e\xca\xd6\x1a\x7d\ +\x3f\xa4\xaa\xf3\x75\x62\x12\xd3\x48\x4c\xba\x66\xf9\x50\x34\xc5\ +\x5d\x09\x95\x60\xcd\x6e\x32\xd2\xab\x55\xa3\xec\x72\xab\x0b\x58\ +\xb1\x20\x90\x19\xc1\x72\x54\x36\xda\x4c\xaa\x33\x33\x10\x29\xb3\ +\xd5\x65\x6a\xb5\x59\xda\x83\xbb\xab\x3f\xec\xee\x8a\xec\xbd\x3a\ +\x16\xca\xfc\xa2\x37\x69\x7d\x19\x7b\xa7\x6c\xea\x6e\x35\x36\x0d\ +\x62\x53\x18\xa5\x2c\x6a\x05\x41\xf7\xbe\x8e\x70\x0b\xb4\xc5\x35\ +\xa2\x9c\xfe\x13\xcc\xa4\x07\x18\xbd\xab\xf3\x51\x59\x15\x30\x02\ +\xb8\x80\xf3\xc2\x9b\x82\x56\x75\xfe\x59\xbf\xd9\xae\xd9\x3e\x01\ +\x75\xbe\x3b\xaa\xbe\x29\x1d\xe4\x2b\xe8\x60\x98\x87\x4c\x10\x12\ +\x7e\x1d\x29\xbf\x42\x64\xa9\x79\xa5\xe2\x09\x15\x61\xf8\x7a\x67\ +\x7c\x4f\x74\xb0\x57\x3a\xfe\x1b\x3a\x9a\x7b\xd8\x9d\xda\xb4\x7c\ +\x99\x0b\x19\x7f\x9e\x0b\x30\x80\x38\x60\xcb\xf4\x1b\x22\x33\x89\ +\x3e\x20\xb7\x4e\x31\x81\xdc\xd7\x8c\x20\x09\x9f\x08\x1e\xba\x70\ +\xa2\xbd\x86\x3a\x1c\x7c\x39\x71\xa7\xa3\x0e\x07\x5f\xad\x0d\x9c\ +\x7b\x9d\xc3\xfd\x3d\x05\xad\xb7\x87\x2e\xd6\x06\x36\xe6\xa5\x5a\ +\x42\x25\x29\x9b\x6d\xd4\x94\xd2\x2d\x6c\x96\x96\x10\xb7\x9b\x24\ +\x9d\xb8\x72\x82\xe5\x61\x69\x54\x79\xbe\xa3\x00\x95\xdb\xf2\xb8\ +\x5d\xfe\xb4\x1c\xd7\xda\x54\x69\xb9\xec\x4a\xec\x54\x01\x0d\xc0\ +\xfa\x82\xb8\x1d\x73\x57\x17\xae\xda\xce\x9d\xc3\x66\xd2\x16\x30\ +\xf6\x72\x4c\xd1\xb9\x7e\xb5\x6b\xd4\xf2\x64\x57\x46\xbe\x39\x7d\ +\x5f\xf0\xcc\x7f\xa5\xef\x3b\xa5\x2f\xe2\xec\xf5\xee\xfb\xbf\xe9\ +\x83\xc7\xd5\x16\xb8\x80\xee\x7c\x7a\xba\xf4\xfd\x5d\x97\x8c\x73\ +\x28\x9f\x92\x31\xb5\x94\xdb\x65\xdb\x8c\xce\x11\x65\x58\xba\xd3\ +\x45\xcc\xa1\xc7\x40\xcb\x0d\x27\x72\x11\x73\x74\x0d\xeb\xbf\x3a\ +\xea\x67\xe1\x6b\x53\xac\x0b\xd7\x24\x77\xc8\x18\xf3\xee\x38\xb7\ +\x72\x05\x37\x45\x08\x0d\xd8\xd8\x94\x04\xae\x0f\x69\x7f\x55\x50\ +\xa3\x79\x6a\xd3\xa9\x45\x19\x24\xd0\xa6\xf0\xa1\x4d\x31\xf9\x6a\ +\xfe\xfb\xed\x4f\x37\xbd\xeb\xeb\x2c\x9b\xff\xa5\xcd\xfd\x30\x12\ +\x42\x0e\x90\xde\xe9\x1d\x90\xe7\xdd\x8c\xe2\xeb\x3c\x9b\xaf\x1c\ +\xe3\xf6\xa6\xa8\xa0\xc7\x74\x2f\x1b\x7e\x78\xac\x4a\x18\x7f\x54\ +\x9c\x81\x5d\xd2\x27\xa7\x9d\x5b\xa3\xba\x57\x0f\x17\xdf\xbf\xe4\ +\x19\x3c\x5e\xc1\x28\xf8\xc3\x16\x65\xf9\xb3\x1b\x64\xe4\x79\x74\ +\x5a\xd8\x52\xdd\xb4\x63\x76\x3f\x87\x28\x82\x3e\x8c\x3e\xc8\xe0\ +\x24\xca\xeb\x60\x48\x43\x7b\xe5\xee\xdb\xbe\x77\xb5\x07\x57\xff\ +\x2b\x18\x6d\x7e\x45\xda\xe3\xad\xbb\xf0\xcd\xae\x54\x73\xf5\xa0\ +\x6a\x9d\xe7\x6f\xbb\x4d\x90\x03\xc4\x0e\xd0\x5d\x76\x2d\xf4\x9c\ +\x6e\x1f\x07\x41\xff\x88\x9f\xdf\xed\xac\x3d\x95\xb9\x3d\xc5\xbc\ +\xdd\x3f\x0c\xd2\xbe\x77\x9f\x0f\xec\xe6\x6e\x45\x00\xf6\x13\x46\ +\x29\x87\x5b\x3c\xc1\x3c\x8e\x44\x18\x21\x89\x09\x25\x2c\xa2\x21\ +\xdc\xe4\x84\x85\x91\x80\x25\xa1\x44\x54\x62\x1a\x45\x34\x21\x6e\ +\xd1\xf0\x63\x4c\x89\x94\x1c\x16\x03\xe8\x38\xa4\x4c\x92\x30\x44\ +\x47\x54\x21\x9f\x60\x42\x38\x75\xbb\x2d\xc1\xa3\x98\x41\x5d\x85\ +\x14\x7a\x59\x39\xf3\x29\xc7\x94\x13\x26\xa9\x40\x3f\x22\xd0\xb7\ +\x81\xbb\x75\x07\x8b\xa4\x3d\x38\x22\xed\x1f\xa3\x98\x3a\x1b\x31\ +\x0b\x4f\xc6\xf7\x29\xcc\x86\x86\x31\xcc\x0c\x26\xe0\x3c\x74\x66\ +\x71\x34\xeb\x9d\x51\x39\x78\xe0\x38\x8c\xa4\x24\x1c\x1c\x44\x09\ +\xf4\xf9\xe0\xba\x84\x99\x08\xc2\x79\x48\x67\xe3\x44\x22\x74\x3c\ +\x79\xcd\xe0\x08\x82\xae\xeb\x59\x6b\x7f\xb2\xe0\x2e\xbc\xab\xcb\ +\x1d\xf3\x08\xee\xee\xaa\xb4\xf4\x87\xec\x4a\x97\xd8\x50\x86\x49\ +\x22\x90\xc0\x04\xf2\x04\x59\x86\x79\xc9\x29\xb1\x7d\x5c\x21\x87\ +\xb8\x8e\x4f\x1d\x66\xba\x06\x82\x61\x87\xe9\x67\x3b\xf3\x90\xda\ +\x9d\x39\x59\x88\x5e\x2e\xaa\x93\x9a\xb9\x5c\x42\xc4\x11\x48\x04\ +\x23\x6c\x2a\x87\x0a\x41\xc2\x23\x41\x93\x88\x02\xf5\xd0\x47\x0a\ +\x22\x05\xca\x90\xdb\x3c\x83\x1c\xd8\x0c\xb1\x7b\xe1\x97\x44\xc9\ +\x2c\xc1\x91\xa4\xb1\x10\x21\xc8\x60\x55\xa0\x82\x39\x59\x02\x23\ +\x25\x1c\x1e\x0c\xe0\x9d\xf3\x88\xcd\xdc\x8f\x84\xc2\x75\x14\x85\ +\xb1\x88\x66\x50\x1f\xb1\x64\x4c\xc6\xc0\x91\x20\x2c\x01\x88\x2f\ +\x40\x14\x41\x09\x21\x8a\x61\x9e\x91\xe4\x33\x9f\x61\xa8\x44\x11\ +\xc7\x21\xc0\x58\x24\x48\x02\xf5\xe3\xca\xd2\x8d\xf9\x44\x06\x15\ +\xcb\x99\x7b\x14\xb9\xd2\x63\x50\xcc\x08\xac\x13\x4e\x42\xe7\x1a\ +\x44\x92\x53\x86\x7c\x48\x38\x65\x21\x91\x27\x22\x8e\x65\x4c\x13\ +\xb0\x75\xf5\xdc\xeb\x45\xe2\x42\x65\xcc\x79\x39\x13\x89\x84\xcb\ +\x4b\xd5\xf2\xfc\x15\xd2\xcb\x7c\x5d\xbb\xb5\xeb\xe6\xcd\x3f\xad\ +\xca\x4f\x3b\ +\x00\x00\x08\xb0\ +\x3c\ +\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x20\ +\x77\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x20\x78\x6d\x6c\x6e\x73\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\ +\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\ +\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\ +\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\ +\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x3e\x0d\x0a\x3c\x66\x69\x6c\x74\ +\x65\x72\x20\x69\x64\x3d\x22\x61\x22\x20\x68\x65\x69\x67\x68\x74\ +\x3d\x22\x31\x2e\x35\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x2e\ +\x35\x22\x20\x78\x3d\x22\x2d\x2e\x32\x35\x22\x20\x79\x3d\x22\x2d\ +\x2e\x32\x35\x22\x3e\x0d\x0a\x3c\x66\x65\x47\x61\x75\x73\x73\x69\ +\x61\x6e\x42\x6c\x75\x72\x20\x69\x6e\x3d\x22\x53\x6f\x75\x72\x63\ +\x65\x41\x6c\x70\x68\x61\x22\x20\x72\x65\x73\x75\x6c\x74\x3d\x22\ +\x62\x6c\x75\x72\x22\x20\x73\x74\x64\x44\x65\x76\x69\x61\x74\x69\ +\x6f\x6e\x3d\x22\x32\x22\x2f\x3e\x0d\x0a\x3c\x66\x65\x43\x6f\x6c\ +\x6f\x72\x4d\x61\x74\x72\x69\x78\x20\x72\x65\x73\x75\x6c\x74\x3d\ +\x22\x62\x6c\x75\x72\x61\x6c\x70\x68\x61\x22\x20\x74\x79\x70\x65\ +\x3d\x22\x6d\x61\x74\x72\x69\x78\x22\x20\x76\x61\x6c\x75\x65\x73\ +\x3d\x22\x31\x20\x30\x20\x30\x20\x30\x20\x30\x20\x30\x20\x31\x20\ +\x30\x20\x30\x20\x30\x20\x30\x20\x30\x20\x31\x20\x30\x20\x30\x20\ +\x30\x20\x30\x20\x30\x20\x30\x2e\x33\x35\x31\x30\x30\x30\x20\x30\ +\x22\x2f\x3e\x0d\x0a\x3c\x66\x65\x4f\x66\x66\x73\x65\x74\x20\x64\ +\x78\x3d\x22\x37\x2e\x35\x22\x20\x64\x79\x3d\x22\x37\x2e\x35\x22\ +\x20\x69\x6e\x3d\x22\x62\x6c\x75\x72\x61\x6c\x70\x68\x61\x22\x20\ +\x72\x65\x73\x75\x6c\x74\x3d\x22\x6f\x66\x66\x73\x65\x74\x42\x6c\ +\x75\x72\x22\x2f\x3e\x0d\x0a\x3c\x66\x65\x4d\x65\x72\x67\x65\x3e\ +\x0d\x0a\x3c\x66\x65\x4d\x65\x72\x67\x65\x4e\x6f\x64\x65\x20\x69\ +\x6e\x3d\x22\x6f\x66\x66\x73\x65\x74\x42\x6c\x75\x72\x22\x2f\x3e\ +\x0d\x0a\x3c\x66\x65\x4d\x65\x72\x67\x65\x4e\x6f\x64\x65\x20\x69\ +\x6e\x3d\x22\x53\x6f\x75\x72\x63\x65\x47\x72\x61\x70\x68\x69\x63\ +\x22\x2f\x3e\x0d\x0a\x3c\x2f\x66\x65\x4d\x65\x72\x67\x65\x3e\x0d\ +\x0a\x3c\x2f\x66\x69\x6c\x74\x65\x72\x3e\x0d\x0a\x3c\x67\x20\x74\ +\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\ +\x61\x74\x65\x28\x30\x20\x2d\x38\x29\x22\x3e\x0d\x0a\x3c\x72\x65\ +\x63\x74\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x30\x2e\x35\x22\ +\x20\x72\x78\x3d\x22\x31\x2e\x38\x38\x39\x31\x31\x39\x22\x20\x72\ +\x79\x3d\x22\x31\x2e\x35\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x23\x36\x64\x39\x37\x63\x34\x3b\x66\x69\x6c\x6c\ +\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x3a\x23\x34\x31\x35\x61\x37\x35\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x2e\x38\x30\x30\x30\x30\ +\x30\x30\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\ +\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x6f\ +\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x22\ +\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x39\x2e\x32\x30\x30\x30\x30\ +\x31\x22\x20\x78\x3d\x22\x32\x2e\x34\x30\x30\x30\x30\x30\x31\x22\ +\x20\x79\x3d\x22\x38\x2e\x33\x39\x39\x39\x39\x39\x36\x22\x2f\x3e\ +\x0d\x0a\x3c\x72\x65\x63\x74\x20\x68\x65\x69\x67\x68\x74\x3d\x22\ +\x39\x22\x20\x72\x78\x3d\x22\x2e\x35\x22\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x64\x65\x64\x3b\x66\ +\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\ +\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x36\x36\x36\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x2e\x35\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\ +\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\ +\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\ +\x3a\x76\x69\x73\x69\x62\x6c\x65\x22\x20\x77\x69\x64\x74\x68\x3d\ +\x22\x31\x34\x22\x20\x78\x3d\x22\x35\x22\x20\x79\x3d\x22\x39\x22\ +\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x37\x20\ +\x31\x31\x2e\x35\x68\x31\x30\x22\x20\x66\x69\x6c\x6c\x3d\x22\x6e\ +\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x36\x36\ +\x36\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\ +\x70\x3d\x22\x72\x6f\x75\x6e\x64\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\ +\x74\x68\x20\x64\x3d\x22\x6d\x36\x2e\x30\x31\x30\x37\x38\x39\x39\ +\x20\x32\x31\x2e\x35\x31\x36\x38\x34\x68\x31\x31\x2e\x39\x38\x39\ +\x32\x31\x76\x36\x2e\x39\x38\x33\x31\x36\x68\x2d\x31\x31\x2e\x39\ +\x38\x39\x32\x31\x7a\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ +\x6c\x6c\x3a\x23\x65\x64\x65\x64\x65\x64\x3b\x66\x69\x6c\x6c\x2d\ +\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\ +\x6f\x6b\x65\x3a\x23\x36\x36\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x77\x69\x64\x74\x68\x3a\x2e\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\ +\x75\x6e\x64\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\ +\x69\x62\x6c\x65\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\ +\x3d\x22\x6d\x37\x2e\x30\x30\x38\x39\x39\x31\x37\x20\x32\x32\x2e\ +\x34\x31\x30\x33\x30\x33\x68\x33\x2e\x39\x39\x32\x38\x30\x36\x37\ +\x76\x34\x2e\x39\x36\x38\x36\x38\x36\x31\x68\x2d\x33\x2e\x39\x39\ +\x32\x38\x30\x36\x37\x7a\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x23\x34\x31\x35\x61\x37\x35\x3b\x66\x69\x6c\x6c\ +\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x3a\x23\x65\x36\x65\x36\x65\x36\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x2e\x39\x39\x35\x39\x36\ +\x36\x39\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\ +\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x6f\ +\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x22\ +\x2f\x3e\x0d\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\ +\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x2e\x37\x36\x39\x32\x33\x30\ +\x37\x37\x20\x30\x20\x30\x20\x2e\x37\x36\x39\x32\x33\x30\x37\x37\ +\x20\x2d\x2e\x36\x31\x35\x33\x38\x34\x36\x34\x20\x37\x2e\x33\x38\ +\x34\x36\x31\x35\x34\x29\x22\x3e\x0d\x0a\x3c\x72\x65\x63\x74\x20\ +\x66\x69\x6c\x6c\x3d\x22\x23\x35\x61\x38\x63\x35\x61\x22\x20\x68\ +\x65\x69\x67\x68\x74\x3d\x22\x31\x33\x22\x20\x72\x78\x3d\x22\x32\ +\x2e\x36\x31\x34\x39\x33\x37\x31\x22\x20\x72\x79\x3d\x22\x32\x2e\ +\x36\x31\x34\x39\x33\x36\x38\x22\x20\x77\x69\x64\x74\x68\x3d\x22\ +\x31\x33\x22\x20\x78\x3d\x22\x31\x39\x22\x20\x79\x3d\x22\x31\x39\ +\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x32\ +\x30\x2e\x32\x39\x39\x39\x39\x38\x20\x32\x35\x2e\x34\x39\x39\x39\ +\x39\x39\x68\x31\x30\x2e\x34\x63\x30\x20\x30\x20\x30\x20\x30\x20\ +\x30\x2d\x32\x2e\x36\x20\x30\x2d\x32\x2e\x35\x39\x39\x39\x39\x39\ +\x2d\x2e\x36\x35\x2d\x32\x2e\x35\x39\x39\x39\x39\x39\x2d\x35\x2e\ +\x32\x2d\x32\x2e\x35\x39\x39\x39\x39\x39\x2d\x34\x2e\x35\x35\x20\ +\x30\x2d\x35\x2e\x32\x20\x30\x2d\x35\x2e\x32\x20\x32\x2e\x35\x39\ +\x39\x39\x39\x39\x20\x30\x20\x32\x2e\x36\x20\x30\x20\x32\x2e\x36\ +\x20\x30\x20\x32\x2e\x36\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\ +\x66\x63\x66\x66\x66\x66\x22\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\ +\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x6f\x70\x61\x63\ +\x69\x74\x79\x3d\x22\x2e\x33\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\ +\x68\x20\x64\x3d\x22\x6d\x32\x32\x2e\x39\x33\x35\x37\x32\x34\x20\ +\x32\x38\x2e\x30\x36\x34\x32\x37\x35\x6c\x35\x2e\x31\x32\x38\x35\ +\x35\x31\x2d\x35\x2e\x31\x32\x38\x35\x35\x31\x22\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\x66\x3b\x66\x69\ +\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\ +\x73\x74\x72\x6f\x6b\x65\x3a\x23\x66\x66\x66\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x2e\x38\x37\x31\x34\x34\ +\x38\x35\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\ +\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x6f\ +\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x22\ +\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\x20\x66\x69\x6c\ +\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x66\x69\x6c\x74\x65\x72\x3d\ +\x22\x75\x72\x6c\x28\x23\x61\x29\x22\x20\x73\x74\x72\x6f\x6b\x65\ +\x3d\x22\x23\x34\x31\x35\x61\x37\x35\x22\x20\x74\x72\x61\x6e\x73\ +\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x2e\x30\x35\ +\x33\x33\x36\x39\x36\x36\x20\x30\x20\x30\x20\x2e\x30\x35\x33\x33\ +\x36\x39\x36\x36\x20\x2d\x36\x38\x2e\x30\x33\x33\x36\x38\x34\x20\ +\x34\x32\x2e\x31\x30\x35\x30\x34\x38\x29\x22\x2f\x3e\x0d\x0a\x3c\ +\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x37\x20\x31\x33\x2e\x35\x68\ +\x31\x30\x22\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\ +\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x36\x36\x36\x22\x20\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\x6f\ +\x75\x6e\x64\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\ +\x22\x6d\x37\x20\x31\x35\x2e\x35\x68\x31\x30\x22\x20\x66\x69\x6c\ +\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\ +\x22\x23\x36\x36\x36\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x63\x61\x70\x3d\x22\x72\x6f\x75\x6e\x64\x22\x2f\x3e\x0d\ +\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\ +\x00\x00\x04\x58\ +\x00\ +\x00\x0e\xd0\x78\x9c\xa5\x97\xdb\x72\xe2\x46\x10\x86\xef\x53\x95\ +\x77\x98\x92\x6f\xec\x0b\x0d\xd3\xdd\x73\xdc\x5a\x72\x9b\xcb\x5c\ +\x24\xfb\x00\x02\x4b\x40\x2d\x06\x17\x90\xd8\x9b\xa7\xcf\x3f\x83\ +\x6c\x0e\xb6\x41\xce\x5a\x55\xb6\x9a\x91\xd5\x7f\x7f\xd3\x87\xe1\ +\xeb\xf6\x9f\x99\x9a\xb7\x8b\xd9\x7c\x37\xae\xc8\x57\xea\x69\x71\ +\xbf\x9b\xef\x6f\x9f\x1f\x96\xab\xed\xb8\x9a\xef\x76\x8f\x5f\x46\ +\xa3\xa7\xa7\x27\xfd\x24\x7a\xbd\x99\x8d\xd8\x18\x33\xc2\x3f\xf6\ +\x8f\x7c\x79\x5e\x2e\x56\xdf\xdf\x7b\x90\x52\x4a\xa3\xb2\x5a\xfd\ +\xf6\xeb\x2f\x5f\x71\xd3\x36\x9b\xdf\x37\xcd\xfd\xa2\x5d\xed\xd4\ +\xe2\x7e\x5c\x35\x95\x9a\xf5\xf6\x5f\x9b\x66\xb5\xed\xd6\x9b\x87\ +\x71\xf5\xd0\xec\x36\x8b\xe7\x5b\xa3\x6a\x6d\x42\x4c\xe4\x8d\xcd\ +\xb7\x8e\x48\x4c\x14\x65\x94\x0d\x56\x1b\x11\x8a\xca\xd9\xa4\xad\ +\x31\x29\xdd\x1d\xde\xf4\x6d\xb5\xd8\x41\xf8\xdf\xdb\x76\xf3\xe7\ +\x63\x33\x6d\xff\x58\x7d\xdb\xb6\x10\x4b\xe3\xaa\x0e\x4e\xb3\xf7\ +\x64\x72\x7c\x3c\xae\x9c\x4e\x29\xc6\xc4\xb1\x52\x3f\xf2\xb2\x13\ +\x4d\x62\xa3\xc9\x36\x96\x6b\x18\x5a\xf0\x08\x95\x00\xb6\xbb\xf5\ +\xa3\x5a\x77\xdd\xb6\x05\x2d\x53\xa9\x6c\xd7\xd3\xf5\x72\xbd\x19\ +\x57\x37\x9d\xe9\xaa\xd1\x9b\xa7\xe8\xcd\x53\x66\xff\xd4\xe8\x94\ +\xc6\x07\x7c\x26\x3f\xc7\x27\x14\x3e\xc9\x78\xe3\x07\xf2\x39\x02\ +\x92\xf9\x1c\xe1\x2a\x7c\x0e\x3c\xf6\x7c\x0e\xbc\x06\xf0\x31\x43\ +\xf8\x74\x9f\xe2\x33\xbd\xc4\x47\x1b\x23\x41\x10\xce\x9e\x53\xe4\ +\x20\x61\xcf\xc9\x04\x91\xf2\xa9\x61\xcb\x42\x5c\x80\x25\xb2\x49\ +\x0a\x30\xe7\x23\xc9\x30\x60\x67\xbc\xea\x33\x60\x67\xbc\x3e\x81\ +\xcb\x74\x43\xd2\xc9\xbc\x24\xdd\x30\x5c\xf7\x97\x70\x65\x1c\xe4\ +\x9d\x04\xca\x64\x84\x84\x39\x66\x5e\xc4\xd1\x7a\x06\x1a\xac\xfb\ +\x10\x99\x53\xc1\xc5\xc9\xa4\x42\x8b\x9c\xf7\x76\x60\x7a\x31\x79\ +\x2d\xec\x44\x7a\x5c\x47\x76\xc6\xc5\x51\xbb\x80\xb2\x0e\x7d\x7a\ +\x1d\xec\xeb\xbc\x06\x96\xdf\xa7\x78\xb5\xff\xbf\xfc\xa2\x93\xc4\ +\x85\x0f\x90\x3a\x1e\xc6\xe7\xac\x3b\xd5\x67\xed\xe9\xac\x3b\x7d\ +\xa2\x39\x99\x6e\x48\xf1\xbd\xe6\xdc\x30\x3a\xdd\x95\xe2\xa3\x68\ +\x99\x6d\x9f\x4c\xc4\x62\xfb\x64\xa2\x14\x4a\x1d\x9a\xe0\x1c\x00\ +\x15\x5c\x94\x58\xfa\x6e\xe5\x92\x19\x58\x7c\xe4\x90\x7d\xd8\x81\ +\x1e\xd7\x91\x59\x9a\xd5\x59\x36\x7d\x22\x99\xba\x81\xb8\x3e\xee\ +\x55\xf9\xb6\x59\x9e\xe0\xc2\xbc\x9c\x3e\x8f\x2b\x68\x64\x9b\x92\ +\x63\x98\x3f\xb2\x99\xc4\x72\xde\xf1\x4b\x95\x29\xde\x90\xf5\x29\ +\x28\xd1\x36\x92\x65\x12\x55\x8b\xf6\xec\x30\x8a\x19\x2c\x25\xe0\ +\x95\x29\x79\x95\xbb\x97\x0d\x51\xb0\x4e\x88\xd7\xb2\x1f\xc0\x12\ +\xc1\xf8\xeb\x50\x26\x94\xaf\x01\x5c\x2c\xe7\xab\x47\x73\x0a\xe2\ +\x03\x34\xf3\x3d\x1a\x1b\x48\xb3\xdb\x73\x41\x14\x1a\xad\x26\x5e\ +\x04\x83\x1c\xc2\x4f\x60\x56\xac\xb1\xb1\x4e\xac\x53\x35\x6b\xa6\ +\x18\x31\xf2\x54\x59\x26\xeb\xac\x22\x1f\x3d\x68\x08\x96\x6d\x04\ +\x38\xa2\xe8\x06\x71\x11\xed\x88\x03\xde\x32\x20\x69\xa6\xd9\xdd\ +\xa0\x19\x97\x26\x69\xf2\x21\x9f\x99\xda\x1d\x02\x2d\xb7\xcb\x66\ +\xd7\xde\xd6\xd6\x7b\xd0\x51\xb5\xb3\xa4\x2d\x49\x0a\x77\x45\xd3\ +\x63\xb3\x9b\x2b\x30\x7c\x60\xa3\xc8\x36\x5e\x79\x74\x20\xc2\x55\ +\x63\xae\x19\x75\xb0\x55\xb6\xff\xad\x54\xb7\x58\x2e\x11\xeb\x66\ +\x79\x7b\x33\x03\x83\x35\x02\x5e\xec\x40\x5c\xbb\x18\x6d\xc0\x8c\ +\xac\x8e\x05\xf4\xa4\x49\xe7\x71\x40\x68\xf9\x26\xbf\xee\xd5\xb2\ +\xce\xe9\x90\x24\x60\x14\x88\x41\xed\x86\x80\x93\xc6\xe8\x27\x74\ +\xdd\xb4\x93\x7c\xbd\xaf\x21\xf7\x14\xf4\x8e\x2c\x01\x9d\x91\xc4\ +\x59\x17\x94\xf5\x46\x63\x3f\x31\xe6\xd1\x68\x41\x26\x84\x74\x2e\ +\x01\x1e\x62\x63\x95\x7b\x51\x10\x73\x93\x7e\x35\x55\x3c\xf2\xbf\ +\x5a\xaf\xda\x63\x28\x21\xe1\x84\x10\x7d\xcc\x7b\xb8\x59\x7f\x6f\ +\xa1\x30\x76\xf9\x7a\x5f\x21\xe5\x24\x4b\xd2\x4b\x24\x47\x30\xb3\ +\x44\xa7\x0d\x8c\x7c\xbc\x60\x8d\x6e\x18\xcf\x15\x02\xbc\x0e\xc6\ +\x96\x13\x9b\xd5\x3e\x22\xba\x06\xa3\x31\x61\x36\x3a\x52\xb8\x23\ +\x46\x8c\x82\xfa\x17\x1f\x0c\xaa\xbd\x78\xa8\xb1\x10\xf1\xde\xdc\ +\x00\x9c\xf5\xa7\x31\xbc\xe8\x2d\x3b\xdd\xdd\xbd\x7c\x50\xf7\x47\ +\x7c\x7e\xa3\x80\x30\xaa\x82\x77\x45\x01\x38\xb3\xbc\xab\xc0\xec\ +\x3d\x63\x14\x25\xcf\x90\xab\x91\x97\x9c\x2e\xb8\x6e\x07\xb9\x16\ +\x38\xc4\xdb\x9c\xd5\xe8\x5e\xd1\x35\x07\x87\x07\x11\xa8\x61\x8c\ +\x8e\x28\xbe\x48\xc8\xb1\x8b\x77\x88\x5d\x82\x91\x0b\x02\xee\xaf\ +\x0b\xf0\xe8\x95\x8c\xec\x2d\x13\x88\xbd\xa3\xf8\x6e\xec\xac\x03\ +\x79\x31\x98\xf7\x59\x00\xa3\x75\x8b\xc7\x9e\xe6\x7e\xe2\xed\x05\ +\x05\xd3\xeb\x0a\xa2\xd1\x96\x1d\xce\x5e\xaf\x27\xf6\x01\xf4\xeb\ +\xeb\xf4\x27\x03\xe8\x97\x4e\x8b\xd6\x99\xe9\x47\x1f\x38\x5d\x70\ +\x7d\xe2\xf9\x12\xf5\x66\x80\x63\xd4\x82\x49\x94\x63\xf6\xf9\xfb\ +\x0a\x87\xa5\x36\x0c\xa7\x41\x9b\x84\xa3\x15\x9c\x33\x46\x5d\x9e\ +\x74\x38\x92\xc7\xd3\xde\x35\xef\x4b\x68\x34\x2b\xbf\xf1\x7d\x14\ +\x7f\xff\x03\x20\x3e\x02\xe1\ +\x00\x00\x01\x14\ +\x3c\ +\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\x22\x20\ +\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\x20\x78\x6d\x6c\x6e\x73\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\ +\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x3c\x70\ +\x61\x74\x68\x20\x64\x3d\x22\x6d\x30\x20\x37\x68\x39\x76\x39\x22\ +\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x30\x30\x30\x22\x20\x73\ +\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x30\x22\ +\x2f\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x30\x20\x37\x68\ +\x39\x76\x39\x22\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\ +\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x36\x33\x38\x39\x62\x38\ +\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\ +\x38\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x30\x20\ +\x37\x68\x39\x76\x39\x22\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\ +\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x64\x33\x63\x30\ +\x32\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\ +\x72\x72\x61\x79\x3d\x22\x32\x20\x32\x22\x20\x73\x74\x72\x6f\x6b\ +\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x2f\x3e\x3c\x2f\x73\ +\x76\x67\x3e\ \x00\x00\x01\x2f\ \x3c\ \x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x20\ @@ -1052,6 +1181,363 @@ \x30\x30\x30\x31\x32\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\ \x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x30\x20\x2d\x38\ \x29\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\ +\x00\x00\x0b\x39\ +\x3c\ +\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\ +\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\ +\x30\x2f\x73\x76\x67\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\ +\x34\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x3e\x3c\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x20\x69\x64\ +\x3d\x22\x61\x22\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\ +\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x2d\ +\x2e\x31\x30\x37\x38\x37\x20\x2e\x38\x37\x38\x35\x20\x2e\x38\x37\ +\x34\x30\x38\x20\x2e\x31\x30\x37\x33\x32\x20\x2d\x31\x2e\x38\x31\ +\x32\x20\x37\x35\x38\x2e\x36\x35\x38\x29\x22\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\ +\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x20\x78\x31\x3d\x22\x33\ +\x30\x34\x2e\x37\x36\x22\x20\x78\x32\x3d\x22\x33\x33\x35\x2e\x33\ +\x22\x20\x79\x31\x3d\x22\x36\x34\x2e\x32\x39\x35\x22\x20\x79\x32\ +\x3d\x22\x38\x31\x2e\x39\x32\x36\x22\x3e\x3c\x73\x74\x6f\x70\x20\ +\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x20\x73\x74\x6f\x70\x2d\ +\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x64\x33\x64\x37\x63\x66\x22\x2f\ +\x3e\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x2e\ +\x31\x38\x33\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\ +\x22\x23\x62\x61\x62\x64\x62\x36\x22\x2f\x3e\x3c\x73\x74\x6f\x70\ +\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x2e\x33\x31\x39\x22\x20\x73\ +\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x22\ +\x2f\x3e\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\ +\x2e\x38\x37\x36\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3d\x22\x23\x62\x61\x62\x64\x62\x36\x22\x2f\x3e\x3c\x73\x74\x6f\ +\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x20\x73\x74\x6f\ +\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x65\x65\x65\x65\x65\x63\ +\x22\x2f\x3e\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x3e\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x20\x69\x64\x3d\x22\x62\x22\x20\x67\x72\x61\x64\x69\ +\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\ +\x74\x72\x69\x78\x28\x2d\x2e\x33\x34\x31\x31\x32\x20\x2e\x32\x36\ +\x36\x39\x20\x2e\x33\x34\x37\x31\x20\x2e\x34\x34\x36\x33\x33\x20\ +\x37\x2e\x33\x38\x36\x20\x31\x30\x32\x37\x2e\x36\x34\x33\x29\x22\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x20\ +\x78\x31\x3d\x22\x2d\x36\x2e\x33\x30\x38\x22\x20\x78\x32\x3d\x22\ +\x2d\x39\x2e\x37\x37\x35\x22\x20\x79\x31\x3d\x22\x34\x34\x2e\x32\ +\x32\x39\x22\x20\x79\x32\x3d\x22\x34\x34\x2e\x31\x34\x22\x3e\x3c\ +\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x2f\ +\x3e\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\ +\x22\x20\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\ +\x30\x22\x2f\x3e\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x3e\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x20\x69\x64\x3d\x22\x63\x22\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ +\x61\x74\x72\x69\x78\x28\x2d\x2e\x36\x37\x34\x38\x32\x20\x2e\x35\ +\x32\x37\x33\x37\x20\x2e\x32\x39\x34\x33\x32\x20\x2e\x33\x37\x38\ +\x33\x36\x20\x37\x37\x2e\x37\x31\x38\x20\x39\x38\x31\x2e\x31\x32\ +\x32\x29\x22\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\ +\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\ +\x65\x22\x20\x78\x31\x3d\x22\x39\x37\x2e\x34\x34\x32\x22\x20\x78\ +\x32\x3d\x22\x39\x30\x2e\x32\x32\x31\x22\x20\x79\x31\x3d\x22\x33\ +\x35\x2e\x31\x35\x32\x22\x20\x79\x32\x3d\x22\x33\x35\x2e\x30\x37\ +\x39\x22\x3e\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\ +\x22\x30\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\x22\ +\x23\x66\x38\x65\x32\x37\x65\x22\x2f\x3e\x3c\x73\x74\x6f\x70\x20\ +\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x20\x73\x74\x6f\x70\x2d\ +\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x65\x33\x64\x31\x38\x39\x22\x2f\ +\x3e\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x30\x2e\x34\ +\x35\x37\x20\x31\x30\x33\x32\x2e\x33\x31\x63\x2d\x2e\x30\x35\x35\ +\x2d\x2e\x38\x35\x37\x2e\x36\x33\x34\x2d\x2e\x32\x35\x2e\x38\x37\ +\x36\x20\x30\x20\x31\x2e\x30\x32\x35\x2e\x37\x34\x32\x20\x32\x2e\ +\x30\x33\x20\x31\x2e\x35\x31\x35\x20\x33\x2e\x30\x36\x37\x20\x32\ +\x2e\x32\x34\x2e\x37\x32\x35\x2e\x32\x35\x35\x20\x31\x2e\x34\x32\ +\x32\x2d\x2e\x33\x31\x33\x20\x31\x2e\x39\x30\x35\x2d\x2e\x37\x39\ +\x33\x2e\x36\x39\x2d\x2e\x37\x37\x32\x20\x31\x2e\x33\x36\x35\x2d\ +\x31\x2e\x37\x37\x20\x31\x2e\x32\x34\x2d\x32\x2e\x38\x35\x35\x2d\ +\x2e\x31\x2d\x2e\x35\x35\x2d\x2e\x36\x38\x2d\x2e\x37\x35\x36\x2d\ +\x31\x2e\x30\x36\x2d\x31\x2e\x30\x38\x37\x2d\x2e\x39\x35\x2d\x2e\ +\x37\x2d\x31\x2e\x39\x30\x36\x2d\x31\x2e\x33\x39\x34\x2d\x32\x2e\ +\x38\x35\x2d\x32\x2e\x31\x2e\x30\x35\x2d\x2e\x35\x33\x36\x2e\x39\ +\x32\x2d\x2e\x34\x33\x20\x31\x2e\x33\x35\x32\x2d\x2e\x34\x35\x33\ +\x20\x31\x2e\x38\x2e\x30\x33\x32\x20\x33\x2e\x37\x36\x2e\x36\x32\ +\x20\x34\x2e\x38\x34\x38\x20\x32\x2e\x31\x34\x38\x2e\x38\x39\x34\ +\x20\x31\x2e\x32\x34\x33\x20\x31\x2e\x30\x39\x36\x20\x32\x2e\x39\ +\x31\x2e\x36\x34\x35\x20\x34\x2e\x33\x36\x2e\x32\x35\x20\x31\x2e\ +\x33\x35\x35\x2e\x37\x35\x20\x32\x2e\x36\x38\x33\x20\x31\x2e\x36\ +\x30\x35\x20\x33\x2e\x37\x37\x35\x6c\x2d\x33\x2e\x31\x36\x35\x20\ +\x32\x2e\x33\x32\x36\x63\x2d\x2e\x37\x34\x34\x2d\x2e\x39\x37\x2d\ +\x31\x2e\x36\x36\x36\x2d\x31\x2e\x38\x31\x32\x2d\x32\x2e\x37\x34\ +\x33\x2d\x32\x2e\x33\x39\x37\x2d\x31\x2e\x35\x39\x37\x2e\x32\x33\ +\x33\x2d\x33\x2e\x32\x33\x2d\x2e\x35\x32\x2d\x34\x2e\x31\x39\x34\ +\x2d\x31\x2e\x37\x39\x32\x2d\x2e\x37\x36\x32\x2d\x2e\x39\x37\x34\ +\x2d\x31\x2e\x33\x32\x37\x2d\x32\x2e\x31\x34\x33\x2d\x31\x2e\x35\ +\x32\x36\x2d\x33\x2e\x33\x36\x36\x7a\x22\x20\x66\x69\x6c\x6c\x2d\ +\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x73\ +\x74\x72\x6f\x6b\x65\x3d\x22\x23\x34\x30\x34\x30\x34\x30\x22\x20\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x2e\ +\x30\x32\x37\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\ +\x63\x61\x70\x3d\x22\x72\x6f\x75\x6e\x64\x22\x20\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\ +\x6e\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x2e\x33\x36\x31\x22\x20\x66\x69\x6c\ +\x6c\x3d\x22\x75\x72\x6c\x28\x23\x61\x29\x22\x20\x74\x72\x61\x6e\ +\x73\x66\x6f\x72\x6d\x3d\x22\x72\x6f\x74\x61\x74\x65\x28\x2d\x31\ +\x30\x20\x2d\x35\x36\x35\x36\x2e\x38\x39\x35\x20\x35\x35\x37\x2e\ +\x30\x37\x33\x29\x20\x73\x63\x61\x6c\x65\x28\x2e\x39\x36\x36\x34\ +\x32\x29\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\ +\x30\x2e\x35\x37\x20\x31\x30\x33\x38\x2e\x39\x35\x34\x63\x2d\x2e\ +\x33\x37\x38\x2e\x32\x39\x35\x2d\x2e\x34\x35\x2e\x38\x33\x32\x2d\ +\x2e\x31\x36\x20\x31\x2e\x32\x30\x34\x6c\x35\x2e\x32\x37\x35\x20\ +\x37\x2e\x37\x32\x37\x63\x2e\x32\x39\x2e\x33\x37\x20\x31\x2e\x32\ +\x38\x2e\x30\x37\x36\x20\x31\x2e\x36\x36\x2d\x2e\x32\x32\x2e\x33\ +\x37\x37\x2d\x2e\x32\x39\x36\x2e\x39\x30\x35\x2d\x31\x2e\x31\x39\ +\x2e\x36\x31\x36\x2d\x31\x2e\x35\x36\x6c\x2d\x36\x2e\x31\x38\x2d\ +\x37\x2e\x30\x31\x35\x63\x2d\x2e\x32\x39\x2d\x2e\x33\x37\x2d\x2e\ +\x38\x32\x36\x2d\x2e\x34\x33\x32\x2d\x31\x2e\x32\x30\x34\x2d\x2e\ +\x31\x33\x36\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x75\x72\x6c\x28\ +\x23\x62\x29\x22\x20\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x2e\x32\ +\x33\x31\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x72\ +\x6f\x74\x61\x74\x65\x28\x2d\x31\x30\x20\x2d\x35\x36\x35\x36\x2e\ +\x38\x39\x35\x20\x35\x35\x37\x2e\x30\x37\x33\x29\x20\x73\x63\x61\ +\x6c\x65\x28\x2e\x39\x36\x36\x34\x32\x29\x22\x2f\x3e\x3c\x70\x61\ +\x74\x68\x20\x64\x3d\x22\x4d\x2e\x38\x32\x37\x20\x36\x2e\x38\x37\ +\x32\x63\x2e\x30\x30\x36\x2e\x30\x31\x36\x2e\x30\x32\x36\x2e\x30\ +\x30\x35\x2e\x30\x32\x36\x2d\x2e\x30\x30\x34\x4c\x34\x2e\x33\x38\ +\x20\x38\x2e\x36\x31\x63\x2e\x34\x37\x35\x2e\x32\x33\x35\x20\x31\ +\x2e\x30\x31\x2e\x30\x32\x20\x31\x2e\x34\x34\x38\x2d\x2e\x33\x31\ +\x37\x2e\x34\x34\x32\x2d\x2e\x33\x34\x2e\x38\x36\x2d\x2e\x38\x35\ +\x32\x20\x31\x2e\x31\x37\x32\x2d\x31\x2e\x35\x30\x37\x2e\x33\x31\ +\x33\x2d\x2e\x36\x35\x36\x2e\x34\x34\x34\x2d\x31\x2e\x33\x33\x34\ +\x2e\x34\x33\x34\x2d\x31\x2e\x38\x39\x37\x2d\x2e\x30\x31\x2d\x2e\ +\x35\x36\x2d\x2e\x31\x39\x37\x2d\x31\x2e\x30\x37\x38\x2d\x2e\x36\ +\x35\x35\x2d\x31\x2e\x33\x30\x35\x6c\x2d\x33\x2e\x35\x35\x34\x2d\ +\x31\x2e\x37\x34\x63\x2d\x2e\x30\x30\x32\x2d\x2e\x30\x31\x32\x20\ +\x30\x2d\x2e\x30\x33\x2d\x2e\x30\x30\x32\x2d\x2e\x30\x32\x38\x2d\ +\x2e\x30\x31\x37\x2e\x30\x32\x2e\x30\x31\x35\x2e\x30\x30\x38\x2e\ +\x30\x32\x37\x2d\x2e\x30\x30\x34\x20\x31\x2e\x35\x30\x32\x2d\x2e\ +\x34\x33\x34\x20\x33\x2e\x32\x36\x38\x2d\x2e\x33\x34\x33\x20\x34\ +\x2e\x34\x36\x2e\x32\x34\x38\x43\x39\x2e\x33\x34\x34\x20\x32\x2e\ +\x38\x37\x20\x31\x30\x2e\x32\x20\x34\x2e\x36\x39\x20\x39\x2e\x39\ +\x37\x20\x36\x2e\x35\x34\x37\x63\x2d\x2e\x32\x33\x20\x31\x2e\x38\ +\x35\x2d\x31\x2e\x37\x33\x36\x20\x33\x2e\x35\x2d\x33\x2e\x32\x32\ +\x37\x20\x33\x2e\x39\x37\x2d\x2e\x39\x36\x36\x2e\x33\x2d\x32\x2e\ +\x30\x32\x33\x2e\x32\x35\x2d\x32\x2e\x39\x36\x38\x2d\x2e\x32\x32\ +\x2d\x31\x2e\x31\x39\x2d\x2e\x35\x38\x38\x2d\x32\x2e\x33\x35\x34\ +\x2d\x31\x2e\x39\x36\x2d\x32\x2e\x39\x35\x2d\x33\x2e\x34\x33\x7a\ +\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x30\x66\x33\x66\x32\x22\ +\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\ +\x6f\x64\x64\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\ +\x32\x31\x2e\x39\x37\x20\x31\x30\x33\x36\x2e\x39\x31\x6c\x39\x2e\ +\x35\x38\x20\x31\x31\x2e\x31\x63\x2e\x35\x37\x32\x2e\x37\x33\x35\ +\x2d\x2e\x30\x33\x20\x32\x2e\x31\x34\x2d\x31\x2e\x33\x34\x20\x33\ +\x2e\x31\x36\x32\x2d\x31\x2e\x33\x30\x38\x20\x31\x2e\x30\x32\x32\ +\x2d\x32\x2e\x38\x31\x34\x20\x31\x2e\x32\x36\x36\x2d\x33\x2e\x33\ +\x38\x35\x2e\x35\x33\x33\x6c\x2d\x38\x2e\x34\x2d\x31\x32\x2e\x30\ +\x32\x35\x20\x33\x2e\x35\x34\x37\x2d\x32\x2e\x37\x37\x7a\x6d\x36\ +\x2e\x33\x34\x35\x20\x31\x31\x2e\x38\x32\x63\x2d\x2e\x36\x35\x2e\ +\x35\x31\x2d\x2e\x37\x38\x36\x20\x31\x2e\x34\x33\x33\x2d\x2e\x34\ +\x36\x20\x31\x2e\x38\x35\x2e\x33\x32\x33\x2e\x34\x31\x37\x20\x31\ +\x2e\x32\x38\x2e\x34\x38\x35\x20\x31\x2e\x39\x33\x32\x2d\x2e\x30\ +\x32\x33\x2e\x36\x35\x2d\x2e\x35\x31\x2e\x37\x35\x34\x2d\x31\x2e\ +\x34\x30\x37\x2e\x34\x33\x2d\x31\x2e\x38\x32\x34\x2d\x2e\x33\x32\ +\x35\x2d\x2e\x34\x31\x37\x2d\x31\x2e\x32\x35\x2d\x2e\x35\x31\x2d\ +\x31\x2e\x39\x30\x32\x20\x30\x7a\x22\x20\x73\x74\x72\x6f\x6b\x65\ +\x3d\x22\x23\x34\x30\x34\x30\x34\x30\x22\x20\x73\x74\x72\x6f\x6b\ +\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x2e\x38\x36\x37\x22\x20\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\ +\x6f\x75\x6e\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\ +\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x20\x73\x74\ +\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3d\ +\x22\x2e\x37\x22\x20\x66\x69\x6c\x6c\x3d\x22\x75\x72\x6c\x28\x23\ +\x63\x29\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x72\ +\x6f\x74\x61\x74\x65\x28\x2d\x31\x30\x20\x2d\x35\x36\x35\x36\x2e\ +\x38\x39\x35\x20\x35\x35\x37\x2e\x30\x37\x33\x29\x20\x73\x63\x61\ +\x6c\x65\x28\x2e\x39\x36\x36\x34\x32\x29\x22\x2f\x3e\x3c\x70\x61\ +\x74\x68\x20\x64\x3d\x22\x4d\x2d\x36\x37\x39\x2e\x31\x30\x38\x20\ +\x38\x37\x34\x2e\x36\x37\x68\x33\x2e\x35\x37\x76\x2e\x35\x37\x38\ +\x68\x2d\x33\x2e\x35\x37\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\ +\x66\x66\x66\x22\x20\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3d\x22\x2e\x35\x37\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\ +\x22\x23\x34\x30\x34\x30\x34\x30\x22\x20\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x2e\x32\x38\x39\x22\x20\x74\ +\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\ +\x28\x2e\x36\x38\x39\x38\x32\x20\x2d\x2e\x36\x37\x36\x38\x35\x20\ +\x2e\x37\x35\x35\x38\x38\x20\x2e\x36\x30\x32\x31\x38\x20\x2d\x31\ +\x38\x32\x2e\x36\x36\x34\x20\x2d\x39\x37\x33\x2e\x38\x35\x29\x22\ +\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x02\xb6\ +\x3c\ +\x73\x76\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\ +\x34\x20\x32\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\ +\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x31\ +\x36\x20\x31\x36\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\ +\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\ +\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\ +\x76\x67\x22\x3e\x0d\x0a\x3c\x67\x20\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x73\x71\x75\x61\x72\x65\x22\ +\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\ +\x73\x6c\x61\x74\x65\x28\x30\x20\x2d\x31\x36\x29\x22\x3e\x0d\x0a\ +\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x36\x20\x31\x39\x2e\x32\ +\x31\x36\x31\x33\x32\x63\x2e\x36\x36\x34\x35\x31\x31\x37\x2d\x2e\ +\x39\x34\x36\x37\x31\x20\x32\x2e\x33\x30\x37\x30\x35\x35\x37\x2d\ +\x32\x2e\x34\x30\x34\x36\x33\x34\x20\x34\x2e\x35\x36\x32\x34\x31\ +\x2d\x31\x2e\x30\x30\x39\x31\x32\x20\x32\x2e\x33\x36\x39\x37\x36\ +\x32\x20\x31\x2e\x36\x33\x36\x33\x39\x31\x20\x31\x2e\x39\x37\x33\ +\x33\x37\x32\x20\x33\x2e\x36\x38\x30\x32\x36\x34\x2d\x2e\x30\x33\ +\x39\x32\x31\x20\x36\x2e\x39\x32\x37\x38\x32\x32\x22\x20\x66\x69\ +\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\ +\x3d\x22\x23\x38\x38\x38\x61\x38\x35\x22\x20\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\ +\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\ +\x22\x33\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\ +\x6d\x36\x20\x31\x39\x2e\x32\x31\x36\x31\x33\x32\x63\x31\x2d\x31\ +\x2e\x32\x31\x36\x31\x33\x32\x20\x32\x2e\x31\x39\x32\x36\x34\x38\ +\x39\x2d\x32\x2e\x36\x34\x36\x31\x35\x39\x20\x34\x2e\x35\x36\x32\ +\x34\x31\x2d\x31\x2e\x30\x30\x39\x31\x32\x20\x32\x2e\x33\x36\x39\ +\x37\x36\x32\x20\x31\x2e\x36\x33\x36\x33\x39\x31\x20\x31\x2e\x39\ +\x37\x33\x33\x37\x32\x20\x33\x2e\x36\x38\x30\x32\x36\x34\x2d\x2e\ +\x30\x33\x39\x32\x31\x20\x36\x2e\x39\x32\x37\x38\x32\x32\x22\x20\ +\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\ +\x6b\x65\x3d\x22\x23\x65\x65\x65\x65\x65\x63\x22\x20\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\ +\x75\x6e\x64\x22\x2f\x3e\x0d\x0a\x3c\x72\x65\x63\x74\x20\x66\x69\ +\x6c\x6c\x3d\x22\x23\x66\x31\x64\x62\x31\x65\x22\x20\x68\x65\x69\ +\x67\x68\x74\x3d\x22\x37\x22\x20\x72\x78\x3d\x22\x2e\x38\x34\x36\ +\x31\x35\x33\x38\x36\x22\x20\x72\x79\x3d\x22\x31\x22\x20\x73\x74\ +\x72\x6f\x6b\x65\x3d\x22\x23\x63\x34\x61\x30\x30\x30\x22\x20\x73\ +\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x2e\x39\x39\ +\x39\x39\x39\x39\x39\x34\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\ +\x31\x22\x20\x78\x3d\x22\x32\x2e\x35\x22\x20\x79\x3d\x22\x32\x33\ +\x2e\x35\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\ +\x76\x67\x3e\x0d\x0a\ +\x00\x00\x03\x79\ +\x3c\ +\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x20\ +\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x34\x20\ +\x32\x34\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x20\x78\ +\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\ +\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\ +\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\ +\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x30\x20\x2d\x31\ +\x30\x32\x38\x2e\x33\x36\x32\x32\x29\x22\x3e\x0d\x0a\x3c\x70\x61\ +\x74\x68\x20\x64\x3d\x22\x6d\x39\x2e\x34\x39\x39\x39\x38\x36\x20\ +\x31\x30\x33\x31\x2e\x38\x36\x32\x32\x6c\x2d\x36\x20\x37\x2e\x35\ +\x20\x36\x20\x37\x2e\x35\x76\x2d\x35\x68\x35\x63\x32\x2e\x36\x39\ +\x33\x34\x39\x34\x20\x32\x2e\x36\x30\x36\x37\x2e\x39\x37\x30\x39\ +\x32\x37\x20\x35\x2d\x32\x20\x35\x76\x32\x63\x33\x2e\x34\x30\x37\ +\x38\x33\x31\x20\x30\x20\x38\x2d\x31\x2e\x33\x31\x35\x37\x20\x38\ +\x2d\x37\x2e\x35\x20\x30\x2d\x32\x2e\x31\x30\x34\x32\x2d\x31\x2e\ +\x37\x32\x35\x34\x36\x33\x2d\x34\x2e\x35\x2d\x36\x2d\x34\x2e\x35\ +\x68\x2d\x35\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x65\x33\x37\ +\x65\x33\x39\x22\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3d\x22\ +\x65\x76\x65\x6e\x6f\x64\x64\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\ +\x68\x20\x64\x3d\x22\x6d\x33\x2e\x36\x34\x33\x38\x39\x20\x31\x30\ +\x33\x39\x2e\x34\x32\x34\x35\x6c\x35\x2e\x33\x35\x35\x34\x36\x38\ +\x35\x20\x37\x2e\x32\x37\x37\x34\x76\x2d\x32\x2e\x32\x35\x6c\x2d\ +\x34\x2e\x39\x39\x39\x39\x39\x39\x38\x2d\x36\x2e\x32\x35\x7a\x6d\ +\x36\x2e\x33\x35\x35\x34\x37\x34\x37\x20\x31\x2e\x32\x37\x37\x34\ +\x76\x31\x68\x34\x2e\x30\x30\x30\x30\x30\x30\x33\x63\x31\x2e\x33\ +\x34\x39\x37\x37\x35\x20\x31\x2e\x33\x30\x36\x33\x20\x31\x2e\x35\ +\x38\x38\x36\x39\x37\x20\x32\x2e\x35\x35\x37\x36\x20\x31\x2e\x31\ +\x31\x39\x31\x34\x20\x33\x2e\x34\x38\x32\x34\x20\x31\x2e\x34\x36\ +\x32\x30\x31\x36\x2d\x2e\x38\x34\x30\x35\x20\x31\x2e\x38\x32\x32\ +\x38\x36\x37\x2d\x32\x2e\x36\x30\x33\x2d\x2e\x31\x31\x39\x31\x34\ +\x2d\x34\x2e\x34\x38\x32\x34\x7a\x6d\x38\x2e\x35\x34\x31\x30\x31\ +\x35\x33\x20\x35\x2e\x33\x35\x39\x33\x63\x2d\x31\x2e\x36\x31\x30\ +\x34\x39\x32\x20\x31\x2e\x32\x36\x32\x35\x2d\x33\x2e\x37\x33\x38\ +\x31\x38\x34\x20\x31\x2e\x36\x34\x30\x37\x2d\x35\x2e\x35\x34\x31\ +\x30\x31\x35\x20\x31\x2e\x36\x34\x30\x37\x76\x2d\x31\x2e\x31\x30\ +\x31\x36\x63\x2d\x2e\x33\x31\x32\x38\x32\x38\x2e\x30\x36\x34\x2d\ +\x2e\x36\x34\x36\x34\x38\x34\x2e\x31\x30\x31\x36\x2d\x31\x20\x2e\ +\x31\x30\x31\x36\x76\x32\x63\x32\x2e\x32\x31\x30\x30\x37\x36\x20\ +\x30\x20\x34\x2e\x39\x31\x30\x33\x32\x34\x2d\x2e\x35\x36\x34\x38\ +\x20\x36\x2e\x35\x34\x31\x30\x31\x35\x2d\x32\x2e\x36\x34\x30\x37\ +\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x32\x63\x39\x39\x30\ +\x22\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\ +\x6e\x6f\x64\x64\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\ +\x3d\x22\x6d\x39\x2e\x34\x39\x39\x39\x38\x36\x20\x31\x30\x33\x31\ +\x2e\x38\x36\x32\x32\x6c\x2d\x36\x20\x37\x2e\x35\x20\x36\x20\x37\ +\x2e\x35\x76\x2d\x35\x68\x35\x63\x32\x2e\x36\x39\x33\x34\x39\x34\ +\x20\x32\x2e\x36\x30\x36\x37\x2e\x39\x37\x30\x39\x32\x37\x20\x35\ +\x2d\x32\x20\x35\x76\x32\x63\x33\x2e\x34\x30\x37\x38\x33\x31\x20\ +\x30\x20\x38\x2d\x31\x2e\x33\x31\x35\x37\x20\x38\x2d\x37\x2e\x35\ +\x20\x30\x2d\x32\x2e\x31\x30\x34\x32\x2d\x31\x2e\x37\x32\x35\x34\ +\x36\x33\x2d\x34\x2e\x35\x2d\x36\x2d\x34\x2e\x35\x68\x2d\x35\x7a\ +\x22\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\ +\x72\x6f\x6b\x65\x3d\x22\x23\x64\x30\x36\x39\x33\x35\x22\x20\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\ +\x72\x6f\x75\x6e\x64\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\ +\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\ +\x00\x00\x01\x44\ +\x3c\ +\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\x22\x20\ +\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\x20\x78\x6d\x6c\x6e\x73\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\ +\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x3c\x70\ +\x61\x74\x68\x20\x64\x3d\x22\x6d\x30\x20\x37\x68\x39\x76\x39\x22\ +\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x30\x30\x30\x22\x20\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\ +\x62\x65\x76\x65\x6c\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3d\x22\x31\x30\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\ +\x64\x3d\x22\x6d\x30\x20\x37\x68\x39\x76\x39\x22\x20\x66\x69\x6c\ +\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\ +\x22\x23\x36\x33\x38\x39\x62\x38\x22\x20\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x62\x65\x76\x65\x6c\ +\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\ +\x38\x22\x2f\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x30\x20\ +\x37\x68\x39\x76\x39\x22\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\ +\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x64\x33\x63\x30\ +\x32\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\ +\x72\x72\x61\x79\x3d\x22\x32\x20\x32\x22\x20\x73\x74\x72\x6f\x6b\ +\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x2f\x3e\x3c\x2f\x73\ +\x76\x67\x3e\ +\x00\x00\x02\xd4\ +\x3c\ +\x73\x76\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\ +\x34\x20\x32\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\ +\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x31\ +\x36\x20\x31\x36\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\ +\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\ +\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\ +\x76\x67\x22\x3e\x0d\x0a\x3c\x67\x20\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x73\x71\x75\x61\x72\x65\x22\ +\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\ +\x73\x6c\x61\x74\x65\x28\x30\x20\x2d\x31\x36\x29\x22\x3e\x0d\x0a\ +\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x34\x2e\x34\x30\x36\x37\ +\x36\x39\x35\x20\x32\x32\x2e\x38\x36\x35\x32\x30\x32\x63\x2e\x31\ +\x31\x38\x36\x33\x37\x2d\x33\x2e\x38\x31\x38\x34\x35\x32\x2e\x39\ +\x34\x39\x30\x37\x32\x36\x2d\x35\x2e\x35\x34\x37\x31\x33\x20\x33\ +\x2e\x38\x31\x39\x38\x36\x35\x36\x2d\x35\x2e\x33\x31\x34\x32\x39\ +\x34\x20\x32\x2e\x38\x37\x30\x34\x36\x39\x39\x2e\x32\x33\x32\x32\ +\x37\x36\x20\x33\x2e\x35\x31\x35\x39\x37\x36\x39\x20\x32\x2e\x30\ +\x37\x38\x39\x38\x33\x20\x33\x2e\x33\x39\x36\x38\x30\x38\x39\x20\ +\x35\x2e\x38\x39\x37\x37\x34\x31\x22\x20\x66\x69\x6c\x6c\x3d\x22\ +\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\ +\x38\x38\x61\x38\x35\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x20\x73\ +\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x33\x22\x2f\ +\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x34\x2e\x33\ +\x39\x32\x34\x36\x32\x35\x20\x32\x32\x2e\x38\x36\x35\x32\x30\x32\ +\x63\x2e\x31\x31\x38\x36\x33\x37\x2d\x33\x2e\x38\x31\x38\x34\x35\ +\x32\x2e\x39\x34\x39\x30\x37\x32\x36\x2d\x35\x2e\x35\x39\x31\x33\ +\x32\x34\x20\x33\x2e\x38\x31\x39\x38\x36\x35\x36\x2d\x35\x2e\x33\ +\x35\x38\x34\x38\x38\x20\x32\x2e\x38\x37\x30\x34\x36\x39\x39\x2e\ +\x32\x33\x32\x32\x37\x36\x20\x33\x2e\x35\x31\x35\x39\x37\x36\x39\ +\x20\x32\x2e\x31\x32\x33\x31\x37\x37\x20\x33\x2e\x33\x39\x36\x38\ +\x30\x38\x39\x20\x35\x2e\x39\x34\x31\x39\x33\x35\x22\x20\x66\x69\ +\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\ +\x3d\x22\x23\x65\x65\x65\x65\x65\x63\x22\x20\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\ +\x64\x22\x2f\x3e\x0d\x0a\x3c\x72\x65\x63\x74\x20\x66\x69\x6c\x6c\ +\x3d\x22\x23\x66\x31\x64\x62\x31\x65\x22\x20\x68\x65\x69\x67\x68\ +\x74\x3d\x22\x37\x22\x20\x72\x78\x3d\x22\x2e\x38\x34\x36\x31\x35\ +\x33\x38\x36\x22\x20\x72\x79\x3d\x22\x31\x22\x20\x73\x74\x72\x6f\ +\x6b\x65\x3d\x22\x23\x63\x34\x61\x30\x30\x30\x22\x20\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x2e\x39\x39\x39\x39\ +\x39\x39\x39\x34\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x31\x22\ +\x20\x78\x3d\x22\x32\x2e\x35\x22\x20\x79\x3d\x22\x32\x33\x2e\x35\ +\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\ +\x3e\x0d\x0a\ \x00\x00\x02\xf2\ \x00\ \x00\x0c\x1b\x78\x9c\xb5\x56\xc1\x72\x9b\x30\x10\xbd\x77\xa6\xff\ @@ -1102,6 +1588,161 @@ \xdd\x50\xc6\x20\xdd\x3d\x34\x06\x27\xc6\x3e\x28\xb7\x89\x14\x81\ \xeb\x8a\xf5\x0c\x3b\x58\xb9\xa7\x39\xda\x9b\xf7\x5f\x1e\xcd\x78\ \x9b\ +\x00\x00\x09\x85\ +\x3c\ +\x73\x76\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x32\x31\x20\x32\x34\ +\x20\x32\x32\x20\x31\x36\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\ +\x31\x36\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x32\x31\x20\ +\x32\x34\x20\x32\x32\x20\x31\x36\x22\x20\x77\x69\x64\x74\x68\x3d\ +\x22\x32\x32\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\ +\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\ +\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\ +\x6b\x22\x3e\x0d\x0a\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x20\x69\x64\x3d\x22\x61\x22\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ +\x61\x74\x72\x69\x78\x28\x31\x2e\x33\x33\x33\x33\x20\x30\x20\x30\ +\x20\x2d\x31\x2e\x33\x33\x33\x33\x20\x39\x30\x2e\x39\x32\x30\x33\ +\x20\x31\x39\x37\x2e\x34\x31\x30\x39\x29\x22\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\ +\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x20\x78\x31\x3d\x22\x2d\ +\x34\x30\x2e\x39\x34\x35\x38\x22\x20\x78\x32\x3d\x22\x2d\x34\x33\ +\x2e\x37\x33\x34\x35\x22\x20\x79\x31\x3d\x22\x31\x32\x30\x2e\x31\ +\x38\x31\x36\x22\x20\x79\x32\x3d\x22\x31\x32\x34\x2e\x33\x36\x34\ +\x36\x22\x3e\x0d\x0a\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\ +\x74\x3d\x22\x30\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3d\x22\x23\x64\x62\x64\x62\x64\x62\x22\x2f\x3e\x0d\x0a\x3c\x73\ +\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x2e\x36\x30\x38\ +\x37\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\x22\x23\ +\x66\x34\x66\x34\x66\x34\x22\x2f\x3e\x0d\x0a\x3c\x73\x74\x6f\x70\ +\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x20\x73\x74\x6f\x70\ +\x2d\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x22\x2f\x3e\x0d\ +\x0a\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x3e\x0d\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x22\ +\x33\x32\x2e\x32\x39\x38\x22\x20\x63\x79\x3d\x22\x33\x32\x22\x20\ +\x72\x3d\x22\x36\x2e\x39\x35\x36\x22\x20\x73\x74\x72\x6f\x6b\x65\ +\x3d\x22\x23\x30\x30\x30\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\ +\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x20\x73\ +\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x2f\ +\x3e\x0d\x0a\x3c\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\ +\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x22\x3e\x0d\x0a\ +\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x32\x32\x2e\x31\x31\x36\ +\x20\x33\x32\x2e\x31\x30\x32\x6c\x33\x2e\x37\x30\x38\x2d\x34\x2e\ +\x36\x35\x39\x68\x31\x34\x2e\x38\x34\x33\x76\x39\x2e\x33\x31\x36\ +\x68\x2d\x31\x34\x2e\x38\x34\x33\x7a\x22\x20\x66\x69\x6c\x6c\x3d\ +\x22\x75\x72\x6c\x28\x23\x61\x29\x22\x20\x73\x74\x72\x6f\x6b\x65\ +\x3d\x22\x23\x38\x30\x38\x30\x38\x30\x22\x20\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\x6f\x75\x6e\x64\ +\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\ +\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\ +\x74\x68\x20\x64\x3d\x22\x6d\x32\x39\x2e\x38\x35\x36\x20\x33\x34\ +\x2e\x36\x36\x32\x76\x2e\x31\x34\x32\x68\x2d\x31\x2e\x32\x37\x63\ +\x2d\x2e\x30\x38\x38\x2d\x2e\x31\x33\x34\x2d\x2e\x31\x33\x34\x2d\ +\x2e\x32\x38\x36\x2d\x2e\x31\x33\x34\x2d\x2e\x34\x35\x35\x2d\x2e\ +\x34\x31\x33\x2e\x34\x33\x31\x2d\x2e\x38\x36\x38\x2e\x36\x34\x36\ +\x2d\x31\x2e\x33\x37\x31\x2e\x36\x34\x36\x2d\x2e\x34\x33\x34\x20\ +\x30\x2d\x2e\x37\x38\x39\x2d\x2e\x31\x34\x32\x2d\x31\x2e\x30\x36\ +\x31\x2d\x2e\x34\x32\x35\x2d\x2e\x32\x31\x33\x2d\x2e\x32\x32\x39\ +\x2d\x2e\x33\x31\x37\x2d\x2e\x35\x33\x39\x2d\x2e\x33\x31\x37\x2d\ +\x2e\x39\x33\x35\x20\x30\x2d\x2e\x38\x30\x36\x2e\x34\x34\x32\x2d\ +\x31\x2e\x32\x38\x20\x31\x2e\x33\x33\x36\x2d\x31\x2e\x34\x33\x35\ +\x6c\x2e\x34\x37\x2d\x2e\x30\x38\x34\x63\x2e\x33\x37\x37\x2d\x2e\ +\x30\x36\x2e\x36\x30\x38\x2d\x2e\x31\x31\x2e\x36\x39\x31\x2d\x2e\ +\x31\x35\x2e\x30\x30\x36\x2d\x2e\x30\x30\x35\x2e\x30\x32\x2d\x2e\ +\x30\x31\x33\x2e\x30\x34\x32\x2d\x2e\x30\x32\x34\x2e\x31\x33\x33\ +\x2d\x2e\x30\x37\x33\x2e\x32\x2d\x2e\x31\x39\x31\x2e\x32\x2d\x2e\ +\x33\x35\x32\x20\x30\x2d\x2e\x33\x30\x34\x2d\x2e\x32\x32\x37\x2d\ +\x2e\x34\x35\x34\x2d\x2e\x36\x37\x37\x2d\x2e\x34\x35\x34\x2d\x2e\ +\x33\x37\x38\x20\x30\x2d\x2e\x36\x32\x2e\x30\x38\x39\x2d\x2e\x37\ +\x33\x2e\x32\x36\x39\x6c\x2d\x2e\x30\x37\x35\x2e\x32\x30\x32\x2d\ +\x2e\x30\x32\x34\x2e\x31\x35\x31\x68\x2d\x31\x2e\x31\x33\x36\x63\ +\x2e\x30\x37\x33\x2d\x31\x2e\x30\x34\x36\x2e\x37\x31\x39\x2d\x31\ +\x2e\x35\x37\x31\x20\x31\x2e\x39\x33\x38\x2d\x31\x2e\x35\x37\x31\ +\x20\x31\x2e\x32\x33\x32\x20\x30\x20\x31\x2e\x38\x34\x38\x2e\x34\ +\x36\x34\x20\x31\x2e\x38\x34\x38\x20\x31\x2e\x33\x39\x34\x76\x32\ +\x2e\x35\x32\x37\x63\x30\x20\x2e\x31\x38\x39\x2e\x30\x37\x32\x2e\ +\x33\x35\x37\x2e\x32\x31\x38\x2e\x35\x30\x34\x2e\x30\x32\x31\x2e\ +\x30\x31\x37\x2e\x30\x33\x38\x2e\x30\x33\x34\x2e\x30\x35\x32\x2e\ +\x30\x35\x7a\x6d\x2d\x31\x2e\x34\x31\x2d\x31\x2e\x36\x38\x33\x76\ +\x2d\x2e\x33\x32\x31\x63\x2d\x2e\x31\x30\x38\x2e\x30\x35\x2d\x2e\ +\x32\x37\x32\x2e\x31\x30\x32\x2d\x2e\x34\x39\x34\x2e\x31\x34\x35\ +\x6c\x2d\x2e\x34\x30\x32\x2e\x30\x37\x36\x63\x2d\x2e\x33\x36\x39\ +\x2e\x30\x37\x36\x2d\x2e\x35\x38\x35\x2e\x32\x31\x39\x2d\x2e\x36\ +\x34\x36\x2e\x34\x32\x32\x6c\x2d\x2e\x30\x32\x34\x2e\x32\x30\x32\ +\x63\x30\x20\x2e\x32\x37\x33\x2e\x31\x33\x38\x2e\x34\x34\x37\x2e\ +\x34\x31\x33\x2e\x35\x32\x2e\x30\x36\x37\x2e\x30\x32\x31\x2e\x31\ +\x34\x33\x2e\x30\x32\x34\x2e\x32\x32\x37\x2e\x30\x32\x34\x2e\x34\ +\x38\x34\x20\x30\x20\x2e\x37\x37\x37\x2d\x2e\x32\x33\x2e\x38\x38\ +\x33\x2d\x2e\x36\x39\x36\x2e\x30\x32\x38\x2d\x2e\x31\x31\x34\x2e\ +\x30\x34\x33\x2d\x2e\x32\x33\x35\x2e\x30\x34\x33\x2d\x2e\x33\x37\ +\x32\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x32\x65\x33\x34\x33\ +\x36\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\ +\x33\x30\x2e\x34\x36\x39\x20\x32\x38\x2e\x36\x37\x35\x68\x31\x2e\ +\x31\x36\x39\x76\x32\x2e\x31\x37\x36\x63\x2e\x32\x37\x38\x2d\x2e\ +\x34\x34\x32\x2e\x36\x39\x34\x2d\x2e\x36\x36\x34\x20\x31\x2e\x32\ +\x34\x32\x2d\x2e\x36\x36\x34\x2e\x34\x37\x31\x20\x30\x20\x2e\x38\ +\x37\x39\x2e\x31\x36\x37\x20\x31\x2e\x32\x31\x38\x2e\x35\x30\x34\ +\x2e\x30\x37\x34\x2e\x30\x37\x33\x2e\x31\x34\x2e\x31\x34\x39\x2e\ +\x31\x39\x34\x2e\x32\x32\x37\x2e\x33\x32\x32\x2e\x34\x37\x31\x2e\ +\x34\x38\x36\x20\x31\x2e\x30\x32\x38\x2e\x34\x38\x36\x20\x31\x2e\ +\x36\x37\x33\x20\x30\x20\x2e\x37\x37\x31\x2d\x2e\x32\x32\x32\x20\ +\x31\x2e\x33\x39\x31\x2d\x2e\x36\x36\x20\x31\x2e\x38\x36\x31\x2d\ +\x2e\x33\x35\x32\x2e\x33\x36\x33\x2d\x2e\x37\x36\x34\x2e\x35\x34\ +\x37\x2d\x31\x2e\x32\x33\x38\x2e\x35\x34\x37\x2d\x2e\x35\x34\x37\ +\x20\x30\x2d\x2e\x39\x36\x32\x2d\x2e\x32\x32\x2d\x31\x2e\x32\x34\ +\x32\x2d\x2e\x36\x35\x35\x76\x2e\x34\x36\x31\x68\x2d\x31\x2e\x31\ +\x36\x39\x7a\x6d\x32\x2e\x31\x35\x31\x20\x32\x2e\x34\x39\x34\x63\ +\x2d\x2e\x33\x36\x33\x20\x30\x2d\x2e\x36\x34\x2e\x31\x39\x39\x2d\ +\x2e\x38\x32\x34\x2e\x35\x39\x37\x6c\x2d\x2e\x31\x2e\x32\x39\x35\ +\x63\x2d\x2e\x30\x34\x2e\x31\x36\x32\x2d\x2e\x30\x35\x39\x2e\x33\ +\x33\x34\x2d\x2e\x30\x35\x39\x2e\x35\x31\x34\x20\x30\x20\x2e\x36\ +\x31\x35\x2e\x31\x36\x37\x20\x31\x2e\x30\x34\x31\x2e\x35\x30\x33\ +\x20\x31\x2e\x32\x37\x39\x2e\x31\x33\x39\x2e\x31\x31\x2e\x32\x39\ +\x38\x2e\x31\x36\x2e\x34\x38\x2e\x31\x36\x2e\x33\x35\x37\x20\x30\ +\x20\x2e\x36\x33\x33\x2d\x2e\x31\x39\x2e\x38\x31\x39\x2d\x2e\x35\ +\x37\x38\x2e\x31\x31\x31\x2d\x2e\x32\x34\x32\x2e\x31\x36\x37\x2d\ +\x2e\x35\x32\x31\x2e\x31\x36\x37\x2d\x2e\x38\x33\x35\x20\x30\x2d\ +\x2e\x35\x37\x35\x2d\x2e\x31\x35\x37\x2d\x2e\x39\x38\x38\x2d\x2e\ +\x34\x37\x2d\x31\x2e\x32\x34\x37\x2d\x2e\x31\x35\x35\x2d\x2e\x31\ +\x32\x34\x2d\x2e\x33\x32\x37\x2d\x2e\x31\x38\x35\x2d\x2e\x35\x31\ +\x36\x2d\x2e\x31\x38\x35\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\ +\x32\x65\x33\x34\x33\x36\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\ +\x20\x64\x3d\x22\x6d\x33\x39\x2e\x34\x33\x35\x20\x33\x31\x2e\x39\ +\x36\x68\x2d\x31\x2e\x31\x31\x39\x63\x2d\x2e\x30\x39\x33\x2d\x2e\ +\x34\x33\x32\x2d\x2e\x32\x36\x35\x2d\x2e\x36\x39\x2d\x2e\x35\x31\ +\x2d\x2e\x37\x37\x33\x6c\x2d\x2e\x32\x33\x31\x2d\x2e\x30\x35\x31\ +\x63\x2d\x2e\x30\x32\x37\x20\x30\x2d\x2e\x30\x35\x37\x20\x30\x2d\ +\x2e\x30\x39\x33\x20\x30\x2d\x2e\x33\x34\x33\x20\x30\x2d\x2e\x35\ +\x38\x34\x2e\x31\x32\x38\x2d\x2e\x37\x32\x36\x2e\x33\x38\x36\x2d\ +\x2e\x31\x34\x38\x2e\x32\x38\x35\x2d\x2e\x32\x32\x35\x2e\x36\x35\ +\x32\x2d\x2e\x32\x32\x35\x20\x31\x2e\x31\x30\x34\x20\x30\x20\x2e\ +\x36\x38\x37\x2e\x31\x38\x35\x20\x31\x2e\x31\x32\x37\x2e\x35\x35\ +\x33\x20\x31\x2e\x33\x32\x32\x2e\x31\x32\x34\x2e\x30\x36\x35\x2e\ +\x32\x35\x34\x2e\x31\x30\x31\x2e\x33\x39\x39\x2e\x31\x30\x31\x2e\ +\x33\x33\x34\x20\x30\x20\x2e\x35\x37\x31\x2d\x2e\x31\x35\x32\x2e\ +\x37\x31\x34\x2d\x2e\x34\x36\x34\x2e\x30\x34\x38\x2d\x2e\x30\x39\ +\x39\x2e\x30\x38\x34\x2d\x2e\x32\x31\x39\x2e\x31\x31\x38\x2d\x2e\ +\x33\x35\x32\x68\x31\x2e\x31\x31\x39\x63\x2d\x2e\x30\x37\x33\x2e\ +\x36\x39\x34\x2d\x2e\x33\x37\x34\x20\x31\x2e\x31\x39\x36\x2d\x2e\ +\x39\x31\x20\x31\x2e\x35\x30\x36\x2d\x2e\x33\x30\x37\x2e\x31\x37\ +\x34\x2d\x2e\x36\x35\x36\x2e\x32\x35\x39\x2d\x31\x2e\x30\x34\x39\ +\x2e\x32\x35\x39\x2d\x2e\x38\x37\x39\x20\x30\x2d\x31\x2e\x34\x39\ +\x34\x2d\x2e\x33\x34\x36\x2d\x31\x2e\x38\x33\x38\x2d\x31\x2e\x30\ +\x34\x33\x2d\x2e\x31\x38\x36\x2d\x2e\x33\x37\x2d\x2e\x32\x37\x37\ +\x2d\x2e\x38\x31\x31\x2d\x2e\x32\x37\x37\x2d\x31\x2e\x33\x33\x33\ +\x20\x30\x2d\x31\x2e\x30\x34\x36\x2e\x33\x33\x33\x2d\x31\x2e\x37\ +\x36\x36\x2e\x39\x39\x35\x2d\x32\x2e\x31\x35\x39\x2e\x33\x31\x39\ +\x2d\x2e\x31\x38\x34\x2e\x36\x39\x36\x2d\x2e\x32\x37\x38\x20\x31\ +\x2e\x31\x33\x35\x2d\x2e\x32\x37\x38\x2e\x37\x36\x38\x20\x30\x20\ +\x31\x2e\x33\x32\x32\x2e\x32\x37\x34\x20\x31\x2e\x36\x36\x31\x2e\ +\x38\x32\x35\x2e\x31\x30\x37\x2e\x31\x38\x35\x2e\x31\x38\x35\x2e\ +\x33\x38\x39\x2e\x32\x33\x34\x2e\x36\x31\x32\x2e\x30\x32\x34\x2e\ +\x31\x30\x38\x2e\x30\x34\x2e\x32\x31\x39\x2e\x30\x35\x2e\x33\x33\ +\x38\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x32\x65\x33\x34\x33\ +\x36\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\ +\x67\x3e\x0d\x0a\ \x00\x00\x01\x2d\ \x3c\ \x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x33\x32\x22\x20\ @@ -1289,6 +1930,946 @@ \xff\x17\x50\xec\x02\x31\x9d\x8e\x5c\x6f\x17\x88\x36\x43\x01\x31\ \xb4\xec\x89\x33\x75\xec\x1a\x10\x05\xd1\xca\x7f\x0d\x70\x26\x77\ \x2e\x70\xfd\x0f\x04\xde\x58\x19\ +\x00\x00\x0d\xea\ +\x3c\ +\x73\x76\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x36\ +\x34\x20\x36\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\ +\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\ +\x34\x20\x36\x34\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\x22\ +\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\ +\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\ +\x76\x67\x22\x3e\x0d\x0a\x3c\x67\x20\x66\x69\x6c\x6c\x3d\x22\x23\ +\x31\x61\x31\x61\x31\x61\x22\x20\x6f\x70\x61\x63\x69\x74\x79\x3d\ +\x22\x2e\x37\x35\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\ +\x22\x6d\x33\x35\x2e\x32\x32\x39\x20\x35\x39\x2e\x31\x37\x31\x63\ +\x2d\x34\x2e\x35\x31\x36\x20\x30\x2d\x39\x2e\x33\x35\x38\x2d\x32\ +\x2e\x30\x31\x32\x2d\x31\x34\x2e\x33\x39\x34\x2d\x35\x2e\x39\x38\ +\x2d\x31\x2e\x34\x34\x31\x2d\x31\x2e\x31\x33\x39\x2d\x32\x2e\x37\ +\x36\x32\x2d\x32\x2e\x33\x32\x39\x2d\x33\x2e\x39\x32\x33\x2d\x33\ +\x2e\x35\x33\x36\x2d\x35\x2e\x30\x31\x34\x2d\x35\x2e\x32\x31\x35\ +\x2d\x37\x2e\x35\x35\x37\x2d\x31\x31\x2e\x32\x36\x36\x2d\x37\x2e\ +\x35\x35\x37\x2d\x31\x37\x2e\x39\x38\x33\x20\x30\x2d\x32\x2e\x34\ +\x30\x35\x2e\x35\x32\x2d\x35\x2e\x30\x39\x33\x20\x31\x2e\x35\x34\ +\x34\x2d\x37\x2e\x39\x38\x38\x6c\x2e\x33\x35\x34\x2d\x31\x68\x2d\ +\x2e\x30\x35\x31\x63\x31\x2e\x31\x38\x2d\x33\x2e\x30\x37\x31\x20\ +\x32\x2e\x36\x36\x33\x2d\x35\x2e\x36\x39\x20\x34\x2e\x34\x32\x36\ +\x2d\x37\x2e\x38\x32\x20\x36\x2e\x39\x36\x31\x20\x32\x2e\x33\x31\ +\x31\x20\x38\x2e\x36\x33\x36\x20\x32\x2e\x35\x38\x32\x20\x39\x2e\ +\x32\x38\x37\x20\x32\x2e\x35\x38\x32\x20\x31\x2e\x33\x36\x32\x20\ +\x30\x20\x33\x2e\x31\x34\x39\x2d\x2e\x35\x31\x32\x20\x35\x2e\x34\ +\x36\x35\x2d\x31\x2e\x35\x36\x35\x20\x32\x2e\x30\x38\x38\x2d\x2e\ +\x39\x34\x37\x20\x33\x2e\x36\x39\x34\x2d\x31\x2e\x34\x32\x38\x20\ +\x34\x2e\x37\x37\x33\x2d\x31\x2e\x34\x32\x38\x20\x31\x2e\x31\x33\ +\x31\x20\x30\x20\x32\x2e\x37\x39\x2e\x34\x38\x31\x20\x34\x2e\x39\ +\x33\x32\x20\x31\x2e\x34\x33\x31\x20\x32\x2e\x33\x35\x39\x20\x31\ +\x2e\x30\x35\x31\x20\x34\x2e\x31\x34\x36\x20\x31\x2e\x35\x36\x32\ +\x20\x35\x2e\x34\x36\x31\x20\x31\x2e\x35\x36\x32\x2e\x36\x37\x36\ +\x20\x30\x20\x32\x2e\x33\x38\x36\x2d\x2e\x32\x37\x32\x20\x39\x2e\ +\x33\x35\x39\x2d\x32\x2e\x35\x38\x35\x20\x31\x2e\x39\x38\x33\x20\ +\x32\x2e\x33\x31\x38\x20\x33\x2e\x35\x37\x20\x35\x2e\x32\x37\x39\ +\x20\x34\x2e\x37\x32\x32\x20\x38\x2e\x38\x30\x39\x6c\x2e\x31\x36\ +\x39\x2e\x35\x31\x38\x68\x2e\x30\x38\x39\x63\x2e\x39\x30\x38\x20\ +\x32\x2e\x37\x31\x36\x20\x31\x2e\x33\x36\x38\x20\x35\x2e\x32\x33\ +\x31\x20\x31\x2e\x33\x36\x38\x20\x37\x2e\x34\x38\x35\x20\x30\x20\ +\x38\x2e\x33\x31\x31\x2d\x33\x2e\x38\x38\x35\x20\x31\x35\x2e\x35\ +\x37\x2d\x31\x31\x2e\x35\x34\x36\x20\x32\x31\x2e\x35\x37\x37\x2d\ +\x34\x2e\x39\x39\x36\x20\x33\x2e\x39\x32\x39\x2d\x39\x2e\x38\x36\ +\x36\x20\x35\x2e\x39\x32\x31\x2d\x31\x34\x2e\x34\x37\x38\x20\x35\ +\x2e\x39\x32\x31\x7a\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\ +\x64\x3d\x22\x6d\x33\x35\x2e\x31\x35\x32\x20\x31\x35\x2e\x32\x30\ +\x32\x63\x2e\x37\x30\x35\x20\x30\x20\x32\x2e\x30\x38\x2e\x32\x33\ +\x37\x20\x34\x2e\x36\x32\x35\x20\x31\x2e\x33\x36\x35\x20\x32\x2e\ +\x34\x35\x39\x20\x31\x2e\x30\x39\x35\x20\x34\x2e\x33\x34\x35\x20\ +\x31\x2e\x36\x32\x38\x20\x35\x2e\x37\x36\x38\x20\x31\x2e\x36\x32\ +\x38\x2e\x38\x31\x37\x20\x30\x20\x32\x2e\x35\x35\x37\x2d\x2e\x33\ +\x30\x31\x20\x39\x2e\x31\x31\x2d\x32\x2e\x34\x36\x32\x20\x31\x2e\ +\x37\x37\x31\x20\x32\x2e\x31\x38\x34\x20\x33\x2e\x32\x20\x34\x2e\ +\x39\x32\x36\x20\x34\x2e\x32\x35\x38\x20\x38\x2e\x31\x36\x38\x6c\ +\x2e\x33\x34\x31\x20\x31\x2e\x30\x33\x35\x68\x2e\x30\x38\x35\x63\ +\x2e\x37\x37\x32\x20\x32\x2e\x34\x34\x32\x20\x31\x2e\x31\x36\x33\ +\x20\x34\x2e\x37\x30\x34\x20\x31\x2e\x31\x36\x33\x20\x36\x2e\x37\ +\x33\x35\x20\x30\x20\x38\x2e\x30\x36\x39\x2d\x33\x2e\x37\x38\x38\ +\x20\x31\x35\x2e\x31\x32\x39\x2d\x31\x31\x2e\x32\x36\x31\x20\x32\ +\x30\x2e\x39\x38\x38\x2d\x34\x2e\x38\x35\x38\x20\x33\x2e\x38\x32\ +\x33\x2d\x39\x2e\x35\x37\x33\x20\x35\x2e\x37\x36\x32\x2d\x31\x34\ +\x2e\x30\x31\x33\x20\x35\x2e\x37\x36\x32\x2d\x34\x2e\x33\x34\x33\ +\x20\x30\x2d\x39\x2e\x30\x33\x2d\x31\x2e\x39\x35\x38\x2d\x31\x33\ +\x2e\x39\x32\x39\x2d\x35\x2e\x38\x31\x38\x2d\x31\x2e\x34\x31\x35\ +\x2d\x31\x2e\x31\x31\x38\x2d\x32\x2e\x37\x31\x2d\x32\x2e\x32\x38\ +\x35\x2d\x33\x2e\x38\x34\x38\x2d\x33\x2e\x34\x36\x39\x2d\x34\x2e\ +\x38\x37\x35\x2d\x35\x2e\x30\x37\x2d\x37\x2e\x33\x34\x37\x2d\x31\ +\x30\x2e\x39\x34\x35\x2d\x37\x2e\x33\x34\x37\x2d\x31\x37\x2e\x34\ +\x36\x32\x20\x30\x2d\x32\x2e\x33\x31\x39\x2e\x35\x30\x35\x2d\x34\ +\x2e\x39\x32\x33\x20\x31\x2e\x35\x30\x31\x2d\x37\x2e\x37\x33\x38\ +\x6c\x2e\x37\x30\x38\x2d\x32\x68\x2d\x2e\x30\x30\x33\x63\x2e\x39\ +\x39\x36\x2d\x32\x2e\x33\x36\x38\x20\x32\x2e\x31\x39\x33\x2d\x34\ +\x2e\x34\x34\x33\x20\x33\x2e\x35\x37\x34\x2d\x36\x2e\x31\x39\x34\ +\x20\x36\x2e\x35\x33\x34\x20\x32\x2e\x31\x35\x36\x20\x38\x2e\x32\ +\x34\x31\x20\x32\x2e\x34\x35\x37\x20\x39\x2e\x30\x32\x39\x20\x32\ +\x2e\x34\x35\x37\x20\x31\x2e\x34\x37\x31\x20\x30\x20\x33\x2e\x33\ +\x36\x2d\x2e\x35\x33\x34\x20\x35\x2e\x37\x37\x34\x2d\x31\x2e\x36\ +\x33\x32\x20\x32\x2e\x34\x38\x31\x2d\x31\x2e\x31\x32\x37\x20\x33\ +\x2e\x37\x39\x37\x2d\x31\x2e\x33\x36\x33\x20\x34\x2e\x34\x36\x35\ +\x2d\x31\x2e\x33\x36\x33\x6d\x30\x2d\x31\x2e\x35\x63\x2d\x31\x2e\ +\x31\x39\x37\x20\x30\x2d\x32\x2e\x38\x39\x36\x2e\x35\x30\x33\x2d\ +\x35\x2e\x30\x38\x33\x20\x31\x2e\x34\x39\x35\x2d\x32\x2e\x31\x38\ +\x37\x2e\x39\x39\x35\x2d\x33\x2e\x39\x30\x38\x20\x31\x2e\x34\x39\ +\x38\x2d\x35\x2e\x31\x35\x34\x20\x31\x2e\x34\x39\x38\x2d\x2e\x39\ +\x36\x33\x20\x30\x2d\x34\x2e\x31\x34\x36\x2d\x2e\x39\x30\x37\x2d\ +\x39\x2e\x35\x33\x31\x2d\x32\x2e\x37\x30\x34\x2d\x32\x2e\x30\x36\ +\x32\x20\x32\x2e\x33\x37\x35\x2d\x33\x2e\x37\x35\x36\x20\x35\x2e\ +\x33\x34\x37\x2d\x35\x2e\x30\x36\x33\x20\x38\x2e\x39\x30\x37\x2d\ +\x2e\x30\x37\x33\x2e\x31\x37\x36\x2d\x2e\x31\x33\x35\x2e\x33\x35\ +\x35\x2d\x2e\x32\x2e\x35\x33\x35\x68\x2e\x30\x37\x32\x63\x2d\x31\ +\x2e\x30\x36\x20\x32\x2e\x39\x39\x35\x2d\x31\x2e\x35\x38\x37\x20\ +\x35\x2e\x37\x33\x39\x2d\x31\x2e\x35\x38\x37\x20\x38\x2e\x32\x33\ +\x38\x20\x30\x20\x36\x2e\x39\x35\x34\x20\x32\x2e\x35\x38\x39\x20\ +\x31\x33\x2e\x31\x31\x39\x20\x37\x2e\x37\x36\x36\x20\x31\x38\x2e\ +\x35\x30\x32\x20\x31\x2e\x31\x39\x35\x20\x31\x2e\x32\x34\x33\x20\ +\x32\x2e\x35\x32\x38\x20\x32\x2e\x34\x34\x33\x20\x33\x2e\x39\x39\ +\x39\x20\x33\x2e\x36\x30\x35\x20\x35\x2e\x31\x39\x38\x20\x34\x2e\ +\x30\x39\x37\x20\x31\x30\x2e\x31\x34\x36\x20\x36\x2e\x31\x34\x32\ +\x20\x31\x34\x2e\x38\x35\x38\x20\x36\x2e\x31\x34\x32\x20\x34\x2e\ +\x38\x31\x33\x20\x30\x20\x39\x2e\x37\x39\x33\x2d\x32\x2e\x30\x33\ +\x32\x20\x31\x34\x2e\x39\x34\x2d\x36\x2e\x30\x38\x33\x20\x37\x2e\ +\x38\x38\x38\x2d\x36\x2e\x31\x38\x34\x20\x31\x31\x2e\x38\x33\x33\ +\x2d\x31\x33\x2e\x35\x37\x37\x20\x31\x31\x2e\x38\x33\x33\x2d\x32\ +\x32\x2e\x31\x36\x37\x20\x30\x2d\x32\x2e\x35\x2d\x2e\x35\x33\x2d\ +\x35\x2e\x32\x34\x2d\x31\x2e\x35\x38\x33\x2d\x38\x2e\x32\x33\x35\ +\x68\x2d\x2e\x30\x30\x34\x2d\x2e\x30\x37\x32\x2d\x2e\x30\x30\x34\ +\x63\x2d\x31\x2e\x32\x35\x33\x2d\x33\x2e\x38\x34\x33\x2d\x32\x2e\ +\x39\x38\x38\x2d\x36\x2e\x39\x39\x2d\x35\x2e\x31\x39\x39\x2d\x39\ +\x2e\x34\x34\x35\x2d\x35\x2e\x33\x38\x38\x20\x31\x2e\x37\x39\x37\ +\x2d\x38\x2e\x35\x38\x36\x20\x32\x2e\x37\x30\x34\x2d\x39\x2e\x35\ +\x39\x35\x20\x32\x2e\x37\x30\x34\x2d\x31\x2e\x32\x30\x37\x20\x30\ +\x2d\x32\x2e\x39\x32\x35\x2d\x2e\x35\x30\x33\x2d\x35\x2e\x31\x35\ +\x37\x2d\x31\x2e\x34\x39\x38\x2d\x32\x2e\x32\x33\x39\x2d\x2e\x39\ +\x39\x31\x2d\x33\x2e\x39\x37\x39\x2d\x31\x2e\x34\x39\x34\x2d\x35\ +\x2e\x32\x33\x36\x2d\x31\x2e\x34\x39\x34\x7a\x22\x2f\x3e\x0d\x0a\ +\x3c\x2f\x67\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\ +\x32\x39\x2e\x37\x36\x37\x20\x35\x31\x2e\x33\x38\x35\x63\x2d\x34\ +\x2e\x33\x34\x33\x20\x30\x2d\x39\x2e\x30\x33\x31\x2d\x31\x2e\x39\ +\x35\x38\x2d\x31\x33\x2e\x39\x33\x32\x2d\x35\x2e\x38\x32\x2d\x31\ +\x2e\x34\x31\x32\x2d\x31\x2e\x31\x31\x35\x2d\x32\x2e\x37\x30\x36\ +\x2d\x32\x2e\x32\x38\x31\x2d\x33\x2e\x38\x34\x36\x2d\x33\x2e\x34\ +\x36\x37\x2d\x34\x2e\x39\x34\x34\x2d\x35\x2e\x31\x34\x33\x2d\x37\ +\x2e\x33\x34\x38\x2d\x31\x30\x2e\x38\x35\x33\x2d\x37\x2e\x33\x34\ +\x38\x2d\x31\x37\x2e\x34\x35\x38\x20\x30\x2d\x32\x2e\x33\x32\x2e\ +\x35\x30\x35\x2d\x34\x2e\x39\x32\x34\x20\x31\x2e\x35\x30\x31\x2d\ +\x37\x2e\x37\x33\x39\x6c\x2e\x37\x30\x38\x2d\x32\x68\x30\x63\x31\ +\x2e\x30\x30\x33\x2d\x32\x2e\x33\x38\x31\x20\x32\x2e\x31\x39\x38\ +\x2d\x34\x2e\x34\x35\x20\x33\x2e\x35\x37\x33\x2d\x36\x2e\x31\x39\ +\x34\x20\x36\x2e\x35\x33\x31\x20\x32\x2e\x31\x35\x36\x20\x38\x2e\ +\x32\x33\x39\x20\x32\x2e\x34\x35\x37\x20\x39\x2e\x30\x33\x20\x32\ +\x2e\x34\x35\x37\x20\x31\x2e\x34\x37\x33\x20\x30\x20\x33\x2e\x33\ +\x36\x32\x2d\x2e\x35\x33\x34\x20\x35\x2e\x37\x37\x35\x2d\x31\x2e\ +\x36\x33\x33\x20\x32\x2e\x34\x37\x37\x2d\x31\x2e\x31\x32\x34\x20\ +\x33\x2e\x37\x39\x35\x2d\x31\x2e\x33\x36\x20\x34\x2e\x34\x36\x34\ +\x2d\x31\x2e\x33\x36\x2e\x37\x30\x34\x20\x30\x20\x32\x2e\x30\x37\ +\x37\x2e\x32\x33\x37\x20\x34\x2e\x36\x31\x38\x20\x31\x2e\x33\x36\ +\x36\x20\x32\x2e\x34\x35\x37\x20\x31\x2e\x30\x39\x35\x20\x34\x2e\ +\x33\x34\x34\x20\x31\x2e\x36\x32\x37\x20\x35\x2e\x37\x36\x37\x20\ +\x31\x2e\x36\x32\x37\x2e\x38\x31\x39\x20\x30\x20\x32\x2e\x35\x36\ +\x2d\x2e\x33\x30\x31\x20\x39\x2e\x31\x31\x2d\x32\x2e\x34\x36\x32\ +\x20\x31\x2e\x37\x37\x31\x20\x32\x2e\x31\x38\x35\x20\x33\x2e\x32\ +\x30\x32\x20\x34\x2e\x39\x32\x38\x20\x34\x2e\x32\x35\x39\x20\x38\ +\x2e\x31\x36\x38\x6c\x2e\x33\x33\x37\x20\x31\x2e\x30\x33\x35\x68\ +\x2e\x30\x38\x38\x63\x2e\x37\x37\x32\x20\x32\x2e\x34\x34\x20\x31\ +\x2e\x31\x36\x33\x20\x34\x2e\x37\x30\x32\x20\x31\x2e\x31\x36\x33\ +\x20\x36\x2e\x37\x33\x36\x20\x30\x20\x38\x2e\x31\x37\x39\x2d\x33\ +\x2e\x36\x38\x33\x20\x31\x35\x2e\x30\x34\x32\x2d\x31\x31\x2e\x32\ +\x35\x38\x20\x32\x30\x2e\x39\x38\x31\x2d\x34\x2e\x38\x36\x20\x33\ +\x2e\x38\x32\x34\x2d\x39\x2e\x35\x37\x33\x20\x35\x2e\x37\x36\x33\ +\x2d\x31\x34\x2e\x30\x30\x39\x20\x35\x2e\x37\x36\x33\x7a\x22\x20\ +\x66\x69\x6c\x6c\x3d\x22\x23\x65\x65\x66\x33\x66\x65\x22\x2f\x3e\ +\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x32\x39\x2e\x36\ +\x39\x31\x20\x39\x2e\x36\x36\x39\x63\x2e\x33\x36\x39\x20\x30\x20\ +\x31\x2e\x34\x39\x37\x2e\x31\x32\x31\x20\x34\x2e\x30\x30\x37\x20\ +\x31\x2e\x32\x33\x35\x20\x32\x2e\x36\x39\x31\x20\x31\x2e\x31\x39\ +\x39\x20\x34\x2e\x37\x31\x38\x20\x31\x2e\x37\x35\x38\x20\x36\x2e\ +\x33\x37\x38\x20\x31\x2e\x37\x35\x38\x2e\x38\x37\x32\x20\x30\x20\ +\x32\x2e\x33\x34\x36\x2d\x2e\x31\x38\x33\x20\x38\x2e\x35\x36\x36\ +\x2d\x32\x2e\x32\x30\x36\x20\x31\x2e\x33\x37\x32\x20\x31\x2e\x38\ +\x39\x39\x20\x32\x2e\x35\x30\x35\x20\x34\x2e\x32\x30\x35\x20\x33\ +\x2e\x33\x37\x36\x20\x36\x2e\x38\x37\x37\x6c\x2e\x36\x37\x38\x20\ +\x32\x2e\x30\x37\x68\x2e\x30\x35\x34\x63\x2e\x35\x32\x31\x20\x31\ +\x2e\x38\x39\x31\x2e\x37\x38\x33\x20\x33\x2e\x36\x34\x36\x2e\x37\ +\x38\x33\x20\x35\x2e\x32\x33\x36\x20\x30\x20\x37\x2e\x36\x38\x38\ +\x2d\x33\x2e\x34\x39\x34\x20\x31\x34\x2e\x31\x36\x35\x2d\x31\x30\ +\x2e\x36\x38\x38\x20\x31\x39\x2e\x38\x30\x34\x2d\x34\x2e\x35\x38\ +\x37\x20\x33\x2e\x36\x31\x2d\x38\x2e\x39\x38\x37\x20\x35\x2e\x34\ +\x34\x31\x2d\x31\x33\x2e\x30\x37\x39\x20\x35\x2e\x34\x34\x31\x2d\ +\x33\x2e\x39\x39\x38\x20\x30\x2d\x38\x2e\x33\x37\x33\x2d\x31\x2e\ +\x38\x35\x2d\x31\x33\x2e\x30\x30\x31\x2d\x35\x2e\x34\x39\x37\x2d\ +\x31\x2e\x33\x35\x39\x2d\x31\x2e\x30\x37\x33\x2d\x32\x2e\x36\x30\ +\x33\x2d\x32\x2e\x31\x39\x33\x2d\x33\x2e\x36\x39\x35\x2d\x33\x2e\ +\x33\x33\x2d\x34\x2e\x36\x36\x32\x2d\x34\x2e\x38\x34\x39\x2d\x36\ +\x2e\x39\x32\x39\x2d\x31\x30\x2e\x32\x31\x39\x2d\x36\x2e\x39\x32\ +\x39\x2d\x31\x36\x2e\x34\x31\x38\x20\x30\x2d\x32\x2e\x31\x34\x39\ +\x2e\x34\x37\x36\x2d\x34\x2e\x35\x38\x34\x20\x31\x2e\x34\x31\x36\ +\x2d\x37\x2e\x32\x33\x38\x6c\x2e\x37\x30\x39\x2d\x32\x2e\x30\x30\ +\x33\x63\x2e\x37\x38\x31\x2d\x31\x2e\x38\x34\x32\x20\x31\x2e\x36\ +\x38\x38\x2d\x33\x2e\x34\x39\x32\x20\x32\x2e\x37\x31\x31\x2d\x34\ +\x2e\x39\x33\x32\x20\x36\x2e\x31\x38\x38\x20\x32\x2e\x30\x31\x34\ +\x20\x37\x2e\x36\x33\x31\x20\x32\x2e\x31\x39\x36\x20\x38\x2e\x34\ +\x37\x35\x20\x32\x2e\x31\x39\x36\x20\x31\x2e\x36\x39\x31\x20\x30\ +\x20\x33\x2e\x37\x38\x34\x2d\x2e\x35\x37\x38\x20\x36\x2e\x33\x39\ +\x34\x2d\x31\x2e\x37\x36\x36\x20\x32\x2e\x34\x34\x2d\x31\x2e\x31\ +\x30\x37\x20\x33\x2e\x35\x30\x32\x2d\x31\x2e\x32\x32\x37\x20\x33\ +\x2e\x38\x34\x35\x2d\x31\x2e\x32\x32\x37\x6d\x30\x2d\x33\x63\x2d\ +\x31\x2e\x31\x39\x38\x20\x30\x2d\x32\x2e\x38\x39\x39\x2e\x35\x30\ +\x33\x2d\x35\x2e\x30\x38\x35\x20\x31\x2e\x34\x39\x35\x2d\x32\x2e\ +\x31\x38\x36\x2e\x39\x39\x35\x2d\x33\x2e\x39\x30\x38\x20\x31\x2e\ +\x34\x39\x38\x2d\x35\x2e\x31\x35\x34\x20\x31\x2e\x34\x39\x38\x2d\ +\x2e\x39\x36\x34\x20\x30\x2d\x34\x2e\x31\x34\x36\x2d\x2e\x39\x30\ +\x36\x2d\x39\x2e\x35\x33\x31\x2d\x32\x2e\x37\x30\x34\x2d\x32\x2e\ +\x30\x36\x31\x20\x32\x2e\x33\x37\x35\x2d\x33\x2e\x37\x35\x36\x20\ +\x35\x2e\x33\x34\x37\x2d\x35\x2e\x30\x36\x33\x20\x38\x2e\x39\x30\ +\x37\x2d\x2e\x30\x37\x32\x2e\x31\x37\x36\x2d\x2e\x31\x33\x35\x2e\ +\x33\x35\x35\x2d\x2e\x32\x2e\x35\x33\x35\x68\x2e\x30\x37\x32\x63\ +\x2d\x31\x2e\x30\x36\x20\x32\x2e\x39\x39\x35\x2d\x31\x2e\x35\x38\ +\x37\x20\x35\x2e\x37\x33\x39\x2d\x31\x2e\x35\x38\x37\x20\x38\x2e\ +\x32\x33\x39\x20\x30\x20\x36\x2e\x39\x35\x33\x20\x32\x2e\x35\x38\ +\x39\x20\x31\x33\x2e\x31\x31\x34\x20\x37\x2e\x37\x36\x36\x20\x31\ +\x38\x2e\x34\x39\x38\x20\x31\x2e\x31\x39\x36\x20\x31\x2e\x32\x34\ +\x34\x20\x32\x2e\x35\x32\x38\x20\x32\x2e\x34\x34\x34\x20\x33\x2e\ +\x39\x39\x39\x20\x33\x2e\x36\x30\x35\x20\x35\x2e\x31\x39\x38\x20\ +\x34\x2e\x30\x39\x37\x20\x31\x30\x2e\x31\x34\x36\x20\x36\x2e\x31\ +\x34\x33\x20\x31\x34\x2e\x38\x36\x20\x36\x2e\x31\x34\x33\x20\x34\ +\x2e\x38\x30\x36\x20\x30\x20\x39\x2e\x37\x38\x37\x2d\x32\x2e\x30\ +\x33\x32\x20\x31\x34\x2e\x39\x33\x34\x2d\x36\x2e\x30\x38\x34\x20\ +\x37\x2e\x38\x38\x37\x2d\x36\x2e\x31\x38\x34\x20\x31\x31\x2e\x38\ +\x33\x32\x2d\x31\x33\x2e\x35\x37\x32\x20\x31\x31\x2e\x38\x33\x32\ +\x2d\x32\x32\x2e\x31\x36\x32\x20\x30\x2d\x32\x2e\x35\x2d\x2e\x35\ +\x32\x39\x2d\x35\x2e\x32\x34\x31\x2d\x31\x2e\x35\x38\x33\x2d\x38\ +\x2e\x32\x33\x36\x68\x2d\x2e\x30\x30\x33\x2d\x2e\x30\x37\x33\x2d\ +\x2e\x30\x30\x33\x63\x2d\x31\x2e\x32\x35\x33\x2d\x33\x2e\x38\x34\ +\x33\x2d\x32\x2e\x39\x38\x39\x2d\x36\x2e\x39\x39\x2d\x35\x2e\x32\ +\x2d\x39\x2e\x34\x34\x35\x2d\x35\x2e\x33\x38\x37\x20\x31\x2e\x37\ +\x39\x37\x2d\x38\x2e\x35\x38\x35\x20\x32\x2e\x37\x30\x34\x2d\x39\ +\x2e\x35\x39\x35\x20\x32\x2e\x37\x30\x34\x2d\x31\x2e\x32\x30\x36\ +\x20\x30\x2d\x32\x2e\x39\x32\x34\x2d\x2e\x35\x30\x33\x2d\x35\x2e\ +\x31\x35\x37\x2d\x31\x2e\x34\x39\x38\x2d\x32\x2e\x32\x33\x34\x2d\ +\x2e\x39\x39\x32\x2d\x33\x2e\x39\x37\x35\x2d\x31\x2e\x34\x39\x35\ +\x2d\x35\x2e\x32\x32\x39\x2d\x31\x2e\x34\x39\x35\x7a\x22\x20\x66\ +\x69\x6c\x6c\x3d\x22\x23\x61\x63\x63\x33\x66\x63\x22\x2f\x3e\x0d\ +\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\ +\x00\x00\x04\xe3\ +\x3c\ +\x73\x76\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x2d\x34\x20\x2d\x34\ +\x20\x32\x34\x20\x32\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\ +\x32\x34\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x2d\x34\x20\ +\x2d\x34\x20\x32\x34\x20\x32\x34\x22\x20\x77\x69\x64\x74\x68\x3d\ +\x22\x32\x34\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\ +\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\ +\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\ +\x6b\x22\x3e\x0d\x0a\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x20\x69\x64\x3d\x22\x61\x22\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ +\x61\x74\x72\x69\x78\x28\x31\x20\x30\x20\x30\x20\x2d\x31\x20\x2d\ +\x32\x39\x34\x20\x2d\x33\x33\x35\x29\x22\x20\x67\x72\x61\x64\x69\ +\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\ +\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x20\x78\x31\x3d\x22\x33\x30\ +\x33\x2e\x35\x34\x38\x38\x22\x20\x78\x32\x3d\x22\x33\x30\x32\x2e\ +\x32\x38\x38\x31\x22\x20\x79\x31\x3d\x22\x2d\x33\x36\x31\x2e\x32\ +\x31\x37\x33\x22\x20\x79\x32\x3d\x22\x2d\x33\x35\x39\x2e\x39\x35\ +\x36\x36\x22\x3e\x0d\x0a\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\ +\x65\x74\x3d\x22\x30\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\ +\x72\x3d\x22\x23\x62\x61\x62\x64\x62\x36\x22\x2f\x3e\x0d\x0a\x3c\ +\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x20\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x62\x61\x62\ +\x64\x62\x36\x22\x20\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3d\x22\x30\x22\x2f\x3e\x0d\x0a\x3c\x2f\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0d\x0a\x3c\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x20\x69\x64\x3d\x22\ +\x62\x22\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\ +\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x31\x20\x30\ +\x20\x30\x20\x2d\x31\x20\x2d\x32\x39\x34\x20\x2d\x33\x33\x35\x29\ +\x22\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\ +\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\ +\x20\x78\x31\x3d\x22\x33\x30\x38\x2e\x35\x38\x37\x39\x22\x20\x78\ +\x32\x3d\x22\x33\x30\x37\x2e\x33\x32\x36\x38\x22\x20\x79\x31\x3d\ +\x22\x2d\x33\x35\x34\x2e\x39\x31\x37\x35\x22\x20\x79\x32\x3d\x22\ +\x2d\x33\x35\x33\x2e\x36\x35\x36\x34\x22\x3e\x0d\x0a\x3c\x73\x74\ +\x6f\x70\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x20\x73\x74\ +\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x38\x38\x38\x61\x38\ +\x35\x22\x2f\x3e\x0d\x0a\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\ +\x65\x74\x3d\x22\x31\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\ +\x72\x3d\x22\x23\x62\x33\x62\x34\x62\x31\x22\x2f\x3e\x0d\x0a\x3c\ +\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\ +\x0d\x0a\x3c\x67\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\ +\x63\x61\x70\x3d\x22\x72\x6f\x75\x6e\x64\x22\x20\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\ +\x6e\x64\x22\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\ +\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x30\x20\x2d\x31\x36\x29\x22\ +\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x36\x2e\x30\ +\x39\x31\x20\x32\x38\x2e\x34\x31\x34\x63\x30\x20\x30\x2d\x32\x2e\ +\x35\x32\x33\x20\x33\x2e\x37\x38\x33\x2d\x37\x2e\x35\x36\x38\x20\ +\x35\x2e\x30\x34\x35\x20\x33\x2e\x35\x30\x33\x2e\x30\x35\x39\x20\ +\x31\x30\x2e\x30\x39\x20\x30\x20\x31\x30\x2e\x30\x39\x2d\x33\x2e\ +\x37\x38\x33\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x35\x35\x35\ +\x37\x35\x33\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x35\x35\ +\x35\x37\x35\x33\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\ +\x3d\x22\x6d\x39\x2e\x32\x34\x34\x20\x32\x32\x2e\x37\x33\x39\x6c\ +\x33\x2e\x37\x38\x33\x20\x32\x2e\x35\x32\x32\x2d\x33\x2e\x37\x38\ +\x33\x20\x33\x2e\x37\x38\x33\x63\x30\x20\x30\x2d\x31\x2e\x38\x30\ +\x35\x2d\x2e\x32\x32\x33\x2d\x32\x2e\x35\x32\x32\x2d\x31\x2e\x32\ +\x36\x31\x2d\x2e\x37\x31\x38\x2d\x31\x2e\x30\x33\x37\x20\x32\x2e\ +\x36\x2d\x34\x2e\x39\x36\x35\x20\x32\x2e\x35\x32\x32\x2d\x35\x2e\ +\x30\x34\x34\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x75\x72\x6c\x28\ +\x23\x61\x29\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x38\x38\ +\x38\x61\x38\x35\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3d\x22\x2e\x37\x35\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\ +\x68\x20\x64\x3d\x22\x6d\x39\x2e\x32\x34\x34\x20\x32\x32\x2e\x37\ +\x33\x39\x63\x30\x20\x30\x20\x37\x2e\x30\x38\x32\x2d\x37\x2e\x37\ +\x39\x39\x20\x38\x2e\x31\x39\x37\x2d\x38\x2e\x31\x39\x38\x20\x31\ +\x2e\x31\x31\x36\x2d\x2e\x33\x39\x38\x2d\x33\x2e\x36\x39\x37\x20\ +\x31\x30\x2e\x31\x36\x32\x2d\x34\x2e\x34\x31\x34\x20\x31\x30\x2e\ +\x37\x32\x73\x2d\x33\x2e\x30\x39\x32\x2d\x31\x2e\x33\x37\x39\x2d\ +\x33\x2e\x37\x38\x33\x2d\x32\x2e\x35\x32\x32\x7a\x22\x20\x66\x69\ +\x6c\x6c\x3d\x22\x75\x72\x6c\x28\x23\x62\x29\x22\x20\x73\x74\x72\ +\x6f\x6b\x65\x3d\x22\x23\x38\x38\x38\x61\x38\x35\x22\x20\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x2e\x37\x35\x22\ +\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\ +\x0d\x0a\ +\x00\x00\x07\xb8\ +\x3c\ +\x73\x76\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x36\ +\x34\x20\x36\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\ +\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\ +\x34\x20\x36\x34\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\x22\ +\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\ +\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\ +\x76\x67\x22\x3e\x0d\x0a\x3c\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\ +\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x22\ +\x20\x66\x69\x6c\x6c\x3d\x22\x23\x32\x65\x33\x34\x33\x36\x22\x3e\ +\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x32\x31\x2e\x39\ +\x31\x32\x20\x33\x38\x2e\x30\x34\x33\x76\x2e\x34\x37\x68\x2d\x34\ +\x2e\x32\x31\x36\x63\x2d\x2e\x32\x39\x35\x2d\x2e\x34\x34\x33\x2d\ +\x2e\x34\x34\x34\x2d\x2e\x39\x34\x32\x2d\x2e\x34\x34\x34\x2d\x31\ +\x2e\x34\x39\x39\x2d\x31\x2e\x33\x36\x37\x20\x31\x2e\x34\x32\x33\ +\x2d\x32\x2e\x38\x38\x34\x20\x32\x2e\x31\x33\x37\x2d\x34\x2e\x35\ +\x34\x37\x20\x32\x2e\x31\x33\x37\x2d\x31\x2e\x34\x32\x35\x20\x30\ +\x2d\x32\x2e\x35\x38\x39\x2d\x2e\x34\x37\x2d\x33\x2e\x34\x39\x34\ +\x2d\x31\x2e\x34\x31\x33\x2d\x2e\x37\x30\x33\x2d\x2e\x37\x35\x37\ +\x2d\x31\x2e\x30\x35\x34\x2d\x31\x2e\x37\x38\x33\x2d\x31\x2e\x30\ +\x35\x34\x2d\x33\x2e\x30\x37\x37\x20\x30\x2d\x32\x2e\x36\x34\x35\ +\x20\x31\x2e\x34\x36\x39\x2d\x34\x2e\x32\x31\x37\x20\x34\x2e\x34\ +\x30\x39\x2d\x34\x2e\x37\x31\x37\x6c\x31\x2e\x35\x35\x33\x2d\x2e\ +\x32\x37\x37\x63\x31\x2e\x32\x35\x36\x2d\x2e\x32\x30\x32\x20\x32\ +\x2e\x30\x32\x34\x2d\x2e\x33\x36\x38\x20\x32\x2e\x33\x30\x31\x2d\ +\x2e\x35\x2e\x30\x31\x38\x2d\x2e\x30\x32\x2e\x30\x36\x34\x2d\x2e\ +\x30\x34\x35\x2e\x31\x33\x38\x2d\x2e\x30\x38\x32\x2e\x34\x34\x34\ +\x2d\x2e\x32\x34\x32\x2e\x36\x36\x35\x2d\x2e\x36\x32\x37\x2e\x36\ +\x36\x35\x2d\x31\x2e\x31\x36\x34\x20\x30\x2d\x31\x2d\x2e\x37\x34\ +\x39\x2d\x31\x2e\x34\x39\x37\x2d\x32\x2e\x32\x34\x37\x2d\x31\x2e\ +\x34\x39\x37\x2d\x31\x2e\x32\x35\x36\x20\x30\x2d\x32\x2e\x30\x36\ +\x31\x2e\x32\x39\x36\x2d\x32\x2e\x34\x31\x32\x2e\x38\x38\x37\x6c\ +\x2d\x2e\x32\x35\x2e\x36\x36\x37\x2d\x2e\x30\x38\x33\x2e\x35\x68\ +\x2d\x33\x2e\x37\x34\x33\x63\x2e\x32\x33\x39\x2d\x33\x2e\x34\x35\ +\x38\x20\x32\x2e\x33\x37\x35\x2d\x35\x2e\x31\x38\x38\x20\x36\x2e\ +\x34\x30\x36\x2d\x35\x2e\x31\x38\x38\x20\x34\x2e\x30\x38\x35\x20\ +\x30\x20\x36\x2e\x31\x32\x38\x20\x31\x2e\x35\x33\x35\x20\x36\x2e\ +\x31\x32\x38\x20\x34\x2e\x36\x30\x34\x76\x38\x2e\x33\x31\x38\x63\ +\x30\x20\x2e\x36\x32\x39\x2e\x32\x34\x20\x31\x2e\x31\x38\x34\x2e\ +\x37\x32\x32\x20\x31\x2e\x36\x36\x33\x2e\x30\x35\x36\x2e\x30\x35\ +\x38\x2e\x31\x31\x33\x2e\x31\x31\x34\x2e\x31\x36\x38\x2e\x31\x36\ +\x38\x7a\x6d\x2d\x34\x2e\x36\x38\x37\x2d\x35\x2e\x35\x34\x33\x76\ +\x2d\x31\x2e\x30\x35\x36\x63\x2d\x2e\x33\x35\x32\x2e\x31\x36\x38\ +\x2d\x2e\x38\x39\x37\x2e\x33\x32\x35\x2d\x31\x2e\x36\x33\x36\x2e\ +\x34\x37\x31\x6c\x2d\x31\x2e\x33\x33\x32\x2e\x32\x34\x39\x63\x2d\ +\x31\x2e\x32\x32\x32\x2e\x32\x35\x38\x2d\x31\x2e\x39\x33\x33\x2e\ +\x37\x32\x32\x2d\x32\x2e\x31\x33\x35\x20\x31\x2e\x33\x38\x37\x6c\ +\x2d\x2e\x30\x38\x34\x2e\x36\x36\x37\x63\x30\x20\x2e\x39\x30\x34\ +\x2e\x34\x35\x32\x20\x31\x2e\x34\x37\x37\x20\x31\x2e\x33\x35\x39\ +\x20\x31\x2e\x37\x31\x39\x2e\x32\x32\x32\x2e\x30\x35\x35\x2e\x34\ +\x37\x32\x2e\x30\x38\x32\x2e\x37\x34\x38\x2e\x30\x38\x32\x20\x31\ +\x2e\x36\x30\x37\x20\x30\x20\x32\x2e\x35\x38\x38\x2d\x2e\x37\x36\ +\x39\x20\x32\x2e\x39\x34\x2d\x32\x2e\x33\x30\x31\x2e\x30\x39\x33\ +\x2d\x2e\x33\x36\x39\x2e\x31\x34\x2d\x2e\x37\x37\x36\x2e\x31\x34\ +\x2d\x31\x2e\x32\x31\x38\x7a\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\ +\x68\x20\x64\x3d\x22\x6d\x32\x36\x2e\x34\x36\x20\x31\x38\x2e\x33\ +\x68\x33\x2e\x38\x38\x33\x76\x37\x2e\x31\x38\x32\x63\x2e\x39\x32\ +\x34\x2d\x31\x2e\x34\x36\x20\x32\x2e\x33\x30\x32\x2d\x32\x2e\x31\ +\x39\x31\x20\x34\x2e\x31\x33\x2d\x32\x2e\x31\x39\x31\x20\x31\x2e\ +\x35\x37\x20\x30\x20\x32\x2e\x39\x32\x34\x2e\x35\x35\x35\x20\x34\ +\x2e\x30\x35\x31\x20\x31\x2e\x36\x36\x33\x2e\x32\x34\x32\x2e\x32\ +\x34\x31\x2e\x34\x35\x36\x2e\x34\x39\x32\x2e\x36\x34\x2e\x37\x34\ +\x39\x20\x31\x2e\x30\x37\x32\x20\x31\x2e\x35\x35\x34\x20\x31\x2e\ +\x36\x30\x37\x20\x33\x2e\x33\x39\x34\x20\x31\x2e\x36\x30\x37\x20\ +\x35\x2e\x35\x32\x20\x30\x20\x32\x2e\x35\x33\x32\x2d\x2e\x37\x33\ +\x31\x20\x34\x2e\x35\x37\x34\x2d\x32\x2e\x31\x39\x20\x36\x2e\x31\ +\x32\x39\x2d\x31\x2e\x31\x36\x35\x20\x31\x2e\x32\x30\x31\x2d\x32\ +\x2e\x35\x33\x32\x20\x31\x2e\x38\x30\x33\x2d\x34\x2e\x31\x30\x33\ +\x20\x31\x2e\x38\x30\x33\x2d\x31\x2e\x38\x33\x33\x20\x30\x2d\x33\ +\x2e\x32\x30\x38\x2d\x2e\x37\x32\x32\x2d\x34\x2e\x31\x33\x35\x2d\ +\x32\x2e\x31\x36\x34\x76\x31\x2e\x35\x32\x34\x68\x2d\x33\x2e\x38\ +\x38\x32\x7a\x6d\x37\x2e\x31\x35\x35\x20\x38\x2e\x32\x33\x37\x63\ +\x2d\x31\x2e\x32\x32\x34\x20\x30\x2d\x32\x2e\x31\x33\x36\x2e\x36\ +\x35\x36\x2d\x32\x2e\x37\x34\x37\x20\x31\x2e\x39\x36\x39\x6c\x2d\ +\x2e\x33\x33\x33\x2e\x39\x36\x38\x63\x2d\x2e\x31\x33\x31\x2e\x35\ +\x33\x36\x2d\x2e\x31\x39\x35\x20\x31\x2e\x31\x30\x31\x2d\x2e\x31\ +\x39\x35\x20\x31\x2e\x36\x39\x32\x20\x30\x20\x32\x2e\x30\x31\x35\ +\x2e\x35\x35\x35\x20\x33\x2e\x34\x32\x31\x20\x31\x2e\x36\x36\x35\ +\x20\x34\x2e\x32\x31\x35\x2e\x34\x36\x33\x2e\x33\x35\x34\x2e\x39\ +\x39\x36\x2e\x35\x32\x35\x20\x31\x2e\x36\x30\x37\x2e\x35\x32\x35\ +\x20\x31\x2e\x31\x38\x34\x20\x30\x20\x32\x2e\x30\x39\x31\x2d\x2e\ +\x36\x33\x36\x20\x32\x2e\x37\x31\x38\x2d\x31\x2e\x39\x31\x33\x2e\ +\x33\x36\x39\x2d\x2e\x37\x39\x34\x2e\x35\x35\x35\x2d\x31\x2e\x37\ +\x30\x39\x2e\x35\x35\x35\x2d\x32\x2e\x37\x34\x34\x20\x30\x2d\x31\ +\x2e\x38\x38\x37\x2d\x2e\x35\x31\x38\x2d\x33\x2e\x32\x35\x34\x2d\ +\x31\x2e\x35\x35\x32\x2d\x34\x2e\x31\x30\x36\x2d\x2e\x35\x31\x37\ +\x2d\x2e\x34\x30\x34\x2d\x31\x2e\x30\x39\x33\x2d\x2e\x36\x30\x36\ +\x2d\x31\x2e\x37\x31\x38\x2d\x2e\x36\x30\x36\x7a\x22\x2f\x3e\x0d\ +\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x35\x36\x2e\x32\x34\ +\x32\x20\x32\x39\x2e\x31\x34\x32\x68\x2d\x33\x2e\x37\x31\x36\x63\ +\x2d\x2e\x33\x31\x32\x2d\x31\x2e\x34\x32\x34\x2d\x2e\x38\x38\x31\ +\x2d\x32\x2e\x32\x37\x32\x2d\x31\x2e\x36\x39\x2d\x32\x2e\x35\x35\ +\x33\x6c\x2d\x2e\x37\x38\x2d\x2e\x31\x36\x35\x63\x2d\x2e\x30\x38\ +\x38\x20\x30\x2d\x2e\x31\x39\x31\x20\x30\x2d\x2e\x33\x30\x34\x20\ +\x30\x2d\x31\x2e\x31\x34\x35\x20\x30\x2d\x31\x2e\x39\x34\x36\x2e\ +\x34\x32\x35\x2d\x32\x2e\x34\x31\x33\x20\x31\x2e\x32\x37\x35\x2d\ +\x2e\x34\x39\x37\x2e\x39\x34\x32\x2d\x2e\x37\x34\x35\x20\x32\x2e\ +\x31\x35\x34\x2d\x2e\x37\x34\x35\x20\x33\x2e\x36\x33\x34\x20\x30\ +\x20\x32\x2e\x32\x35\x35\x2e\x36\x30\x37\x20\x33\x2e\x37\x30\x35\ +\x20\x31\x2e\x38\x33\x20\x34\x2e\x33\x35\x33\x2e\x34\x30\x38\x2e\ +\x32\x32\x31\x2e\x38\x34\x38\x2e\x33\x33\x34\x20\x31\x2e\x33\x33\ +\x2e\x33\x33\x34\x20\x31\x2e\x31\x31\x20\x30\x20\x31\x2e\x39\x30\ +\x31\x2d\x2e\x35\x30\x39\x20\x32\x2e\x33\x38\x35\x2d\x31\x2e\x35\ +\x32\x37\x2e\x31\x34\x37\x2d\x2e\x33\x33\x32\x2e\x32\x37\x35\x2d\ +\x2e\x37\x32\x2e\x33\x38\x38\x2d\x31\x2e\x31\x36\x31\x68\x33\x2e\ +\x37\x31\x36\x63\x2d\x2e\x32\x34\x31\x20\x32\x2e\x32\x38\x37\x2d\ +\x31\x2e\x32\x34\x38\x20\x33\x2e\x39\x34\x35\x2d\x33\x2e\x30\x32\ +\x32\x20\x34\x2e\x39\x36\x33\x2d\x31\x2e\x30\x31\x37\x2e\x35\x37\ +\x32\x2d\x32\x2e\x31\x38\x2e\x38\x35\x38\x2d\x33\x2e\x34\x39\x34\ +\x2e\x38\x35\x38\x2d\x32\x2e\x39\x32\x34\x20\x30\x2d\x34\x2e\x39\ +\x35\x36\x2d\x31\x2e\x31\x34\x35\x2d\x36\x2e\x31\x30\x33\x2d\x33\ +\x2e\x34\x33\x38\x2d\x2e\x36\x30\x37\x2d\x31\x2e\x32\x32\x32\x2d\ +\x2e\x39\x31\x33\x2d\x32\x2e\x36\x38\x2d\x2e\x39\x31\x33\x2d\x34\ +\x2e\x33\x38\x33\x20\x30\x2d\x33\x2e\x34\x35\x36\x20\x31\x2e\x31\ +\x2d\x35\x2e\x38\x33\x32\x20\x33\x2e\x33\x2d\x37\x2e\x31\x32\x37\ +\x20\x31\x2e\x30\x35\x34\x2d\x2e\x36\x30\x39\x20\x32\x2e\x33\x31\ +\x31\x2d\x2e\x39\x31\x35\x20\x33\x2e\x37\x37\x31\x2d\x2e\x39\x31\ +\x35\x20\x32\x2e\x35\x35\x31\x20\x30\x20\x34\x2e\x33\x39\x32\x2e\ +\x39\x30\x35\x20\x35\x2e\x35\x31\x39\x20\x32\x2e\x37\x32\x2e\x33\ +\x35\x33\x2e\x36\x30\x39\x2e\x36\x31\x20\x31\x2e\x32\x38\x33\x2e\ +\x37\x37\x38\x20\x32\x2e\x30\x32\x34\x2e\x30\x36\x37\x2e\x33\x35\ +\x31\x2e\x31\x32\x37\x2e\x37\x31\x39\x2e\x31\x36\x33\x20\x31\x2e\ +\x31\x30\x38\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\ +\x2f\x73\x76\x67\x3e\x0d\x0a\ +\x00\x00\x08\x98\ +\x3c\ +\x73\x76\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x36\ +\x34\x20\x36\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\ +\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\ +\x34\x20\x36\x34\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\x22\ +\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\ +\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\ +\x76\x67\x22\x3e\x0d\x0a\x3c\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\ +\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x22\ +\x20\x66\x69\x6c\x6c\x3d\x22\x23\x32\x65\x33\x34\x33\x36\x22\x3e\ +\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x34\x34\x2e\x33\ +\x38\x35\x20\x36\x2e\x36\x39\x38\x68\x33\x2e\x38\x38\x33\x76\x37\ +\x2e\x31\x38\x31\x63\x2e\x39\x32\x34\x2d\x31\x2e\x34\x36\x20\x32\ +\x2e\x33\x30\x32\x2d\x32\x2e\x31\x39\x31\x20\x34\x2e\x31\x32\x39\ +\x2d\x32\x2e\x31\x39\x31\x20\x31\x2e\x35\x37\x20\x30\x20\x32\x2e\ +\x39\x32\x34\x2e\x35\x35\x35\x20\x34\x2e\x30\x35\x31\x20\x31\x2e\ +\x36\x36\x33\x2e\x32\x34\x32\x2e\x32\x34\x31\x2e\x34\x35\x37\x2e\ +\x34\x39\x31\x2e\x36\x34\x32\x2e\x37\x34\x39\x20\x31\x2e\x30\x37\ +\x37\x20\x31\x2e\x35\x35\x34\x20\x31\x2e\x36\x31\x32\x20\x33\x2e\ +\x33\x39\x35\x20\x31\x2e\x36\x31\x32\x20\x35\x2e\x35\x32\x20\x30\ +\x20\x32\x2e\x35\x33\x32\x2d\x2e\x37\x33\x31\x20\x34\x2e\x35\x37\ +\x34\x2d\x32\x2e\x31\x39\x37\x20\x36\x2e\x31\x33\x2d\x31\x2e\x31\ +\x36\x35\x20\x31\x2e\x32\x30\x31\x2d\x32\x2e\x35\x33\x32\x20\x31\ +\x2e\x38\x30\x33\x2d\x34\x2e\x31\x30\x33\x20\x31\x2e\x38\x30\x33\ +\x2d\x31\x2e\x38\x33\x32\x20\x30\x2d\x33\x2e\x32\x30\x38\x2d\x2e\ +\x37\x32\x32\x2d\x34\x2e\x31\x33\x34\x2d\x32\x2e\x31\x36\x34\x76\ +\x31\x2e\x35\x32\x34\x68\x2d\x33\x2e\x38\x38\x32\x7a\x6d\x37\x2e\ +\x31\x35\x35\x20\x38\x2e\x32\x33\x36\x63\x2d\x31\x2e\x32\x32\x34\ +\x20\x30\x2d\x32\x2e\x31\x33\x36\x2e\x36\x35\x36\x2d\x32\x2e\x37\ +\x34\x37\x20\x31\x2e\x39\x36\x39\x6c\x2d\x2e\x33\x33\x33\x2e\x39\ +\x36\x39\x63\x2d\x2e\x31\x33\x31\x2e\x35\x33\x35\x2d\x2e\x31\x39\ +\x35\x20\x31\x2e\x31\x2d\x2e\x31\x39\x35\x20\x31\x2e\x36\x39\x31\ +\x20\x30\x20\x32\x2e\x30\x31\x36\x2e\x35\x35\x35\x20\x33\x2e\x34\ +\x32\x32\x20\x31\x2e\x36\x36\x35\x20\x34\x2e\x32\x31\x36\x2e\x34\ +\x36\x34\x2e\x33\x35\x34\x2e\x39\x39\x36\x2e\x35\x32\x35\x20\x31\ +\x2e\x36\x30\x37\x2e\x35\x32\x35\x20\x31\x2e\x31\x38\x33\x20\x30\ +\x20\x32\x2e\x30\x39\x2d\x2e\x36\x33\x36\x20\x32\x2e\x37\x31\x37\ +\x2d\x31\x2e\x39\x31\x33\x2e\x33\x36\x39\x2d\x2e\x37\x39\x34\x2e\ +\x35\x35\x35\x2d\x31\x2e\x37\x30\x39\x2e\x35\x35\x35\x2d\x32\x2e\ +\x37\x34\x34\x20\x30\x2d\x31\x2e\x38\x38\x37\x2d\x2e\x35\x31\x38\ +\x2d\x33\x2e\x32\x35\x34\x2d\x31\x2e\x35\x35\x32\x2d\x34\x2e\x31\ +\x30\x35\x2d\x2e\x35\x31\x37\x2d\x2e\x34\x30\x37\x2d\x31\x2e\x30\ +\x39\x33\x2d\x2e\x36\x30\x38\x2d\x31\x2e\x37\x31\x37\x2d\x2e\x36\ +\x30\x38\x7a\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\ +\x22\x6d\x34\x30\x2e\x32\x37\x32\x20\x32\x36\x2e\x34\x34\x34\x76\ +\x2e\x34\x37\x68\x2d\x34\x2e\x32\x31\x35\x63\x2d\x2e\x32\x39\x35\ +\x2d\x2e\x34\x34\x33\x2d\x2e\x34\x34\x35\x2d\x2e\x39\x34\x32\x2d\ +\x2e\x34\x34\x35\x2d\x31\x2e\x34\x39\x39\x2d\x31\x2e\x33\x36\x37\ +\x20\x31\x2e\x34\x32\x33\x2d\x32\x2e\x38\x38\x36\x20\x32\x2e\x31\ +\x33\x37\x2d\x34\x2e\x35\x35\x34\x20\x32\x2e\x31\x33\x37\x2d\x31\ +\x2e\x34\x32\x36\x20\x30\x2d\x32\x2e\x35\x39\x2d\x2e\x34\x37\x2d\ +\x33\x2e\x34\x39\x34\x2d\x31\x2e\x34\x31\x33\x2d\x2e\x37\x30\x33\ +\x2d\x2e\x37\x35\x37\x2d\x31\x2e\x30\x35\x35\x2d\x31\x2e\x37\x38\ +\x33\x2d\x31\x2e\x30\x35\x35\x2d\x33\x2e\x30\x37\x37\x20\x30\x2d\ +\x32\x2e\x36\x34\x35\x20\x31\x2e\x34\x37\x2d\x34\x2e\x32\x31\x37\ +\x20\x34\x2e\x34\x30\x39\x2d\x34\x2e\x37\x31\x37\x6c\x31\x2e\x35\ +\x35\x37\x2d\x2e\x32\x37\x37\x63\x31\x2e\x32\x36\x2d\x2e\x32\x30\ +\x32\x20\x32\x2e\x30\x32\x38\x2d\x2e\x33\x36\x38\x20\x32\x2e\x33\ +\x30\x35\x2d\x2e\x35\x2e\x30\x31\x38\x2d\x2e\x30\x32\x2e\x30\x36\ +\x34\x2d\x2e\x30\x34\x35\x2e\x31\x33\x39\x2d\x2e\x30\x38\x32\x2e\ +\x34\x34\x33\x2d\x2e\x32\x34\x32\x2e\x36\x36\x34\x2d\x2e\x36\x32\ +\x37\x2e\x36\x36\x34\x2d\x31\x2e\x31\x36\x34\x20\x30\x2d\x31\x2d\ +\x2e\x37\x34\x38\x2d\x31\x2e\x34\x39\x37\x2d\x32\x2e\x32\x34\x36\ +\x2d\x31\x2e\x34\x39\x37\x2d\x31\x2e\x32\x36\x33\x20\x30\x2d\x32\ +\x2e\x30\x36\x38\x2e\x32\x39\x36\x2d\x32\x2e\x34\x31\x39\x2e\x38\ +\x38\x37\x6c\x2d\x2e\x32\x35\x2e\x36\x36\x37\x2d\x2e\x30\x38\x33\ +\x2e\x35\x68\x2d\x33\x2e\x37\x34\x33\x63\x2e\x32\x33\x38\x2d\x33\ +\x2e\x34\x35\x38\x20\x32\x2e\x33\x37\x35\x2d\x35\x2e\x31\x38\x38\ +\x20\x36\x2e\x34\x31\x34\x2d\x35\x2e\x31\x38\x38\x20\x34\x2e\x30\ +\x38\x34\x20\x30\x20\x36\x2e\x31\x32\x39\x20\x31\x2e\x35\x33\x35\ +\x20\x36\x2e\x31\x32\x39\x20\x34\x2e\x36\x30\x34\x76\x38\x2e\x33\ +\x31\x38\x63\x30\x20\x2e\x36\x32\x39\x2e\x32\x34\x20\x31\x2e\x31\ +\x38\x34\x2e\x37\x32\x31\x20\x31\x2e\x36\x36\x33\x2e\x30\x35\x35\ +\x2e\x30\x35\x38\x2e\x31\x31\x32\x2e\x31\x31\x35\x2e\x31\x36\x36\ +\x2e\x31\x36\x38\x7a\x6d\x2d\x34\x2e\x36\x38\x37\x2d\x35\x2e\x35\ +\x34\x33\x76\x2d\x31\x2e\x30\x35\x36\x63\x2d\x2e\x33\x35\x32\x2e\ +\x31\x36\x38\x2d\x2e\x38\x39\x36\x2e\x33\x32\x35\x2d\x31\x2e\x36\ +\x33\x35\x2e\x34\x37\x31\x6c\x2d\x31\x2e\x33\x33\x36\x2e\x32\x34\ +\x39\x63\x2d\x31\x2e\x32\x32\x36\x2e\x32\x35\x38\x2d\x31\x2e\x39\ +\x33\x37\x2e\x37\x32\x32\x2d\x32\x2e\x31\x33\x38\x20\x31\x2e\x33\ +\x38\x37\x6c\x2d\x2e\x30\x38\x34\x2e\x36\x36\x37\x63\x30\x20\x2e\ +\x39\x30\x34\x2e\x34\x35\x31\x20\x31\x2e\x34\x37\x37\x20\x31\x2e\ +\x33\x35\x39\x20\x31\x2e\x37\x31\x39\x2e\x32\x32\x32\x2e\x30\x35\ +\x35\x2e\x34\x37\x33\x2e\x30\x38\x32\x2e\x37\x35\x31\x2e\x30\x38\ +\x32\x20\x31\x2e\x36\x31\x31\x20\x30\x20\x32\x2e\x35\x39\x32\x2d\ +\x2e\x37\x36\x39\x20\x32\x2e\x39\x34\x33\x2d\x32\x2e\x33\x30\x31\ +\x2e\x30\x39\x33\x2d\x2e\x33\x36\x39\x2e\x31\x34\x2d\x2e\x37\x37\ +\x35\x2e\x31\x34\x2d\x31\x2e\x32\x31\x38\x7a\x22\x2f\x3e\x0d\x0a\ +\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x35\x37\x2e\x37\x31\x35\ +\x20\x34\x31\x2e\x38\x34\x32\x68\x2d\x33\x2e\x37\x31\x36\x63\x2d\ +\x2e\x33\x31\x32\x2d\x31\x2e\x34\x32\x34\x2d\x2e\x38\x38\x31\x2d\ +\x32\x2e\x32\x37\x33\x2d\x31\x2e\x36\x39\x2d\x32\x2e\x35\x35\x33\ +\x6c\x2d\x2e\x37\x38\x2d\x2e\x31\x36\x36\x63\x2d\x2e\x30\x38\x38\ +\x20\x30\x2d\x2e\x31\x39\x31\x20\x30\x2d\x2e\x33\x30\x34\x20\x30\ +\x2d\x31\x2e\x31\x34\x35\x20\x30\x2d\x31\x2e\x39\x34\x36\x2e\x34\ +\x32\x36\x2d\x32\x2e\x34\x31\x33\x20\x31\x2e\x32\x37\x35\x2d\x2e\ +\x34\x39\x37\x2e\x39\x34\x32\x2d\x2e\x37\x34\x35\x20\x32\x2e\x31\ +\x35\x34\x2d\x2e\x37\x34\x35\x20\x33\x2e\x36\x33\x35\x20\x30\x20\ +\x32\x2e\x32\x35\x35\x2e\x36\x30\x37\x20\x33\x2e\x37\x30\x35\x20\ +\x31\x2e\x38\x33\x20\x34\x2e\x33\x35\x33\x2e\x34\x30\x38\x2e\x32\ +\x32\x31\x2e\x38\x34\x38\x2e\x33\x33\x34\x20\x31\x2e\x33\x33\x2e\ +\x33\x33\x34\x20\x31\x2e\x31\x31\x20\x30\x20\x31\x2e\x39\x30\x31\ +\x2d\x2e\x35\x30\x39\x20\x32\x2e\x33\x38\x35\x2d\x31\x2e\x35\x32\ +\x37\x2e\x31\x34\x37\x2d\x2e\x33\x33\x32\x2e\x32\x37\x35\x2d\x2e\ +\x37\x32\x2e\x33\x38\x38\x2d\x31\x2e\x31\x36\x31\x68\x33\x2e\x37\ +\x31\x36\x63\x2d\x2e\x32\x34\x31\x20\x32\x2e\x32\x38\x37\x2d\x31\ +\x2e\x32\x34\x38\x20\x33\x2e\x39\x34\x35\x2d\x33\x2e\x30\x32\x32\ +\x20\x34\x2e\x39\x36\x33\x2d\x31\x2e\x30\x31\x37\x2e\x35\x37\x32\ +\x2d\x32\x2e\x31\x38\x2e\x38\x35\x38\x2d\x33\x2e\x34\x39\x34\x2e\ +\x38\x35\x38\x2d\x32\x2e\x39\x32\x34\x20\x30\x2d\x34\x2e\x39\x35\ +\x36\x2d\x31\x2e\x31\x34\x35\x2d\x36\x2e\x31\x30\x33\x2d\x33\x2e\ +\x34\x33\x38\x2d\x2e\x36\x30\x37\x2d\x31\x2e\x32\x32\x32\x2d\x2e\ +\x39\x31\x33\x2d\x32\x2e\x36\x38\x2d\x2e\x39\x31\x33\x2d\x34\x2e\ +\x33\x38\x33\x20\x30\x2d\x33\x2e\x34\x35\x35\x20\x31\x2e\x31\x2d\ +\x35\x2e\x38\x33\x32\x20\x33\x2e\x33\x2d\x37\x2e\x31\x32\x37\x20\ +\x31\x2e\x30\x35\x34\x2d\x2e\x36\x30\x39\x20\x32\x2e\x33\x31\x31\ +\x2d\x2e\x39\x31\x36\x20\x33\x2e\x37\x37\x31\x2d\x2e\x39\x31\x36\ +\x20\x32\x2e\x35\x35\x31\x20\x30\x20\x34\x2e\x33\x39\x32\x2e\x39\ +\x30\x35\x20\x35\x2e\x35\x31\x39\x20\x32\x2e\x37\x32\x31\x2e\x33\ +\x35\x33\x2e\x36\x30\x39\x2e\x36\x31\x20\x31\x2e\x32\x38\x33\x2e\ +\x37\x37\x38\x20\x32\x2e\x30\x32\x33\x2e\x30\x36\x36\x2e\x33\x35\ +\x31\x2e\x31\x32\x37\x2e\x37\x32\x2e\x31\x36\x33\x20\x31\x2e\x31\ +\x30\x39\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x70\ +\x61\x74\x68\x20\x64\x3d\x22\x6d\x32\x31\x2e\x37\x39\x37\x20\x35\ +\x32\x2e\x38\x34\x34\x6c\x2d\x31\x36\x2e\x39\x39\x35\x2d\x37\x2e\ +\x34\x38\x34\x76\x2d\x33\x2e\x35\x36\x39\x6c\x31\x36\x2e\x39\x39\ +\x35\x2d\x37\x2e\x34\x37\x39\x76\x34\x2e\x32\x32\x39\x6c\x2d\x31\ +\x31\x2e\x37\x36\x33\x20\x35\x2e\x30\x32\x37\x20\x31\x31\x2e\x37\ +\x36\x33\x20\x35\x2e\x30\x31\x39\x7a\x22\x20\x66\x69\x6c\x6c\x3d\ +\x22\x23\x39\x39\x39\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\ +\x64\x3d\x22\x6d\x32\x31\x2e\x34\x32\x38\x20\x32\x30\x2e\x32\x68\ +\x2d\x36\x2e\x37\x32\x35\x76\x36\x2e\x37\x32\x36\x68\x2d\x33\x2e\ +\x38\x30\x38\x76\x2d\x36\x2e\x37\x32\x36\x68\x2d\x36\x2e\x37\x32\ +\x34\x76\x2d\x33\x2e\x38\x30\x38\x68\x36\x2e\x37\x32\x35\x76\x2d\ +\x36\x2e\x37\x32\x34\x68\x33\x2e\x38\x30\x38\x76\x36\x2e\x37\x32\ +\x35\x68\x36\x2e\x37\x32\x35\x76\x33\x2e\x38\x30\x37\x7a\x22\x20\ +\x66\x69\x6c\x6c\x3d\x22\x23\x39\x39\x39\x22\x2f\x3e\x0d\x0a\x3c\ +\x2f\x73\x76\x67\x3e\x0d\x0a\ +\x00\x00\x01\x6c\ +\x3c\ +\x73\x76\x67\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x20\ +\x77\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x20\x78\x6d\x6c\x6e\x73\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\ +\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x0d\x0a\ +\x3c\x67\x20\x66\x69\x6c\x6c\x3d\x22\x23\x38\x32\x61\x30\x62\x34\ +\x22\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\ +\x6e\x6f\x64\x64\x22\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x23\x33\ +\x63\x35\x61\x36\x65\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x20\x74\ +\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\ +\x61\x74\x65\x28\x2d\x31\x38\x20\x2d\x32\x34\x29\x22\x3e\x0d\x0a\ +\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x33\x30\x20\x34\x37\x6c\ +\x34\x2e\x35\x2d\x34\x2e\x35\x68\x2d\x33\x76\x2d\x33\x68\x2d\x33\ +\x76\x33\x68\x2d\x33\x7a\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\ +\x20\x64\x3d\x22\x6d\x31\x39\x20\x33\x36\x6c\x34\x2e\x35\x20\x34\ +\x2e\x35\x76\x2d\x33\x68\x33\x76\x2d\x33\x68\x2d\x33\x76\x2d\x33\ +\x7a\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\ +\x33\x30\x20\x32\x35\x6c\x34\x2e\x35\x20\x34\x2e\x35\x68\x2d\x33\ +\x76\x33\x68\x2d\x33\x76\x2d\x33\x68\x2d\x33\x7a\x22\x2f\x3e\x0d\ +\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x34\x31\x20\x33\x36\ +\x6c\x2d\x34\x2e\x35\x20\x34\x2e\x35\x76\x2d\x33\x68\x2d\x33\x76\ +\x2d\x33\x68\x33\x76\x2d\x33\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\ +\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\ +\x00\x00\x0c\xee\ +\x3c\ +\x73\x76\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x36\ +\x34\x20\x36\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\ +\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\ +\x34\x20\x36\x34\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\x22\ +\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\ +\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\ +\x76\x67\x22\x3e\x0d\x0a\x3c\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\ +\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x22\ +\x20\x66\x69\x6c\x6c\x3d\x22\x23\x61\x63\x63\x33\x66\x63\x22\x3e\ +\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x31\x32\x2e\x37\ +\x30\x35\x20\x34\x36\x2e\x31\x35\x63\x2d\x33\x2e\x33\x35\x33\x20\ +\x30\x2d\x36\x2e\x33\x30\x39\x2d\x31\x2e\x32\x33\x34\x2d\x38\x2e\ +\x35\x34\x37\x2d\x33\x2e\x35\x36\x39\x2d\x2e\x30\x32\x35\x2d\x2e\ +\x30\x32\x36\x2d\x2e\x30\x35\x2d\x2e\x30\x35\x33\x2d\x2e\x30\x37\ +\x35\x2d\x2e\x30\x37\x39\x2d\x31\x2e\x33\x33\x35\x2d\x31\x2e\x34\ +\x33\x37\x2d\x32\x2e\x39\x32\x36\x2d\x33\x2e\x39\x36\x34\x2d\x32\ +\x2e\x39\x32\x36\x2d\x37\x2e\x38\x34\x32\x20\x30\x2d\x31\x2e\x34\ +\x36\x31\x2e\x32\x32\x36\x2d\x32\x2e\x38\x32\x38\x2e\x36\x35\x35\ +\x2d\x34\x2e\x30\x37\x36\x2d\x2e\x32\x36\x31\x2d\x2e\x38\x32\x38\ +\x2d\x2e\x33\x36\x39\x2d\x31\x2e\x37\x30\x35\x2d\x2e\x33\x30\x38\ +\x2d\x32\x2e\x35\x38\x39\x2e\x34\x39\x32\x2d\x37\x2e\x31\x31\x20\ +\x35\x2e\x37\x34\x38\x2d\x31\x31\x2e\x37\x30\x34\x20\x31\x33\x2e\ +\x33\x38\x39\x2d\x31\x31\x2e\x37\x30\x34\x20\x39\x2e\x36\x39\x20\ +\x30\x20\x31\x33\x2e\x31\x32\x38\x20\x36\x2e\x32\x35\x31\x20\x31\ +\x33\x2e\x31\x32\x38\x20\x31\x31\x2e\x36\x30\x34\x76\x36\x2e\x37\ +\x33\x33\x63\x2e\x35\x37\x38\x20\x31\x2e\x30\x33\x34\x2e\x38\x39\ +\x20\x32\x2e\x32\x30\x38\x2e\x38\x39\x20\x33\x2e\x34\x31\x35\x76\ +\x2e\x34\x37\x63\x30\x20\x33\x2e\x38\x36\x36\x2d\x33\x2e\x31\x33\ +\x34\x20\x37\x2d\x37\x20\x37\x68\x2d\x34\x2e\x32\x31\x36\x63\x2d\ +\x2e\x32\x39\x33\x20\x30\x2d\x2e\x35\x38\x34\x2d\x2e\x30\x31\x39\ +\x2d\x2e\x38\x37\x32\x2d\x2e\x30\x35\x35\x2d\x31\x2e\x35\x33\x31\ +\x2e\x35\x33\x31\x2d\x32\x2e\x39\x35\x34\x2e\x36\x39\x32\x2d\x34\ +\x2e\x31\x31\x38\x2e\x36\x39\x32\x7a\x22\x2f\x3e\x0d\x0a\x3c\x70\ +\x61\x74\x68\x20\x64\x3d\x22\x6d\x33\x34\x2e\x34\x37\x38\x20\x34\ +\x36\x2e\x31\x35\x35\x63\x2d\x31\x2e\x34\x33\x31\x20\x30\x2d\x32\ +\x2e\x37\x38\x34\x2d\x2e\x32\x31\x38\x2d\x34\x2e\x30\x33\x35\x2d\ +\x2e\x36\x34\x31\x2d\x2e\x30\x33\x33\x2e\x30\x30\x31\x2d\x2e\x30\ +\x36\x36\x2e\x30\x30\x31\x2d\x2e\x31\x2e\x30\x30\x31\x68\x2d\x33\ +\x2e\x38\x38\x32\x63\x2d\x33\x2e\x38\x36\x36\x20\x30\x2d\x37\x2d\ +\x33\x2e\x31\x33\x34\x2d\x37\x2d\x37\x6c\x2d\x2e\x30\x30\x31\x2d\ +\x32\x30\x2e\x32\x31\x34\x63\x30\x2d\x31\x2e\x38\x35\x37\x2e\x37\ +\x33\x37\x2d\x33\x2e\x36\x33\x37\x20\x32\x2e\x30\x35\x2d\x34\x2e\ +\x39\x35\x20\x31\x2e\x33\x31\x32\x2d\x31\x2e\x33\x31\x33\x20\x33\ +\x2e\x30\x39\x33\x2d\x32\x2e\x30\x35\x20\x34\x2e\x39\x35\x2d\x32\ +\x2e\x30\x35\x68\x33\x2e\x38\x38\x33\x63\x33\x2e\x32\x36\x35\x20\ +\x30\x20\x36\x2e\x30\x30\x37\x20\x32\x2e\x32\x33\x34\x20\x36\x2e\ +\x37\x38\x31\x20\x35\x2e\x32\x35\x37\x20\x32\x2e\x33\x36\x37\x2e\ +\x34\x38\x38\x20\x34\x2e\x35\x31\x34\x20\x31\x2e\x36\x34\x32\x20\ +\x36\x2e\x33\x30\x37\x20\x33\x2e\x34\x30\x35\x2e\x35\x34\x36\x2e\ +\x35\x34\x32\x20\x31\x2e\x30\x31\x39\x20\x31\x2e\x30\x39\x37\x20\ +\x31\x2e\x34\x33\x31\x20\x31\x2e\x36\x37\x35\x2e\x30\x32\x31\x2e\ +\x30\x33\x2e\x30\x34\x32\x2e\x30\x36\x2e\x30\x36\x32\x2e\x30\x39\ +\x20\x31\x2e\x38\x38\x39\x20\x32\x2e\x37\x33\x37\x20\x32\x2e\x38\ +\x34\x37\x20\x35\x2e\x39\x33\x32\x20\x32\x2e\x38\x34\x37\x20\x39\ +\x2e\x34\x39\x36\x20\x30\x20\x34\x2e\x32\x39\x33\x2d\x31\x2e\x34\ +\x31\x32\x20\x38\x2e\x30\x36\x39\x2d\x34\x2e\x30\x38\x35\x20\x31\ +\x30\x2e\x39\x31\x37\x2d\x2e\x30\x32\x36\x2e\x30\x32\x39\x2d\x2e\ +\x30\x35\x34\x2e\x30\x35\x38\x2d\x2e\x30\x38\x31\x2e\x30\x38\x36\ +\x2d\x32\x2e\x34\x39\x34\x20\x32\x2e\x35\x37\x2d\x35\x2e\x36\x35\ +\x20\x33\x2e\x39\x32\x38\x2d\x39\x2e\x31\x32\x37\x20\x33\x2e\x39\ +\x32\x38\x7a\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\ +\x22\x6d\x34\x39\x2e\x37\x32\x36\x20\x34\x36\x2e\x31\x35\x33\x63\ +\x2d\x35\x2e\x35\x33\x36\x20\x30\x2d\x31\x30\x2e\x30\x34\x33\x2d\ +\x32\x2e\x36\x36\x34\x2d\x31\x32\x2e\x33\x36\x34\x2d\x37\x2e\x33\ +\x30\x39\x2d\x31\x2e\x30\x39\x38\x2d\x32\x2e\x32\x30\x39\x2d\x31\ +\x2e\x36\x35\x31\x2d\x34\x2e\x37\x33\x32\x2d\x31\x2e\x36\x35\x31\ +\x2d\x37\x2e\x35\x31\x33\x20\x30\x2d\x37\x2e\x39\x39\x33\x20\x34\ +\x2e\x32\x32\x38\x2d\x31\x31\x2e\x36\x37\x36\x20\x36\x2e\x37\x34\ +\x38\x2d\x31\x33\x2e\x31\x36\x20\x32\x2e\x31\x37\x36\x2d\x31\x2e\ +\x32\x35\x39\x20\x34\x2e\x36\x32\x34\x2d\x31\x2e\x38\x38\x33\x20\ +\x37\x2e\x33\x32\x33\x2d\x31\x2e\x38\x38\x33\x20\x34\x2e\x39\x38\ +\x20\x30\x20\x39\x2e\x30\x35\x32\x20\x32\x2e\x31\x34\x31\x20\x31\ +\x31\x2e\x34\x36\x36\x20\x36\x2e\x30\x32\x37\x2e\x30\x33\x38\x2e\ +\x30\x36\x32\x2e\x30\x37\x35\x2e\x31\x32\x34\x2e\x31\x31\x32\x2e\ +\x31\x38\x37\x2e\x37\x30\x31\x20\x31\x2e\x32\x31\x33\x20\x31\x2e\ +\x32\x32\x32\x20\x32\x2e\x35\x35\x33\x20\x31\x2e\x35\x34\x36\x20\ +\x33\x2e\x39\x38\x31\x2e\x30\x31\x37\x2e\x30\x37\x37\x2e\x30\x33\ +\x33\x2e\x31\x35\x34\x2e\x30\x34\x38\x2e\x32\x33\x32\x2e\x30\x37\ +\x32\x2e\x33\x37\x37\x2e\x31\x33\x31\x2e\x37\x32\x37\x2e\x31\x37\ +\x37\x20\x31\x2e\x30\x36\x33\x2e\x30\x38\x37\x2e\x34\x34\x2e\x31\ +\x33\x32\x2e\x38\x39\x36\x2e\x31\x33\x32\x20\x31\x2e\x33\x36\x31\ +\x20\x30\x20\x2e\x37\x34\x33\x2d\x2e\x31\x31\x35\x20\x31\x2e\x34\ +\x35\x38\x2d\x2e\x33\x32\x39\x20\x32\x2e\x31\x33\x2e\x32\x37\x34\ +\x2e\x38\x39\x34\x2e\x33\x37\x31\x20\x31\x2e\x38\x34\x33\x2e\x32\ +\x37\x31\x20\x32\x2e\x37\x39\x34\x2d\x2e\x34\x37\x36\x20\x34\x2e\ +\x35\x31\x31\x2d\x32\x2e\x37\x38\x34\x20\x38\x2e\x31\x36\x39\x2d\ +\x36\x2e\x35\x30\x31\x20\x31\x30\x2e\x33\x30\x31\x2d\x32\x2e\x31\ +\x32\x33\x20\x31\x2e\x31\x39\x38\x2d\x34\x2e\x34\x35\x34\x20\x31\ +\x2e\x37\x38\x39\x2d\x36\x2e\x39\x37\x38\x20\x31\x2e\x37\x38\x39\ +\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x67\x20\x65\ +\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\ +\x3d\x22\x6e\x65\x77\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x32\x65\ +\x33\x34\x33\x36\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\ +\x22\x6d\x32\x31\x2e\x39\x31\x32\x20\x33\x38\x2e\x30\x34\x33\x76\ +\x2e\x34\x37\x68\x2d\x34\x2e\x32\x31\x36\x63\x2d\x2e\x32\x39\x35\ +\x2d\x2e\x34\x34\x33\x2d\x2e\x34\x34\x34\x2d\x2e\x39\x34\x32\x2d\ +\x2e\x34\x34\x34\x2d\x31\x2e\x34\x39\x39\x2d\x31\x2e\x33\x36\x37\ +\x20\x31\x2e\x34\x32\x33\x2d\x32\x2e\x38\x38\x34\x20\x32\x2e\x31\ +\x33\x37\x2d\x34\x2e\x35\x34\x37\x20\x32\x2e\x31\x33\x37\x2d\x31\ +\x2e\x34\x32\x35\x20\x30\x2d\x32\x2e\x35\x38\x39\x2d\x2e\x34\x37\ +\x2d\x33\x2e\x34\x39\x34\x2d\x31\x2e\x34\x31\x33\x2d\x2e\x37\x30\ +\x33\x2d\x2e\x37\x35\x37\x2d\x31\x2e\x30\x35\x34\x2d\x31\x2e\x37\ +\x38\x33\x2d\x31\x2e\x30\x35\x34\x2d\x33\x2e\x30\x37\x37\x20\x30\ +\x2d\x32\x2e\x36\x34\x35\x20\x31\x2e\x34\x36\x39\x2d\x34\x2e\x32\ +\x31\x37\x20\x34\x2e\x34\x30\x39\x2d\x34\x2e\x37\x31\x37\x6c\x31\ +\x2e\x35\x35\x33\x2d\x2e\x32\x37\x37\x63\x31\x2e\x32\x35\x36\x2d\ +\x2e\x32\x30\x32\x20\x32\x2e\x30\x32\x34\x2d\x2e\x33\x36\x38\x20\ +\x32\x2e\x33\x30\x31\x2d\x2e\x35\x2e\x30\x31\x38\x2d\x2e\x30\x32\ +\x2e\x30\x36\x34\x2d\x2e\x30\x34\x35\x2e\x31\x33\x38\x2d\x2e\x30\ +\x38\x32\x2e\x34\x34\x34\x2d\x2e\x32\x34\x32\x2e\x36\x36\x35\x2d\ +\x2e\x36\x32\x37\x2e\x36\x36\x35\x2d\x31\x2e\x31\x36\x34\x20\x30\ +\x2d\x31\x2d\x2e\x37\x34\x39\x2d\x31\x2e\x34\x39\x37\x2d\x32\x2e\ +\x32\x34\x37\x2d\x31\x2e\x34\x39\x37\x2d\x31\x2e\x32\x35\x36\x20\ +\x30\x2d\x32\x2e\x30\x36\x31\x2e\x32\x39\x36\x2d\x32\x2e\x34\x31\ +\x32\x2e\x38\x38\x37\x6c\x2d\x2e\x32\x35\x2e\x36\x36\x37\x2d\x2e\ +\x30\x38\x33\x2e\x35\x68\x2d\x33\x2e\x37\x34\x33\x63\x2e\x32\x33\ +\x39\x2d\x33\x2e\x34\x35\x38\x20\x32\x2e\x33\x37\x35\x2d\x35\x2e\ +\x31\x38\x38\x20\x36\x2e\x34\x30\x36\x2d\x35\x2e\x31\x38\x38\x20\ +\x34\x2e\x30\x38\x35\x20\x30\x20\x36\x2e\x31\x32\x38\x20\x31\x2e\ +\x35\x33\x35\x20\x36\x2e\x31\x32\x38\x20\x34\x2e\x36\x30\x34\x76\ +\x38\x2e\x33\x31\x38\x63\x30\x20\x2e\x36\x32\x39\x2e\x32\x34\x20\ +\x31\x2e\x31\x38\x34\x2e\x37\x32\x32\x20\x31\x2e\x36\x36\x33\x2e\ +\x30\x35\x36\x2e\x30\x35\x38\x2e\x31\x31\x33\x2e\x31\x31\x34\x2e\ +\x31\x36\x38\x2e\x31\x36\x38\x7a\x6d\x2d\x34\x2e\x36\x38\x37\x2d\ +\x35\x2e\x35\x34\x33\x76\x2d\x31\x2e\x30\x35\x36\x63\x2d\x2e\x33\ +\x35\x32\x2e\x31\x36\x38\x2d\x2e\x38\x39\x37\x2e\x33\x32\x35\x2d\ +\x31\x2e\x36\x33\x36\x2e\x34\x37\x31\x6c\x2d\x31\x2e\x33\x33\x32\ +\x2e\x32\x34\x39\x63\x2d\x31\x2e\x32\x32\x32\x2e\x32\x35\x38\x2d\ +\x31\x2e\x39\x33\x33\x2e\x37\x32\x32\x2d\x32\x2e\x31\x33\x35\x20\ +\x31\x2e\x33\x38\x37\x6c\x2d\x2e\x30\x38\x34\x2e\x36\x36\x37\x63\ +\x30\x20\x2e\x39\x30\x34\x2e\x34\x35\x32\x20\x31\x2e\x34\x37\x37\ +\x20\x31\x2e\x33\x35\x39\x20\x31\x2e\x37\x31\x39\x2e\x32\x32\x32\ +\x2e\x30\x35\x35\x2e\x34\x37\x32\x2e\x30\x38\x32\x2e\x37\x34\x38\ +\x2e\x30\x38\x32\x20\x31\x2e\x36\x30\x37\x20\x30\x20\x32\x2e\x35\ +\x38\x38\x2d\x2e\x37\x36\x39\x20\x32\x2e\x39\x34\x2d\x32\x2e\x33\ +\x30\x31\x2e\x30\x39\x33\x2d\x2e\x33\x36\x39\x2e\x31\x34\x2d\x2e\ +\x37\x37\x36\x2e\x31\x34\x2d\x31\x2e\x32\x31\x38\x7a\x22\x2f\x3e\ +\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x32\x36\x2e\x34\ +\x36\x20\x31\x38\x2e\x33\x68\x33\x2e\x38\x38\x33\x76\x37\x2e\x31\ +\x38\x32\x63\x2e\x39\x32\x34\x2d\x31\x2e\x34\x36\x20\x32\x2e\x33\ +\x30\x32\x2d\x32\x2e\x31\x39\x31\x20\x34\x2e\x31\x33\x2d\x32\x2e\ +\x31\x39\x31\x20\x31\x2e\x35\x37\x20\x30\x20\x32\x2e\x39\x32\x34\ +\x2e\x35\x35\x35\x20\x34\x2e\x30\x35\x31\x20\x31\x2e\x36\x36\x33\ +\x2e\x32\x34\x32\x2e\x32\x34\x31\x2e\x34\x35\x36\x2e\x34\x39\x32\ +\x2e\x36\x34\x2e\x37\x34\x39\x20\x31\x2e\x30\x37\x32\x20\x31\x2e\ +\x35\x35\x34\x20\x31\x2e\x36\x30\x37\x20\x33\x2e\x33\x39\x34\x20\ +\x31\x2e\x36\x30\x37\x20\x35\x2e\x35\x32\x20\x30\x20\x32\x2e\x35\ +\x33\x32\x2d\x2e\x37\x33\x31\x20\x34\x2e\x35\x37\x34\x2d\x32\x2e\ +\x31\x39\x20\x36\x2e\x31\x32\x39\x2d\x31\x2e\x31\x36\x35\x20\x31\ +\x2e\x32\x30\x31\x2d\x32\x2e\x35\x33\x32\x20\x31\x2e\x38\x30\x33\ +\x2d\x34\x2e\x31\x30\x33\x20\x31\x2e\x38\x30\x33\x2d\x31\x2e\x38\ +\x33\x33\x20\x30\x2d\x33\x2e\x32\x30\x38\x2d\x2e\x37\x32\x32\x2d\ +\x34\x2e\x31\x33\x35\x2d\x32\x2e\x31\x36\x34\x76\x31\x2e\x35\x32\ +\x34\x68\x2d\x33\x2e\x38\x38\x32\x7a\x6d\x37\x2e\x31\x35\x35\x20\ +\x38\x2e\x32\x33\x37\x63\x2d\x31\x2e\x32\x32\x34\x20\x30\x2d\x32\ +\x2e\x31\x33\x36\x2e\x36\x35\x36\x2d\x32\x2e\x37\x34\x37\x20\x31\ +\x2e\x39\x36\x39\x6c\x2d\x2e\x33\x33\x33\x2e\x39\x36\x38\x63\x2d\ +\x2e\x31\x33\x31\x2e\x35\x33\x36\x2d\x2e\x31\x39\x35\x20\x31\x2e\ +\x31\x30\x31\x2d\x2e\x31\x39\x35\x20\x31\x2e\x36\x39\x32\x20\x30\ +\x20\x32\x2e\x30\x31\x35\x2e\x35\x35\x35\x20\x33\x2e\x34\x32\x31\ +\x20\x31\x2e\x36\x36\x35\x20\x34\x2e\x32\x31\x35\x2e\x34\x36\x33\ +\x2e\x33\x35\x34\x2e\x39\x39\x36\x2e\x35\x32\x35\x20\x31\x2e\x36\ +\x30\x37\x2e\x35\x32\x35\x20\x31\x2e\x31\x38\x34\x20\x30\x20\x32\ +\x2e\x30\x39\x31\x2d\x2e\x36\x33\x36\x20\x32\x2e\x37\x31\x38\x2d\ +\x31\x2e\x39\x31\x33\x2e\x33\x36\x39\x2d\x2e\x37\x39\x34\x2e\x35\ +\x35\x35\x2d\x31\x2e\x37\x30\x39\x2e\x35\x35\x35\x2d\x32\x2e\x37\ +\x34\x34\x20\x30\x2d\x31\x2e\x38\x38\x37\x2d\x2e\x35\x31\x38\x2d\ +\x33\x2e\x32\x35\x34\x2d\x31\x2e\x35\x35\x32\x2d\x34\x2e\x31\x30\ +\x36\x2d\x2e\x35\x31\x37\x2d\x2e\x34\x30\x34\x2d\x31\x2e\x30\x39\ +\x33\x2d\x2e\x36\x30\x36\x2d\x31\x2e\x37\x31\x38\x2d\x2e\x36\x30\ +\x36\x7a\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\ +\x6d\x35\x36\x2e\x32\x34\x32\x20\x32\x39\x2e\x31\x34\x32\x68\x2d\ +\x33\x2e\x37\x31\x36\x63\x2d\x2e\x33\x31\x32\x2d\x31\x2e\x34\x32\ +\x34\x2d\x2e\x38\x38\x31\x2d\x32\x2e\x32\x37\x32\x2d\x31\x2e\x36\ +\x39\x2d\x32\x2e\x35\x35\x33\x6c\x2d\x2e\x37\x38\x2d\x2e\x31\x36\ +\x35\x63\x2d\x2e\x30\x38\x38\x20\x30\x2d\x2e\x31\x39\x31\x20\x30\ +\x2d\x2e\x33\x30\x34\x20\x30\x2d\x31\x2e\x31\x34\x35\x20\x30\x2d\ +\x31\x2e\x39\x34\x36\x2e\x34\x32\x35\x2d\x32\x2e\x34\x31\x33\x20\ +\x31\x2e\x32\x37\x35\x2d\x2e\x34\x39\x37\x2e\x39\x34\x32\x2d\x2e\ +\x37\x34\x35\x20\x32\x2e\x31\x35\x34\x2d\x2e\x37\x34\x35\x20\x33\ +\x2e\x36\x33\x34\x20\x30\x20\x32\x2e\x32\x35\x35\x2e\x36\x30\x37\ +\x20\x33\x2e\x37\x30\x35\x20\x31\x2e\x38\x33\x20\x34\x2e\x33\x35\ +\x33\x2e\x34\x30\x38\x2e\x32\x32\x31\x2e\x38\x34\x38\x2e\x33\x33\ +\x34\x20\x31\x2e\x33\x33\x2e\x33\x33\x34\x20\x31\x2e\x31\x31\x20\ +\x30\x20\x31\x2e\x39\x30\x31\x2d\x2e\x35\x30\x39\x20\x32\x2e\x33\ +\x38\x35\x2d\x31\x2e\x35\x32\x37\x2e\x31\x34\x37\x2d\x2e\x33\x33\ +\x32\x2e\x32\x37\x35\x2d\x2e\x37\x32\x2e\x33\x38\x38\x2d\x31\x2e\ +\x31\x36\x31\x68\x33\x2e\x37\x31\x36\x63\x2d\x2e\x32\x34\x31\x20\ +\x32\x2e\x32\x38\x37\x2d\x31\x2e\x32\x34\x38\x20\x33\x2e\x39\x34\ +\x35\x2d\x33\x2e\x30\x32\x32\x20\x34\x2e\x39\x36\x33\x2d\x31\x2e\ +\x30\x31\x37\x2e\x35\x37\x32\x2d\x32\x2e\x31\x38\x2e\x38\x35\x38\ +\x2d\x33\x2e\x34\x39\x34\x2e\x38\x35\x38\x2d\x32\x2e\x39\x32\x34\ +\x20\x30\x2d\x34\x2e\x39\x35\x36\x2d\x31\x2e\x31\x34\x35\x2d\x36\ +\x2e\x31\x30\x33\x2d\x33\x2e\x34\x33\x38\x2d\x2e\x36\x30\x37\x2d\ +\x31\x2e\x32\x32\x32\x2d\x2e\x39\x31\x33\x2d\x32\x2e\x36\x38\x2d\ +\x2e\x39\x31\x33\x2d\x34\x2e\x33\x38\x33\x20\x30\x2d\x33\x2e\x34\ +\x35\x36\x20\x31\x2e\x31\x2d\x35\x2e\x38\x33\x32\x20\x33\x2e\x33\ +\x2d\x37\x2e\x31\x32\x37\x20\x31\x2e\x30\x35\x34\x2d\x2e\x36\x30\ +\x39\x20\x32\x2e\x33\x31\x31\x2d\x2e\x39\x31\x35\x20\x33\x2e\x37\ +\x37\x31\x2d\x2e\x39\x31\x35\x20\x32\x2e\x35\x35\x31\x20\x30\x20\ +\x34\x2e\x33\x39\x32\x2e\x39\x30\x35\x20\x35\x2e\x35\x31\x39\x20\ +\x32\x2e\x37\x32\x2e\x33\x35\x33\x2e\x36\x30\x39\x2e\x36\x31\x20\ +\x31\x2e\x32\x38\x33\x2e\x37\x37\x38\x20\x32\x2e\x30\x32\x34\x2e\ +\x30\x36\x37\x2e\x33\x35\x31\x2e\x31\x32\x37\x2e\x37\x31\x39\x2e\ +\x31\x36\x33\x20\x31\x2e\x31\x30\x38\x7a\x22\x2f\x3e\x0d\x0a\x3c\ +\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\ +\x00\x00\x08\x34\ +\x3c\ +\x73\x76\x67\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x36\ +\x34\x20\x36\x34\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\ +\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x36\ +\x34\x20\x36\x34\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\x22\ +\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\ +\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\ +\x76\x67\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\ +\x35\x39\x2e\x32\x31\x37\x20\x31\x37\x2e\x31\x31\x68\x2d\x2e\x30\ +\x38\x33\x63\x2d\x31\x2e\x33\x36\x39\x2d\x34\x2e\x31\x39\x39\x2d\ +\x33\x2e\x32\x36\x37\x2d\x37\x2e\x36\x33\x39\x2d\x35\x2e\x36\x38\ +\x33\x2d\x31\x30\x2e\x33\x32\x33\x2d\x35\x2e\x38\x38\x39\x20\x31\ +\x2e\x39\x36\x34\x2d\x39\x2e\x33\x38\x35\x20\x32\x2e\x39\x35\x35\ +\x2d\x31\x30\x2e\x34\x38\x37\x20\x32\x2e\x39\x35\x35\x2d\x31\x2e\ +\x33\x31\x38\x20\x30\x2d\x33\x2e\x31\x39\x35\x2d\x2e\x35\x34\x39\ +\x2d\x35\x2e\x36\x33\x38\x2d\x31\x2e\x36\x33\x37\x2d\x32\x2e\x34\ +\x34\x36\x2d\x31\x2e\x30\x38\x34\x2d\x34\x2e\x33\x34\x37\x2d\x31\ +\x2e\x36\x33\x33\x2d\x35\x2e\x37\x31\x36\x2d\x31\x2e\x36\x33\x33\ +\x2d\x31\x2e\x33\x31\x20\x30\x2d\x33\x2e\x31\x36\x38\x2e\x35\x34\ +\x39\x2d\x35\x2e\x35\x35\x38\x20\x31\x2e\x36\x33\x33\x2d\x32\x2e\ +\x33\x38\x39\x20\x31\x2e\x30\x38\x38\x2d\x34\x2e\x32\x37\x31\x20\ +\x31\x2e\x36\x33\x37\x2d\x35\x2e\x36\x33\x34\x20\x31\x2e\x36\x33\ +\x37\x2d\x31\x2e\x30\x35\x33\x20\x30\x2d\x34\x2e\x35\x33\x31\x2d\ +\x2e\x39\x39\x2d\x31\x30\x2e\x34\x31\x37\x2d\x32\x2e\x39\x35\x35\ +\x2d\x32\x2e\x32\x35\x34\x20\x32\x2e\x35\x39\x37\x2d\x34\x2e\x31\ +\x30\x35\x20\x35\x2e\x38\x34\x35\x2d\x35\x2e\x35\x33\x35\x20\x39\ +\x2e\x37\x33\x35\x2d\x2e\x30\x37\x39\x2e\x31\x39\x33\x2d\x2e\x31\ +\x34\x37\x2e\x33\x38\x38\x2d\x2e\x32\x31\x39\x2e\x35\x38\x34\x68\ +\x2e\x30\x37\x39\x63\x2d\x31\x2e\x31\x35\x39\x20\x33\x2e\x32\x37\ +\x33\x2d\x31\x2e\x37\x33\x35\x20\x36\x2e\x32\x37\x33\x2d\x31\x2e\ +\x37\x33\x35\x20\x39\x2e\x30\x30\x35\x20\x30\x20\x39\x2e\x33\x35\ +\x33\x20\x34\x2e\x32\x38\x37\x20\x31\x37\x2e\x34\x30\x34\x20\x31\ +\x32\x2e\x38\x35\x35\x20\x32\x34\x2e\x31\x36\x32\x20\x35\x2e\x36\ +\x38\x33\x20\x34\x2e\x34\x37\x38\x20\x31\x31\x2e\x30\x39\x20\x36\ +\x2e\x37\x31\x34\x20\x31\x36\x2e\x32\x34\x32\x20\x36\x2e\x37\x31\ +\x34\x20\x35\x2e\x32\x35\x36\x20\x30\x20\x31\x30\x2e\x36\x39\x38\ +\x2d\x32\x2e\x32\x31\x37\x20\x31\x36\x2e\x33\x32\x34\x2d\x36\x2e\ +\x36\x35\x20\x38\x2e\x36\x32\x32\x2d\x36\x2e\x37\x35\x39\x20\x31\ +\x32\x2e\x39\x33\x34\x2d\x31\x34\x2e\x38\x33\x34\x20\x31\x32\x2e\ +\x39\x33\x34\x2d\x32\x34\x2e\x32\x32\x39\x2e\x30\x30\x35\x2d\x32\ +\x2e\x37\x32\x39\x2d\x2e\x35\x37\x37\x2d\x35\x2e\x37\x32\x38\x2d\ +\x31\x2e\x37\x32\x39\x2d\x38\x2e\x39\x39\x38\x7a\x22\x20\x66\x69\ +\x6c\x6c\x3d\x22\x23\x65\x64\x31\x63\x32\x34\x22\x2f\x3e\x0d\x0a\ +\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x35\x39\x2e\x31\x33\x38\ +\x20\x31\x37\x2e\x31\x31\x68\x2e\x30\x38\x33\x63\x31\x2e\x31\x35\ +\x31\x20\x33\x2e\x32\x37\x34\x20\x31\x2e\x37\x33\x20\x36\x2e\x32\ +\x37\x20\x31\x2e\x37\x33\x20\x39\x2e\x30\x30\x32\x20\x30\x20\x39\ +\x2e\x33\x39\x31\x2d\x34\x2e\x33\x31\x32\x20\x31\x37\x2e\x34\x37\ +\x2d\x31\x32\x2e\x39\x33\x33\x20\x32\x34\x2e\x32\x33\x2d\x35\x2e\ +\x36\x32\x37\x20\x34\x2e\x34\x32\x39\x2d\x31\x31\x2e\x30\x36\x39\ +\x20\x36\x2e\x36\x34\x38\x2d\x31\x36\x2e\x33\x32\x36\x20\x36\x2e\ +\x36\x34\x38\x2d\x35\x2e\x31\x35\x31\x20\x30\x2d\x31\x30\x2e\x35\ +\x35\x39\x2d\x32\x2e\x32\x33\x35\x2d\x31\x36\x2e\x32\x34\x32\x2d\ +\x36\x2e\x37\x31\x33\x2d\x38\x2e\x35\x37\x31\x2d\x36\x2e\x37\x36\ +\x31\x2d\x31\x32\x2e\x38\x35\x38\x2d\x31\x34\x2e\x38\x31\x35\x2d\ +\x31\x32\x2e\x38\x35\x38\x2d\x32\x34\x2e\x31\x36\x35\x20\x30\x2d\ +\x32\x2e\x37\x33\x32\x2e\x35\x37\x36\x2d\x35\x2e\x37\x32\x38\x20\ +\x31\x2e\x37\x33\x35\x2d\x39\x2e\x30\x30\x32\x7a\x22\x20\x66\x69\ +\x6c\x6c\x3d\x22\x23\x30\x30\x37\x32\x62\x63\x22\x2f\x3e\x0d\x0a\ +\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x33\x31\x2e\x36\x31\x20\ +\x37\x2e\x39\x37\x31\x63\x31\x2e\x31\x33\x37\x20\x30\x20\x32\x2e\ +\x38\x35\x34\x2e\x35\x30\x36\x20\x35\x2e\x31\x30\x35\x20\x31\x2e\ +\x35\x30\x33\x20\x32\x2e\x36\x36\x39\x20\x31\x2e\x31\x38\x39\x20\ +\x34\x2e\x37\x31\x33\x20\x31\x2e\x37\x36\x37\x20\x36\x2e\x32\x34\ +\x38\x20\x31\x2e\x37\x36\x37\x2e\x38\x33\x37\x20\x30\x20\x32\x2e\ +\x37\x34\x32\x2d\x2e\x33\x31\x37\x20\x31\x30\x2e\x30\x30\x35\x2d\ +\x32\x2e\x37\x31\x34\x20\x31\x2e\x39\x37\x35\x20\x32\x2e\x34\x31\ +\x33\x20\x33\x2e\x35\x36\x36\x20\x35\x2e\x34\x35\x32\x20\x34\x2e\ +\x37\x33\x39\x20\x39\x2e\x30\x34\x37\x6c\x2e\x33\x34\x31\x20\x31\ +\x2e\x30\x33\x35\x68\x2e\x30\x39\x34\x63\x2e\x38\x36\x39\x20\x32\ +\x2e\x37\x32\x20\x31\x2e\x33\x30\x39\x20\x35\x2e\x32\x34\x20\x31\ +\x2e\x33\x30\x39\x20\x37\x2e\x35\x30\x32\x20\x30\x20\x38\x2e\x38\ +\x36\x35\x2d\x34\x2e\x31\x35\x38\x20\x31\x36\x2e\x36\x32\x2d\x31\ +\x32\x2e\x33\x36\x20\x32\x33\x2e\x30\x35\x31\x2d\x35\x2e\x33\x33\ +\x34\x20\x34\x2e\x31\x39\x38\x2d\x31\x30\x2e\x35\x31\x35\x20\x36\ +\x2e\x33\x32\x37\x2d\x31\x35\x2e\x33\x39\x38\x20\x36\x2e\x33\x32\ +\x37\x2d\x34\x2e\x37\x37\x39\x20\x30\x2d\x39\x2e\x39\x33\x31\x2d\ +\x32\x2e\x31\x35\x2d\x31\x35\x2e\x33\x31\x33\x2d\x36\x2e\x33\x39\ +\x31\x2d\x31\x2e\x35\x34\x36\x2d\x31\x2e\x32\x32\x2d\x32\x2e\x39\ +\x36\x35\x2d\x32\x2e\x34\x39\x38\x2d\x34\x2e\x32\x31\x37\x2d\x33\ +\x2e\x38\x30\x32\x2d\x35\x2e\x33\x35\x35\x2d\x35\x2e\x35\x36\x39\ +\x2d\x38\x2e\x30\x37\x2d\x31\x32\x2e\x30\x32\x35\x2d\x38\x2e\x30\ +\x37\x2d\x31\x39\x2e\x31\x38\x36\x20\x30\x2d\x32\x2e\x35\x35\x32\ +\x2e\x35\x35\x35\x2d\x35\x2e\x34\x31\x34\x20\x31\x2e\x36\x34\x39\ +\x2d\x38\x2e\x35\x30\x35\x6c\x2e\x37\x30\x38\x2d\x32\x68\x2d\x2e\ +\x30\x31\x36\x63\x31\x2e\x31\x32\x34\x2d\x32\x2e\x37\x31\x36\x20\ +\x32\x2e\x34\x38\x37\x2d\x35\x2e\x30\x38\x36\x20\x34\x2e\x30\x36\ +\x37\x2d\x37\x2e\x30\x37\x33\x20\x37\x2e\x32\x34\x32\x20\x32\x2e\ +\x33\x39\x32\x20\x39\x2e\x31\x31\x31\x20\x32\x2e\x37\x30\x38\x20\ +\x39\x2e\x39\x31\x37\x20\x32\x2e\x37\x30\x38\x20\x31\x2e\x35\x39\ +\x20\x30\x20\x33\x2e\x36\x33\x37\x2d\x2e\x35\x38\x20\x36\x2e\x32\ +\x35\x33\x2d\x31\x2e\x37\x37\x31\x20\x32\x2e\x37\x33\x33\x2d\x31\ +\x2e\x32\x33\x38\x20\x34\x2e\x31\x39\x34\x2d\x31\x2e\x34\x39\x38\ +\x20\x34\x2e\x39\x33\x39\x2d\x31\x2e\x34\x39\x38\x6d\x30\x2d\x31\ +\x2e\x35\x63\x2d\x31\x2e\x33\x31\x20\x30\x2d\x33\x2e\x31\x36\x38\ +\x2e\x35\x34\x39\x2d\x35\x2e\x35\x35\x38\x20\x31\x2e\x36\x33\x33\ +\x2d\x32\x2e\x33\x38\x39\x20\x31\x2e\x30\x38\x38\x2d\x34\x2e\x32\ +\x37\x31\x20\x31\x2e\x36\x33\x37\x2d\x35\x2e\x36\x33\x34\x20\x31\ +\x2e\x36\x33\x37\x2d\x31\x2e\x30\x35\x33\x20\x30\x2d\x34\x2e\x35\ +\x33\x31\x2d\x2e\x39\x39\x2d\x31\x30\x2e\x34\x31\x37\x2d\x32\x2e\ +\x39\x35\x35\x2d\x32\x2e\x32\x35\x34\x20\x32\x2e\x35\x39\x37\x2d\ +\x34\x2e\x31\x30\x35\x20\x35\x2e\x38\x34\x35\x2d\x35\x2e\x35\x33\ +\x35\x20\x39\x2e\x37\x33\x35\x2d\x2e\x30\x37\x39\x2e\x31\x39\x33\ +\x2d\x2e\x31\x34\x37\x2e\x33\x38\x38\x2d\x2e\x32\x31\x39\x2e\x35\ +\x38\x34\x68\x2e\x30\x37\x39\x63\x2d\x31\x2e\x31\x35\x39\x20\x33\ +\x2e\x32\x37\x33\x2d\x31\x2e\x37\x33\x35\x20\x36\x2e\x32\x37\x33\ +\x2d\x31\x2e\x37\x33\x35\x20\x39\x2e\x30\x30\x35\x20\x30\x20\x37\ +\x2e\x36\x20\x32\x2e\x38\x33\x31\x20\x31\x34\x2e\x33\x34\x20\x38\ +\x2e\x34\x38\x39\x20\x32\x30\x2e\x32\x32\x36\x20\x31\x2e\x33\x30\ +\x36\x20\x31\x2e\x33\x35\x38\x20\x32\x2e\x37\x36\x33\x20\x32\x2e\ +\x36\x37\x32\x20\x34\x2e\x33\x37\x20\x33\x2e\x39\x33\x39\x20\x35\ +\x2e\x36\x38\x33\x20\x34\x2e\x34\x37\x38\x20\x31\x31\x2e\x30\x39\ +\x20\x36\x2e\x37\x31\x33\x20\x31\x36\x2e\x32\x34\x32\x20\x36\x2e\ +\x37\x31\x33\x20\x35\x2e\x32\x35\x36\x20\x30\x20\x31\x30\x2e\x36\ +\x39\x39\x2d\x32\x2e\x32\x32\x20\x31\x36\x2e\x33\x32\x36\x2d\x36\ +\x2e\x36\x34\x38\x20\x38\x2e\x36\x32\x31\x2d\x36\x2e\x37\x36\x20\ +\x31\x32\x2e\x39\x33\x33\x2d\x31\x34\x2e\x38\x33\x39\x20\x31\x32\ +\x2e\x39\x33\x33\x2d\x32\x34\x2e\x32\x33\x20\x30\x2d\x32\x2e\x37\ +\x33\x32\x2d\x2e\x35\x37\x39\x2d\x35\x2e\x37\x32\x38\x2d\x31\x2e\ +\x37\x33\x2d\x39\x2e\x30\x30\x32\x68\x2d\x2e\x30\x30\x34\x2d\x2e\ +\x30\x37\x39\x2d\x2e\x30\x30\x34\x63\x2d\x31\x2e\x33\x36\x39\x2d\ +\x34\x2e\x31\x39\x39\x2d\x33\x2e\x32\x36\x37\x2d\x37\x2e\x36\x33\ +\x39\x2d\x35\x2e\x36\x38\x33\x2d\x31\x30\x2e\x33\x32\x33\x2d\x35\ +\x2e\x38\x38\x39\x20\x31\x2e\x39\x36\x34\x2d\x39\x2e\x33\x38\x35\ +\x20\x32\x2e\x39\x35\x35\x2d\x31\x30\x2e\x34\x38\x37\x20\x32\x2e\ +\x39\x35\x35\x2d\x31\x2e\x33\x31\x38\x20\x30\x2d\x33\x2e\x31\x39\ +\x35\x2d\x2e\x35\x34\x39\x2d\x35\x2e\x36\x33\x38\x2d\x31\x2e\x36\ +\x33\x37\x2d\x32\x2e\x34\x34\x36\x2d\x31\x2e\x30\x38\x32\x2d\x34\ +\x2e\x33\x34\x37\x2d\x31\x2e\x36\x33\x32\x2d\x35\x2e\x37\x31\x36\ +\x2d\x31\x2e\x36\x33\x32\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\ +\x32\x33\x31\x66\x32\x30\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\ +\x3e\x0d\x0a\ " qt_resource_name = b"\ @@ -1304,61 +2885,101 @@ \x0a\xbc\x8c\xf4\ \x00\x64\ \x00\x65\x00\x66\x00\x61\x00\x75\x00\x6c\x00\x74\ -\x00\x0a\ -\x01\xb9\x31\x87\ -\x00\x6c\ -\x00\x6f\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0f\ \x09\xee\xdd\x07\ \x00\x73\ \x00\x79\x00\x6d\x00\x62\x00\x6f\x00\x6c\x00\x6f\x00\x67\x00\x79\x00\x55\x00\x70\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x11\ -\x0b\x66\x8f\xe7\ -\x00\x73\ -\x00\x79\x00\x6d\x00\x62\x00\x6f\x00\x6c\x00\x6f\x00\x67\x00\x79\x00\x44\x00\x6f\x00\x77\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\ -\ -\x00\x15\ -\x03\x14\x6b\xa7\ -\x00\x6d\ -\x00\x41\x00\x63\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x46\x00\x69\x00\x6c\x00\x65\x00\x53\x00\x61\x00\x76\x00\x65\x00\x41\x00\x73\ -\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x10\ \x05\x7f\x27\x87\ \x00\x73\ \x00\x79\x00\x6d\x00\x62\x00\x6f\x00\x6c\x00\x6f\x00\x67\x00\x79\x00\x41\x00\x64\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x0c\ -\x0e\x3d\x31\x87\ -\x00\x75\ -\x00\x6e\x00\x6c\x00\x6f\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x13\ -\x01\x17\x09\x47\ -\x00\x73\ -\x00\x79\x00\x6d\x00\x62\x00\x6f\x00\x6c\x00\x6f\x00\x67\x00\x79\x00\x52\x00\x65\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x73\ -\x00\x76\x00\x67\ \x00\x14\ \x09\x93\x27\x67\ \x00\x6d\ \x00\x49\x00\x63\x00\x6f\x00\x6e\x00\x43\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x50\x00\x69\x00\x63\x00\x6b\x00\x65\x00\x72\x00\x2e\ \x00\x73\x00\x76\x00\x67\ \x00\x13\ -\x08\x3a\x2b\x27\ -\x00\x6d\ -\x00\x49\x00\x63\x00\x6f\x00\x6e\x00\x43\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x57\x00\x68\x00\x65\x00\x65\x00\x6c\x00\x2e\x00\x73\ +\x01\x17\x09\x47\ +\x00\x73\ +\x00\x79\x00\x6d\x00\x62\x00\x6f\x00\x6c\x00\x6f\x00\x67\x00\x79\x00\x52\x00\x65\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x73\ \x00\x76\x00\x67\ +\x00\x1c\ +\x06\xba\x4d\x07\ +\x00\x6d\ +\x00\x49\x00\x63\x00\x6f\x00\x6e\x00\x4c\x00\x61\x00\x62\x00\x65\x00\x6c\x00\x51\x00\x75\x00\x61\x00\x64\x00\x72\x00\x61\x00\x6e\ +\x00\x74\x00\x4f\x00\x66\x00\x66\x00\x73\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x12\ +\x09\x79\x91\x07\ +\x00\x6d\ +\x00\x49\x00\x63\x00\x6f\x00\x6e\x00\x46\x00\x69\x00\x65\x00\x6c\x00\x64\x00\x54\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x73\x00\x76\ +\x00\x67\ +\x00\x0e\ +\x08\x4f\x94\x47\ +\x00\x6a\ +\x00\x6f\x00\x69\x00\x6e\x00\x5f\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0f\ \x0d\xeb\xda\x47\ \x00\x6d\ \x00\x41\x00\x63\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x44\x00\x72\x00\x61\x00\x77\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x11\ +\x0b\x66\x8f\xe7\ +\x00\x73\ +\x00\x79\x00\x6d\x00\x62\x00\x6f\x00\x6c\x00\x6f\x00\x67\x00\x79\x00\x44\x00\x6f\x00\x77\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\ +\ +\x00\x15\ +\x03\x14\x6b\xa7\ +\x00\x6d\ +\x00\x41\x00\x63\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x46\x00\x69\x00\x6c\x00\x65\x00\x53\x00\x61\x00\x76\x00\x65\x00\x41\x00\x73\ +\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x13\ +\x08\x3a\x2b\x27\ +\x00\x6d\ +\x00\x49\x00\x63\x00\x6f\x00\x6e\x00\x43\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x57\x00\x68\x00\x65\x00\x65\x00\x6c\x00\x2e\x00\x73\ +\x00\x76\x00\x67\ +\x00\x0e\ +\x06\xcd\x86\x87\ +\x00\x6a\ +\x00\x6f\x00\x69\x00\x6e\x00\x5f\x00\x6d\x00\x69\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x14\ \x03\x3e\x1a\x47\ \x00\x6d\ \x00\x41\x00\x63\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x41\x00\x74\x00\x6c\x00\x61\x00\x73\x00\x4e\x00\x65\x00\x78\x00\x74\x00\x2e\ \x00\x73\x00\x76\x00\x67\ +\x00\x12\ +\x0e\x68\x00\xe7\ +\x00\x6d\ +\x00\x41\x00\x63\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x4f\x00\x70\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x73\x00\x2e\x00\x73\x00\x76\ +\x00\x67\ +\x00\x0c\ +\x0e\x3d\x31\x87\ +\x00\x75\ +\x00\x6e\x00\x6c\x00\x6f\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0f\ +\x01\xd3\xd8\x27\ +\x00\x6d\ +\x00\x41\x00\x63\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x55\x00\x6e\x00\x64\x00\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0e\ +\x00\xb7\xf7\x07\ +\x00\x6a\ +\x00\x6f\x00\x69\x00\x6e\x00\x5f\x00\x62\x00\x65\x00\x76\x00\x65\x00\x6c\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0d\ +\x04\xd3\x7e\xb3\ +\x00\x70\ +\x00\x72\x00\x6f\x00\x70\x00\x65\x00\x72\x00\x74\x00\x79\x00\x69\x00\x63\x00\x6f\x00\x6e\x00\x73\ +\x00\x0a\ +\x01\xb9\x31\x87\ +\x00\x6c\ +\x00\x6f\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x16\ \x09\x3f\x3f\x47\ \x00\x6d\ \x00\x49\x00\x63\x00\x6f\x00\x6e\x00\x43\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x53\x00\x77\x00\x61\x00\x74\x00\x63\x00\x68\x00\x65\ \x00\x73\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x1c\ +\x05\xbb\xc4\x07\ +\x00\x6d\ +\x00\x49\x00\x63\x00\x6f\x00\x6e\x00\x4c\x00\x61\x00\x62\x00\x65\x00\x6c\x00\x51\x00\x75\x00\x61\x00\x64\x00\x72\x00\x61\x00\x6e\ +\x00\x74\x00\x43\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x13\ \x06\xfb\xcd\x07\ \x00\x6d\ @@ -1369,27 +2990,74 @@ \x00\x6d\ \x00\x49\x00\x63\x00\x6f\x00\x6e\x00\x43\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x42\x00\x6f\x00\x78\x00\x2e\x00\x73\x00\x76\x00\x67\ \ +\x00\x0f\ +\x0a\xf0\xaf\xc7\ +\x00\x6c\ +\x00\x61\x00\x62\x00\x65\x00\x6c\x00\x73\x00\x68\x00\x61\x00\x64\x00\x6f\x00\x77\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0a\ +\x0a\xca\x42\x47\ +\x00\x72\ +\x00\x65\x00\x6e\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0d\ +\x08\x06\xdc\x47\ +\x00\x6c\ +\x00\x61\x00\x62\x00\x65\x00\x6c\x00\x74\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x13\ +\x0c\x8e\x45\x47\ +\x00\x6c\ +\x00\x61\x00\x62\x00\x65\x00\x6c\x00\x66\x00\x6f\x00\x72\x00\x6d\x00\x61\x00\x74\x00\x74\x00\x69\x00\x6e\x00\x67\x00\x2e\x00\x73\ +\x00\x76\x00\x67\ +\x00\x12\ +\x0a\x86\x52\x47\ +\x00\x6c\ +\x00\x61\x00\x62\x00\x65\x00\x6c\x00\x70\x00\x6c\x00\x61\x00\x63\x00\x65\x00\x6d\x00\x65\x00\x6e\x00\x74\x00\x2e\x00\x73\x00\x76\ +\x00\x67\ +\x00\x0f\ +\x0d\x41\xa4\xa7\ +\x00\x6c\ +\x00\x61\x00\x62\x00\x65\x00\x6c\x00\x62\x00\x75\x00\x66\x00\x66\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x13\ +\x0f\x67\x81\x87\ +\x00\x6c\ +\x00\x61\x00\x62\x00\x65\x00\x6c\x00\x62\x00\x61\x00\x63\x00\x6b\x00\x67\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\ +\x00\x76\x00\x67\ " qt_resource_struct_v1 = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ \x00\x00\x00\x12\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\ -\x00\x00\x00\x24\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x04\ -\x00\x00\x01\x12\x00\x00\x00\x00\x00\x01\x00\x00\x1c\xe0\ -\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x27\ -\x00\x00\x01\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x65\ -\x00\x00\x00\xce\x00\x00\x00\x00\x00\x01\x00\x00\x17\xdb\ -\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x00\x42\x8e\ -\x00\x00\x01\x6c\x00\x01\x00\x00\x00\x01\x00\x00\x25\x6f\ -\x00\x00\x01\xea\x00\x01\x00\x00\x00\x01\x00\x00\x3f\x98\ -\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x49\ -\x00\x00\x00\x52\x00\x01\x00\x00\x00\x01\x00\x00\x02\xd8\ -\x00\x00\x00\x76\x00\x01\x00\x00\x00\x01\x00\x00\x08\xff\ -\x00\x00\x02\x48\x00\x01\x00\x00\x00\x01\x00\x00\x43\xbf\ -\x00\x00\x01\x98\x00\x00\x00\x00\x00\x01\x00\x00\x29\xcb\ -\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x26\ +\x00\x00\x00\x24\x00\x02\x00\x00\x00\x17\x00\x00\x00\x04\ +\x00\x00\x02\xca\x00\x00\x00\x00\x00\x01\x00\x00\x58\xcc\ +\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x98\ +\x00\x00\x03\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x5a\x14\ +\x00\x00\x02\xa6\x00\x00\x00\x00\x00\x01\x00\x00\x55\x4f\ +\x00\x00\x01\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x37\xfd\ +\x00\x00\x02\x30\x00\x00\x00\x00\x00\x01\x00\x00\x46\x25\ +\x00\x00\x02\xec\x00\x02\x00\x00\x00\x07\x00\x00\x00\x1b\ +\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x06\x27\ +\x00\x00\x03\x58\x00\x00\x00\x00\x00\x01\x00\x00\x5f\xe2\ +\x00\x00\x00\xdc\x00\x00\x00\x00\x00\x01\x00\x00\x11\x01\ +\x00\x00\x02\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x45\x0d\ +\x00\x00\x03\x96\x00\x00\x00\x00\x00\x01\x00\x00\x69\x6b\ +\x00\x00\x01\xe2\x00\x01\x00\x00\x00\x01\x00\x00\x40\xb1\ +\x00\x00\x01\x44\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xf3\ +\x00\x00\x03\x26\x00\x01\x00\x00\x00\x01\x00\x00\x5c\xec\ +\x00\x00\x01\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x2b\ +\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x08\x72\ +\x00\x00\x00\x38\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x8a\x00\x01\x00\x00\x00\x01\x00\x00\x31\xd5\ +\x00\x00\x03\xc2\x00\x01\x00\x00\x00\x01\x00\x00\x6a\x9c\ +\x00\x00\x01\x66\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x3b\ +\x00\x00\x02\x88\x00\x00\x00\x00\x00\x01\x00\x00\x52\x95\ +\x00\x00\x02\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x47\x58\ +\x00\x00\x04\x28\x00\x00\x00\x00\x00\x01\x00\x00\x87\xae\ +\x00\x00\x04\x74\x00\x00\x00\x00\x00\x01\x00\x00\x98\x06\ +\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x82\xc7\ +\x00\x00\x03\xea\x00\x00\x00\x00\x00\x01\x00\x00\x74\xd9\ +\x00\x00\x04\x48\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x6a\ +\x00\x00\x04\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x99\x76\ +\x00\x00\x04\xc2\x00\x00\x00\x00\x00\x01\x00\x00\xa6\x68\ " qt_resource_struct_v2 = b"\ @@ -1399,40 +3067,72 @@ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x12\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x24\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x04\ +\x00\x00\x00\x24\x00\x02\x00\x00\x00\x17\x00\x00\x00\x04\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\x12\x00\x00\x00\x00\x00\x01\x00\x00\x1c\xe0\ +\x00\x00\x02\xca\x00\x00\x00\x00\x00\x01\x00\x00\x58\xcc\ +\x00\x00\x01\x5c\xeb\x45\x35\x73\ +\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x98\ \x00\x00\x01\x5c\xeb\x45\x38\x00\ -\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x03\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x5a\x14\ \x00\x00\x01\x5c\xeb\x45\x35\x89\ -\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x27\ +\x00\x00\x02\xa6\x00\x00\x00\x00\x00\x01\x00\x00\x55\x4f\ +\x00\x00\x01\x5c\xeb\x45\x37\x79\ +\x00\x00\x01\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x37\xfd\ \x00\x00\x01\x5c\xeb\x45\x36\xa4\ -\x00\x00\x01\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x65\ +\x00\x00\x02\x30\x00\x00\x00\x00\x00\x01\x00\x00\x46\x25\ \x00\x00\x01\x5c\xeb\x45\x36\x54\ -\x00\x00\x00\xce\x00\x00\x00\x00\x00\x01\x00\x00\x17\xdb\ +\x00\x00\x02\xec\x00\x02\x00\x00\x00\x07\x00\x00\x00\x1b\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x06\x27\ \x00\x00\x01\x5c\xeb\x45\x37\xff\ -\x00\x00\x02\x1c\x00\x00\x00\x00\x00\x01\x00\x00\x42\x8e\ +\x00\x00\x03\x58\x00\x00\x00\x00\x00\x01\x00\x00\x5f\xe2\ +\x00\x00\x01\x5c\xeb\x45\x37\xa7\ +\x00\x00\x00\xdc\x00\x00\x00\x00\x00\x01\x00\x00\x11\x01\ +\x00\x00\x01\x5c\xeb\x45\x37\xa7\ +\x00\x00\x02\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x45\x0d\ +\x00\x00\x01\x5c\xeb\x45\x35\x83\ +\x00\x00\x03\x96\x00\x00\x00\x00\x00\x01\x00\x00\x69\x6b\ \x00\x00\x01\x5c\xeb\x45\x36\x8e\ -\x00\x00\x01\x6c\x00\x01\x00\x00\x00\x01\x00\x00\x25\x6f\ +\x00\x00\x01\xe2\x00\x01\x00\x00\x00\x01\x00\x00\x40\xb1\ \x00\x00\x01\x5c\xeb\x45\x37\x97\ -\x00\x00\x01\xea\x00\x01\x00\x00\x00\x01\x00\x00\x3f\x98\ +\x00\x00\x01\x44\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xf3\ +\x00\x00\x01\x5c\xeb\x45\x35\x84\ +\x00\x00\x03\x26\x00\x01\x00\x00\x00\x01\x00\x00\x5c\xec\ \x00\x00\x01\x5c\xeb\x45\x37\x97\ -\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x49\ +\x00\x00\x01\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x2b\ +\x00\x00\x01\x5c\xeb\x45\x37\xa4\ +\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x08\x72\ \x00\x00\x01\x5c\xeb\x45\x37\x96\ -\x00\x00\x00\x52\x00\x01\x00\x00\x00\x01\x00\x00\x02\xd8\ +\x00\x00\x00\x38\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x01\x5c\xea\x4b\x82\xb0\ -\x00\x00\x00\x76\x00\x01\x00\x00\x00\x01\x00\x00\x08\xff\ +\x00\x00\x01\x8a\x00\x01\x00\x00\x00\x01\x00\x00\x31\xd5\ \x00\x00\x01\x5c\xea\x4c\x68\xeb\ -\x00\x00\x02\x48\x00\x01\x00\x00\x00\x01\x00\x00\x43\xbf\ +\x00\x00\x03\xc2\x00\x01\x00\x00\x00\x01\x00\x00\x6a\x9c\ \x00\x00\x01\x5c\xeb\x45\x37\x95\ -\x00\x00\x01\x98\x00\x00\x00\x00\x00\x01\x00\x00\x29\xcb\ +\x00\x00\x01\x66\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x3b\ \x00\x00\x01\x5c\xeb\x45\x36\x86\ -\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x26\ +\x00\x00\x02\x88\x00\x00\x00\x00\x00\x01\x00\x00\x52\x95\ \x00\x00\x01\x5c\xeb\x45\x38\x04\ +\x00\x00\x02\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x47\x58\ +\x00\x00\x01\x6c\x4f\x54\x7c\x58\ +\x00\x00\x04\x28\x00\x00\x00\x00\x00\x01\x00\x00\x87\xae\ +\x00\x00\x01\x5c\xeb\x45\x37\xdb\ +\x00\x00\x04\x74\x00\x00\x00\x00\x00\x01\x00\x00\x98\x06\ +\x00\x00\x01\x5c\xeb\x45\x37\xda\ +\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x82\xc7\ +\x00\x00\x01\x5c\xeb\x45\x37\xe3\ +\x00\x00\x03\xea\x00\x00\x00\x00\x00\x01\x00\x00\x74\xd9\ +\x00\x00\x01\x5c\xeb\x45\x37\xdb\ +\x00\x00\x04\x48\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x6a\ +\x00\x00\x01\x5c\xeb\x45\x37\xd9\ +\x00\x00\x04\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x99\x76\ +\x00\x00\x01\x5c\xeb\x45\x37\xd9\ +\x00\x00\x04\xc2\x00\x00\x00\x00\x00\x01\x00\x00\xa6\x68\ +\x00\x00\x01\x5c\xeb\x45\x37\xd8\ " -qt_version = QtCore.qVersion().split('.') -if qt_version < ['5', '8', '0']: +qt_version = [int(v) for v in QtCore.qVersion().split('.')] +if qt_version < [5, 8, 0]: rcc_version = 1 qt_resource_struct = qt_resource_struct_v1 else: From 4612fb6f5aff7e189ec0348a096d8e29afa43090 Mon Sep 17 00:00:00 2001 From: "tong.zhai" Date: Fri, 2 Aug 2019 12:20:51 -0400 Subject: [PATCH 09/27] reintroduce previous individual label style change capability per #197 and #130 --- src/ui/map_tools.py | 66 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/src/ui/map_tools.py b/src/ui/map_tools.py index edfe32af..9b33c375 100644 --- a/src/ui/map_tools.py +++ b/src/ui/map_tools.py @@ -744,6 +744,7 @@ def addCoordinates(self, coordinates, layer_name): layer = QgsVectorLayer("Point", layer_name, "memory") provider = layer.dataProvider() is_centroid = "CENTROID" in layer.name().upper() + is_label = "LABEL" in layer.name().upper() # add fields if is_centroid: @@ -751,7 +752,14 @@ def addCoordinates(self, coordinates, layer_name): QgsField("color", QtCore.QVariant.String), QgsField("sub_mapid", QtCore.QVariant.Int), QgsField("sub_modelid", QtCore.QVariant.String)]) - pass + elif is_label: + provider.addAttributes([QgsField("name", QtCore.QVariant.String), + QgsField("color", QtCore.QVariant.String), + QgsField("value", QtCore.QVariant.Double), + QgsField("bold", QtCore.QVariant.Bool), + QgsField("italic", QtCore.QVariant.Bool), + QgsField("size", QtCore.QVariant.Double), + QgsField("font", QtCore.QVariant.String)]) else: provider.addAttributes([QgsField("name", QtCore.QVariant.String), QgsField("color", QtCore.QVariant.String), @@ -851,15 +859,16 @@ def set_default_point_renderer(layer, coordinates=None, size=3.5, do_labels=True # size = 10.0 # symbol_layer.setOutlineColor(QColor('transparent')) # symbol_layer.setColor(QColor('transparent')) + EmbedMap.config_labeling(layer, None) symbol_layer.setEnabled(False) else: pal_layer.xOffset = size pal_layer.yOffset = -size - # pal_layer.textColor = None - # pal_layer.setDataDefinedProperty(QgsPalLayerSettings.Color, True, False, "", "color") - labeler = QgsVectorLayerSimpleLabeling(pal_layer) - layer.setLabeling(labeler) - layer.setLabelsEnabled(True) + # pal_layer.textColor = None + # pal_layer.setDataDefinedProperty(QgsPalLayerSettings.Color, True, False, "", "color") + labeler = QgsVectorLayerSimpleLabeling(pal_layer) + layer.setLabeling(labeler) + layer.setLabelsEnabled(True) symbol_layer.setSize(size) symbol.appendSymbolLayer(symbol_layer) @@ -880,8 +889,49 @@ def config_labeling(layer, txt_format): # expr = "case when size < 3 then size * 2 else size end case" # pal_layer.setDataDefinedProperty(QgsPalLayerSettings.Size, True, True, expr, '') if "LABELS" in layer.name().upper(): - new_format = QgsTextFormat(txt_format) - pal_layer.setFormat(new_format) + if txt_format is not None: + new_format = QgsTextFormat(txt_format) + pal_layer.setFormat(new_format) + else: + # new code to implement bold, italics, font + provider = layer.dataProvider() + for feature in provider.getFeatures(): + font_name = QFont().family() + fmt = pal_layer.format() + font = fmt.font() + is_bold = feature[3] + is_italic = feature[4] + font_size = 10 + if float(feature[5]): + font_size = float(feature[5]) + if len(str(feature[6])) > 0: + font_name = str(feature[6]) + font.setFamily(font_name) + font.setBold(is_bold) + font.setItalic(is_italic) + fmt.setFont(font) + fmt.setSize(font_size) + pal_layer.setFormat(fmt) + + pc = QgsPropertyCollection('ddp') + + qgs_prop_bold = QgsProperty() + qgs_prop_bold.setField("bold") + pc.setProperty(QgsPalLayerSettings.Bold, qgs_prop_bold) + + qgs_prop_italic = QgsProperty() + qgs_prop_italic.setField("italic") + pc.setProperty(QgsPalLayerSettings.Italic, qgs_prop_italic) + + qgs_prop_size = QgsProperty() + qgs_prop_size.setField("size") + pc.setProperty(QgsPalLayerSettings.Size, qgs_prop_size) + + qgs_prop_font = QgsProperty() + qgs_prop_font.setField("family") + pc.setProperty(QgsPalLayerSettings.Family, qgs_prop_font) + + pal_layer.setDataDefinedProperties(pc) else: # pal_layer.xOffset = size # pal_layer.yOffset = -size From f647ffabfcab28e1c3805ef344f233fb37b97c32 Mon Sep 17 00:00:00 2001 From: PaulDudaRESPEC Date: Fri, 2 Aug 2019 15:37:34 -0400 Subject: [PATCH 10/27] frmClimatology -- use english/metric labeling on climatology tabs --- src/ui/SWMM/frmClimatology.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/ui/SWMM/frmClimatology.py b/src/ui/SWMM/frmClimatology.py index b27e478b..65109762 100644 --- a/src/ui/SWMM/frmClimatology.py +++ b/src/ui/SWMM/frmClimatology.py @@ -37,9 +37,9 @@ def __init__(self, main_form, climate_type): # self.cboEvap.clicked.connect(self.cboEvap_currentIndexChanged) self.cboEvap.currentIndexChanged.connect(self.cboEvap_currentIndexChanged) self.climate_type = climate_type + self._main_form = main_form if main_form and main_form.project: self.set_all(main_form.project) - self._main_form = main_form if climate_type: self.set_from(main_form.project, climate_type) @@ -143,6 +143,10 @@ def set_all(self, project): self.cbxStart.setChecked(True) # wind speed tab + if self._main_form.project.metric: + self.lblMonthlyWind.setText("Monthly Average Wind Speed (km/hr)") + else: + self.lblMonthlyWind.setText("Monthly Wind Speed (mph)") if temp_section.wind_speed.source == WindSource.MONTHLY: self.rbnMonthly.setChecked(True) monthly_list = temp_section.wind_speed.wind_speed_monthly @@ -155,6 +159,12 @@ def set_all(self, project): self.rbnUseClimate.setChecked(True) # snow melt tab + if self._main_form.project.metric: + self.lblSnowDivide.setText("Dividing Temperature Between Snow and Rain (degrees C)") + self.lblSnowElevation.setText("Elevation above MSL (meters)") + else: + self.lblSnowDivide.setText("Dividing Temperature Between Snow and Rain (degrees F)") + self.lblSnowElevation.setText("Elevation above MSL (feet)") val, val_is_good = ParseData.floatTryParse(temp_section.snow_melt.snow_temp) if not val_is_good: val = 34 @@ -189,6 +199,8 @@ def set_all(self, project): pass else: self.btnPerNo_Clicked() + for row in range(self.tblAreal.rowCount()): + self.tblAreal.setRowHeight(row, 10) # self.tblAreal.resizeColumnsToContents() # adjustments for temp, evap, rain, cond @@ -217,6 +229,8 @@ def set_all(self, project): point_count += 1 led = QLineEdit(str(value)) self.tblAdjustments.setItem(point_count,3,QTableWidgetItem(led.text())) + for row in range(self.tblAdjustments.rowCount()): + self.tblAdjustments.setRowHeight(row, 10) def cmdOK_Clicked(self): @@ -424,6 +438,10 @@ def cboEvap_currentIndexChanged(self, newIndex): self.btnEvapTS.setVisible(False) self.lblEvapMisc.setVisible(False) self.tblEvap.setVisible(False) + if self._main_form.project.metric: + self.lblDaily.setText("Daily Evaporation (mm/day)") + else: + self.lblDaily.setText("Daily Evaporation (in/day)") elif newIndex == 1: # time series self.lblDaily.setVisible(False) self.txtDaily.setVisible(False) @@ -452,7 +470,10 @@ def cboEvap_currentIndexChanged(self, newIndex): self.lblEvapTs.setVisible(False) self.cboEvapTs.setVisible(False) self.btnEvapTS.setVisible(False) - self.lblEvapMisc.setText("Monthly Averages (in/day)") + if self._main_form.project.metric: + self.lblEvapMisc.setText("Monthly Evaporation (mm/day)") + else: + self.lblEvapMisc.setText("Monthly Evaporation (in/day)") self.lblEvapMisc.setVisible(True) self.tblEvap.setVisible(True) point_count = -1 From 6c43c9243288d2bfb110e2f3da35baffa3348a85 Mon Sep 17 00:00:00 2001 From: PaulHummelRESPEC Date: Fri, 2 Aug 2019 17:36:31 -0400 Subject: [PATCH 11/27] corrected erroneous help_topic reference for Map Label editing --- src/ui/SWMM/frmMainSWMM.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/SWMM/frmMainSWMM.py b/src/ui/SWMM/frmMainSWMM.py index 205cb7fb..1500b954 100644 --- a/src/ui/SWMM/frmMainSWMM.py +++ b/src/ui/SWMM/frmMainSWMM.py @@ -1216,7 +1216,7 @@ def get_editor(self, edit_name): edit_these.append(new_item) frm = frmGenericPropertyEditor(self, self.project.labels, edit_these, new_item, "SWMM Map Label Editor") frm.helper = HelpHandler(frm) - frm.help_topic = "swmm/src/src/maplabeleditordialog.htm" + frm.help_topic = "swmm/src/src/maplabelproperties.htm" elif edit_name in [item[0] for item in self.tree_items_using_name]: # in these cases the click on the tree diagram populates the lower left list, not directly to an editor return None From 7980d2ac10658992c53092146d6f08c81c377066 Mon Sep 17 00:00:00 2001 From: PaulDudaRESPEC Date: Fri, 2 Aug 2019 17:40:10 -0400 Subject: [PATCH 12/27] frmGroundwaterFlowDesigner -- correct path to image frmInfiltration -- show header line in grid --- src/ui/SWMM/frmGroundwaterFlowDesigner.py | 2 +- src/ui/SWMM/frmGroundwaterFlowDesigner.ui | 2 +- src/ui/SWMM/frmInfiltration.py | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ui/SWMM/frmGroundwaterFlowDesigner.py b/src/ui/SWMM/frmGroundwaterFlowDesigner.py index 1db51bf4..9bf961ae 100644 --- a/src/ui/SWMM/frmGroundwaterFlowDesigner.py +++ b/src/ui/SWMM/frmGroundwaterFlowDesigner.py @@ -128,7 +128,7 @@ def setupUi(self, frmGroundwaterFlow): sizePolicy.setHeightForWidth(self.lblImage.sizePolicy().hasHeightForWidth()) self.lblImage.setSizePolicy(sizePolicy) self.lblImage.setText(_fromUtf8("")) - self.lblImage.setPixmap(QPixmap(_fromUtf8("../swmmimages/gw.png"))) + self.lblImage.setPixmap(QPixmap(_fromUtf8("swmmimages/gw.png"))) self.lblImage.setObjectName(_fromUtf8("lblImage")) self.horizontalLayout.addWidget(self.lblImage) self.verticalLayout.addWidget(self.fraImage) diff --git a/src/ui/SWMM/frmGroundwaterFlowDesigner.ui b/src/ui/SWMM/frmGroundwaterFlowDesigner.ui index f7e32c87..378ad193 100644 --- a/src/ui/SWMM/frmGroundwaterFlowDesigner.ui +++ b/src/ui/SWMM/frmGroundwaterFlowDesigner.ui @@ -141,7 +141,7 @@ - ../swmmimages/gw.png + swmmimages/gw.png diff --git a/src/ui/SWMM/frmInfiltration.py b/src/ui/SWMM/frmInfiltration.py index 0f8a5c2f..147414a5 100644 --- a/src/ui/SWMM/frmInfiltration.py +++ b/src/ui/SWMM/frmInfiltration.py @@ -67,6 +67,8 @@ def __init__(self, parent, edit_these, new_item, title, **kwargs): set_combo_items(type(enum_val), self.cboInfilModel) set_combo(self.cboInfilModel, enum_val) + self.tblGeneric.setHorizontalHeaderLabels(['Value']) + self.tblGeneric.horizontalHeader().setFixedHeight(30) self.corner_label = QLabel("Property", self.tblGeneric) self.corner_label.setAlignment(QtCore.Qt.AlignCenter) self.corner_label.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents) From 00f3bf588b016894c811992ac437a6d7c627c5a4 Mon Sep 17 00:00:00 2001 From: "tong.zhai" Date: Fri, 2 Aug 2019 20:16:41 -0400 Subject: [PATCH 13/27] implement removal of patterns and its undo/redo to address #273 -frmMain: handle pattern delete and undo -epanet_project, swmm_project: delete_pattern, restore_pattern -make steady state simulation easier --- src/core/epanet/epanet_project.py | 64 +++++++++++++++++++++++++++++++ src/core/swmm/swmm_project.py | 63 +++++++++++++++++++++++++++++- src/ui/frmMain.py | 10 ++++- 3 files changed, 134 insertions(+), 3 deletions(-) diff --git a/src/core/epanet/epanet_project.py b/src/core/epanet/epanet_project.py index a27b368c..58940556 100644 --- a/src/core/epanet/epanet_project.py +++ b/src/core/epanet/epanet_project.py @@ -153,3 +153,67 @@ def refresh_pattern_object_references(self): if self.options.hydraulics.default_pattern_object: self.options.hydraulics.default_pattern = self.options.hydraulics.default_pattern_object.name + + def delete_pattern(self, pattern): + objects_with_pattern = [] + if self.junctions.value: + for obj_junction in self.junctions.value: + if pattern in [obj_junction.demand_pattern_object]: + obj_junction.demand_pattern_name = "" + obj_junction.demand_pattern_object = None + objects_with_pattern.append(obj_junction) + + if self.reservoirs.value: + for obj_res in self.reservoirs.value: + if pattern in [obj_res.head_pattern_object]: + obj_res.head_pattern_name = "" + obj_res.head_pattern_object = None + objects_with_pattern.append(obj_res) + + if self.demands.value: + for obj_demand in self.demands.value: + if pattern in [obj_demand.demand_pattern_object]: + obj_demand.demand_pattern = "" + obj_demand.demand_pattern_object = None + objects_with_pattern.append(obj_demand) + + if self.sources.value: + for obj_src in self.sources.value: + if pattern in [obj_src.pattern_object]: + obj_src.pattern_name = "" + obj_src.pattern_object = None + objects_with_pattern.append(obj_src) + + if self.options.hydraulics.default_pattern_object: + if pattern in [self.options.hydraulics.default_pattern_object]: + self.options.hydraulics.default_pattern = "" + self.options.hydraulics.default_pattern_object = None + objects_with_pattern.append(self.options.hydraulics) + + return objects_with_pattern + + def restore_pattern(self, objects_with_pattern, pattern): + for obj in objects_with_pattern: + if self.junctions.value: + if obj in self.junctions.value: + obj.demand_pattern_name = pattern.name + obj.demand_pattern_object = pattern + + if self.reservoirs.value: + if obj in self.reservoirs.value: + obj.head_pattern_name = pattern.name + obj.head_pattern_object = pattern + + if self.demands.value: + if obj in self.demands.value: + obj.demand_pattern = pattern.name + obj.demand_pattern_object = pattern + + if self.sources.value: + if obj in self.sources.value: + obj.pattern_name = pattern.name + obj.pattern_object = pattern + + if obj in [self.options.hydraulics.default_pattern_object]: + self.options.hydraulics.default_pattern = pattern.name + self.options.hydraulics.default_pattern_object = pattern diff --git a/src/core/swmm/swmm_project.py b/src/core/swmm/swmm_project.py index a391ebed..fae78524 100644 --- a/src/core/swmm/swmm_project.py +++ b/src/core/swmm/swmm_project.py @@ -220,6 +220,13 @@ def nodes_groups(self): def links_groups(self): return [self.conduits, self.pumps, self.orifices, self.weirs, self.outlets] + @staticmethod + def get_dwf_label_text(pattern=None): + if pattern: + return u'"' + pattern.name + u'"' + else: + return u'""' + def set_pattern_object_references(self): """ setup node <-> pattern object reference @@ -267,6 +274,58 @@ def refresh_pattern_object_references(self): # order of patterns should be kept intact for i in range(0, len(obj_dwf.time_pattern_objects)): if obj_dwf.time_pattern_objects[i]: - obj_dwf.time_patterns.append(u'"' + obj_dwf.time_pattern_objects[i].name + u'"') + # obj_dwf.time_patterns.append(u'"' + obj_dwf.time_pattern_objects[i].name + u'"') + obj_dwf.time_patterns.append(self.get_dwf_label_text(obj_dwf.time_pattern_objects[i])) else: - obj_dwf.time_patterns.append(u'""') + obj_dwf.time_patterns.append(self.get_dwf_label_text()) + + def delete_pattern(self, pattern): + objects_with_pattern = {} + if self.inflows.value: + for obj_inflow in self.inflows.value: + if pattern in [obj_inflow.baseline_pattern_object]: + obj_inflow.baseline_pattern = "" + obj_inflow.baseline_pattern_object = None + objects_with_pattern[obj_inflow] = None + + if self.aquifers.value: + for obj_aquifer in self.aquifers.value: + if pattern in [obj_aquifer.upper_evaporation_pattern_object]: + obj_aquifer.upper_evaporation_pattern = "" + obj_aquifer.upper_evaporation_pattern_object = None + objects_with_pattern[obj_aquifer] = None + + if self.dwf.value: + for obj_dwf in self.dwf.value: + # del obj_dwf.time_patterns[:] + # order of patterns should be kept intact + if pattern in obj_dwf.time_pattern_objects: + objects_with_pattern[obj_dwf] = [] + lbl_dwf_pattern = self.get_dwf_label_text(pattern) + for i in range(0, len(obj_dwf.time_patterns)): + if lbl_dwf_pattern.replace('"', '') in [obj_dwf.time_patterns[i].replace('"', '')]: + obj_dwf.time_patterns[i] = self.get_dwf_label_text() + obj_dwf.time_pattern_objects[i] = None + objects_with_pattern[obj_dwf].append(i) + + return objects_with_pattern + + def restore_pattern(self, objects_with_pattern, pattern): + for obj in objects_with_pattern.keys(): + if self.inflows.value: + if obj in self.inflows.value: + obj.baseline_pattern = pattern.name + obj.baseline_pattern_object = pattern + + if self.aquifers.value: + if obj in self.aquifers.value: + obj.upper_evaporation_pattern = pattern.name + obj.upper_evaporation_pattern_object = pattern + + if self.dwf.value: + if obj in self.dwf.value: + for i in objects_with_pattern[obj]: + # order of patterns should be kept intact + if i < len(obj.time_patterns): + obj.time_pattern_objects[i] = pattern + obj.time_patterns[i] = self.get_dwf_label_text(pattern) diff --git a/src/ui/frmMain.py b/src/ui/frmMain.py index be2ae6d1..1b8e7f98 100644 --- a/src/ui/frmMain.py +++ b/src/ui/frmMain.py @@ -714,6 +714,7 @@ def __init__(self, session, item): QUndoCommand.__init__(self, "Delete " + str(item)) self.session = session self.item = item + self.objects_with_pattern = None section_field_name = session.section_types[type(item)] if hasattr(session.project, section_field_name): self.section = getattr(session.project, section_field_name) @@ -729,6 +730,8 @@ def selectSubAndCentroid(self): layer_sublinks = self.session.model_layers.layer_by_name("sublinks") layer_sublinks.removeSelection() sel_slink_ids = [] + if not self.layer: + return if "centroid" in self.layer.name().lower(): layer_subcatchments = self.session.model_layers.layer_by_name("subcatchments") layer_subcatchments.removeSelection() @@ -773,6 +776,8 @@ def selectSubAndCentroid(self): def redo(self): self.item_index = self.section.value.index(self.item) + if "PATTERN" in self.section.SECTION_NAME: + self.objects_with_pattern = self.session.project.delete_pattern(self.item) self.section.value.remove(self.item) self.session.list_objects() # Refresh the list of items on the form if self.layer: @@ -808,6 +813,8 @@ def undo(self): self.section.value.insert(self.item_index, self.item) else: self.section.value.append(self.item) + if "PATTERN" in self.section.SECTION_NAME or "DWF" in self.section.SECTION_NAME: + self.session.project.restore_pattern(self.objects_with_pattern, self.item) self.session.list_objects() # Refresh the list of items on the form added_del = None if self.layer and self.delete_feature: @@ -1899,7 +1906,8 @@ def set_current_map_layer(self, input_tree_section): def list_selection_changed(self): try: layer = self.current_map_layer() - self.select_named_items(layer, [str(item.data()) for item in self.listViewObjects.selectedIndexes()]) + if layer: + self.select_named_items(layer, [str(item.data()) for item in self.listViewObjects.selectedIndexes()]) if len(self.listViewObjects.selectedIndexes()) > 0: self.actionStdEditObject.setEnabled(True) self.actionStdDeleteObject.setEnabled(True) From c56b34d0d3d9001fc73a44adfc0c2a63a496cc0f Mon Sep 17 00:00:00 2001 From: "tong.zhai" Date: Mon, 5 Aug 2019 13:02:27 -0400 Subject: [PATCH 14/27] add progress display and improve input file reader speed on very large files --- src/core/inp_reader_base.py | 23 +++++++++++- src/core/swmm/inp_reader_sections.py | 52 +++++++++++++--------------- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/src/core/inp_reader_base.py b/src/core/inp_reader_base.py index 0403ffb5..c2f1e847 100644 --- a/src/core/inp_reader_base.py +++ b/src/core/inp_reader_base.py @@ -3,6 +3,8 @@ from enum import Enum from core.project_base import ProjectBase, Section, SectionAsList from core.indexed_list import IndexedList +from PyQt5.QtCore import Qt +from PyQt5.QtWidgets import QProgressDialog class InputFileReader(object): @@ -23,12 +25,20 @@ def read_file(self, project, file_name): with codecs.open(file_name, 'r', 'utf-8') as inp_reader: project.file_name = file_name self.set_from_text_lines(project, inp_reader.readlines()) + """ + task = TaskOpenInput('open file', project, inp_reader.readlines(), self.read_section) + task.begun.connect(lambda: print('reading begins...')) + task.progressChanged.connect(lambda: print(task.progress())) + task.taskCompleted.connect(lambda: self.finished_reading(project)) + task.run() + """ except Exception as e: # print("Error reading {0}: {1}\n{2}".format(file_name, str(e), str(traceback.print_exc()))) try: with codecs.open(file_name, 'r', 'latin1') as inp_reader: project.file_name = file_name - self.set_from_text_lines(project, iter(inp_reader)) + # self.set_from_text_lines(project, iter(inp_reader)) + self.set_from_text_lines(project, inp_reader.readlines()) except Exception as e: self.input_err_msg = "File is probably not a valid project or input file." print("Error reading {0}: {1}\n{2}".format(file_name, str(e), str(traceback.print_exc()))) @@ -45,7 +55,15 @@ def set_from_text_lines(self, project, lines_iterator): project.section_order = [] section_name = "" section_whole = [] + total_count = len(lines_iterator) + progress = QProgressDialog('Reading input...', 'Cancel', 1, total_count) + progress.setWindowModality(Qt.WindowModal) + line_ctr = 1 for line in lines_iterator: + if line_ctr % 100 == 0: + progress.setValue(line_ctr) + if progress.wasCanceled(): + break if line.lstrip().startswith('['): if section_name: project.section_order.append(section_name.upper()) @@ -54,6 +72,9 @@ def set_from_text_lines(self, project, lines_iterator): section_whole = [section_name] elif line.strip(): section_whole.append(line.rstrip()) + line_ctr = line_ctr + 1 + progress.setValue(total_count) + if section_name: project.section_order.append(section_name.upper()) self.read_section(project, section_name, '\n'.join(section_whole)) diff --git a/src/core/swmm/inp_reader_sections.py b/src/core/swmm/inp_reader_sections.py index 0917d9dc..45e77d32 100644 --- a/src/core/swmm/inp_reader_sections.py +++ b/src/core/swmm/inp_reader_sections.py @@ -1622,22 +1622,24 @@ def read(new_text, project): fields = line.split() if len(fields) > 5: subcatchment_name = fields[0] - for subcatchment in project.subcatchments.value: - if subcatchment.name == subcatchment_name: - subcatchment.setattr_keep_type("n_imperv", fields[1]) - subcatchment.setattr_keep_type("n_perv", fields[2]) - subcatchment.setattr_keep_type("storage_depth_imperv", fields[3]) - subcatchment.setattr_keep_type("storage_depth_perv", fields[4]) - subcatchment.setattr_keep_type("percent_zero_impervious", fields[5]) - subcatchment.subarea_routing = Routing.OUTLET - if len(fields) > 6: - routing = fields[6].upper() - if routing.startswith("I"): - subcatchment.subarea_routing = Routing.IMPERVIOUS - elif routing.startswith("P"): - subcatchment.subarea_routing = Routing.PERVIOUS - if len(fields) > 7: - subcatchment.setattr_keep_type("percent_routed", fields[7]) + try: + subcatchment = project.subcatchments.value[subcatchment_name] + subcatchment.setattr_keep_type("n_imperv", fields[1]) + subcatchment.setattr_keep_type("n_perv", fields[2]) + subcatchment.setattr_keep_type("storage_depth_imperv", fields[3]) + subcatchment.setattr_keep_type("storage_depth_perv", fields[4]) + subcatchment.setattr_keep_type("percent_zero_impervious", fields[5]) + subcatchment.subarea_routing = Routing.OUTLET + if len(fields) > 6: + routing = fields[6].upper() + if routing.startswith("I"): + subcatchment.subarea_routing = Routing.IMPERVIOUS + elif routing.startswith("P"): + subcatchment.subarea_routing = Routing.PERVIOUS + if len(fields) > 7: + subcatchment.setattr_keep_type("percent_routed", fields[7]) + except KeyError as ke: + pass class TagsReader(SectionReader): @@ -1656,21 +1658,17 @@ def read(new_text, project): fields = line.split() if len(fields) > 2: object_type_name = fields[0].upper() - object_name = fields[1].upper() + # object_name = fields[1].upper() + object_name = fields[1] tag = ' '.join(fields[2:]) sections = section_map[object_type_name] - found = False for section in sections: - for candidate in section.value: - if candidate.name.upper() == object_name: - candidate.tag = tag - found = True - # print "Tagged: " + type(candidate).__name__ + ' ' + candidate.name + ' = ' + tag - break - if found: + try: + candidate = section.value[object_name] + candidate.tag = tag break - if not found: - print ("Tag not applied: " + line + "\n") + except KeyError as ke: + print("Tag not applied: " + line + "\n") class LossesReader(SectionReader): From 2040c3b2620144d71c0ccb095b283ff0915cb4d1 Mon Sep 17 00:00:00 2001 From: "tong.zhai" Date: Mon, 5 Aug 2019 18:23:26 -0400 Subject: [PATCH 15/27] fix EPANET curve loading and creation in input reader and UI --- src/core/epanet/inp_reader_sections.py | 5 +++++ src/ui/frmMain.py | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/core/epanet/inp_reader_sections.py b/src/core/epanet/inp_reader_sections.py index cf173a2e..a75e11a9 100644 --- a/src/core/epanet/inp_reader_sections.py +++ b/src/core/epanet/inp_reader_sections.py @@ -72,6 +72,11 @@ def read(new_text): if len(fields) > 2: curve.name = fields[0] curve.curve_xy.append((fields[1], fields[2])) + return curve + else: + return None + else: + return None return curve diff --git a/src/ui/frmMain.py b/src/ui/frmMain.py index 1b8e7f98..4e574298 100644 --- a/src/ui/frmMain.py +++ b/src/ui/frmMain.py @@ -1229,7 +1229,7 @@ def new_item_name(self, item_type): links_groups = self.project.links_groups() if section in links_groups: unique_groups = links_groups - elif section.SECTION_NAME.upper() in ["[RAINGAGES]", "[LABELS]"]: + elif section.SECTION_NAME.upper() in ["[RAINGAGES]", "[LABELS]", "[CURVES"]: unique_groups = [section] else: unique_groups = self.project.nodes_groups() @@ -2402,7 +2402,8 @@ def list_objects(self): else: self.dockw_more.setEnabled(True) self.dockw_more.setWindowTitle(selected_text) - self.listViewObjects.addItems(names) + if len(names) > 0: + self.listViewObjects.addItems(names) # is_node_item = False # for nt in self.tree_nodes_items: # if selected_text in nt[0]: From 43d2a35111912f9c535524c23352ace41a25e72f Mon Sep 17 00:00:00 2001 From: PaulDudaRESPEC Date: Tue, 6 Aug 2019 15:52:49 -0400 Subject: [PATCH 16/27] frmSubcatchments, frmGroundwaterFlow, frmInfiltration -- clean up adding new groundwater or infiltration from subcatchments form --- src/ui/SWMM/frmGroundwaterFlow.py | 4 ++++ src/ui/SWMM/frmInfiltration.py | 4 ++++ src/ui/SWMM/frmSubcatchments.py | 12 +++++++----- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/ui/SWMM/frmGroundwaterFlow.py b/src/ui/SWMM/frmGroundwaterFlow.py index 5db7e7c0..1475f801 100644 --- a/src/ui/SWMM/frmGroundwaterFlow.py +++ b/src/ui/SWMM/frmGroundwaterFlow.py @@ -17,6 +17,7 @@ def __init__(self, main_form, edit_these, new_item, title): self.help_topic = "swmm/src/src/groundwaterfloweditordialog.htm" self._main_form = main_form self.project = main_form.project + self.new_item = new_item self.refresh_column = -1 self.setupUi(self) self.setWindowTitle(title) @@ -96,6 +97,9 @@ def local_show(): return local_show def cmdOK_Clicked(self): + if self.new_item: + self.project.groundwater.value.append(self.new_item) + self.backend.new_item = None self.backend.apply_edits() self.close() diff --git a/src/ui/SWMM/frmInfiltration.py b/src/ui/SWMM/frmInfiltration.py index 147414a5..3cdc5f4f 100644 --- a/src/ui/SWMM/frmInfiltration.py +++ b/src/ui/SWMM/frmInfiltration.py @@ -17,6 +17,7 @@ class frmInfiltration(QMainWindow, Ui_frmInfiltrationEditor): def __init__(self, parent, edit_these, new_item, title, **kwargs): QMainWindow.__init__(self, parent) + self.new_item = new_item self.helper = HelpHandler(self) option_section = parent.project.find_section('OPTIONS') if option_section.infiltration=="HORTON" or option_section.infiltration=="MODIFIED_HORTON": @@ -225,6 +226,9 @@ def table_itemChanged(self, item): def cmdOK_Clicked(self): if hasattr(self, "backend") and self.backend is not None: + if self.new_item: + self.project.infiltration.value.append(self.new_item) + self.backend.new_item = None self.backend.apply_edits() else: if self.defaults is not None: diff --git a/src/ui/SWMM/frmSubcatchments.py b/src/ui/SWMM/frmSubcatchments.py index 96bba41a..75400d7c 100644 --- a/src/ui/SWMM/frmSubcatchments.py +++ b/src/ui/SWMM/frmSubcatchments.py @@ -165,6 +165,7 @@ def set_initial_buildup_cell(self, row, column): def make_show_groundwater(self, column): def local_show(): edit_these = [] + new_item = None groundwater_section = self.project.groundwater if isinstance(groundwater_section.value, list): if len(groundwater_section.value) > 0: @@ -174,15 +175,15 @@ def local_show(): if len(groundwater_section.value) == 0: new_item = Groundwater() new_item.subcatchment = str(self.tblGeneric.item(0, column).text()) - groundwater_section.value.append(new_item) + # groundwater_section.value.append(new_item) not until ok edit_these.append(new_item) if len(edit_these) == 0: new_item = Groundwater() groundwater_section.value = [] new_item.subcatchment = str(self.tblGeneric.item(0, column).text()) - groundwater_section.value.append(new_item) + # groundwater_section.value.append(new_item) not until ok edit_these.append(new_item) - editor = frmGroundwaterFlow(self, edit_these, None, "SWMM Groundwater Flow Editor") + editor = frmGroundwaterFlow(self._main_form, edit_these, new_item, "SWMM Groundwater Flow Editor") editor.setWindowModality(QtCore.Qt.ApplicationModal) editor.show() self.refresh_column = column @@ -195,6 +196,7 @@ def local_show(): if row >= 0: sub_name = self.tblGeneric.item(row, column).text() edit_these = [] + new_item = None infiltration_section = self.project.infiltration if isinstance(infiltration_section.value, list): if len(infiltration_section.value) > 0: @@ -218,9 +220,9 @@ def local_show(): if self._main_form and self._main_form.project_settings: self._main_form.project_settings.apply_default_infiltration_attributes(new_item) new_item.subcatchment = sub_name - infiltration_section.value.append(new_item) + # infiltration_section.value.append(new_item) not until ok edit_these.append(new_item) - editor = frmInfiltration(self, edit_these, None, "SWMM Infiltration Editor") + editor = frmInfiltration(self, edit_these, new_item, "SWMM Infiltration Editor") editor.show() return local_show From c309b19e608e257ac63c4d64e36a601f09a641c5 Mon Sep 17 00:00:00 2001 From: "tong.zhai" Date: Wed, 7 Aug 2019 17:39:59 -0400 Subject: [PATCH 17/27] fix #266 handles arbitrary number of curve points --- src/ui/EPANET/frmCurveEditor.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/ui/EPANET/frmCurveEditor.py b/src/ui/EPANET/frmCurveEditor.py index 2992ef20..0a781b6e 100644 --- a/src/ui/EPANET/frmCurveEditor.py +++ b/src/ui/EPANET/frmCurveEditor.py @@ -48,7 +48,7 @@ def __init__(self, main_form, edit_these, new_item): self.HEADCURVE = 1 self.EFFCURVE = 2 self.HLOSSCURVE = 3 - self.MAXPOINTS = 51 + self.MAXPOINTS = self.tblMult.rowCount() + 1 self.TINY = 1.e-6 self.Xlabels = {CurveType.VOLUME : " Height", CurveType.PUMP : " Flow", @@ -100,6 +100,12 @@ def __init__(self, main_form, edit_these, new_item): self.loaded = True + def update_row_count(self, row_count): + self.tblMult.setRowCount(row_count) + self.MAXPOINTS = self.tblMult.rowCount() + 1 + self.X = np.arange(self.MAXPOINTS, dtype=float) * float('NaN') + self.Y = np.arange(self.MAXPOINTS, dtype=float) * float('NaN') + def set_from(self, curve): if not isinstance(curve, Curve): curve = self.section.value[curve] @@ -124,6 +130,9 @@ def set_from(self, curve): self.Yunits[CurveType.HEADLOSS] = ' (' + LengthUnits + ')' self.Yunits[CurveType.UNSET] = "" ui.convenience.set_combo(self.cboCurveType, curve.curve_type) + self.tblMult.cellChanged.disconnect(self.tblMult_cellChanged) + if len(curve.curve_xy) > self.tblMult.rowCount(): + self.update_row_count(len(curve.curve_xy)) point_count = -1 for point in curve.curve_xy: point_count += 1 @@ -134,6 +143,8 @@ def set_from(self, curve): #CurveGrid.RowCount= MAXPOINTS + 1 #CurveID.MaxLength= MAXID; // Max.chars. in a ID #ActiveControl= CurveID + self.tblMult.cellChanged.connect(self.tblMult_cellChanged) + self.tblMult_cellChanged(point_count - 1, 1) def GetData(self): n = 0 @@ -176,6 +187,11 @@ def load_curve_data(self): a = lines[2].split() self.txtCurveName.setText(a[len(a) - 1]) if len(lines) > 3: + self.tblMult.cellChanged.disconnect(self.tblMult_cellChanged) + if len(lines) - 3 > self.tblMult.rowCount(): + self.update_row_count(len(lines) - 3) + + point_count = -1 curve_xy = [] for i in range(3, len(lines)): try: @@ -196,6 +212,8 @@ def load_curve_data(self): pass except Exception as ex: pass + self.tblMult.cellChanged.connect(self.tblMult_cellChanged) + self.tblMult_cellChanged(point_count - 1, 1) def save_curve_data(self): directory = self._main_form.program_settings.value("DataDir", "") From b24285550ce52228414b8f849cf76794d5926b59 Mon Sep 17 00:00:00 2001 From: PaulDudaRESPEC Date: Wed, 7 Aug 2019 17:45:54 -0400 Subject: [PATCH 18/27] begin implementing program preferences in response to issues #104 and #123 --- src/ui/EPANET/frmMainEPANET.py | 4 +- src/ui/frmMain.py | 6 + src/ui/frmPreferences.py | 71 +++++++ src/ui/frmPreferencesDesigner.py | 231 +++++++++++++++++++++ src/ui/frmPreferencesDesigner.ui | 332 +++++++++++++++++++++++++++++++ 5 files changed, 642 insertions(+), 2 deletions(-) create mode 100644 src/ui/frmPreferences.py create mode 100644 src/ui/frmPreferencesDesigner.py create mode 100644 src/ui/frmPreferencesDesigner.ui diff --git a/src/ui/EPANET/frmMainEPANET.py b/src/ui/EPANET/frmMainEPANET.py index ca945cfc..a0fdfec7 100644 --- a/src/ui/EPANET/frmMainEPANET.py +++ b/src/ui/EPANET/frmMainEPANET.py @@ -186,8 +186,8 @@ def __init__(self, q_application): self.actionStdProjSimulation_Options.triggered.connect(self.edit_simulation_options) self.menuProject.removeAction(self.actionStdProjDetails) # remove menus that are SWMM-specific self.menuTools.removeAction(self.actionStdConfigTools) - self.menuTools.removeAction(self.actionStdProgPrefer) - self.menuTools.deleteLater() + # self.menuTools.removeAction(self.actionStdProgPrefer) + # self.menuTools.deleteLater() self.menuObjects.deleteLater() self.toolBar_Standard.removeAction(self.actionProjTableStatistics) diff --git a/src/ui/frmMain.py b/src/ui/frmMain.py index 4e574298..208c5cdb 100644 --- a/src/ui/frmMain.py +++ b/src/ui/frmMain.py @@ -33,6 +33,7 @@ from core.project_base import ProjectBase from core.coordinate import Coordinate, Link, Polygon from ui.frmTranslateCoordinates import frmTranslateCoordinates +from ui.frmPreferences import frmPreferences from ui.inifile import ini_setting from ui.model_utility import ParseData @@ -124,6 +125,7 @@ def __init__(self, q_application): self.actionStdWinCloseAll.triggered.connect(self.close_all_windows) self.actionStdWinCloseAll.setVisible(False) self.actionStdMapToggle.triggered.connect(self.study_area_map) + self.actionStdProgPrefer.triggered.connect(self.program_preferences) # self.actionGroup_Obj = QActionGroup(self) self.cbAutoLength.setCurrentIndex(1) self.cbAutoLength.currentIndexChanged.connect(self.cbAutoLength_currentIndexChanged) @@ -2376,6 +2378,10 @@ def study_area_map(self): if self.map_win: self.map.setActiveSubWindow(self.map_win) + def program_preferences(self): + self._frmPreferences = frmPreferences(self) + self._frmPreferences.show() + def __unicode__(self): return unicode(self) diff --git a/src/ui/frmPreferences.py b/src/ui/frmPreferences.py new file mode 100644 index 00000000..ffc6e6ed --- /dev/null +++ b/src/ui/frmPreferences.py @@ -0,0 +1,71 @@ +from PyQt5 import QtCore, QtGui +from PyQt5.QtWidgets import QMainWindow +from ui.help import HelpHandler +from ui.frmPreferencesDesigner import Ui_frmPreferences + +class frmPreferences(QMainWindow, Ui_frmPreferences): + def __init__(self, main_form=None): + QMainWindow.__init__(self, main_form) + self.setupUi(self) + self.helper = HelpHandler(self) + if main_form.model == "SWMM": + self.help_topic = "swmm/src/src/settingprogrampreferences.htm" + elif main_form.model == "EPANET": + self.help_topic = "epanet/src/src/setting_.htm" + self.cmdOK.clicked.connect(self.cmdOK_Clicked) + self.cmdCancel.clicked.connect(self.cmdCancel_Clicked) + self._main_form = main_form + self.set_from(main_form.project) + self.icon = main_form.windowIcon() + + def set_from(self, project): + if self._main_form.model == "SWMM": + self.cboSubcatchment.addItem('Precipitation') + self.cboSubcatchment.addItem('Snow Depth') + self.cboSubcatchment.addItem('Evaporation') + self.cboSubcatchment.addItem('Infiltration') + self.cboSubcatchment.addItem('Runoff') + self.cboSubcatchment.addItem('GW Flow') + self.cboSubcatchment.addItem('GW Elev.') + self.cboSubcatchment.addItem('Soil Moisture') + self.cboSubcatchment.addItem('Washoff') + + self.cboNode.addItem('Depth') + self.cboNode.addItem('Head') + self.cboNode.addItem('Volume') + self.cboNode.addItem('Lateral Inflow') + self.cboNode.addItem('Total Inflow') + self.cboNode.addItem('Flooding') + self.cboNode.addItem('Quality') + + self.cboLink.addItem('Flow') + self.cboLink.addItem('Depth') + self.cboLink.addItem('Velocity') + self.cboLink.addItem('Volume') + self.cboLink.addItem('Capacity') + self.cboLink.addItem('Quality') + + elif self._main_form.model == "EPANET": + self.lblSubcatchment.setVisible(False) + self.cboSubcatchment.setVisible(False) + self.lblDecimal1.setVisible(False) + self.spnSubcatchment.setVisible(False) + + self.cboNode.addItem('Demand') + self.cboNode.addItem('Head') + self.cboNode.addItem('Pressure') + self.cboNode.addItem('Quality') + + self.cboLink.addItem('Flow') + self.cboLink.addItem('Velocity') + self.cboLink.addItem('Unit Headloss') + self.cboLink.addItem('Friction Factor') + self.cboLink.addItem('Reaction Rate') + self.cboLink.addItem('Quality') + pass + + def cmdOK_Clicked(self): + self.close() + + def cmdCancel_Clicked(self): + self.close() diff --git a/src/ui/frmPreferencesDesigner.py b/src/ui/frmPreferencesDesigner.py new file mode 100644 index 00000000..791e86c0 --- /dev/null +++ b/src/ui/frmPreferencesDesigner.py @@ -0,0 +1,231 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'C:\dev\Python\dev-ui-py3qt5\src\ui\frmPreferencesDesigner.ui' +# +# Created by: PyQt5 UI code generator 5.11.3 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + +class Ui_frmPreferences(object): + def setupUi(self, frmPreferences): + frmPreferences.setObjectName("frmPreferences") + frmPreferences.resize(359, 338) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(frmPreferences.sizePolicy().hasHeightForWidth()) + frmPreferences.setSizePolicy(sizePolicy) + font = QtGui.QFont() + font.setPointSize(10) + frmPreferences.setFont(font) + self.centralWidget = QtWidgets.QWidget(frmPreferences) + self.centralWidget.setObjectName("centralWidget") + self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralWidget) + self.verticalLayout_3.setContentsMargins(11, 11, 11, 11) + self.verticalLayout_3.setSpacing(6) + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.fraTop = QtWidgets.QFrame(self.centralWidget) + self.fraTop.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.fraTop.setFrameShadow(QtWidgets.QFrame.Raised) + self.fraTop.setObjectName("fraTop") + self.verticalLayout = QtWidgets.QVBoxLayout(self.fraTop) + self.verticalLayout.setContentsMargins(11, 11, 11, 11) + self.verticalLayout.setSpacing(6) + self.verticalLayout.setObjectName("verticalLayout") + self.tabPrecision = QtWidgets.QTabWidget(self.fraTop) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tabPrecision.sizePolicy().hasHeightForWidth()) + self.tabPrecision.setSizePolicy(sizePolicy) + self.tabPrecision.setObjectName("tabPrecision") + self.General = QtWidgets.QWidget() + self.General.setObjectName("General") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.General) + self.verticalLayout_2.setContentsMargins(11, 11, 11, 11) + self.verticalLayout_2.setSpacing(6) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.cbxGeneral1 = QtWidgets.QCheckBox(self.General) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.cbxGeneral1.sizePolicy().hasHeightForWidth()) + self.cbxGeneral1.setSizePolicy(sizePolicy) + self.cbxGeneral1.setObjectName("cbxGeneral1") + self.verticalLayout_2.addWidget(self.cbxGeneral1) + self.cbxGeneral2 = QtWidgets.QCheckBox(self.General) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.cbxGeneral2.sizePolicy().hasHeightForWidth()) + self.cbxGeneral2.setSizePolicy(sizePolicy) + self.cbxGeneral2.setObjectName("cbxGeneral2") + self.verticalLayout_2.addWidget(self.cbxGeneral2) + self.cbxGeneral3 = QtWidgets.QCheckBox(self.General) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.cbxGeneral3.sizePolicy().hasHeightForWidth()) + self.cbxGeneral3.setSizePolicy(sizePolicy) + self.cbxGeneral3.setObjectName("cbxGeneral3") + self.verticalLayout_2.addWidget(self.cbxGeneral3) + self.cbxGeneral4 = QtWidgets.QCheckBox(self.General) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.cbxGeneral4.sizePolicy().hasHeightForWidth()) + self.cbxGeneral4.setSizePolicy(sizePolicy) + self.cbxGeneral4.setObjectName("cbxGeneral4") + self.verticalLayout_2.addWidget(self.cbxGeneral4) + self.cbxGeneral5 = QtWidgets.QCheckBox(self.General) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.cbxGeneral5.sizePolicy().hasHeightForWidth()) + self.cbxGeneral5.setSizePolicy(sizePolicy) + self.cbxGeneral5.setObjectName("cbxGeneral5") + self.verticalLayout_2.addWidget(self.cbxGeneral5) + self.cbxGeneral6 = QtWidgets.QCheckBox(self.General) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.cbxGeneral6.sizePolicy().hasHeightForWidth()) + self.cbxGeneral6.setSizePolicy(sizePolicy) + self.cbxGeneral6.setObjectName("cbxGeneral6") + self.verticalLayout_2.addWidget(self.cbxGeneral6) + self.cbxGeneral7 = QtWidgets.QCheckBox(self.General) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.cbxGeneral7.sizePolicy().hasHeightForWidth()) + self.cbxGeneral7.setSizePolicy(sizePolicy) + self.cbxGeneral7.setObjectName("cbxGeneral7") + self.verticalLayout_2.addWidget(self.cbxGeneral7) + self.cbxGeneral8 = QtWidgets.QCheckBox(self.General) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.cbxGeneral8.sizePolicy().hasHeightForWidth()) + self.cbxGeneral8.setSizePolicy(sizePolicy) + self.cbxGeneral8.setObjectName("cbxGeneral8") + self.verticalLayout_2.addWidget(self.cbxGeneral8) + self.tabPrecision.addTab(self.General, "") + self.Numerical = QtWidgets.QWidget() + self.Numerical.setObjectName("Numerical") + self.gridLayout_3 = QtWidgets.QGridLayout(self.Numerical) + self.gridLayout_3.setContentsMargins(11, 11, 11, 11) + self.gridLayout_3.setSpacing(6) + self.gridLayout_3.setObjectName("gridLayout_3") + self.lblLink = QtWidgets.QLabel(self.Numerical) + self.lblLink.setObjectName("lblLink") + self.gridLayout_3.addWidget(self.lblLink, 5, 0, 1, 1) + self.cboLink = QtWidgets.QComboBox(self.Numerical) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.cboLink.sizePolicy().hasHeightForWidth()) + self.cboLink.setSizePolicy(sizePolicy) + self.cboLink.setObjectName("cboLink") + self.gridLayout_3.addWidget(self.cboLink, 6, 0, 1, 1) + self.cboNode = QtWidgets.QComboBox(self.Numerical) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.cboNode.sizePolicy().hasHeightForWidth()) + self.cboNode.setSizePolicy(sizePolicy) + self.cboNode.setObjectName("cboNode") + self.gridLayout_3.addWidget(self.cboNode, 4, 0, 1, 1) + self.lblNode = QtWidgets.QLabel(self.Numerical) + self.lblNode.setWordWrap(True) + self.lblNode.setObjectName("lblNode") + self.gridLayout_3.addWidget(self.lblNode, 3, 0, 1, 1) + self.lblSubcatchment = QtWidgets.QLabel(self.Numerical) + self.lblSubcatchment.setObjectName("lblSubcatchment") + self.gridLayout_3.addWidget(self.lblSubcatchment, 1, 0, 1, 1) + self.cboSubcatchment = QtWidgets.QComboBox(self.Numerical) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.cboSubcatchment.sizePolicy().hasHeightForWidth()) + self.cboSubcatchment.setSizePolicy(sizePolicy) + self.cboSubcatchment.setObjectName("cboSubcatchment") + self.gridLayout_3.addWidget(self.cboSubcatchment, 2, 0, 1, 1) + self.lblNumber = QtWidgets.QLabel(self.Numerical) + self.lblNumber.setWordWrap(True) + self.lblNumber.setObjectName("lblNumber") + self.gridLayout_3.addWidget(self.lblNumber, 0, 0, 1, 1) + self.spnSubcatchment = QtWidgets.QSpinBox(self.Numerical) + self.spnSubcatchment.setMaximum(6) + self.spnSubcatchment.setProperty("value", 2) + self.spnSubcatchment.setObjectName("spnSubcatchment") + self.gridLayout_3.addWidget(self.spnSubcatchment, 2, 1, 1, 1) + self.spnNode = QtWidgets.QSpinBox(self.Numerical) + self.spnNode.setMaximum(6) + self.spnNode.setProperty("value", 2) + self.spnNode.setObjectName("spnNode") + self.gridLayout_3.addWidget(self.spnNode, 4, 1, 1, 1) + self.spnLink = QtWidgets.QSpinBox(self.Numerical) + self.spnLink.setMaximum(6) + self.spnLink.setProperty("value", 2) + self.spnLink.setObjectName("spnLink") + self.gridLayout_3.addWidget(self.spnLink, 6, 1, 1, 1) + self.lblDecimal2 = QtWidgets.QLabel(self.Numerical) + self.lblDecimal2.setObjectName("lblDecimal2") + self.gridLayout_3.addWidget(self.lblDecimal2, 3, 1, 1, 1) + self.lblDecimal3 = QtWidgets.QLabel(self.Numerical) + self.lblDecimal3.setObjectName("lblDecimal3") + self.gridLayout_3.addWidget(self.lblDecimal3, 5, 1, 1, 1) + self.lblDecimal1 = QtWidgets.QLabel(self.Numerical) + self.lblDecimal1.setObjectName("lblDecimal1") + self.gridLayout_3.addWidget(self.lblDecimal1, 1, 1, 1, 1) + self.tabPrecision.addTab(self.Numerical, "") + self.verticalLayout.addWidget(self.tabPrecision) + self.verticalLayout_3.addWidget(self.fraTop) + self.fraOKCancel = QtWidgets.QFrame(self.centralWidget) + self.fraOKCancel.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.fraOKCancel.setFrameShadow(QtWidgets.QFrame.Raised) + self.fraOKCancel.setObjectName("fraOKCancel") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.fraOKCancel) + self.horizontalLayout.setContentsMargins(11, 11, 11, 11) + self.horizontalLayout.setSpacing(6) + self.horizontalLayout.setObjectName("horizontalLayout") + spacerItem = QtWidgets.QSpacerItem(338, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem) + self.cmdOK = QtWidgets.QPushButton(self.fraOKCancel) + self.cmdOK.setObjectName("cmdOK") + self.horizontalLayout.addWidget(self.cmdOK) + self.cmdCancel = QtWidgets.QPushButton(self.fraOKCancel) + self.cmdCancel.setObjectName("cmdCancel") + self.horizontalLayout.addWidget(self.cmdCancel) + self.verticalLayout_3.addWidget(self.fraOKCancel) + frmPreferences.setCentralWidget(self.centralWidget) + + self.retranslateUi(frmPreferences) + self.tabPrecision.setCurrentIndex(0) + QtCore.QMetaObject.connectSlotsByName(frmPreferences) + + def retranslateUi(self, frmPreferences): + _translate = QtCore.QCoreApplication.translate + frmPreferences.setWindowTitle(_translate("frmPreferences", "Preferences")) + self.cbxGeneral1.setText(_translate("frmPreferences", "Blinking Map Highlighter")) + self.cbxGeneral2.setText(_translate("frmPreferences", "Flyover Map Labeling")) + self.cbxGeneral3.setText(_translate("frmPreferences", "Confirm Deletions")) + self.cbxGeneral4.setText(_translate("frmPreferences", "Automatic Backup File")) + self.cbxGeneral5.setText(_translate("frmPreferences", "Tab Delimited Project File")) + self.cbxGeneral6.setText(_translate("frmPreferences", "Report Elapsed Time by Default")) + self.cbxGeneral7.setText(_translate("frmPreferences", "Prompt to Save Results")) + self.cbxGeneral8.setText(_translate("frmPreferences", "Clear File List")) + self.tabPrecision.setTabText(self.tabPrecision.indexOf(self.General), _translate("frmPreferences", "General Options")) + self.lblLink.setText(_translate("frmPreferences", "Link Parameter")) + self.lblNode.setText(_translate("frmPreferences", "Node Parameter")) + self.lblSubcatchment.setText(_translate("frmPreferences", "Subcatchment Parameter")) + self.lblNumber.setText(_translate("frmPreferences", "Select number of decimal places for computed results:")) + self.lblDecimal2.setText(_translate("frmPreferences", "Decimals")) + self.lblDecimal3.setText(_translate("frmPreferences", "Decimals")) + self.lblDecimal1.setText(_translate("frmPreferences", "Decimals")) + self.tabPrecision.setTabText(self.tabPrecision.indexOf(self.Numerical), _translate("frmPreferences", "Numerical Precision")) + self.cmdOK.setText(_translate("frmPreferences", "OK")) + self.cmdCancel.setText(_translate("frmPreferences", "Cancel")) + diff --git a/src/ui/frmPreferencesDesigner.ui b/src/ui/frmPreferencesDesigner.ui new file mode 100644 index 00000000..0cd8934b --- /dev/null +++ b/src/ui/frmPreferencesDesigner.ui @@ -0,0 +1,332 @@ + + + frmPreferences + + + + 0 + 0 + 359 + 338 + + + + + 0 + 0 + + + + + 10 + + + + Preferences + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + 0 + 0 + + + + 0 + + + + General Options + + + + + + + 0 + 0 + + + + Blinking Map Highlighter + + + + + + + + 0 + 0 + + + + Flyover Map Labeling + + + + + + + + 0 + 0 + + + + Confirm Deletions + + + + + + + + 0 + 0 + + + + Automatic Backup File + + + + + + + + 0 + 0 + + + + Tab Delimited Project File + + + + + + + + 0 + 0 + + + + Report Elapsed Time by Default + + + + + + + + 0 + 0 + + + + Prompt to Save Results + + + + + + + + 0 + 0 + + + + Clear File List + + + + + + + + Numerical Precision + + + + + + Link Parameter + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + + + + Node Parameter + + + true + + + + + + + Subcatchment Parameter + + + + + + + + 0 + 0 + + + + + + + + Select number of decimal places for computed results: + + + true + + + + + + + 6 + + + 2 + + + + + + + 6 + + + 2 + + + + + + + 6 + + + 2 + + + + + + + Decimals + + + + + + + Decimals + + + + + + + Decimals + + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Qt::Horizontal + + + + 338 + 20 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + + + + From 0930719ab394c47f67b4e18edbfae8f417e04274 Mon Sep 17 00:00:00 2001 From: PaulDudaRESPEC Date: Thu, 8 Aug 2019 17:30:17 -0400 Subject: [PATCH 19/27] add display precision to ini files, implement saving/retrieving display precision in frmPreferences --- src/ui/EPANET/inifile.py | 32 ++++++++++++ src/ui/SWMM/inifile.py | 46 +++++++++++++++++ src/ui/frmMain.py | 4 +- src/ui/frmPreferences.py | 109 ++++++++++++++++++++++++++------------- 4 files changed, 154 insertions(+), 37 deletions(-) diff --git a/src/ui/EPANET/inifile.py b/src/ui/EPANET/inifile.py index 7367bdf4..f7c2bb1f 100644 --- a/src/ui/EPANET/inifile.py +++ b/src/ui/EPANET/inifile.py @@ -94,6 +94,25 @@ def __init__(self, file_name, project, program_setting): if self.id_increment is None: self.id_increment = 1 + self.node_numerical_preference_keys = ['Demand', 'Head', 'Pressure', 'Node Quality'] + self.node_numerical_preferences = {} + for key in self.node_numerical_preference_keys: + self.node_numerical_preferences[key] = 2 + if self.config: + val, vtype = self.get_setting_value("Display Precision", key) + if val is not None: + self.node_numerical_preferences[key] = val + + self.link_numerical_preference_keys = ['Flow', 'Velocity', 'Unit Headloss', + 'Friction Factor', 'Reaction Rate', 'Quality'] + self.link_numerical_preferences = {} + for key in self.link_numerical_preference_keys: + self.link_numerical_preferences[key] = 2 + if self.config: + val, vtype = self.get_setting_value("Display Precision", key) + if val is not None: + self.link_numerical_preferences[key] = val + self.properties_values = {} for key in self.properties_keys: self.properties_values[key] = self.properties_def_values[self.properties_keys.index(key)] @@ -188,6 +207,19 @@ def sync_project_hydraulic_parameters(self): elif "gravity" in key.lower(): hydraulics_options.specific_gravity = float(val) + def sync_preferences(self): + """ + sync preferences with internal qsettings + """ + for key in self.node_numerical_preference_keys: + if self.config: + self.config.setValue("Display Precision/" + key, self.node_numerical_preferences[key]) + for key in self.link_numerical_preference_keys: + if self.config: + self.config.setValue("Display Precision/" + key, self.link_numerical_preferences[key]) + if self.config: + self.config.sync() + def apply_default_attributes(self, item): """ Set default attributes for new model object diff --git a/src/ui/SWMM/inifile.py b/src/ui/SWMM/inifile.py index a77638a1..4c3a148a 100644 --- a/src/ui/SWMM/inifile.py +++ b/src/ui/SWMM/inifile.py @@ -988,6 +988,36 @@ def __init__(self, file_name, project, program_setting): if self.id_increment is None: self.id_increment = 1 + self.subcatchment_numerical_preference_keys = ['Precipitation', 'Snow Depth', 'Evaporation', 'Infiltration', 'Runoff', + 'GW Flow', 'GW Elev.', 'Soil Moisture', 'Washoff'] + self.subcatchment_numerical_preferences = {} + for key in self.subcatchment_numerical_preference_keys: + self.subcatchment_numerical_preferences[key] = 2 + if self.config: + val, vtype = self.get_setting_value("Display Precision", key) + if val is not None: + self.subcatchment_numerical_preferences[key] = val + + self.node_numerical_preference_keys = ['Node Depth', 'Head', 'Node Volume', 'Lateral Inflow', + 'Total Inflow', 'Flooding', 'Node Quality'] + self.node_numerical_preferences = {} + for key in self.node_numerical_preference_keys: + self.node_numerical_preferences[key] = 2 + if self.config: + val, vtype = self.get_setting_value("Display Precision", key) + if val is not None: + self.node_numerical_preferences[key] = val + + self.link_numerical_preference_keys = ['Flow', 'Depth', 'Velocity', 'Volume', + 'Capacity', 'Quality'] + self.link_numerical_preferences = {} + for key in self.link_numerical_preference_keys: + self.link_numerical_preferences[key] = 2 + if self.config: + val, vtype = self.get_setting_value("Display Precision", key) + if val is not None: + self.link_numerical_preferences[key] = val + group = "Defaults" self.properties_sub_values = {} for key in self.properties_sub_keys: @@ -1165,6 +1195,22 @@ def sync_project_hydraulic_parameters(self): #hydraulics_options.conduit_roughness = float(val) pass + def sync_preferences(self): + """ + sync preferences with internal qsettings + """ + for key in self.subcatchment_numerical_preference_keys: + if self.config: + self.config.setValue("Display Precision/" + key, self.subcatchment_numerical_preferences[key]) + for key in self.node_numerical_preference_keys: + if self.config: + self.config.setValue("Display Precision/" + key, self.node_numerical_preferences[key]) + for key in self.link_numerical_preference_keys: + if self.config: + self.config.setValue("Display Precision/" + key, self.link_numerical_preferences[key]) + if self.config: + self.config.sync() + def apply_default_attributes(self, item): """ Set default attributes for new model object diff --git a/src/ui/frmMain.py b/src/ui/frmMain.py index 208c5cdb..ab1c6a63 100644 --- a/src/ui/frmMain.py +++ b/src/ui/frmMain.py @@ -2226,14 +2226,14 @@ def set_crs(self, crs): pass def save_project(self, file_name=None): + if not file_name: + file_name = self.project.file_name if not file_name: # prompt to save new_name = self.save_project_as() if new_name: self.project.file_name = new_name return - if not file_name: - file_name = self.project.file_name if file_name.endswith('*'): file_name = file_name[-1] self.project.file_name = file_name diff --git a/src/ui/frmPreferences.py b/src/ui/frmPreferences.py index ffc6e6ed..3e824562 100644 --- a/src/ui/frmPreferences.py +++ b/src/ui/frmPreferences.py @@ -12,38 +12,45 @@ def __init__(self, main_form=None): self.help_topic = "swmm/src/src/settingprogrampreferences.htm" elif main_form.model == "EPANET": self.help_topic = "epanet/src/src/setting_.htm" + self.local_subcatch_preferences = {} + self.local_node_preferences = {} + self.local_link_preferences = {} self.cmdOK.clicked.connect(self.cmdOK_Clicked) self.cmdCancel.clicked.connect(self.cmdCancel_Clicked) self._main_form = main_form self.set_from(main_form.project) self.icon = main_form.windowIcon() + self.cboSubcatchment.currentIndexChanged.connect(self.cboSubcatchment_currentIndexChanged) + self.cboNode.currentIndexChanged.connect(self.cboNode_currentIndexChanged) + self.cboLink.currentIndexChanged.connect(self.cboLink_currentIndexChanged) + self.spnSubcatchment.valueChanged.connect(self.spnSubcatchment_valueChanged) + self.spnNode.valueChanged.connect(self.spnNode_valueChanged) + self.spnLink.valueChanged.connect(self.spnLink_valueChanged) def set_from(self, project): if self._main_form.model == "SWMM": - self.cboSubcatchment.addItem('Precipitation') - self.cboSubcatchment.addItem('Snow Depth') - self.cboSubcatchment.addItem('Evaporation') - self.cboSubcatchment.addItem('Infiltration') - self.cboSubcatchment.addItem('Runoff') - self.cboSubcatchment.addItem('GW Flow') - self.cboSubcatchment.addItem('GW Elev.') - self.cboSubcatchment.addItem('Soil Moisture') - self.cboSubcatchment.addItem('Washoff') - - self.cboNode.addItem('Depth') - self.cboNode.addItem('Head') - self.cboNode.addItem('Volume') - self.cboNode.addItem('Lateral Inflow') - self.cboNode.addItem('Total Inflow') - self.cboNode.addItem('Flooding') - self.cboNode.addItem('Quality') - - self.cboLink.addItem('Flow') - self.cboLink.addItem('Depth') - self.cboLink.addItem('Velocity') - self.cboLink.addItem('Volume') - self.cboLink.addItem('Capacity') - self.cboLink.addItem('Quality') + settings = self._main_form.project_settings + self.subcatch_keys = settings.subcatchment_numerical_preference_keys + self.node_keys = settings.node_numerical_preference_keys + self.link_keys = settings.link_numerical_preference_keys + + for key in self.subcatch_keys: + self.local_subcatch_preferences[key] = settings.subcatchment_numerical_preferences[key] + for key in self.node_keys: + self.local_node_preferences[key] = settings.node_numerical_preferences[key] + for key in self.link_keys: + self.local_link_preferences[key] = settings.link_numerical_preferences[key] + + for key in self.subcatch_keys: + self.cboSubcatchment.addItem(key) + for key in self.node_keys: + self.cboNode.addItem(key) + for key in self.link_keys: + self.cboLink.addItem(key) + + self.spnSubcatchment.setValue(self.local_subcatch_preferences[self.subcatch_keys[0]]) + self.spnNode.setValue(self.local_node_preferences[self.node_keys[0]]) + self.spnLink.setValue(self.local_link_preferences[self.link_keys[0]]) elif self._main_form.model == "EPANET": self.lblSubcatchment.setVisible(False) @@ -51,20 +58,52 @@ def set_from(self, project): self.lblDecimal1.setVisible(False) self.spnSubcatchment.setVisible(False) - self.cboNode.addItem('Demand') - self.cboNode.addItem('Head') - self.cboNode.addItem('Pressure') - self.cboNode.addItem('Quality') - - self.cboLink.addItem('Flow') - self.cboLink.addItem('Velocity') - self.cboLink.addItem('Unit Headloss') - self.cboLink.addItem('Friction Factor') - self.cboLink.addItem('Reaction Rate') - self.cboLink.addItem('Quality') + settings = self._main_form.project_settings + self.node_keys = settings.node_numerical_preference_keys + self.link_keys = settings.link_numerical_preference_keys + + for key in self.node_keys: + self.local_node_preferences[key] = settings.node_numerical_preferences[key] + for key in self.link_keys: + self.local_link_preferences[key] = settings.link_numerical_preferences[key] + + for key in self.node_keys: + self.cboNode.addItem(key) + for key in self.link_keys: + self.cboLink.addItem(key) + + self.spnNode.setValue(self.local_node_preferences[self.node_keys[0]]) + self.spnLink.setValue(self.local_link_preferences[self.link_keys[0]]) pass + def cboSubcatchment_currentIndexChanged(self, newIndex): + self.spnSubcatchment.setValue(self.local_subcatch_preferences[self.subcatch_keys[newIndex]]) + + def cboNode_currentIndexChanged(self, newIndex): + self.spnNode.setValue(self.local_node_preferences[self.node_keys[newIndex]]) + + def cboLink_currentIndexChanged(self, newIndex): + self.spnLink.setValue(self.local_link_preferences[self.link_keys[newIndex]]) + + def spnSubcatchment_valueChanged(self, newValue): + subcatch_index = self.cboSubcatchment.currentIndex() + self.local_subcatch_preferences[self.subcatch_keys[subcatch_index]] = newValue + + def spnLink_valueChanged(self, newValue): + link_index = self.cboLink.currentIndex() + self.local_link_preferences[self.link_keys[link_index]] = newValue + + def spnNode_valueChanged(self, newValue): + node_index = self.cboNode.currentIndex() + self.local_node_preferences[self.node_keys[node_index]] = newValue + def cmdOK_Clicked(self): + settings = self._main_form.project_settings + if self._main_form.model == "SWMM": + settings.subcatchment_numerical_preferences = self.local_subcatch_preferences + settings.node_numerical_preferences = self.local_node_preferences + settings.link_numerical_preferences = self.local_link_preferences + self._main_form.project_settings.sync_preferences() self.close() def cmdCancel_Clicked(self): From aff01e071798d58cc07ee592e3cbb1d0b3648c50 Mon Sep 17 00:00:00 2001 From: PaulDudaRESPEC Date: Fri, 9 Aug 2019 10:35:36 -0400 Subject: [PATCH 20/27] implement preference for number of digits of values to display on map, related to prefereneces issues #104 and #123 --- src/ui/EPANET/frmMainEPANET.py | 42 +++++++++++++++++++---- src/ui/SWMM/frmMainSWMM.py | 62 +++++++++++++++++++++++++++++----- src/ui/map_tools.py | 5 +-- 3 files changed, 92 insertions(+), 17 deletions(-) diff --git a/src/ui/EPANET/frmMainEPANET.py b/src/ui/EPANET/frmMainEPANET.py index a0fdfec7..485da150 100644 --- a/src/ui/EPANET/frmMainEPANET.py +++ b/src/ui/EPANET/frmMainEPANET.py @@ -319,6 +319,13 @@ def update_thematic_map(self): if self.model_layers.nodes_layers: selected_attribute = self.cboMapNodes.currentText() + + num_figs = 2 + if selected_attribute in self.project_settings.node_numerical_preferences: + precision = self.project_settings.node_numerical_preferences[selected_attribute] + if precision > -1: + num_figs = precision + attribute = None setting_index = self.cboMapNodes.currentIndex() if setting_index < 4: @@ -360,13 +367,21 @@ def update_thematic_map(self): if color_by: self.map_widget.applyGraduatedSymbologyStandardMode(layer, color_by, self.thematic_node_min, - self.thematic_node_max) + self.thematic_node_max, + number_of_digits=num_figs) else: self.map_widget.set_default_point_renderer(layer) layer.triggerRepaint() if self.model_layers.links_layers: selected_attribute = self.cboMapLinks.currentText() + + num_figs = 2 + if selected_attribute in self.project_settings.link_numerical_preferences: + precision = self.project_settings.link_numerical_preferences[selected_attribute] + if precision > -1: + num_figs = precision + attribute = None setting_index = self.cboMapLinks.currentIndex() if setting_index < 6: @@ -414,7 +429,8 @@ def update_thematic_map(self): if color_by: self.map_widget.applyGraduatedSymbologyStandardMode(layer, color_by, self.thematic_link_min, - self.thematic_link_max) + self.thematic_link_max, + number_of_digits=num_figs) else: self.map_widget.set_default_line_renderer(layer, do_labels=False) layer.triggerRepaint() @@ -433,6 +449,13 @@ def update_thematic_map_time(self): if self.model_layers.nodes_layers: selected_attribute = self.cboMapNodes.currentText() + + num_figs = 2 + if selected_attribute in self.project_settings.node_numerical_preferences: + precision = self.project_settings.node_numerical_preferences[selected_attribute] + if precision > -1: + num_figs = precision + setting_index = self.cboMapNodes.currentIndex() color_by = {} if setting_index >= 4 and self.output: # Look for attribute to color by in the output @@ -454,12 +477,12 @@ def update_thematic_map_time(self): self.thematic_node_min, self.thematic_node_max, self.map_widget.layer_styles[layer.id()], - True, None, do_label) + True, None, do_label, num_figs) else: self.map_widget.applyGraduatedSymbologyStandardMode(layer, color_by, self.thematic_node_min, self.thematic_node_max, - None, True, None, do_label) + None, True, None, do_label, num_figs) self.annotate_layername(selected_attribute, "node", layer) else: if len(self.project.all_nodes()) > 300: @@ -469,6 +492,13 @@ def update_thematic_map_time(self): if self.model_layers.links_layers: selected_attribute = self.cboMapLinks.currentText() + + num_figs = 2 + if selected_attribute in self.project_settings.link_numerical_preferences: + precision = self.project_settings.link_numerical_preferences[selected_attribute] + if precision > -1: + num_figs = precision + setting_index = self.cboMapLinks.currentIndex() color_by = {} if setting_index >= 6 and self.output: # Look for attribute to color by in the output @@ -508,14 +538,14 @@ def update_thematic_map_time(self): self.thematic_link_max, self.map_widget.layer_styles[layer.id()], self.chkDisplayFlowDir.isChecked(), - color_by_flow, do_label) + color_by_flow, do_label, num_figs) else: self.map_widget.applyGraduatedSymbologyStandardMode(layer, color_by, self.thematic_link_min, self.thematic_link_max, None, self.chkDisplayFlowDir.isChecked(), - color_by_flow, do_label) + color_by_flow, do_label, num_figs) self.annotate_layername(selected_attribute, "link", layer) else: self.map_widget.set_default_line_renderer(layer, do_label) diff --git a/src/ui/SWMM/frmMainSWMM.py b/src/ui/SWMM/frmMainSWMM.py index 1500b954..3d7882e5 100644 --- a/src/ui/SWMM/frmMainSWMM.py +++ b/src/ui/SWMM/frmMainSWMM.py @@ -673,6 +673,13 @@ def update_thematic_map(self): if self.model_layers.subcatchments and self.model_layers.subcatchments.isValid(): selected_attribute = self.cboMapSubcatchments.currentText() + + num_figs = 2 + if selected_attribute in self.project_settings.subcatchment_numerical_preferences: + precision = self.project_settings.subcatchment_numerical_preferences[selected_attribute] + if precision > -1: + num_figs = precision + attribute = None setting_index = self.cboMapSubcatchments.currentIndex() if setting_index < 6: @@ -706,13 +713,20 @@ def update_thematic_map(self): self.map_widget.applyGraduatedSymbologyStandardMode(self.model_layers.subcatchments, color_by, self.thematic_subcatchment_min, self.thematic_subcatchment_max, - do_label=False) + do_label=False, number_of_digits=num_figs) else: self.map_widget.set_default_polygon_renderer(self.model_layers.subcatchments) self.model_layers.subcatchments.triggerRepaint() if self.model_layers.nodes_layers: selected_attribute = self.cboMapNodes.currentText() + + num_figs = 2 + if selected_attribute in self.project_settings.node_numerical_preferences: + precision = self.project_settings.node_numerical_preferences[selected_attribute] + if precision > -1: + num_figs = precision + attribute = None setting_index = self.cboMapNodes.currentIndex() if setting_index < 2: @@ -748,13 +762,21 @@ def update_thematic_map(self): if color_by: self.map_widget.applyGraduatedSymbologyStandardMode(layer, color_by, self.thematic_node_min, - self.thematic_node_max) + self.thematic_node_max, + number_of_digits=num_figs) else: self.map_widget.set_default_point_renderer(layer) layer.triggerRepaint() if self.model_layers.links_layers: selected_attribute = self.cboMapLinks.currentText() + + num_figs = 2 + if selected_attribute in self.project_settings.link_numerical_preferences: + precision = self.project_settings.link_numerical_preferences[selected_attribute] + if precision > -1: + num_figs = precision + attribute = None setting_index = self.cboMapLinks.currentIndex() if setting_index < 3: @@ -818,7 +840,8 @@ def update_thematic_map(self): display_flow_dir = self.chkDisplayFlowDir.isChecked() self.map_widget.applyGraduatedSymbologyStandardMode(layer, color_by, self.thematic_link_min, - self.thematic_link_max) + self.thematic_link_max, + number_of_digits=num_figs) else: self.map_widget.set_default_line_renderer(layer, do_labels=False) layer.triggerRepaint() @@ -843,6 +866,13 @@ def update_thematic_map_time(self): if self.model_layers.subcatchments and self.model_layers.subcatchments.isValid(): layer = self.model_layers.subcatchments selected_attribute = self.cboMapSubcatchments.currentText() + + num_figs = 2 + if selected_attribute in self.project_settings.subcatchment_numerical_preferences: + precision = self.project_settings.subcatchment_numerical_preferences[selected_attribute] + if precision > -1: + num_figs = precision + setting_index = self.cboMapSubcatchments.currentIndex() color_by = {} if setting_index >= 6 and self.output: # Look for attribute to color by in the output @@ -864,12 +894,12 @@ def update_thematic_map_time(self): self.thematic_node_min, self.thematic_node_max, self.map_widget.layer_styles[layer.id()], - True, None, do_label) + True, None, do_label, num_figs) else: self.map_widget.applyGraduatedSymbologyStandardMode(self.model_layers.subcatchments, color_by, self.thematic_subcatchment_min, self.thematic_subcatchment_max, - None, True, None, do_label) + None, True, None, do_label, num_figs) self.annotate_layername(selected_attribute, "subcatchment", layer) #self.map_widget.LegendDock.setVisible(True) else: @@ -879,6 +909,13 @@ def update_thematic_map_time(self): if self.model_layers.nodes_layers: selected_attribute = self.cboMapNodes.currentText() + + num_figs = 2 + if selected_attribute in self.project_settings.node_numerical_preferences: + precision = self.project_settings.node_numerical_preferences[selected_attribute] + if precision > -1: + num_figs = precision + setting_index = self.cboMapNodes.currentIndex() color_by = {} if setting_index >= 2 and self.output: # Look for attribute to color by in the output @@ -902,12 +939,12 @@ def update_thematic_map_time(self): self.thematic_node_min, self.thematic_node_max, self.map_widget.layer_styles[layer.id()], - True, None, do_label) + True, None, do_label, num_figs) else: self.map_widget.applyGraduatedSymbologyStandardMode(layer, color_by, self.thematic_node_min, self.thematic_node_max, - None, True, None, do_label) + None, True, None, do_label, num_figs) self.annotate_layername(selected_attribute, "node", layer) else: do_label = True @@ -919,6 +956,13 @@ def update_thematic_map_time(self): if self.model_layers.links_layers: selected_attribute = self.cboMapLinks.currentText() + + num_figs = 2 + if selected_attribute in self.project_settings.link_numerical_preferences: + precision = self.project_settings.link_numerical_preferences[selected_attribute] + if precision > -1: + num_figs = precision + setting_index = self.cboMapLinks.currentIndex() color_by = {} if setting_index > 3 and self.output: # Look for attribute to color by in the output @@ -955,14 +999,14 @@ def update_thematic_map_time(self): self.thematic_link_max, self.map_widget.layer_styles[layer.id()], self.chkDisplayFlowDir.isChecked(), - color_by_flow) + color_by_flow, number_of_digits=num_figs) else: self.map_widget.applyGraduatedSymbologyStandardMode(layer, color_by, self.thematic_link_min, self.thematic_link_max, None, self.chkDisplayFlowDir.isChecked(), - color_by_flow) + color_by_flow, number_of_digits=num_figs) self.annotate_layername(selected_attribute, "link", layer) else: do_label = True diff --git a/src/ui/map_tools.py b/src/ui/map_tools.py index 9b33c375..649b4625 100644 --- a/src/ui/map_tools.py +++ b/src/ui/map_tools.py @@ -1288,7 +1288,8 @@ def validatedDefaultSymbol(geometryType): @staticmethod def applyGraduatedSymbologyStandardMode(layer, color_by, min=None, max=None, - arenderer=None, aflow_dir=True, acolor_by_flow=None, do_label=True): + arenderer=None, aflow_dir=True, acolor_by_flow=None, do_label=True, + number_of_digits=2): provider = layer.dataProvider() calculate_min_max = False if min is None or max is None: @@ -1307,7 +1308,7 @@ def applyGraduatedSymbologyStandardMode(layer, color_by, min=None, max=None, geom = feature.geometry() val = color_by[feature_name] vfi = feature.fieldNameIndex('value') - provider.changeAttributeValues({feature.id(): {vfi: round(val, 2)}}) + provider.changeAttributeValues({feature.id(): {vfi: round(val, number_of_digits)}}) # provider.changeAttributeValues({feature.id() : {1 : '100, 255, 50'}}) # feature[1] = val if do_flowdir: From 9e6a2d23e90cdc50dc9e34f92c399d203d69ea56 Mon Sep 17 00:00:00 2001 From: "tong.zhai" Date: Fri, 9 Aug 2019 11:21:35 -0400 Subject: [PATCH 21/27] restore CurveReader single curve reading logic --- src/core/epanet/inp_reader_sections.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/core/epanet/inp_reader_sections.py b/src/core/epanet/inp_reader_sections.py index a75e11a9..cf173a2e 100644 --- a/src/core/epanet/inp_reader_sections.py +++ b/src/core/epanet/inp_reader_sections.py @@ -72,11 +72,6 @@ def read(new_text): if len(fields) > 2: curve.name = fields[0] curve.curve_xy.append((fields[1], fields[2])) - return curve - else: - return None - else: - return None return curve From f5168800733d5999ac3834d96b2fe18d049b910f Mon Sep 17 00:00:00 2001 From: PaulDudaRESPEC Date: Fri, 9 Aug 2019 15:19:37 -0400 Subject: [PATCH 22/27] implement general preferences, update documentation accordingly, part of issues #104 and #123 --- doc/EPANET/EPANET.qhp | 3 ++ doc/EPANET/epanet.qch | Bin 531456 -> 534528 bytes doc/EPANET/epanet.qhc | Bin 16384 -> 16384 bytes doc/EPANET/src/Prog0046.htm | 49 +++++++++++++++++++ doc/EPANET/src/Program_.htm | 65 +++++++++++++++++++++++++ doc/EPANET/src/Setting_.htm | 67 +++++++++++++++++++++++++ doc/SWMM/src/generalpreferences.htm | 8 --- doc/SWMM/swmm.qch | Bin 2063360 -> 2063360 bytes doc/SWMM/swmm.qhc | Bin 14336 -> 14336 bytes src/ui/EPANET/inifile.py | 13 +++++ src/ui/SWMM/inifile.py | 14 ++++++ src/ui/frmMain.py | 9 ++++ src/ui/frmPreferences.py | 73 ++++++++++++++++++++++++++++ 13 files changed, 293 insertions(+), 8 deletions(-) create mode 100644 doc/EPANET/src/Prog0046.htm create mode 100644 doc/EPANET/src/Program_.htm create mode 100644 doc/EPANET/src/Setting_.htm diff --git a/doc/EPANET/EPANET.qhp b/doc/EPANET/EPANET.qhp index ab163abd..d9a241c2 100644 --- a/doc/EPANET/EPANET.qhp +++ b/doc/EPANET/EPANET.qhp @@ -24,6 +24,7 @@
+
@@ -241,6 +242,8 @@ + + diff --git a/doc/EPANET/epanet.qch b/doc/EPANET/epanet.qch index c20f7474eb3fc311fad78dadaab052983c242185..b64f421eaa426a97f08eab3675b60035862da295 100644 GIT binary patch delta 20516 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 delta 16939 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 TKMfwQ#W03Eq@7MNn&kfh=dwAT diff --git a/doc/EPANET/epanet.qhc b/doc/EPANET/epanet.qhc index cd9cd0d2dc44e35ae1f904bf58be29930aa582d3..31cb56d8696beeec32011cacd61f6892ebb6ed8e 100644 GIT binary patch delta 66 zcmZo@U~Fh$+^|`S+4o4)=511zj64>)29_a)rd9^#RtB4YOYe|_O9>)Nndw=WSS+$( F0RYNr6QTeB delta 66 zcmZo@U~Fh$+^|`SS>Z6t=511zj6CML24*3KhE^t)Rz{nDOYe|_O9>)Nndq4tn=P_o F0RW$V5|jV{ diff --git a/doc/EPANET/src/Prog0046.htm b/doc/EPANET/src/Prog0046.htm new file mode 100644 index 00000000..6590bbc7 --- /dev/null +++ b/doc/EPANET/src/Prog0046.htm @@ -0,0 +1,49 @@ +Program Preferences - Formats + + + + + + +

+Program Preferences - Formats


+ +

+The Formats page of the Program Preferences dialog box controls how many decimal places are displayed when results for computed quantities are reported.

+

GENERATE/DO-IT.gif     +Use the dropdown list boxes to select a specific Node or Link parameter.

+

GENERATE/DO-IT.gif     +Use the spin edit boxes to select the number of decimal places to use when displaying computed results for the parameter.

+ diff --git a/doc/EPANET/src/Program_.htm b/doc/EPANET/src/Program_.htm new file mode 100644 index 00000000..ebc4e321 --- /dev/null +++ b/doc/EPANET/src/Program_.htm @@ -0,0 +1,65 @@ +Program Preferences - General + + + + + + +

+Program Preferences - General


+ +

+The General page of the Program Preferences dialog box allows you to modify the following program preferences:

+

+Bold Fonts

+

+Uses bold fonts in all newly created windows.

+

+Blinking Map Hiliter

+

+Makes the selected node, link, or label on the map blink on and off.

+

+Flyover Map Labeling

+

+Displays the ID label and the current parameter value a hint-style box whenever the mouse is placed over a node or link on the network map.

+

+Confirm Deletions

+

+Displays a confirmation dialog box before deleting any object.

+

+Automatic Backup File

+

+Saves a backup copy of a newly opened project to disk named with a .bak extension.

+ diff --git a/doc/EPANET/src/Setting_.htm b/doc/EPANET/src/Setting_.htm new file mode 100644 index 00000000..81923a60 --- /dev/null +++ b/doc/EPANET/src/Setting_.htm @@ -0,0 +1,67 @@ +Setting Program Preferences + + + + + + +

+Setting Program Preferences


+ +

+Program preferences allow you to customize certain program features.

+

+To set Program Preferences:

+
  1. +Select File >> Preferences.
  2. +
  3. +A Preferences dialog form will appear allowing you to select preferences for the following categories:
  4. +

    GENERATE/DIAMOND.gif     +General Preferences

    +

    GENERATE/DIAMOND.gif     +Formatting Preferences

    +

    +

    + +

    + + + +
    prev.gif +disnext.gif
    + + diff --git a/doc/SWMM/src/generalpreferences.htm b/doc/SWMM/src/generalpreferences.htm index d24f30f4..7f2904cc 100644 --- a/doc/SWMM/src/generalpreferences.htm +++ b/doc/SWMM/src/generalpreferences.htm @@ -139,17 +139,9 @@

    Check to clear the list of most recently used files that appears when File >> Reopen is selected from the Main Menu.

    - -

    Style Theme

    - -

    Selects a color theme to use for SWMM's

    -

    user interface (see below)

    - -

     

    -

    WindowsTheme IcebergTheme QuartzTheme

    diff --git a/doc/SWMM/swmm.qch b/doc/SWMM/swmm.qch index 9dd3feea965128ae0bce1fd70aa2fcd339681d64..cb7c934c391870d80d9daf9b79e90bddb71057c9 100644 GIT binary patch delta 2054 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 diff --git a/doc/SWMM/swmm.qhc b/doc/SWMM/swmm.qhc index 0274270a8f2b3547392254995120e00592ab8701..0bb91f20cc2e06c5a981c4c36e6b843c54f80c03 100644 GIT binary patch delta 64 zcmZoDXeijQS&G^BnCj+jQkIN77P<_h9*`fn}191V1r8uB1@U-S(unEQV{_F DtV0s| delta 64 zcmZoDXeijQS&CU<-`~yKq%0YE%ykXSLJSS9jE$@eH~*I2!3LKSM3yqvGcz|{q#^ 0: + from shutil import copyfile + copyfile(file_name, file_name + ".bak") + self.add_recent_project(file_name) self.open_project_quiet(file_name) path_only, file_only = os.path.split(file_name) @@ -2239,6 +2243,11 @@ def save_project(self, file_name=None): self.project.file_name = file_name if self.model == "SWMM": self.set_project_map_extent() + + if self.project_settings.general_preferences['AutoBackup'] > 0: + from shutil import copyfile + copyfile(file_name, file_name + ".bak") + project_writer = self.project_writer_type() project_writer.write_file(self.project, file_name) # Avoid making any changes to settings since this might make settings unreadable to SWMM5 interface. diff --git a/src/ui/frmPreferences.py b/src/ui/frmPreferences.py index 3e824562..e88c1568 100644 --- a/src/ui/frmPreferences.py +++ b/src/ui/frmPreferences.py @@ -52,11 +52,37 @@ def set_from(self, project): self.spnNode.setValue(self.local_node_preferences[self.node_keys[0]]) self.spnLink.setValue(self.local_link_preferences[self.link_keys[0]]) + if settings.general_preferences[settings.general_preference_keys[0]] > 0: + self.cbxGeneral1.setChecked(True) + if settings.general_preferences[settings.general_preference_keys[1]] > 0: + self.cbxGeneral2.setChecked(True) + if settings.general_preferences[settings.general_preference_keys[2]] > 0: + self.cbxGeneral3.setChecked(True) + if settings.general_preferences[settings.general_preference_keys[3]] > 0: + self.cbxGeneral4.setChecked(True) + if settings.general_preferences[settings.general_preference_keys[4]] > 0: + self.cbxGeneral5.setChecked(True) + if settings.general_preferences[settings.general_preference_keys[5]] > 0: + self.cbxGeneral6.setChecked(True) + if settings.general_preferences[settings.general_preference_keys[6]] > 0: + self.cbxGeneral7.setChecked(True) + + self.cbxGeneral1.setDisabled(True) + self.cbxGeneral2.setDisabled(True) + self.cbxGeneral3.setDisabled(True) + self.cbxGeneral5.setDisabled(True) + self.cbxGeneral6.setDisabled(True) + self.cbxGeneral7.setDisabled(True) + elif self._main_form.model == "EPANET": self.lblSubcatchment.setVisible(False) self.cboSubcatchment.setVisible(False) self.lblDecimal1.setVisible(False) self.spnSubcatchment.setVisible(False) + self.cbxGeneral5.setText('Bold Fonts') + self.cbxGeneral6.setVisible(False) + self.cbxGeneral7.setVisible(False) + # self.cbxGeneral8.setVisible(False) settings = self._main_form.project_settings self.node_keys = settings.node_numerical_preference_keys @@ -74,6 +100,22 @@ def set_from(self, project): self.spnNode.setValue(self.local_node_preferences[self.node_keys[0]]) self.spnLink.setValue(self.local_link_preferences[self.link_keys[0]]) + + if settings.general_preferences[settings.general_preference_keys[0]] > 0: + self.cbxGeneral1.setChecked(True) + if settings.general_preferences[settings.general_preference_keys[1]] > 0: + self.cbxGeneral2.setChecked(True) + if settings.general_preferences[settings.general_preference_keys[2]] > 0: + self.cbxGeneral3.setChecked(True) + if settings.general_preferences[settings.general_preference_keys[3]] > 0: + self.cbxGeneral4.setChecked(True) + if settings.general_preferences[settings.general_preference_keys[4]] > 0: + self.cbxGeneral5.setChecked(True) + + self.cbxGeneral1.setDisabled(True) + self.cbxGeneral2.setDisabled(True) + self.cbxGeneral3.setDisabled(True) + self.cbxGeneral5.setDisabled(True) pass def cboSubcatchment_currentIndexChanged(self, newIndex): @@ -101,8 +143,39 @@ def cmdOK_Clicked(self): settings = self._main_form.project_settings if self._main_form.model == "SWMM": settings.subcatchment_numerical_preferences = self.local_subcatch_preferences + if self.cbxGeneral1.isChecked(): + settings.general_preferences[settings.general_preference_keys[0]] = 1 + if self.cbxGeneral2.isChecked(): + settings.general_preferences[settings.general_preference_keys[1]] = 1 + if self.cbxGeneral3.isChecked(): + settings.general_preferences[settings.general_preference_keys[2]] = 1 + if self.cbxGeneral4.isChecked(): + settings.general_preferences[settings.general_preference_keys[3]] = 1 + if self.cbxGeneral5.isChecked(): + settings.general_preferences[settings.general_preference_keys[4]] = 1 + if self.cbxGeneral6.isChecked(): + settings.general_preferences[settings.general_preference_keys[5]] = 1 + if self.cbxGeneral7.isChecked(): + settings.general_preferences[settings.general_preference_keys[6]] = 1 + elif self._main_form.model == "EPANET": + if self.cbxGeneral1.isChecked(): + settings.general_preferences[settings.general_preference_keys[0]] = 1 + if self.cbxGeneral2.isChecked(): + settings.general_preferences[settings.general_preference_keys[1]] = 1 + if self.cbxGeneral3.isChecked(): + settings.general_preferences[settings.general_preference_keys[2]] = 1 + if self.cbxGeneral4.isChecked(): + settings.general_preferences[settings.general_preference_keys[3]] = 1 + if self.cbxGeneral5.isChecked(): + settings.general_preferences[settings.general_preference_keys[4]] = 1 + settings.node_numerical_preferences = self.local_node_preferences settings.link_numerical_preferences = self.local_link_preferences + + if self.cbxGeneral8.isChecked(): + self._main_form.program_settings.setValue('recentProjectList', '') + self._main_form.update_recent(self._main_form.recent_projects, '') + self._main_form.project_settings.sync_preferences() self.close() From cf13ad459851f5e0787c1a9b629b34a64ab00a1d Mon Sep 17 00:00:00 2001 From: "tong.zhai" Date: Fri, 9 Aug 2019 17:56:00 -0400 Subject: [PATCH 23/27] use temp files for simulation and delete afterwards, address #101 and #219 - delete_temp_run_files - uses tempfile to generate temporary input and output files --- src/ui/EPANET/frmMainEPANET.py | 32 ++++++++++++---------- src/ui/SWMM/frmMainSWMM.py | 50 ++++++++++++++++++---------------- src/ui/frmMain.py | 46 +++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 39 deletions(-) diff --git a/src/ui/EPANET/frmMainEPANET.py b/src/ui/EPANET/frmMainEPANET.py index 485da150..c8ab37d8 100644 --- a/src/ui/EPANET/frmMainEPANET.py +++ b/src/ui/EPANET/frmMainEPANET.py @@ -68,6 +68,7 @@ import Externals.epanet.outputapi.ENOutputWrapper as ENO import ui.convenience from ui.EPANET.inifile import DefaultsEPANET +from tempfile import * class frmMainEPANET(frmMain): @@ -131,10 +132,7 @@ def __init__(self, q_application): self.program_settings = QSettings(QSettings.IniFormat, QSettings.UserScope, "EPA", self.model) print("Read program settings from " + self.program_settings.fileName()) self.model_path = '' # Set this only if needed later when running model - self.output = None # Set this when model output is available self.status_suffix = "_status.txt" - self.status_file_name = '' # Set this when model status is available - self.output_filename = '' # Set this when model output is available self.project_type = Project # Use the model-specific Project as defined in core.epanet.project self.project_reader_type = ProjectReader self.project_writer_type = ProjectWriter @@ -887,8 +885,8 @@ def delete_named_object(self, tree_text, item_name): self.delete_item(item) def run_simulation(self): - # self.open_output() - # return + + self.delete_temp_run_files() # Find input file to run # TODO: decide whether to automatically save to temp location as previous version did. @@ -896,9 +894,8 @@ def run_simulation(self): os.path.isdir(os.path.split(self.project.file_name)[0]) if use_existing: filename, file_extension = os.path.splitext(self.project.file_name) - ts = QtCore.QTime.currentTime().toString().replace(":", "_") - if not os.path.exists(self.project.file_name_temporary): - self.project.file_name_temporary = filename + "_trial_" + ts + file_extension + self.run_inp_file = mkstemp(prefix=filename + '_', suffix='.inp', text=True) + self.project.file_name_temporary = self.run_inp_file[1] self.save_project(self.project.file_name_temporary) elif self.project.all_nodes(): # unsaved changes to a new project have been made, prompt to save @@ -906,7 +903,9 @@ def run_simulation(self): if new_name: use_existing = True self.project.file_name = new_name - self.project.file_name_temporary = self.project.file_name + filename, file_extension = os.path.splitext(self.project.file_name) + self.run_inp_file = mkstemp(prefix=filename + '_', suffix='.inp', text=True) + self.project.file_name_temporary = self.run_inp_file[1] else: return None else: @@ -945,10 +944,11 @@ def run_simulation(self): print("Could not change into temporary directory: " + str(err_temp)) if self.output: - self.output.close() self.output = None - model_api = ENepanet(inp_file_name, self.status_file_name, self.output_filename, self.model_path) - frmRun = frmRunEPANET(model_api, self.project, self) + if self.model_api: + self.model_api = None + self.model_api = ENepanet(inp_file_name, self.status_file_name, self.output_filename, self.model_path) + frmRun = frmRunEPANET(self.model_api, self.project, self) self._forms.append(frmRun) frmRun.Execute() # self.report_status() @@ -984,9 +984,11 @@ def run_simulation(self): QMessageBox.Ok) finally: try: - os.chdir(current_directory) - if model_api and model_api.isOpen(): - model_api.ENclose() + # os.chdir(current_directory) + if self.run_inp_file: + os.close(self.run_inp_file[0]) + if self.model_api and self.model_api.isOpen(): + self.model_api.ENclose() except: pass return diff --git a/src/ui/SWMM/frmMainSWMM.py b/src/ui/SWMM/frmMainSWMM.py index 3d7882e5..7b6dc244 100644 --- a/src/ui/SWMM/frmMainSWMM.py +++ b/src/ui/SWMM/frmMainSWMM.py @@ -96,6 +96,7 @@ import ui.convenience from ui.SWMM.inifile import DefaultsSWMM from datetime import timedelta +from tempfile import * class frmMainSWMM(frmMain): @@ -261,10 +262,7 @@ def __init__(self, q_application): # print(name + " = " + value) self.model_path = '' # Set this only if needed later when running model - self.output = None # Set this when model output is available self.status_suffix = "_status.txt" - self.status_file_name = '' # Set this when model status is available - self.output_filename = '' # Set this when model output is available self.animation_dates = {} self.animation_time_of_day = {} self.project_type = Project # Use the model-specific Project as defined in core.swmm.project @@ -1419,17 +1417,16 @@ def delete_named_object(self, tree_text, item_name): # self.project.curves.value.remove(value) def run_simulation(self): - if self.output: - self.output.close() - self.output = None + + self.delete_temp_run_files() + # First find input file to run use_existing = self.project and self.project.file_name and os.path.exists(self.project.file_name) and \ os.path.isdir(os.path.split(self.project.file_name)[0]) if use_existing: filename, file_extension = os.path.splitext(self.project.file_name) - ts = QtCore.QTime.currentTime().toString().replace(":", "_") - if not os.path.exists(self.project.file_name_temporary): - self.project.file_name_temporary = filename + "_trial_" + ts + file_extension + self.run_inp_file = mkstemp(prefix=filename + '_', suffix='.inp', text=True) + self.project.file_name_temporary = self.run_inp_file[1] self.save_project(self.project.file_name_temporary) # TODO: decide whether to automatically save to temp location as previous version did. elif self.project.subcatchments.value or self.project.raingages.value or self.project.all_nodes(): @@ -1438,24 +1435,23 @@ def run_simulation(self): if new_name: use_existing = True self.project.file_name = new_name - self.project.file_name_temporary = self.project.file_name + filename, file_extension = os.path.splitext(self.project.file_name) + self.run_inp_file = mkstemp(prefix=filename + '_', suffix='.inp', text=True) + self.project.file_name_temporary = self.run_inp_file[1] else: return None else: self.open_project() - file_name = '' + inp_file_name = '' if self.project: - file_name = self.project.file_name_temporary + inp_file_name = self.project.file_name_temporary - if os.path.exists(file_name): - prefix, extension = os.path.splitext(file_name) + if os.path.exists(inp_file_name): + prefix, extension = os.path.splitext(inp_file_name) self.status_file_name = prefix + self.status_suffix self.output_filename = prefix + '.out' os.chdir(os.path.split(prefix)[0]) - if self.output: - self.output.close() - self.output = None if not os.path.exists(self.model_path): if 'darwin' in sys.platform: lib_name = 'libswmm.dylib' @@ -1469,8 +1465,12 @@ def run_simulation(self): print('Model Path ' + self.model_path + '\n') try: from Externals.swmm.model.swmm5 import pyswmm - model_api = pyswmm(file_name, self.status_file_name, self.output_filename, self.model_path) - frmRun = frmRunSWMM(model_api, self.project, self) + if self.output: + self.output = None + if self.model_api: + self.model_api = None + self.model_api = pyswmm(inp_file_name, self.status_file_name, self.output_filename, self.model_path) + frmRun = frmRunSWMM(self.model_api, self.project, self) self._forms.append(frmRun) if not use_existing: # Read this project so we can refer to it while running @@ -1479,10 +1479,10 @@ def run_simulation(self): frmRun.fraTime.setVisible(False) frmRun.fraBottom.setVisible(False) frmRun.showNormal() - frmRun.set_status_text("Reading " + file_name) + frmRun.set_status_text("Reading " + inp_file_name) self.project = Project() - self.project.read_file(file_name) + self.project.read_file(inp_file_name) frmRun.project = self.project frmRun.Execute() @@ -1577,8 +1577,10 @@ def run_simulation(self): QMessageBox.Ok) finally: try: - if model_api and model_api.isOpen(): - model_api.ENclose() + if self.run_inp_file: + os.close(self.run_inp_file[0]) + if self.model_api: + self.model_api.swmm_close() except: pass return @@ -1593,7 +1595,7 @@ def run_simulation(self): exe_name = "swmm5.exe" exe_path = self.find_external(exe_name) if os.path.isfile(exe_path): - args.append(file_name) + args.append(inp_file_name) args.append(self.status_file_name) args.append(self.output_filename) # running the Exe diff --git a/src/ui/frmMain.py b/src/ui/frmMain.py index 95d423dc..7fadd402 100644 --- a/src/ui/frmMain.py +++ b/src/ui/frmMain.py @@ -51,9 +51,11 @@ def __init__(self, q_application): self.crs = None # self.project_settings = None self.model_path = '' # Set this only if needed later when running model + self.model_api = None self.output = None # Set this when model output is available self.status_file_name = '' # Set this when model status is available self.output_filename = '' # Set this when model output is available + self.run_inp_file = None self.no_items = True self.setupUi(self) self.q_application = q_application @@ -2103,8 +2105,52 @@ def confirm_discard_project(self): if choice == QMessageBox.Yes: return True return False + self.delete_temp_run_files() return True + def delete_temp_run_files(self): + if self.run_inp_file: + if os.path.exists(self.run_inp_file[1]): + if self.output: + try: + if self.model.upper() == 'EPANET': + self.output.close() + elif self.model.upper() == 'SWMM': + # self.output.close() + pass + except Exception as ex: + pass + self.output = None + + if self.model_api: + try: + if self.model.upper() == 'EPANET': + self.model_api.ENcloseH() + self.model_api.ENcloseQ() + if self.model_api.isOpen(): + self.model_api.ENclose() + elif self.model.upper() == 'SWMM': + self.model_api.swmm_close() + except Exception as ex: + pass + self.model_api = None + + try: + os.remove(self.output_filename) + except Exception as ex: + pass + + try: + os.remove(self.status_file_name) + except Exception as ex: + pass + + try: + # os.close(self.run_inp_file[0]) + os.remove(self.run_inp_file[1]) + except Exception as ex: + pass + def mark_project_as_unsaved(self): if not self.project.file_name.endswith('*'): self.project.file_name = self.project.file_name + "*" From 6b968641b1b752f0e5556e9121f148598be019db Mon Sep 17 00:00:00 2001 From: PaulHummelRESPEC Date: Mon, 12 Aug 2019 15:15:25 -0400 Subject: [PATCH 24/27] Expanded width of frmGroundwaterFlowDesigner form so that Lateral and Deep Groundwater Flow editing buttons are visible --- src/ui/SWMM/frmGroundwaterFlowDesigner.py | 2 +- src/ui/SWMM/frmGroundwaterFlowDesigner.ui | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/SWMM/frmGroundwaterFlowDesigner.py b/src/ui/SWMM/frmGroundwaterFlowDesigner.py index 9bf961ae..11b667ff 100644 --- a/src/ui/SWMM/frmGroundwaterFlowDesigner.py +++ b/src/ui/SWMM/frmGroundwaterFlowDesigner.py @@ -27,7 +27,7 @@ def _translate(context, text, disambig): class Ui_frmGroundwaterFlow(object): def setupUi(self, frmGroundwaterFlow): frmGroundwaterFlow.setObjectName(_fromUtf8("frmGroundwaterFlow")) - frmGroundwaterFlow.resize(680, 464) + frmGroundwaterFlow.resize(720, 464) sizePolicy = QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) diff --git a/src/ui/SWMM/frmGroundwaterFlowDesigner.ui b/src/ui/SWMM/frmGroundwaterFlowDesigner.ui index 378ad193..dc5643d5 100644 --- a/src/ui/SWMM/frmGroundwaterFlowDesigner.ui +++ b/src/ui/SWMM/frmGroundwaterFlowDesigner.ui @@ -6,7 +6,7 @@ 0 0 - 680 + 720 464 From 7be767ae51127674cd32a8a66b6c16f75250cddc Mon Sep 17 00:00:00 2001 From: "tong.zhai" Date: Mon, 12 Aug 2019 17:52:12 -0400 Subject: [PATCH 25/27] fix #299 update GIS map element selection and vertex editing functions --- src/ui/map_edit.py | 14 ++++++++------ src/ui/map_tools.py | 9 +++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/ui/map_edit.py b/src/ui/map_edit.py index 82129e1f..df685f65 100644 --- a/src/ui/map_edit.py +++ b/src/ui/map_edit.py @@ -103,7 +103,7 @@ def canvasDoubleClickEvent(self, event): layerPt = self.toLayerCoordinates(self.layer, event.pos()) geometry = feature.geometry() self.start_geom = self.copy_geometry(geometry) - distSquared, closestPt, beforeVertex = \ + distSquared, closestPt, beforeVertex, leftof = \ geometry.closestSegmentWithContext(layerPt) distance = math.sqrt(distSquared) tolerance = self.calcTolerance(event.pos()) @@ -176,12 +176,14 @@ def copy_geometry(self, geometry): return None vs = [] for v in geometry.vertices(): - vs.append(v) - if len(vs) > 3: - new_geometry = QgsGeometry() + vs.append(QgsPointXY(v.x(), v.y())) + new_geometry = QgsGeometry() + if geometry.wkbType() == QgsWkbTypes.Polygon: new_geometry.addPointsXY(vs, QgsWkbTypes.PolygonGeometry) return new_geometry - # return QgsGeometry.fromPolygon(vs) + elif geometry.wkbType() == QgsWkbTypes.LineGeometry: + new_geometry.addPointsXY(vs, QgsWkbTypes.LineGeometry) + return new_geometry else: return None @@ -277,7 +279,7 @@ def update_centroidlinks(self, geom): if fl["inlet"] == self.feature["c_modelid"]: if fl.geometry().wkbType() == QgsWkbTypes.LineString: line = fl.geometry().asPolyline() - new_l_g = QgsGeometry.fromPolyline([new_c, line[-1]]) + new_l_g = QgsGeometry.fromPolylineXY([new_c, line[-1]]) change_map = {fl.id(): new_l_g} self.sublinks.dataProvider().changeGeometryValues(change_map) break diff --git a/src/ui/map_tools.py b/src/ui/map_tools.py index 649b4625..a3128c71 100644 --- a/src/ui/map_tools.py +++ b/src/ui/map_tools.py @@ -2617,6 +2617,13 @@ def __init__(self, canvas, session): self.extending_same_layer = False self.auto_detect = True + def set_nearest_layer(self): + active_layer = self.session.gis_layer_tree.currentLayer() + if active_layer: + if active_layer in self.session.model_layers.all_layers: + self.nearest_layer = active_layer + self.nearest_layer = None + def build_spatial_index(self): self.layer_spatial_indexes = [] for lyr in self.session.model_layers.all_layers: @@ -2849,6 +2856,8 @@ def find_nearest_feature_qgs(self, make_distance_labels=False): if self.auto_detect: self.nearest_layer = None + else: + self.set_nearest_layer() self.nearest_feature = None self.nearest_point_index = -1 self.nearest_distance = float("inf") From 7fbd3bec52167ca70c55b62b24fb0d0e90b29fd4 Mon Sep 17 00:00:00 2001 From: PaulDudaRESPEC Date: Wed, 14 Aug 2019 15:06:50 -0400 Subject: [PATCH 26/27] implement events option from SWMM 5.1.012+, in response to issue #142 --- doc/SWMM/SWMM.qhp | 1 + doc/SWMM/src/curveeditordialog.htm | 2 +- doc/SWMM/src/events_editor.htm | 108 +++++++ doc/SWMM/src/graphoptionsdialog.htm | 2 +- doc/SWMM/src/settingsimulationoptions.htm | 1 + doc/SWMM/swmm.qch | Bin 2063360 -> 2065408 bytes doc/SWMM/swmm.qhc | Bin 14336 -> 14336 bytes src/core/inp_reader_base.py | 2 +- src/core/swmm/inp_reader_project.py | 4 + src/core/swmm/inp_reader_sections.py | 20 ++ src/core/swmm/inp_writer_project.py | 5 + src/core/swmm/inp_writer_sections.py | 18 ++ src/core/swmm/options/events.py | 36 +++ src/core/swmm/swmm_project.py | 4 + src/ui/SWMM/frmEvents.py | 145 +++++++++ src/ui/SWMM/frmEventsDesigner.py | 165 +++++++++++ src/ui/SWMM/frmEventsDesigner.ui | 344 ++++++++++++++++++++++ src/ui/SWMM/frmMainSWMM.py | 7 +- 18 files changed, 860 insertions(+), 4 deletions(-) create mode 100644 doc/SWMM/src/events_editor.htm create mode 100644 src/core/swmm/options/events.py create mode 100644 src/ui/SWMM/frmEvents.py create mode 100644 src/ui/SWMM/frmEventsDesigner.py create mode 100644 src/ui/SWMM/frmEventsDesigner.ui diff --git a/doc/SWMM/SWMM.qhp b/doc/SWMM/SWMM.qhp index 64041d62..498df0f3 100644 --- a/doc/SWMM/SWMM.qhp +++ b/doc/SWMM/SWMM.qhp @@ -254,6 +254,7 @@
+
diff --git a/doc/SWMM/src/curveeditordialog.htm b/doc/SWMM/src/curveeditordialog.htm index e6eed809..3f4e1749 100644 --- a/doc/SWMM/src/curveeditordialog.htm +++ b/doc/SWMM/src/curveeditordialog.htm @@ -82,7 +82,7 @@ onmouseout="document.images.prev.src='button_prev.png'">Previous page  - Next page diff --git a/doc/SWMM/src/events_editor.htm b/doc/SWMM/src/events_editor.htm new file mode 100644 index 00000000..33c861a7 --- /dev/null +++ b/doc/SWMM/src/events_editor.htm @@ -0,0 +1,108 @@ + + + + + Events Editor + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+

Events Editor

+ +
+ + + Return to Introduction  + Previous page  + + + Next page + + +
+
+ + +
+

The Events Editor is activated when the Events sub-category of simulation Options is selected for editing from the Project Browser.

+

 

+

It is used to limit the periods of time in which a full unsteady hydraulic analysis of the drainage network is performed. For times outside of these periods, the hydraulic state of the network stays the same as it was at the end of the previous hydraulic event.  Although hydraulic calculations are restricted to these pre-defined event periods, a full accounting of the system's hydrology is still computed over the entire simulation duration. During inter-event periods any inflows to the network, from runoff, groundwater flow, dry weather flow, etc., are ignored.The purpose of only computing hydraulics for particular time periods is to speed up long-term continuous simulations where one knows in advance which periods of time (such as representative or critical storm events) are of most interest.

+

 

+

The dialog consists of a table listing the start and end date of each event, plus a blank line at the end of the list used for adding a new event. The events do not have to be entered in chronological order. There are date and time selection controls below the table used to edit the dates of a selected event. Clicking the Replace Event button will replace the row with the entries in these controls. The Delete Event button will delete the selected event and the Delete All button will delete all events from the table. The first column of the table contains a check box which determines if the event should be used in the analysis or not.

+

 

+
icon_tipTo identify event periods of interest, one can first run a simulation with Flow Routing turned off (see Simulation Options - General) and then perform a statistical frequency analysis on the system's rainfall record (see Viewing a Statistics Report).

 

+
icon_tipWhen a new event occurs, the water in a storage unit node will remain at the same level it had at the end of the previous event. Therefore one may want to choose event intervals long enough to minimize the effect that storage carryover might have.
+
+ + + diff --git a/doc/SWMM/src/graphoptionsdialog.htm b/doc/SWMM/src/graphoptionsdialog.htm index e66091f2..ba8fc6a7 100644 --- a/doc/SWMM/src/graphoptionsdialog.htm +++ b/doc/SWMM/src/graphoptionsdialog.htm @@ -77,7 +77,7 @@ onmouseover="document.images.main.src='button_main_h.png'" onmouseout="document.images.main.src='button_main.png'"> Return to Introduction  - Previous page  diff --git a/doc/SWMM/src/settingsimulationoptions.htm b/doc/SWMM/src/settingsimulationoptions.htm index 3c3da121..b0fcce44 100644 --- a/doc/SWMM/src/settingsimulationoptions.htm +++ b/doc/SWMM/src/settingsimulationoptions.htm @@ -104,6 +104,7 @@

 

 

 

+

 

3.Double click on the desired option category.

 

diff --git a/doc/SWMM/swmm.qch b/doc/SWMM/swmm.qch index cb7c934c391870d80d9daf9b79e90bddb71057c9..1f38b3e5d4bd62700b4311e68823660596649ef0 100644 GIT binary patch delta 46081 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 delta 43563 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 0: + event.start_date = fields[0] + if len(fields) > 1: + event.start_time = fields[1] + if len(fields) > 2: + event.end_date = fields[2] + if len(fields) > 3: + event.end_time = fields[3] + event.name = event.start_date + event.start_time + event.end_date + event.end_time + return event + + class CurveReader(SectionReader): """Defines data curves and their X,Y points""" diff --git a/src/core/swmm/inp_writer_project.py b/src/core/swmm/inp_writer_project.py index 9011a1b7..50c1acd8 100644 --- a/src/core/swmm/inp_writer_project.py +++ b/src/core/swmm/inp_writer_project.py @@ -10,6 +10,7 @@ from core.swmm.options.files import Files from core.swmm.options.backdrop import BackdropOptions from core.swmm.options.map import MapOptions +from core.swmm.options.events import Events from core.swmm.climatology import Evaporation from core.swmm.climatology import Temperature from core.swmm.climatology import Adjustments @@ -166,6 +167,10 @@ def __init__(self): self.write_controls = SectionWriter() # rules that control pump and regulator operation + self.write_events = SectionWriterAsList("[EVENTS]", EventsWriter, + ";;Start Date \tEnd Date\n") + # events + self.write_landuses = SectionWriterAsList("[LANDUSES]", LanduseWriter, ";; \tSweeping \tFraction \tLast\n" ";;Name \tInterval \tAvailable \tSwept\n" diff --git a/src/core/swmm/inp_writer_sections.py b/src/core/swmm/inp_writer_sections.py index 9187307a..87055859 100644 --- a/src/core/swmm/inp_writer_sections.py +++ b/src/core/swmm/inp_writer_sections.py @@ -77,6 +77,7 @@ from core.swmm.options.map import MapUnits from core.swmm.options.map import MapOptions from core.swmm.options.report import Report +from core.swmm.options.events import Events from core.inp_writer_base import SectionWriter from core.utility import ParseData @@ -165,6 +166,23 @@ def as_text(pattern): return section_text +class EventsWriter(SectionWriter): + """Restricts hydraulic analyses to particular time periods, hydraulics remain constant outside of these periods""" + + field_format = " {:12}\t{:5}\t{:10}\t{:5}" + + @staticmethod + def as_text(event): + inp = '' + if event.comment: + inp = event.comment + '\n' + inp += EventsWriter.field_format.format(event.start_date, + event.start_time, + event.end_date, + event.end_time) + return inp + + class LanduseWriter(SectionWriter): """Identifies the various categories of land uses within the drainage area. Each subcatchment area can be assigned a different mix of land uses. Each land use can be subjected to a different diff --git a/src/core/swmm/options/events.py b/src/core/swmm/options/events.py new file mode 100644 index 00000000..af83054e --- /dev/null +++ b/src/core/swmm/options/events.py @@ -0,0 +1,36 @@ +from core.project_base import Section +from core.metadata import Metadata + + +class Events(Section): + """Events""" + + SECTION_NAME = "[EVENTS]" + + # DEFAULT_COMMENT = ";;Start Date End Date" + + # attribute, input_name, label, default, english, metric, hint + metadata = Metadata(( + ("start_date", "START DATE"), + ("start_time", "START TIME"), + ("end_date", "END DATE"), + ("end_time", "END Time"))) + + def __init__(self): + Section.__init__(self) + + self.name = "" + + ## start date + self.start_date = "01/01/1900" + + ## start time + self.start_time = "00:00" + + ## end date + self.end_date = "12/31/2000" + + ## end time + self.end_time = "23:00" + + diff --git a/src/core/swmm/swmm_project.py b/src/core/swmm/swmm_project.py index fae78524..43d9bbe9 100644 --- a/src/core/swmm/swmm_project.py +++ b/src/core/swmm/swmm_project.py @@ -21,6 +21,7 @@ from core.swmm.options.general import General from core.swmm.options.map import MapOptions from core.swmm.options.report import Report +from core.swmm.options.events import Events from core.swmm.patterns import Pattern from core.swmm.quality import Landuse, Buildup, Washoff, Pollutant from core.swmm.timeseries import TimeSeries @@ -120,6 +121,8 @@ def __init__(self): self.controls = Controls() # rules that control pump and regulator operation + self.events = SectionAsList("[EVENTS]") # (list of Events) + self.landuses = SectionAsList("[LANDUSES]") # (list of Landuse) # land use categories self.buildup = SectionAsList("[BUILDUP]") # (list of Buildup) @@ -194,6 +197,7 @@ def __init__(self): self.buildup, self.washoff, self.report, + self.events, self.files, self.backdrop, self.map, diff --git a/src/ui/SWMM/frmEvents.py b/src/ui/SWMM/frmEvents.py new file mode 100644 index 00000000..9131d988 --- /dev/null +++ b/src/ui/SWMM/frmEvents.py @@ -0,0 +1,145 @@ +import PyQt5.QtGui as QtGui +import PyQt5.QtCore as QtCore +from PyQt5.QtWidgets import QMainWindow +from PyQt5.QtWidgets import QTableWidgetItem, QAbstractItemView +from ui.SWMM.frmEventsDesigner import Ui_frmEvents +from core.swmm.options.events import Events +from core.indexed_list import IndexedList + + +class frmEvents(QMainWindow, Ui_frmEvents): + def __init__(self, main_form=None): + QMainWindow.__init__(self, main_form) + self.help_topic = "swmm/src/src/events_editor.htm" + self.setupUi(self) + self.cmdOK.clicked.connect(self.cmdOK_Clicked) + self.cmdCancel.clicked.connect(self.cmdCancel_Clicked) + self.tableWidget.itemSelectionChanged.connect(self.tableSelectionChanged) + self.btnAdd.clicked.connect(self.btnAdd_Clicked) + self.btnReplace.clicked.connect(self.btnReplace_Clicked) + self.btnDelete.clicked.connect(self.btnDelete_Clicked) + self.btnDeleteAll.clicked.connect(self.btnDeleteAll_Clicked) + self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows) + self.project = main_form.project + self.set_from(main_form.project) + self._main_form = main_form + + def set_from(self, project): + section = project.events + for event in section.value: + numRows = self.tableWidget.rowCount() + self.tableWidget.insertRow(numRows) + # Add text to the row + chkBoxItem = QTableWidgetItem() + chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled) + chkBoxItem.setCheckState(QtCore.Qt.Checked) + self.tableWidget.setItem(numRows, 0, chkBoxItem) + + txtItem1 = QTableWidgetItem(event.start_date) + txtItem1.setFlags(QtCore.Qt.ItemIsEnabled) + self.tableWidget.setItem(numRows, 1, txtItem1) + + txtItem2 = QTableWidgetItem(event.start_time) + txtItem2.setFlags(QtCore.Qt.ItemIsEnabled) + self.tableWidget.setItem(numRows, 2, txtItem2) + + txtItem3 = QTableWidgetItem(event.end_date) + txtItem3.setFlags(QtCore.Qt.ItemIsEnabled) + self.tableWidget.setItem(numRows, 3, txtItem3) + + txtItem4 = QTableWidgetItem(event.end_time) + txtItem4.setFlags(QtCore.Qt.ItemIsEnabled) + self.tableWidget.setItem(numRows, 4, txtItem4) + + self.tableWidget.setRowHeight(numRows,20) + self.tableWidget.setCurrentCell(0,0) + self.tableWidget.resizeColumnsToContents() + pass + + def tableSelectionChanged(self): + selectedRow = self.tableWidget.currentRow() + self.dedStart.setDate(QtCore.QDate.fromString(self.tableWidget.item(selectedRow,1).text(), "MM/dd/yyyy")) + self.tmeStart.setTime(QtCore.QTime.fromString(self.tableWidget.item(selectedRow,2).text(), "hh:mm")) + self.dedEnd.setDate(QtCore.QDate.fromString(self.tableWidget.item(selectedRow,3).text(), "MM/dd/yyyy")) + self.tmeEnd.setTime(QtCore.QTime.fromString(self.tableWidget.item(selectedRow,4).text(), "hh:mm")) + pass + + def btnAdd_Clicked(self): + numRows = self.tableWidget.rowCount() + self.tableWidget.insertRow(numRows) + + chkBoxItem = QTableWidgetItem() + chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled) + chkBoxItem.setCheckState(QtCore.Qt.Checked) + self.tableWidget.setItem(numRows, 0, chkBoxItem) + + txtItem1 = QTableWidgetItem(self.dedStart.date().toString("MM/dd/yyyy")) + txtItem1.setFlags(QtCore.Qt.ItemIsEnabled) + self.tableWidget.setItem(numRows, 1, txtItem1) + + txtItem2 = QTableWidgetItem(self.tmeStart.time().toString("hh:mm")) + txtItem2.setFlags(QtCore.Qt.ItemIsEnabled) + self.tableWidget.setItem(numRows, 2, txtItem2) + + txtItem3 = QTableWidgetItem(self.dedEnd.date().toString("MM/dd/yyyy")) + txtItem3.setFlags(QtCore.Qt.ItemIsEnabled) + self.tableWidget.setItem(numRows, 3, txtItem3) + + txtItem4 = QTableWidgetItem(self.tmeEnd.time().toString("hh:mm")) + txtItem4.setFlags(QtCore.Qt.ItemIsEnabled) + self.tableWidget.setItem(numRows, 4, txtItem4) + + self.tableWidget.setRowHeight(numRows, 20) + + def btnReplace_Clicked(self): + selectedRow = self.tableWidget.currentRow() + + txtItem1 = QTableWidgetItem(self.dedStart.date().toString("MM/dd/yyyy")) + txtItem1.setFlags(QtCore.Qt.ItemIsEnabled) + self.tableWidget.setItem(selectedRow, 1, txtItem1) + + txtItem2 = QTableWidgetItem(self.tmeStart.time().toString("hh:mm")) + txtItem2.setFlags(QtCore.Qt.ItemIsEnabled) + self.tableWidget.setItem(selectedRow, 2, txtItem2) + + txtItem3 = QTableWidgetItem(self.dedEnd.date().toString("MM/dd/yyyy")) + txtItem3.setFlags(QtCore.Qt.ItemIsEnabled) + self.tableWidget.setItem(selectedRow, 3, txtItem3) + + txtItem4 = QTableWidgetItem(self.tmeEnd.time().toString("hh:mm")) + txtItem4.setFlags(QtCore.Qt.ItemIsEnabled) + self.tableWidget.setItem(selectedRow, 4, txtItem4) + pass + + def btnDelete_Clicked(self): + selectedRow = self.tableWidget.currentRow() + self.tableWidget.removeRow(selectedRow) + pass + + def btnDeleteAll_Clicked(self): + while self.tableWidget.rowCount() > 0: + self.tableWidget.removeRow(0) + pass + + def cmdOK_Clicked(self): + section = self.project.events + section.value = IndexedList([], ['name']) + + numRows = self.tableWidget.rowCount() + + for row in range(0,numRows): + chkBoxItem = self.tableWidget.item(row,0) + checked = chkBoxItem.checkState() + if checked == 2: + event = Events() + event.start_date = self.tableWidget.item(row,1).text() + event.start_time = self.tableWidget.item(row,2).text() + event.end_date = self.tableWidget.item(row,3).text() + event.end_time = self.tableWidget.item(row,4).text() + event.name = event.start_date + event.start_time + event.end_date + event.end_time + section.value.append(event) + + self.close() + + def cmdCancel_Clicked(self): + self.close() diff --git a/src/ui/SWMM/frmEventsDesigner.py b/src/ui/SWMM/frmEventsDesigner.py new file mode 100644 index 00000000..3fb8de9a --- /dev/null +++ b/src/ui/SWMM/frmEventsDesigner.py @@ -0,0 +1,165 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'C:\dev\Python\dev-ui-py3qt5\src\ui\SWMM\frmEventsDesigner.ui' +# +# Created by: PyQt5 UI code generator 5.11.3 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + +class Ui_frmEvents(object): + def setupUi(self, frmEvents): + frmEvents.setObjectName("frmEvents") + frmEvents.resize(466, 352) + font = QtGui.QFont() + font.setPointSize(10) + frmEvents.setFont(font) + self.centralWidget = QtWidgets.QWidget(frmEvents) + self.centralWidget.setObjectName("centralWidget") + self.verticalLayout = QtWidgets.QVBoxLayout(self.centralWidget) + self.verticalLayout.setContentsMargins(11, 11, 11, 11) + self.verticalLayout.setSpacing(6) + self.verticalLayout.setObjectName("verticalLayout") + self.lblTop = QtWidgets.QLabel(self.centralWidget) + self.lblTop.setObjectName("lblTop") + self.verticalLayout.addWidget(self.lblTop) + self.lblTop2 = QtWidgets.QLabel(self.centralWidget) + self.lblTop2.setObjectName("lblTop2") + self.verticalLayout.addWidget(self.lblTop2) + self.tableWidget = QtWidgets.QTableWidget(self.centralWidget) + self.tableWidget.setColumnCount(5) + self.tableWidget.setObjectName("tableWidget") + self.tableWidget.setRowCount(0) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(0, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(1, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(2, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(3, item) + item = QtWidgets.QTableWidgetItem() + self.tableWidget.setHorizontalHeaderItem(4, item) + self.tableWidget.horizontalHeader().setDefaultSectionSize(70) + self.tableWidget.horizontalHeader().setMinimumSectionSize(10) + self.tableWidget.verticalHeader().setDefaultSectionSize(10) + self.verticalLayout.addWidget(self.tableWidget) + self.gbxModify = QtWidgets.QGroupBox(self.centralWidget) + self.gbxModify.setObjectName("gbxModify") + self.gridLayout = QtWidgets.QGridLayout(self.gbxModify) + self.gridLayout.setContentsMargins(11, 11, 11, 11) + self.gridLayout.setSpacing(6) + self.gridLayout.setObjectName("gridLayout") + self.lblStart_2 = QtWidgets.QLabel(self.gbxModify) + self.lblStart_2.setMinimumSize(QtCore.QSize(70, 0)) + self.lblStart_2.setMaximumSize(QtCore.QSize(150, 16777215)) + self.lblStart_2.setObjectName("lblStart_2") + self.gridLayout.addWidget(self.lblStart_2, 1, 0, 1, 1) + self.dedEnd = QtWidgets.QDateEdit(self.gbxModify) + self.dedEnd.setMaximumSize(QtCore.QSize(100, 16777215)) + self.dedEnd.setDate(QtCore.QDate(2002, 1, 1)) + self.dedEnd.setObjectName("dedEnd") + self.gridLayout.addWidget(self.dedEnd, 0, 4, 1, 1) + self.tmeEnd = QtWidgets.QTimeEdit(self.gbxModify) + self.tmeEnd.setMaximumSize(QtCore.QSize(100, 16777215)) + self.tmeEnd.setProperty("showGroupSeparator", False) + self.tmeEnd.setObjectName("tmeEnd") + self.gridLayout.addWidget(self.tmeEnd, 1, 4, 1, 1) + self.lblStart_3 = QtWidgets.QLabel(self.gbxModify) + self.lblStart_3.setMinimumSize(QtCore.QSize(70, 0)) + self.lblStart_3.setMaximumSize(QtCore.QSize(150, 16777215)) + self.lblStart_3.setObjectName("lblStart_3") + self.gridLayout.addWidget(self.lblStart_3, 0, 3, 1, 1) + self.dedStart = QtWidgets.QDateEdit(self.gbxModify) + self.dedStart.setMaximumSize(QtCore.QSize(100, 16777215)) + self.dedStart.setDate(QtCore.QDate(2002, 1, 1)) + self.dedStart.setObjectName("dedStart") + self.gridLayout.addWidget(self.dedStart, 0, 1, 1, 2) + self.lblStart = QtWidgets.QLabel(self.gbxModify) + self.lblStart.setMinimumSize(QtCore.QSize(70, 0)) + self.lblStart.setMaximumSize(QtCore.QSize(150, 16777215)) + self.lblStart.setObjectName("lblStart") + self.gridLayout.addWidget(self.lblStart, 0, 0, 1, 1) + self.lblStart_4 = QtWidgets.QLabel(self.gbxModify) + self.lblStart_4.setMinimumSize(QtCore.QSize(70, 0)) + self.lblStart_4.setMaximumSize(QtCore.QSize(150, 16777215)) + self.lblStart_4.setObjectName("lblStart_4") + self.gridLayout.addWidget(self.lblStart_4, 1, 3, 1, 1) + self.tmeStart = QtWidgets.QTimeEdit(self.gbxModify) + self.tmeStart.setMinimumSize(QtCore.QSize(50, 0)) + self.tmeStart.setMaximumSize(QtCore.QSize(100, 16777215)) + self.tmeStart.setBaseSize(QtCore.QSize(0, 0)) + self.tmeStart.setProperty("showGroupSeparator", False) + self.tmeStart.setObjectName("tmeStart") + self.gridLayout.addWidget(self.tmeStart, 1, 1, 1, 2) + self.btnAdd = QtWidgets.QPushButton(self.gbxModify) + self.btnAdd.setMaximumSize(QtCore.QSize(100, 16777215)) + self.btnAdd.setObjectName("btnAdd") + self.gridLayout.addWidget(self.btnAdd, 2, 1, 1, 1) + self.btnReplace = QtWidgets.QPushButton(self.gbxModify) + self.btnReplace.setMaximumSize(QtCore.QSize(100, 16777215)) + self.btnReplace.setObjectName("btnReplace") + self.gridLayout.addWidget(self.btnReplace, 2, 2, 1, 1) + self.btnDelete = QtWidgets.QPushButton(self.gbxModify) + self.btnDelete.setMaximumSize(QtCore.QSize(100, 16777215)) + self.btnDelete.setObjectName("btnDelete") + self.gridLayout.addWidget(self.btnDelete, 2, 3, 1, 1) + self.btnDeleteAll = QtWidgets.QPushButton(self.gbxModify) + self.btnDeleteAll.setMaximumSize(QtCore.QSize(100, 16777215)) + self.btnDeleteAll.setObjectName("btnDeleteAll") + self.gridLayout.addWidget(self.btnDeleteAll, 2, 4, 1, 1) + self.verticalLayout.addWidget(self.gbxModify) + self.fraButtons = QtWidgets.QFrame(self.centralWidget) + self.fraButtons.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.fraButtons.setFrameShadow(QtWidgets.QFrame.Raised) + self.fraButtons.setObjectName("fraButtons") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.fraButtons) + self.horizontalLayout.setContentsMargins(11, 11, 11, 11) + self.horizontalLayout.setSpacing(6) + self.horizontalLayout.setObjectName("horizontalLayout") + spacerItem = QtWidgets.QSpacerItem(164, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem) + self.cmdOK = QtWidgets.QPushButton(self.fraButtons) + self.cmdOK.setObjectName("cmdOK") + self.horizontalLayout.addWidget(self.cmdOK) + self.cmdCancel = QtWidgets.QPushButton(self.fraButtons) + self.cmdCancel.setObjectName("cmdCancel") + self.horizontalLayout.addWidget(self.cmdCancel) + self.verticalLayout.addWidget(self.fraButtons) + frmEvents.setCentralWidget(self.centralWidget) + + self.retranslateUi(frmEvents) + QtCore.QMetaObject.connectSlotsByName(frmEvents) + + def retranslateUi(self, frmEvents): + _translate = QtCore.QCoreApplication.translate + frmEvents.setWindowTitle(_translate("frmEvents", "SWMM Events Editor")) + self.lblTop.setText(_translate("frmEvents", "Use this form to restrict hydraulic analysis to particular time periods.")) + self.lblTop2.setText(_translate("frmEvents", "Hydraulics will remain constant outside of these periods.")) + item = self.tableWidget.horizontalHeaderItem(0) + item.setText(_translate("frmEvents", "Use")) + item = self.tableWidget.horizontalHeaderItem(1) + item.setText(_translate("frmEvents", "Start Date")) + item = self.tableWidget.horizontalHeaderItem(2) + item.setText(_translate("frmEvents", "Start Time")) + item = self.tableWidget.horizontalHeaderItem(3) + item.setText(_translate("frmEvents", "End Date")) + item = self.tableWidget.horizontalHeaderItem(4) + item.setText(_translate("frmEvents", "End Time")) + self.gbxModify.setTitle(_translate("frmEvents", "Modify the Selected Event")) + self.lblStart_2.setText(_translate("frmEvents", "Start Time")) + self.dedEnd.setDisplayFormat(_translate("frmEvents", "MM/dd/yyyy")) + self.tmeEnd.setDisplayFormat(_translate("frmEvents", "hh:mm")) + self.lblStart_3.setText(_translate("frmEvents", "End Date")) + self.dedStart.setDisplayFormat(_translate("frmEvents", "MM/dd/yyyy")) + self.lblStart.setText(_translate("frmEvents", "Start Date")) + self.lblStart_4.setText(_translate("frmEvents", "End Time")) + self.tmeStart.setDisplayFormat(_translate("frmEvents", "hh:mm")) + self.btnAdd.setText(_translate("frmEvents", "Add Event")) + self.btnReplace.setText(_translate("frmEvents", "Replace Event")) + self.btnDelete.setText(_translate("frmEvents", "Delete Event")) + self.btnDeleteAll.setText(_translate("frmEvents", "Delete All")) + self.cmdOK.setText(_translate("frmEvents", "OK")) + self.cmdCancel.setText(_translate("frmEvents", "Cancel")) + diff --git a/src/ui/SWMM/frmEventsDesigner.ui b/src/ui/SWMM/frmEventsDesigner.ui new file mode 100644 index 00000000..15284176 --- /dev/null +++ b/src/ui/SWMM/frmEventsDesigner.ui @@ -0,0 +1,344 @@ + + + frmEvents + + + + 0 + 0 + 466 + 352 + + + + + 10 + + + + SWMM Events Editor + + + + + + + Use this form to restrict hydraulic analysis to particular time periods. + + + + + + + Hydraulics will remain constant outside of these periods. + + + + + + + 5 + + + 70 + + + 10 + + + 10 + + + + Use + + + + + Start Date + + + + + Start Time + + + + + End Date + + + + + End Time + + + + + + + + Modify the Selected Event + + + + + + + 70 + 0 + + + + + 150 + 16777215 + + + + Start Time + + + + + + + + 100 + 16777215 + + + + MM/dd/yyyy + + + + 2002 + 1 + 1 + + + + + + + + + 100 + 16777215 + + + + false + + + hh:mm + + + + + + + + 70 + 0 + + + + + 150 + 16777215 + + + + End Date + + + + + + + + 100 + 16777215 + + + + MM/dd/yyyy + + + + 2002 + 1 + 1 + + + + + + + + + 70 + 0 + + + + + 150 + 16777215 + + + + Start Date + + + + + + + + 70 + 0 + + + + + 150 + 16777215 + + + + End Time + + + + + + + + 50 + 0 + + + + + 100 + 16777215 + + + + + 0 + 0 + + + + false + + + hh:mm + + + + + + + + 100 + 16777215 + + + + Add Event + + + + + + + + 100 + 16777215 + + + + Replace Event + + + + + + + + 100 + 16777215 + + + + Delete Event + + + + + + + + 100 + 16777215 + + + + Delete All + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Qt::Horizontal + + + + 164 + 20 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + + + + diff --git a/src/ui/SWMM/frmMainSWMM.py b/src/ui/SWMM/frmMainSWMM.py index 7b6dc244..a189a27d 100644 --- a/src/ui/SWMM/frmMainSWMM.py +++ b/src/ui/SWMM/frmMainSWMM.py @@ -14,6 +14,7 @@ from ui.help import HelpHandler from ui.frmMain import frmMain, ModelLayers from ui.SWMM.frmDates import frmDates +from ui.SWMM.frmEvents import frmEvents from ui.SWMM.frmDynamicWave import frmDynamicWave from ui.SWMM.frmMapBackdropOptions import frmMapBackdropOptions from ui.SWMM.frmGeneralOptions import frmGeneralOptions @@ -109,6 +110,7 @@ class frmMainSWMM(frmMain): # *_items are a lists of items in a section tree_options_General = ["General", frmGeneralOptions] tree_options_Dates = ["Dates", frmDates] + tree_options_Events = ["Events", frmEvents] tree_options_TimeSteps = ["Time Steps", frmTimeSteps] tree_options_DynamicWave = ["Dynamic Wave", frmDynamicWave] tree_options_InterfaceFiles = ["Interface Files", frmInterfaceFiles] @@ -121,7 +123,8 @@ class frmMainSWMM(frmMain): tree_options_DynamicWave, tree_options_InterfaceFiles, tree_options_Reporting, - tree_options_MapBackdrop] + tree_options_MapBackdrop, + tree_options_Events] tree_climatology_Temperature = ["Temperature", frmClimatology, ["Temperature"]] tree_climatology_Evaporation = ["Evaporation", frmClimatology, ["Evaporation"]] @@ -1284,6 +1287,8 @@ def get_object_list(self, category): ids = [] if category == 'Curves': return None + if category == 'Events': + return None if category == self.tree_curves_ControlCurves[0]: for curve in self.project.curves.value: if curve.curve_type == CurveType.CONTROL: From a7a204b7dc25eb77dce6330e7b61d761878c43b9 Mon Sep 17 00:00:00 2001 From: "tong.zhai" Date: Thu, 15 Aug 2019 12:08:42 -0400 Subject: [PATCH 27/27] update about info to MTP5r3 --- src/ui/EPANET/frmAboutDesigner.py | 2 +- src/ui/EPANET/frmAboutDesigner.ui | 2 +- src/ui/SWMM/frmAboutDesigner.py | 2 +- src/ui/SWMM/frmAboutDesigner.ui | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ui/EPANET/frmAboutDesigner.py b/src/ui/EPANET/frmAboutDesigner.py index 4a2ec214..d3cd9991 100644 --- a/src/ui/EPANET/frmAboutDesigner.py +++ b/src/ui/EPANET/frmAboutDesigner.py @@ -66,7 +66,7 @@ def retranslateUi(self, frmAbout): "\n" -"

Version MTP5r0

\n" +"

Version MTP5r3

\n" "

Using Python 3.7.0

\n" "

PyQGIS 3.6.0-Noosa

\n" "

PyQt 5.11.3

\n" diff --git a/src/ui/EPANET/frmAboutDesigner.ui b/src/ui/EPANET/frmAboutDesigner.ui index 1588199a..bcba2ab4 100644 --- a/src/ui/EPANET/frmAboutDesigner.ui +++ b/src/ui/EPANET/frmAboutDesigner.ui @@ -43,7 +43,7 @@ <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">Version MTP5r0</span></p> +<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">Version MTP5r3</span></p> <p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">Using Python 3.7.0</span></p> <p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">PyQGIS 3.6.0-Noosa</span></p> <p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">PyQt 5.11.3</span></p> diff --git a/src/ui/SWMM/frmAboutDesigner.py b/src/ui/SWMM/frmAboutDesigner.py index a8cc3713..fb5487e7 100644 --- a/src/ui/SWMM/frmAboutDesigner.py +++ b/src/ui/SWMM/frmAboutDesigner.py @@ -88,7 +88,7 @@ def setupUi(self, frmAbout): def retranslateUi(self, frmAbout): _translate = QtCore.QCoreApplication.translate frmAbout.setWindowTitle(_translate("frmAbout", "About SWMM")) - self.lblSwmm.setText(_translate("frmAbout", "

Storm Water Management Model

Version MTP5r0 (Python 3.7, PyQGIS 3.6.0, PyQt 5.11.3)

")) + self.lblSwmm.setText(_translate("frmAbout", "

Storm Water Management Model

Version MTP5r3 (Python 3.7, PyQGIS 3.6.0, PyQt 5.11.3)

")) self.lblAbout.setText(_translate("frmAbout", "\n" "