diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fc4a8f..8d97b5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +## 0.2.0 ***(May 4, 2021)*** + +### Bug Fixes + +* [Respect the "collapsed" attribute in the business logic](https://github.com/Riverscapes/QRAVEPlugin/issues/8) +* [Metadata.txt version not updating on plugin build.](https://github.com/Riverscapes/QRAVEPlugin/issues/7) +* [Acknowledgements Not Updating](https://github.com/Riverscapes/QRAVEPlugin/issues/6) +* [Toolbar Icons Disabled upon first install](https://github.com/Riverscapes/QRAVEPlugin/issues/5) +* [Symbology qml not loading correctly](https://github.com/Riverscapes/QRAVEPlugin/issues/4) +* [Multiple projects open at once](https://github.com/Riverscapes/QRAVEPlugin/issues/3) +* [Support transparency attribute](https://github.com/Riverscapes/QRAVEPlugin/issues/2) + + ## 0.0.1 First version. Everything is new. \ No newline at end of file diff --git a/CHECKLIST.md b/CHECKLIST.md new file mode 100644 index 0000000..bba2292 --- /dev/null +++ b/CHECKLIST.md @@ -0,0 +1,13 @@ +# Deployment Checklist + +There are a number of steps that have to be performed in the correct order for this plugin to deploy correctly. + +NEVER WORK DIRECTLY ON THE MASTER BRANCH + +1. Commit and push everything to git +2. increment the version number in `__version__.py` +3. Do a compile of all the UI and resources and commit that `pb_tool compile` +4. Run the `deploy.py` script once and test the local version of the plugin +5. Do a code review and a pull request to get this onto the master branch +6. Tag the commit in git with the version number +7. Run `deploy.py` again. This will produce the zip file to upload \ No newline at end of file diff --git a/__version__.py b/__version__.py index 93fc4ed..cb74299 100644 --- a/__version__.py +++ b/__version__.py @@ -1 +1 @@ -__version__ = "0.1.1" +__version__ = "0.2.0" diff --git a/config.json b/config.json index 48f20c3..56177c6 100644 --- a/config.json +++ b/config.json @@ -5,12 +5,12 @@ "basemapsInclude": true, "lastDigestSync": null, "lastResourceSync": null, + "lastBrowsePath": null, "basemapRegion": "United States" }, "constants": { "logCategory": "QRAVE", "settingsCategory": "QRAVE", - "project_filepath": "qrave_project_path", "businessLogicDir": "blXML", "symbologyDir": "symbology", "digestSyncFreqHours": 24, diff --git a/metadata.txt b/metadata.txt index ea19119..709519b 100644 --- a/metadata.txt +++ b/metadata.txt @@ -6,7 +6,7 @@ name=Riverscapes Plugin (QRAVE) DEV_COPY qgisMinimumVersion=3.0 description=Explore symbolized Riverscapes projects -version=0.1 +version=0.0.0dev author=North Arrow Research email=info@northarrowresearch.com @@ -20,7 +20,7 @@ repository=https://github.com/Riverscapes/QRAVEPlugin hasProcessingProvider=no # Uncomment the following line and add your changelog: -# changelog= +changelog=https://github.com/Riverscapes/QRAVEPlugin/blob/master/CHANGELOG.md # Tags are comma separated with spaces allowed tags=python,riverscapes,rave diff --git a/scripts/deploy.py b/scripts/deploy.py index de55ddd..1860235 100644 --- a/scripts/deploy.py +++ b/scripts/deploy.py @@ -5,6 +5,7 @@ import re import zipfile + PLUGIN_NAME = "qrave_toolbar" UI_DIR = "src/ui" @@ -52,14 +53,16 @@ def copy_plugin(): return deployfolder -def move_meta(deployfolder): +def move_meta(deployfolder, version): # Metadata must be handled separately src = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'metadata.txt')) dst = os.path.abspath(os.path.join(deployfolder, 'metadata.txt')) with open(src, 'r', encoding="utf8") as f, open(dst, 'w+', encoding="utf8") as wf: text = f.read() - wf.write(text.replace(' DEV_COPY', '')) + text = text.replace(' DEV_COPY', '') + text = text.replace('version=0.0.0dev', 'version={}'.format(version)) + wf.write(text) def zip_plugin(deployfolder: str): @@ -96,7 +99,7 @@ def yesno(msg): deployfolder = copy_plugin() - move_meta(deployfolder) + move_meta(deployfolder, version) zip_plugin(deployfolder) - # deploy_plugin() + deploy_plugin() diff --git a/src/about_dialog.py b/src/about_dialog.py index c9b0705..0e5e547 100644 --- a/src/about_dialog.py +++ b/src/about_dialog.py @@ -23,6 +23,7 @@ def __init__(self, parent=None): """Constructor.""" QDialog.__init__(self, parent) self.setupUi(self) + pixmap = QPixmap(':/plugins/qrave_toolbar/RaveAddIn.png').scaled(128, 128) self.logo.setPixmap(pixmap) self.website.setText('{0}'.format(CONSTANTS['webUrl'])) diff --git a/src/classes/basemaps.py b/src/classes/basemaps.py index 350f978..8920656 100644 --- a/src/classes/basemaps.py +++ b/src/classes/basemaps.py @@ -6,11 +6,11 @@ import lxml.etree from .borg import Borg -from qgis.PyQt.QtGui import QStandardItemModel, QStandardItem, QIcon +from qgis.PyQt.QtGui import QStandardItem, QIcon from qgis.PyQt.QtCore import Qt from qgis.core import QgsTask, QgsApplication, Qgis -from .qrave_map_layer import QRaveMapLayer, QRaveTreeTypes +from .qrave_map_layer import QRaveMapLayer, QRaveTreeTypes, ProjectTreeData from .settings import CONSTANTS, Settings from .util import md5, requestFetch @@ -66,7 +66,9 @@ def parse_layer(self, root_el, parent: QStandardItem): try: title = root_el.find('Title').text - name = root_el.find('Name').text + name_fnd = root_el.find('Name') + name = name_fnd.text if name_fnd is not None else title + srs = root_el.find('SRS').text.split(' ')[0] lyr_format = root_el.find('Style/LegendURL/Format').text @@ -82,7 +84,12 @@ def parse_layer(self, root_el, parent: QStandardItem): "lyr_format": lyr_format } lyr_item.setData( - QRaveMapLayer(title, QRaveMapLayer.LayerTypes.WMS, urlWithParams, extra_meta), Qt.UserRole) + ProjectTreeData( + QRaveTreeTypes.LEAF, + None, + QRaveMapLayer(title, QRaveMapLayer.LayerTypes.WMS, urlWithParams, extra_meta) + ), + Qt.UserRole) lyr_item.setToolTip(wrap_by_word(abstract, 20)) except AttributeError as e: @@ -93,7 +100,7 @@ def parse_layer(self, root_el, parent: QStandardItem): Qgis.Warning ) lyr_item = QStandardItem(QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'), root_el.find('Title').text) - lyr_item.setData({'type': QRaveTreeTypes.BASEMAP_SUB_FOLDER}, Qt.UserRole), + lyr_item.setData(ProjectTreeData(QRaveTreeTypes.BASEMAP_SUB_FOLDER), Qt.UserRole), parent.appendRow(lyr_item) @@ -120,10 +127,6 @@ def __init__(self): if 'regions' not in self.__dict__: self.regions = {} - def load_capabilities(self): - # https://hydro.nationalmap.gov/arcgis/services/wbd/MapServer/WmsServer?service=wms&request=GetCapabilities&version=1.0.0 - print('load_capabilities') - def load(self): """ Parse the XML and return any basemaps you find @@ -138,12 +141,12 @@ def load(self): try: for region in lxml.etree.parse(BASEMAPS_XML_PATH).getroot().findall('Region'): q_region = QStandardItem(QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'), 'Basemaps') - q_region.setData({'type': QRaveTreeTypes.BASEMAP_ROOT}, Qt.UserRole), + q_region.setData(ProjectTreeData(QRaveTreeTypes.BASEMAP_ROOT), Qt.UserRole), self.regions[region.attrib['name']] = q_region for group_layer in region.findall('GroupLayer'): q_group_layer = QStandardItem(QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'), group_layer.attrib['name']) - q_group_layer.setData({'type': QRaveTreeTypes.BASEMAP_SUPER_FOLDER}, Qt.UserRole), + q_group_layer.setData(ProjectTreeData(QRaveTreeTypes.BASEMAP_SUPER_FOLDER), Qt.UserRole), q_region.appendRow(q_group_layer) for layer in group_layer.findall('Layer'): @@ -153,12 +156,13 @@ def load(self): meta = {meta.attrib['name']: meta.text for meta in layer.findall('Metadata/Meta')} # We set the data to be Basemaps to help us load this stuff later - q_layer.setData(QRaveBaseMap(q_layer, layer_url, meta), Qt.UserRole) + q_layer.setData(ProjectTreeData(QRaveTreeTypes.LEAF, None, QRaveBaseMap(q_layer, layer_url, meta)), Qt.UserRole) q_group_layer.appendRow(q_layer) except Exception as e: - self.settings.msg_bar("Error loading basemaps", "Exception: {}".format(e), - Qgis.Critical) + settings = Settings() + settings.msg_bar("Error loading basemaps", "Exception: {}".format(e), + Qgis.Critical) def wrap_by_word(s, n): diff --git a/src/classes/context_menu.py b/src/classes/context_menu.py index 589a5bd..23b5010 100644 --- a/src/classes/context_menu.py +++ b/src/classes/context_menu.py @@ -1,6 +1,6 @@ from qgis.PyQt.QtWidgets import QDockWidget, QWidget, QTreeView, QVBoxLayout, QMenu, QAction -from qgis.PyQt.QtCore import pyqtSlot -from qgis.PyQt.QtGui import QIcon +from qgis.PyQt.QtCore import pyqtSlot, QModelIndex +from qgis.PyQt.QtGui import QIcon, QStandardItem class ContextMenu(QMenu): @@ -25,6 +25,10 @@ class ContextMenu(QMenu): 'Browse Project Folder', ':/plugins/qrave_toolbar/BrowseFolder.png' ), + 'OPEN_FILE': ( + 'Open File', + ':/plugins/qrave_toolbar/RaveAddIn_16px.png' + ), 'BROWSE_FOLDER': ( 'Browse Folder', ':/plugins/qrave_toolbar/BrowseFolder.png' @@ -60,6 +64,7 @@ class ContextMenu(QMenu): } # def __init__(self): + # self.menu = ContextMenu() # super().__init__(self) def addAction(self, lookup: str, slot: pyqtSlot = None, enabled=True): diff --git a/src/classes/net_sync.py b/src/classes/net_sync.py index 00d525e..3da086f 100644 --- a/src/classes/net_sync.py +++ b/src/classes/net_sync.py @@ -3,6 +3,7 @@ import os import json import pdb +from glob import glob from time import time, sleep from qgis.core import QgsTask, QgsMessageLog, Qgis @@ -25,10 +26,10 @@ def __init__(self, description): self.progress = 0 self.downloaded = 0 - self.resource_dir = os.path.join(os.path.dirname(__file__), '..', '..', 'resources') - self.business_logic_xml_dir = os.path.join(self.resource_dir, CONSTANTS['businessLogicDir']) - self.symbology_dir = os.path.join(self.resource_dir, CONSTANTS['symbologyDir']) - self.digest_path = os.path.join(self.resource_dir, 'index.json') + self.resource_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'resources')) + self.business_logic_xml_dir = os.path.abspath(os.path.join(self.resource_dir, CONSTANTS['businessLogicDir'])) + self.symbology_dir = os.path.abspath(os.path.join(self.resource_dir, CONSTANTS['symbologyDir'])) + self.digest_path = os.path.abspath(os.path.join(self.resource_dir, 'index.json')) self.initialized = False # self.initialize sets this self.need_sync = True # self.initialize sets this @@ -123,12 +124,21 @@ def _syncFiles(self): self.progress = 0 self.downloaded = 0 + all_local_files = [os.path.abspath(x) for x in glob(os.path.join(self.resource_dir, '**', '*.?ml'), recursive=True)] + + # Symbologies have directory structure for remote_path, remote_md5 in symbologies.items(): - local_path = os.path.join(self.symbology_dir, os.path.basename(remote_path)) + local_path = os.path.abspath(os.path.join(self.symbology_dir, *remote_path.replace('Symbology/qgis/', '').split('/'))) + + # There might be subdirs to make here + os.makedirs(os.path.dirname(local_path), exist_ok=True) + if not os.path.isfile(local_path) or remote_md5 != md5(local_path): requestDownload(CONSTANTS['resourcesUrl'] + remote_path, local_path, remote_md5) QgsMessageLog.logMessage("Symobology downloaded: {}".format(local_path), MESSAGE_CATEGORY, level=Qgis.Info) + self.downloaded += 1 + all_local_files = [x for x in all_local_files if x != local_path] self.progress += 1 self.setProgress(self.progress) @@ -137,7 +147,9 @@ def _syncFiles(self): if not os.path.isfile(local_path) or remote_md5 != md5(local_path): requestDownload(CONSTANTS['resourcesUrl'] + remote_path, local_path, remote_md5) QgsMessageLog.logMessage("BusinessLogic downloaded: {}".format(local_path), MESSAGE_CATEGORY, level=Qgis.Info) + self.downloaded += 1 + all_local_files = [x for x in all_local_files if x != local_path] self.progress += 1 self.setProgress(self.progress) @@ -147,12 +159,22 @@ def _syncFiles(self): if not os.path.isfile(local_path) or remote_md5 != md5(local_path): requestDownload(CONSTANTS['resourcesUrl'] + remote_path, local_path, remote_md5) QgsMessageLog.logMessage("Basemaps downloaded: {}".format(local_path), 'QRAVE', level=Qgis.Info) + self.downloaded += 1 + all_local_files = [x for x in all_local_files if x != local_path] self.progress += 1 self.setProgress(self.progress) + # Now we clean up any files that aren't supposed to be there + for dfile in all_local_files: + try: + # Do a quick (probably redundant check) to make sure this file is in our current folder + rel_check = os.path.relpath(dfile, os.path.join(os.path.dirname(__file__), '..', '..', 'resources')) + if len(os.path.split(rel_check)) < 3: + os.remove(dfile) + QgsMessageLog.logMessage("Extraneous file removed: {}".format(dfile), 'QRAVE', level=Qgis.Warning) + else: + QgsMessageLog.logMessage("Can't remove file because it's in the wrong place: {}".format(dfile), 'QRAVE', level=Qgis.Critical) + except Exception as e: + QgsMessageLog.logMessage("Error deleting file: {}".format(dfile), 'QRAVE', level=Qgis.Critical) self.setProgress(100) - # if downloaded == 0: - # self.set_label('No symbology or xml updates needed. 0 files downloaded') - # else: - # self.set_label('Downloaded and updated {}/{} symbology or xml files'.format(downloaded, total)) diff --git a/src/classes/project.py b/src/classes/project.py index 4a069b4..d0f0509 100644 --- a/src/classes/project.py +++ b/src/classes/project.py @@ -2,14 +2,13 @@ import os from typing import Dict import lxml.etree -from .borg import Borg import traceback from qgis.core import Qgis from qgis.PyQt.QtGui import QStandardItem, QIcon, QBrush from qgis.PyQt.QtCore import Qt -from .qrave_map_layer import QRaveMapLayer, QRaveTreeTypes +from .qrave_map_layer import QRaveMapLayer, QRaveTreeTypes, ProjectTreeData from .settings import CONSTANTS, Settings MESSAGE_CATEGORY = CONSTANTS['logCategory'] @@ -17,27 +16,26 @@ BL_XML_DIR = os.path.join(os.path.dirname(__file__), '..', '..', 'resources', CONSTANTS['businessLogicDir']) -class Project(Borg): +class Project: def __init__(self, project_xml_path: str): - Borg.__init__(self) self.exists = False self.meta = None self.warehouse_meta = None self.default_view = None self.views = {} self.settings = Settings() - if project_xml_path is not None: - self.project_xml_path = os.path.abspath(project_xml_path) - self.project = None - self.project_type = None - self.business_logic_path = None - self.business_logic = None - self.qproject = None - self.project_dir = None - self.exists = os.path.isfile(self.project_xml_path) - if self.exists: - self.project_dir = os.path.dirname(self.project_xml_path) + + self.project_xml_path = os.path.abspath(project_xml_path) + self.project = None + self.project_type = None + self.business_logic_path = None + self.business_logic = None + self.qproject = None + self.project_dir = None + self.exists = os.path.isfile(self.project_xml_path) + if self.exists: + self.project_dir = os.path.dirname(self.project_xml_path) def load(self): if self.exists is True: @@ -94,12 +92,6 @@ def _build_tree(self, force=False): Parse the XML and return any basemaps you find """ - if self.business_logic is None or force is True: - self._load_businesslogic() - - if self.project is None or force is True: - self.load_project() - # Maybe the basemaps file isn't synced yet if self.project_xml_path is None or not os.path.isfile(self.project_xml_path): self.qproject = None @@ -122,7 +114,7 @@ def _build_views(self): self.views = {} curr_item = QStandardItem(QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'), "Project Views") - curr_item.setData({'type': QRaveTreeTypes.PROJECT_VIEW_FOLDER}, Qt.UserRole) + curr_item.setData(ProjectTreeData(QRaveTreeTypes.PROJECT_VIEW_FOLDER, project=self), Qt.UserRole) for view in self.business_logic.findall('Views/View'): name = view.attrib['name'] @@ -134,10 +126,10 @@ def _build_views(self): view_item = QStandardItem(QIcon(':/plugins/qrave_toolbar/project_view.png'), name) view_layer_ids = [layer.attrib['id'] for layer in view.findall('Layers/Layer')] self.views[view_id] = view_layer_ids - view_item.setData({ - 'type': QRaveTreeTypes.PROJECT_VIEW, - 'ids': view_layer_ids - }, Qt.UserRole) + view_item.setData( + ProjectTreeData(QRaveTreeTypes.PROJECT_VIEW, project=self, data=view_layer_ids), + Qt.UserRole + ) curr_item.appendRow(view_item) self.qproject.appendRow(curr_item) @@ -178,9 +170,9 @@ def _recurse_tree(self, bl_el=None, proj_el=None, parent: QStandardItem = None): if children_container: curr_item.setIcon(QIcon(':/plugins/qrave_toolbar/BrowseFolder.png')) if is_root is True: - curr_item.setData({'type': QRaveTreeTypes.PROJECT_ROOT}, Qt.UserRole), + curr_item.setData(ProjectTreeData(QRaveTreeTypes.PROJECT_ROOT, project=self, data=dict(children_container.attrib)), Qt.UserRole), else: - curr_item.setData({'type': QRaveTreeTypes.PROJECT_FOLDER}, Qt.UserRole), + curr_item.setData(ProjectTreeData(QRaveTreeTypes.PROJECT_FOLDER, project=self, data=dict(children_container.attrib)), Qt.UserRole), for child_node in children_container.xpath('*'): # Handle any explicit children @@ -190,7 +182,7 @@ def _recurse_tree(self, bl_el=None, proj_el=None, parent: QStandardItem = None): # Repeaters are a separate case elif child_node.tag == 'Repeater': qrepeater = QStandardItem(QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'), child_node.attrib['label']) - qrepeater.setData({'type': QRaveTreeTypes.PROJECT_REPEATER_FOLDER}, Qt.UserRole), + qrepeater.setData(ProjectTreeData(QRaveTreeTypes.PROJECT_REPEATER_FOLDER, project=self, data=children_container.attrib), Qt.UserRole), curr_item.appendRow(qrepeater) repeat_xpath = child_node.attrib['xpath'] repeat_node = child_node.find('Node') @@ -209,6 +201,8 @@ def _recurse_tree(self, bl_el=None, proj_el=None, parent: QStandardItem = None): curr_item.setIcon(QIcon(':/plugins/qrave_toolbar/layers/MultiDot.png')) elif bl_type == 'raster': curr_item.setIcon(QIcon(':/plugins/qrave_toolbar/layers/Raster.png')) + else: + curr_item.setIcon(QIcon(':/plugins/qrave_toolbar/RaveAddIn_16px.png')) # Couldn't find this node. Ignore it. meta = {meta.attrib['name']: meta.text for meta in new_proj_el.findall('MetaData/Meta')} @@ -224,7 +218,7 @@ def _recurse_tree(self, bl_el=None, proj_el=None, parent: QStandardItem = None): layer_type = bl_attr['type'] if 'type' in bl_attr else 'unknown' map_layer = QRaveMapLayer(curr_label, layer_type, layer_uri, bl_attr, meta, layer_name) - curr_item.setData(map_layer, Qt.UserRole) + curr_item.setData(ProjectTreeData(QRaveTreeTypes.LEAF, project=self, data=map_layer), Qt.UserRole) if not map_layer.exists: curr_item.setData(QBrush(Qt.red), Qt.ForegroundRole) @@ -233,6 +227,8 @@ def _recurse_tree(self, bl_el=None, proj_el=None, parent: QStandardItem = None): curr_item.setFont(curr_item_font) curr_item.setToolTip('File not found: {}'.format(map_layer.layer_uri)) + elif map_layer.layer_uri: + curr_item.setToolTip(map_layer.layer_uri) if parent: parent.appendRow(curr_item) diff --git a/src/classes/qrave_map_layer.py b/src/classes/qrave_map_layer.py index a3f5062..9d5a2bf 100644 --- a/src/classes/qrave_map_layer.py +++ b/src/classes/qrave_map_layer.py @@ -4,7 +4,6 @@ from qgis.core import Qgis, QgsProject, QgsRasterLayer, QgsVectorLayer from qgis.PyQt.QtCore import Qt, QModelIndex, QUrl from qgis.PyQt.QtGui import QStandardItem - from .settings import CONSTANTS, Settings SYMBOLOGY_DIR = os.path.join(os.path.dirname(__file__), '..', '..', 'resources', 'symbology') @@ -18,6 +17,7 @@ class QRaveTreeTypes(): PROJECT_REPEATER_FOLDER = 'PROJECT_REPEATER_FOLDER' PROJECT_VIEW_FOLDER = 'PROJECT_VIEW_FOLDER' PROJECT_VIEW = 'PROJECT_VIEW' + LEAF = 'LEAF' # any kind of end node: maplayers and other open-able files # Basemaps have a surprising number of itmes BASEMAP_ROOT = 'BASEMAP_ROOT' BASEMAP_SUPER_FOLDER = 'BASEMAP_SUPER_FOLDER' @@ -25,6 +25,17 @@ class QRaveTreeTypes(): # Note: Add-able layers are all covered by QRaveMapLayer and QRaveBaseMap +class ProjectTreeData: + """This is just a helper class to make sure we have everyhting we need + for context menus when we right click + """ + + def __init__(self, node_type, project=None, data=None): + self.type = node_type + self.project = project + self.data = data + + class QRaveMapLayer(): class LayerTypes(): @@ -32,6 +43,7 @@ class LayerTypes(): LINE = 'line' POINT = 'point' RASTER = 'raster' + FILE = 'file' WMS = 'WMS' def __init__(self, @@ -44,12 +56,18 @@ def __init__(self, ): self.label = label self.layer_uri = layer_uri + + if isinstance(layer_uri, str) and len(layer_uri) > 0 and layer_type != QRaveMapLayer.LayerTypes.WMS: + self.layer_uri = os.path.abspath(layer_uri) + self.bl_attr = bl_attr self.meta = meta + self.transparency = 0 self.layer_name = layer_name if layer_type not in QRaveMapLayer.LayerTypes.__dict__.values(): - raise Exception('Layer type "{}" is not valid'.format(layer_type)) + settings = Settings() + settings.log('Layer type "{}" is not valid'.format(layer_type), Qgis.Critical) self.layer_type = layer_type self.exists = self.layer_type == QRaveMapLayer.LayerTypes.WMS or os.path.isfile(layer_uri) @@ -75,7 +93,7 @@ def _addgrouptomap(sGroupName, sGroupOrder, parentGroup): return thisGroup @staticmethod - def add_layer_to_map(item: QStandardItem, project): + def add_layer_to_map(item: QStandardItem): """ Add a layer to the map :param layer: @@ -83,7 +101,10 @@ def add_layer_to_map(item: QStandardItem, project): """ # No multiselect so there is only ever one item - map_layer = item.data(Qt.UserRole) + pt_data: ProjectTreeData = item.data(Qt.UserRole) + project = pt_data.project + map_layer: QRaveMapLayer = pt_data.data + settings = Settings() # Loop over all the parent group layers for this raster @@ -108,6 +129,13 @@ def add_layer_to_map(item: QStandardItem, project): # Loop over all the parent group layers for this raster # ensuring they are in the tree in correct, nested order + transparency = 0 + try: + if 'transparency' in map_layer.bl_attr: + transparency = int(map_layer.bl_attr['transparency']) + except Exception as e: + settings.log('Error deriving transparency from layer: {}'.format(e)) + # Only add the layer if it's not already in the registry if not QgsProject.instance().mapLayersByName(map_layer.label): layer_uri = map_layer.layer_uri @@ -123,10 +151,13 @@ def add_layer_to_map(item: QStandardItem, project): elif map_layer.layer_type == QRaveMapLayer.LayerTypes.RASTER: # Raster rOutput = QgsRasterLayer(layer_uri, map_layer.label) + if transparency > 0: + rOutput.setOpacity((100 - transparency) / 100) ########################################## # Symbology ########################################## + symbology = map_layer.bl_attr['symbology'] if map_layer.bl_attr is not None and 'symbology' in map_layer.bl_attr else None # If the business logic has symbology defined if symbology is not None: diff --git a/src/classes/settings.py b/src/classes/settings.py index 45ff841..5039896 100644 --- a/src/classes/settings.py +++ b/src/classes/settings.py @@ -1,6 +1,7 @@ import os import json import logging +import html from qgis.core import QgsMessageLog, Qgis, QgsProject, QgsSettings @@ -99,4 +100,4 @@ def setValue(self, key, value): """ # Set it in the file self.s.setValue(key, json.dumps({"v": value})) - self.log("SETTINGS SET: {}={} of type '{}'".format(key, value, str(type(value))), level=Qgis.Info) + self.log("SETTINGS SET: {}={} of type '{}'".format(key, value, html.escape(str(type(value)))), level=Qgis.Info) diff --git a/src/dock_widget.py b/src/dock_widget.py index 896a7c4..3175d29 100644 --- a/src/dock_widget.py +++ b/src/dock_widget.py @@ -24,24 +24,24 @@ from __future__ import annotations from typing import List, Dict import os +import json - -from qgis.PyQt import uic -from qgis.core import Qgis, QgsRasterLayer, QgsVectorLayer, QgsProject -from qgis.PyQt.QtGui import QStandardItemModel, QStandardItem, QIcon, QDesktopServices -from qgis.PyQt.QtWidgets import QDockWidget, QWidget, QTreeView, QVBoxLayout, QMenu, QAction from qgis.PyQt.QtCore import pyqtSignal, pyqtSlot, Qt, QModelIndex, QUrl - -from .classes.settings import Settings, CONSTANTS -from .classes.basemaps import BaseMaps, QRaveBaseMap -from .classes.project import Project -from .classes.context_menu import ContextMenu -from .classes.qrave_map_layer import QRaveMapLayer, QRaveTreeTypes +from qgis.PyQt.QtWidgets import QDockWidget, QWidget, QTreeView, QVBoxLayout, QMenu, QAction +from qgis.PyQt.QtGui import QStandardItemModel, QStandardItem, QIcon, QDesktopServices +from qgis.core import Qgis, QgsRasterLayer, QgsVectorLayer, QgsProject +from qgis.PyQt import uic +from .ui.dock_widget import Ui_QRAVEDockWidgetBase from .meta_widget import MetaType +from .classes.qrave_map_layer import QRaveMapLayer, QRaveTreeTypes +from .classes.context_menu import ContextMenu +from .classes.project import Project, ProjectTreeData +from .classes.basemaps import BaseMaps, QRaveBaseMap +from .classes.settings import Settings, CONSTANTS + # FORM_CLASS, _ = uic.loadUiType(os.path.join( # os.path.dirname(__file__), 'ui', 'dock_widget.ui')) -from .ui.dock_widget import Ui_QRAVEDockWidgetBase ADD_TO_MAP_TYPES = ['polygon', 'raster', 'point', 'line'] @@ -56,18 +56,11 @@ class QRAVEDockWidget(QDockWidget, Ui_QRAVEDockWidgetBase): def __init__(self, parent=None): """Constructor.""" super(QRAVEDockWidget, self).__init__(parent) - # Set up the user interface from Designer. - # After setupUI you can access any designer object by doing - # self., and you can use autoconnect slots - see - # http://doc.qt.io/qt-5/designer-using-a-ui-file.html - # widgets-and-dialogs-with-auto-connect - # self.treeView self.setupUi(self) self.menu = ContextMenu() self.qproject = QgsProject.instance() - self.qproject.cleared.connect(self.close_project) - self.qproject.readProject.connect(self.load) + self.qproject.cleared.connect(self.close_all) self.treeView.setContextMenuPolicy(Qt.CustomContextMenu) self.treeView.customContextMenuRequested.connect(self.open_menu) @@ -77,131 +70,202 @@ def __init__(self, parent=None): self.treeView.expanded.connect(self.expand_tree_item) self.settings = Settings() - self.project = None + self.model = QStandardItemModel() + self.loaded_projects: List(Project) = [] + # Initialize our classes self.basemaps = BaseMaps() self.treeView.setModel(self.model) - self.dataChange.connect(self.load) - self.load() + self.dataChange.connect(self.reload_tree) + self.reload_tree() def expand_tree_item(self, idx: QModelIndex): item = self.model.itemFromIndex(idx) - data = item.data(Qt.UserRole) - if isinstance(data, QRaveBaseMap): - data.load_layers() + item_data = item.data(Qt.UserRole) + if item_data and item_data.data and isinstance(item_data.data, QRaveBaseMap): + item_data.data.load_layers() + + def _get_project(self, xml_path): + try: + return next(iter(self.loaded_projects)) + except Exception: + return None @pyqtSlot() - def load(self): - # re-initialize our model + def reload_tree(self): + # re-initialize our model and reload the projects from file + # Try not to do this too often if you can self.model.clear() + self.loaded_projects = [] + qrave_projects = self.get_project_settings() - qrave_project_path, type_conversion_ok = self.qproject.readEntry(CONSTANTS['settingsCategory'], - CONSTANTS['project_filepath']) + for project_path in qrave_projects: + project = Project(project_path) + project.load() - old_project = self.project.project_xml_path if self.project else None + if project is not None and project.exists is True and project.qproject is not None: + self.model.appendRow(project.qproject) + self.expand_children_recursive(self.model.indexFromItem(project.qproject)) + self.loaded_projects.append(project) - if type_conversion_ok is True and os.path.isfile(qrave_project_path): - self.project = Project(qrave_project_path) - self.project.load() # Load the tree objects self.basemaps.load() - if self.project is not None and self.project.exists is True and self.project.qproject is not None: - self.model.appendRow(self.project.qproject) - - # If this is a fresh load and the setting is set we load the default view - if self.project and old_project != self.project.project_xml_path: - load_default_setting = self.settings.getValue('loadDefaultView') - if load_default_setting is True \ - and self.project.default_view is not None \ - and self.project.default_view in self.project.views: - self.add_children_to_map(self.project.qproject, self.project.views[self.project.default_view]) - # Now load the basemaps region = self.settings.getValue('basemapRegion') if self.settings.getValue('basemapsInclude') is True \ and region is not None and len(region) > 0 \ and region in self.basemaps.regions.keys(): self.model.appendRow(self.basemaps.regions[region]) + self.expand_children_recursive(self.model.indexFromItem(self.basemaps.regions[region])) + + def get_project_settings(self): + try: + qrave_projects_raw, type_conversion_ok = self.qproject.readEntry( + CONSTANTS['settingsCategory'], + 'qrave_projects' + ) + qrave_projects = json.loads(qrave_projects_raw) + + if not type_conversion_ok or qrave_projects is None or not isinstance(qrave_projects, list): + qrave_projects = [] - # Finally expand all levels - self.expandChildren() + except Exception as e: + self.settings.log('Error loading project settings: {}'.format(e), Qgis.Warning) + qrave_projects = [] + + filtered = [pf for pf in qrave_projects if os.path.isfile(pf)] + filtered.reverse() + # We Treat this like a stack where the last project in goes on the top. + # Element 0 should be the top item + return filtered + + def set_project_settings(self, projects: List[str]): + self.qproject.writeEntry(CONSTANTS['settingsCategory'], 'qrave_projects', json.dumps(projects)) + + @pyqtSlot() + def add_project(self, xml_path: str): + qrave_projects = self.get_project_settings() + + # If this project is not already in + if xml_path not in qrave_projects: + qrave_projects.append(xml_path) + self.set_project_settings(qrave_projects) + self.reload_tree() + + new_project = self._get_project(xml_path) + + # If this is a fresh load and the setting is set we load the default view + load_default_setting = self.settings.getValue('loadDefaultView') + + if load_default_setting is True \ + and new_project.default_view is not None \ + and new_project.default_view in new_project.views: + self.add_children_to_map(new_project.qproject, new_project.views[new_project.default_view]) def closeEvent(self, event): """ When the user clicks the "X" in the dockwidget titlebar """ + self.hide() + self.qproject.removeEntry(CONSTANTS['settingsCategory'], 'enabled') self.closingPlugin.emit() event.accept() - def expandChildren(self, idx: QModelIndex = None): + def expand_children_recursive(self, idx: QModelIndex = None, force=False): + """Expand all the children of a QTreeView node. Do it recursively + TODO: Recursion might not be the best for large trees here. + + Args: + idx (QModelIndex, optional): [description]. Defaults to None. + force: ignore the "collapsed" business logic attribute + """ if idx is None: idx = self.treeView.rootIndex() for idy in range(self.model.rowCount(idx)): child = self.model.index(idy, 0, idx) - self.expandChildren(child) + self.expand_children_recursive(child, force) item = self.model.itemFromIndex(idx) - data = item.data(Qt.UserRole) if item is not None else None - if not self.treeView.isExpanded(idx) and not isinstance(data, QRaveBaseMap): + item_data = item.data(Qt.UserRole) if item is not None else None + + # NOTE: This is pretty verbose on purpose + + # This thing needs to have data or it defaults to being expanded + if item_data is None or item_data.data is None: + collapsed = False + + # Collapsed is an attribute set in the business logic + # Never expand the QRaveBaseMap object becsause there's a network call involved + elif isinstance(item_data.data, QRaveBaseMap) \ + or (isinstance(item_data.data, dict) and 'collapsed' in item_data.data and item_data.data['collapsed'] == 'true'): + collapsed = True + + else: + collapsed = False + + if not self.treeView.isExpanded(idx) and not collapsed: self.treeView.setExpanded(idx, True) def default_tree_action(self, idx: QModelIndex): if not idx.isValid(): return + item = self.model.itemFromIndex(idx) - data = item.data(Qt.UserRole) + item_data: ProjectTreeData = item.data(Qt.UserRole) # This is the default action for all add-able layers including basemaps - if isinstance(data, QRaveMapLayer): - QRaveMapLayer.add_layer_to_map(item, self.project) + if isinstance(item_data.data, QRaveMapLayer): + if item_data.data.layer_type == QRaveMapLayer.LayerTypes.FILE: + self.file_system_open(item_data.data.layer_uri) + else: + QRaveMapLayer.add_layer_to_map(item) - elif isinstance(data, QRaveBaseMap): + elif isinstance(item_data.data, QRaveBaseMap): # Expand is the default option because we might need to load the layers - return - - elif data is not None and 'type' in data: - - if data['type'] in [QRaveTreeTypes.PROJECT_ROOT]: - self.change_meta(item, data, True) - - # For folder-y types we want Expand and contract is already implemented as a default - elif data['type'] in [ - QRaveTreeTypes.PROJECT_FOLDER, - QRaveTreeTypes.PROJECT_REPEATER_FOLDER, - QRaveTreeTypes.PROJECT_VIEW_FOLDER, - QRaveTreeTypes.BASEMAP_ROOT, - QRaveTreeTypes.BASEMAP_SUPER_FOLDER, - QRaveTreeTypes.BASEMAP_SUB_FOLDER - ]: - # print("Default Folder Action") - pass - - elif data['type'] == QRaveTreeTypes.PROJECT_VIEW: - print("Default View Action") - self.add_view_to_map(item, data) - - def item_change(self, postion): + pass + + elif item_data.type in [QRaveTreeTypes.PROJECT_ROOT]: + self.change_meta(item, item_data, True) + + # For folder-y types we want Expand and contract is already implemented as a default + elif item_data.type in [ + QRaveTreeTypes.PROJECT_FOLDER, + QRaveTreeTypes.PROJECT_REPEATER_FOLDER, + QRaveTreeTypes.PROJECT_VIEW_FOLDER, + QRaveTreeTypes.BASEMAP_ROOT, + QRaveTreeTypes.BASEMAP_SUPER_FOLDER, + QRaveTreeTypes.BASEMAP_SUB_FOLDER + ]: + # print("Default Folder Action") + pass + + elif item_data.type == QRaveTreeTypes.PROJECT_VIEW: + print("Default View Action") + self.add_view_to_map(item_data) + + def item_change(self, pos): """Triggered when the user selects a new item in the tree - Args: - postion ([type]): [description] + Args:pos + pos ([type]): [description] """ indexes = self.treeView.selectedIndexes() - if len(indexes) < 1 or self.project is None or self.project.exists is False: - return # No multiselect so there is only ever one item item = self.model.itemFromIndex(indexes[0]) - data = item.data(Qt.UserRole) + data_item: ProjectTreeData = item.data(Qt.UserRole) + + if len(indexes) < 1 or data_item.project is None or not data_item.project.exists: + return # Update the metadata if we need to - self.change_meta(item, data) + self.change_meta(item, data_item) - def change_meta(self, item: QStandardItem, data, show=False): + def change_meta(self, item: QStandardItem, item_data: ProjectTreeData, show=False): """Update the MetaData dock widget with new information Args: @@ -209,6 +273,7 @@ def change_meta(self, item: QStandardItem, data, show=False): data ([type]): [description] show (bool, optional): [description]. Defaults to False. """ + data = item_data.data if isinstance(data, QRaveMapLayer): meta = data.meta if data.meta is not None else {} self.metaChange.emit(item.text(), MetaType.LAYER, meta, show) @@ -216,125 +281,26 @@ def change_meta(self, item: QStandardItem, data, show=False): elif isinstance(data, QRaveBaseMap): self.metaChange.emit(item.text(), MetaType.NONE, {}, show) - elif data is not None and 'type' in data: - if data['type'] == QRaveTreeTypes.PROJECT_ROOT: - self.metaChange.emit(item.text(), MetaType.PROJECT, { - 'project': self.project.meta, - 'warehouse': self.project.warehouse_meta - }, show) - elif data['type'] in [ - QRaveTreeTypes.PROJECT_FOLDER, - QRaveTreeTypes.PROJECT_REPEATER_FOLDER, - QRaveTreeTypes.PROJECT_VIEW_FOLDER, - QRaveTreeTypes.BASEMAP_ROOT, - QRaveTreeTypes.BASEMAP_SUPER_FOLDER, - QRaveTreeTypes.BASEMAP_SUB_FOLDER - ]: - self.metaChange.emit(item.text(), MetaType.FOLDER, data, show) - else: + elif item_data.type == QRaveTreeTypes.PROJECT_ROOT: + self.metaChange.emit(item.text(), MetaType.PROJECT, { + 'project': item_data.project.meta, + 'warehouse': item_data.project.warehouse_meta + }, show) + elif item_data.type in [ + QRaveTreeTypes.PROJECT_FOLDER, + QRaveTreeTypes.PROJECT_REPEATER_FOLDER, + QRaveTreeTypes.PROJECT_VIEW_FOLDER, + QRaveTreeTypes.BASEMAP_ROOT, + QRaveTreeTypes.BASEMAP_SUPER_FOLDER, + QRaveTreeTypes.BASEMAP_SUB_FOLDER + ]: + self.metaChange.emit(item.text(), MetaType.FOLDER, data, show) + elif isinstance(data, dict): + # this is just the generic case for any kind of metadata self.metaChange.emit(item.text(), MetaType.NONE, data, show) - - def open_menu(self, position): - - indexes = self.treeView.selectedIndexes() - if len(indexes) < 1: - return - - # No multiselect so there is only ever one item - idx = indexes[0] - - if not idx.isValid(): - return - - item = self.model.itemFromIndex(indexes[0]) - data = item.data(Qt.UserRole) - - # This is the layer context menu - if isinstance(data, QRaveMapLayer): - if data.layer_type == QRaveMapLayer.LayerTypes.WMS: - self.basemap_context_menu(idx, item, data) - else: - self.layer_context_menu(idx, item, data) - - # A QARaveBaseMap is just a container for layers - elif isinstance(data, QRaveBaseMap): - self.folder_dumb_context_menu(idx, item, data) - - elif data is not None and 'type' in data: - - if data['type'] == QRaveTreeTypes.PROJECT_ROOT: - self.project_context_menu(idx, item, data) - - elif data['type'] in [ - QRaveTreeTypes.PROJECT_VIEW_FOLDER, - QRaveTreeTypes.BASEMAP_ROOT, - QRaveTreeTypes.BASEMAP_SUPER_FOLDER - ]: - self.folder_dumb_context_menu(idx, item, data) - - elif data['type'] in [ - QRaveTreeTypes.PROJECT_FOLDER, - QRaveTreeTypes.PROJECT_REPEATER_FOLDER, - QRaveTreeTypes.BASEMAP_SUB_FOLDER - ]: - self.folder_context_menu(idx, item, data) - - elif data['type'] == QRaveTreeTypes.PROJECT_VIEW: - self.view_context_menu(idx, item, data) - - self.menu.exec_(self.treeView.viewport().mapToGlobal(position)) - - # Layer context view - def layer_context_menu(self, idx: QModelIndex, item: QStandardItem, data: QRaveMapLayer): - self.menu.clear() - self.menu.addAction('ADD_TO_MAP', lambda: QRaveMapLayer.add_layer_to_map(item, self.project), enabled=data.exists) - self.menu.addAction('VIEW_LAYER_META', lambda: self.change_meta(item, data, True)) - - if bool(self.get_warehouse_url(data.meta)): - self.menu.addAction('VIEW_WEB_SOURCE', lambda: self.layer_warehouse_view(data)) - - self.menu.addAction('BROWSE_FOLDER', lambda: self.file_system_locate(data.layer_uri)) - - # Basemap context items - def basemap_context_menu(self, idx: QModelIndex, item: QStandardItem, data: Dict[str, str]): - self.menu.clear() - self.menu.addAction('ADD_TO_MAP', lambda: QRaveMapLayer.add_layer_to_map(item, self.project)) - - # Folder-level context menu - def folder_context_menu(self, idx: QModelIndex, item: QStandardItem, data): - self.menu.clear() - self.menu.addAction('ADD_ALL_TO_MAP', lambda: self.add_children_to_map(item)) - self.menu.addSeparator() - self.menu.addAction('COLLAPSE_ALL', lambda: self.toggleSubtree(item, False)) - self.menu.addAction('EXPAND_ALL', lambda: self.toggleSubtree(item, True)) - - # Some folders don't have the 'ADD_ALL_TO_MAP' functionality enabled - def folder_dumb_context_menu(self, idx: QModelIndex, item: QStandardItem, data): - self.menu.clear() - self.menu.addAction('COLLAPSE_ALL', lambda: self.toggleSubtree(item, False)) - self.menu.addAction('EXPAND_ALL', lambda: self.toggleSubtree(item, True)) - - # View context items - def view_context_menu(self, idx: QModelIndex, item: QStandardItem, data): - self.menu.clear() - self.menu.addAction('ADD_ALL_TO_MAP', lambda: self.add_view_to_map(item, data)) - - # Project-level context menu - def project_context_menu(self, idx: QModelIndex, item: QStandardItem, data): - self.menu.clear() - self.menu.addAction('COLLAPSE_ALL', lambda: self.toggleSubtree(None, False)) - self.menu.addAction('EXPAND_ALL', lambda: self.toggleSubtree(None, True)) - - self.menu.addSeparator() - self.menu.addAction('BROWSE_PROJECT_FOLDER', lambda: self.file_system_locate(self.project.project_xml_path)) - self.menu.addAction('VIEW_PROJECT_META', lambda: self.change_meta(item, data, True)) - self.menu.addAction('WAREHOUSE_VIEW', self.project_warehouse_view, enabled=bool(self.get_warehouse_url(self.project.warehouse_meta))) - self.menu.addAction('ADD_ALL_TO_MAP', lambda: self.add_children_to_map(item)) - self.menu.addSeparator() - self.menu.addAction('REFRESH_PROJECT_HIERARCHY', self.load) - self.menu.addAction('CUSTOMIZE_PROJECT_HIERARCHY', enabled=False) - self.menu.addSeparator() - self.menu.addAction('CLOSE_PROJECT', self.close_project, enabled=bool(self.project)) + else: + # Do not update the metadata if we have nothing to show + self.metaChange.emit(item.text(), MetaType.NONE, {}, show) def get_warehouse_url(self, wh_meta: Dict[str, str]): @@ -348,10 +314,10 @@ def get_warehouse_url(self, wh_meta: Dict[str, str]): return None - def project_warehouse_view(self): + def project_warehouse_view(self, project: Project): """Open this project in the warehouse if the warehouse meta entries exist """ - url = self.get_warehouse_url(self.project.warehouse_meta) + url = self.get_warehouse_url(project.warehouse_meta) if url is not None: QDesktopServices.openUrl(QUrl(url)) @@ -362,6 +328,33 @@ def layer_warehouse_view(self, data: QRaveMapLayer): if url is not None: QDesktopServices.openUrl(QUrl(url)) + def close_all(self): + for p in range(len(self.loaded_projects)): + self.close_project(self.loaded_projects[0]) + + def close_project(self, project: Project): + """ Close the project + """ + try: + qrave_projects_raw, type_conversion_ok = self.qproject.readEntry( + CONSTANTS['settingsCategory'], + 'qrave_projects' + ) + qrave_projects = json.loads(qrave_projects_raw) + if not type_conversion_ok or qrave_projects is None: + qrave_projects = [] + except Exception as e: + self.settings.log('Error closing project: {}'.format(e), Qgis.Warning) + qrave_projects = [] + + # Filter out the project we want to close and reload the tree + qrave_projects = [x.project_xml_path for x in self.loaded_projects if x != project] + + # Write the settings back to the project + self.qproject.writeEntry(CONSTANTS['settingsCategory'], 'qrave_projects', json.dumps(qrave_projects)) + self.loaded_projects = qrave_projects + self.reload_tree() + def file_system_open(self, fpath: str): """Open a file on the operating system using the default action @@ -371,14 +364,6 @@ def file_system_open(self, fpath: str): qurl = QUrl.fromLocalFile(fpath) QDesktopServices.openUrl(QUrl(qurl)) - def close_project(self): - """ Close the project - """ - - self.qproject.removeEntry(CONSTANTS['settingsCategory'], CONSTANTS['project_filepath']) - self.project = None - self.load() - def file_system_locate(self, fpath: str): """This the OS-agnostic "show in Finder" or "show in explorer" equivalent It should open the folder of the item in question @@ -411,25 +396,27 @@ def _recurse(curritem): else: _recurse(item) - def add_view_to_map(self, item: QStandardItem, data: dict): + def add_view_to_map(self, item_data: ProjectTreeData): """Add a view and all its layers to the map Args: item (QStandardItem): [description] """ - self.add_children_to_map(self.project.qproject, data['ids']) - print('Add view to map') + self.add_children_to_map(item_data.project.qproject, item_data.data) def add_children_to_map(self, item: QStandardItem, bl_ids: List[str] = None): - """Recursively add all children to the map + """Iteratively add all children to the map Args: item (QStandardItem): [description] + bl_ids (List[str], optional): List of ids to filter by so we don't load everything. this is used for loading views """ + for child in self._get_children(item): # Is this something we can add to the map? - data = child.data(Qt.UserRole) - if isinstance(data, QRaveMapLayer): + project_tree_data = child.data(Qt.UserRole) + if project_tree_data is not None and isinstance(project_tree_data.data, QRaveMapLayer): + data = project_tree_data.data loadme = False # If this layer matches the businesslogic id filter if bl_ids is not None and len(bl_ids) > 0: @@ -439,16 +426,15 @@ def add_children_to_map(self, item: QStandardItem, bl_ids: List[str] = None): loadme = True if loadme is True: - data.add_layer_to_map(child, self.project) + data.add_layer_to_map(child) - def _get_children(self, root_item: QStandardItem = None): + def _get_children(self, root_item: QStandardItem): """Recursion is going to kill us here so do an iterative solution instead https://stackoverflow.com/questions/41949370/collect-all-items-in-qtreeview-recursively Yields: [type]: [description] """ - root_item = root_item if root_item is not None else self.project.qproject stack = [root_item] while stack: parent = stack.pop(0) @@ -458,3 +444,119 @@ def _get_children(self, root_item: QStandardItem = None): yield child if child.hasChildren(): stack.append(child) + + def _get_parents(self, start_item: QStandardItem): + stack = [] + placeholder = start_item.parent() + while placeholder is not None and placeholder != self.model.invisibleRootItem(): + stack.append(placeholder) + placeholder = start_item.parent() + + return stack.reverse() + + def open_menu(self, position): + + indexes = self.treeView.selectedIndexes() + if len(indexes) < 1: + return + + # No multiselect so there is only ever one item + idx = indexes[0] + + if not idx.isValid(): + return + + item = self.model.itemFromIndex(indexes[0]) + project_tree_data = item.data(Qt.UserRole) # ProjectTreeData object + data = project_tree_data.data # Could be a QRaveBaseMap, a QRaveMapLayer or just some random data + + # This is the layer context menu + if isinstance(data, QRaveMapLayer): + if data.layer_type == QRaveMapLayer.LayerTypes.WMS: + self.basemap_context_menu(idx, item, project_tree_data) + elif data.layer_type == QRaveMapLayer.LayerTypes.FILE: + self.file_layer_context_menu(idx, item, project_tree_data) + else: + self.map_layer_context_menu(idx, item, project_tree_data) + + # A QARaveBaseMap is just a container for layers + elif isinstance(data, QRaveBaseMap): + self.folder_dumb_context_menu(idx, item, project_tree_data) + + elif project_tree_data.type == QRaveTreeTypes.PROJECT_ROOT: + self.project_context_menu(idx, item, project_tree_data) + + elif project_tree_data.type in [ + QRaveTreeTypes.PROJECT_VIEW_FOLDER, + QRaveTreeTypes.BASEMAP_ROOT, + QRaveTreeTypes.BASEMAP_SUPER_FOLDER + ]: + self.folder_dumb_context_menu(idx, item, project_tree_data) + + elif project_tree_data.type in [ + QRaveTreeTypes.PROJECT_FOLDER, + QRaveTreeTypes.PROJECT_REPEATER_FOLDER, + QRaveTreeTypes.BASEMAP_SUB_FOLDER + ]: + self.folder_context_menu(idx, item, project_tree_data) + + elif project_tree_data.type == QRaveTreeTypes.PROJECT_VIEW: + self.view_context_menu(idx, item, project_tree_data) + + self.menu.exec_(self.treeView.viewport().mapToGlobal(position)) + + def map_layer_context_menu(self, idx: QModelIndex, item: QStandardItem, item_data: ProjectTreeData): + self.menu.clear() + self.menu.addAction('ADD_TO_MAP', lambda: QRaveMapLayer.add_layer_to_map(item), enabled=item_data.data.exists) + self.menu.addAction('VIEW_LAYER_META', lambda: self.change_meta(item, item_data, True)) + + if bool(self.get_warehouse_url(item_data.data.meta)): + self.menu.addAction('VIEW_WEB_SOURCE', lambda: self.layer_warehouse_view(item_data)) + + self.menu.addAction('BROWSE_FOLDER', lambda: self.file_system_locate(item_data.data.layer_uri)) + + def file_layer_context_menu(self, idx: QModelIndex, item: QStandardItem, item_data: ProjectTreeData): + self.menu.clear() + self.menu.addAction('OPEN_FILE', lambda: self.file_system_open(item_data.data.layer_uri)) + self.menu.addAction('BROWSE_FOLDER', lambda: self.file_system_locate(item_data.data.layer_uri)) + + # Basemap context items + def basemap_context_menu(self, idx: QModelIndex, item: QStandardItem, data: ProjectTreeData): + self.menu.clear() + self.menu.addAction('ADD_TO_MAP', lambda: QRaveMapLayer.add_layer_to_map(item)) + + # Folder-level context menu + def folder_context_menu(self, idx: QModelIndex, item: QStandardItem, data: ProjectTreeData): + self.menu.clear() + self.menu.addAction('ADD_ALL_TO_MAP', lambda: self.add_children_to_map(item)) + self.menu.addSeparator() + self.menu.addAction('COLLAPSE_ALL', lambda: self.toggleSubtree(item, False)) + self.menu.addAction('EXPAND_ALL', lambda: self.toggleSubtree(item, True)) + + # Some folders don't have the 'ADD_ALL_TO_MAP' functionality enabled + def folder_dumb_context_menu(self, idx: QModelIndex, item: QStandardItem, data: ProjectTreeData): + self.menu.clear() + self.menu.addAction('COLLAPSE_ALL', lambda: self.toggleSubtree(item, False)) + self.menu.addAction('EXPAND_ALL', lambda: self.toggleSubtree(item, True)) + + # View context items + def view_context_menu(self, idx: QModelIndex, item: QStandardItem, item_data: ProjectTreeData): + self.menu.clear() + self.menu.addAction('ADD_ALL_TO_MAP', lambda: self.add_view_to_map(item_data)) + + # Project-level context menu + def project_context_menu(self, idx: QModelIndex, item: QStandardItem, data: ProjectTreeData): + self.menu.clear() + self.menu.addAction('COLLAPSE_ALL', lambda: self.toggleSubtree(None, False)) + self.menu.addAction('EXPAND_ALL', lambda: self.toggleSubtree(None, True)) + + self.menu.addSeparator() + self.menu.addAction('BROWSE_PROJECT_FOLDER', lambda: self.file_system_locate(data.project.project_xml_path)) + self.menu.addAction('VIEW_PROJECT_META', lambda: self.change_meta(item, data, True)) + self.menu.addAction('WAREHOUSE_VIEW', lambda: self.project_warehouse_view(data.project), enabled=bool(self.get_warehouse_url(data.project.warehouse_meta))) + self.menu.addAction('ADD_ALL_TO_MAP', lambda: self.add_children_to_map(item)) + self.menu.addSeparator() + self.menu.addAction('REFRESH_PROJECT_HIERARCHY', self.reload_tree) + self.menu.addAction('CUSTOMIZE_PROJECT_HIERARCHY', enabled=False) + self.menu.addSeparator() + self.menu.addAction('CLOSE_PROJECT', lambda: self.close_project(data.project), enabled=bool(data.project)) diff --git a/src/meta_widget.py b/src/meta_widget.py index 7d58b95..36f0a21 100644 --- a/src/meta_widget.py +++ b/src/meta_widget.py @@ -120,7 +120,14 @@ def load(self, label: str, meta_type: str, meta: dict, show: bool = False): elif meta_type == MetaType.NONE: self.treeView.setHeaderHidden(True) self.treeView.setEnabled(False) + self.model.setColumnCount(1) self.setWindowTitle('Riverscapes MetaData: {}'.format(label)) + no_item = QStandardItem('This item cannot have metadata') + no_item.setTextAlignment(Qt.AlignCenter) + no_f = no_item.font() + no_f.setItalic(True) + no_item.setFont(no_f) + root_item.appendRow(no_item) return # self.tree.header().setDefaultSectionSize(180) diff --git a/src/options_dialog.py b/src/options_dialog.py index 97881a0..f31dcbe 100644 --- a/src/options_dialog.py +++ b/src/options_dialog.py @@ -2,8 +2,8 @@ import json from qgis.PyQt import uic from qgis.PyQt.QtWidgets import QDialog, QDialogButtonBox -from qgis.PyQt.QtCore import pyqtSignal -from qgis.PyQt.QtGui import QIcon +from qgis.PyQt.QtCore import pyqtSignal, QUrl +from qgis.PyQt.QtGui import QIcon, QDesktopServices from qgis.core import Qgis from .classes.settings import Settings @@ -47,11 +47,15 @@ def setValues(self): def commit_settings(self, btn): role = self.buttonBox.buttonRole(btn) + if role == QDialogButtonBox.ApplyRole: self.settings.setValue('basemapsInclude', self.basemapsInclude.isChecked()) self.settings.setValue('loadDefaultView', self.loadDefaultView.isChecked()) self.settings.setValue('basemapRegion', self.basemapRegion.currentText()) + elif role == QDialogButtonBox.ResetRole: self.settings.resetAllSettings() self.setValues() + + # Emit a datachange so we can trigger other parts of this plugin self.dataChange.emit() diff --git a/src/qrave_toolbar.py b/src/qrave_toolbar.py index 1fd5fd2..bc3a18c 100644 --- a/src/qrave_toolbar.py +++ b/src/qrave_toolbar.py @@ -15,6 +15,8 @@ import os.path from time import time from functools import partial +import requests + from qgis.utils import showPluginHelp from qgis.core import QgsTask, QgsApplication, QgsProject @@ -25,7 +27,6 @@ from .classes.settings import Settings, CONSTANTS from .classes.net_sync import NetSync from .classes.basemaps import BaseMaps -from .classes.project import Project # Initialize Qt resources from file resources.py @@ -39,6 +40,9 @@ from . import resources +RESOURCES_DIR = os.path.join(os.path.dirname(__file__), '..', 'resources') + + class QRAVE: """QGIS Plugin Implementation.""" @@ -54,11 +58,15 @@ def __init__(self, iface): self.iface = iface self.tm = QgsApplication.taskManager() self.qproject = QgsProject.instance() + self.pluginIsActive = False self.dockwidget = None self.metawidget = None + # Populated on load from a URL + self.acknowledgements = None + # initialize plugin directory self.plugin_dir = os.path.dirname(__file__) # initialize locale @@ -98,6 +106,7 @@ def tr(self, message): def initGui(self): """Create the menu entries and toolbar icons inside the QGIS GUI.""" + self.qproject.readProject.connect(self.onProjectLoad) self.openAction = QAction(QIcon(':/plugins/qrave_toolbar/RaveAddIn_16px.png'), self.tr(u'Riverscapes Plugin (QRAVE)'), self.iface.mainWindow()) self.openAction.triggered.connect(self.toggle_widget) @@ -118,20 +127,29 @@ def initGui(self): m = self.helpButton.menu() + # TODO: get the local help working + # self.helpAction = QAction( + # QIcon(':/plugins/qrave_toolbar/Help.png'), + # self.tr('Help'), + # self.iface.mainWindow() + # ) + # self.helpAction.triggered.connect(partial(showPluginHelp, None, filename=':/plugins/qrave_toolbar/help/build/html/index')) + # self.websiteAction = QAction( + # QIcon(':/plugins/qrave_toolbar/RaveAddIn_16px.png'), + # self.tr('Website'), + # self.iface.mainWindow() + # ) + # self.websiteAction.triggered.connect(lambda: QDesktopServices.openUrl(QUrl("http://rave.riverscapes.xyz"))) + self.helpAction = QAction( QIcon(':/plugins/qrave_toolbar/Help.png'), self.tr('Help'), self.iface.mainWindow() ) - self.helpAction.triggered.connect(partial(showPluginHelp, None, filename=':/plugins/qrave_toolbar/help/build/html/index')) - self.websiteAction = QAction( - QIcon(':/plugins/qrave_toolbar/RaveAddIn_16px.png'), - self.tr('Website'), - self.iface.mainWindow() - ) - self.websiteAction.triggered.connect(lambda: QDesktopServices.openUrl(QUrl("http://rave.riverscapes.xyz"))) + self.helpAction.triggered.connect(lambda: QDesktopServices.openUrl(QUrl("http://rave.riverscapes.xyz"))) self.raveOptionsAction = QAction( + QIcon(':/plugins/qrave_toolbar/Options.png'), self.tr('Settings'), self.iface.mainWindow() ) @@ -144,6 +162,13 @@ def initGui(self): ) self.net_sync_action.triggered.connect(lambda: self.net_sync_load(force=True)) + self.find_resources_action = QAction( + QIcon(':/plugins/qrave_toolbar/BrowseFolder.png'), + self.tr('Find Resources folder'), + self.iface.mainWindow() + ) + self.find_resources_action.triggered.connect(self.locateResources) + self.about_action = QAction( QIcon(':/plugins/qrave_toolbar/RaveAddIn_16px.png'), self.tr('About QRAVE'), @@ -152,10 +177,11 @@ def initGui(self): self.about_action.triggered.connect(self.about_load) m.addAction(self.helpAction) - m.addAction(self.websiteAction) + # m.addAction(self.websiteAction) m.addAction(self.raveOptionsAction) m.addAction(self.net_sync_action) m.addSeparator() + m.addAction(self.find_resources_action) m.addAction(self.about_action) self.helpButton.setDefaultAction(self.helpAction) @@ -163,34 +189,43 @@ def initGui(self): self.toolbar.addAction(self.openProjectAction) self.toolbar.addWidget(self.helpButton) - initialized = self.settings.getValue('initialized') - if not initialized: - self.net_sync_load(force=True) - - self.reloadGui() + # This does a lazy netsync (i.e. it will run it if it feels like it) + self.net_sync_load() - def reloadGui(self): - plugin_init = self.settings.getValue('initialized') - self.openAction.setEnabled(plugin_init) - self.openProjectAction.setEnabled(plugin_init) + def onProjectLoad(self, doc): + # If the project has the plugin enabled then restore it. + qrave_enabled, type_conversion_ok = self.qproject.readEntry( + CONSTANTS['settingsCategory'], + 'enabled' + ) + if type_conversion_ok and qrave_enabled == '1': + self.toggle_widget(forceOn=True) + if self.dockwidget is not None: + self.dockwidget.reload_tree() def onClosePlugin(self): """Cleanup necessary items here when plugin dockwidget is closed""" - - # print "** CLOSING QRAVE DockWidget" + if self.metawidget is not None: + self.metawidget.hide() + if self.dockwidget is not None: + self.dockwidget.hide() # disconnects self.dockwidget.closingPlugin.disconnect(self.onClosePlugin) + self.qproject.readProject.disconnect(self.onProjectLoad) # remove this statement if dockwidget is to remain # for reuse if plugin is reopened - # Commented next statement since it causes QGIS crashe - # when closing the docked window: - # self.dockwidget = None + self.dockwidget = None self.pluginIsActive = False def unload(self): """Removes the plugin menu item and icon from QGIS GUI.""" + if self.metawidget is not None: + self.metawidget.hide() + if self.dockwidget is not None: + self.dockwidget.hide() + for action in self.actions: self.iface.removePluginMenu( self.tr(u'&Riverscapes Plugin (QRAVE)'), @@ -199,82 +234,11 @@ def unload(self): # remove the toolbar del self.toolbar - def projectBrowserDlg(self): - """ - Browse for a project directory - :return: - """ - last_project = self.settings.getValue('projectPath') - last_dir = os.path.dirname(last_project) if last_project is not None else None - - dialog_return = QFileDialog.getOpenFileName(self.dockwidget, "Open a Riverscapes project", last_dir, self.tr("Riverscapes Project files (project.rs.xml)")) - if dialog_return is not None and dialog_return[0] != "" and os.path.isfile(dialog_return[0]): - # We set the proect path in the project settings. This way it will be saved with the QgsProject file - self.qproject.writeEntry(CONSTANTS['settingsCategory'], CONSTANTS['project_filepath'], dialog_return[0]) - self.reload_dockwidget() - if self.dockwidget is None or self.dockwidget.isHidden() is True: - self.toggle_widget(forceOn=True) - - def options_load(self): - """ - Open the options/settings dialog - """ - dialog = OptionsDialog() - if self.dockwidget: - dialog.dataChange.connect(self.dockwidget.load) - dialog.exec_() - - def about_load(self): - """ - Open the About dialog - """ - dialog = AboutDialog() - dialog.exec_() - - def net_sync_load(self, force=False): - """ - Periodically check for new files - """ - - lastDigestSync = self.settings.getValue('lastDigestSync') - currTime = int(time()) # timestamp in seconds - plugin_init = self.settings.getValue('initialized') - - netsync = NetSync('Sync QRAVE resource files') - - # No sync necessary in some cases: - # 1. if the plugin is not already initialized OR - # 2. if netsync says it needs a sync (looking for index.json) - # 3. if the force flag is set - # 4. if the last was more than `digestSyncFreqHours` hours ago - if plugin_init \ - and not netsync.need_sync \ - and not force \ - and isinstance(lastDigestSync, int) \ - and ((currTime - lastDigestSync) / 3600) < CONSTANTS['digestSyncFreqHours']: - return - - self.tm.addTask(netsync) - - def reload_dockwidget(self): - """ - The dockwidget may or may not be initialized when we call reload so we - add a checking step in - - This doesn't do any real reloading. We're just triggering the dockwidget emit signal - and then it does all the heavy lifting - """ - if self.dockwidget: - self.dockwidget.dataChange.emit() - self.reloadGui() - def toggle_widget(self, forceOn=False): """Toggle the widget open and closed when clicking the toolbar""" if not self.pluginIsActive: self.pluginIsActive = True - # print "** STARTING QRAVE" - # dockwidget may not exist if: # first run of plugin # removed on close (see self.onClosePlugin method) @@ -293,7 +257,6 @@ def toggle_widget(self, forceOn=False): self.dockwidget.closingPlugin.connect(self.onClosePlugin) # show the dockwidget - # TODO: fix to allow choice of dock location self.iface.addDockWidget(Qt.LeftDockWidgetArea, self.dockwidget) self.iface.addDockWidget(Qt.LeftDockWidgetArea, self.metawidget) self.dockwidget.show() @@ -308,3 +271,87 @@ def toggle_widget(self, forceOn=False): # The metawidget always starts hidden if self.metawidget is not None: self.metawidget.hide() + + if self.dockwidget is not None and not self.dockwidget.isHidden(): + self.qproject.writeEntry(CONSTANTS['settingsCategory'], 'enabled', True) + else: + self.qproject.removeEntry(CONSTANTS['settingsCategory'], 'enabled') + + def net_sync_load(self, force=False): + """ + Periodically check for new files + """ + + lastDigestSync = self.settings.getValue('lastDigestSync') + currTime = int(time()) # timestamp in seconds + plugin_init = self.settings.getValue('initialized') + + self.netsync = NetSync('Sync QRAVE resource files') + + # No sync necessary in some cases: + # 1. if the plugin is not already initialized OR + # 2. if netsync says it needs a sync (looking for index.json) + # 3. if the force flag is set + # 4. if the last was more than `digestSyncFreqHours` hours ago + if plugin_init \ + and not self.netsync.need_sync \ + and not force \ + and isinstance(lastDigestSync, int) \ + and ((currTime - lastDigestSync) / 3600) < CONSTANTS['digestSyncFreqHours']: + self.netsync = None + return + + # Trigger the dockwidget to repaint after the netsync + if self.dockwidget is not None: + self.netsync.taskCompleted.connect(self.dockwidget.reload_tree) + + # FOR DEBUGGING ONLY. NEVER IN PRODUCTION + # self.netsync.run() + + # COMMENT THIS OUT AND USE THE LINE ABOVE FOR SYNCHRONOUS DEBUGGING + self.tm.addTask(self.netsync) + + def projectBrowserDlg(self): + """ + Browse for a project directory + :return: + """ + last_browse_path = self.settings.getValue('lastBrowsePath') + last_dir = os.path.dirname(last_browse_path) if last_browse_path is not None else None + + dialog_return = QFileDialog.getOpenFileName(self.dockwidget, "Open a Riverscapes project", last_dir, self.tr("Riverscapes Project files (project.rs.xml)")) + if dialog_return is not None and dialog_return[0] != "" and os.path.isfile(dialog_return[0]): + # We set the proect path in the project settings. This way it will be saved with the QgsProject file + if self.dockwidget is None or self.dockwidget.isHidden() is True: + self.toggle_widget(forceOn=True) + self.dockwidget.add_project(dialog_return[0]) + + def locateResources(self): + """This the OS-agnostic "show in Finder" or "show in explorer" equivalent + It should open the folder of the item in question + + Args: + fpath (str): [description] + """ + qurl = QUrl.fromLocalFile(RESOURCES_DIR) + QDesktopServices.openUrl(qurl) + + def options_load(self): + """ + Open the options/settings dialog + """ + dialog = OptionsDialog() + if self.dockwidget: + dialog.dataChange.connect(self.dockwidget.dataChange) + dialog.exec_() + + def about_load(self): + """ + Open the About dialog + """ + dialog = AboutDialog() + if self.acknowledgements is None: + self.acknowledgements = requests.get('http://rave.riverscapes.xyz/dotnetack.html').text + + self.acknowledgements.setText(self.acknowledgements) + dialog.exec_() diff --git a/src/resources.py b/src/resources.py index 513b6b1..e7e5310 100644 --- a/src/resources.py +++ b/src/resources.py @@ -9,236 +9,6 @@ from PyQt5 import QtCore qt_resource_data = b"\ -\x00\x00\x0d\x20\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ -\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xb1\x8e\x7c\xfb\x51\x93\ -\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x87\x0f\x00\x00\x8c\x0f\ -\x00\x00\xfd\x52\x00\x00\x81\x40\x00\x00\x7d\x79\x00\x00\xe9\x8b\ -\x00\x00\x3c\xe5\x00\x00\x19\xcc\x73\x3c\x85\x77\x00\x00\x0a\x39\ -\x69\x43\x43\x50\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x49\x43\ -\x43\x20\x70\x72\x6f\x66\x69\x6c\x65\x00\x00\x48\xc7\x9d\x96\x77\ -\x54\x54\xd7\x16\x87\xcf\xbd\x77\x7a\xa1\xcd\x30\xd2\x19\x7a\x93\ -\x2e\x30\x80\xf4\x2e\x20\x1d\x04\x51\x18\x66\x06\x18\xca\x00\xc3\ -\x0c\x4d\x6c\x88\xa8\x40\x44\x11\x11\x01\x45\x90\xa0\x80\x01\xa3\ -\xa1\x48\xac\x88\x62\x21\x28\xa8\x60\x0f\x48\x10\x50\x62\x30\x8a\ -\xa8\xa8\x64\x46\xd6\x4a\x7c\x79\x79\xef\xe5\xe5\xf7\xc7\xbd\xdf\ -\xda\x67\xef\x73\xf7\xd9\x7b\x9f\xb5\x2e\x00\x24\x4f\x1f\x2e\x2f\ -\x05\x96\x02\x20\x99\x27\xe0\x07\x7a\x38\xd3\x57\x85\x47\xd0\xb1\ -\xfd\x00\x06\x78\x80\x01\xa6\x00\x30\x59\xe9\xa9\xbe\x41\xee\xc1\ -\x40\x24\x2f\x37\x17\x7a\xba\xc8\x09\xfc\x8b\xde\x0c\x01\x48\xfc\ -\xbe\x65\xe8\xe9\x4f\xa7\x83\xff\x4f\xd2\xac\x54\xbe\x00\x00\xc8\ -\x5f\xc4\xe6\x6c\x4e\x3a\x4b\xc4\xf9\x22\x4e\xca\x14\xa4\x8a\xed\ -\x33\x22\xa6\xc6\x24\x8a\x19\x46\x89\x99\x2f\x4a\x50\xc4\x72\x62\ -\x8e\x5b\xe4\xa5\x9f\x7d\x16\xd9\x51\xcc\xec\x64\x1e\x5b\xc4\xe2\ -\x9c\x53\xd9\xc9\x6c\x31\xf7\x88\x78\x7b\x86\x90\x23\x62\xc4\x47\ -\xc4\x05\x19\x5c\x4e\xa6\x88\x6f\x8b\x58\x33\x49\x98\xcc\x15\xf1\ -\x5b\x71\x6c\x32\x87\x99\x0e\x00\x8a\x24\xb6\x0b\x38\xac\x78\x11\ -\x9b\x88\x98\xc4\x0f\x0e\x74\x11\xf1\x72\x00\x70\xa4\xb8\x2f\x38\ -\xe6\x0b\x16\x70\xb2\x04\xe2\x43\xb9\xa4\xa4\x66\xf3\xb9\x71\xf1\ -\x02\xba\x2e\x4b\x8f\x6e\x6a\x6d\xcd\xa0\x7b\x72\x32\x93\x38\x02\ -\x81\xa1\x3f\x93\x95\xc8\xe4\xb3\xe9\x2e\x29\xc9\xa9\x4c\x5e\x36\ -\x00\x8b\x67\xfe\x2c\x19\x71\x6d\xe9\xa2\x22\x5b\x9a\x5a\x5b\x5a\ -\x1a\x9a\x19\x99\x7e\x51\xa8\xff\xba\xf8\x37\x25\xee\xed\x22\xbd\ -\x0a\xf8\xdc\x33\x88\xd6\xf7\x87\xed\xaf\xfc\x52\xea\x00\x60\xcc\ -\x8a\x6a\xb3\xeb\x0f\x5b\xcc\x7e\x00\x3a\xb6\x02\x20\x77\xff\x0f\ -\x9b\xe6\x21\x00\x24\x45\x7d\x6b\xbf\xf1\xc5\x79\x68\xe2\x79\x89\ -\x17\x08\x52\x6d\x8c\x8d\x33\x33\x33\x8d\xb8\x1c\x96\x91\xb8\xa0\ -\xbf\xeb\x7f\x3a\xfc\x0d\x7d\xf1\x3d\x23\xf1\x76\xbf\x97\x87\xee\ -\xca\x89\x65\x0a\x93\x04\x74\x71\xdd\x58\x29\x49\x29\x42\x3e\x3d\ -\x3d\x95\xc9\xe2\xd0\x0d\xff\x3c\xc4\xff\x38\xf0\xaf\xf3\x58\x1a\ -\xc8\x89\xe5\xf0\x39\x3c\x51\x44\xa8\x68\xca\xb8\xbc\x38\x51\xbb\ -\x79\x6c\xae\x80\x9b\xc2\xa3\x73\x79\xff\xa9\x89\xff\x30\xec\x4f\ -\x5a\x9c\x6b\x91\x28\xf5\x9f\x00\x35\xca\x08\x48\xdd\xa0\x02\xe4\ -\xe7\x3e\x80\xa2\x10\x01\x12\x79\x50\xdc\xf5\xdf\xfb\xe6\x83\x0f\ -\x05\xe2\x9b\x17\xa6\x3a\xb1\x38\xf7\x9f\x05\xfd\xfb\xae\x70\x89\ -\xf8\x91\xce\x8d\xfb\x1c\xe7\x12\x18\x4c\x67\x09\xf9\x19\x8b\x6b\ -\xe2\x6b\x09\xd0\x80\x00\x24\x01\x15\xc8\x03\x15\xa0\x01\x74\x81\ -\x21\x30\x03\x56\xc0\x16\x38\x02\x37\xb0\x02\xf8\x81\x60\x10\x0e\ -\xd6\x02\x16\x88\x07\xc9\x80\x0f\x32\x41\x2e\xd8\x0c\x0a\x40\x11\ -\xd8\x05\xf6\x82\x4a\x50\x03\xea\x41\x23\x68\x01\x27\x40\x07\x38\ -\x0d\x2e\x80\xcb\xe0\x3a\xb8\x09\xee\x80\x07\x60\x04\x8c\x83\xe7\ -\x60\x06\xbc\x01\xf3\x10\x04\x61\x21\x32\x44\x81\xe4\x21\x55\x48\ -\x0b\x32\x80\xcc\x20\x06\x64\x0f\xb9\x41\x3e\x50\x20\x14\x0e\x45\ -\x43\x71\x10\x0f\x12\x42\xb9\xd0\x16\xa8\x08\x2a\x85\x2a\xa1\x5a\ -\xa8\x11\xfa\x16\x3a\x05\x5d\x80\xae\x42\x03\xd0\x3d\x68\x14\x9a\ -\x82\x7e\x85\xde\xc3\x08\x4c\x82\xa9\xb0\x32\xac\x0d\x1b\xc3\x0c\ -\xd8\x09\xf6\x86\x83\xe1\x35\x70\x1c\x9c\x06\xe7\xc0\xf9\xf0\x4e\ -\xb8\x02\xae\x83\x8f\xc1\xed\xf0\x05\xf8\x3a\x7c\x07\x1e\x81\x9f\ -\xc3\xb3\x08\x40\x88\x08\x0d\x51\x43\x0c\x11\x06\xe2\x82\xf8\x21\ -\x11\x48\x2c\xc2\x47\x36\x20\x85\x48\x39\x52\x87\xb4\x20\x5d\x48\ -\x2f\x72\x0b\x19\x41\xa6\x91\x77\x28\x0c\x8a\x82\xa2\xa3\x0c\x51\ -\xb6\x28\x4f\x54\x08\x8a\x85\x4a\x43\x6d\x40\x15\xa3\x2a\x51\x47\ -\x51\xed\xa8\x1e\xd4\x2d\xd4\x28\x6a\x06\xf5\x09\x4d\x46\x2b\xa1\ -\x0d\xd0\x36\x68\x2f\xf4\x2a\x74\x1c\x3a\x13\x5d\x80\x2e\x47\x37\ -\xa0\xdb\xd0\x97\xd0\x77\xd0\xe3\xe8\x37\x18\x0c\x86\x86\xd1\xc1\ -\x58\x61\x3c\x31\xe1\x98\x04\xcc\x3a\x4c\x31\xe6\x00\xa6\x15\x73\ -\x1e\x33\x80\x19\xc3\xcc\x62\xb1\x58\x79\xac\x01\xd6\x0e\xeb\x87\ -\x65\x62\x05\xd8\x02\xec\x7e\xec\x31\xec\x39\xec\x20\x76\x1c\xfb\ -\x16\x47\xc4\xa9\xe2\xcc\x70\xee\xb8\x08\x1c\x0f\x97\x87\x2b\xc7\ -\x35\xe1\xce\xe2\x06\x71\x13\xb8\x79\xbc\x14\x5e\x0b\x6f\x83\xf7\ -\xc3\xb3\xf1\xd9\xf8\x12\x7c\x3d\xbe\x0b\x7f\x03\x3f\x8e\x9f\x27\ -\x48\x13\x74\x08\x76\x84\x60\x42\x02\x61\x33\xa1\x82\xd0\x42\xb8\ -\x44\x78\x48\x78\x45\x24\x12\xd5\x89\xd6\xc4\x00\x22\x97\xb8\x89\ -\x58\x41\x3c\x4e\xbc\x42\x1c\x25\xbe\x23\xc9\x90\xf4\x49\x2e\xa4\ -\x48\x92\x90\xb4\x93\x74\x84\x74\x9e\x74\x8f\xf4\x8a\x4c\x26\x6b\ -\x93\x1d\xc9\x11\x64\x01\x79\x27\xb9\x91\x7c\x91\xfc\x98\xfc\x56\ -\x82\x22\x61\x24\xe1\x25\xc1\x96\xd8\x28\x51\x25\xd1\x2e\x31\x28\ -\xf1\x42\x12\x2f\xa9\x25\xe9\x24\xb9\x56\x32\x47\xb2\x5c\xf2\xa4\ -\xe4\x0d\xc9\x69\x29\xbc\x94\xb6\x94\x8b\x14\x53\x6a\x83\x54\x95\ -\xd4\x29\xa9\x61\xa9\x59\x69\x8a\xb4\xa9\xb4\x9f\x74\xb2\x74\xb1\ -\x74\x93\xf4\x55\xe9\x49\x19\xac\x8c\xb6\x8c\x9b\x0c\x5b\x26\x5f\ -\xe6\xb0\xcc\x45\x99\x31\x0a\x42\xd1\xa0\xb8\x50\x58\x94\x2d\x94\ -\x7a\xca\x25\xca\x38\x15\x43\xd5\xa1\x7a\x51\x13\xa8\x45\xd4\x6f\ -\xa8\xfd\xd4\x19\x59\x19\xd9\x65\xb2\xa1\xb2\x59\xb2\x55\xb2\x67\ -\x64\x47\x68\x08\x4d\x9b\xe6\x45\x4b\xa2\x95\xd0\x4e\xd0\x86\x68\ -\xef\x97\x28\x2f\x71\x5a\xc2\x59\xb2\x63\x49\xcb\x92\xc1\x25\x73\ -\x72\x8a\x72\x8e\x72\x1c\xb9\x42\xb9\x56\xb9\x3b\x72\xef\xe5\xe9\ -\xf2\x6e\xf2\x89\xf2\xbb\xe5\x3b\xe4\x1f\x29\xa0\x14\xf4\x15\x02\ -\x14\x32\x15\x0e\x2a\x5c\x52\x98\x56\xa4\x2a\xda\x2a\xb2\x14\x0b\ -\x15\x4f\x28\xde\x57\x82\x95\xf4\x95\x02\x95\xd6\x29\x1d\x56\xea\ -\x53\x9a\x55\x56\x51\xf6\x50\x4e\x55\xde\xaf\x7c\x51\x79\x5a\x85\ -\xa6\xe2\xa8\x92\xa0\x52\xa6\x72\x56\x65\x4a\x95\xa2\x6a\xaf\xca\ -\x55\x2d\x53\x3d\xa7\xfa\x8c\x2e\x4b\x77\xa2\x27\xd1\x2b\xe8\x3d\ -\xf4\x19\x35\x25\x35\x4f\x35\xa1\x5a\xad\x5a\xbf\xda\xbc\xba\x8e\ -\x7a\x88\x7a\x9e\x7a\xab\xfa\x23\x0d\x82\x06\x43\x23\x56\xa3\x4c\ -\xa3\x5b\x63\x46\x53\x55\xd3\x57\x33\x57\xb3\x59\xf3\xbe\x16\x5e\ -\x8b\xa1\x15\xaf\xb5\x4f\xab\x57\x6b\x4e\x5b\x47\x3b\x4c\x7b\x9b\ -\x76\x87\xf6\xa4\x8e\x9c\x8e\x97\x4e\x8e\x4e\xb3\xce\x43\x5d\xb2\ -\xae\x83\x6e\x9a\x6e\x9d\xee\x6d\x3d\x8c\x1e\x43\x2f\x51\xef\x80\ -\xde\x4d\x7d\x58\xdf\x42\x3f\x5e\xbf\x4a\xff\x86\x01\x6c\x60\x69\ -\xc0\x35\x38\x60\x30\xb0\x14\xbd\xd4\x7a\x29\x6f\x69\xdd\xd2\x61\ -\x43\x92\xa1\x93\x61\x86\x61\xb3\xe1\xa8\x11\xcd\xc8\xc7\x28\xcf\ -\xa8\xc3\xe8\x85\xb1\xa6\x71\x84\xf1\x6e\xe3\x5e\xe3\x4f\x26\x16\ -\x26\x49\x26\xf5\x26\x0f\x4c\x65\x4c\x57\x98\xe6\x99\x76\x99\xfe\ -\x6a\xa6\x6f\xc6\x32\xab\x32\xbb\x6d\x4e\x36\x77\x37\xdf\x68\xde\ -\x69\xfe\x72\x99\xc1\x32\xce\xb2\x83\xcb\xee\x5a\x50\x2c\x7c\x2d\ -\xb6\x59\x74\x5b\x7c\xb4\xb4\xb2\xe4\x5b\xb6\x58\x4e\x59\x69\x5a\ -\x45\x5b\x55\x5b\x0d\x33\xa8\x0c\x7f\x46\x31\xe3\x8a\x35\xda\xda\ -\xd9\x7a\xa3\xf5\x69\xeb\x77\x36\x96\x36\x02\x9b\x13\x36\xbf\xd8\ -\x1a\xda\x26\xda\x36\xd9\x4e\x2e\xd7\x59\xce\x59\x5e\xbf\x7c\xcc\ -\x4e\xdd\x8e\x69\x57\x6b\x37\x62\x4f\xb7\x8f\xb6\x3f\x64\x3f\xe2\ -\xa0\xe6\xc0\x74\xa8\x73\x78\xe2\xa8\xe1\xc8\x76\x6c\x70\x9c\x70\ -\xd2\x73\x4a\x70\x3a\xe6\xf4\xc2\xd9\xc4\x99\xef\xdc\xe6\x3c\xe7\ -\x62\xe3\xb2\xde\xe5\xbc\x2b\xe2\xea\xe1\x5a\xe8\xda\xef\x26\xe3\ -\x16\xe2\x56\xe9\xf6\xd8\x5d\xdd\x3d\xce\xbd\xd9\x7d\xc6\xc3\xc2\ -\x63\x9d\xc7\x79\x4f\xb4\xa7\xb7\xe7\x6e\xcf\x61\x2f\x65\x2f\x96\ -\x57\xa3\xd7\xcc\x0a\xab\x15\xeb\x57\xf4\x78\x93\xbc\x83\xbc\x2b\ -\xbd\x9f\xf8\xe8\xfb\xf0\x7d\xba\x7c\x61\xdf\x15\xbe\x7b\x7c\x1f\ -\xae\xd4\x5a\xc9\x5b\xd9\xe1\x07\xfc\xbc\xfc\xf6\xf8\x3d\xf2\xd7\ -\xf1\x4f\xf3\xff\x3e\x00\x13\xe0\x1f\x50\x15\xf0\x34\xd0\x34\x30\ -\x37\xb0\x37\x88\x12\x14\x15\xd4\x14\xf4\x26\xd8\x39\xb8\x24\xf8\ -\x41\x88\x6e\x88\x30\xa4\x3b\x54\x32\x34\x32\xb4\x31\x74\x2e\xcc\ -\x35\xac\x34\x6c\x64\x95\xf1\xaa\xf5\xab\xae\x87\x2b\x84\x73\xc3\ -\x3b\x23\xb0\x11\xa1\x11\x0d\x11\xb3\xab\xdd\x56\xef\x5d\x3d\x1e\ -\x69\x11\x59\x10\x39\xb4\x46\x67\x4d\xd6\x9a\xab\x6b\x15\xd6\x26\ -\xad\x3d\x13\x25\x19\xc5\x8c\x3a\x19\x8d\x8e\x0e\x8b\x6e\x8a\xfe\ -\xc0\xf4\x63\xd6\x31\x67\x63\xbc\x62\xaa\x63\x66\x58\x2e\xac\x7d\ -\xac\xe7\x6c\x47\x76\x19\x7b\x8a\x63\xc7\x29\xe5\x4c\xc4\xda\xc5\ -\x96\xc6\x4e\xc6\xd9\xc5\xed\x89\x9b\x8a\x77\x88\x2f\x8f\x9f\xe6\ -\xba\x70\x2b\xb9\x2f\x13\x3c\x13\x6a\x12\xe6\x12\xfd\x12\x8f\x24\ -\x2e\x24\x85\x25\xb5\x26\xe3\x92\xa3\x93\x4f\xf1\x64\x78\x89\xbc\ -\x9e\x14\x95\x94\xac\x94\x81\x54\x83\xd4\x82\xd4\x91\x34\x9b\xb4\ -\xbd\x69\x33\x7c\x6f\x7e\x43\x3a\x94\xbe\x26\xbd\x53\x40\x15\xfd\ -\x4c\xf5\x09\x75\x85\x5b\x85\xa3\x19\xf6\x19\x55\x19\x6f\x33\x43\ -\x33\x4f\x66\x49\x67\xf1\xb2\xfa\xb2\xf5\xb3\x77\x64\x4f\xe4\xb8\ -\xe7\x7c\xbd\x0e\xb5\x8e\xb5\xae\x3b\x57\x2d\x77\x73\xee\xe8\x7a\ -\xa7\xf5\xb5\x1b\xa0\x0d\x31\x1b\xba\x37\x6a\x6c\xcc\xdf\x38\xbe\ -\xc9\x63\xd3\xd1\xcd\x84\xcd\x89\x9b\x7f\xc8\x33\xc9\x2b\xcd\x7b\ -\xbd\x25\x6c\x4b\x57\xbe\x72\xfe\xa6\xfc\xb1\xad\x1e\x5b\x9b\x0b\ -\x24\x0a\xf8\x05\xc3\xdb\x6c\xb7\xd5\x6c\x47\x6d\xe7\x6e\xef\xdf\ -\x61\xbe\x63\xff\x8e\x4f\x85\xec\xc2\x6b\x45\x26\x45\xe5\x45\x1f\ -\x8a\x59\xc5\xd7\xbe\x32\xfd\xaa\xe2\xab\x85\x9d\xb1\x3b\xfb\x4b\ -\x2c\x4b\x0e\xee\xc2\xec\xe2\xed\x1a\xda\xed\xb0\xfb\x68\xa9\x74\ -\x69\x4e\xe9\xd8\x1e\xdf\x3d\xed\x65\xf4\xb2\xc2\xb2\xd7\x7b\xa3\ -\xf6\x5e\x2d\x5f\x56\x5e\xb3\x8f\xb0\x4f\xb8\x6f\xa4\xc2\xa7\xa2\ -\x73\xbf\xe6\xfe\x5d\xfb\x3f\x54\xc6\x57\xde\xa9\x72\xae\x6a\xad\ -\x56\xaa\xde\x51\x3d\x77\x80\x7d\x60\xf0\xa0\xe3\xc1\x96\x1a\xe5\ -\x9a\xa2\x9a\xf7\x87\xb8\x87\xee\xd6\x7a\xd4\xb6\xd7\x69\xd7\x95\ -\x1f\xc6\x1c\xce\x38\xfc\xb4\x3e\xb4\xbe\xf7\x6b\xc6\xd7\x8d\x0d\ -\x0a\x0d\x45\x0d\x1f\x8f\xf0\x8e\x8c\x1c\x0d\x3c\xda\xd3\x68\xd5\ -\xd8\xd8\xa4\xd4\x54\xd2\x0c\x37\x0b\x9b\xa7\x8e\x45\x1e\xbb\xf9\ -\x8d\xeb\x37\x9d\x2d\x86\x2d\xb5\xad\xb4\xd6\xa2\xe3\xe0\xb8\xf0\ -\xf8\xb3\x6f\xa3\xbf\x1d\x3a\xe1\x7d\xa2\xfb\x24\xe3\x64\xcb\x77\ -\x5a\xdf\x55\xb7\x51\xda\x0a\xdb\xa1\xf6\xec\xf6\x99\x8e\xf8\x8e\ -\x91\xce\xf0\xce\x81\x53\x2b\x4e\x75\x77\xd9\x76\xb5\x7d\x6f\xf4\ -\xfd\x91\xd3\x6a\xa7\xab\xce\xc8\x9e\x29\x39\x4b\x38\x9b\x7f\x76\ -\xe1\x5c\xce\xb9\xd9\xf3\xa9\xe7\xa7\x2f\xc4\x5d\x18\xeb\x8e\xea\ -\x7e\x70\x71\xd5\xc5\xdb\x3d\x01\x3d\xfd\x97\xbc\x2f\x5d\xb9\xec\ -\x7e\xf9\x62\xaf\x53\xef\xb9\x2b\x76\x57\x4e\x5f\xb5\xb9\x7a\xea\ -\x1a\xe3\x5a\xc7\x75\xcb\xeb\xed\x7d\x16\x7d\x6d\x3f\x58\xfc\xd0\ -\xd6\x6f\xd9\xdf\x7e\xc3\xea\x46\xe7\x4d\xeb\x9b\x5d\x03\xcb\x07\ -\xce\x0e\x3a\x0c\x5e\xb8\xe5\x7a\xeb\xf2\x6d\xaf\xdb\xd7\xef\xac\ -\xbc\x33\x30\x14\x32\x74\x77\x38\x72\x78\xe4\x2e\xfb\xee\xe4\xbd\ -\xa4\x7b\x2f\xef\x67\xdc\x9f\x7f\xb0\xe9\x21\xfa\x61\xe1\x23\xa9\ -\x47\xe5\x8f\x95\x1e\xd7\xfd\xa8\xf7\x63\xeb\x88\xe5\xc8\x99\x51\ -\xd7\xd1\xbe\x27\x41\x4f\x1e\x8c\xb1\xc6\x9e\xff\x94\xfe\xd3\x87\ -\xf1\xfc\xa7\xe4\xa7\xe5\x13\xaa\x13\x8d\x93\x66\x93\xa7\xa7\xdc\ -\xa7\x6e\x3e\x5b\xfd\x6c\xfc\x79\xea\xf3\xf9\xe9\x82\x9f\xa5\x7f\ -\xae\x7e\xa1\xfb\xe2\xbb\x5f\x1c\x7f\xe9\x9b\x59\x35\x33\xfe\x92\ -\xff\x72\xe1\xd7\xe2\x57\xf2\xaf\x8e\xbc\x5e\xf6\xba\x7b\xd6\x7f\ -\xf6\xf1\x9b\xe4\x37\xf3\x73\x85\x6f\xe5\xdf\x1e\x7d\xc7\x78\xd7\ -\xfb\x3e\xec\xfd\xc4\x7c\xe6\x07\xec\x87\x8a\x8f\x7a\x1f\xbb\x3e\ -\x79\x7f\x7a\xb8\x90\xbc\xb0\xf0\x1b\xf7\x84\xf3\xfb\xe2\xe6\x1d\ -\xc2\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x12\x00\x00\x0b\ -\x12\x01\xd2\xdd\x7e\xfc\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\ -\x66\x74\x77\x61\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\ -\x20\x76\x33\x2e\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\x2b\ -\x49\x44\x41\x54\x38\x4f\xa5\x52\x4d\x6b\x13\x51\x14\xed\x4f\xc8\ -\x4f\x98\x9f\x50\x14\x5c\xb8\xca\xd2\xe5\xa0\x0d\x64\x19\xc1\x45\ -\x17\x2a\xc1\x85\x04\x41\x1c\x0a\x42\x30\xa8\x11\x29\x1a\x2c\x9d\ -\xb1\x2a\x36\x92\xda\xd9\xd4\x8e\xd1\xda\x11\x6d\xb5\x88\x74\xb0\ -\x56\x63\x1b\x26\xd3\x12\x35\x6d\xa6\xe9\xd3\xa9\xd2\x0f\xcd\xf1\ -\xde\x79\xd6\xd8\xa6\x1b\xf1\xc1\xe1\xdd\x77\xef\x3d\xe7\x7e\xcc\ -\x74\x00\xf8\x2f\xec\xe9\x9c\x98\x09\x70\xab\xb8\x8c\xf4\xed\x0a\ -\x7a\xfa\xe7\xd0\x5b\x28\x63\xe4\xf9\x47\x0a\xb5\xe7\xee\x78\xbc\ -\x71\xd7\x91\x1f\x6f\x40\x2f\x2e\xc1\xab\x6f\xe2\xcb\xda\x16\x44\ -\xb0\x49\xf6\x06\x2e\xe6\x4b\x48\xeb\x0e\x8a\x2f\x16\x29\x75\x0f\ -\x01\x26\xdf\xb3\x57\xe1\x7f\x6b\xc2\x76\x00\x6d\x10\x50\xd3\x12\ -\x6c\xdb\x8e\x80\xbb\xda\xc4\xb9\xde\x49\x8c\x3c\x2d\x13\x65\x97\ -\x00\x57\x5e\xf9\xde\x84\x61\x03\xd1\x14\x60\x58\x80\x58\xe7\x3c\ -\xc0\x13\x40\xf2\x3a\xfb\x04\x2a\x24\x72\x2a\xf3\x98\xdd\x2d\x81\ -\x89\xb7\x6b\x78\x30\xdd\x08\x2b\x33\x99\x93\xf9\x98\x2f\x81\x44\ -\x56\xde\x2c\x16\x4d\x09\xb2\x05\x74\xeb\x1d\x72\xf9\x57\x9c\x22\ -\x05\xee\x3c\xaa\xe3\x93\xf8\x11\xb6\x1a\x4d\xca\xb6\xb3\x26\xd0\ -\x49\xb6\xd2\x2d\x90\xcc\x52\x0b\x74\x54\x4d\x20\x91\x76\x30\xe7\ -\x06\x38\x7a\x66\x88\x5d\x52\x20\x73\x77\x31\x5c\x98\xaa\x49\x52\ -\x67\xb7\x84\x42\x48\x10\x99\xab\xdb\x25\x01\x45\xb5\xa1\xc4\x6d\ -\xd4\xfc\x00\x07\x62\x57\x5b\x02\xe7\x6f\xba\xb4\xed\xad\xb0\x7d\ -\x49\xa4\xe4\x84\xa0\x4e\x64\x65\xd3\xa6\x37\x11\x23\xaa\x49\xb7\ -\x89\x5a\xfd\x2b\xf6\xa9\x97\x39\x24\x05\x72\xf7\x2b\x58\xf0\x37\ -\x68\x76\x49\x54\xe2\x5e\x88\xec\xa0\x14\x88\xa8\x0e\x41\x0a\xa8\ -\x29\x1b\xa5\x72\x15\x5d\x27\x0c\x0e\x49\x81\xd1\xc9\xcf\xb0\x1c\ -\x3f\x5c\x10\x13\x23\x71\x26\x38\x34\x92\x47\x7b\xa1\x37\x93\x0f\ -\x99\x21\x0c\xcb\xc3\x90\x35\x8b\x0b\x37\xc6\x5a\x02\x8c\xcc\xc0\ -\x0c\xe6\xfd\x9f\x54\xf5\x37\x81\xc0\x36\x9f\x6d\xb2\x66\x38\xf8\ -\xb0\xec\xe3\xc8\x71\x9d\xdd\x21\xef\x8f\xc0\xd8\x54\x15\x3d\xb9\ -\x29\xb8\x0d\xfa\x17\xa8\x8a\xaa\x39\xe1\xdc\x0c\xb6\xd9\x37\x5f\ -\x5d\x41\x8c\x5a\xef\x2f\xd0\x77\xdd\x2d\xc0\x18\x7d\x56\xc1\xe9\ -\x4b\xe3\x30\x1e\xbe\xc7\xf4\xec\x02\x96\x68\xdb\xb5\x7a\x10\xce\ -\xcc\x6d\x77\x51\x65\xfd\x2f\x32\x63\x87\xc0\x36\xfa\x0a\xaf\x71\ -\xec\xec\x30\x0e\xc6\xaf\x61\xff\xe1\x2b\x88\x9d\x1c\x40\xa6\xef\ -\x09\x85\xda\x73\xdb\x1c\xff\x06\x74\xfc\x02\xb7\x71\x05\xb6\x87\ -\x1e\x9b\x8a\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x00\xfa\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ -\x00\x00\x00\xc1\x49\x44\x41\x54\x78\x5e\xad\x93\xc1\x0a\xc2\x30\ -\x10\x44\x77\xd5\xbb\xdf\xe0\x17\xd6\x4b\x21\xa5\x10\xa9\xb4\xa4\ -\x47\xfb\xa3\x42\xaf\x5e\xe2\x2c\xa8\x2c\x9b\x04\xf6\xe0\xc0\xb0\ -\xed\x23\x99\xc3\x90\x65\x22\xca\x54\x6a\xcd\x39\x0f\x1a\x30\xf3\ -\x84\x11\xc9\xe8\x40\xa5\x16\x7b\x59\x04\x76\x93\x60\x4f\xc0\x8b\ -\x5c\x6a\x07\x4c\xcc\x1c\x2d\x04\x4b\x18\xa1\x15\x70\x87\xb7\x22\ -\xa4\x7d\x79\x85\x97\xdf\x61\x14\x46\x62\xe8\x01\x67\xb1\xe1\x41\ -\xf1\xa4\xf8\x4c\xdf\x1f\x1d\xa2\x43\x4d\x48\xb2\x9c\x05\xd4\xe5\ -\x2f\xf1\xbf\x01\x52\x1e\xdc\x55\x78\x0f\xcf\x54\xd1\xa8\x4a\x89\ -\xaa\xac\xce\x51\x62\x7f\x02\x98\x91\x4c\xd0\x11\x9e\x54\xf0\x45\ -\x7d\x9f\x15\x0f\x9f\xf3\x3b\x9c\x5a\xbb\xb0\xa1\xdc\xab\xeb\x21\ -\x79\x2e\x8b\xc0\x06\xef\x2e\x3c\xa9\xad\xdd\xbb\x0b\xc1\x42\xb0\ -\x11\x23\x59\xfe\x06\x1b\xf2\x86\xe3\xee\xf9\xf8\x8f\x00\x00\x00\ -\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ \x00\x00\x02\x0c\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ @@ -274,111 +44,42 @@ \x08\xe1\x21\x7e\x04\xfa\x7a\xe0\xed\xee\x82\x9b\xb3\x13\xb2\xd4\ \x1f\x7f\xd0\x5f\x3e\x78\x06\x85\x27\x79\xf7\xd3\xb4\x5c\x48\x00\ \x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x02\xcc\ +\x00\x00\x00\xf7\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ \x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ -\x00\x00\x02\x93\x49\x44\x41\x54\x38\xcb\x8d\x93\xcd\x4b\x94\x51\ -\x14\x87\x9f\x7b\xdf\x79\x67\x9c\x69\xc6\x19\x67\x46\xcb\x50\x46\ -\x25\xa3\xa0\x24\x14\xa3\xda\x44\x10\x11\x05\x2e\xfa\xa2\x36\x21\ -\x2d\x72\xd1\xa2\x16\xd2\xa2\x3f\x40\xa2\x4d\x8b\x5a\x87\xd1\xa2\ -\xd0\x56\x42\xb4\x48\xb0\x55\x8b\x3e\x20\xa9\x88\x14\x95\xc9\xb4\ -\xc9\x4a\xa7\x99\x77\x66\x5e\xdf\x8f\x7b\x5b\x68\x8d\x96\x44\x07\ -\x0e\xf7\x5e\xb8\xbf\xe7\x9c\x73\x2f\x3f\xc1\x9a\xb8\x73\x6d\x97\ -\xe6\x3f\xe2\xc2\xc0\x5b\xf1\x6b\x2f\xfe\x04\x1c\x3a\xd7\xfb\x4f\ -\xf1\xd8\xfd\xc1\x75\xe7\xc0\x9f\x17\xb4\xd2\xe4\x17\x26\x36\x14\ -\x27\x1a\xb6\x03\xf0\xab\xc8\xd8\xfd\xc1\xbf\x01\xcb\xae\x4d\xd6\ -\xce\x21\x95\x64\x6b\x28\x85\x58\xd3\xa4\x56\x0a\x80\xe1\xc7\x2b\ -\x6b\x7a\x6d\x07\x7d\x43\x4d\x1d\x2a\xd9\xc9\x62\xb2\x9d\x96\x2d\ -\x5d\x68\xed\x63\x95\x4b\xcc\x4c\x3f\xa1\xcd\x73\x08\x49\x03\xb5\ -\x0a\xe8\xe9\xe9\x61\x64\x64\xa4\x3a\x42\xdf\x50\xd3\xb1\x83\x6d\ -\xbd\x0f\x53\x75\x06\x56\xe4\x11\x25\x69\x22\x75\x10\x69\x44\x68\ -\x6e\xdf\xc3\xd4\xc7\x2c\x8d\x8b\x59\x12\xab\x80\x75\x6f\x70\xea\ -\x56\x2c\xde\x12\xdb\x77\xaf\x20\x9e\x87\x65\x40\x11\x70\x22\xdc\ -\xbd\xfa\x85\x70\x34\xc0\xc9\x6b\x8d\xa0\xe6\x91\xb5\x09\x5e\xcc\ -\x39\x64\x36\x02\xa4\xa3\x99\x7e\x3b\x30\x93\xf4\xc3\x8a\x7c\x25\ -\x88\xd0\x0e\xd9\x77\x15\x62\x29\x83\x62\xb9\x8c\xf6\xc1\x15\x8b\ -\x38\xa6\xc1\xf8\xec\x14\x66\x30\x84\x6b\x17\xaa\x00\xdb\x2d\x1d\ -\xaa\xc8\x3c\xf3\xb3\x9b\x70\x0a\x1e\x52\x38\x68\xad\x71\x1d\x8f\ -\x99\x77\x3f\x70\x95\x47\x4d\x5c\x51\xf2\x7c\xde\x2f\xf8\xec\xcf\ -\xb4\xf2\x7a\xe4\x0a\x41\xa3\x13\xe0\xac\x38\x7d\x2b\x39\xd3\xd0\ -\x26\x5a\x26\x1e\xd4\x31\xff\x2a\x88\x14\x02\x10\x08\xb1\x92\xa0\ -\x69\x3f\xa2\x88\x6e\x2b\xa2\x27\x42\xf4\x9f\x38\x43\xe1\xdb\x57\ -\x3e\xbc\x78\xc6\x85\x81\xb7\x42\x6a\xa5\x72\xa5\x82\x26\xb8\xb9\ -\x4c\xba\xcb\x22\xbd\xd7\xc1\x37\x4c\x64\x48\xd0\xd0\x59\x21\xd5\ -\x61\x61\x47\x72\x7c\x9e\x5b\x40\x2e\x7b\xe4\xa6\xc7\x89\xd6\x25\ -\xab\x23\x78\x2e\x4f\xad\x45\x6f\x5f\xed\xae\x22\xa9\x2e\x4d\x24\ -\x2c\xc8\xbe\xe9\x26\x9c\x5e\xa2\xf9\xf8\x67\x5c\xcb\xa0\x58\x72\ -\xf8\x36\x0e\xfb\x1b\xe2\xf8\xbe\xff\xfb\x3b\x01\xa4\xb5\xe0\xdd\ -\xae\x7c\xa7\x28\x35\xc4\x13\x01\xe2\x49\x89\x1d\x49\xa2\x22\x51\ -\x62\x29\x30\xe3\x1e\xcb\x4b\x06\x69\x27\x4e\x57\xa6\x1e\xe5\xfb\ -\x68\xe5\x57\x01\xa3\x37\xac\x39\xca\x89\x8b\xca\xab\xb1\x23\x9b\ -\x04\xad\xcd\x41\x4e\x5e\x9a\xe4\xf0\xf9\x1c\xdb\x5a\xc2\xd4\x84\ -\x0d\xbc\x59\x49\xcf\xce\x56\x84\x56\xab\x00\xb5\xde\x0b\x8f\xae\ -\x7f\x7c\x70\xba\xbf\x7b\xd2\xca\xcf\xbf\x7c\xe3\x54\x38\x7a\x70\ -\x09\x13\xc9\xf0\xa8\x4b\x6c\xb6\x8d\xbe\x03\xbb\xc9\x34\xa6\x7e\ -\x8b\x94\xaa\x9a\x56\x00\xa1\x55\x90\xbe\x79\x79\x47\x29\x5f\x72\ -\xf9\x54\xb4\x31\x85\xa4\x3e\x1c\xc4\x30\x04\xa9\x5a\x13\x33\x20\ -\x30\xe4\x4a\xae\xb5\xf5\x4f\xfc\x9d\x16\x68\xea\x86\x67\x22\x00\ -\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x03\x75\ +\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\ +\x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\ +\xa8\x64\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\ +\x72\x65\x00\x70\x61\x69\x6e\x74\x2e\x6e\x65\x74\x20\x34\x2e\x30\ +\x2e\x32\x31\xf1\x20\x69\x95\x00\x00\x00\x67\x49\x44\x41\x54\x38\ +\x4f\xc5\x90\x41\x0e\xc0\x20\x08\x04\xfd\xff\xd7\x78\x14\x95\x1a\ +\x70\x21\x2d\x12\x4d\xd3\xc3\xe8\xc6\xc1\x4d\xb4\x31\xf3\x11\x63\ +\xe9\x1b\x82\x03\x2b\xc6\xd2\x37\x22\xba\xf9\xaf\x00\xc1\x81\x15\ +\x33\x24\x17\xb5\x58\x71\xce\x42\x10\x88\xb8\xb7\x27\xba\xa1\x8c\ +\x52\x81\xe6\x88\x38\xc4\x39\x0b\x41\x54\x99\x21\x29\x10\x87\x38\ +\x67\x21\x08\x44\xdc\xf7\x9f\x98\x81\x45\x5b\x05\x19\x8f\x87\x75\ +\xb8\x5d\xdd\x5e\x92\x33\xf6\x07\x9e\x02\x00\x00\x00\x00\x49\x45\ +\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x00\xfa\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ \x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ -\x00\x00\x03\x3c\x49\x44\x41\x54\x38\x4f\x4d\x54\xdf\x6f\x94\x45\ -\x14\x3d\xf7\xce\x7c\xdf\xb7\xb5\x0b\xd9\x6e\xdb\x14\x5b\x0c\x62\ -\xc2\x03\x6d\x89\x80\xfe\x01\x26\x3c\xe0\x43\x0b\x94\xdd\xcf\xae\ -\x0a\x2f\xc4\x04\x22\x86\x08\xc1\x44\x2b\x3f\x16\x35\xe1\x89\xc4\ -\xc6\xa8\x04\x23\x88\xd1\x52\xac\x1b\x10\x56\x82\x18\x7e\xfc\x01\ -\x3c\x48\x59\x14\x13\x21\x3e\x68\x8b\x15\xb7\x36\x96\xb2\xdf\x8f\ -\x99\x6b\xa6\xd5\x84\x79\x99\x87\x39\x73\xe6\xdc\x73\xef\x19\xc2\ -\xc2\xa2\xff\x76\x59\xe6\x67\x57\x0e\x64\xfd\x6d\x6b\x59\xad\x6b\ -\x85\x3c\x41\x24\x74\x5f\xf8\xb7\x1b\x30\x57\xce\x36\xe2\xe3\x77\ -\x66\x67\x6b\x8f\xe2\x09\x02\x2a\x1f\x02\x95\xcb\xb0\xdb\x73\xb9\ -\x03\x45\xad\xf7\x66\x8d\x59\x94\x18\x0b\x43\x02\x08\x81\x01\xf8\ -\xcc\x98\x53\xea\x41\x25\x4d\xde\xff\x68\x66\xf7\x01\x41\x59\xdc\ -\x31\x01\xa1\x02\xc6\x6c\x39\x9f\x1f\xd9\x20\x28\xfd\xed\x2e\x2a\ -\x32\x8e\x98\xad\x10\x88\x1c\x07\x04\x62\x95\x85\x6a\x61\xc6\x45\ -\xa5\xce\xbc\xf5\xd7\x73\x61\x18\x8e\x2d\x48\xdf\x96\xcf\xed\x7f\ -\xcd\xf2\x3b\x53\x26\x8d\x29\x6a\x78\xa4\x35\x29\x56\x10\xcf\x03\ -\x89\x40\x8c\x81\x58\x03\x9b\xa4\x22\x41\x90\x74\x68\xed\x1f\x83\ -\x39\xfc\xf1\xf4\xcc\x10\x3d\x15\x04\x2b\x8e\x65\x17\x8d\x73\x62\ -\xbc\x24\x7a\xc8\x4f\xbe\x3d\x44\x8b\xd7\xac\x46\xad\xf4\x12\x98\ -\x19\x4e\x41\x12\xc7\xe8\x3d\x7d\x0a\x73\xb7\x7f\xc6\xaf\x07\xcb\ -\xa2\x82\xc0\x92\xd2\x76\x67\x6c\xd6\xd2\x9e\xb6\xb6\x23\x61\x9a\ -\xee\x99\x25\x32\x12\xc5\x6a\x55\xe5\x6b\x2c\x59\xff\x3c\x26\xab\ -\x55\xd4\x06\x07\xe7\x5f\xef\x19\xf9\x12\x5d\x9b\x0b\x98\xba\x76\ -\x0d\xe3\x1b\x37\x00\x4a\x9b\x2c\x89\x3a\xc3\xea\x28\x7d\xde\xda\ -\x3e\xbe\x2c\x89\x7a\x13\x56\x42\xa9\x61\x23\x06\xab\x46\x4f\x61\ -\x49\x5f\x3f\x26\x2a\x15\xd8\x24\x41\x57\x69\x10\x53\x97\xbe\xc7\ -\x78\x21\x04\x43\x00\xad\xac\x27\x42\x13\x7e\xf0\x0b\x55\xdb\x3b\ -\xea\x8f\x45\x8d\x16\x21\x12\xb0\x22\x49\x13\x58\x93\xa2\xfb\xe4\ -\x67\xe8\x2c\x16\x41\x20\xdc\x3b\x77\x0e\x37\x5f\xde\x02\x26\x02\ -\x69\x0d\x58\x0b\xb6\x82\xb8\x29\x33\x47\x17\xda\x3b\xa6\x9b\xa2\ -\x46\xce\xc2\x11\x80\x20\x82\xa4\xd1\x40\xcf\x89\x13\x58\x5a\x7a\ -\x71\xbe\x03\x93\x95\x0a\x7e\xdc\xba\x05\xec\xf9\x80\xf2\x00\x6b\ -\x40\x56\x90\x34\x05\x73\x74\xb2\xad\xad\xb6\x3c\x4e\xba\x63\x66\ -\x81\x31\x6c\x9c\x61\x23\x5f\xa0\x73\x73\x01\x93\xe7\xab\xb0\x69\ -\x82\xae\x81\x4d\x98\xac\x7e\x8b\x5b\xa5\x41\xb0\xeb\x8e\xd6\xe2\ -\x19\x83\x89\x4c\xe6\x2e\xed\x6e\xcd\x0f\xbf\x60\x64\xd7\x3f\x80\ -\x41\x1c\xa9\x9e\xd1\x51\x74\xf6\xf5\xe1\x0f\x57\x73\xb1\x00\x98\ -\x14\xbd\xa7\xbf\xc2\xe3\xfd\xfd\xb8\x77\xe9\x3b\xd4\x0a\x21\xe0\ -\x69\xd3\x2c\xa2\xce\xb3\xfe\x84\x56\x64\xb3\x2b\x8f\x06\x99\x1f\ -\x90\xa6\x2a\x8d\x23\x5e\x5e\x3e\x48\x8b\xd7\x3c\x83\x9b\xc5\x02\ -\xd8\x5a\x08\x2b\xd8\x34\x85\xeb\xce\x83\x9f\x6e\xe3\xee\xd0\x90\ -\x70\x10\x58\xad\x35\x5e\x35\x0f\x9f\x9d\x1f\xa4\xed\xb9\xfc\xbb\ -\x3b\x80\x7d\x0b\x83\x14\x7b\x14\x78\xe4\x06\x88\xb4\xbf\x90\x12\ -\x67\x2c\x04\x36\x4e\x45\x3c\x9d\x74\x78\x9e\x7f\x5c\xd1\x91\x0f\ -\xee\xd7\xf7\x12\x42\x28\x47\x72\xf8\x72\xfb\xd8\x7a\x6b\x06\xa6\ -\xc5\xc2\x82\x0c\xbb\x08\x88\xb3\x10\x00\x93\x58\x0b\xcb\x10\xd5\ -\x42\x84\xcb\xac\x2f\xbc\x51\xff\x73\x53\x08\x58\x07\x70\x81\x02\ -\x0e\x81\x76\x0e\xb7\xbe\x57\x60\x7a\x3d\x63\xd2\xa6\xd8\x0a\x5c\ -\x20\x9c\x02\x25\x84\x80\x08\x0d\xad\x1b\x67\xc5\x7e\x38\x5c\xaf\ -\xbf\x09\xe7\x99\x0b\xcc\xff\x71\x16\x87\x25\x48\x77\x73\xf3\xea\ -\x8d\x7e\xe6\x95\xa7\x7d\xbd\xae\x45\x64\xa9\x12\xa0\x4e\xf8\xfd\ -\x06\x70\xf5\x9b\x28\xfa\xb4\x36\x33\x73\xfd\x91\x2f\x40\xfe\x05\ -\xdd\xec\x87\x88\x85\x9f\x3f\x1c\x00\x00\x00\x00\x49\x45\x4e\x44\ -\xae\x42\x60\x82\ +\x00\x00\x00\xc1\x49\x44\x41\x54\x78\x5e\xad\x93\xc1\x0a\xc2\x30\ +\x10\x44\x77\xd5\xbb\xdf\xe0\x17\xd6\x4b\x21\xa5\x10\xa9\xb4\xa4\ +\x47\xfb\xa3\x42\xaf\x5e\xe2\x2c\xa8\x2c\x9b\x04\xf6\xe0\xc0\xb0\ +\xed\x23\x99\xc3\x90\x65\x22\xca\x54\x6a\xcd\x39\x0f\x1a\x30\xf3\ +\x84\x11\xc9\xe8\x40\xa5\x16\x7b\x59\x04\x76\x93\x60\x4f\xc0\x8b\ +\x5c\x6a\x07\x4c\xcc\x1c\x2d\x04\x4b\x18\xa1\x15\x70\x87\xb7\x22\ +\xa4\x7d\x79\x85\x97\xdf\x61\x14\x46\x62\xe8\x01\x67\xb1\xe1\x41\ +\xf1\xa4\xf8\x4c\xdf\x1f\x1d\xa2\x43\x4d\x48\xb2\x9c\x05\xd4\xe5\ +\x2f\xf1\xbf\x01\x52\x1e\xdc\x55\x78\x0f\xcf\x54\xd1\xa8\x4a\x89\ +\xaa\xac\xce\x51\x62\x7f\x02\x98\x91\x4c\xd0\x11\x9e\x54\xf0\x45\ +\x7d\x9f\x15\x0f\x9f\xf3\x3b\x9c\x5a\xbb\xb0\xa1\xdc\xab\xeb\x21\ +\x79\x2e\x8b\xc0\x06\xef\x2e\x3c\xa9\xad\xdd\xbb\x0b\xc1\x42\xb0\ +\x11\x23\x59\xfe\x06\x1b\xf2\x86\xe3\xee\xf9\xf8\x8f\x00\x00\x00\ +\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ \x00\x0c\xb6\x08\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ @@ -52446,6 +52147,302 @@ \x15\x2a\x54\xa8\x50\xa1\x42\x85\x0a\x15\x2a\x54\xe8\x63\x4a\x55\ \xf5\xff\x03\xa6\xd8\x01\xea\xbc\x0a\x88\x48\x00\x00\x00\x00\x49\ \x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x0d\x20\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xb1\x8e\x7c\xfb\x51\x93\ +\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x87\x0f\x00\x00\x8c\x0f\ +\x00\x00\xfd\x52\x00\x00\x81\x40\x00\x00\x7d\x79\x00\x00\xe9\x8b\ +\x00\x00\x3c\xe5\x00\x00\x19\xcc\x73\x3c\x85\x77\x00\x00\x0a\x39\ +\x69\x43\x43\x50\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x49\x43\ +\x43\x20\x70\x72\x6f\x66\x69\x6c\x65\x00\x00\x48\xc7\x9d\x96\x77\ +\x54\x54\xd7\x16\x87\xcf\xbd\x77\x7a\xa1\xcd\x30\xd2\x19\x7a\x93\ +\x2e\x30\x80\xf4\x2e\x20\x1d\x04\x51\x18\x66\x06\x18\xca\x00\xc3\ +\x0c\x4d\x6c\x88\xa8\x40\x44\x11\x11\x01\x45\x90\xa0\x80\x01\xa3\ +\xa1\x48\xac\x88\x62\x21\x28\xa8\x60\x0f\x48\x10\x50\x62\x30\x8a\ +\xa8\xa8\x64\x46\xd6\x4a\x7c\x79\x79\xef\xe5\xe5\xf7\xc7\xbd\xdf\ +\xda\x67\xef\x73\xf7\xd9\x7b\x9f\xb5\x2e\x00\x24\x4f\x1f\x2e\x2f\ +\x05\x96\x02\x20\x99\x27\xe0\x07\x7a\x38\xd3\x57\x85\x47\xd0\xb1\ +\xfd\x00\x06\x78\x80\x01\xa6\x00\x30\x59\xe9\xa9\xbe\x41\xee\xc1\ +\x40\x24\x2f\x37\x17\x7a\xba\xc8\x09\xfc\x8b\xde\x0c\x01\x48\xfc\ +\xbe\x65\xe8\xe9\x4f\xa7\x83\xff\x4f\xd2\xac\x54\xbe\x00\x00\xc8\ +\x5f\xc4\xe6\x6c\x4e\x3a\x4b\xc4\xf9\x22\x4e\xca\x14\xa4\x8a\xed\ +\x33\x22\xa6\xc6\x24\x8a\x19\x46\x89\x99\x2f\x4a\x50\xc4\x72\x62\ +\x8e\x5b\xe4\xa5\x9f\x7d\x16\xd9\x51\xcc\xec\x64\x1e\x5b\xc4\xe2\ +\x9c\x53\xd9\xc9\x6c\x31\xf7\x88\x78\x7b\x86\x90\x23\x62\xc4\x47\ +\xc4\x05\x19\x5c\x4e\xa6\x88\x6f\x8b\x58\x33\x49\x98\xcc\x15\xf1\ +\x5b\x71\x6c\x32\x87\x99\x0e\x00\x8a\x24\xb6\x0b\x38\xac\x78\x11\ +\x9b\x88\x98\xc4\x0f\x0e\x74\x11\xf1\x72\x00\x70\xa4\xb8\x2f\x38\ +\xe6\x0b\x16\x70\xb2\x04\xe2\x43\xb9\xa4\xa4\x66\xf3\xb9\x71\xf1\ +\x02\xba\x2e\x4b\x8f\x6e\x6a\x6d\xcd\xa0\x7b\x72\x32\x93\x38\x02\ +\x81\xa1\x3f\x93\x95\xc8\xe4\xb3\xe9\x2e\x29\xc9\xa9\x4c\x5e\x36\ +\x00\x8b\x67\xfe\x2c\x19\x71\x6d\xe9\xa2\x22\x5b\x9a\x5a\x5b\x5a\ +\x1a\x9a\x19\x99\x7e\x51\xa8\xff\xba\xf8\x37\x25\xee\xed\x22\xbd\ +\x0a\xf8\xdc\x33\x88\xd6\xf7\x87\xed\xaf\xfc\x52\xea\x00\x60\xcc\ +\x8a\x6a\xb3\xeb\x0f\x5b\xcc\x7e\x00\x3a\xb6\x02\x20\x77\xff\x0f\ +\x9b\xe6\x21\x00\x24\x45\x7d\x6b\xbf\xf1\xc5\x79\x68\xe2\x79\x89\ +\x17\x08\x52\x6d\x8c\x8d\x33\x33\x33\x8d\xb8\x1c\x96\x91\xb8\xa0\ +\xbf\xeb\x7f\x3a\xfc\x0d\x7d\xf1\x3d\x23\xf1\x76\xbf\x97\x87\xee\ +\xca\x89\x65\x0a\x93\x04\x74\x71\xdd\x58\x29\x49\x29\x42\x3e\x3d\ +\x3d\x95\xc9\xe2\xd0\x0d\xff\x3c\xc4\xff\x38\xf0\xaf\xf3\x58\x1a\ +\xc8\x89\xe5\xf0\x39\x3c\x51\x44\xa8\x68\xca\xb8\xbc\x38\x51\xbb\ +\x79\x6c\xae\x80\x9b\xc2\xa3\x73\x79\xff\xa9\x89\xff\x30\xec\x4f\ +\x5a\x9c\x6b\x91\x28\xf5\x9f\x00\x35\xca\x08\x48\xdd\xa0\x02\xe4\ +\xe7\x3e\x80\xa2\x10\x01\x12\x79\x50\xdc\xf5\xdf\xfb\xe6\x83\x0f\ +\x05\xe2\x9b\x17\xa6\x3a\xb1\x38\xf7\x9f\x05\xfd\xfb\xae\x70\x89\ +\xf8\x91\xce\x8d\xfb\x1c\xe7\x12\x18\x4c\x67\x09\xf9\x19\x8b\x6b\ +\xe2\x6b\x09\xd0\x80\x00\x24\x01\x15\xc8\x03\x15\xa0\x01\x74\x81\ +\x21\x30\x03\x56\xc0\x16\x38\x02\x37\xb0\x02\xf8\x81\x60\x10\x0e\ +\xd6\x02\x16\x88\x07\xc9\x80\x0f\x32\x41\x2e\xd8\x0c\x0a\x40\x11\ +\xd8\x05\xf6\x82\x4a\x50\x03\xea\x41\x23\x68\x01\x27\x40\x07\x38\ +\x0d\x2e\x80\xcb\xe0\x3a\xb8\x09\xee\x80\x07\x60\x04\x8c\x83\xe7\ +\x60\x06\xbc\x01\xf3\x10\x04\x61\x21\x32\x44\x81\xe4\x21\x55\x48\ +\x0b\x32\x80\xcc\x20\x06\x64\x0f\xb9\x41\x3e\x50\x20\x14\x0e\x45\ +\x43\x71\x10\x0f\x12\x42\xb9\xd0\x16\xa8\x08\x2a\x85\x2a\xa1\x5a\ +\xa8\x11\xfa\x16\x3a\x05\x5d\x80\xae\x42\x03\xd0\x3d\x68\x14\x9a\ +\x82\x7e\x85\xde\xc3\x08\x4c\x82\xa9\xb0\x32\xac\x0d\x1b\xc3\x0c\ +\xd8\x09\xf6\x86\x83\xe1\x35\x70\x1c\x9c\x06\xe7\xc0\xf9\xf0\x4e\ +\xb8\x02\xae\x83\x8f\xc1\xed\xf0\x05\xf8\x3a\x7c\x07\x1e\x81\x9f\ +\xc3\xb3\x08\x40\x88\x08\x0d\x51\x43\x0c\x11\x06\xe2\x82\xf8\x21\ +\x11\x48\x2c\xc2\x47\x36\x20\x85\x48\x39\x52\x87\xb4\x20\x5d\x48\ +\x2f\x72\x0b\x19\x41\xa6\x91\x77\x28\x0c\x8a\x82\xa2\xa3\x0c\x51\ +\xb6\x28\x4f\x54\x08\x8a\x85\x4a\x43\x6d\x40\x15\xa3\x2a\x51\x47\ +\x51\xed\xa8\x1e\xd4\x2d\xd4\x28\x6a\x06\xf5\x09\x4d\x46\x2b\xa1\ +\x0d\xd0\x36\x68\x2f\xf4\x2a\x74\x1c\x3a\x13\x5d\x80\x2e\x47\x37\ +\xa0\xdb\xd0\x97\xd0\x77\xd0\xe3\xe8\x37\x18\x0c\x86\x86\xd1\xc1\ +\x58\x61\x3c\x31\xe1\x98\x04\xcc\x3a\x4c\x31\xe6\x00\xa6\x15\x73\ +\x1e\x33\x80\x19\xc3\xcc\x62\xb1\x58\x79\xac\x01\xd6\x0e\xeb\x87\ +\x65\x62\x05\xd8\x02\xec\x7e\xec\x31\xec\x39\xec\x20\x76\x1c\xfb\ +\x16\x47\xc4\xa9\xe2\xcc\x70\xee\xb8\x08\x1c\x0f\x97\x87\x2b\xc7\ +\x35\xe1\xce\xe2\x06\x71\x13\xb8\x79\xbc\x14\x5e\x0b\x6f\x83\xf7\ +\xc3\xb3\xf1\xd9\xf8\x12\x7c\x3d\xbe\x0b\x7f\x03\x3f\x8e\x9f\x27\ +\x48\x13\x74\x08\x76\x84\x60\x42\x02\x61\x33\xa1\x82\xd0\x42\xb8\ +\x44\x78\x48\x78\x45\x24\x12\xd5\x89\xd6\xc4\x00\x22\x97\xb8\x89\ +\x58\x41\x3c\x4e\xbc\x42\x1c\x25\xbe\x23\xc9\x90\xf4\x49\x2e\xa4\ +\x48\x92\x90\xb4\x93\x74\x84\x74\x9e\x74\x8f\xf4\x8a\x4c\x26\x6b\ +\x93\x1d\xc9\x11\x64\x01\x79\x27\xb9\x91\x7c\x91\xfc\x98\xfc\x56\ +\x82\x22\x61\x24\xe1\x25\xc1\x96\xd8\x28\x51\x25\xd1\x2e\x31\x28\ +\xf1\x42\x12\x2f\xa9\x25\xe9\x24\xb9\x56\x32\x47\xb2\x5c\xf2\xa4\ +\xe4\x0d\xc9\x69\x29\xbc\x94\xb6\x94\x8b\x14\x53\x6a\x83\x54\x95\ +\xd4\x29\xa9\x61\xa9\x59\x69\x8a\xb4\xa9\xb4\x9f\x74\xb2\x74\xb1\ +\x74\x93\xf4\x55\xe9\x49\x19\xac\x8c\xb6\x8c\x9b\x0c\x5b\x26\x5f\ +\xe6\xb0\xcc\x45\x99\x31\x0a\x42\xd1\xa0\xb8\x50\x58\x94\x2d\x94\ +\x7a\xca\x25\xca\x38\x15\x43\xd5\xa1\x7a\x51\x13\xa8\x45\xd4\x6f\ +\xa8\xfd\xd4\x19\x59\x19\xd9\x65\xb2\xa1\xb2\x59\xb2\x55\xb2\x67\ +\x64\x47\x68\x08\x4d\x9b\xe6\x45\x4b\xa2\x95\xd0\x4e\xd0\x86\x68\ +\xef\x97\x28\x2f\x71\x5a\xc2\x59\xb2\x63\x49\xcb\x92\xc1\x25\x73\ +\x72\x8a\x72\x8e\x72\x1c\xb9\x42\xb9\x56\xb9\x3b\x72\xef\xe5\xe9\ +\xf2\x6e\xf2\x89\xf2\xbb\xe5\x3b\xe4\x1f\x29\xa0\x14\xf4\x15\x02\ +\x14\x32\x15\x0e\x2a\x5c\x52\x98\x56\xa4\x2a\xda\x2a\xb2\x14\x0b\ +\x15\x4f\x28\xde\x57\x82\x95\xf4\x95\x02\x95\xd6\x29\x1d\x56\xea\ +\x53\x9a\x55\x56\x51\xf6\x50\x4e\x55\xde\xaf\x7c\x51\x79\x5a\x85\ +\xa6\xe2\xa8\x92\xa0\x52\xa6\x72\x56\x65\x4a\x95\xa2\x6a\xaf\xca\ +\x55\x2d\x53\x3d\xa7\xfa\x8c\x2e\x4b\x77\xa2\x27\xd1\x2b\xe8\x3d\ +\xf4\x19\x35\x25\x35\x4f\x35\xa1\x5a\xad\x5a\xbf\xda\xbc\xba\x8e\ +\x7a\x88\x7a\x9e\x7a\xab\xfa\x23\x0d\x82\x06\x43\x23\x56\xa3\x4c\ +\xa3\x5b\x63\x46\x53\x55\xd3\x57\x33\x57\xb3\x59\xf3\xbe\x16\x5e\ +\x8b\xa1\x15\xaf\xb5\x4f\xab\x57\x6b\x4e\x5b\x47\x3b\x4c\x7b\x9b\ +\x76\x87\xf6\xa4\x8e\x9c\x8e\x97\x4e\x8e\x4e\xb3\xce\x43\x5d\xb2\ +\xae\x83\x6e\x9a\x6e\x9d\xee\x6d\x3d\x8c\x1e\x43\x2f\x51\xef\x80\ +\xde\x4d\x7d\x58\xdf\x42\x3f\x5e\xbf\x4a\xff\x86\x01\x6c\x60\x69\ +\xc0\x35\x38\x60\x30\xb0\x14\xbd\xd4\x7a\x29\x6f\x69\xdd\xd2\x61\ +\x43\x92\xa1\x93\x61\x86\x61\xb3\xe1\xa8\x11\xcd\xc8\xc7\x28\xcf\ +\xa8\xc3\xe8\x85\xb1\xa6\x71\x84\xf1\x6e\xe3\x5e\xe3\x4f\x26\x16\ +\x26\x49\x26\xf5\x26\x0f\x4c\x65\x4c\x57\x98\xe6\x99\x76\x99\xfe\ +\x6a\xa6\x6f\xc6\x32\xab\x32\xbb\x6d\x4e\x36\x77\x37\xdf\x68\xde\ +\x69\xfe\x72\x99\xc1\x32\xce\xb2\x83\xcb\xee\x5a\x50\x2c\x7c\x2d\ +\xb6\x59\x74\x5b\x7c\xb4\xb4\xb2\xe4\x5b\xb6\x58\x4e\x59\x69\x5a\ +\x45\x5b\x55\x5b\x0d\x33\xa8\x0c\x7f\x46\x31\xe3\x8a\x35\xda\xda\ +\xd9\x7a\xa3\xf5\x69\xeb\x77\x36\x96\x36\x02\x9b\x13\x36\xbf\xd8\ +\x1a\xda\x26\xda\x36\xd9\x4e\x2e\xd7\x59\xce\x59\x5e\xbf\x7c\xcc\ +\x4e\xdd\x8e\x69\x57\x6b\x37\x62\x4f\xb7\x8f\xb6\x3f\x64\x3f\xe2\ +\xa0\xe6\xc0\x74\xa8\x73\x78\xe2\xa8\xe1\xc8\x76\x6c\x70\x9c\x70\ +\xd2\x73\x4a\x70\x3a\xe6\xf4\xc2\xd9\xc4\x99\xef\xdc\xe6\x3c\xe7\ +\x62\xe3\xb2\xde\xe5\xbc\x2b\xe2\xea\xe1\x5a\xe8\xda\xef\x26\xe3\ +\x16\xe2\x56\xe9\xf6\xd8\x5d\xdd\x3d\xce\xbd\xd9\x7d\xc6\xc3\xc2\ +\x63\x9d\xc7\x79\x4f\xb4\xa7\xb7\xe7\x6e\xcf\x61\x2f\x65\x2f\x96\ +\x57\xa3\xd7\xcc\x0a\xab\x15\xeb\x57\xf4\x78\x93\xbc\x83\xbc\x2b\ +\xbd\x9f\xf8\xe8\xfb\xf0\x7d\xba\x7c\x61\xdf\x15\xbe\x7b\x7c\x1f\ +\xae\xd4\x5a\xc9\x5b\xd9\xe1\x07\xfc\xbc\xfc\xf6\xf8\x3d\xf2\xd7\ +\xf1\x4f\xf3\xff\x3e\x00\x13\xe0\x1f\x50\x15\xf0\x34\xd0\x34\x30\ +\x37\xb0\x37\x88\x12\x14\x15\xd4\x14\xf4\x26\xd8\x39\xb8\x24\xf8\ +\x41\x88\x6e\x88\x30\xa4\x3b\x54\x32\x34\x32\xb4\x31\x74\x2e\xcc\ +\x35\xac\x34\x6c\x64\x95\xf1\xaa\xf5\xab\xae\x87\x2b\x84\x73\xc3\ +\x3b\x23\xb0\x11\xa1\x11\x0d\x11\xb3\xab\xdd\x56\xef\x5d\x3d\x1e\ +\x69\x11\x59\x10\x39\xb4\x46\x67\x4d\xd6\x9a\xab\x6b\x15\xd6\x26\ +\xad\x3d\x13\x25\x19\xc5\x8c\x3a\x19\x8d\x8e\x0e\x8b\x6e\x8a\xfe\ +\xc0\xf4\x63\xd6\x31\x67\x63\xbc\x62\xaa\x63\x66\x58\x2e\xac\x7d\ +\xac\xe7\x6c\x47\x76\x19\x7b\x8a\x63\xc7\x29\xe5\x4c\xc4\xda\xc5\ +\x96\xc6\x4e\xc6\xd9\xc5\xed\x89\x9b\x8a\x77\x88\x2f\x8f\x9f\xe6\ +\xba\x70\x2b\xb9\x2f\x13\x3c\x13\x6a\x12\xe6\x12\xfd\x12\x8f\x24\ +\x2e\x24\x85\x25\xb5\x26\xe3\x92\xa3\x93\x4f\xf1\x64\x78\x89\xbc\ +\x9e\x14\x95\x94\xac\x94\x81\x54\x83\xd4\x82\xd4\x91\x34\x9b\xb4\ +\xbd\x69\x33\x7c\x6f\x7e\x43\x3a\x94\xbe\x26\xbd\x53\x40\x15\xfd\ +\x4c\xf5\x09\x75\x85\x5b\x85\xa3\x19\xf6\x19\x55\x19\x6f\x33\x43\ +\x33\x4f\x66\x49\x67\xf1\xb2\xfa\xb2\xf5\xb3\x77\x64\x4f\xe4\xb8\ +\xe7\x7c\xbd\x0e\xb5\x8e\xb5\xae\x3b\x57\x2d\x77\x73\xee\xe8\x7a\ +\xa7\xf5\xb5\x1b\xa0\x0d\x31\x1b\xba\x37\x6a\x6c\xcc\xdf\x38\xbe\ +\xc9\x63\xd3\xd1\xcd\x84\xcd\x89\x9b\x7f\xc8\x33\xc9\x2b\xcd\x7b\ +\xbd\x25\x6c\x4b\x57\xbe\x72\xfe\xa6\xfc\xb1\xad\x1e\x5b\x9b\x0b\ +\x24\x0a\xf8\x05\xc3\xdb\x6c\xb7\xd5\x6c\x47\x6d\xe7\x6e\xef\xdf\ +\x61\xbe\x63\xff\x8e\x4f\x85\xec\xc2\x6b\x45\x26\x45\xe5\x45\x1f\ +\x8a\x59\xc5\xd7\xbe\x32\xfd\xaa\xe2\xab\x85\x9d\xb1\x3b\xfb\x4b\ +\x2c\x4b\x0e\xee\xc2\xec\xe2\xed\x1a\xda\xed\xb0\xfb\x68\xa9\x74\ +\x69\x4e\xe9\xd8\x1e\xdf\x3d\xed\x65\xf4\xb2\xc2\xb2\xd7\x7b\xa3\ +\xf6\x5e\x2d\x5f\x56\x5e\xb3\x8f\xb0\x4f\xb8\x6f\xa4\xc2\xa7\xa2\ +\x73\xbf\xe6\xfe\x5d\xfb\x3f\x54\xc6\x57\xde\xa9\x72\xae\x6a\xad\ +\x56\xaa\xde\x51\x3d\x77\x80\x7d\x60\xf0\xa0\xe3\xc1\x96\x1a\xe5\ +\x9a\xa2\x9a\xf7\x87\xb8\x87\xee\xd6\x7a\xd4\xb6\xd7\x69\xd7\x95\ +\x1f\xc6\x1c\xce\x38\xfc\xb4\x3e\xb4\xbe\xf7\x6b\xc6\xd7\x8d\x0d\ +\x0a\x0d\x45\x0d\x1f\x8f\xf0\x8e\x8c\x1c\x0d\x3c\xda\xd3\x68\xd5\ +\xd8\xd8\xa4\xd4\x54\xd2\x0c\x37\x0b\x9b\xa7\x8e\x45\x1e\xbb\xf9\ +\x8d\xeb\x37\x9d\x2d\x86\x2d\xb5\xad\xb4\xd6\xa2\xe3\xe0\xb8\xf0\ +\xf8\xb3\x6f\xa3\xbf\x1d\x3a\xe1\x7d\xa2\xfb\x24\xe3\x64\xcb\x77\ +\x5a\xdf\x55\xb7\x51\xda\x0a\xdb\xa1\xf6\xec\xf6\x99\x8e\xf8\x8e\ +\x91\xce\xf0\xce\x81\x53\x2b\x4e\x75\x77\xd9\x76\xb5\x7d\x6f\xf4\ +\xfd\x91\xd3\x6a\xa7\xab\xce\xc8\x9e\x29\x39\x4b\x38\x9b\x7f\x76\ +\xe1\x5c\xce\xb9\xd9\xf3\xa9\xe7\xa7\x2f\xc4\x5d\x18\xeb\x8e\xea\ +\x7e\x70\x71\xd5\xc5\xdb\x3d\x01\x3d\xfd\x97\xbc\x2f\x5d\xb9\xec\ +\x7e\xf9\x62\xaf\x53\xef\xb9\x2b\x76\x57\x4e\x5f\xb5\xb9\x7a\xea\ +\x1a\xe3\x5a\xc7\x75\xcb\xeb\xed\x7d\x16\x7d\x6d\x3f\x58\xfc\xd0\ +\xd6\x6f\xd9\xdf\x7e\xc3\xea\x46\xe7\x4d\xeb\x9b\x5d\x03\xcb\x07\ +\xce\x0e\x3a\x0c\x5e\xb8\xe5\x7a\xeb\xf2\x6d\xaf\xdb\xd7\xef\xac\ +\xbc\x33\x30\x14\x32\x74\x77\x38\x72\x78\xe4\x2e\xfb\xee\xe4\xbd\ +\xa4\x7b\x2f\xef\x67\xdc\x9f\x7f\xb0\xe9\x21\xfa\x61\xe1\x23\xa9\ +\x47\xe5\x8f\x95\x1e\xd7\xfd\xa8\xf7\x63\xeb\x88\xe5\xc8\x99\x51\ +\xd7\xd1\xbe\x27\x41\x4f\x1e\x8c\xb1\xc6\x9e\xff\x94\xfe\xd3\x87\ +\xf1\xfc\xa7\xe4\xa7\xe5\x13\xaa\x13\x8d\x93\x66\x93\xa7\xa7\xdc\ +\xa7\x6e\x3e\x5b\xfd\x6c\xfc\x79\xea\xf3\xf9\xe9\x82\x9f\xa5\x7f\ +\xae\x7e\xa1\xfb\xe2\xbb\x5f\x1c\x7f\xe9\x9b\x59\x35\x33\xfe\x92\ +\xff\x72\xe1\xd7\xe2\x57\xf2\xaf\x8e\xbc\x5e\xf6\xba\x7b\xd6\x7f\ +\xf6\xf1\x9b\xe4\x37\xf3\x73\x85\x6f\xe5\xdf\x1e\x7d\xc7\x78\xd7\ +\xfb\x3e\xec\xfd\xc4\x7c\xe6\x07\xec\x87\x8a\x8f\x7a\x1f\xbb\x3e\ +\x79\x7f\x7a\xb8\x90\xbc\xb0\xf0\x1b\xf7\x84\xf3\xfb\xe2\xe6\x1d\ +\xc2\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x12\x00\x00\x0b\ +\x12\x01\xd2\xdd\x7e\xfc\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\ +\x66\x74\x77\x61\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\ +\x20\x76\x33\x2e\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\x2b\ +\x49\x44\x41\x54\x38\x4f\xa5\x52\x4d\x6b\x13\x51\x14\xed\x4f\xc8\ +\x4f\x98\x9f\x50\x14\x5c\xb8\xca\xd2\xe5\xa0\x0d\x64\x19\xc1\x45\ +\x17\x2a\xc1\x85\x04\x41\x1c\x0a\x42\x30\xa8\x11\x29\x1a\x2c\x9d\ +\xb1\x2a\x36\x92\xda\xd9\xd4\x8e\xd1\xda\x11\x6d\xb5\x88\x74\xb0\ +\x56\x63\x1b\x26\xd3\x12\x35\x6d\xa6\xe9\xd3\xa9\xd2\x0f\xcd\xf1\ +\xde\x79\xd6\xd8\xa6\x1b\xf1\xc1\xe1\xdd\x77\xef\x3d\xe7\x7e\xcc\ +\x74\x00\xf8\x2f\xec\xe9\x9c\x98\x09\x70\xab\xb8\x8c\xf4\xed\x0a\ +\x7a\xfa\xe7\xd0\x5b\x28\x63\xe4\xf9\x47\x0a\xb5\xe7\xee\x78\xbc\ +\x71\xd7\x91\x1f\x6f\x40\x2f\x2e\xc1\xab\x6f\xe2\xcb\xda\x16\x44\ +\xb0\x49\xf6\x06\x2e\xe6\x4b\x48\xeb\x0e\x8a\x2f\x16\x29\x75\x0f\ +\x01\x26\xdf\xb3\x57\xe1\x7f\x6b\xc2\x76\x00\x6d\x10\x50\xd3\x12\ +\x6c\xdb\x8e\x80\xbb\xda\xc4\xb9\xde\x49\x8c\x3c\x2d\x13\x65\x97\ +\x00\x57\x5e\xf9\xde\x84\x61\x03\xd1\x14\x60\x58\x80\x58\xe7\x3c\ +\xc0\x13\x40\xf2\x3a\xfb\x04\x2a\x24\x72\x2a\xf3\x98\xdd\x2d\x81\ +\x89\xb7\x6b\x78\x30\xdd\x08\x2b\x33\x99\x93\xf9\x98\x2f\x81\x44\ +\x56\xde\x2c\x16\x4d\x09\xb2\x05\x74\xeb\x1d\x72\xf9\x57\x9c\x22\ +\x05\xee\x3c\xaa\xe3\x93\xf8\x11\xb6\x1a\x4d\xca\xb6\xb3\x26\xd0\ +\x49\xb6\xd2\x2d\x90\xcc\x52\x0b\x74\x54\x4d\x20\x91\x76\x30\xe7\ +\x06\x38\x7a\x66\x88\x5d\x52\x20\x73\x77\x31\x5c\x98\xaa\x49\x52\ +\x67\xb7\x84\x42\x48\x10\x99\xab\xdb\x25\x01\x45\xb5\xa1\xc4\x6d\ +\xd4\xfc\x00\x07\x62\x57\x5b\x02\xe7\x6f\xba\xb4\xed\xad\xb0\x7d\ +\x49\xa4\xe4\x84\xa0\x4e\x64\x65\xd3\xa6\x37\x11\x23\xaa\x49\xb7\ +\x89\x5a\xfd\x2b\xf6\xa9\x97\x39\x24\x05\x72\xf7\x2b\x58\xf0\x37\ +\x68\x76\x49\x54\xe2\x5e\x88\xec\xa0\x14\x88\xa8\x0e\x41\x0a\xa8\ +\x29\x1b\xa5\x72\x15\x5d\x27\x0c\x0e\x49\x81\xd1\xc9\xcf\xb0\x1c\ +\x3f\x5c\x10\x13\x23\x71\x26\x38\x34\x92\x47\x7b\xa1\x37\x93\x0f\ +\x99\x21\x0c\xcb\xc3\x90\x35\x8b\x0b\x37\xc6\x5a\x02\x8c\xcc\xc0\ +\x0c\xe6\xfd\x9f\x54\xf5\x37\x81\xc0\x36\x9f\x6d\xb2\x66\x38\xf8\ +\xb0\xec\xe3\xc8\x71\x9d\xdd\x21\xef\x8f\xc0\xd8\x54\x15\x3d\xb9\ +\x29\xb8\x0d\xfa\x17\xa8\x8a\xaa\x39\xe1\xdc\x0c\xb6\xd9\x37\x5f\ +\x5d\x41\x8c\x5a\xef\x2f\xd0\x77\xdd\x2d\xc0\x18\x7d\x56\xc1\xe9\ +\x4b\xe3\x30\x1e\xbe\xc7\xf4\xec\x02\x96\x68\xdb\xb5\x7a\x10\xce\ +\xcc\x6d\x77\x51\x65\xfd\x2f\x32\x63\x87\xc0\x36\xfa\x0a\xaf\x71\ +\xec\xec\x30\x0e\xc6\xaf\x61\xff\xe1\x2b\x88\x9d\x1c\x40\xa6\xef\ +\x09\x85\xda\x73\xdb\x1c\xff\x06\x74\xfc\x02\xb7\x71\x05\xb6\x87\ +\x1e\x9b\x8a\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x01\xd4\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ +\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\ +\x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\ +\xa8\x64\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\ +\x72\x65\x00\x70\x61\x69\x6e\x74\x2e\x6e\x65\x74\x20\x34\x2e\x30\ +\x2e\x32\x31\xf1\x20\x69\x95\x00\x00\x01\x44\x49\x44\x41\x54\x38\ +\x4f\x7d\x93\x31\x6a\x86\x40\x10\x85\x2d\xfc\x3b\x11\x41\x5b\x6f\ +\xe0\x01\x2c\xed\x72\x05\x0b\x8b\x94\x5e\x23\x8d\x76\xb1\xf4\x00\ +\x92\x13\x58\x8a\x95\x4d\xc0\x74\x69\x2d\x12\x4c\xb0\x10\x6c\x0d\ +\xca\x9f\xc9\x3c\x41\xd9\xd5\x25\xc2\x87\x3b\xbb\xf3\xde\xee\x0e\ +\x3b\x1a\x11\x6d\x4c\xd3\xf4\x98\xe7\xf9\x43\x5d\xd7\x4f\xeb\xba\ +\x3e\xf3\xdc\xc7\xbe\xf6\x1f\xc7\x60\x9e\xe7\x77\x4d\xd3\x1a\xe6\ +\xcb\x30\x8c\xcf\x30\x0c\xd7\xa2\x28\xa8\xeb\x3a\x1a\xc7\x91\x53\ +\xae\x62\x20\x07\x1c\x8a\xd8\xb6\x4d\x96\x65\x51\x14\x45\xbc\x2c\ +\x0b\x77\xa4\xc0\x71\x9c\x43\x6c\x9a\xe6\x31\x06\x4d\xd3\x70\x8a\ +\x2c\x06\x52\xe0\xba\xee\x96\x9c\xa6\x29\xf1\x95\x28\x49\x92\xc3\ +\xc0\xf3\x3c\x4e\x91\xc5\xe0\x18\x94\x65\x49\xb7\xdb\x6d\x4b\x5e\ +\x96\x85\xa7\x68\xfb\xef\x06\x20\xcb\x32\x4c\xab\x0d\x70\xc4\x3d\ +\x11\x27\xc0\x87\xbf\x68\x80\x7a\x0c\xc3\x80\xa5\xab\x01\x40\xb1\ +\x44\x81\x8a\x73\x41\x25\x03\xb8\x63\x17\x95\x50\x44\x2c\xa8\x64\ +\x00\x70\x4f\x95\x48\x44\x2c\xe8\xc5\x00\x20\x41\x25\x14\xe1\x8d\ +\x7e\x91\xab\x34\xa8\xaa\xea\x22\x38\xc3\x57\xfd\xe1\x2b\xbf\x28\ +\x0d\x00\x3f\x65\xa5\x10\xa0\x4e\xdc\x37\x77\xee\x99\x6f\xa5\x18\ +\xf4\x7d\x4f\xdc\x13\x92\x50\xd7\x75\x8a\xe3\x58\xea\x8d\x8b\x50\ +\x84\xdf\xc1\x9d\x85\x80\x7c\xdf\xa7\xb6\x6d\x79\x5a\xce\x91\x82\ +\x33\x7c\xc4\xb7\x20\x08\x5e\xb9\x2b\x67\xd5\x3a\x11\x69\x7f\x35\ +\x3c\x4f\x0e\x48\x78\xb4\xa4\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ +\x42\x60\x82\ +\x00\x00\x03\x1f\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x0f\x00\x00\x00\x0f\x08\x06\x00\x00\x00\x3b\xd6\x95\x4a\ +\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\ +\x09\x70\x48\x59\x73\x00\x00\x0e\xc2\x00\x00\x0e\xc2\x01\x15\x28\ +\x4a\x80\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\ +\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\x20\x76\x33\x2e\ +\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\x8e\x49\x44\x41\x54\ +\x38\x4f\x65\x92\xed\x4b\x53\x71\x14\xc7\xef\x5f\xe3\x0b\x43\x8d\ +\x82\x32\x96\xa1\x88\xa4\x88\x82\xde\x40\x37\xe7\x1e\x02\xdd\x26\ +\xb5\x9a\x6e\x73\x6b\x2e\x7c\x68\xd3\x70\xea\x9c\x3d\xa9\x10\xcb\ +\x59\x54\x93\x32\x5d\x3a\x37\x19\xae\x29\x95\x4f\xe0\x1b\x8d\x96\ +\x73\x84\x03\x5f\x48\xbe\xe9\x85\x69\xeb\xdb\xb9\xbf\xd9\x25\xf0\ +\xc5\xf7\x77\x39\x87\xdf\xe7\x9c\xef\x39\xbf\xcb\x01\x38\xa5\xfb\ +\x3d\xeb\x18\x74\x6f\xa1\xb3\x63\x0d\x6d\xb6\x35\x4a\x9d\xbe\x23\ +\x88\x1d\xc9\x9d\x63\x78\xbd\x7b\x70\x0f\x24\x28\x04\xe7\xec\x5a\ +\xc5\x7c\x18\x98\x9d\xf9\x0d\x59\x8d\x97\xe5\x06\xdd\x2b\xd0\xea\ +\x5e\x41\xa9\x18\x67\xb1\x20\xee\xe0\x20\x8d\x41\xcf\x2e\x66\xde\ +\x1f\x21\x34\xf7\x07\x56\xeb\x32\x4c\xc6\x18\x82\x04\x4e\xbd\xfb\ +\x05\xdb\x9d\x05\x5c\x57\x8f\xc1\xd8\x12\xc4\xd0\x50\x0a\x16\x4b\ +\x0c\xd7\xf8\x11\x56\x80\xc1\x95\x95\x61\x4c\x4f\x1d\xb2\x6e\xa1\ +\xb9\x34\x82\xb3\x19\xd0\xff\xfa\x27\x7c\xbe\x1f\x18\x1e\xde\xc3\ +\x03\x02\x5d\xae\x24\x9a\x0d\x11\x9c\x3f\xd7\x94\x81\x85\x63\x7f\ +\xff\x08\x2a\x65\x98\x6c\x1e\x13\x98\xc6\x40\xff\x16\xca\x4a\x7b\ +\x51\x7a\xb5\x07\xdd\xce\x0d\xea\xb8\xcb\x40\x93\x29\x86\x33\xd9\ +\x0a\x06\x32\xb8\xdb\x99\x44\x7f\x5f\x1c\x8f\x1e\x26\x31\x13\x38\ +\xc2\x90\x27\x0e\x9d\xf6\x19\x02\x81\x6d\xd2\x0e\x5a\x5b\xfd\x64\ +\x79\x01\xf7\x1c\x71\xb2\xbc\x0e\x99\xcc\x07\x69\xed\x08\xaa\xab\ +\x3d\xb4\x1c\x67\x02\xd1\x85\x34\xcd\x7c\x4c\x56\x0f\x51\x56\xe6\ +\x46\x38\x94\x12\xab\x4f\xbe\xfd\x8a\xda\x9a\x61\xd8\xef\x6e\xc2\ +\x64\xde\x40\x93\x6e\x09\xd5\x55\x4f\x51\x54\xd8\x4e\xb0\x63\x5b\ +\x5c\x8e\x30\x63\x41\x81\x1d\xc1\xe0\x77\x11\xf6\xfb\x37\x09\x1e\ +\x25\xcb\x1b\xb8\xa9\x5f\x45\xa3\xe6\x23\xd4\xea\x45\x5c\xa1\x7b\ +\x5c\x9d\x6c\x16\x32\xe9\x04\xea\xe5\x01\xf8\xc6\x0e\x60\xb5\x44\ +\xc1\xf3\x3d\x98\x9c\x8c\x63\xc2\xff\x05\xae\xde\x18\x34\x9a\xe0\ +\x09\xf8\x09\x12\x49\x1f\x2e\xe5\xdf\xc6\xc5\x0b\xfa\x4c\x75\x41\ +\x37\x9a\xa6\xf1\xe4\x71\x8a\x3d\x87\xc9\xf8\x01\x6a\xd5\x38\x15\ +\xf4\x42\xab\x9d\x13\x3b\xf2\xfc\x73\xda\x74\x83\xe8\x8a\x9b\xf0\ +\x6f\xa1\xa3\x7d\x91\x6c\xcd\x33\x50\xd8\xaa\xc3\xf1\x0d\x76\x7b\ +\x66\xc6\x7f\x1d\xd5\xea\x18\xea\xe4\x11\xea\x6a\xa4\xa7\x8b\xb1\ +\x02\xdc\xe8\xe8\x1a\x14\x8a\x17\xe2\x73\xb4\xb5\xad\xc0\x68\x5a\ +\x62\x33\xea\x09\xd4\x10\xc8\xf3\x3e\xd4\xd4\x06\x20\xaf\x8f\x42\ +\x2a\x0b\x91\xe5\x5b\x19\x38\x12\x49\xa0\xa2\xc2\x85\x56\x73\x14\ +\x36\xdb\x67\x64\x67\x2b\x71\x36\x4f\x07\x4d\x63\x98\x75\x2c\x29\ +\x71\x23\x2b\xab\x92\x3a\xb6\xa0\xaa\xea\x25\x7d\xcd\x68\x68\x38\ +\xf9\xc3\x84\x43\x50\x51\x61\x33\xf2\xf3\x0d\x2c\x59\x5c\xac\x44\ +\x79\x79\x3f\x54\xb4\xd5\x9c\x1c\x15\xcb\x75\x76\x2d\x23\x37\x47\ +\x4b\xce\xde\xb0\x58\x90\x08\xff\x2f\x83\xc1\x45\x85\x5a\x70\x59\ +\x62\x46\x5e\x6e\x06\x3e\x2d\x70\x7f\x01\xfd\x94\x6b\x79\x96\xb3\ +\x58\xc6\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ \x00\x00\x03\x81\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ @@ -52505,111 +52502,185 @@ \x55\x1d\x19\x19\x19\x1e\xe8\x09\x14\xc3\xfc\x04\xee\x22\xb9\x5c\ \x9f\x94\x2f\x3d\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ \ -\x00\x00\x00\xf7\ +\x00\x00\x03\x8c\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ +\x00\x00\x10\x00\x00\x00\x0f\x08\x06\x00\x00\x00\xed\x73\x4f\x2f\ \x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ \x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\ \x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\ -\xa8\x64\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\ -\x72\x65\x00\x70\x61\x69\x6e\x74\x2e\x6e\x65\x74\x20\x34\x2e\x30\ -\x2e\x32\x31\xf1\x20\x69\x95\x00\x00\x00\x67\x49\x44\x41\x54\x38\ -\x4f\xc5\x90\x41\x0e\xc0\x20\x08\x04\xfd\xff\xd7\x78\x14\x95\x1a\ -\x70\x21\x2d\x12\x4d\xd3\xc3\xe8\xc6\xc1\x4d\xb4\x31\xf3\x11\x63\ -\xe9\x1b\x82\x03\x2b\xc6\xd2\x37\x22\xba\xf9\xaf\x00\xc1\x81\x15\ -\x33\x24\x17\xb5\x58\x71\xce\x42\x10\x88\xb8\xb7\x27\xba\xa1\x8c\ -\x52\x81\xe6\x88\x38\xc4\x39\x0b\x41\x54\x99\x21\x29\x10\x87\x38\ -\x67\x21\x08\x44\xdc\xf7\x9f\x98\x81\x45\x5b\x05\x19\x8f\x87\x75\ -\xb8\x5d\xdd\x5e\x92\x33\xf6\x07\x9e\x02\x00\x00\x00\x00\x49\x45\ -\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x03\x4e\ +\xa8\x64\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\ +\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\x20\x76\x33\x2e\ +\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\xfb\x49\x44\x41\x54\ +\x38\x4f\x45\x93\xd9\x6b\x13\x61\x14\xc5\xf3\x4f\x08\x82\x8a\x88\ +\x0b\x8a\x88\xfa\x2a\x88\x28\xbe\xf8\x50\x44\xb4\xb8\x81\x20\x3e\ +\x88\x0f\x6e\x55\x5f\x55\xf0\x41\x2a\x22\xfa\xf9\xa0\xb8\x96\x16\ +\x49\x25\x55\x6b\x13\x63\xb5\x4d\x63\xb5\x62\x2d\x5a\xa5\x6a\xd3\ +\xba\x34\x5d\x32\x33\xc9\x64\x9b\x25\xb3\x66\xe4\x78\xa6\x15\x0d\ +\x5c\x72\xf9\x96\xdf\x9c\x7b\xee\xfd\x22\xe1\xef\xb7\x6f\x8a\xc0\ +\x29\x8a\xba\xad\x30\xe4\xd9\xff\xc0\x99\x12\x6e\xa9\x47\x04\xd6\ +\x10\xf3\xc9\xbf\x7b\x61\xe4\x45\xe0\x96\x44\x78\xe7\xdf\x65\x5f\ +\xff\x2e\xbc\xea\x20\xe3\x0d\x2c\xa5\x07\xb6\xd2\x0b\xb7\xdc\x07\ +\xe9\xe5\x56\x98\xd9\xcb\xcc\xd3\xb0\xf3\x7d\xb0\x0b\x7d\xf0\xb4\ +\x01\x78\xd5\x21\xe1\x1b\xbf\xe6\x20\xe1\x97\xdd\xf2\xa0\xa8\xe5\ +\x5a\x78\xf8\x0a\x5c\x35\x06\x73\xf2\x1e\x41\x51\x48\x5d\xab\xa0\ +\x7f\x6d\x82\x2d\xb7\xa3\x36\xdd\x0a\x47\x6d\x87\x36\x7e\x0e\xbe\ +\x96\x84\x5b\xa1\x32\x2a\x89\x84\xb2\x42\x7a\xe5\xeb\x05\x64\x3b\ +\x56\x41\x1b\x39\x0a\xaf\xd4\x0e\xaf\xd2\x01\xf5\xd9\x32\x98\x5f\ +\x0e\x33\x7f\x04\x47\xba\x01\x35\xbd\x05\xf9\xf4\x36\x38\xf9\x76\ +\xc2\xfa\x51\x77\x0a\x21\x40\x16\x96\xdc\xc3\xaf\xdf\x45\xe5\xf3\ +\x49\x48\xb1\x79\xd0\x07\x1b\xe0\xe5\x9a\x51\x4d\xad\x43\xed\xf3\ +\x7e\x78\xca\x35\x54\x52\xeb\xa1\x26\x57\x52\xcd\x1d\x98\x54\x63\ +\x17\x5e\x21\xf4\x63\x16\x60\x17\x52\x94\x7d\x1f\x56\xee\x2e\x8c\ +\xe1\x03\x28\x25\x16\x12\xb2\x0d\xfa\xd0\x4e\x98\x23\x87\xb8\xb6\ +\x17\xda\x9b\x8d\x70\xa5\xab\x2c\xad\x15\xb5\x99\x07\x70\x8a\xfd\ +\x08\x1c\x02\x02\x77\x82\x86\xd0\x9c\x6a\x27\xa5\x3e\x84\x9b\xbb\ +\x04\x63\xa8\x81\x97\x1b\xe1\xcc\xdc\x43\x2d\x7b\x11\x66\xe6\x34\ +\x9c\xec\x79\xd4\xcb\x2d\xa8\x1b\x09\x7a\x90\x40\xdd\x24\xc0\x9d\ +\x16\x11\x4f\xeb\x17\xb9\x54\x03\x26\x63\x4b\x21\x3d\x5e\x88\xe2\ +\xd3\xf9\xa8\xf4\x52\x7a\xe6\x2c\x7e\xbb\x32\x65\x66\x60\x4d\x5d\ +\x85\xfe\x61\x17\xaa\xbd\x6b\xa1\xc6\x17\x41\x49\xac\x46\x79\xf8\ +\x08\x21\x9f\x58\x82\x95\x11\xc6\xc4\x0d\x54\x47\xce\x40\xfb\x72\ +\x1c\xc6\xc7\xdd\xd0\xdf\x6e\x81\xfe\x7e\x27\x3c\xf5\x05\xec\x99\ +\x5b\x30\x47\x4f\x12\x78\x14\xf6\x78\x13\xf3\x26\x18\xe3\xe7\xd9\ +\xea\x28\x02\x7b\xe2\x6f\x17\x68\x88\x39\x45\x63\x94\x36\x38\xd3\ +\x17\x51\x79\xb9\x1a\xd5\xfe\x4d\xac\xfd\x20\x63\x3f\xfd\xd8\x0e\ +\x73\x78\x37\x02\x2d\xca\xda\x63\xb0\xe4\x18\x9c\xd2\x5b\x0e\xd8\ +\x6c\x17\xf2\x04\xa4\x69\x4c\x1b\x2c\xe9\x26\x94\xae\xa5\x28\x26\ +\x97\xc3\x1e\x3b\x41\xc9\x6b\x60\x7e\x6c\x64\x7e\x0c\xa5\xf8\x02\ +\xaa\xda\x01\x5f\xef\xe2\xb9\x87\x04\x0d\xfc\x07\x84\x8e\xda\x52\ +\x0b\x72\xdd\x9b\x21\x77\x6f\x60\x9f\x6f\xc3\x2f\x47\x51\x8c\x2f\ +\x61\x49\xfb\x50\xaf\x25\x61\x8c\x9e\x82\xf4\x64\x31\x4b\x3d\xce\ +\xc9\xec\xa2\x82\x10\xa0\x86\x93\xa8\x0a\xb7\xf2\x4e\x68\x63\xcd\ +\x90\x5f\xef\x21\x9d\xed\x94\xa3\x3c\xd4\x29\x72\x9d\x2b\x38\x89\ +\x27\x38\x75\x71\xf6\xbd\x03\xc6\x8f\x66\x28\xe9\xed\xf0\x08\xf8\ +\x37\x89\x81\xa7\x09\x4f\xfb\x26\x1c\x35\x25\x9c\x42\x42\x58\x4a\ +\x18\x49\x8e\x77\x8f\xc8\x25\x37\x42\xff\x7e\x81\x87\x7b\x09\xa0\ +\xa1\xf9\x6e\x46\x9c\xed\x1e\x10\x9e\x9e\xe1\x5b\xd0\xe7\x1e\x54\ +\xa8\xc2\x37\x7e\x72\x71\x94\x30\x06\x37\x7d\x73\x54\x18\xbf\xae\ +\xf3\x45\x3e\x17\x7e\xed\x9b\xf0\x8c\xb1\xb9\x75\x63\x9c\x7b\x59\ +\xca\x2f\xf2\x72\x24\xf2\x07\x1c\xe6\x0a\xfa\x25\xad\x94\xa9\x00\ +\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x03\xb8\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ +\x00\x00\x0f\x00\x00\x00\x0f\x08\x06\x00\x00\x00\x3b\xd6\x95\x4a\ \x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ \x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\ \x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\ -\xa8\x64\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\ +\xa8\x64\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\ \x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\x20\x76\x33\x2e\ -\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\xbd\x49\x44\x41\x54\ -\x38\x4f\xad\x90\x5b\x4c\x92\x61\x18\xc7\xbf\x2b\x2a\x75\x1d\x3c\ -\xa0\xc8\xc1\x13\x22\x28\x68\x8b\x50\xc1\x53\x28\x09\x22\x0a\x86\ -\x86\x82\x98\x76\xe1\xb4\x56\xcd\x19\x1e\x9b\x5b\x69\x5d\x24\xe5\ -\xb2\xad\x35\xab\x99\x7d\xce\xd4\xec\xb3\x41\x88\x69\xa0\xa6\xce\ -\x59\x36\xb2\xd2\x50\xe7\xda\xea\xc2\x74\x1d\x6e\x5a\x5b\x6b\xfa\ -\x04\xec\x4b\x72\xf3\xd2\xdf\xd5\xf3\x3e\xef\xff\xf7\xbc\xcf\x5e\ -\x64\xc7\xa9\x9c\x3b\x16\x54\xf1\x46\xae\x3c\x3d\x9d\x71\xb7\xf4\ -\x85\xe8\x59\x91\x25\xd9\x56\x38\x9c\xf0\x5c\x3d\xc4\xaf\xce\x31\ -\x73\x49\x78\xcc\x4d\xe3\x52\xb1\xe0\x82\x5d\x03\xce\xda\x29\x9f\ -\x9d\xc9\xba\x7d\xce\x96\xf5\x5b\xf7\x41\xb1\xa1\x5b\x50\x40\xd5\ -\x52\x36\x9c\x79\x9b\x0e\xda\x11\x01\x64\x3e\x62\x2f\xc8\xfb\x39\ -\x1c\x97\xf8\x8f\xfa\x79\x35\xd4\xce\xab\xa0\xf2\xb5\x43\x7e\x25\ -\xeb\xac\x59\x54\xc2\xe5\xb5\x42\xa8\x59\x56\x40\xd1\x48\xd2\x37\ -\xa5\x91\x6b\x97\x63\x31\xb3\xd2\xde\xa8\x05\x85\x31\xfa\x57\x1a\ -\x4a\xb7\x49\x7a\xe9\x7e\xb8\x8e\x20\xba\xd9\x5c\x68\xfc\xa4\x85\ -\x53\x2f\xa5\x58\xed\x52\x2e\x34\xad\x69\xe0\xfc\xa2\x1c\xf2\xcd\ -\x71\x33\xaa\x41\x9e\x1a\x8f\xb9\x10\x77\x33\xaa\x84\x68\xc8\x4a\ -\x0a\x1a\xac\xc3\x5b\x08\xe2\x58\x19\x9a\xbf\x9f\x84\xba\x65\x87\ -\xbc\xaa\x86\x4a\xbb\x0c\x54\xe6\xd8\xf1\x3c\x03\x97\x86\x47\xb6\ -\x90\xd2\x19\x54\xcc\x6f\x0b\x7c\x8c\x1f\x11\xa4\x6c\x4a\x0c\x57\ -\xbe\x6a\xa1\xf1\x4b\x01\x54\xcc\x4b\xd7\xf3\xcc\x3c\xab\x6a\x80\ -\x1b\x86\x5f\x6f\x4b\xfc\x9d\x80\x13\x78\x89\x20\x25\xa3\x42\xb8\ -\xb4\x9a\x0f\x0d\x2b\xb9\x50\xf7\x59\x0e\xe5\xb3\xa9\x20\xc3\xd8\ -\x20\x42\xc3\x5d\x1f\xeb\x44\x69\x89\x12\xc8\xcd\x11\x90\x61\x08\ -\x03\x51\x1f\x0d\x8e\x62\x54\xe0\xdf\x27\x02\xaf\xcd\x07\x10\xcd\ -\x70\x02\x1c\x37\xf1\x40\x63\xe5\x83\xac\x8f\x0d\xe2\x6e\x26\xa4\ -\x39\x64\x09\xc6\x4c\xc7\x7d\x44\x66\x62\x80\xc4\x10\x0a\x72\x2b\ -\x1d\x94\x93\x74\xc8\x1e\x0b\x86\x4c\x2b\x15\x62\x6e\xee\xdf\x7c\ -\x04\x29\x7f\x27\xdc\x14\xb6\x23\xa9\xd7\x3f\x24\x01\x25\x5a\x8f\ -\x1a\xc9\xeb\x52\x0b\x05\xc4\xc3\x01\xc0\x6a\xf6\x72\x0f\x28\x99\ -\xe1\xb7\x6a\xa7\x79\x32\xfc\xb8\x85\x14\x94\x4c\xe1\x77\x10\x27\ -\x44\x06\x32\x48\x2d\x64\x48\xec\xf1\x01\xd1\xa0\x2f\xd0\x9b\xf6\ -\xb8\x07\x14\x4c\x1e\x2e\xc9\x1f\x3b\xf8\x51\x31\xc4\x2a\xc3\x5b\ -\x2e\x12\xbb\x48\x05\xb1\xf7\x7c\x6d\x69\x06\x12\x64\x58\x02\x41\ -\xd0\xe5\x03\x91\x7a\xcf\x51\x5e\xc7\x5e\x08\x6e\xd8\xe5\x1e\x90\ -\xf9\x94\x73\x20\xcb\x14\x31\x9e\x3d\xc8\xf8\x99\xda\x43\x7b\x9f\ -\x8c\x92\x6c\xfc\x76\x7f\x3b\xbf\xc3\xef\x47\x9a\x91\xe4\x58\x99\ -\x04\x71\x0f\xbc\x81\xa9\xf7\x34\x33\xf4\x04\x66\xe8\xc5\xdd\x40\ -\xad\x21\xb8\x07\x38\x11\x61\x41\xac\x23\x0f\xa9\x73\xa2\x7e\x1a\ -\x48\x4c\x34\x10\x0f\x50\x40\x88\xf9\x43\x7c\xa7\xf7\x06\xa7\xd5\ -\xeb\x4f\x84\xde\x03\x73\xca\xce\x2c\xa5\x9a\x00\xe1\x57\x09\x39\ -\x2e\xf1\x7f\x92\x50\x5f\x52\x5c\x3b\xb1\xfe\xd0\x2d\xef\x89\xe8\ -\x1b\xfb\xec\xec\x16\xaf\xa9\xc8\x6b\x9e\x4f\x22\xaf\x7b\x94\x86\ -\xb7\x10\x58\x78\x6c\xa7\x40\x90\xbf\xe1\xcb\x27\xde\xa2\xbe\xca\ -\x4e\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x01\xd4\ +\x35\x2e\x36\xd0\x83\xad\x5a\x00\x00\x03\x28\x49\x44\x41\x54\x38\ +\x4f\x6d\x93\x5b\x4c\x92\x01\x14\xc7\xbf\x1e\xda\x6a\xbd\x54\xab\ +\x97\xd6\x43\x97\xd5\xd6\xcd\x74\xcd\xd5\x94\x74\x5d\xd1\xfa\xac\ +\x0c\xcb\x34\x45\x58\x11\x68\xa2\x0e\x02\x04\x3f\x4b\x51\x19\xa0\ +\x86\x5c\x04\x8b\x55\x2a\x4a\x6a\x7c\xdd\xd4\x95\xe1\x66\x52\x91\ +\xe9\xd4\xac\x45\x4d\x5b\x45\x37\x69\x76\xd3\xb6\xa6\x49\xfe\x33\ +\x56\xad\xdb\xd9\xfe\xdb\x79\x38\xbf\x73\xd9\xfe\x87\x20\x7e\x0b\ +\xcb\xd9\x3b\xb3\x4c\x0d\x7d\x1b\x4e\xb6\xf5\x16\x1a\x3a\xaf\xde\ +\xca\xb9\x7d\xce\x9b\xe9\x6c\x70\xc9\xea\x1c\x54\x5a\x61\xf3\xda\ +\xdd\xbc\x92\x19\xbf\xd7\xff\xca\x0d\xf6\xde\xa0\xd3\xb7\xef\x1b\ +\x2b\xfb\x9d\x03\xf5\x2f\x5b\x3e\xd9\x5e\xd4\x8f\x95\x0d\x50\x7e\ +\x49\xf7\xce\x31\x96\x23\x79\x24\xaa\xa4\xfa\xa1\xb0\xa4\x53\x1d\ +\xc5\x2e\x5d\xf4\x47\x03\xbd\xbd\x77\x55\x91\xbb\xae\xb1\xcc\x63\ +\x1a\x6a\x78\x75\xd1\xdf\xf6\xb1\x07\xe6\x1e\x3b\x8e\xde\x92\x43\ +\xd1\xc1\x46\x7c\x75\x0a\x98\xea\xea\xf1\xf8\xe2\x3e\xdf\x56\x0d\ +\xed\x08\xdb\x43\x2d\x0c\x34\xd0\xdb\xdc\x33\xf5\xed\xad\x06\x79\ +\x17\x7f\x48\xd7\x2f\x9d\x70\x0c\xd2\x70\x7d\xec\x46\xfb\xd0\x3d\ +\xd0\x2f\x5a\xa0\xba\xa1\xc3\xbe\x0a\x03\x36\x1a\xda\x11\x69\xae\ +\x9b\x08\xaf\x39\xec\x5b\x52\x9a\xa8\x9a\xbb\x38\x72\x1a\xa1\xad\ +\xea\x8d\x48\xb3\xd5\xf4\xa7\xb7\xa6\xf8\xb5\x1e\x11\x6c\x2f\xad\ +\xa0\xdf\xd4\xa2\xde\xeb\x80\xae\xe3\x02\xb2\xea\x5a\xc0\x36\xde\ +\x07\x69\x6e\x43\xf4\x79\x0a\x02\x97\x72\x7c\x75\x15\xcb\xb3\x22\ +\x96\x1f\x4c\x98\x68\x6f\x7e\x56\x65\xf7\x08\xb7\x56\x0c\x4d\x1f\ +\x05\xab\xb7\x14\x5a\x77\x01\x14\x8d\x16\x08\x6b\xaf\xe0\xa0\xb9\ +\x0f\x49\xc6\x47\x48\xb0\x9f\x87\xb8\xa3\x04\xa9\xae\x7c\x2c\xb1\ +\x6e\x1e\x5e\x29\x3c\x20\x26\xcc\x97\x06\x6f\xe4\xd4\x8e\x8c\x71\ +\xf4\x65\xc8\xb8\x9a\x01\xcd\x83\x5c\x88\x2e\x28\xc1\xb3\xd0\x38\ +\x54\xee\x01\xf7\xf8\x13\x24\x97\xdf\x04\xbf\xa9\x1c\x54\x97\x1e\ +\xb1\x97\x33\x30\xff\x78\xe4\xe8\x52\x69\x92\x93\x30\xd2\xaf\x9f\ +\xc9\x6b\xbe\xf8\x53\x0d\x6e\x24\x1b\x25\x48\x6f\xca\x44\x7a\x33\ +\x05\x8e\xbd\x72\x12\xea\x01\x5b\xf3\x14\x89\xda\x46\x70\x4f\x89\ +\x90\x76\x2d\x17\xeb\x6d\xfb\x30\xaf\x60\xbd\x7f\x59\x16\xf7\x31\ +\x51\x6c\x7f\x76\x5d\x52\xf9\x79\x4c\x78\xf2\x03\x0e\xa8\x2f\x23\ +\x41\xa7\x00\xaf\xe9\x30\xd8\x4e\x09\x62\x6d\x15\x88\x2b\x75\x63\ +\x4f\x5e\x0b\x64\x8a\x28\xc8\x8f\x6d\x02\x3b\x7f\x39\x16\xca\x98\ +\xa3\xc1\x1c\x41\x2b\x91\x63\xb9\x2b\x17\x59\xdf\x0d\xa7\x5a\x3e\ +\x81\x67\xf0\x21\xa1\xa0\x1e\x71\x96\x2c\xc4\x5d\x4c\x02\x49\xf3\ +\xb0\xcd\x64\x44\x5c\x9e\x0b\xd4\x24\x8c\xaf\x42\xc4\xec\x9a\x8a\ +\x50\x3e\x6b\x38\x88\xc9\x3d\x42\xa4\x64\xd3\x6b\x32\x4d\x4f\x3c\ +\x3c\xfd\xdb\x71\x8e\x6e\x08\x89\xea\x87\xd8\x58\xa0\x44\xf8\x89\ +\x58\x6c\xaa\xda\x0d\x69\x2e\x13\x4a\x45\x78\x40\xdf\xe1\x1d\x31\ +\x44\x40\xe4\xf6\x29\x83\x44\x28\x99\x3d\x5d\xa0\xee\x54\x71\x35\ +\x03\xbe\xfd\x9a\xe7\x13\xa4\xb2\x0b\xa1\xda\x42\x84\x98\x58\x60\ +\x14\x26\xe1\xa8\x3c\x32\x00\xfd\xad\x18\x92\x78\x1e\x30\x0a\x83\ +\xa5\x5a\x90\x40\xb9\x1a\xf6\xe6\xdf\xf3\x85\xc9\xce\x8c\x6f\x2d\ +\x96\x82\xcc\xe3\x83\x99\xa9\x81\x4a\x2d\x84\x44\xca\xfa\x67\xf2\ +\xe4\x74\xef\x2f\x9b\x86\x44\x67\x2f\xd8\x25\x6d\x2e\x62\x88\xad\ +\x1e\x86\x40\x34\xbc\x59\x50\x34\xba\x25\xdd\xe1\x8f\xe0\xd1\xa3\ +\x1b\x38\x15\x23\x3f\xd7\x26\x49\xe2\xd5\x7f\x9f\x63\xce\xa2\x88\ +\x69\x41\x5b\x32\x82\xc3\xe2\x95\x62\x46\xa2\xd2\xb9\x8e\x25\x7b\ +\x1c\xc2\xe4\xb7\xae\x8d\x3e\x98\x23\x16\xcd\x7e\xff\xe3\xde\x77\ +\x3f\xe1\x6f\xc7\xfa\xe9\xa7\x0a\xc9\x2b\x9f\x00\x00\x00\x00\x49\ +\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x03\x75\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ \x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ -\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ -\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\ -\x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\ -\xa8\x64\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\ -\x72\x65\x00\x70\x61\x69\x6e\x74\x2e\x6e\x65\x74\x20\x34\x2e\x30\ -\x2e\x32\x31\xf1\x20\x69\x95\x00\x00\x01\x44\x49\x44\x41\x54\x38\ -\x4f\x7d\x93\x31\x6a\x86\x40\x10\x85\x2d\xfc\x3b\x11\x41\x5b\x6f\ -\xe0\x01\x2c\xed\x72\x05\x0b\x8b\x94\x5e\x23\x8d\x76\xb1\xf4\x00\ -\x92\x13\x58\x8a\x95\x4d\xc0\x74\x69\x2d\x12\x4c\xb0\x10\x6c\x0d\ -\xca\x9f\xc9\x3c\x41\xd9\xd5\x25\xc2\x87\x3b\xbb\xf3\xde\xee\x0e\ -\x3b\x1a\x11\x6d\x4c\xd3\xf4\x98\xe7\xf9\x43\x5d\xd7\x4f\xeb\xba\ -\x3e\xf3\xdc\xc7\xbe\xf6\x1f\xc7\x60\x9e\xe7\x77\x4d\xd3\x1a\xe6\ -\xcb\x30\x8c\xcf\x30\x0c\xd7\xa2\x28\xa8\xeb\x3a\x1a\xc7\x91\x53\ -\xae\x62\x20\x07\x1c\x8a\xd8\xb6\x4d\x96\x65\x51\x14\x45\xbc\x2c\ -\x0b\x77\xa4\xc0\x71\x9c\x43\x6c\x9a\xe6\x31\x06\x4d\xd3\x70\x8a\ -\x2c\x06\x52\xe0\xba\xee\x96\x9c\xa6\x29\xf1\x95\x28\x49\x92\xc3\ -\xc0\xf3\x3c\x4e\x91\xc5\xe0\x18\x94\x65\x49\xb7\xdb\x6d\x4b\x5e\ -\x96\x85\xa7\x68\xfb\xef\x06\x20\xcb\x32\x4c\xab\x0d\x70\xc4\x3d\ -\x11\x27\xc0\x87\xbf\x68\x80\x7a\x0c\xc3\x80\xa5\xab\x01\x40\xb1\ -\x44\x81\x8a\x73\x41\x25\x03\xb8\x63\x17\x95\x50\x44\x2c\xa8\x64\ -\x00\x70\x4f\x95\x48\x44\x2c\xe8\xc5\x00\x20\x41\x25\x14\xe1\x8d\ -\x7e\x91\xab\x34\xa8\xaa\xea\x22\x38\xc3\x57\xfd\xe1\x2b\xbf\x28\ -\x0d\x00\x3f\x65\xa5\x10\xa0\x4e\xdc\x37\x77\xee\x99\x6f\xa5\x18\ -\xf4\x7d\x4f\xdc\x13\x92\x50\xd7\x75\x8a\xe3\x58\xea\x8d\x8b\x50\ -\x84\xdf\xc1\x9d\x85\x80\x7c\xdf\xa7\xb6\x6d\x79\x5a\xce\x91\x82\ -\x33\x7c\xc4\xb7\x20\x08\x5e\xb9\x2b\x67\xd5\x3a\x11\x69\x7f\x35\ -\x3c\x4f\x0e\x48\x78\xb4\xa4\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ -\x42\x60\x82\ +\x00\x00\x03\x3c\x49\x44\x41\x54\x38\x4f\x4d\x54\xdf\x6f\x94\x45\ +\x14\x3d\xf7\xce\x7c\xdf\xb7\xb5\x0b\xd9\x6e\xdb\x14\x5b\x0c\x62\ +\xc2\x03\x6d\x89\x80\xfe\x01\x26\x3c\xe0\x43\x0b\x94\xdd\xcf\xae\ +\x0a\x2f\xc4\x04\x22\x86\x08\xc1\x44\x2b\x3f\x16\x35\xe1\x89\xc4\ +\xc6\xa8\x04\x23\x88\xd1\x52\xac\x1b\x10\x56\x82\x18\x7e\xfc\x01\ +\x3c\x48\x59\x14\x13\x21\x3e\x68\x8b\x15\xb7\x36\x96\xb2\xdf\x8f\ +\x99\x6b\xa6\xd5\x84\x79\x99\x87\x39\x73\xe6\xdc\x73\xef\x19\xc2\ +\xc2\xa2\xff\x76\x59\xe6\x67\x57\x0e\x64\xfd\x6d\x6b\x59\xad\x6b\ +\x85\x3c\x41\x24\x74\x5f\xf8\xb7\x1b\x30\x57\xce\x36\xe2\xe3\x77\ +\x66\x67\x6b\x8f\xe2\x09\x02\x2a\x1f\x02\x95\xcb\xb0\xdb\x73\xb9\ +\x03\x45\xad\xf7\x66\x8d\x59\x94\x18\x0b\x43\x02\x08\x81\x01\xf8\ +\xcc\x98\x53\xea\x41\x25\x4d\xde\xff\x68\x66\xf7\x01\x41\x59\xdc\ +\x31\x01\xa1\x02\xc6\x6c\x39\x9f\x1f\xd9\x20\x28\xfd\xed\x2e\x2a\ +\x32\x8e\x98\xad\x10\x88\x1c\x07\x04\x62\x95\x85\x6a\x61\xc6\x45\ +\xa5\xce\xbc\xf5\xd7\x73\x61\x18\x8e\x2d\x48\xdf\x96\xcf\xed\x7f\ +\xcd\xf2\x3b\x53\x26\x8d\x29\x6a\x78\xa4\x35\x29\x56\x10\xcf\x03\ +\x89\x40\x8c\x81\x58\x03\x9b\xa4\x22\x41\x90\x74\x68\xed\x1f\x83\ +\x39\xfc\xf1\xf4\xcc\x10\x3d\x15\x04\x2b\x8e\x65\x17\x8d\x73\x62\ +\xbc\x24\x7a\xc8\x4f\xbe\x3d\x44\x8b\xd7\xac\x46\xad\xf4\x12\x98\ +\x19\x4e\x41\x12\xc7\xe8\x3d\x7d\x0a\x73\xb7\x7f\xc6\xaf\x07\xcb\ +\xa2\x82\xc0\x92\xd2\x76\x67\x6c\xd6\xd2\x9e\xb6\xb6\x23\x61\x9a\ +\xee\x99\x25\x32\x12\xc5\x6a\x55\xe5\x6b\x2c\x59\xff\x3c\x26\xab\ +\x55\xd4\x06\x07\xe7\x5f\xef\x19\xf9\x12\x5d\x9b\x0b\x98\xba\x76\ +\x0d\xe3\x1b\x37\x00\x4a\x9b\x2c\x89\x3a\xc3\xea\x28\x7d\xde\xda\ +\x3e\xbe\x2c\x89\x7a\x13\x56\x42\xa9\x61\x23\x06\xab\x46\x4f\x61\ +\x49\x5f\x3f\x26\x2a\x15\xd8\x24\x41\x57\x69\x10\x53\x97\xbe\xc7\ +\x78\x21\x04\x43\x00\xad\xac\x27\x42\x13\x7e\xf0\x0b\x55\xdb\x3b\ +\xea\x8f\x45\x8d\x16\x21\x12\xb0\x22\x49\x13\x58\x93\xa2\xfb\xe4\ +\x67\xe8\x2c\x16\x41\x20\xdc\x3b\x77\x0e\x37\x5f\xde\x02\x26\x02\ +\x69\x0d\x58\x0b\xb6\x82\xb8\x29\x33\x47\x17\xda\x3b\xa6\x9b\xa2\ +\x46\xce\xc2\x11\x80\x20\x82\xa4\xd1\x40\xcf\x89\x13\x58\x5a\x7a\ +\x71\xbe\x03\x93\x95\x0a\x7e\xdc\xba\x05\xec\xf9\x80\xf2\x00\x6b\ +\x40\x56\x90\x34\x05\x73\x74\xb2\xad\xad\xb6\x3c\x4e\xba\x63\x66\ +\x81\x31\x6c\x9c\x61\x23\x5f\xa0\x73\x73\x01\x93\xe7\xab\xb0\x69\ +\x82\xae\x81\x4d\x98\xac\x7e\x8b\x5b\xa5\x41\xb0\xeb\x8e\xd6\xe2\ +\x19\x83\x89\x4c\xe6\x2e\xed\x6e\xcd\x0f\xbf\x60\x64\xd7\x3f\x80\ +\x41\x1c\xa9\x9e\xd1\x51\x74\xf6\xf5\xe1\x0f\x57\x73\xb1\x00\x98\ +\x14\xbd\xa7\xbf\xc2\xe3\xfd\xfd\xb8\x77\xe9\x3b\xd4\x0a\x21\xe0\ +\x69\xd3\x2c\xa2\xce\xb3\xfe\x84\x56\x64\xb3\x2b\x8f\x06\x99\x1f\ +\x90\xa6\x2a\x8d\x23\x5e\x5e\x3e\x48\x8b\xd7\x3c\x83\x9b\xc5\x02\ +\xd8\x5a\x08\x2b\xd8\x34\x85\xeb\xce\x83\x9f\x6e\xe3\xee\xd0\x90\ +\x70\x10\x58\xad\x35\x5e\x35\x0f\x9f\x9d\x1f\xa4\xed\xb9\xfc\xbb\ +\x3b\x80\x7d\x0b\x83\x14\x7b\x14\x78\xe4\x06\x88\xb4\xbf\x90\x12\ +\x67\x2c\x04\x36\x4e\x45\x3c\x9d\x74\x78\x9e\x7f\x5c\xd1\x91\x0f\ +\xee\xd7\xf7\x12\x42\x28\x47\x72\xf8\x72\xfb\xd8\x7a\x6b\x06\xa6\ +\xc5\xc2\x82\x0c\xbb\x08\x88\xb3\x10\x00\x93\x58\x0b\xcb\x10\xd5\ +\x42\x84\xcb\xac\x2f\xbc\x51\xff\x73\x53\x08\x58\x07\x70\x81\x02\ +\x0e\x81\x76\x0e\xb7\xbe\x57\x60\x7a\x3d\x63\xd2\xa6\xd8\x0a\x5c\ +\x20\x9c\x02\x25\x84\x80\x08\x0d\xad\x1b\x67\xc5\x7e\x38\x5c\xaf\ +\xbf\x09\xe7\x99\x0b\xcc\xff\x71\x16\x87\x25\x48\x77\x73\xf3\xea\ +\x8d\x7e\xe6\x95\xa7\x7d\xbd\xae\x45\x64\xa9\x12\xa0\x4e\xf8\xfd\ +\x06\x70\xf5\x9b\x28\xfa\xb4\x36\x33\x73\xfd\x91\x2f\x40\xfe\x05\ +\xdd\xec\x87\x88\x85\x9f\x3f\x1c\x00\x00\x00\x00\x49\x45\x4e\x44\ +\xae\x42\x60\x82\ \x00\x00\x02\x0a\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ @@ -52645,178 +52716,107 @@ \x50\xad\xab\x80\xde\x4e\x6b\x4c\xc5\xba\xe0\xb2\x9f\xc5\x8a\x7f\ \x7e\xce\x86\xf1\x01\x1d\x7a\x84\x89\x53\xd8\x0e\xd4\x00\x00\x00\ \x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x03\xb8\ +\x00\x00\x03\x4e\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x00\x0f\x00\x00\x00\x0f\x08\x06\x00\x00\x00\x3b\xd6\x95\x4a\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ \x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ \x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\ \x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\ -\xa8\x64\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\ -\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\x20\x76\x33\x2e\ -\x35\x2e\x36\xd0\x83\xad\x5a\x00\x00\x03\x28\x49\x44\x41\x54\x38\ -\x4f\x6d\x93\x5b\x4c\x92\x01\x14\xc7\xbf\x1e\xda\x6a\xbd\x54\xab\ -\x97\xd6\x43\x97\xd5\xd6\xcd\x74\xcd\xd5\x94\x74\x5d\xd1\xfa\xac\ -\x0c\xcb\x34\x45\x58\x11\x68\xa2\x0e\x02\x04\x3f\x4b\x51\x19\xa0\ -\x86\x5c\x04\x8b\x55\x2a\x4a\x6a\x7c\xdd\xd4\x95\xe1\x66\x52\x91\ -\xe9\xd4\xac\x45\x4d\x5b\x45\x37\x69\x76\xd3\xb6\xa6\x49\xfe\x33\ -\x56\xad\xdb\xd9\xfe\xdb\x79\x38\xbf\x73\xd9\xfe\x87\x20\x7e\x0b\ -\xcb\xd9\x3b\xb3\x4c\x0d\x7d\x1b\x4e\xb6\xf5\x16\x1a\x3a\xaf\xde\ -\xca\xb9\x7d\xce\x9b\xe9\x6c\x70\xc9\xea\x1c\x54\x5a\x61\xf3\xda\ -\xdd\xbc\x92\x19\xbf\xd7\xff\xca\x0d\xf6\xde\xa0\xd3\xb7\xef\x1b\ -\x2b\xfb\x9d\x03\xf5\x2f\x5b\x3e\xd9\x5e\xd4\x8f\x95\x0d\x50\x7e\ -\x49\xf7\xce\x31\x96\x23\x79\x24\xaa\xa4\xfa\xa1\xb0\xa4\x53\x1d\ -\xc5\x2e\x5d\xf4\x47\x03\xbd\xbd\x77\x55\x91\xbb\xae\xb1\xcc\x63\ -\x1a\x6a\x78\x75\xd1\xdf\xf6\xb1\x07\xe6\x1e\x3b\x8e\xde\x92\x43\ -\xd1\xc1\x46\x7c\x75\x0a\x98\xea\xea\xf1\xf8\xe2\x3e\xdf\x56\x0d\ -\xed\x08\xdb\x43\x2d\x0c\x34\xd0\xdb\xdc\x33\xf5\xed\xad\x06\x79\ -\x17\x7f\x48\xd7\x2f\x9d\x70\x0c\xd2\x70\x7d\xec\x46\xfb\xd0\x3d\ -\xd0\x2f\x5a\xa0\xba\xa1\xc3\xbe\x0a\x03\x36\x1a\xda\x11\x69\xae\ -\x9b\x08\xaf\x39\xec\x5b\x52\x9a\xa8\x9a\xbb\x38\x72\x1a\xa1\xad\ -\xea\x8d\x48\xb3\xd5\xf4\xa7\xb7\xa6\xf8\xb5\x1e\x11\x6c\x2f\xad\ -\xa0\xdf\xd4\xa2\xde\xeb\x80\xae\xe3\x02\xb2\xea\x5a\xc0\x36\xde\ -\x07\x69\x6e\x43\xf4\x79\x0a\x02\x97\x72\x7c\x75\x15\xcb\xb3\x22\ -\x96\x1f\x4c\x98\x68\x6f\x7e\x56\x65\xf7\x08\xb7\x56\x0c\x4d\x1f\ -\x05\xab\xb7\x14\x5a\x77\x01\x14\x8d\x16\x08\x6b\xaf\xe0\xa0\xb9\ -\x0f\x49\xc6\x47\x48\xb0\x9f\x87\xb8\xa3\x04\xa9\xae\x7c\x2c\xb1\ -\x6e\x1e\x5e\x29\x3c\x20\x26\xcc\x97\x06\x6f\xe4\xd4\x8e\x8c\x71\ -\xf4\x65\xc8\xb8\x9a\x01\xcd\x83\x5c\x88\x2e\x28\xc1\xb3\xd0\x38\ -\x54\xee\x01\xf7\xf8\x13\x24\x97\xdf\x04\xbf\xa9\x1c\x54\x97\x1e\ -\xb1\x97\x33\x30\xff\x78\xe4\xe8\x52\x69\x92\x93\x30\xd2\xaf\x9f\ -\xc9\x6b\xbe\xf8\x53\x0d\x6e\x24\x1b\x25\x48\x6f\xca\x44\x7a\x33\ -\x05\x8e\xbd\x72\x12\xea\x01\x5b\xf3\x14\x89\xda\x46\x70\x4f\x89\ -\x90\x76\x2d\x17\xeb\x6d\xfb\x30\xaf\x60\xbd\x7f\x59\x16\xf7\x31\ -\x51\x6c\x7f\x76\x5d\x52\xf9\x79\x4c\x78\xf2\x03\x0e\xa8\x2f\x23\ -\x41\xa7\x00\xaf\xe9\x30\xd8\x4e\x09\x62\x6d\x15\x88\x2b\x75\x63\ -\x4f\x5e\x0b\x64\x8a\x28\xc8\x8f\x6d\x02\x3b\x7f\x39\x16\xca\x98\ -\xa3\xc1\x1c\x41\x2b\x91\x63\xb9\x2b\x17\x59\xdf\x0d\xa7\x5a\x3e\ -\x81\x67\xf0\x21\xa1\xa0\x1e\x71\x96\x2c\xc4\x5d\x4c\x02\x49\xf3\ -\xb0\xcd\x64\x44\x5c\x9e\x0b\xd4\x24\x8c\xaf\x42\xc4\xec\x9a\x8a\ -\x50\x3e\x6b\x38\x88\xc9\x3d\x42\xa4\x64\xd3\x6b\x32\x4d\x4f\x3c\ -\x3c\xfd\xdb\x71\x8e\x6e\x08\x89\xea\x87\xd8\x58\xa0\x44\xf8\x89\ -\x58\x6c\xaa\xda\x0d\x69\x2e\x13\x4a\x45\x78\x40\xdf\xe1\x1d\x31\ -\x44\x40\xe4\xf6\x29\x83\x44\x28\x99\x3d\x5d\xa0\xee\x54\x71\x35\ -\x03\xbe\xfd\x9a\xe7\x13\xa4\xb2\x0b\xa1\xda\x42\x84\x98\x58\x60\ -\x14\x26\xe1\xa8\x3c\x32\x00\xfd\xad\x18\x92\x78\x1e\x30\x0a\x83\ -\xa5\x5a\x90\x40\xb9\x1a\xf6\xe6\xdf\xf3\x85\xc9\xce\x8c\x6f\x2d\ -\x96\x82\xcc\xe3\x83\x99\xa9\x81\x4a\x2d\x84\x44\xca\xfa\x67\xf2\ -\xe4\x74\xef\x2f\x9b\x86\x44\x67\x2f\xd8\x25\x6d\x2e\x62\x88\xad\ -\x1e\x86\x40\x34\xbc\x59\x50\x34\xba\x25\xdd\xe1\x8f\xe0\xd1\xa3\ -\x1b\x38\x15\x23\x3f\xd7\x26\x49\xe2\xd5\x7f\x9f\x63\xce\xa2\x88\ -\x69\x41\x5b\x32\x82\xc3\xe2\x95\x62\x46\xa2\xd2\xb9\x8e\x25\x7b\ -\x1c\xc2\xe4\xb7\xae\x8d\x3e\x98\x23\x16\xcd\x7e\xff\xe3\xde\x77\ -\x3f\xe1\x6f\xc7\xfa\xe9\xa7\x0a\xc9\x2b\x9f\x00\x00\x00\x00\x49\ -\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x03\x1f\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x00\x0f\x00\x00\x00\x0f\x08\x06\x00\x00\x00\x3b\xd6\x95\x4a\ -\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ -\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\ -\x09\x70\x48\x59\x73\x00\x00\x0e\xc2\x00\x00\x0e\xc2\x01\x15\x28\ -\x4a\x80\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\ +\xa8\x64\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\ \x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\x20\x76\x33\x2e\ -\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\x8e\x49\x44\x41\x54\ -\x38\x4f\x65\x92\xed\x4b\x53\x71\x14\xc7\xef\x5f\xe3\x0b\x43\x8d\ -\x82\x32\x96\xa1\x88\xa4\x88\x82\xde\x40\x37\xe7\x1e\x02\xdd\x26\ -\xb5\x9a\x6e\x73\x6b\x2e\x7c\x68\xd3\x70\xea\x9c\x3d\xa9\x10\xcb\ -\x59\x54\x93\x32\x5d\x3a\x37\x19\xae\x29\x95\x4f\xe0\x1b\x8d\x96\ -\x73\x84\x03\x5f\x48\xbe\xe9\x85\x69\xeb\xdb\xb9\xbf\xd9\x25\xf0\ -\xc5\xf7\x77\x39\x87\xdf\xe7\x9c\xef\x39\xbf\xcb\x01\x38\xa5\xfb\ -\x3d\xeb\x18\x74\x6f\xa1\xb3\x63\x0d\x6d\xb6\x35\x4a\x9d\xbe\x23\ -\x88\x1d\xc9\x9d\x63\x78\xbd\x7b\x70\x0f\x24\x28\x04\xe7\xec\x5a\ -\xc5\x7c\x18\x98\x9d\xf9\x0d\x59\x8d\x97\xe5\x06\xdd\x2b\xd0\xea\ -\x5e\x41\xa9\x18\x67\xb1\x20\xee\xe0\x20\x8d\x41\xcf\x2e\x66\xde\ -\x1f\x21\x34\xf7\x07\x56\xeb\x32\x4c\xc6\x18\x82\x04\x4e\xbd\xfb\ -\x05\xdb\x9d\x05\x5c\x57\x8f\xc1\xd8\x12\xc4\xd0\x50\x0a\x16\x4b\ -\x0c\xd7\xf8\x11\x56\x80\xc1\x95\x95\x61\x4c\x4f\x1d\xb2\x6e\xa1\ -\xb9\x34\x82\xb3\x19\xd0\xff\xfa\x27\x7c\xbe\x1f\x18\x1e\xde\xc3\ -\x03\x02\x5d\xae\x24\x9a\x0d\x11\x9c\x3f\xd7\x94\x81\x85\x63\x7f\ -\xff\x08\x2a\x65\x98\x6c\x1e\x13\x98\xc6\x40\xff\x16\xca\x4a\x7b\ -\x51\x7a\xb5\x07\xdd\xce\x0d\xea\xb8\xcb\x40\x93\x29\x86\x33\xd9\ -\x0a\x06\x32\xb8\xdb\x99\x44\x7f\x5f\x1c\x8f\x1e\x26\x31\x13\x38\ -\xc2\x90\x27\x0e\x9d\xf6\x19\x02\x81\x6d\xd2\x0e\x5a\x5b\xfd\x64\ -\x79\x01\xf7\x1c\x71\xb2\xbc\x0e\x99\xcc\x07\x69\xed\x08\xaa\xab\ -\x3d\xb4\x1c\x67\x02\xd1\x85\x34\xcd\x7c\x4c\x56\x0f\x51\x56\xe6\ -\x46\x38\x94\x12\xab\x4f\xbe\xfd\x8a\xda\x9a\x61\xd8\xef\x6e\xc2\ -\x64\xde\x40\x93\x6e\x09\xd5\x55\x4f\x51\x54\xd8\x4e\xb0\x63\x5b\ -\x5c\x8e\x30\x63\x41\x81\x1d\xc1\xe0\x77\x11\xf6\xfb\x37\x09\x1e\ -\x25\xcb\x1b\xb8\xa9\x5f\x45\xa3\xe6\x23\xd4\xea\x45\x5c\xa1\x7b\ -\x5c\x9d\x6c\x16\x32\xe9\x04\xea\xe5\x01\xf8\xc6\x0e\x60\xb5\x44\ -\xc1\xf3\x3d\x98\x9c\x8c\x63\xc2\xff\x05\xae\xde\x18\x34\x9a\xe0\ -\x09\xf8\x09\x12\x49\x1f\x2e\xe5\xdf\xc6\xc5\x0b\xfa\x4c\x75\x41\ -\x37\x9a\xa6\xf1\xe4\x71\x8a\x3d\x87\xc9\xf8\x01\x6a\xd5\x38\x15\ -\xf4\x42\xab\x9d\x13\x3b\xf2\xfc\x73\xda\x74\x83\xe8\x8a\x9b\xf0\ -\x6f\xa1\xa3\x7d\x91\x6c\xcd\x33\x50\xd8\xaa\xc3\xf1\x0d\x76\x7b\ -\x66\xc6\x7f\x1d\xd5\xea\x18\xea\xe4\x11\xea\x6a\xa4\xa7\x8b\xb1\ -\x02\xdc\xe8\xe8\x1a\x14\x8a\x17\xe2\x73\xb4\xb5\xad\xc0\x68\x5a\ -\x62\x33\xea\x09\xd4\x10\xc8\xf3\x3e\xd4\xd4\x06\x20\xaf\x8f\x42\ -\x2a\x0b\x91\xe5\x5b\x19\x38\x12\x49\xa0\xa2\xc2\x85\x56\x73\x14\ -\x36\xdb\x67\x64\x67\x2b\x71\x36\x4f\x07\x4d\x63\x98\x75\x2c\x29\ -\x71\x23\x2b\xab\x92\x3a\xb6\xa0\xaa\xea\x25\x7d\xcd\x68\x68\x38\ -\xf9\xc3\x84\x43\x50\x51\x61\x33\xf2\xf3\x0d\x2c\x59\x5c\xac\x44\ -\x79\x79\x3f\x54\xb4\xd5\x9c\x1c\x15\xcb\x75\x76\x2d\x23\x37\x47\ -\x4b\xce\xde\xb0\x58\x90\x08\xff\x2f\x83\xc1\x45\x85\x5a\x70\x59\ -\x62\x46\x5e\x6e\x06\x3e\x2d\x70\x7f\x01\xfd\x94\x6b\x79\x96\xb3\ -\x58\xc6\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x03\x8c\ +\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\xbd\x49\x44\x41\x54\ +\x38\x4f\xad\x90\x5b\x4c\x92\x61\x18\xc7\xbf\x2b\x2a\x75\x1d\x3c\ +\xa0\xc8\xc1\x13\x22\x28\x68\x8b\x50\xc1\x53\x28\x09\x22\x0a\x86\ +\x86\x82\x98\x76\xe1\xb4\x56\xcd\x19\x1e\x9b\x5b\x69\x5d\x24\xe5\ +\xb2\xad\x35\xab\x99\x7d\xce\xd4\xec\xb3\x41\x88\x69\xa0\xa6\xce\ +\x59\x36\xb2\xd2\x50\xe7\xda\xea\xc2\x74\x1d\x6e\x5a\x5b\x6b\xfa\ +\x04\xec\x4b\x72\xf3\xd2\xdf\xd5\xf3\x3e\xef\xff\xf7\xbc\xcf\x5e\ +\x64\xc7\xa9\x9c\x3b\x16\x54\xf1\x46\xae\x3c\x3d\x9d\x71\xb7\xf4\ +\x85\xe8\x59\x91\x25\xd9\x56\x38\x9c\xf0\x5c\x3d\xc4\xaf\xce\x31\ +\x73\x49\x78\xcc\x4d\xe3\x52\xb1\xe0\x82\x5d\x03\xce\xda\x29\x9f\ +\x9d\xc9\xba\x7d\xce\x96\xf5\x5b\xf7\x41\xb1\xa1\x5b\x50\x40\xd5\ +\x52\x36\x9c\x79\x9b\x0e\xda\x11\x01\x64\x3e\x62\x2f\xc8\xfb\x39\ +\x1c\x97\xf8\x8f\xfa\x79\x35\xd4\xce\xab\xa0\xf2\xb5\x43\x7e\x25\ +\xeb\xac\x59\x54\xc2\xe5\xb5\x42\xa8\x59\x56\x40\xd1\x48\xd2\x37\ +\xa5\x91\x6b\x97\x63\x31\xb3\xd2\xde\xa8\x05\x85\x31\xfa\x57\x1a\ +\x4a\xb7\x49\x7a\xe9\x7e\xb8\x8e\x20\xba\xd9\x5c\x68\xfc\xa4\x85\ +\x53\x2f\xa5\x58\xed\x52\x2e\x34\xad\x69\xe0\xfc\xa2\x1c\xf2\xcd\ +\x71\x33\xaa\x41\x9e\x1a\x8f\xb9\x10\x77\x33\xaa\x84\x68\xc8\x4a\ +\x0a\x1a\xac\xc3\x5b\x08\xe2\x58\x19\x9a\xbf\x9f\x84\xba\x65\x87\ +\xbc\xaa\x86\x4a\xbb\x0c\x54\xe6\xd8\xf1\x3c\x03\x97\x86\x47\xb6\ +\x90\xd2\x19\x54\xcc\x6f\x0b\x7c\x8c\x1f\x11\xa4\x6c\x4a\x0c\x57\ +\xbe\x6a\xa1\xf1\x4b\x01\x54\xcc\x4b\xd7\xf3\xcc\x3c\xab\x6a\x80\ +\x1b\x86\x5f\x6f\x4b\xfc\x9d\x80\x13\x78\x89\x20\x25\xa3\x42\xb8\ +\xb4\x9a\x0f\x0d\x2b\xb9\x50\xf7\x59\x0e\xe5\xb3\xa9\x20\xc3\xd8\ +\x20\x42\xc3\x5d\x1f\xeb\x44\x69\x89\x12\xc8\xcd\x11\x90\x61\x08\ +\x03\x51\x1f\x0d\x8e\x62\x54\xe0\xdf\x27\x02\xaf\xcd\x07\x10\xcd\ +\x70\x02\x1c\x37\xf1\x40\x63\xe5\x83\xac\x8f\x0d\xe2\x6e\x26\xa4\ +\x39\x64\x09\xc6\x4c\xc7\x7d\x44\x66\x62\x80\xc4\x10\x0a\x72\x2b\ +\x1d\x94\x93\x74\xc8\x1e\x0b\x86\x4c\x2b\x15\x62\x6e\xee\xdf\x7c\ +\x04\x29\x7f\x27\xdc\x14\xb6\x23\xa9\xd7\x3f\x24\x01\x25\x5a\x8f\ +\x1a\xc9\xeb\x52\x0b\x05\xc4\xc3\x01\xc0\x6a\xf6\x72\x0f\x28\x99\ +\xe1\xb7\x6a\xa7\x79\x32\xfc\xb8\x85\x14\x94\x4c\xe1\x77\x10\x27\ +\x44\x06\x32\x48\x2d\x64\x48\xec\xf1\x01\xd1\xa0\x2f\xd0\x9b\xf6\ +\xb8\x07\x14\x4c\x1e\x2e\xc9\x1f\x3b\xf8\x51\x31\xc4\x2a\xc3\x5b\ +\x2e\x12\xbb\x48\x05\xb1\xf7\x7c\x6d\x69\x06\x12\x64\x58\x02\x41\ +\xd0\xe5\x03\x91\x7a\xcf\x51\x5e\xc7\x5e\x08\x6e\xd8\xe5\x1e\x90\ +\xf9\x94\x73\x20\xcb\x14\x31\x9e\x3d\xc8\xf8\x99\xda\x43\x7b\x9f\ +\x8c\x92\x6c\xfc\x76\x7f\x3b\xbf\xc3\xef\x47\x9a\x91\xe4\x58\x99\ +\x04\x71\x0f\xbc\x81\xa9\xf7\x34\x33\xf4\x04\x66\xe8\xc5\xdd\x40\ +\xad\x21\xb8\x07\x38\x11\x61\x41\xac\x23\x0f\xa9\x73\xa2\x7e\x1a\ +\x48\x4c\x34\x10\x0f\x50\x40\x88\xf9\x43\x7c\xa7\xf7\x06\xa7\xd5\ +\xeb\x4f\x84\xde\x03\x73\xca\xce\x2c\xa5\x9a\x00\xe1\x57\x09\x39\ +\x2e\xf1\x7f\x92\x50\x5f\x52\x5c\x3b\xb1\xfe\xd0\x2d\xef\x89\xe8\ +\x1b\xfb\xec\xec\x16\xaf\xa9\xc8\x6b\x9e\x4f\x22\xaf\x7b\x94\x86\ +\xb7\x10\x58\x78\x6c\xa7\x40\x90\xbf\xe1\xcb\x27\xde\xa2\xbe\xca\ +\x4e\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x02\xcc\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x00\x10\x00\x00\x00\x0f\x08\x06\x00\x00\x00\xed\x73\x4f\x2f\ -\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ -\x04\x67\x41\x4d\x41\x00\x00\xb1\x8f\x0b\xfc\x61\x05\x00\x00\x00\ -\x09\x70\x48\x59\x73\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7\x6f\ -\xa8\x64\x00\x00\x00\x1a\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\ -\x72\x65\x00\x50\x61\x69\x6e\x74\x2e\x4e\x45\x54\x20\x76\x33\x2e\ -\x35\x2e\x31\x31\x47\xf3\x42\x37\x00\x00\x02\xfb\x49\x44\x41\x54\ -\x38\x4f\x45\x93\xd9\x6b\x13\x61\x14\xc5\xf3\x4f\x08\x82\x8a\x88\ -\x0b\x8a\x88\xfa\x2a\x88\x28\xbe\xf8\x50\x44\xb4\xb8\x81\x20\x3e\ -\x88\x0f\x6e\x55\x5f\x55\xf0\x41\x2a\x22\xfa\xf9\xa0\xb8\x96\x16\ -\x49\x25\x55\x6b\x13\x63\xb5\x4d\x63\xb5\x62\x2d\x5a\xa5\x6a\xd3\ -\xba\x34\x5d\x32\x33\xc9\x64\x9b\x25\xb3\x66\xe4\x78\xa6\x15\x0d\ -\x5c\x72\xf9\x96\xdf\x9c\x7b\xee\xfd\x22\xe1\xef\xb7\x6f\x8a\xc0\ -\x29\x8a\xba\xad\x30\xe4\xd9\xff\xc0\x99\x12\x6e\xa9\x47\x04\xd6\ -\x10\xf3\xc9\xbf\x7b\x61\xe4\x45\xe0\x96\x44\x78\xe7\xdf\x65\x5f\ -\xff\x2e\xbc\xea\x20\xe3\x0d\x2c\xa5\x07\xb6\xd2\x0b\xb7\xdc\x07\ -\xe9\xe5\x56\x98\xd9\xcb\xcc\xd3\xb0\xf3\x7d\xb0\x0b\x7d\xf0\xb4\ -\x01\x78\xd5\x21\xe1\x1b\xbf\xe6\x20\xe1\x97\xdd\xf2\xa0\xa8\xe5\ -\x5a\x78\xf8\x0a\x5c\x35\x06\x73\xf2\x1e\x41\x51\x48\x5d\xab\xa0\ -\x7f\x6d\x82\x2d\xb7\xa3\x36\xdd\x0a\x47\x6d\x87\x36\x7e\x0e\xbe\ -\x96\x84\x5b\xa1\x32\x2a\x89\x84\xb2\x42\x7a\xe5\xeb\x05\x64\x3b\ -\x56\x41\x1b\x39\x0a\xaf\xd4\x0e\xaf\xd2\x01\xf5\xd9\x32\x98\x5f\ -\x0e\x33\x7f\x04\x47\xba\x01\x35\xbd\x05\xf9\xf4\x36\x38\xf9\x76\ -\xc2\xfa\x51\x77\x0a\x21\x40\x16\x96\xdc\xc3\xaf\xdf\x45\xe5\xf3\ -\x49\x48\xb1\x79\xd0\x07\x1b\xe0\xe5\x9a\x51\x4d\xad\x43\xed\xf3\ -\x7e\x78\xca\x35\x54\x52\xeb\xa1\x26\x57\x52\xcd\x1d\x98\x54\x63\ -\x17\x5e\x21\xf4\x63\x16\x60\x17\x52\x94\x7d\x1f\x56\xee\x2e\x8c\ -\xe1\x03\x28\x25\x16\x12\xb2\x0d\xfa\xd0\x4e\x98\x23\x87\xb8\xb6\ -\x17\xda\x9b\x8d\x70\xa5\xab\x2c\xad\x15\xb5\x99\x07\x70\x8a\xfd\ -\x08\x1c\x02\x02\x77\x82\x86\xd0\x9c\x6a\x27\xa5\x3e\x84\x9b\xbb\ -\x04\x63\xa8\x81\x97\x1b\xe1\xcc\xdc\x43\x2d\x7b\x11\x66\xe6\x34\ -\x9c\xec\x79\xd4\xcb\x2d\xa8\x1b\x09\x7a\x90\x40\xdd\x24\xc0\x9d\ -\x16\x11\x4f\xeb\x17\xb9\x54\x03\x26\x63\x4b\x21\x3d\x5e\x88\xe2\ -\xd3\xf9\xa8\xf4\x52\x7a\xe6\x2c\x7e\xbb\x32\x65\x66\x60\x4d\x5d\ -\x85\xfe\x61\x17\xaa\xbd\x6b\xa1\xc6\x17\x41\x49\xac\x46\x79\xf8\ -\x08\x21\x9f\x58\x82\x95\x11\xc6\xc4\x0d\x54\x47\xce\x40\xfb\x72\ -\x1c\xc6\xc7\xdd\xd0\xdf\x6e\x81\xfe\x7e\x27\x3c\xf5\x05\xec\x99\ -\x5b\x30\x47\x4f\x12\x78\x14\xf6\x78\x13\xf3\x26\x18\xe3\xe7\xd9\ -\xea\x28\x02\x7b\xe2\x6f\x17\x68\x88\x39\x45\x63\x94\x36\x38\xd3\ -\x17\x51\x79\xb9\x1a\xd5\xfe\x4d\xac\xfd\x20\x63\x3f\xfd\xd8\x0e\ -\x73\x78\x37\x02\x2d\xca\xda\x63\xb0\xe4\x18\x9c\xd2\x5b\x0e\xd8\ -\x6c\x17\xf2\x04\xa4\x69\x4c\x1b\x2c\xe9\x26\x94\xae\xa5\x28\x26\ -\x97\xc3\x1e\x3b\x41\xc9\x6b\x60\x7e\x6c\x64\x7e\x0c\xa5\xf8\x02\ -\xaa\xda\x01\x5f\xef\xe2\xb9\x87\x04\x0d\xfc\x07\x84\x8e\xda\x52\ -\x0b\x72\xdd\x9b\x21\x77\x6f\x60\x9f\x6f\xc3\x2f\x47\x51\x8c\x2f\ -\x61\x49\xfb\x50\xaf\x25\x61\x8c\x9e\x82\xf4\x64\x31\x4b\x3d\xce\ -\xc9\xec\xa2\x82\x10\xa0\x86\x93\xa8\x0a\xb7\xf2\x4e\x68\x63\xcd\ -\x90\x5f\xef\x21\x9d\xed\x94\xa3\x3c\xd4\x29\x72\x9d\x2b\x38\x89\ -\x27\x38\x75\x71\xf6\xbd\x03\xc6\x8f\x66\x28\xe9\xed\xf0\x08\xf8\ -\x37\x89\x81\xa7\x09\x4f\xfb\x26\x1c\x35\x25\x9c\x42\x42\x58\x4a\ -\x18\x49\x8e\x77\x8f\xc8\x25\x37\x42\xff\x7e\x81\x87\x7b\x09\xa0\ -\xa1\xf9\x6e\x46\x9c\xed\x1e\x10\x9e\x9e\xe1\x5b\xd0\xe7\x1e\x54\ -\xa8\xc2\x37\x7e\x72\x71\x94\x30\x06\x37\x7d\x73\x54\x18\xbf\xae\ -\xf3\x45\x3e\x17\x7e\xed\x9b\xf0\x8c\xb1\xb9\x75\x63\x9c\x7b\x59\ -\xca\x2f\xf2\x72\x24\xf2\x07\x1c\xe6\x0a\xfa\x25\xad\x94\xa9\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ +\x00\x00\x02\x93\x49\x44\x41\x54\x38\xcb\x8d\x93\xcd\x4b\x94\x51\ +\x14\x87\x9f\x7b\xdf\x79\x67\x9c\x69\xc6\x19\x67\x46\xcb\x50\x46\ +\x25\xa3\xa0\x24\x14\xa3\xda\x44\x10\x11\x05\x2e\xfa\xa2\x36\x21\ +\x2d\x72\xd1\xa2\x16\xd2\xa2\x3f\x40\xa2\x4d\x8b\x5a\x87\xd1\xa2\ +\xd0\x56\x42\xb4\x48\xb0\x55\x8b\x3e\x20\xa9\x88\x14\x95\xc9\xb4\ +\xc9\x4a\xa7\x99\x77\x66\x5e\xdf\x8f\x7b\x5b\x68\x8d\x96\x44\x07\ +\x0e\xf7\x5e\xb8\xbf\xe7\x9c\x73\x2f\x3f\xc1\x9a\xb8\x73\x6d\x97\ +\xe6\x3f\xe2\xc2\xc0\x5b\xf1\x6b\x2f\xfe\x04\x1c\x3a\xd7\xfb\x4f\ +\xf1\xd8\xfd\xc1\x75\xe7\xc0\x9f\x17\xb4\xd2\xe4\x17\x26\x36\x14\ +\x27\x1a\xb6\x03\xf0\xab\xc8\xd8\xfd\xc1\xbf\x01\xcb\xae\x4d\xd6\ +\xce\x21\x95\x64\x6b\x28\x85\x58\xd3\xa4\x56\x0a\x80\xe1\xc7\x2b\ +\x6b\x7a\x6d\x07\x7d\x43\x4d\x1d\x2a\xd9\xc9\x62\xb2\x9d\x96\x2d\ +\x5d\x68\xed\x63\x95\x4b\xcc\x4c\x3f\xa1\xcd\x73\x08\x49\x03\xb5\ +\x0a\xe8\xe9\xe9\x61\x64\x64\xa4\x3a\x42\xdf\x50\xd3\xb1\x83\x6d\ +\xbd\x0f\x53\x75\x06\x56\xe4\x11\x25\x69\x22\x75\x10\x69\x44\x68\ +\x6e\xdf\xc3\xd4\xc7\x2c\x8d\x8b\x59\x12\xab\x80\x75\x6f\x70\xea\ +\x56\x2c\xde\x12\xdb\x77\xaf\x20\x9e\x87\x65\x40\x11\x70\x22\xdc\ +\xbd\xfa\x85\x70\x34\xc0\xc9\x6b\x8d\xa0\xe6\x91\xb5\x09\x5e\xcc\ +\x39\x64\x36\x02\xa4\xa3\x99\x7e\x3b\x30\x93\xf4\xc3\x8a\x7c\x25\ +\x88\xd0\x0e\xd9\x77\x15\x62\x29\x83\x62\xb9\x8c\xf6\xc1\x15\x8b\ +\x38\xa6\xc1\xf8\xec\x14\x66\x30\x84\x6b\x17\xaa\x00\xdb\x2d\x1d\ +\xaa\xc8\x3c\xf3\xb3\x9b\x70\x0a\x1e\x52\x38\x68\xad\x71\x1d\x8f\ +\x99\x77\x3f\x70\x95\x47\x4d\x5c\x51\xf2\x7c\xde\x2f\xf8\xec\xcf\ +\xb4\xf2\x7a\xe4\x0a\x41\xa3\x13\xe0\xac\x38\x7d\x2b\x39\xd3\xd0\ +\x26\x5a\x26\x1e\xd4\x31\xff\x2a\x88\x14\x02\x10\x08\xb1\x92\xa0\ +\x69\x3f\xa2\x88\x6e\x2b\xa2\x27\x42\xf4\x9f\x38\x43\xe1\xdb\x57\ +\x3e\xbc\x78\xc6\x85\x81\xb7\x42\x6a\xa5\x72\xa5\x82\x26\xb8\xb9\ +\x4c\xba\xcb\x22\xbd\xd7\xc1\x37\x4c\x64\x48\xd0\xd0\x59\x21\xd5\ +\x61\x61\x47\x72\x7c\x9e\x5b\x40\x2e\x7b\xe4\xa6\xc7\x89\xd6\x25\ +\xab\x23\x78\x2e\x4f\xad\x45\x6f\x5f\xed\xae\x22\xa9\x2e\x4d\x24\ +\x2c\xc8\xbe\xe9\x26\x9c\x5e\xa2\xf9\xf8\x67\x5c\xcb\xa0\x58\x72\ +\xf8\x36\x0e\xfb\x1b\xe2\xf8\xbe\xff\xfb\x3b\x01\xa4\xb5\xe0\xdd\ +\xae\x7c\xa7\x28\x35\xc4\x13\x01\xe2\x49\x89\x1d\x49\xa2\x22\x51\ +\x62\x29\x30\xe3\x1e\xcb\x4b\x06\x69\x27\x4e\x57\xa6\x1e\xe5\xfb\ +\x68\xe5\x57\x01\xa3\x37\xac\x39\xca\x89\x8b\xca\xab\xb1\x23\x9b\ +\x04\xad\xcd\x41\x4e\x5e\x9a\xe4\xf0\xf9\x1c\xdb\x5a\xc2\xd4\x84\ +\x0d\xbc\x59\x49\xcf\xce\x56\x84\x56\xab\x00\xb5\xde\x0b\x8f\xae\ +\x7f\x7c\x70\xba\xbf\x7b\xd2\xca\xcf\xbf\x7c\xe3\x54\x38\x7a\x70\ +\x09\x13\xc9\xf0\xa8\x4b\x6c\xb6\x8d\xbe\x03\xbb\xc9\x34\xa6\x7e\ +\x8b\x94\xaa\x9a\x56\x00\xa1\x55\x90\xbe\x79\x79\x47\x29\x5f\x72\ +\xf9\x54\xb4\x31\x85\xa4\x3e\x1c\xc4\x30\x04\xa9\x5a\x13\x33\x20\ +\x30\xe4\x4a\xae\xb5\xf5\x4f\xfc\x9d\x16\x68\xea\x86\x67\x22\x00\ \x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ \x00\x0c\xb6\x08\ \x89\ @@ -105008,7 +105008,7 @@ \xe0\x55\xd3\x9e\x2b\x7c\x24\xe1\x69\xe2\xef\x31\x5f\xe2\x1a\x37\ \x34\xd7\x79\xa4\xfd\x75\x1e\xa1\xf7\x0d\xd9\x5d\x54\x13\x1b\x0f\ \x0d\x32\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x06\xd9\ +\x00\x00\x07\x7f\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ \x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ @@ -105066,10 +105066,10 @@ \x69\x6c\x65\x3d\x22\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\ \x36\x36\x2d\x32\x2e\x31\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\ \x6f\x64\x69\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\ -\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x33\x37\x2d\x30\ +\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x31\x30\x2d\x30\ \x37\x3a\x30\x30\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\x65\x74\ \x61\x64\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\ -\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x33\x37\x2d\x30\ +\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x31\x30\x2d\x30\ \x37\x3a\x30\x30\x22\x3e\x0a\x20\x20\x20\x3c\x78\x6d\x70\x4d\x4d\ \x3a\x48\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x20\x20\x3c\x72\ \x64\x66\x3a\x53\x65\x71\x3e\x0a\x20\x20\x20\x20\x20\x3c\x72\x64\ @@ -105080,14 +105080,14 @@ \x66\x69\x6e\x69\x74\x79\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\ \x31\x2e\x39\x2e\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\ \x76\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x32\x31\x2d\x30\x34\ -\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x33\x37\x2d\x30\x37\x3a\ +\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x31\x30\x2d\x30\x37\x3a\ \x30\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\ \x53\x65\x71\x3e\x0a\x20\x20\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\ \x48\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x2f\x72\x64\x66\ \x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e\x0a\x20\x3c\ \x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x3c\x2f\x78\x3a\x78\x6d\ \x70\x6d\x65\x74\x61\x3e\x0a\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\ -\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\x73\x41\xe6\x22\x00\x00\ +\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\xf7\xcc\x37\x3a\x00\x00\ \x01\x81\x69\x43\x43\x50\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\ \x39\x36\x36\x2d\x32\x2e\x31\x00\x00\x28\x91\x75\x91\xdf\x2b\x83\ \x51\x18\xc7\x3f\xb6\x69\x62\x1a\x71\xe1\xc2\xc5\x12\xae\x4c\x33\ @@ -105114,13 +105114,23 @@ \xec\x67\x9f\xe3\x7b\x08\xaf\xcb\x57\x5d\xc1\xee\x1e\xf4\xcb\x79\ \xe7\xf2\x37\x6e\x48\x67\xe9\x02\x54\x26\x46\x00\x00\x00\x09\x70\ \x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\ -\x00\x00\x00\x40\x49\x44\x41\x54\x38\x8d\x63\x60\x18\x05\x03\x0f\ -\x18\xf1\xc8\xb1\x33\x30\x30\xc4\x43\xd9\x0b\x19\x18\x18\x7e\x92\ -\x6a\x78\x1a\x03\x03\xc3\x7f\x28\x4e\xc5\xa5\x88\x89\x54\x53\xd1\ -\x01\x0b\x1e\xb9\x85\x50\xdb\x19\x18\x18\x18\x16\x51\x6a\xd1\x28\ -\xa0\x25\x00\x00\x8d\x27\x07\x13\xfc\xb7\x18\x62\x00\x00\x00\x00\ -\x49\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x07\x7f\ +\x00\x00\x00\xe6\x49\x44\x41\x54\x38\x8d\xa5\xd3\x31\x4a\x83\x41\ +\x10\x05\xe0\x2f\x6a\xd0\xc6\x42\x21\x60\x23\x96\x9e\x21\x11\x0c\ +\x88\xa5\x90\xc2\xc6\x53\x78\x05\x21\xd8\xa4\xf2\x1c\x5a\x58\x58\ +\xe4\x0a\x16\xbf\x5d\xaa\x80\x95\x60\x63\x65\xa3\x06\x44\x63\x91\ +\x09\x59\x21\xff\x9f\xac\x3e\x18\x58\xde\xce\x7b\x33\xc3\xce\x32\ +\x43\x03\x75\x7f\x44\x0f\x9f\x78\x46\x33\x57\xdc\x08\xf1\x38\xe2\ +\x3a\x47\xbc\x82\x57\xbc\x24\xdc\x30\xc7\x60\x15\xdf\xb8\xc7\x26\ +\x6e\x71\x85\x51\x49\xfe\x1a\x3a\x11\x8f\x78\xcb\x29\x06\xe7\x66\ +\xa3\x0e\x50\xab\x4a\x6e\xe3\x21\xa2\x1d\xdc\x5d\x62\x30\xc6\x4e\ +\x95\x41\x91\x24\x16\xc1\x9d\xe2\x2b\xb8\xfe\xa2\x76\xe7\x19\xc0\ +\x1e\x8e\x4c\x1e\xa0\x12\x87\x21\x2c\xe2\x0c\xdb\x38\xc1\xc6\x22\ +\xf1\x3c\xec\xe3\x23\x3a\x7a\xc2\xba\xa4\x8d\x26\x6e\x70\x89\xad\ +\x12\x83\xb3\xa4\xf2\x2e\x8e\xa7\x17\x75\x93\x15\x9e\xce\xdb\x2d\ +\x31\x38\x48\x72\xde\xd3\x42\xcb\xae\x72\x0d\x2d\x5c\xc4\x38\xbf\ +\xf0\xaf\xcf\x94\x76\x92\xfd\x9d\x7f\x00\xb6\x9a\x39\x0a\x39\xbf\ +\xef\x13\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x07\x1f\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ \x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ @@ -105178,10 +105188,10 @@ \x69\x6c\x65\x3d\x22\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\ \x36\x36\x2d\x32\x2e\x31\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\ \x6f\x64\x69\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\ -\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x31\x30\x2d\x30\ +\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x34\x3a\x31\x33\x2d\x30\ \x37\x3a\x30\x30\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\x65\x74\ \x61\x64\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\ -\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x31\x30\x2d\x30\ +\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x34\x3a\x31\x33\x2d\x30\ \x37\x3a\x30\x30\x22\x3e\x0a\x20\x20\x20\x3c\x78\x6d\x70\x4d\x4d\ \x3a\x48\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x20\x20\x3c\x72\ \x64\x66\x3a\x53\x65\x71\x3e\x0a\x20\x20\x20\x20\x20\x3c\x72\x64\ @@ -105192,14 +105202,14 @@ \x66\x69\x6e\x69\x74\x79\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\ \x31\x2e\x39\x2e\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\ \x76\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x32\x31\x2d\x30\x34\ -\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x31\x30\x2d\x30\x37\x3a\ +\x2d\x32\x30\x54\x31\x30\x3a\x35\x34\x3a\x31\x33\x2d\x30\x37\x3a\ \x30\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\ \x53\x65\x71\x3e\x0a\x20\x20\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\ \x48\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x2f\x72\x64\x66\ \x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e\x0a\x20\x3c\ \x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x3c\x2f\x78\x3a\x78\x6d\ \x70\x6d\x65\x74\x61\x3e\x0a\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\ -\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\xf7\xcc\x37\x3a\x00\x00\ +\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\x05\xee\x89\x37\x00\x00\ \x01\x81\x69\x43\x43\x50\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\ \x39\x36\x36\x2d\x32\x2e\x31\x00\x00\x28\x91\x75\x91\xdf\x2b\x83\ \x51\x18\xc7\x3f\xb6\x69\x62\x1a\x71\xe1\xc2\xc5\x12\xae\x4c\x33\ @@ -105226,23 +105236,17 @@ \xec\x67\x9f\xe3\x7b\x08\xaf\xcb\x57\x5d\xc1\xee\x1e\xf4\xcb\x79\ \xe7\xf2\x37\x6e\x48\x67\xe9\x02\x54\x26\x46\x00\x00\x00\x09\x70\ \x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\ -\x00\x00\x00\xe6\x49\x44\x41\x54\x38\x8d\xa5\xd3\x31\x4a\x83\x41\ -\x10\x05\xe0\x2f\x6a\xd0\xc6\x42\x21\x60\x23\x96\x9e\x21\x11\x0c\ -\x88\xa5\x90\xc2\xc6\x53\x78\x05\x21\xd8\xa4\xf2\x1c\x5a\x58\x58\ -\xe4\x0a\x16\xbf\x5d\xaa\x80\x95\x60\x63\x65\xa3\x06\x44\x63\x91\ -\x09\x59\x21\xff\x9f\xac\x3e\x18\x58\xde\xce\x7b\x33\xc3\xce\x32\ -\x43\x03\x75\x7f\x44\x0f\x9f\x78\x46\x33\x57\xdc\x08\xf1\x38\xe2\ -\x3a\x47\xbc\x82\x57\xbc\x24\xdc\x30\xc7\x60\x15\xdf\xb8\xc7\x26\ -\x6e\x71\x85\x51\x49\xfe\x1a\x3a\x11\x8f\x78\xcb\x29\x06\xe7\x66\ -\xa3\x0e\x50\xab\x4a\x6e\xe3\x21\xa2\x1d\xdc\x5d\x62\x30\xc6\x4e\ -\x95\x41\x91\x24\x16\xc1\x9d\xe2\x2b\xb8\xfe\xa2\x76\xe7\x19\xc0\ -\x1e\x8e\x4c\x1e\xa0\x12\x87\x21\x2c\xe2\x0c\xdb\x38\xc1\xc6\x22\ -\xf1\x3c\xec\xe3\x23\x3a\x7a\xc2\xba\xa4\x8d\x26\x6e\x70\x89\xad\ -\x12\x83\xb3\xa4\xf2\x2e\x8e\xa7\x17\x75\x93\x15\x9e\xce\xdb\x2d\ -\x31\x38\x48\x72\xde\xd3\x42\xcb\xae\x72\x0d\x2d\x5c\xc4\x38\xbf\ -\xf0\xaf\xcf\x94\x76\x92\xfd\x9d\x7f\x00\xb6\x9a\x39\x0a\x39\xbf\ -\xef\x13\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x07\x1f\ +\x00\x00\x00\x86\x49\x44\x41\x54\x38\x8d\xed\xcf\x31\x0a\xc2\x50\ +\x14\x44\xd1\x53\x28\x56\x16\x36\xda\xeb\x42\x22\x58\xba\x34\xdd\ +\x8f\x92\x42\x0b\xc9\x02\x5c\x44\x1a\xad\xb5\x12\x62\x33\x01\x11\ +\x94\xa4\xcf\x85\x29\xde\x7b\x73\xe1\x7f\x06\xfe\xb1\xc2\x35\x59\ +\xf6\x95\x17\xa8\xd0\x24\x55\x76\x9d\xc4\x3d\x9e\x11\x5f\x49\x93\ +\xdd\x0e\xf3\x6f\x69\x83\x12\x87\x0f\xf1\x84\x02\xd3\x64\x8d\x73\ +\x6e\x8f\x74\xcb\xb8\xea\x8f\xa7\x5e\x22\xfe\xa2\x48\xa7\xed\xd7\ +\x70\xcc\x70\xc3\xa8\xc3\x37\xc7\xb8\xc7\x39\xc2\x04\x5b\xcc\x3a\ +\xc8\x2d\xb3\x38\x93\x1e\xce\xc0\x2f\xde\x75\xd0\x24\x07\x6c\x4e\ +\x4a\x79\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x06\xd9\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ \x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ @@ -105300,10 +105304,10 @@ \x69\x6c\x65\x3d\x22\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\ \x36\x36\x2d\x32\x2e\x31\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\ \x6f\x64\x69\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\ -\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x34\x3a\x31\x33\x2d\x30\ +\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x33\x37\x2d\x30\ \x37\x3a\x30\x30\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\x65\x74\ \x61\x64\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\ -\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x34\x3a\x31\x33\x2d\x30\ +\x30\x34\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x33\x37\x2d\x30\ \x37\x3a\x30\x30\x22\x3e\x0a\x20\x20\x20\x3c\x78\x6d\x70\x4d\x4d\ \x3a\x48\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x20\x20\x3c\x72\ \x64\x66\x3a\x53\x65\x71\x3e\x0a\x20\x20\x20\x20\x20\x3c\x72\x64\ @@ -105314,14 +105318,14 @@ \x66\x69\x6e\x69\x74\x79\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\ \x31\x2e\x39\x2e\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\ \x76\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x32\x31\x2d\x30\x34\ -\x2d\x32\x30\x54\x31\x30\x3a\x35\x34\x3a\x31\x33\x2d\x30\x37\x3a\ +\x2d\x32\x30\x54\x31\x30\x3a\x35\x35\x3a\x33\x37\x2d\x30\x37\x3a\ \x30\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\ \x53\x65\x71\x3e\x0a\x20\x20\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\ \x48\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x2f\x72\x64\x66\ \x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e\x0a\x20\x3c\ \x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x3c\x2f\x78\x3a\x78\x6d\ \x70\x6d\x65\x74\x61\x3e\x0a\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\ -\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\x05\xee\x89\x37\x00\x00\ +\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\x3e\x73\x41\xe6\x22\x00\x00\ \x01\x81\x69\x43\x43\x50\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\ \x39\x36\x36\x2d\x32\x2e\x31\x00\x00\x28\x91\x75\x91\xdf\x2b\x83\ \x51\x18\xc7\x3f\xb6\x69\x62\x1a\x71\xe1\xc2\xc5\x12\xae\x4c\x33\ @@ -105348,16 +105352,12 @@ \xec\x67\x9f\xe3\x7b\x08\xaf\xcb\x57\x5d\xc1\xee\x1e\xf4\xcb\x79\ \xe7\xf2\x37\x6e\x48\x67\xe9\x02\x54\x26\x46\x00\x00\x00\x09\x70\ \x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\ -\x00\x00\x00\x86\x49\x44\x41\x54\x38\x8d\xed\xcf\x31\x0a\xc2\x50\ -\x14\x44\xd1\x53\x28\x56\x16\x36\xda\xeb\x42\x22\x58\xba\x34\xdd\ -\x8f\x92\x42\x0b\xc9\x02\x5c\x44\x1a\xad\xb5\x12\x62\x33\x01\x11\ -\x94\xa4\xcf\x85\x29\xde\x7b\x73\xe1\x7f\x06\xfe\xb1\xc2\x35\x59\ -\xf6\x95\x17\xa8\xd0\x24\x55\x76\x9d\xc4\x3d\x9e\x11\x5f\x49\x93\ -\xdd\x0e\xf3\x6f\x69\x83\x12\x87\x0f\xf1\x84\x02\xd3\x64\x8d\x73\ -\x6e\x8f\x74\xcb\xb8\xea\x8f\xa7\x5e\x22\xfe\xa2\x48\xa7\xed\xd7\ -\x70\xcc\x70\xc3\xa8\xc3\x37\xc7\xb8\xc7\x39\xc2\x04\x5b\xcc\x3a\ -\xc8\x2d\xb3\x38\x93\x1e\xce\xc0\x2f\xde\x75\xd0\x24\x07\x6c\x4e\ -\x4a\x79\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x00\x40\x49\x44\x41\x54\x38\x8d\x63\x60\x18\x05\x03\x0f\ +\x18\xf1\xc8\xb1\x33\x30\x30\xc4\x43\xd9\x0b\x19\x18\x18\x7e\x92\ +\x6a\x78\x1a\x03\x03\xc3\x7f\x28\x4e\xc5\xa5\x88\x89\x54\x53\xd1\ +\x01\x0b\x1e\xb9\x85\x50\xdb\x19\x18\x18\x18\x16\x51\x6a\xd1\x28\ +\xa0\x25\x00\x00\x8d\x27\x07\x13\xfc\xb7\x18\x62\x00\x00\x00\x00\ +\x49\x45\x4e\x44\xae\x42\x60\x82\ \x00\x00\x07\x84\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ @@ -105492,55 +105492,30 @@ \x0a\x77\xbf\xa2\ \x00\x71\ \x00\x72\x00\x61\x00\x76\x00\x65\x00\x5f\x00\x74\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x61\x00\x72\ +\x00\x10\ +\x07\xe4\x86\xa7\ +\x00\x42\ +\x00\x72\x00\x6f\x00\x77\x00\x73\x00\x65\x00\x46\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ \x00\x08\ -\x0c\x33\x5e\x87\ -\x00\x48\ -\x00\x65\x00\x6c\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x08\xb8\x58\x27\ +\x00\x74\ +\x00\x72\x00\x65\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ \x00\x0a\ \x08\x4a\xc9\x87\ \x00\x65\ \x00\x78\x00\x70\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ -\x00\x10\ -\x07\xe4\x86\xa7\ -\x00\x42\ -\x00\x72\x00\x6f\x00\x77\x00\x73\x00\x65\x00\x46\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ -\x00\x0f\ -\x03\xc9\x22\xe7\ -\x00\x4f\ -\x00\x70\x00\x65\x00\x6e\x00\x50\x00\x72\x00\x6f\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\ -\x00\x09\ -\x06\x98\x83\x27\ -\x00\x63\ -\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ \x00\x0d\ \x0a\x18\x79\x67\ \x00\x52\ \x00\x61\x00\x76\x00\x65\x00\x41\x00\x64\x00\x64\x00\x49\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\ -\x00\x12\ -\x0e\x38\xf6\x07\ -\x00\x52\ -\x00\x61\x00\x76\x00\x65\x00\x41\x00\x64\x00\x64\x00\x49\x00\x6e\x00\x5f\x00\x31\x00\x36\x00\x70\x00\x78\x00\x2e\x00\x70\x00\x6e\ -\x00\x67\ \x00\x08\ -\x08\xb8\x58\x27\ -\x00\x74\ -\x00\x72\x00\x65\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ -\x00\x0b\ -\x0c\x6a\x2c\x47\ -\x00\x72\ -\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x0c\x33\x5e\x87\ +\x00\x48\ +\x00\x65\x00\x6c\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\ \x00\x0c\ \x06\xdd\x18\x07\ \x00\x6d\ \x00\x65\x00\x74\x00\x61\x00\x64\x00\x61\x00\x74\x00\x61\x00\x2e\x00\x70\x00\x6e\x00\x67\ -\x00\x10\ -\x0e\xa3\x7f\x47\ -\x00\x70\ -\x00\x72\x00\x6f\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x5f\x00\x76\x00\x69\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\ -\x00\x0c\ -\x0b\x76\x61\xc7\ -\x00\x41\ -\x00\x64\x00\x64\x00\x54\x00\x6f\x00\x4d\x00\x61\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\ \x00\x06\ \x07\x28\xfc\x93\ \x00\x6c\ @@ -105549,10 +105524,35 @@ \x06\xfa\xa1\x47\ \x00\x4f\ \x00\x70\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x12\ +\x0e\x38\xf6\x07\ +\x00\x52\ +\x00\x61\x00\x76\x00\x65\x00\x41\x00\x64\x00\x64\x00\x49\x00\x6e\x00\x5f\x00\x31\x00\x36\x00\x70\x00\x78\x00\x2e\x00\x70\x00\x6e\ +\x00\x67\ \x00\x0e\ \x02\x28\x16\x67\ \x00\x4e\ \x00\x65\x00\x77\x00\x50\x00\x72\x00\x6f\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0c\ +\x0b\x76\x61\xc7\ +\x00\x41\ +\x00\x64\x00\x64\x00\x54\x00\x6f\x00\x4d\x00\x61\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x06\x98\x83\x27\ +\x00\x63\ +\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x10\ +\x0e\xa3\x7f\x47\ +\x00\x70\ +\x00\x72\x00\x6f\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x5f\x00\x76\x00\x69\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0b\ +\x0c\x6a\x2c\x47\ +\x00\x72\ +\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0f\ +\x03\xc9\x22\xe7\ +\x00\x4f\ +\x00\x70\x00\x65\x00\x6e\x00\x50\x00\x72\x00\x6f\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\ \x00\x15\ \x07\x00\x43\x07\ \x00\x75\ @@ -105562,10 +105562,6 @@ \x0a\xce\x46\x07\ \x00\x52\ \x00\x61\x00\x73\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ -\x00\x07\ -\x0b\x67\x57\xc7\ -\x00\x44\ -\x00\x6f\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\ \x00\x0c\ \x01\xff\x22\xe7\ \x00\x4d\ @@ -105574,6 +105570,10 @@ \x06\xac\xd7\x07\ \x00\x50\ \x00\x6f\x00\x6c\x00\x79\x00\x6c\x00\x69\x00\x6e\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x07\ +\x0b\x67\x57\xc7\ +\x00\x44\ +\x00\x6f\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\ \x00\x0b\ \x0f\x0f\x90\xa7\ \x00\x50\ @@ -105584,26 +105584,26 @@ \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\x14\x00\x02\x00\x00\x00\x10\x00\x00\x00\x03\ -\x00\x00\x01\xd2\x00\x00\x00\x00\x00\x01\x00\x0c\xdf\x1e\ -\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x10\x32\ -\x00\x00\x00\xae\x00\x00\x00\x00\x00\x01\x00\x00\x13\x02\ -\x00\x00\x01\x42\x00\x00\x00\x00\x00\x01\x00\x0c\xd4\x59\ -\x00\x00\x01\xb6\x00\x00\x00\x00\x00\x01\x00\x0c\xdb\xfb\ +\x00\x00\x01\x36\x00\x00\x00\x00\x00\x01\x00\x0c\xcf\xb9\ +\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x0c\xdf\xde\ +\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x0c\xd7\x05\ +\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x01\x00\x0c\xc7\x39\ +\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x0c\xc9\x11\ \x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x0c\xe2\xae\ -\x00\x00\x01\xa4\x00\x02\x00\x00\x00\x05\x00\x00\x00\x13\ -\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x22\ -\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x24\ -\x00\x00\x01\x10\x00\x00\x00\x00\x00\x01\x00\x0c\xd0\x0c\ -\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x16\x7b\ -\x00\x00\x01\x86\x00\x00\x00\x00\x00\x01\x00\x0c\xd8\x3f\ +\x00\x00\x00\xde\x00\x02\x00\x00\x00\x05\x00\x00\x00\x13\ \x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x26\x00\x00\x00\x00\x00\x01\x00\x0c\xd1\x07\ -\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x0c\xcc\x87\ -\x00\x00\x01\x60\x00\x00\x00\x00\x00\x01\x00\x0c\xd6\x31\ -\x00\x00\x02\x52\x00\x00\x00\x00\x00\x01\x00\x19\xa7\x2a\ -\x00\x00\x02\x70\x00\x00\x00\x00\x00\x01\x00\x19\xae\xad\ -\x00\x00\x02\x24\x00\x00\x00\x00\x00\x01\x00\x19\x98\xba\ +\x00\x00\x00\x70\x00\x00\x00\x00\x00\x01\x00\x00\x03\x0b\ +\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x02\x10\ +\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x04\x09\ +\x00\x00\x01\x58\x00\x00\x00\x00\x00\x01\x00\x0c\xd3\x49\ +\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x01\x00\x0c\xba\x15\ +\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x0c\xdc\x8c\ +\x00\x00\x01\x0c\x00\x00\x00\x00\x00\x01\x00\x0c\xcc\x34\ +\x00\x00\x01\x8e\x00\x00\x00\x00\x00\x01\x00\x0c\xda\x7e\ \x00\x00\x02\x3e\x00\x00\x00\x00\x00\x01\x00\x19\xa0\x4d\ +\x00\x00\x02\x5c\x00\x00\x00\x00\x00\x01\x00\x19\xa7\xd0\ +\x00\x00\x02\x24\x00\x00\x00\x00\x00\x01\x00\x19\x98\xba\ +\x00\x00\x02\x7a\x00\x00\x00\x00\x00\x01\x00\x19\xae\xf3\ \x00\x00\x02\x8e\x00\x00\x00\x00\x00\x01\x00\x19\xb5\xd0\ " @@ -105614,45 +105614,45 @@ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x14\x00\x02\x00\x00\x00\x10\x00\x00\x00\x03\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x01\xd2\x00\x00\x00\x00\x00\x01\x00\x0c\xdf\x1e\ +\x00\x00\x01\x36\x00\x00\x00\x00\x00\x01\x00\x0c\xcf\xb9\ \x00\x00\x01\x78\xcb\xf6\xd9\x17\ -\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x10\x32\ +\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x0c\xdf\xde\ \x00\x00\x01\x78\xcb\xf6\xd9\x1b\ -\x00\x00\x00\xae\x00\x00\x00\x00\x00\x01\x00\x00\x13\x02\ +\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x0c\xd7\x05\ \x00\x00\x01\x79\x00\x08\x0a\x2c\ -\x00\x00\x01\x42\x00\x00\x00\x00\x00\x01\x00\x0c\xd4\x59\ +\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x01\x00\x0c\xc7\x39\ \x00\x00\x01\x78\xcb\xf6\xd9\xc3\ -\x00\x00\x01\xb6\x00\x00\x00\x00\x00\x01\x00\x0c\xdb\xfb\ +\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x0c\xc9\x11\ \x00\x00\x01\x78\xcb\xf6\xd9\x1e\ \x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x0c\xe2\xae\ \x00\x00\x01\x78\xcb\xf6\xd9\x4c\ -\x00\x00\x01\xa4\x00\x02\x00\x00\x00\x05\x00\x00\x00\x13\ +\x00\x00\x00\xde\x00\x02\x00\x00\x00\x05\x00\x00\x00\x13\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x22\ +\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x01\x78\xcb\xf6\xd9\x10\ -\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x24\ +\x00\x00\x00\x70\x00\x00\x00\x00\x00\x01\x00\x00\x03\x0b\ \x00\x00\x01\x78\xcb\xf6\xd9\xc0\ -\x00\x00\x01\x10\x00\x00\x00\x00\x00\x01\x00\x0c\xd0\x0c\ +\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x02\x10\ \x00\x00\x01\x78\xcb\xf6\xd9\xca\ -\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x16\x7b\ +\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x04\x09\ \x00\x00\x01\x78\xcb\xf6\xd9\x3d\ -\x00\x00\x01\x86\x00\x00\x00\x00\x00\x01\x00\x0c\xd8\x3f\ +\x00\x00\x01\x58\x00\x00\x00\x00\x00\x01\x00\x0c\xd3\x49\ \x00\x00\x01\x78\xcb\xf6\xd9\xb1\ -\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x01\x00\x0c\xba\x15\ \x00\x00\x01\x78\xcb\xf6\xd9\x14\ -\x00\x00\x01\x26\x00\x00\x00\x00\x00\x01\x00\x0c\xd1\x07\ +\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x0c\xdc\x8c\ \x00\x00\x01\x78\xcb\xf6\xd9\xc7\ -\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x0c\xcc\x87\ +\x00\x00\x01\x0c\x00\x00\x00\x00\x00\x01\x00\x0c\xcc\x34\ \x00\x00\x01\x78\xcb\xf6\xd9\x40\ -\x00\x00\x01\x60\x00\x00\x00\x00\x00\x01\x00\x0c\xd6\x31\ +\x00\x00\x01\x8e\x00\x00\x00\x00\x00\x01\x00\x0c\xda\x7e\ \x00\x00\x01\x78\xf0\xdf\x37\xd3\ -\x00\x00\x02\x52\x00\x00\x00\x00\x00\x01\x00\x19\xa7\x2a\ +\x00\x00\x02\x3e\x00\x00\x00\x00\x00\x01\x00\x19\xa0\x4d\ \x00\x00\x01\x78\xf0\x6b\xf4\x30\ -\x00\x00\x02\x70\x00\x00\x00\x00\x00\x01\x00\x19\xae\xad\ +\x00\x00\x02\x5c\x00\x00\x00\x00\x00\x01\x00\x19\xa7\xd0\ \x00\x00\x01\x78\xf0\x6b\x11\xa0\ \x00\x00\x02\x24\x00\x00\x00\x00\x00\x01\x00\x19\x98\xba\ \x00\x00\x01\x78\xf0\x6a\xa4\x40\ -\x00\x00\x02\x3e\x00\x00\x00\x00\x00\x01\x00\x19\xa0\x4d\ +\x00\x00\x02\x7a\x00\x00\x00\x00\x00\x01\x00\x19\xae\xf3\ \x00\x00\x01\x78\xf0\x6c\x59\xc0\ \x00\x00\x02\x8e\x00\x00\x00\x00\x00\x01\x00\x19\xb5\xd0\ \x00\x00\x01\x78\xf0\x6b\x86\xd0\ diff --git a/src/ui/dock_widget.py b/src/ui/dock_widget.py index 957d557..957fa33 100644 --- a/src/ui/dock_widget.py +++ b/src/ui/dock_widget.py @@ -8,7 +8,6 @@ from PyQt5 import QtCore, QtGui, QtWidgets - class Ui_QRAVEDockWidgetBase(object): def setupUi(self, QRAVEDockWidgetBase): QRAVEDockWidgetBase.setObjectName("QRAVEDockWidgetBase") @@ -36,3 +35,4 @@ def setupUi(self, QRAVEDockWidgetBase): def retranslateUi(self, QRAVEDockWidgetBase): _translate = QtCore.QCoreApplication.translate QRAVEDockWidgetBase.setWindowTitle(_translate("QRAVEDockWidgetBase", "Riverscapes Toolbar (QRAVE)")) + diff --git a/src/ui/options_dialog.ui b/src/ui/options_dialog.ui index 9b4a439..6ebf95f 100644 --- a/src/ui/options_dialog.ui +++ b/src/ui/options_dialog.ui @@ -1,119 +1,119 @@ - Dialog - - - - 0 - 0 - 365 - 251 - - - - Options - - - - - - Include basemaps in explorer tree - - - - - - - - - Region - - - - - - - - 0 - 0 - - - - - - - - ... - - - - - - - - - Load default project views when opening projects - - - - - - - Qt::Vertical - - - - 20 - 154 - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Reset - - - - + Dialog + + + + 0 + 0 + 365 + 251 + + + + Options + + + + + + Include basemaps in explorer tree + - - - - buttonBox - accepted() - Dialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - Dialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - + + + + + + + Region + + + + + + + + 0 + 0 + + + + + + + + ... + + + + + + + + + Load default project views when opening projects + + + + + + + Qt::Vertical + + + + 20 + 154 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Reset + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + +