diff --git a/CenRa_AUTOMAP/__init__.py b/CenRa_AUTOMAP/__init__.py
index 037523a..f0ed432 100644
--- a/CenRa_AUTOMAP/__init__.py
+++ b/CenRa_AUTOMAP/__init__.py
@@ -1,10 +1,10 @@
+# -*- coding: utf-8 -*-
__copyright__ = "Copyright 2021, 3Liz"
__license__ = "GPL version 3"
__email__ = "info@3liz.org"
-# noinspection PyPep8Naming
-def classFactory(iface): # pylint: disable=invalid-name
+def classFactory(iface):
_ = iface
from CenRa_AUTOMAP.CenRa_AutoMap import PgAutoMap
return PgAutoMap()
diff --git a/CenRa_AUTOMAP/canvas_editor.py b/CenRa_AUTOMAP/canvas_editor.py
index 707cd06..887c30a 100644
--- a/CenRa_AUTOMAP/canvas_editor.py
+++ b/CenRa_AUTOMAP/canvas_editor.py
@@ -57,6 +57,7 @@ from qgis.PyQt.QtWidgets import (
QTableWidgetItem,
QVBoxLayout,
)
+from PyQt5 import QtGui
from qgis.PyQt.QtXml import QDomDocument
from qgis.utils import iface
import glob
@@ -114,6 +115,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
self.setupUi(self)
self.settings = QgsSettings()
self.s = QSettings()
+ self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
path = ''
ix = 0
diff --git a/CenRa_FLUX/FluxCEN.py b/CenRa_FLUX/FluxCEN.py
index b01ef81..88aa50d 100644
--- a/CenRa_FLUX/FluxCEN.py
+++ b/CenRa_FLUX/FluxCEN.py
@@ -55,7 +55,7 @@ import requests
import base64
ssl._create_default_https_context = ssl._create_unverified_context
-
+from PyQt5 import QtGui
from .tools.resources import maj_verif
from .tools.PythonSQL import *
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
@@ -137,7 +137,6 @@ class FluxCEN:
self.plugin_dir,
'i18n',
'FluxCEN_{}.qm'.format(locale))
-
version = qgis.utils.pluginMetadata('CenRa_FLUX','version')
# Display About window on first use
s = QSettings()
@@ -155,7 +154,6 @@ class FluxCEN:
self.actions = []
self.menu = self.tr(u'&FluxCEN')
self.dlg = FluxCENDialog()
-
self.plugin_path = os.path.dirname(__file__)
# Check if plugin was started the first time in current QGIS session
diff --git a/CenRa_Metabase/editor.py b/CenRa_Metabase/editor.py
index 0ca8913..1d496b9 100644
--- a/CenRa_Metabase/editor.py
+++ b/CenRa_Metabase/editor.py
@@ -20,6 +20,7 @@ from qgis.core import (
QgsGeometry,
QgsWkbTypes,
)
+from PyQt5 import QtGui
from qgis.PyQt.QtCore import QLocale, QUrl, QDateTime
from qgis.PyQt.QtGui import QDesktopServices, QIcon
from qgis.PyQt.QtPrintSupport import QPrinter
@@ -55,6 +56,7 @@ class Metabase_Editor(QDialog, EDITOR_CLASS):
super().__init__()
self.setupUi(self)
self.settings = QgsSettings()
+ self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
self.import_xml.setAutoRaise(True)
self.import_xml.setText('')
self.import_xml.setIcon(QIcon(QgsApplication.iconPath('mActionAddHtml.svg')))
diff --git a/CenRa_PAGERENDER/canvas_editor.py b/CenRa_PAGERENDER/canvas_editor.py
index 2a6e7a5..caf3233 100644
--- a/CenRa_PAGERENDER/canvas_editor.py
+++ b/CenRa_PAGERENDER/canvas_editor.py
@@ -108,6 +108,7 @@ class PageRender_Editor(QDialog, EDITOR_CLASS):
self.setupUi(self)
self.settings = QgsSettings()
self.s = QSettings()
+ self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
self.varLandscape = {}
self.varPortrait = {}
@@ -202,16 +203,14 @@ class PageRender_Editor(QDialog, EDITOR_CLASS):
else:
Lrotate = float((find_it[find_it[:].find('=')+2:]).split(',')[0])
#print('sh',Psize_h,',sw',Psize_w,',lh',Plocals_h,',lw',Plocals_w,',r',Protate)
- match Lrotate:
- case 90|270:
- old = Lsize_w
- Lsize_w = Lsize_h
- Lsize_h = old
- match Protate:
- case 90|270:
- old = Psize_w
- Psize_w = Psize_h
- Psize_h = old
+ if Lrotate == 90 or Lrotate == 270:
+ old = Lsize_w
+ Lsize_w = Lsize_h
+ Lsize_h = old
+ if Protate == 90 or Protate == 270:
+ old = Psize_w
+ Psize_w = Psize_h
+ Psize_h = old
if self.toolButton_2.text() == 'Landscape':
children.resize(round(Lsize_h),round(Lsize_w))
children.move(round(Llocals_h),round(Llocals_w))
@@ -273,13 +272,12 @@ def fletch_canvas(self):
selection = children
if page_type == 'Portrait':
item_rotate_object=self.varPortrait[selection.objectName()+'_rotate'][0]
- match item_rotate_object:
- case 0|180:
- sw = 0
- sh = 1
- case 90|270:
- sw = 1
- sh = 0
+ if item_rotate_object == 0 or item_rotate_object == 180:
+ sw = 0
+ sh = 1
+ if item_rotate_object == 90 or item_rotate_object == 270:
+ sw = 1
+ sh = 0
if page_size == 'A3':
size_w = (round((self.varPortrait[selection.objectName()+'_size'][sw]/3.5)*1.41))
size_h = (round((self.varPortrait[selection.objectName()+'_size'][sh]/3.5)*1.41))
@@ -292,13 +290,12 @@ def fletch_canvas(self):
locals_h = (round(self.varPortrait[selection.objectName()+'_locals'][0]/3.5))
if page_type == 'Landscape':
item_rotate_object=self.varLandscape[selection.objectName()+'_rotate'][0]
- match item_rotate_object:
- case 0|180:
- sw = 0
- sh = 1
- case 90|270:
- sw = 1
- sh = 0
+ if item_rotate_object == 0 or item_rotate_object == 180:
+ sw = 0
+ sh = 1
+ if item_rotate_object == 90 or item_rotate_object == 270:
+ sw = 1
+ sh = 0
if page_size == 'A3':
size_w = (round((self.varLandscape[selection.objectName()+'_size'][sw]/3.5)*1.41))
size_h = (round((self.varLandscape[selection.objectName()+'_size'][sh]/3.5)*1.41))
diff --git a/CenRa_PAGERENDER/metadata.txt b/CenRa_PAGERENDER/metadata.txt
index 1e03763..e39108e 100644
--- a/CenRa_PAGERENDER/metadata.txt
+++ b/CenRa_PAGERENDER/metadata.txt
@@ -21,7 +21,7 @@ tracker=https://gitea.cenra-outils.org/api/v1/repos/CEN-RA/Plugin_QGIS/issues
hasProcessingProvider=no
# Uncomment the following line and add your changelog:
-changelog=
CenRa_PageRender:
21/10/2024 - Version 1.1:
- Bouton de scroll et adaptation portrait.09/10/2024 - Version 1.0:
- Création.
+changelog=CenRa_PageRender:
21/10/2024 - Version 1.1:
- Les match en if. - Bouton de scroll et adaptation portrait.09/10/2024 - Version 1.0:
- Création.
# Tags are comma separated with spaces allowed
tags=python
diff --git a/CenRa_PAGERENDER/tools/icons/icon.png b/CenRa_PAGERENDER/tools/icons/icon.png
index a0b6c4a..63569ff 100644
Binary files a/CenRa_PAGERENDER/tools/icons/icon.png and b/CenRa_PAGERENDER/tools/icons/icon.png differ
diff --git a/CenRa_POSTGIS/CenRa_Postgis.py b/CenRa_POSTGIS/CenRa_Postgis.py
new file mode 100644
index 0000000..a959c2c
--- /dev/null
+++ b/CenRa_POSTGIS/CenRa_Postgis.py
@@ -0,0 +1,114 @@
+__copyright__ = "Copyright 2021, 3Liz"
+__license__ = "GPL version 3"
+__email__ = "info@3liz.org"
+
+
+from qgis.core import QgsApplication
+from qgis.PyQt.QtCore import QCoreApplication, Qt, QTranslator, QUrl
+from qgis.PyQt.QtGui import QDesktopServices, QIcon
+from qgis.PyQt.QtWidgets import QAction, QMessageBox
+from qgis.utils import iface
+import qgis
+
+
+#include
+
+import os
+from .tools.resources import (
+ plugin_path,
+ resources_path,
+ maj_verif,
+)
+from .postgis_editor import Postgis_Editor
+from .postgis_creator import Postgis_Creator
+from .about_form import PostgisAboutDialog
+
+from PyQt5.QtCore import *
+
+class PgPostgis:
+ def __init__(self):
+ """ Constructor. """
+ self.action_editor = None
+ self.action_creator = None
+# self.issues = None
+ self.provider = None
+ self.locator_filter = None
+ self.dock_action = None
+ self.help_action = None
+ plugin_dir = os.path.dirname(__file__)
+ end_find = plugin_dir.rfind('\\')+1
+ global NAME
+ NAME = plugin_dir[end_find:]
+ maj_verif(NAME)
+
+ # Display About window on first use
+ version = qgis.utils.pluginMetadata('CenRa_POSTGIS','version')
+ s = QSettings()
+ versionUse = s.value("postgis/version", 1, type=str)
+ if str(versionUse) != str(version) :
+ s.setValue("postgis/version", str(version))
+ print(versionUse,version)
+ self.open_about_dialog()
+
+ def initGui(self):
+ """ Build the plugin GUI. """
+
+ self.toolBar = iface.addToolBar("CenRa_Postgis")
+ self.toolBar.setObjectName("CenRa_Postgis")
+
+ icon = QIcon(resources_path('icons', 'page_new.png'))
+ icon2 = QIcon(resources_path('icons', 'page_ajout.png'))
+
+ # Open the online help
+ self.help_action = QAction(icon, "CenRa_Postgis", iface.mainWindow())
+ iface.pluginHelpMenu().addAction(self.help_action)
+ self.help_action.triggered.connect(self.open_help)
+ if not self.action_creator:
+ self.action_creator = Postgis_Creator()
+
+ self.postgis_creator = QAction(icon, 'dossier_creator',None)
+ self.toolBar.addAction(self.postgis_creator)
+ self.postgis_creator.triggered.connect(self.open_creator)
+ if not self.action_editor:
+ self.action_editor = Postgis_Editor()
+
+ self.postgis_editor = QAction(icon2, 'dossier_editor',None)
+ self.toolBar.addAction(self.postgis_editor)
+ self.postgis_editor.triggered.connect(self.open_editor)
+
+ def open_about_dialog(self):
+ """
+ About dialog
+ """
+ dialog = PostgisAboutDialog(iface)
+ dialog.exec_()
+ def open_help():
+ """ Open the online help. """
+ QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
+
+ def open_editor(self):
+ self.action_editor.show()
+ self.action_editor.raise_()
+
+ def open_creator(self):
+ self.action_creator.show()
+ self.action_creator.raise_()
+
+ def unload(self):
+ """ Unload the plugin. """
+ if self.action_editor:
+ iface.removePluginMenu('CenRa_Postgis',self.postgis_editor)
+ if self.action_creator:
+ iface.removePluginMenu('CenRa_Postgis',self.postgis_creator)
+
+ if self.provider:
+ QgsApplication.processingRegistry().removeProvider(self.provider)
+ del self.provider
+
+ if self.locator_filter:
+ iface.deregisterLocatorFilter(self.locator_filter)
+ del self.locator_filter
+
+ if self.help_action:
+ iface.pluginHelpMenu().removeAction(self.help_action)
+ del self.help_action
diff --git a/CenRa_POSTGIS/Makefile b/CenRa_POSTGIS/Makefile
deleted file mode 100644
index ff1a50b..0000000
--- a/CenRa_POSTGIS/Makefile
+++ /dev/null
@@ -1,119 +0,0 @@
-#/***************************************************************************
-# CenRa
-#
-# Conservatoire d'Espaces Naturels de Rhône-Alpes
-# -------------------
-# begin : 2014-03-27
-# copyright : (C) 2014 by Conservatoire d'Espaces Naturels de Rhône-Alpes
-# email : guillaume.costes@espaces-naturels.fr
-# ***************************************************************************/
-#
-#/***************************************************************************
-# * *
-# * This program is free software; you can redistribute it and/or modify *
-# * it under the terms of the GNU General Public License as published by *
-# * the Free Software Foundation; either version 2 of the License, or *
-# * (at your option) any later version. *
-# * *
-# ***************************************************************************/
-
-# CONFIGURATION
-PLUGIN_UPLOAD = $(CURDIR)/plugin_upload.py
-
-QGISDIR=.qgis2
-
-# Makefile for a PyQGIS plugin
-
-# translation
-SOURCES = cenra.py ui_cenra.py __init__.py cenradialog.py
-#TRANSLATIONS = i18n/cenra_en.ts
-TRANSLATIONS =
-
-# global
-
-PLUGINNAME = cenra
-
-PY_FILES = cenra.py cenradialog.py __init__.py
-
-EXTRAS = cenra.png metadata.txt
-
-UI_FILES = ui_cenra.py
-
-RESOURCE_FILES = resources_rc.py
-
-HELP = help/build/html
-
-default: compile
-
-compile: $(UI_FILES) $(RESOURCE_FILES)
-
-%_rc.py : %.qrc
- pyrcc4 -o $*_rc.py $<
-
-%.py : %.ui
- pyuic4 -o $@ $<
-
-%.qm : %.ts
- lrelease $<
-
-# The deploy target only works on unix like operating system where
-# the Python plugin directory is located at:
-# $HOME/$(QGISDIR)/python/plugins
-deploy: compile doc transcompile
- mkdir -p $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
- cp -vf $(PY_FILES) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
- cp -vf $(UI_FILES) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
- cp -vf $(RESOURCE_FILES) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
- cp -vf $(EXTRAS) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
- cp -vfr i18n $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
- cp -vfr $(HELP) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)/help
-
-# The dclean target removes compiled python files from plugin directory
-# also delets any .svn entry
-dclean:
- find $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) -iname "*.pyc" -delete
- find $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) -iname ".svn" -prune -exec rm -Rf {} \;
-
-# The derase deletes deployed plugin
-derase:
- rm -Rf $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)
-
-# The zip target deploys the plugin and creates a zip file with the deployed
-# content. You can then upload the zip file on http://plugins.qgis.org
-zip: deploy dclean
- rm -f $(PLUGINNAME).zip
- cd $(HOME)/$(QGISDIR)/python/plugins; zip -9r $(CURDIR)/$(PLUGINNAME).zip $(PLUGINNAME)
-
-# Create a zip package of the plugin named $(PLUGINNAME).zip.
-# This requires use of git (your plugin development directory must be a
-# git repository).
-# To use, pass a valid commit or tag as follows:
-# make package VERSION=Version_0.3.2
-package: compile
- rm -f $(PLUGINNAME).zip
- git archive --prefix=$(PLUGINNAME)/ -o $(PLUGINNAME).zip $(VERSION)
- echo "Created package: $(PLUGINNAME).zip"
-
-upload: zip
- $(PLUGIN_UPLOAD) $(PLUGINNAME).zip
-
-# transup
-# update .ts translation files
-transup:
- pylupdate4 Makefile
-
-# transcompile
-# compile translation files into .qm binary format
-transcompile: $(TRANSLATIONS:.ts=.qm)
-
-# transclean
-# deletes all .qm files
-transclean:
- rm -f i18n/*.qm
-
-clean:
- rm $(UI_FILES) $(RESOURCE_FILES)
-
-# build documentation with sphinx
-doc:
- cd help; make html
diff --git a/CenRa_POSTGIS/README.html b/CenRa_POSTGIS/README.html
deleted file mode 100644
index 2c92b76..0000000
--- a/CenRa_POSTGIS/README.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-Plugin Builder Results
-
-Your plugin
CenRa was created in:
-
C:\Users\gcostes\.qgis2\python\plugins\CenRa
-
-Your QGIS plugin directory is located at:
- C:/Users/gcostes/.qgis2/python/plugins
-
-What's Next
-
- - Copy the entire directory containing your new plugin to the QGIS plugin directory
-
- Compile the ui file using pyuic4
-
- Compile the resources file using pyrcc4
-
- Test the plugin by enabling it in the QGIS plugin manager
-
- Customize it by editing the implementation file cenra.py
-
- Create your own custom icon, replacing the default icon.png
-
- Modify your user interface by opening cenra.ui in Qt Designer (don't forget to compile it with pyuic4 after changing it)
-
- You can use the Makefile to compile your Ui and resource files when you make changes. This requires GNU make (gmake)
-
-
-
-
-©2011-2014 GeoApt LLC - geoapt.com
-
-
diff --git a/CenRa_POSTGIS/__init__.py b/CenRa_POSTGIS/__init__.py
index c2b6426..1841d23 100644
--- a/CenRa_POSTGIS/__init__.py
+++ b/CenRa_POSTGIS/__init__.py
@@ -1,28 +1,11 @@
# -*- coding: utf-8 -*-
-"""
-/***************************************************************************
- CenRa
- A QGIS plugin
- Conservatoire d'Espaces Naturels de Rhône-Alpes
- -------------------
- begin : 2014-03-27
- copyright : (C) 2014 by Conservatoire d'Espaces Naturels de Rhône-Alpes
- email : guillaume.costes@espaces-naturels.fr
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
- This script initializes the plugin, making it known to QGIS.
-"""
-from __future__ import absolute_import
def classFactory(iface):
- # load CenRa class from file CenRa
+ _ = iface
+ from CenRa_POSTGIS.CenRa_Postgis import PgPostgis
+ return PgPostgis()
+
+ """
from .cenra import CenRa
return CenRa(iface)
+ """
diff --git a/CenRa_POSTGIS/__init__.py.bak b/CenRa_POSTGIS/__init__.py.bak
deleted file mode 100644
index a1de155..0000000
--- a/CenRa_POSTGIS/__init__.py.bak
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-/***************************************************************************
- CenRa
- A QGIS plugin
- Conservatoire d'Espaces Naturels de Rhône-Alpes
- -------------------
- begin : 2014-03-27
- copyright : (C) 2014 by Conservatoire d'Espaces Naturels de Rhône-Alpes
- email : guillaume.costes@espaces-naturels.fr
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
- This script initializes the plugin, making it known to QGIS.
-"""
-
-def classFactory(iface):
- # load CenRa class from file CenRa
- from cenra import CenRa
- return CenRa(iface)
diff --git a/CenRa_POSTGIS/forms/about_form.py b/CenRa_POSTGIS/about_form.py
similarity index 79%
rename from CenRa_POSTGIS/forms/about_form.py
rename to CenRa_POSTGIS/about_form.py
index b989679..59bb77d 100644
--- a/CenRa_POSTGIS/forms/about_form.py
+++ b/CenRa_POSTGIS/about_form.py
@@ -6,13 +6,13 @@ from qgis.PyQt import uic
from qgis.PyQt.QtGui import QPixmap
from qgis.PyQt.QtWidgets import QDialog
-from ..tools.resources import devlog
+from .tools.resources import devlog
ABOUT_FORM_CLASS, _ = uic.loadUiType(
os.path.join(
- str(Path(__file__).resolve().parent.parent),
- 'forms',
- 'postgis_about_form.ui'
+ str(Path(__file__).resolve().parent),
+ 'tools/ui',
+ 'CenRa_about_form.ui'
)
)
@@ -26,7 +26,7 @@ class PostgisAboutDialog(QDialog, ABOUT_FORM_CLASS):
self.iface = iface
self.setupUi(self)
- self.viewer.setHtml(devlog('CenRa_POSTGIS'))
+ self.viewer.setHtml(devlog('CenRa_POSTGRES'))
self.rejected.connect(self.onReject)
self.buttonBox.rejected.connect(self.onReject)
diff --git a/CenRa_POSTGIS/cenra.py b/CenRa_POSTGIS/cenra.py
deleted file mode 100644
index 1576332..0000000
--- a/CenRa_POSTGIS/cenra.py
+++ /dev/null
@@ -1,940 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-/***************************************************************************
- CenRa
- A QGIS plugin
- Conservatoire d'Espaces Naturels de Rhône-Alpes
- -------------------
- begin : 2014-03-27
- copyright : (C) 2014 by Conservatoire d'Espaces Naturels de Rhône-Alpes
- email : guillaume.costes@espaces-naturels.fr
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-"""
-from __future__ import absolute_import
-# Import the PyQt and QGIS libraries
-from builtins import next
-from builtins import str
-from builtins import object
-import qgis
-from qgis.PyQt.QtCore import QSettings
-from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog
-from qgis.PyQt.QtGui import QIcon
-from PyQt5.QtCore import *
-from PyQt5.QtGui import *
-from qgis.core import *
-from qgis.core import QgsDataSourceUri
-from .forms.about_form import PostgisAboutDialog
-# Initialize Qt resources from file resources.py
-from . import resources_rc
-# Import the code for the dialog
-from .cenradialog import CenRaDialog
-from .table_postgisdialog import table_postgisDialog
-from .tools.PythonSQL import *
-from .tools.resources import maj_verif
-
-import os.path
-import webbrowser, os
-import psycopg2
-import psycopg2.extras
-import base64
-
-class CenRa(object):
-
- def __init__(self, iface):
- # Save reference to the QGIS interface
- self.iface = iface
- # initialize plugin directory
- self.plugin_dir = os.path.dirname(__file__)
- # initialize locale
- locale = QSettings().value("locale/userLocale")[0:2]
- localePath = os.path.join(self.plugin_dir, 'i18n', 'cenra_{}.qm'.format(locale))
-
- if os.path.exists(localePath):
- self.translator = QTranslator()
- self.translator.load(localePath)
-
- if qVersion() > '4.3.3':
- QCoreApplication.installTranslator(self.translator)
-
- # Create the dialog (after translation) and keep reference
- self.dlg = CenRaDialog()
- self.dlgAjout = table_postgisDialog()
- maj_verif('CenRa_POSTGIS')
-
- version = qgis.utils.pluginMetadata('CenRa_POSTGIS','version')
- # Display About window on first use
- s = QSettings()
- versionUse = s.value("postgis/version", 1, type=str)
- if str(versionUse) != str(version) :
- s.setValue("postgis/version", str(version))
- self.open_about_dialog()
-
- def initGui(self):
- self.toolBar = self.iface.addToolBar("CEN-RA")
- self.toolBar.setObjectName("CEN-RA")
-
- # ***Create action that will start plugin configuration
- self.action = QAction(
- QIcon(":/plugins/CenRa/page_new.png"),
- u"Création d'un dossier", self.iface.mainWindow())
- # connect the action to the run method
- self.action.triggered.connect(self.creation)
-
- # Add toolbar button and menu item
- self.toolBar.addAction(self.action)
- self.iface.addPluginToMenu(u"CenRa", self.action)
-
- # ***Create action that will start plugin configuration
- self.action = QAction(
- QIcon(":/plugins/CenRa/page_ajout.png"),
- u"Ajout d'une table", self.iface.mainWindow())
- # connect the action to the run method
- self.action.triggered.connect(self.ajout)
-
- # Add toolbar button and menu item
- self.toolBar.addAction(self.action)
- self.iface.addPluginToMenu(u"&CenRa", self.action)
-
- # ***Create action that will start plugin configuration
- self.action = QAction(
- QIcon(":/plugins/CenRa/help.png"),
- u"Aide", self.iface.mainWindow())
- # connect the action to the run method
- self.action.triggered.connect(self.doHelp)
-
- # Add toolbar button and menu item
- self.toolBar.addAction(self.action)
- self.iface.addPluginToMenu(u"CenRa", self.action)
-
- self.menu = QMenu()
- self.menu.setTitle( QCoreApplication.translate( "CENRA","&CenRa" ) )
-
- self.cenra_new = QAction( QIcon(":/plugins/CenRa/page_new.png"), QCoreApplication.translate("CENRA", u"Création d'un dossier" ), self.iface.mainWindow() )
- self.cenra_ajout = QAction( QIcon(":/plugins/CenRa/page_ajout.png"), QCoreApplication.translate("CENRA", "Ajout d'une table" ), self.iface.mainWindow() )
- self.cenra_help = QAction( QIcon(":/plugins/CenRa/help.png"), QCoreApplication.translate("CENRA", "Aide" ), self.iface.mainWindow() )
-
- self.menu.addActions( [self.cenra_new, self.cenra_ajout, self.cenra_help] )
-
- menu_bar = self.iface.mainWindow().menuBar()
- actions = menu_bar.actions()
- lastAction = actions[ len( actions ) - 1 ]
- menu_bar.insertMenu( lastAction, self.menu )
-
- self.cenra_new.triggered.connect(self.creation)
- self.cenra_ajout.triggered.connect(self.ajout)
- self.cenra_help.triggered.connect(self.doHelp)
-
- def open_about_dialog(self):
- dialog = PostgisAboutDialog(self.iface)
- dialog.exec_()
-
- def unload(self):
- # Remove the plugin menu item and icon
- self.iface.removePluginMenu(u"&CENRA", self.action)
- self.iface.removePluginMenu(u"&CenRa", self.action)
- self.iface.removeToolBarIcon(self.action)
-
- # run method that performs all the real work
- def creation(self):
- # show the dialog
- self.dlg.show()
- # Run the dialog event loop
- result = self.dlg.exec_()
- # See if OK was pressed
- if result == 1:
-
-#**********************************Debut_script****************************************
-
- ### Creation du schema pour le nouveau site
- if self.dlg.at.isChecked():
- schema = "_" + self.dlg.dept.currentText() + "_at_" + self.dlg.nom.text().lower() # Ajout de "_" pour eviter pb de numero en premier caractere
- else :
- schema = "_" + self.dlg.dept.currentText() + "_" + self.dlg.nom.text().lower() # Ajout de "_" pour eviter pb de numero en premier caractere
-
- if self.dlg.nom.text() == "" or self.dlg.nom.text() == "NULL":
- QMessageBox.warning(None, "Oups :", "Veuillez renseigner un nom de dossier.")
- return
-
- ch = [u"à", u"À", u"â", u"Â", u"ä", u"Ä", u"å", u"Å", u"ç", u"Ç", u"é", u"É", u"è", u"È", u"ê", u"Ê", u"ë", u"Ë", u"î", u"Î", u"ï", u"Ï", u"ô", u"Ô", u"ö", u"Ö", u"ù", u"Ù", u"û", u"Û", u"ü", u"Ü", u"ÿ", u"Ÿ", u"'", u"-", u" "]
- for car in ch :
- if self.dlg.nom.text().find(car) != -1 :
- QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.dlg.nom.text().lower() )
- return
-
- first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
- first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
- first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
- res_ident = first_cur.fetchone()
- mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
- user = res_ident[1]
- con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
- cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
- first_conn.close()
-
- SQL_schema = "CREATE SCHEMA " + schema + ";"
- SQL_GRANT_SCHEMA="GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_qgis; GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_sig;"
-
- cur.execute(SQL_schema)
- cur.execute(SQL_GRANT_SCHEMA)
-
- ### Creation de la table contour
- if self.dlg.couche_contour.isChecked(): # Verifie si la checkbox est cochee
- if self.dlg.annee_1.text() == 'aaaa' or self.dlg.annee_1.text() == '':
- tablename = schema + "_contour"
- else :
- tablename = schema + "_contour_" + self.dlg.annee_1.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
-
- SQL_contour = "CREATE TABLE " + schema + "."+ tablename + champ_contour
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'contour_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_contour)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
- cur.execute(SQL_GRANT_TABLE)
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- ### Creation de la table habitat
- if self.dlg.couche_habitat.isChecked():
- if self.dlg.annee_2.text() == 'aaaa' or self.dlg.annee_2.text() == '':
- tablename = schema + "_habitat"
- else :
- tablename = schema + "_habitat_" + self.dlg.annee_2.text()
- tablename_1=tablename+"_points"
- tablename_qgis = tablename_1[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_1 + champ_vegethab_point
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename_1 + " ADD CONSTRAINT " + tablename_1 + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename_1 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_1 + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename_1 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'vegethab_points_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_1+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_VEGETHAB)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_coordonnees)
- cur.execute(SQL_style)
- cur.execute(SQL_GRANT_TABLE)
-
- con.commit()
- ### Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename_1, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- tablename_2=tablename+"_lignes"
- tablename_qgis = tablename_2[1:]
- SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_2 + champ_vegethab_multilinestring
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename_2 + " ADD CONSTRAINT " + tablename_2 + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
- SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename_2 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'vegethab_lignes_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_2+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_VEGETHAB)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_length_m)
- cur.execute(SQL_trigger_length_km)
- cur.execute(SQL_style)
- cur.execute(SQL_GRANT_TABLE)
-
- con.commit()
- ### Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename_2, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- tablename_3=tablename+"_polygones"
- tablename_qgis = tablename_3[1:]
- SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_3 + champ_vegethab_multipolygon
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename_3 + " ADD CONSTRAINT " + tablename_3 + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename_3 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'vegethab_polygones_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_3+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_VEGETHAB)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_style)
- cur.execute(SQL_GRANT_TABLE)
-
- con.commit()
- ### Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename_3, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
- '''
- SQL_habitat = "CREATE TABLE " + schema + "."+ tablename + champ_habitat
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_trigger_concat_cd_cb = "CREATE TRIGGER concat_cd_cb" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.concat_cd_cb();"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'habitat_modele_v3'"""
-
- cur.execute(SQL_habitat)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_trigger_concat_cd_cb)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
- '''
- ### Creation de la table travaux prevus
- if self.dlg.couche_travaux_prevus.isChecked():
- #**********Poly
- if self.dlg.annee_5.text() == 'aaaa' or self.dlg.annee_5.text() == '':
- tablename = schema + "_travaux_prevus_poly"
- else :
- tablename = schema + "_travaux_prevus_poly_" + self.dlg.annee_5.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
-
- SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multipolygon
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'travaux_prevus_poly_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_travaux_prevus)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
- cur.execute(SQL_GRANT_TABLE)
-
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- #**********ligne
- if self.dlg.annee_5.text() == 'aaaa' or self.dlg.annee_5.text() == '':
- tablename = schema + "_travaux_prevus_ligne"
- else :
- tablename = schema + "_travaux_prevus_ligne_" + self.dlg.annee_5.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
-
- SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multilinestring
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
- SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
- SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'travaux_prevus_ligne_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_travaux_prevus)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_trigger_length_m)
- cur.execute(SQL_trigger_length_km)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
- cur.execute(SQL_GRANT_TABLE)
-
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- #**********point
- if self.dlg.annee_5.text() == 'aaaa' or self.dlg.annee_5.text() == '':
- tablename = schema + "_travaux_prevus_point"
- else :
- tablename = schema + "_travaux_prevus_point_" + self.dlg.annee_5.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
-
- SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_point
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
- SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'travaux_prevus_point_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_travaux_prevus)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_trigger_coordonnees)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
- cur.execute(SQL_GRANT_TABLE)
-
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- ### Creation de la table vierge
- if self.dlg.couche_vierge.isChecked():
- if self.dlg.annee_4.text() == 'aaaa' or self.dlg.annee_4.text() == '':
- tablename = schema + "_" + self.dlg.nom_couche_vierge.text().lower()
- else :
- tablename = schema + "_" + self.dlg.nom_couche_vierge.text().lower() + "_" + self.dlg.annee_4.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
-
- if self.dlg.couche_vierge_point.isChecked() == 1 :
- champ_vierge = champ_viergePoint
-
- if self.dlg.couche_vierge_ligne.isChecked() == 1 :
- champ_vierge = champ_viergeLigne
-
- if self.dlg.couche_vierge_polygone.isChecked() == 1 :
- champ_vierge = champ_viergePolygone
-
- SQL_vierge = "CREATE TABLE " + schema + "."+ tablename + champ_vierge
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
-
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
- SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
- SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
-
- cur.execute(SQL_vierge)
- cur.execute(SQL_pkey)
-
- if self.dlg.couche_vierge_point.isChecked() == 1 :
- cur.execute(SQL_trigger_coordonnees)
-
- if self.dlg.couche_vierge_ligne.isChecked() == 1 :
- cur.execute(SQL_trigger_length_m)
- cur.execute(SQL_trigger_length_km)
-
- if self.dlg.couche_vierge_polygone.isChecked() == 1 :
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
-
- con.commit()
-
- ### Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- else :
- con.commit()
-
- con.close()
- pass
-
- ### Outil Aide
- def doHelp(self):
- webbrowser.open("http://plateformesig.cenra-outils.org/")
-
- ### Outil Ajout de nouvelles couche a un dossier
- def ajout(self):
- first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
- first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
- first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
- res_ident = first_cur.fetchone()
- mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
- user = res_ident[1]
-
- con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
- cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
- first_conn.close()
- # Creation de la liste des schemas de la base de donnees
- SQL = """WITH list_schema AS (
- select schemaname,'sig' as group from pg_catalog.pg_tables
- where schemaname ~ E'^_(0|1|2|3|4|6|7|f)'
- group by schemaname
- order by schemaname)
-
- select string_agg(schemaname,',')
- from list_schema
- group by "group";"""
-
- cur.execute(SQL)
-
- list_brut = str(next(cur))
- list = list_brut [2:-2]
- listItems = list.split(",")
-
- con.close()
-
- self.dlgAjout.ui.schema.clear()
- self.dlgAjout.ui.schema.addItems(listItems)
- self.dlgAjout.ui.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema
-
- # show the dialog
- self.dlgAjout.show()
- # Run the dialog event loop
- result = self.dlgAjout.exec_()
- # See if OK was pressed
- if result == 1:
-#******************************debut script*********************************
- first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
- first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
- first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
- res_ident = first_cur.fetchone()
- mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
- user = res_ident[1]
- con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
- cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
- first_conn.close()
-
- if self.dlgAjout.ui.schema.currentIndex() == -1 :
- QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de dossier.")
- return
-
- schema = self.dlgAjout.ui.schema.currentText()
-
- ### Creation de la table contour
- if self.dlgAjout.ui.couche_contour.isChecked(): # Verifie si la checkbox est cochee
- if self.dlgAjout.ui.annee_1.text() == 'aaaa' or self.dlgAjout.ui.annee_1.text() == '':
- tablename = schema + "_contour"
- else :
- tablename = schema + "_contour_" + self.dlgAjout.ui.annee_1.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
-
- SQL_contour = "CREATE TABLE " + schema + "."+ tablename + champ_contour
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'contour_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_contour)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
- cur.execute(SQL_GRANT_TABLE)
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- ### Creation de la table habitat
-
- if self.dlgAjout.ui.couche_habitat.isChecked():
- if self.dlgAjout.ui.annee_2.text() == 'aaaa' or self.dlgAjout.ui.annee_2.text() == '':
- tablename = schema + "_habitat"
- else :
- tablename = schema + "_habitat_" + self.dlgAjout.ui.annee_2.text()
-
- tablename_1=tablename+"_points"
- tablename_qgis = tablename_1[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_1 + champ_vegethab_point
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename_1 + " ADD CONSTRAINT " + tablename_1 + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename_1 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_1 + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename_1 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'vegethab_points_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_1+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_VEGETHAB)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_coordonnees)
- cur.execute(SQL_style)
- cur.execute(SQL_GRANT_TABLE)
-
- con.commit()
- ### Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename_1, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- tablename_2=tablename+"_lignes"
- tablename_qgis = tablename_2[1:]
- SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_2 + champ_vegethab_multilinestring
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename_2 + " ADD CONSTRAINT " + tablename_2 + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
- SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename_2 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'vegethab_lignes_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_2+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_VEGETHAB)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_length_m)
- cur.execute(SQL_trigger_length_km)
- cur.execute(SQL_style)
- cur.execute(SQL_GRANT_TABLE)
-
- con.commit()
- ### Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename_2, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- tablename_3=tablename+"_polygones"
- tablename_qgis = tablename_3[1:]
- SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_3 + champ_vegethab_multipolygon
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename_3 + " ADD CONSTRAINT " + tablename_3 + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename_3 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'vegethab_polygones_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_3+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_VEGETHAB)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_style)
- cur.execute(SQL_GRANT_TABLE)
-
- con.commit()
- ### Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename_3, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
- '''
- SQL_habitat = "CREATE TABLE " + schema + "."+ tablename + champ_habitat
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_trigger_concat_cd_cb = "CREATE TRIGGER concat_cd_cb" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.concat_cd_cb();"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'habitat_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_habitat)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_trigger_concat_cd_cb)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
- cur.execute(SQL_GRANT_TABLE)
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
- '''
- ### Creation de la table travaux prevus
- if self.dlgAjout.ui.couche_travaux_prevus.isChecked():
- #**********Poly
- if self.dlgAjout.ui.annee_5.text() == 'aaaa' or self.dlgAjout.ui.annee_5.text() == '':
- tablename = schema + "_travaux_prevus_poly"
- else :
- tablename = schema + "_travaux_prevus_poly_" + self.dlgAjout.ui.annee_5.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
-
- SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multipolygon
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'travaux_prevus_poly_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_travaux_prevus)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
- cur.execute(SQL_GRANT_TABLE)
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- #**********ligne
- if self.dlgAjout.ui.annee_5.text() == 'aaaa' or self.dlgAjout.ui.annee_5.text() == '':
- tablename = schema + "_travaux_prevus_ligne"
- else :
- tablename = schema + "_travaux_prevus_ligne_" + self.dlgAjout.ui.annee_5.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
-
- SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multilinestring
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
- SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
- SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'travaux_prevus_ligne_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_travaux_prevus)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_trigger_length_m)
- cur.execute(SQL_trigger_length_km)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
- cur.execute(SQL_GRANT_TABLE)
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- #**********point
- if self.dlgAjout.ui.annee_5.text() == 'aaaa' or self.dlgAjout.ui.annee_5.text() == '':
- tablename = schema + "_travaux_prevus_point"
- else :
- tablename = schema + "_travaux_prevus_point_" + self.dlgAjout.ui.annee_5.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
-
- SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_point
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
- SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'travaux_prevus_point_modele_v3'"""
- SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
-
- cur.execute(SQL_travaux_prevus)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_trigger_coordonnees)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
- cur.execute(SQL_GRANT_TABLE)
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- ### Creation de la table vierge
- if self.dlgAjout.ui.couche_vierge.isChecked():
- if self.dlgAjout.ui.annee_4.text() == 'aaaa' or self.dlgAjout.ui.annee_4.text() == '':
- tablename = schema + "_" + self.dlgAjout.ui.nom_couche_vierge.text().lower()
- else :
- tablename = schema + "_" + self.dlgAjout.ui.nom_couche_vierge.text().lower() + "_" + self.dlgAjout.ui.annee_4.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
-
- if self.dlgAjout.ui.couche_vierge_point.isChecked() == 1 :
- champ_vierge = champ_viergePoint
-
- if self.dlgAjout.ui.couche_vierge_ligne.isChecked() == 1 :
- champ_vierge = champ_viergeLigne
-
- if self.dlgAjout.ui.couche_vierge_polygone.isChecked() == 1 :
- champ_vierge = champ_viergePolygone
-
- SQL_vierge = "CREATE TABLE " + schema + "."+ tablename + champ_vierge
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
-
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
- SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
- SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
-
- cur.execute(SQL_vierge)
- cur.execute(SQL_pkey)
-
- if self.dlgAjout.ui.couche_vierge_point.isChecked() == 1 :
- cur.execute(SQL_trigger_coordonnees)
-
- if self.dlgAjout.ui.couche_vierge_ligne.isChecked() == 1 :
- cur.execute(SQL_trigger_length_m)
- cur.execute(SQL_trigger_length_km)
-
- if self.dlgAjout.ui.couche_vierge_polygone.isChecked() == 1 :
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
-
- con.commit()
-
- ### Affichage de la table
- uri = QgsDataSourceUri()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,mdp)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- else :
- con.commit()
-
- con.close()
- pass
diff --git a/CenRa_POSTGIS/cenra.py.bak b/CenRa_POSTGIS/cenra.py.bak
deleted file mode 100644
index 0812e5e..0000000
--- a/CenRa_POSTGIS/cenra.py.bak
+++ /dev/null
@@ -1,798 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-/***************************************************************************
- CenRa
- A QGIS plugin
- Conservatoire d'Espaces Naturels de Rhône-Alpes
- -------------------
- begin : 2014-03-27
- copyright : (C) 2014 by Conservatoire d'Espaces Naturels de Rhône-Alpes
- email : guillaume.costes@espaces-naturels.fr
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-"""
-from __future__ import absolute_import
-# Import the PyQt and QGIS libraries
-from builtins import str
-from builtins import object
-from qgis.PyQt.QtCore import QSettings
-from qgis.PyQt.QtWidgets import QAction, QMenu
-from qgis.PyQt.QtGui import QIcon
-from qgis.core import *
-# Initialize Qt resources from file resources.py
-from . import resources_rc
-# Import the code for the dialog
-from .cenradialog import CenRaDialog
-from .table_postgisdialog import table_postgisDialog
-
-import os.path
-import webbrowser, os
-import sys
-import psycopg2
-
-class CenRa(object):
-
- def __init__(self, iface):
- # Save reference to the QGIS interface
- self.iface = iface
- # initialize plugin directory
- self.plugin_dir = os.path.dirname(__file__)
- # initialize locale
- locale = QSettings().value("locale/userLocale")[0:2]
- localePath = os.path.join(self.plugin_dir, 'i18n', 'cenra_{}.qm'.format(locale))
-
- if os.path.exists(localePath):
- self.translator = QTranslator()
- self.translator.load(localePath)
-
- if qVersion() > '4.3.3':
- QCoreApplication.installTranslator(self.translator)
-
- # Create the dialog (after translation) and keep reference
- self.dlg = CenRaDialog()
- self.dlgAjout = table_postgisDialog()
-
- def initGui(self):
- self.toolBar = self.iface.addToolBar("CEN-RA")
- self.toolBar.setObjectName("CEN-RA")
-
- # ***Create action that will start plugin configuration
- self.action = QAction(
- QIcon(":/plugins/CenRa/page_new.png"),
- u"Création d'un dossier", self.iface.mainWindow())
- # connect the action to the run method
- self.action.triggered.connect(self.creation)
-
- # Add toolbar button and menu item
- self.toolBar.addAction(self.action)
- self.iface.addPluginToMenu(u"CenRa", self.action)
-
- # ***Create action that will start plugin configuration
- self.action = QAction(
- QIcon(":/plugins/CenRa/page_ajout.png"),
- u"Ajout d'une table", self.iface.mainWindow())
- # connect the action to the run method
- self.action.triggered.connect(self.ajout)
-
- # Add toolbar button and menu item
- self.toolBar.addAction(self.action)
- self.iface.addPluginToMenu(u"&CenRa", self.action)
-
- # ***Create action that will start plugin configuration
- self.action = QAction(
- QIcon(":/plugins/CenRa/help.png"),
- u"Aide", self.iface.mainWindow())
- # connect the action to the run method
- self.action.triggered.connect(self.doHelp)
-
- # Add toolbar button and menu item
- self.toolBar.addAction(self.action)
- self.iface.addPluginToMenu(u"CenRa", self.action)
-
- self.menu = QMenu()
- self.menu.setTitle( QCoreApplication.translate( "CENRA","&CenRa" ) )
-
- self.cenra_new = QAction( QIcon(":/plugins/CenRa/page_new.png"), QCoreApplication.translate("CENRA", u"Création d'un dossier" ), self.iface.mainWindow() )
- self.cenra_ajout = QAction( QIcon(":/plugins/CenRa/page_ajout.png"), QCoreApplication.translate("CENRA", "Ajout d'une table" ), self.iface.mainWindow() )
- self.cenra_help = QAction( QIcon(":/plugins/CenRa/help.png"), QCoreApplication.translate("CENRA", "Aide" ), self.iface.mainWindow() )
-
- self.menu.addActions( [self.cenra_new, self.cenra_ajout, self.cenra_help] )
-
- menu_bar = self.iface.mainWindow().menuBar()
- actions = menu_bar.actions()
- lastAction = actions[ len( actions ) - 1 ]
- menu_bar.insertMenu( lastAction, self.menu )
-
- self.cenra_new.triggered.connect(self.creation)
- self.cenra_ajout.triggered.connect(self.ajout)
- self.cenra_help.triggered.connect(self.doHelp)
-
- def unload(self):
- # Remove the plugin menu item and icon
- self.iface.removePluginMenu(u"&CenRa", self.action)
- self.iface.removeToolBarIcon(self.action)
-
- # run method that performs all the real work
- def creation(self):
- # show the dialog
- self.dlg.show()
- # Run the dialog event loop
- result = self.dlg.exec_()
- # See if OK was pressed
- if result == 1:
-
-#**********************************Debut_script****************************************
- import psycopg2
-
- ### config.txt
- config = "//100.100.100.100/bd_sig/z_QGIS/config.txt" # Chemin du fichier config
-
- # Fonction de lecture des lignes du fichier config
- def readline(n):
- with open(config, "r") as f:
- for lineno, line in enumerate(f):
- if lineno == n:
- return line.strip() # Permet d'enlever les retours chariots
-
- # Recuperation des donnees
- host = readline(10)
- port = readline(12)
- dbname = readline(14)
- user = readline(16)
- password = readline(18)
-
- ### Creation du schema pour le nouveau site
- if self.dlg.at.isChecked():
- schema = "_" + self.dlg.dept.currentText() + "_at_" + self.dlg.nom.text().lower() # Ajout de "_" pour eviter pb de numero en premier caractere
- else :
- schema = "_" + self.dlg.dept.currentText() + "_" + self.dlg.nom.text().lower() # Ajout de "_" pour eviter pb de numero en premier caractere
-
- if self.dlg.nom.text() == "" or self.dlg.nom.text() == "NULL":
- QMessageBox.warning(None, "Oups :", "Veuillez renseigner un nom de dossier.")
- return
-
- ch = [u"à", u"À", u"â", u"Â", u"ä", u"Ä", u"å", u"Å", u"ç", u"Ç", u"é", u"É", u"è", u"È", u"ê", u"Ê", u"ë", u"Ë", u"î", u"Î", u"ï", u"Ï", u"ô", u"Ô", u"ö", u"Ö", u"ù", u"Ù", u"û", u"Û", u"ü", u"Ü", u"ÿ", u"Ÿ", u"'", u"-", u" "]
- for car in ch :
- if self.dlg.nom.text().find(car) != -1 :
- QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.dlg.nom.text().lower() )
- return
-
- con = psycopg2.connect("dbname="+ dbname + " user=" + user + " host=" + host + " password=" + password)
- cur = con.cursor()
-
- SQL_schema = "CREATE SCHEMA " + schema + " AUTHORIZATION postgres;"
-
- cur.execute(SQL_schema)
-
- ### Creation de la table contour
- if self.dlg.couche_contour.isChecked(): # Verifie si la checkbox est cochee
- if self.dlg.annee_1.text() == 'aaaa' or self.dlg.annee_1.text() == '':
- tablename = schema + "_contour"
- else :
- tablename = schema + "_contour_" + self.dlg.annee_1.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- geom = readline(6)
- style = readline(21)
- champ_contour = readline(32)
-
- SQL_contour = "CREATE TABLE " + schema + "."+ tablename + champ_contour
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'contour_modele'"""
-
- cur.execute(SQL_contour)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceURI()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,password)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- ### Creation de la table habitat
- if self.dlg.couche_habitat.isChecked():
- if self.dlg.annee_2.text() == 'aaaa' or self.dlg.annee_2.text() == '':
- tablename = schema + "_habitat"
- else :
- tablename = schema + "_habitat_" + self.dlg.annee_2.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- geom = readline(6)
- style = readline(22)
- champ_habitat = readline(35)
-
- SQL_habitat = "CREATE TABLE " + schema + "."+ tablename + champ_habitat
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_trigger_concat_cd_cb = "CREATE TRIGGER concat_cd_cb" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.concat_cd_cb();"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'habitat_modele'"""
-
- cur.execute(SQL_habitat)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_trigger_concat_cd_cb)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceURI()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,password)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- ### Creation de la table travaux prevus
- if self.dlg.couche_travaux_prevus.isChecked():
- #**********Poly
- if self.dlg.annee_5.text() == 'aaaa' or self.dlg.annee_5.text() == '':
- tablename = schema + "_travaux_prevus_poly"
- else :
- tablename = schema + "_travaux_prevus_poly_" + self.dlg.annee_5.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- geom = readline(6)
- style = readline(26)
- champ_travaux_prevus = readline(43)
-
- SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'travaux_prevus_poly_modele'"""
-
- cur.execute(SQL_travaux_prevus)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceURI()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,password)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- #**********ligne
- if self.dlg.annee_5.text() == 'aaaa' or self.dlg.annee_5.text() == '':
- tablename = schema + "_travaux_prevus_ligne"
- else :
- tablename = schema + "_travaux_prevus_ligne_" + self.dlg.annee_5.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- geom = readline(6)
- style = readline(27)
- champ_travaux_prevus = readline(44)
-
- SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
- SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
- SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'travaux_prevus_ligne_modele'"""
-
- cur.execute(SQL_travaux_prevus)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_trigger_length_m)
- cur.execute(SQL_trigger_length_km)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceURI()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,password)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- #**********point
- if self.dlg.annee_5.text() == 'aaaa' or self.dlg.annee_5.text() == '':
- tablename = schema + "_travaux_prevus_point"
- else :
- tablename = schema + "_travaux_prevus_point_" + self.dlg.annee_5.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- geom = readline(6)
- style = readline(28)
- champ_travaux_prevus = readline(45)
-
- SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
- SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'travaux_prevus_point_modele'"""
-
- cur.execute(SQL_travaux_prevus)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_trigger_coordonnees)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceURI()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,password)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- ### Creation de la table vierge
- if self.dlg.couche_vierge.isChecked():
- if self.dlg.annee_4.text() == 'aaaa' or self.dlg.annee_4.text() == '':
- tablename = schema + "_" + self.dlg.nom_couche_vierge.text().lower()
- else :
- tablename = schema + "_" + self.dlg.nom_couche_vierge.text().lower() + "_" + self.dlg.annee_4.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- geom = readline(6)
- style = readline(29)
- champ_viergePolygone = readline(48)
- champ_viergeLigne = readline(49)
- champ_viergePoint = readline(50)
-
- if self.dlg.couche_vierge_point.isChecked() == 1 :
- champ_vierge = champ_viergePoint
-
- if self.dlg.couche_vierge_ligne.isChecked() == 1 :
- champ_vierge = champ_viergeLigne
-
- if self.dlg.couche_vierge_polygone.isChecked() == 1 :
- champ_vierge = champ_viergePolygone
-
- SQL_vierge = "CREATE TABLE " + schema + "."+ tablename + champ_vierge
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
-
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
- SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
- SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
-
- cur.execute(SQL_vierge)
- cur.execute(SQL_pkey)
-
- if self.dlg.couche_vierge_point.isChecked() == 1 :
- cur.execute(SQL_trigger_coordonnees)
-
- if self.dlg.couche_vierge_ligne.isChecked() == 1 :
- cur.execute(SQL_trigger_length_m)
- cur.execute(SQL_trigger_length_km)
-
- if self.dlg.couche_vierge_polygone.isChecked() == 1 :
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
-
- con.commit()
-
- ### Affichage de la table
- uri = QgsDataSourceURI()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,password)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- else :
- con.commit()
-
- con.close()
- pass
-
- ### Outil Aide
- def doHelp(self):
- webbrowser.open("http://plateformesig.cenra-outils.org/")
-
- ### Outil Ajout de nouvelles couche a un dossier
- def ajout(self):
- import psycopg2
-
- config = "//100.100.100.100/bd_sig/z_QGIS/config.txt" # Chemin du fichier config
- # Fonction de lecture des lignes du fichier config
- def readline(n):
- with open(config, "r") as f:
- for lineno, line in enumerate(f):
- if lineno == n:
- return line.strip() # Permet d'enlever les retours chariots
-
- host = readline(10)
- port = readline(12)
- dbname = readline(14)
- user = readline(16)
- password = readline(18)
-
- con = psycopg2.connect("dbname="+ dbname + " user=" + user + " host=" + host + " password=" + password)
- cur = con.cursor()
- # Creation de la liste des schemas de la base de donnees
- SQL = """WITH list_schema AS (
- SELECT catalog_name, schema_name
- FROM information_schema.schemata
- WHERE schema_name <> 'information_schema'
- AND schema_name !~ E'^pg_'
- ORDER BY schema_name
- )
-
- SELECT string_agg(schema_name,',')
- FROM list_schema
- GROUP BY catalog_name"""
-
- cur.execute(SQL)
-
- list_brut = str(next(cur))
-
- list = list_brut [3:-3]
- listItems = list.split(",")
-
- con.close()
-
- self.dlgAjout.ui.schema.clear()
- self.dlgAjout.ui.schema.addItems(listItems)
- self.dlgAjout.ui.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema
-
- # show the dialog
- self.dlgAjout.show()
- # Run the dialog event loop
- result = self.dlgAjout.exec_()
- # See if OK was pressed
- if result == 1:
-#******************************debut script*********************************
- ### config.txt
- config = "//100.100.100.100/bd_sig/z_QGIS/config.txt" # Chemin du fichier config
-
- # Fonction de lecture des lignes du fichier config
- def readline(n):
- with open(config, "r") as f:
- for lineno, line in enumerate(f):
- if lineno == n:
- return line.strip() # Permet d'enlever les retours chariots
-
- # Recuperation des donnees
- host = readline(10)
- port = readline(12)
- dbname = readline(14)
- user = readline(16)
- password = readline(18)
-
- con = psycopg2.connect("dbname="+ dbname + " user=" + user + " host=" + host + " password=" + password)
- cur = con.cursor()
-
- if self.dlgAjout.ui.schema.currentIndex() == -1 :
- QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de dossier.")
- return
-
- schema = self.dlgAjout.ui.schema.currentText()
-
- ### Creation de la table contour
- if self.dlgAjout.ui.couche_contour.isChecked(): # Verifie si la checkbox est cochee
- if self.dlgAjout.ui.annee_1.text() == 'aaaa' or self.dlgAjout.ui.annee_1.text() == '':
- tablename = schema + "_contour"
- else :
- tablename = schema + "_contour_" + self.dlgAjout.ui.annee_1.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- geom = readline(6)
- style = readline(21)
- champ_contour = readline(32)
-
- SQL_contour = "CREATE TABLE " + schema + "."+ tablename + champ_contour
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'contour_modele'"""
-
- cur.execute(SQL_contour)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceURI()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,password)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- ### Creation de la table habitat
- if self.dlgAjout.ui.couche_habitat.isChecked():
- if self.dlgAjout.ui.annee_2.text() == 'aaaa' or self.dlgAjout.ui.annee_2.text() == '':
- tablename = schema + "_habitat"
- else :
- tablename = schema + "_habitat_" + self.dlgAjout.ui.annee_2.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- geom = readline(6)
- style = readline(22)
- champ_habitat = readline(35)
-
- SQL_habitat = "CREATE TABLE " + schema + "."+ tablename + champ_habitat
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_trigger_concat_cd_cb = "CREATE TRIGGER concat_cd_cb" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.concat_cd_cb();"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'habitat_modele'"""
-
- cur.execute(SQL_habitat)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_trigger_concat_cd_cb)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceURI()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,password)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- ### Creation de la table travaux prevus
- if self.dlgAjout.ui.couche_travaux_prevus.isChecked():
- #**********Poly
- if self.dlgAjout.ui.annee_5.text() == 'aaaa' or self.dlgAjout.ui.annee_5.text() == '':
- tablename = schema + "_travaux_prevus_poly"
- else :
- tablename = schema + "_travaux_prevus_poly_" + self.dlgAjout.ui.annee_5.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- geom = readline(6)
- style = readline(26)
- champ_travaux_prevus = readline(43)
-
- SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'travaux_prevus_poly_modele'"""
-
- cur.execute(SQL_travaux_prevus)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceURI()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,password)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- #**********ligne
- if self.dlgAjout.ui.annee_5.text() == 'aaaa' or self.dlgAjout.ui.annee_5.text() == '':
- tablename = schema + "_travaux_prevus_ligne"
- else :
- tablename = schema + "_travaux_prevus_ligne_" + self.dlgAjout.ui.annee_5.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- geom = readline(6)
- style = readline(27)
- champ_travaux_prevus = readline(44)
-
- SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
- SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
- SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'travaux_prevus_ligne_modele'"""
-
- cur.execute(SQL_travaux_prevus)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_trigger_length_m)
- cur.execute(SQL_trigger_length_km)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceURI()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,password)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- #**********point
- if self.dlgAjout.ui.annee_5.text() == 'aaaa' or self.dlgAjout.ui.annee_5.text() == '':
- tablename = schema + "_travaux_prevus_point"
- else :
- tablename = schema + "_travaux_prevus_point_" + self.dlgAjout.ui.annee_5.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- geom = readline(6)
- style = readline(28)
- champ_travaux_prevus = readline(45)
-
- SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
- SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
- SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
- SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
-
- SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
- SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
- FROM layer_styles
- WHERE description = 'travaux_prevus_point_modele'"""
-
- cur.execute(SQL_travaux_prevus)
- cur.execute(SQL_pkey)
- cur.execute(SQL_trigger_date_creation)
- cur.execute(SQL_trigger_date_maj)
- cur.execute(SQL_trigger_coordonnees)
- cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
-
- con.commit()
-
- ## Affichage de la table
- uri = QgsDataSourceURI()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,password)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- ### Creation de la table vierge
- if self.dlgAjout.ui.couche_vierge.isChecked():
- if self.dlgAjout.ui.annee_4.text() == 'aaaa' or self.dlgAjout.ui.annee_4.text() == '':
- tablename = schema + "_" + self.dlgAjout.ui.nom_couche_vierge.text().lower()
- else :
- tablename = schema + "_" + self.dlgAjout.ui.nom_couche_vierge.text().lower() + "_" + self.dlgAjout.ui.annee_4.text()
- tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
- geom = readline(6)
- style = readline(29)
- champ_viergePolygone = readline(48)
- champ_viergeLigne = readline(49)
- champ_viergePoint = readline(50)
-
- if self.dlgAjout.ui.couche_vierge_point.isChecked() == 1 :
- champ_vierge = champ_viergePoint
-
- if self.dlgAjout.ui.couche_vierge_ligne.isChecked() == 1 :
- champ_vierge = champ_viergeLigne
-
- if self.dlgAjout.ui.couche_vierge_polygone.isChecked() == 1 :
- champ_vierge = champ_viergePolygone
-
- SQL_vierge = "CREATE TABLE " + schema + "."+ tablename + champ_vierge
- SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
-
- SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
- SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
- SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
- SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
- SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
-
- cur.execute(SQL_vierge)
- cur.execute(SQL_pkey)
-
- if self.dlgAjout.ui.couche_vierge_point.isChecked() == 1 :
- cur.execute(SQL_trigger_coordonnees)
-
- if self.dlgAjout.ui.couche_vierge_ligne.isChecked() == 1 :
- cur.execute(SQL_trigger_length_m)
- cur.execute(SQL_trigger_length_km)
-
- if self.dlgAjout.ui.couche_vierge_polygone.isChecked() == 1 :
- cur.execute(SQL_trigger_area_m2)
- cur.execute(SQL_trigger_area_ha)
-
- con.commit()
-
- ### Affichage de la table
- uri = QgsDataSourceURI()
- # set host name, port, database name, username and password
- uri.setConnection(host ,port ,dbname ,user ,password)
- # set database schema, table name, geometry column and optionaly subset (WHERE clause)
- uri.setDataSource(schema, tablename, geom)
-
- layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
-
- else :
- con.commit()
-
- con.close()
- pass
\ No newline at end of file
diff --git a/CenRa_POSTGIS/cenradialog.py b/CenRa_POSTGIS/cenradialog.py
deleted file mode 100644
index 8a99a57..0000000
--- a/CenRa_POSTGIS/cenradialog.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-/***************************************************************************
- CenRaDialog
- A QGIS plugin
- Conservatoire d'Espaces Naturels de Rhône-Alpes
- -------------------
- begin : 2014-03-27
- copyright : (C) 2014 by Conservatoire d'Espaces Naturels de Rhône-Alpes
- email : guillaume.costes@espaces-naturels.fr
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-"""
-
-from qgis.PyQt import QtCore, QtGui
-from qgis.PyQt.QtWidgets import QDialog
-from .ui_cenra import Ui_cenra
-# create the dialog for zoom to point
-
-
-class CenRaDialog(QDialog, Ui_cenra):
- def __init__(self):
- QDialog.__init__(self)
- # 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://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html
- # #widgets-and-dialogs-with-auto-connect
- self.setupUi(self)
diff --git a/CenRa_POSTGIS/cenradialog.py.bak b/CenRa_POSTGIS/cenradialog.py.bak
deleted file mode 100644
index e29830d..0000000
--- a/CenRa_POSTGIS/cenradialog.py.bak
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-/***************************************************************************
- CenRaDialog
- A QGIS plugin
- Conservatoire d'Espaces Naturels de Rhône-Alpes
- -------------------
- begin : 2014-03-27
- copyright : (C) 2014 by Conservatoire d'Espaces Naturels de Rhône-Alpes
- email : guillaume.costes@espaces-naturels.fr
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-"""
-
-from PyQt4 import QtCore, QtGui
-from ui_cenra import Ui_cenra
-# create the dialog for zoom to point
-
-
-class CenRaDialog(QtGui.QDialog, Ui_cenra):
- def __init__(self):
- QtGui.QDialog.__init__(self)
- # 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://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html
- # #widgets-and-dialogs-with-auto-connect
- self.setupUi(self)
diff --git a/CenRa_POSTGIS/help/Makefile b/CenRa_POSTGIS/help/Makefile
deleted file mode 100644
index ebb0236..0000000
--- a/CenRa_POSTGIS/help/Makefile
+++ /dev/null
@@ -1,130 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS =
-SPHINXBUILD = sphinx-build
-PAPER =
-BUILDDIR = build
-
-# Internal variables.
-PAPEROPT_a4 = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
-
-help:
- @echo "Please use \`make ' where is one of"
- @echo " html to make standalone HTML files"
- @echo " dirhtml to make HTML files named index.html in directories"
- @echo " singlehtml to make a single large HTML file"
- @echo " pickle to make pickle files"
- @echo " json to make JSON files"
- @echo " htmlhelp to make HTML files and a HTML help project"
- @echo " qthelp to make HTML files and a qthelp project"
- @echo " devhelp to make HTML files and a Devhelp project"
- @echo " epub to make an epub"
- @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
- @echo " latexpdf to make LaTeX files and run them through pdflatex"
- @echo " text to make text files"
- @echo " man to make manual pages"
- @echo " changes to make an overview of all changed/added/deprecated items"
- @echo " linkcheck to check all external links for integrity"
- @echo " doctest to run all doctests embedded in the documentation (if enabled)"
-
-clean:
- -rm -rf $(BUILDDIR)/*
-
-html:
- $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-dirhtml:
- $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
- $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
- @echo
- @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
- $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
- @echo
- @echo "Build finished; now you can process the pickle files."
-
-json:
- $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
- @echo
- @echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
- $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
- @echo
- @echo "Build finished; now you can run HTML Help Workshop with the" \
- ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
- $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
- @echo
- @echo "Build finished; now you can run "qcollectiongenerator" with the" \
- ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
- @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/templateclass.qhcp"
- @echo "To view the help file:"
- @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/templateclass.qhc"
-
-devhelp:
- $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
- @echo
- @echo "Build finished."
- @echo "To view the help file:"
- @echo "# mkdir -p $$HOME/.local/share/devhelp/templateclass"
- @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/templateclass"
- @echo "# devhelp"
-
-epub:
- $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
- @echo
- @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo
- @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
- @echo "Run \`make' in that directory to run these through (pdf)latex" \
- "(use \`make latexpdf' here to do that automatically)."
-
-latexpdf:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo "Running LaTeX files through pdflatex..."
- make -C $(BUILDDIR)/latex all-pdf
- @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-text:
- $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
- @echo
- @echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-man:
- $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
- @echo
- @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-changes:
- $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
- @echo
- @echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
- $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
- @echo
- @echo "Link check complete; look for any errors in the above output " \
- "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
- $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
- @echo "Testing of doctests in the sources finished, look at the " \
- "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/CenRa_POSTGIS/help/make.bat b/CenRa_POSTGIS/help/make.bat
deleted file mode 100644
index 90dc191..0000000
--- a/CenRa_POSTGIS/help/make.bat
+++ /dev/null
@@ -1,155 +0,0 @@
-@ECHO OFF
-
-REM Command file for Sphinx documentation
-
-if "%SPHINXBUILD%" == "" (
- set SPHINXBUILD=sphinx-build
-)
-set BUILDDIR=build
-set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source
-if NOT "%PAPER%" == "" (
- set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
-)
-
-if "%1" == "" goto help
-
-if "%1" == "help" (
- :help
- echo.Please use `make ^` where ^ is one of
- echo. html to make standalone HTML files
- echo. dirhtml to make HTML files named index.html in directories
- echo. singlehtml to make a single large HTML file
- echo. pickle to make pickle files
- echo. json to make JSON files
- echo. htmlhelp to make HTML files and a HTML help project
- echo. qthelp to make HTML files and a qthelp project
- echo. devhelp to make HTML files and a Devhelp project
- echo. epub to make an epub
- echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
- echo. text to make text files
- echo. man to make manual pages
- echo. changes to make an overview over all changed/added/deprecated items
- echo. linkcheck to check all external links for integrity
- echo. doctest to run all doctests embedded in the documentation if enabled
- goto end
-)
-
-if "%1" == "clean" (
- for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
- del /q /s %BUILDDIR%\*
- goto end
-)
-
-if "%1" == "html" (
- %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
- echo.
- echo.Build finished. The HTML pages are in %BUILDDIR%/html.
- goto end
-)
-
-if "%1" == "dirhtml" (
- %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
- echo.
- echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
- goto end
-)
-
-if "%1" == "singlehtml" (
- %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
- echo.
- echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
- goto end
-)
-
-if "%1" == "pickle" (
- %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
- echo.
- echo.Build finished; now you can process the pickle files.
- goto end
-)
-
-if "%1" == "json" (
- %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
- echo.
- echo.Build finished; now you can process the JSON files.
- goto end
-)
-
-if "%1" == "htmlhelp" (
- %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
- echo.
- echo.Build finished; now you can run HTML Help Workshop with the ^
-.hhp project file in %BUILDDIR%/htmlhelp.
- goto end
-)
-
-if "%1" == "qthelp" (
- %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
- echo.
- echo.Build finished; now you can run "qcollectiongenerator" with the ^
-.qhcp project file in %BUILDDIR%/qthelp, like this:
- echo.^> qcollectiongenerator %BUILDDIR%\qthelp\templateclass.qhcp
- echo.To view the help file:
- echo.^> assistant -collectionFile %BUILDDIR%\qthelp\templateclass.ghc
- goto end
-)
-
-if "%1" == "devhelp" (
- %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
- echo.
- echo.Build finished.
- goto end
-)
-
-if "%1" == "epub" (
- %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
- echo.
- echo.Build finished. The epub file is in %BUILDDIR%/epub.
- goto end
-)
-
-if "%1" == "latex" (
- %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
- echo.
- echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
- goto end
-)
-
-if "%1" == "text" (
- %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
- echo.
- echo.Build finished. The text files are in %BUILDDIR%/text.
- goto end
-)
-
-if "%1" == "man" (
- %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
- echo.
- echo.Build finished. The manual pages are in %BUILDDIR%/man.
- goto end
-)
-
-if "%1" == "changes" (
- %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
- echo.
- echo.The overview file is in %BUILDDIR%/changes.
- goto end
-)
-
-if "%1" == "linkcheck" (
- %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
- echo.
- echo.Link check complete; look for any errors in the above output ^
-or in %BUILDDIR%/linkcheck/output.txt.
- goto end
-)
-
-if "%1" == "doctest" (
- %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
- echo.
- echo.Testing of doctests in the sources finished, look at the ^
-results in %BUILDDIR%/doctest/output.txt.
- goto end
-)
-
-:end
diff --git a/CenRa_POSTGIS/help/source/conf.py b/CenRa_POSTGIS/help/source/conf.py
deleted file mode 100644
index a7bd6e9..0000000
--- a/CenRa_POSTGIS/help/source/conf.py
+++ /dev/null
@@ -1,216 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# cenra documentation build configuration file, created by
-# sphinx-quickstart on Sun Feb 12 17:11:03 2012.
-#
-# This file is execfile()d with the current directory set to its containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import sys, os
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.insert(0, os.path.abspath('.'))
-
-# -- General configuration -----------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be extensions
-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['sphinx.ext.todo', 'sphinx.ext.pngmath', 'sphinx.ext.viewcode']
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix of source filenames.
-source_suffix = '.rst'
-
-# The encoding of source files.
-#source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General information about the project.
-project = u'cenra'
-copyright = u'2013, Conservatoire d''Espaces Naturels de Rhône-Alpes'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = '0.1'
-# The full version, including alpha/beta/rc tags.
-release = '0.1'
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = []
-
-# The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
-
-
-# -- Options for HTML output ---------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-html_theme = 'default'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
-
-# The name for this set of Sphinx documents. If None, it defaults to
-# " v documentation".
-#html_title = None
-
-# A shorter title for the navigation bar. Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#html_additional_pages = {}
-
-# If false, no module index is generated.
-#html_domain_indices = True
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a tag referring to it. The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'templateclassdoc'
-
-
-# -- Options for LaTeX output --------------------------------------------------
-
-# The paper size ('letter' or 'a4').
-#latex_paper_size = 'letter'
-
-# The font size ('10pt', '11pt' or '12pt').
-#latex_font_size = '10pt'
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass [howto/manual]).
-latex_documents = [
- ('index', 'cenra.tex', u'cenra Documentation',
- u'Conservatoire d''Espaces Naturels de Rhône-Alpes', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# If true, show page references after internal links.
-#latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#latex_show_urls = False
-
-# Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_domain_indices = True
-
-
-# -- Options for manual page output --------------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
- ('index', 'templateclass', u'cenra Documentation',
- [u'Conservatoire d''Espaces Naturels de Rhône-Alpes'], 1)
-]
diff --git a/CenRa_POSTGIS/help/source/index.rst b/CenRa_POSTGIS/help/source/index.rst
deleted file mode 100644
index 02812ef..0000000
--- a/CenRa_POSTGIS/help/source/index.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-.. cenra documentation master file, created by
- sphinx-quickstart on Sun Feb 12 17:11:03 2012.
- You can adapt this file completely to your liking, but it should at least
- contain the root `toctree` directive.
-
-Welcome to cenra's documentation!
-============================================
-
-Contents:
-
-.. toctree::
- :maxdepth: 2
-
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
-
diff --git a/CenRa_POSTGIS/cenra.png b/CenRa_POSTGIS/icon.png
similarity index 100%
rename from CenRa_POSTGIS/cenra.png
rename to CenRa_POSTGIS/icon.png
diff --git a/CenRa_POSTGIS/issues.py b/CenRa_POSTGIS/issues.py
new file mode 100644
index 0000000..0d6416a
--- /dev/null
+++ b/CenRa_POSTGIS/issues.py
@@ -0,0 +1,89 @@
+import os
+plugin_dir = os.path.dirname(__file__)
+end_find = plugin_dir.rfind('\\')+1
+
+NAME = plugin_dir[end_find:]
+#print(NAME)
+
+from qgis.gui import *
+
+from qgis.core import (
+ NULL,
+ QgsApplication,
+ QgsDataSourceUri,
+ QgsProject,
+ QgsProviderConnectionException,
+ QgsProviderRegistry,
+ QgsRasterLayer,
+ QgsSettings,
+ QgsVectorLayer,
+ QgsGeometry,
+)
+from qgis.PyQt.QtWidgets import (
+ QDialog,
+ QAction,
+ QDockWidget,
+ QFileDialog,
+ QInputDialog,
+ QMenu,
+ QToolButton,
+ QTableWidget,
+ QTableWidgetItem,
+)
+from qgis.utils import iface
+
+
+from .tools.resources import (
+ load_ui,
+ resources_path,
+ send_issues,
+)
+
+EDITOR_CLASS = load_ui('CenRa_IssuesSend.ui')
+
+class CenRa_Issues(QDialog, EDITOR_CLASS):
+
+ def __init__(self, parent=None):
+ _ = parent
+ super().__init__()
+ self.setupUi(self)
+ self.settings = QgsSettings()
+
+ #place connect here
+ self.annuler_button.clicked.connect(self.close)
+ self.ok_button.clicked.connect(self.run_sendissues)
+
+ def run_sendissues(self):
+ text_titre = self.titre_line.text()
+ text_message = self.messages_plain.toPlainText()
+ statu_bug = self.check_bug.isChecked()
+ statu_aide = self.check_aide.isChecked()
+ statu_question = self.check_question.isChecked()
+ statu_amelioration = self.check_amelioration.isChecked()
+ statu_autre = self.check_autre.isChecked()
+
+ statu = []
+ if statu_bug == True : statu = statu + [1]
+ if statu_aide == True : statu = statu + [3]
+ if statu_question == True : statu = statu + [5]
+ if statu_amelioration == True : statu = statu + [2]
+ if statu_autre == True : statu = statu + [6]
+
+ if len(statu) >= 1:
+ import qgis
+ url = qgis.utils.pluginMetadata(NAME,'tracker')
+ print(text_message)
+ send_info = send_issues(url,text_titre,text_message,statu)
+ code = send_info.status_code
+ print(code)
+ else:
+ code = 423
+ if code == 201:
+ iface.messageBar().pushMessage("Envoyer :", "Votre messages à bien été envoyer.", level=Qgis.Success, duration=20)
+ self.close()
+ elif code == 422:
+ iface.messageBar().pushMessage("Erreur :", "Erreur dans le contenu du messages.", level=Qgis.Critical, duration=20)
+ elif code == 423:
+ iface.messageBar().pushMessage("Erreur :", "Pas de sujet sélectionné.", level=Qgis.Critical, duration=20)
+ elif code == 404:
+ iface.messageBar().pushMessage("Missing :", "Le serveur de messagerie est injoignable.", level=Qgis.Warning, duration=20)
diff --git a/CenRa_POSTGIS/metadata.txt b/CenRa_POSTGIS/metadata.txt
index 4cb2418..6b8620a 100644
--- a/CenRa_POSTGIS/metadata.txt
+++ b/CenRa_POSTGIS/metadata.txt
@@ -12,7 +12,7 @@
name=CenRa_POSTGIS
qgisMinimumVersion=3.0
description=Permet de crée un dossier dans la base PostGis
-version=1.8
+version=2.0
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
email=si_besoin@cen-rhonealpes.fr
@@ -21,7 +21,7 @@ email=si_besoin@cen-rhonealpes.fr
# Optional items:
# Uncomment the following line and add your changelog entries:
-changelog=CenRa_POSTGIS:
13/09/2024 - Version 1.8:
- Ajoute d'un changelog et vérification de mise à jour.
+changelog=CenRa_POSTGIS:
22/10/2024 - Version 2.0:
- Refont du code.
# tags are comma separated with spaces allowed
tags=cenra, postgis, database
@@ -30,7 +30,7 @@ repository=https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS
homepage=https://plateformesig.cenra-outils.org/
category=Plugins
-icon=cenra.png
+icon=icon.png
# experimental flag
experimental=False
diff --git a/CenRa_POSTGIS/postgis_creator.py b/CenRa_POSTGIS/postgis_creator.py
new file mode 100644
index 0000000..08c72d7
--- /dev/null
+++ b/CenRa_POSTGIS/postgis_creator.py
@@ -0,0 +1,432 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import absolute_import
+# Import the PyQt and QGIS libraries
+from builtins import next
+from builtins import str
+from builtins import object
+import qgis
+from qgis.PyQt.QtCore import QSettings
+from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog
+from qgis.PyQt.QtGui import QIcon
+from PyQt5.QtCore import *
+from PyQt5.QtGui import *
+from PyQt5 import QtGui
+from qgis.core import *
+from qgis.core import QgsDataSourceUri
+
+from .tools.PythonSQL import *
+from .tools.resources import (
+ load_ui,
+ resources_path,
+ login_base,
+ send_issues,
+)
+from .issues import CenRa_Issues
+
+from qgis.utils import iface
+import os.path
+import webbrowser, os
+import psycopg2
+import psycopg2.extras
+import base64
+
+EDITOR_CLASS = load_ui('CenRa_Postgis_base.ui')
+
+class Postgis_Creator(QDialog, EDITOR_CLASS):
+
+ def __init__(self, parent=None):
+ _ = parent
+ super().__init__()
+ self.setupUi(self)
+ self.settings = QgsSettings()
+ self.s = QSettings()
+ self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
+ self.iface = iface
+
+ # run method that performs all the real work
+ def raise_(self):
+ # show the dialog
+ self.show()
+ # Run the dialog event loop
+ result = self.exec_()
+ # See if OK was pressed
+ if result == 1:
+
+#**********************************Debut_script****************************************
+
+ ### Creation du schema pour le nouveau site
+ if self.at.isChecked():
+ schema = "_" + self.dept.currentText() + "_at_" + self.nom.text().lower() # Ajout de "_" pour eviter pb de numero en premier caractere
+ else :
+ schema = "_" + self.dept.currentText() + "_" + self.nom.text().lower() # Ajout de "_" pour eviter pb de numero en premier caractere
+
+ if self.nom.text() == "" or self.nom.text() == "NULL":
+ QMessageBox.warning(None, "Oups :", "Veuillez renseigner un nom de dossier.")
+ return
+
+ ch = [u"à", u"À", u"â", u"Â", u"ä", u"Ä", u"å", u"Å", u"ç", u"Ç", u"é", u"É", u"è", u"È", u"ê", u"Ê", u"ë", u"Ë", u"î", u"Î", u"ï", u"Ï", u"ô", u"Ô", u"ö", u"Ö", u"ù", u"Ù", u"û", u"Û", u"ü", u"Ü", u"ÿ", u"Ÿ", u"'", u"-", u" "]
+ for car in ch :
+ if self.nom.text().find(car) != -1 :
+ QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.nom.text().lower() )
+ return
+ first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
+ first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
+ first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
+ res_ident = first_cur.fetchone()
+ mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
+ user = res_ident[1]
+ con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
+ cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
+ first_conn.close()
+
+ SQL_schema = "CREATE SCHEMA " + schema + ";"
+ SQL_GRANT_SCHEMA="GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_qgis; GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_sig;"
+
+ cur.execute(SQL_schema)
+ cur.execute(SQL_GRANT_SCHEMA)
+
+ ### Creation de la table contour
+ if self.couche_contour.isChecked(): # Verifie si la checkbox est cochee
+ if self.annee_1.text() == 'aaaa' or self.annee_1.text() == '':
+ tablename = schema + "_contour"
+ else :
+ tablename = schema + "_contour_" + self.annee_1.text()
+ tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
+
+ SQL_contour = "CREATE TABLE " + schema + "."+ tablename + champ_contour
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
+ SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
+ SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
+ SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
+
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'contour_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_contour)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_area_m2)
+ cur.execute(SQL_trigger_area_ha)
+ cur.execute(SQL_trigger_date_creation)
+ cur.execute(SQL_trigger_date_maj)
+ cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
+ cur.execute(SQL_GRANT_TABLE)
+
+ con.commit()
+
+ ## Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ ### Creation de la table habitat
+ if self.couche_habitat.isChecked():
+ if self.annee_2.text() == 'aaaa' or self.annee_2.text() == '':
+ tablename = schema + "_habitat"
+ else :
+ tablename = schema + "_habitat_" + self.annee_2.text()
+ tablename_1=tablename+"_points"
+ tablename_qgis = tablename_1[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
+ SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_1 + champ_vegethab_point
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename_1 + " ADD CONSTRAINT " + tablename_1 + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename_1 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_1 + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename_1 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'vegethab_points_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_1+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_VEGETHAB)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_coordonnees)
+ cur.execute(SQL_style)
+ cur.execute(SQL_GRANT_TABLE)
+
+ con.commit()
+ ### Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename_1, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ tablename_2=tablename+"_lignes"
+ tablename_qgis = tablename_2[1:]
+ SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_2 + champ_vegethab_multilinestring
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename_2 + " ADD CONSTRAINT " + tablename_2 + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
+ SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename_2 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'vegethab_lignes_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_2+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_VEGETHAB)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_length_m)
+ cur.execute(SQL_trigger_length_km)
+ cur.execute(SQL_style)
+ cur.execute(SQL_GRANT_TABLE)
+
+ con.commit()
+ ### Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename_2, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ tablename_3=tablename+"_polygones"
+ tablename_qgis = tablename_3[1:]
+ SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_3 + champ_vegethab_multipolygon
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename_3 + " ADD CONSTRAINT " + tablename_3 + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
+ SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename_3 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'vegethab_polygones_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_3+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_VEGETHAB)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_area_m2)
+ cur.execute(SQL_trigger_area_ha)
+ cur.execute(SQL_style)
+ cur.execute(SQL_GRANT_TABLE)
+
+ con.commit()
+ ### Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename_3, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+ '''
+ SQL_habitat = "CREATE TABLE " + schema + "."+ tablename + champ_habitat
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
+ SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
+ SQL_trigger_concat_cd_cb = "CREATE TRIGGER concat_cd_cb" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.concat_cd_cb();"
+ SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
+ SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
+
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'habitat_modele_v3'"""
+
+ cur.execute(SQL_habitat)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_area_m2)
+ cur.execute(SQL_trigger_area_ha)
+ cur.execute(SQL_trigger_concat_cd_cb)
+ cur.execute(SQL_trigger_date_creation)
+ cur.execute(SQL_trigger_date_maj)
+ cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
+
+ con.commit()
+
+ ## Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+ '''
+ ### Creation de la table travaux prevus
+ if self.couche_travaux_prevus.isChecked():
+ #**********Poly
+ if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
+ tablename = schema + "_travaux_prevus_poly"
+ else :
+ tablename = schema + "_travaux_prevus_poly_" + self.annee_5.text()
+ tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
+
+ SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multipolygon
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
+ SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
+ SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
+ SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
+
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'travaux_prevus_poly_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_travaux_prevus)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_date_creation)
+ cur.execute(SQL_trigger_date_maj)
+ cur.execute(SQL_trigger_area_m2)
+ cur.execute(SQL_trigger_area_ha)
+ cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
+ cur.execute(SQL_GRANT_TABLE)
+
+
+ con.commit()
+
+ ## Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ #**********ligne
+ if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
+ tablename = schema + "_travaux_prevus_ligne"
+ else :
+ tablename = schema + "_travaux_prevus_ligne_" + self.annee_5.text()
+ tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
+
+ SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multilinestring
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
+ SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
+ SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
+ SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
+
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'travaux_prevus_ligne_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_travaux_prevus)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_date_creation)
+ cur.execute(SQL_trigger_date_maj)
+ cur.execute(SQL_trigger_length_m)
+ cur.execute(SQL_trigger_length_km)
+ cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
+ cur.execute(SQL_GRANT_TABLE)
+
+
+ con.commit()
+
+ ## Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ #**********point
+ if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
+ tablename = schema + "_travaux_prevus_point"
+ else :
+ tablename = schema + "_travaux_prevus_point_" + self.annee_5.text()
+ tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
+
+ SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_point
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
+ SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
+ SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
+
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'travaux_prevus_point_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_travaux_prevus)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_date_creation)
+ cur.execute(SQL_trigger_date_maj)
+ cur.execute(SQL_trigger_coordonnees)
+ cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
+ cur.execute(SQL_GRANT_TABLE)
+
+
+ con.commit()
+
+ ## Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ ### Creation de la table vierge
+ if self.couche_vierge.isChecked():
+ if self.annee_4.text() == 'aaaa' or self.annee_4.text() == '':
+ tablename = schema + "_" + self.nom_couche_vierge.text().lower()
+ else :
+ tablename = schema + "_" + self.nom_couche_vierge.text().lower() + "_" + self.annee_4.text()
+ tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
+
+ if self.couche_vierge_point.isChecked() == 1 :
+ champ_vierge = champ_viergePoint
+
+ if self.couche_vierge_ligne.isChecked() == 1 :
+ champ_vierge = champ_viergeLigne
+
+ if self.couche_vierge_polygone.isChecked() == 1 :
+ champ_vierge = champ_viergePolygone
+
+ SQL_vierge = "CREATE TABLE " + schema + "."+ tablename + champ_vierge
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
+
+ SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
+ SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
+ SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
+ SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
+ SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
+
+ cur.execute(SQL_vierge)
+ cur.execute(SQL_pkey)
+
+ if self.couche_vierge_point.isChecked() == 1 :
+ cur.execute(SQL_trigger_coordonnees)
+
+ if self.couche_vierge_ligne.isChecked() == 1 :
+ cur.execute(SQL_trigger_length_m)
+ cur.execute(SQL_trigger_length_km)
+
+ if self.couche_vierge_polygone.isChecked() == 1 :
+ cur.execute(SQL_trigger_area_m2)
+ cur.execute(SQL_trigger_area_ha)
+
+ con.commit()
+
+ ### Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ else :
+ con.commit()
+
+ con.close()
+ pass
\ No newline at end of file
diff --git a/CenRa_POSTGIS/postgis_editor.py b/CenRa_POSTGIS/postgis_editor.py
new file mode 100644
index 0000000..c581304
--- /dev/null
+++ b/CenRa_POSTGIS/postgis_editor.py
@@ -0,0 +1,449 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import absolute_import
+# Import the PyQt and QGIS libraries
+from builtins import next
+from builtins import str
+from builtins import object
+import qgis
+from qgis.PyQt.QtCore import QSettings
+from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog
+from qgis.PyQt.QtGui import QIcon
+from PyQt5.QtCore import *
+from PyQt5.QtGui import *
+from PyQt5 import QtGui
+from qgis.core import *
+from qgis.core import QgsDataSourceUri
+
+from .tools.PythonSQL import *
+from .tools.resources import (
+ load_ui,
+ resources_path,
+ login_base,
+ send_issues,
+)
+from .issues import CenRa_Issues
+
+import os.path
+import webbrowser, os
+import psycopg2
+import psycopg2.extras
+import base64
+from qgis.utils import iface
+
+EDITOR_CLASS = load_ui('CenRa_PostgisTable_base.ui')
+
+class Postgis_Editor(QDialog, EDITOR_CLASS):
+
+ def __init__(self, parent=None):
+ _ = parent
+ super().__init__()
+ self.setupUi(self)
+ self.settings = QgsSettings()
+ self.s = QSettings()
+ self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
+ self.iface = iface
+
+ ### Outil Ajout de nouvelles couche a un dossier
+ def raise_(self):
+ first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
+ first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
+ first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
+ res_ident = first_cur.fetchone()
+ mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
+ user = res_ident[1]
+
+ con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
+ cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
+ first_conn.close()
+ # Creation de la liste des schemas de la base de donnees
+ SQL = """WITH list_schema AS (
+ select schemaname,'sig' as group from pg_catalog.pg_tables
+ where schemaname ~ E'^_(0|1|2|3|4|6|7|f)'
+ group by schemaname
+ order by schemaname)
+
+ select string_agg(schemaname,',')
+ from list_schema
+ group by "group";"""
+
+ cur.execute(SQL)
+
+ list_brut = str(next(cur))
+ list = list_brut [2:-2]
+ listItems = list.split(",")
+
+ con.close()
+
+ self.schema.clear()
+ self.schema.addItems(listItems)
+ self.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema
+
+ # show the dialog
+ self.show()
+ # Run the dialog event loop
+ result = self.exec_()
+ # See if OK was pressed
+ if result == 1:
+#******************************debut script*********************************
+ first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
+ first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
+ first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
+ res_ident = first_cur.fetchone()
+ mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
+ user = res_ident[1]
+ con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
+ cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
+ first_conn.close()
+
+ if self.schema.currentIndex() == -1 :
+ QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de dossier.")
+ return
+
+ schema = self.schema.currentText()
+
+ ### Creation de la table contour
+ if self.couche_contour.isChecked(): # Verifie si la checkbox est cochee
+ if self.annee_1.text() == 'aaaa' or self.annee_1.text() == '':
+ tablename = schema + "_contour"
+ else :
+ tablename = schema + "_contour_" + self.annee_1.text()
+ tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
+
+ SQL_contour = "CREATE TABLE " + schema + "."+ tablename + champ_contour
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
+ SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
+ SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
+ SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
+
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'contour_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_contour)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_area_m2)
+ cur.execute(SQL_trigger_area_ha)
+ cur.execute(SQL_trigger_date_creation)
+ cur.execute(SQL_trigger_date_maj)
+ cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
+ cur.execute(SQL_GRANT_TABLE)
+
+ con.commit()
+
+ ## Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ ### Creation de la table habitat
+
+ if self.couche_habitat.isChecked():
+ if self.annee_2.text() == 'aaaa' or self.annee_2.text() == '':
+ tablename = schema + "_habitat"
+ else :
+ tablename = schema + "_habitat_" + self.annee_2.text()
+
+ tablename_1=tablename+"_points"
+ tablename_qgis = tablename_1[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
+ SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_1 + champ_vegethab_point
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename_1 + " ADD CONSTRAINT " + tablename_1 + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename_1 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_1 + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename_1 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'vegethab_points_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_1+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_VEGETHAB)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_coordonnees)
+ cur.execute(SQL_style)
+ cur.execute(SQL_GRANT_TABLE)
+
+ con.commit()
+ ### Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename_1, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ tablename_2=tablename+"_lignes"
+ tablename_qgis = tablename_2[1:]
+ SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_2 + champ_vegethab_multilinestring
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename_2 + " ADD CONSTRAINT " + tablename_2 + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
+ SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename_2 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'vegethab_lignes_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_2+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_VEGETHAB)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_length_m)
+ cur.execute(SQL_trigger_length_km)
+ cur.execute(SQL_style)
+ cur.execute(SQL_GRANT_TABLE)
+
+ con.commit()
+ ### Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename_2, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ tablename_3=tablename+"_polygones"
+ tablename_qgis = tablename_3[1:]
+ SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_3 + champ_vegethab_multipolygon
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename_3 + " ADD CONSTRAINT " + tablename_3 + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
+ SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename_3 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'vegethab_polygones_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_3+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_VEGETHAB)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_area_m2)
+ cur.execute(SQL_trigger_area_ha)
+ cur.execute(SQL_style)
+ cur.execute(SQL_GRANT_TABLE)
+
+ con.commit()
+ ### Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename_3, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+ '''
+ SQL_habitat = "CREATE TABLE " + schema + "."+ tablename + champ_habitat
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
+ SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
+ SQL_trigger_concat_cd_cb = "CREATE TRIGGER concat_cd_cb" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.concat_cd_cb();"
+ SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
+ SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
+
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'habitat_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_habitat)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_area_m2)
+ cur.execute(SQL_trigger_area_ha)
+ cur.execute(SQL_trigger_concat_cd_cb)
+ cur.execute(SQL_trigger_date_creation)
+ cur.execute(SQL_trigger_date_maj)
+ cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
+ cur.execute(SQL_GRANT_TABLE)
+
+ con.commit()
+
+ ## Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+ '''
+ ### Creation de la table travaux prevus
+ if self.couche_travaux_prevus.isChecked():
+ #**********Poly
+ if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
+ tablename = schema + "_travaux_prevus_poly"
+ else :
+ tablename = schema + "_travaux_prevus_poly_" + self.annee_5.text()
+ tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
+
+ SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multipolygon
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
+ SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
+ SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
+ SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
+
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'travaux_prevus_poly_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_travaux_prevus)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_date_creation)
+ cur.execute(SQL_trigger_date_maj)
+ cur.execute(SQL_trigger_area_m2)
+ cur.execute(SQL_trigger_area_ha)
+ cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
+ cur.execute(SQL_GRANT_TABLE)
+
+ con.commit()
+
+ ## Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ #**********ligne
+ if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
+ tablename = schema + "_travaux_prevus_ligne"
+ else :
+ tablename = schema + "_travaux_prevus_ligne_" + self.annee_5.text()
+ tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
+
+ SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multilinestring
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
+ SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
+ SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
+ SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
+
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'travaux_prevus_ligne_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_travaux_prevus)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_date_creation)
+ cur.execute(SQL_trigger_date_maj)
+ cur.execute(SQL_trigger_length_m)
+ cur.execute(SQL_trigger_length_km)
+ cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
+ cur.execute(SQL_GRANT_TABLE)
+
+ con.commit()
+
+ ## Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ #**********point
+ if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
+ tablename = schema + "_travaux_prevus_point"
+ else :
+ tablename = schema + "_travaux_prevus_point_" + self.annee_5.text()
+ tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
+
+ SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_point
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
+ SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
+ SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
+ SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
+
+ SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
+ SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
+ FROM layer_styles
+ WHERE description = 'travaux_prevus_point_modele_v3'"""
+ SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
+
+ cur.execute(SQL_travaux_prevus)
+ cur.execute(SQL_pkey)
+ cur.execute(SQL_trigger_date_creation)
+ cur.execute(SQL_trigger_date_maj)
+ cur.execute(SQL_trigger_coordonnees)
+ cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
+ cur.execute(SQL_GRANT_TABLE)
+
+ con.commit()
+
+ ## Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ ### Creation de la table vierge
+ if self.couche_vierge.isChecked():
+ if self.annee_4.text() == 'aaaa' or self.annee_4.text() == '':
+ tablename = schema + "_" + self.nom_couche_vierge.text().lower()
+ else :
+ tablename = schema + "_" + self.nom_couche_vierge.text().lower() + "_" + self.annee_4.text()
+ tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
+
+ if self.couche_vierge_point.isChecked() == 1 :
+ champ_vierge = champ_viergePoint
+
+ if self.couche_vierge_ligne.isChecked() == 1 :
+ champ_vierge = champ_viergeLigne
+
+ if self.couche_vierge_polygone.isChecked() == 1 :
+ champ_vierge = champ_viergePolygone
+
+ SQL_vierge = "CREATE TABLE " + schema + "."+ tablename + champ_vierge
+ SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
+
+ SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
+ SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
+ SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
+ SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
+ SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
+
+ cur.execute(SQL_vierge)
+ cur.execute(SQL_pkey)
+
+ if self.couche_vierge_point.isChecked() == 1 :
+ cur.execute(SQL_trigger_coordonnees)
+
+ if self.couche_vierge_ligne.isChecked() == 1 :
+ cur.execute(SQL_trigger_length_m)
+ cur.execute(SQL_trigger_length_km)
+
+ if self.couche_vierge_polygone.isChecked() == 1 :
+ cur.execute(SQL_trigger_area_m2)
+ cur.execute(SQL_trigger_area_ha)
+
+ con.commit()
+
+ ### Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(schema, tablename, geom)
+
+ layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
+
+ else :
+ con.commit()
+
+ con.close()
+ pass
\ No newline at end of file
diff --git a/CenRa_POSTGIS/resources_rc.py b/CenRa_POSTGIS/resources_rc.py
deleted file mode 100644
index 3773ee3..0000000
--- a/CenRa_POSTGIS/resources_rc.py
+++ /dev/null
@@ -1,914 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Resource object code
-#
-# Created by: The Resource Compiler for PyQt5 (Qt v5.15.2)
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt5 import QtCore
-
-qt_resource_data = b"\
-\x00\x00\x15\x6a\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x22\x00\x00\x00\x23\x08\x06\x00\x00\x01\x86\x1c\xe8\xf1\
-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x2e\x23\x00\x00\x2e\x23\
-\x01\x78\xa5\x3f\x76\x00\x00\x0a\x4f\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\x78\xda\x9d\x53\x67\x54\x53\xe9\x16\x3d\xf7\xde\
-\xf4\x42\x4b\x88\x80\x94\x4b\x6f\x52\x15\x08\x20\x52\x42\x8b\x80\
-\x14\x91\x26\x2a\x21\x09\x10\x4a\x88\x21\xa1\xd9\x15\x51\xc1\x11\
-\x45\x45\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15\x51\x2c\x0c\
-\x8a\x0a\xd8\x07\xe4\x21\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1\x7b\
-\xa3\x6b\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7\x3e\xe7\xac\xf3\x9d\xb3\
-\xcf\x07\xc0\x08\x0c\x96\x48\x33\x51\x35\x80\x0c\xa9\x42\x1e\x11\
-\xe0\x83\xc7\xc4\xc6\xe1\xe4\x2e\x40\x81\x0a\x24\x70\x00\x10\x08\
-\xb3\x64\x21\x73\xfd\x23\x01\x00\xf8\x7e\x3c\x3c\x2b\x22\xc0\x07\
-\xbe\x00\x01\x78\xd3\x0b\x08\x00\xc0\x4d\x9b\xc0\x30\x1c\x87\xff\
-\x0f\xea\x42\x99\x5c\x01\x80\x84\x01\xc0\x74\x91\x38\x4b\x08\x80\
-\x14\x00\x40\x7a\x8e\x42\xa6\x00\x40\x46\x01\x80\x9d\x98\x26\x53\
-\x00\xa0\x04\x00\x60\xcb\x63\x62\xe3\x00\x50\x2d\x00\x60\x27\x7f\
-\xe6\xd3\x00\x80\x9d\xf8\x99\x7b\x01\x00\x5b\x94\x21\x15\x01\xa0\
-\x91\x00\x20\x13\x65\x88\x44\x00\x68\x3b\x00\xac\xcf\x56\x8a\x45\
-\x00\x58\x30\x00\x14\x66\x4b\xc4\x39\x00\xd8\x2d\x00\x30\x49\x57\
-\x66\x48\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x00\x30\
-\x51\x88\x85\x29\x00\x04\x7b\x00\x60\xc8\x23\x23\x78\x00\x84\x99\
-\x00\x14\x46\xf2\x57\x3c\xf1\x2b\xae\x10\xe7\x2a\x00\x00\x78\x99\
-\xb2\x3c\xb9\x24\x39\x45\x81\x5b\x08\x2d\x71\x07\x57\x57\x2e\x1e\
-\x28\xce\x49\x17\x2b\x14\x36\x61\x02\x61\x9a\x40\x2e\xc2\x79\x99\
-\x19\x32\x81\x34\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\
-\xf3\xfd\x78\xce\x0e\xae\xce\xce\x36\x8e\xb6\x0e\x5f\x2d\xea\xbf\
-\x06\xff\x22\x62\x62\xe3\xfe\xe5\xcf\xab\x70\x40\x00\x00\xe1\x74\
-\x7e\xd1\xfe\x2c\x2f\xb3\x1a\x80\x3b\x06\x80\x6d\xfe\xa2\x25\xee\
-\x04\x68\x5e\x0b\xa0\x75\xf7\x8b\x66\xb2\x0f\x40\xb5\x00\xa0\xe9\
-\xda\x57\xf3\x70\xf8\x7e\x3c\x3c\x45\xa1\x90\xb9\xd9\xd9\xe5\xe4\
-\xe4\xd8\x4a\xc4\x42\x5b\x61\xca\x57\x7d\xfe\x67\xc2\x5f\xc0\x57\
-\xfd\x6c\xf9\x7e\x3c\xfc\xf7\xf5\xe0\xbe\xe2\x24\x81\x32\x5d\x81\
-\x47\x04\xf8\xe0\xc2\xcc\xf4\x4c\xa5\x1c\xcf\x92\x09\x84\x62\xdc\
-\xe6\x8f\x47\xfc\xb7\x0b\xff\xfc\x1d\xd3\x22\xc4\x49\x62\xb9\x58\
-\x2a\x14\xe3\x51\x12\x71\x8e\x44\x9a\x8c\xf3\x32\xa5\x22\x89\x42\
-\x92\x29\xc5\x25\xd2\xff\x64\xe2\xdf\x2c\xfb\x03\x3e\xdf\x35\x00\
-\xb0\x6a\x3e\x01\x7b\x91\x2d\xa8\x5d\x63\x03\xf6\x4b\x27\x10\x58\
-\x74\xc0\xe2\xf7\x00\x00\xf2\xbb\x6f\xc1\xd4\x28\x08\x03\x80\x68\
-\x83\xe1\xcf\x77\xff\xef\x3f\xfd\x47\xa0\x25\x00\x80\x66\x49\x92\
-\x71\x00\x00\x5e\x44\x24\x2e\x54\xca\xb3\x3f\xc7\x08\x00\x00\x44\
-\xa0\x81\x2a\xb0\x41\x1b\xf4\xc1\x18\x2c\xc0\x06\x1c\xc1\x05\xdc\
-\xc1\x0b\xfc\x60\x36\x84\x42\x24\xc4\xc2\x42\x10\x42\x0a\x64\x80\
-\x1c\x72\x60\x29\xac\x82\x42\x28\x86\xcd\xb0\x1d\x2a\x60\x2f\xd4\
-\x40\x1d\x34\xc0\x51\x68\x86\x93\x70\x0e\x2e\xc2\x55\xb8\x0e\x3d\
-\x70\x0f\xfa\x61\x08\x9e\xc1\x28\xbc\x81\x09\x04\x41\xc8\x08\x13\
-\x61\x21\xda\x88\x01\x62\x8a\x58\x23\x8e\x08\x17\x99\x85\xf8\x21\
-\xc1\x48\x04\x12\x8b\x24\x20\xc9\x88\x14\x51\x22\x4b\x91\x35\x48\
-\x31\x52\x8a\x54\x20\x55\x48\x1d\xf2\x3d\x72\x02\x39\x87\x5c\x46\
-\xba\x91\x3b\xc8\x00\x32\x82\xfc\x86\xbc\x47\x31\x94\x81\xb2\x51\
-\x3d\xd4\x0c\xb5\x43\xb9\xa8\x37\x1a\x84\x46\xa2\x0b\xd0\x64\x74\
-\x31\x9a\x8f\x16\xa0\x9b\xd0\x72\xb4\x1a\x3d\x8c\x36\xa1\xe7\xd0\
-\xab\x68\x0f\xda\x8f\x3e\x43\xc7\x30\xc0\xe8\x18\x07\x33\xc4\x6c\
-\x30\x2e\xc6\xc3\x42\xb1\x38\x2c\x09\x93\x63\xcb\xb1\x22\xac\x0c\
-\xab\xc6\x1a\xb0\x56\xac\x03\xbb\x89\xf5\x63\xcf\xb1\x77\x04\x12\
-\x81\x45\xc0\x09\x36\x04\x77\x42\x20\x61\x1e\x41\x48\x58\x4c\x58\
-\x4e\xd8\x48\xa8\x20\x1c\x24\x34\x11\xda\x09\x37\x09\x03\x84\x51\
-\xc2\x27\x22\x93\xa8\x4b\xb4\x26\xba\x11\xf9\xc4\x18\x62\x32\x31\
-\x87\x58\x48\x2c\x23\xd6\x12\x8f\x13\x2f\x10\x7b\x88\x43\xc4\x37\
-\x24\x12\x89\x43\x32\x27\xb9\x90\x02\x49\xb1\xa4\x54\xd2\x12\xd2\
-\x46\xd2\x6e\x52\x23\xe9\x2c\xa9\x9b\x34\x48\x1a\x23\x93\xc9\xda\
-\x64\x6b\xb2\x07\x39\x94\x2c\x20\x2b\xc8\x85\xe4\x9d\xe4\xc3\xe4\
-\x33\xe4\x1b\xe4\x21\xf2\x5b\x0a\x9d\x62\x40\x71\xa4\xf8\x53\xe2\
-\x28\x52\xca\x6a\x4a\x19\xe5\x10\xe5\x34\xe5\x06\x65\x98\x32\x41\
-\x55\xa3\x9a\x52\xdd\xa8\xa1\x54\x11\x35\x8f\x5a\x42\xad\xa1\xb6\
-\x52\xaf\x51\x87\xa8\x13\x34\x75\x9a\x39\xcd\x83\x16\x49\x4b\xa5\
-\xad\xa2\x95\xd3\x1a\x68\x17\x68\xf7\x69\xaf\xe8\x74\xba\x11\xdd\
-\x95\x1e\x4e\x97\xd0\x57\xd2\xcb\xe9\x47\xe8\x97\xe8\x03\xf4\x77\
-\x0c\x0d\x86\x15\x83\xc7\x88\x67\x28\x19\x9b\x18\x07\x18\x67\x19\
-\x77\x18\xaf\x98\x4c\xa6\x19\xd3\x8b\x19\xc7\x54\x30\x37\x31\xeb\
-\x98\xe7\x99\x0f\x99\x6f\x55\x58\x2a\xb6\x2a\x7c\x15\x91\xca\x0a\
-\x95\x4a\x95\x26\x95\x1b\x2a\x2f\x54\xa9\xaa\xa6\xaa\xde\xaa\x0b\
-\x55\xf3\x55\xcb\x54\x8f\xa9\x5e\x53\x7d\xae\x46\x55\x33\x53\xe3\
-\xa9\x09\xd4\x96\xab\x55\xaa\x9d\x50\xeb\x53\x1b\x53\x67\xa9\x3b\
-\xa8\x87\xaa\x67\xa8\x6f\x54\x3f\xa4\x7e\x59\xfd\x89\x06\x59\xc3\
-\x4c\xc3\x4f\x43\xa4\x51\xa0\xb1\x5f\xe3\xbc\xc6\x20\x0b\x63\x19\
-\xb3\x78\x2c\x21\x6b\x0d\xab\x86\x75\x81\x35\xc4\x26\xb1\xcd\xd9\
-\x7c\x76\x2a\xbb\x98\xfd\x1d\xbb\x8b\x3d\xaa\xa9\xa1\x39\x43\x33\
-\x4a\x33\x57\xb3\x52\xf3\x94\x66\x3f\x07\xe3\x98\x71\xf8\x9c\x74\
-\x4e\x09\xe7\x28\xa7\x97\xf3\x7e\x8a\xde\x14\xef\x29\xe2\x29\x1b\
-\xa6\x34\x4c\xb9\x31\x65\x5c\x6b\xaa\x96\x97\x96\x58\xab\x48\xab\
-\x51\xab\x47\xeb\xbd\x36\xae\xed\xa7\x9d\xa6\xbd\x45\xbb\x59\xfb\
-\x81\x0e\x41\xc7\x4a\x27\x5c\x27\x47\x67\x8f\xce\x05\x9d\xe7\x53\
-\xd9\x53\xdd\xa7\x0a\xa7\x16\x4d\x3d\x3a\xf5\xae\x2e\xaa\x6b\xa5\
-\x1b\xa1\xbb\x44\x77\xbf\x6e\xa7\xee\x98\x9e\xbe\x5e\x80\x9e\x4c\
-\x6f\xa7\xde\x79\xbd\xe7\xfa\x1c\x7d\x2f\xfd\x54\xfd\x6d\xfa\xa7\
-\xf5\x47\x0c\x58\x06\xb3\x0c\x24\x06\xdb\x0c\xce\x18\x3c\xc5\x35\
-\x71\x6f\x3c\x1d\x2f\xc7\xdb\xf1\x51\x43\x5d\xc3\x40\x43\xa5\x61\
-\x95\x61\x97\xe1\x84\x91\xb9\xd1\x3c\xa3\xd5\x46\x8d\x46\x0f\x8c\
-\x69\xc6\x5c\xe3\x24\xe3\x6d\xc6\x6d\xc6\xa3\x26\x06\x26\x21\x26\
-\x4b\x4d\xea\x4d\xee\x9a\x52\x4d\xb9\xa6\x29\xa6\x3b\x4c\x3b\x4c\
-\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x99\x35\x9b\x3d\x31\xd7\x32\xe7\x9b\
-\xe7\x9b\xd7\x9b\xdf\xb7\x60\x5a\x78\x5a\x2c\xb6\xa8\xb6\xb8\x65\
-\x49\xb2\xe4\x5a\xa6\x59\xee\xb6\xbc\x6e\x85\x5a\x39\x59\xa5\x58\
-\x55\x5a\x5d\xb3\x46\xad\x9d\xad\x25\xd6\xbb\xad\xbb\xa7\x11\xa7\
-\xb9\x4e\x93\x4e\xab\x9e\xd6\x67\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\
-\x19\xb0\xe5\xd8\x06\xdb\xae\xb6\x6d\xb6\x7d\x61\x67\x62\x17\x67\
-\xb7\xc5\xae\xc3\xee\x93\xbd\x93\x7d\xba\x7d\x8d\xfd\x3d\x07\x0d\
-\x87\xd9\x0e\xab\x1d\x5a\x1d\x7e\x73\xb4\x72\x14\x3a\x56\x3a\xde\
-\x9a\xce\x9c\xee\x3f\x7d\xc5\xf4\x96\xe9\x2f\x67\x58\xcf\x10\xcf\
-\xd8\x33\xe3\xb6\x13\xcb\x29\xc4\x69\x9d\x53\x9b\xd3\x47\x67\x17\
-\x67\xb9\x73\x83\xf3\x88\x8b\x89\x4b\x82\xcb\x2e\x97\x3e\x2e\x9b\
-\x1b\xc6\xdd\xc8\xbd\xe4\x4a\x74\xf5\x71\x5d\xe1\x7a\xd2\xf5\x9d\
-\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee\x36\xee\x69\xee\x87\xdc\x9f\
-\xcc\x34\x9f\x29\x9e\x59\x33\x73\xd0\xc3\xc8\x43\xe0\x51\xe5\xd1\
-\x3f\x0b\x9f\x95\x30\x6b\xdf\xac\x7e\x4f\x43\x4f\x81\x67\xb5\xe7\
-\x23\x2f\x63\x2f\x91\x57\xad\xd7\xb0\xb7\xa5\x77\xaa\xf7\x61\xef\
-\x17\x3e\xf6\x3e\x72\x9f\xe3\x3e\xe3\x3c\x37\xde\x32\xde\x59\x5f\
-\xcc\x37\xc0\xb7\xc8\xb7\xcb\x4f\xc3\x6f\x9e\x5f\x85\xdf\x43\x7f\
-\x23\xff\x64\xff\x7a\xff\xd1\x00\xa7\x80\x25\x01\x67\x03\x89\x81\
-\x41\x81\x5b\x02\xfb\xf8\x7a\x7c\x21\xbf\x8e\x3f\x3a\xdb\x65\xf6\
-\xb2\xd9\xed\x41\x8c\xa0\xb9\x41\x15\x41\x8f\x82\xad\x82\xe5\xc1\
-\xad\x21\x68\xc8\xec\x90\xad\x21\xf7\xe7\x98\xce\x91\xce\x69\x0e\
-\x85\x50\x7e\xe8\xd6\xd0\x07\x61\xe6\x61\x8b\xc3\x7e\x0c\x27\x85\
-\x87\x85\x57\x86\x3f\x8e\x70\x88\x58\x1a\xd1\x31\x97\x35\x77\xd1\
-\xdc\x43\x73\xdf\x44\xfa\x44\x96\x44\xde\x9b\x67\x31\x4f\x39\xaf\
-\x2d\x4a\x35\x2a\x3e\xaa\x2e\x6a\x3c\xda\x37\xba\x34\xba\x3f\xc6\
-\x2e\x66\x59\xcc\xd5\x58\x9d\x58\x49\x6c\x4b\x1c\x39\x2e\x2a\xae\
-\x36\x6e\x6c\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3\x7b\x17\
-\x98\x2f\xc8\x5d\x70\x79\xa1\xce\xc2\xf4\x85\xa7\x16\xa9\x2e\x12\
-\x2c\x3a\x96\x40\x4c\x88\x4e\x38\x94\xf0\x41\x10\x2a\xa8\x16\x8c\
-\x25\xf2\x13\x77\x25\x8e\x0a\x79\xc2\x1d\xc2\x67\x22\x2f\xd1\x36\
-\xd1\x88\xd8\x43\x5c\x2a\x1e\x4e\xf2\x48\x2a\x4d\x7a\x92\xec\x91\
-\xbc\x35\x79\x24\xc5\x33\xa5\x2c\xe5\xb9\x84\x27\xa9\x90\xbc\x4c\
-\x0d\x4c\xdd\x9b\x3a\x9e\x16\x9a\x76\x20\x6d\x32\x3d\x3a\xbd\x31\
-\x83\x92\x91\x90\x71\x42\xaa\x21\x4d\x93\xb6\x67\xea\x67\xe6\x66\
-\x76\xcb\xac\x65\x85\xb2\xfe\xc5\x6e\x8b\xb7\x2f\x1e\x95\x07\xc9\
-\x6b\xb3\x90\xac\x05\x59\x2d\x0a\xb6\x42\xa6\xe8\x54\x5a\x28\xd7\
-\x2a\x07\xb2\x67\x65\x57\x66\xbf\xcd\x89\xca\x39\x96\xab\x9e\x2b\
-\xcd\xed\xcc\xb3\xca\xdb\x90\x37\x9c\xef\x9f\xff\xed\x12\xc2\x12\
-\xe1\x92\xb6\xa5\x86\x4b\x57\x2d\x1d\x58\xe6\xbd\xac\x6a\x39\xb2\
-\x3c\x71\x79\xdb\x0a\xe3\x15\x05\x2b\x86\x56\x06\xac\x3c\xb8\x8a\
-\xb6\x2a\x6d\xd5\x4f\xab\xed\x57\x97\xae\x7e\xbd\x26\x7a\x4d\x6b\
-\x81\x5e\xc1\xca\x82\xc1\xb5\x01\x6b\xeb\x0b\x55\x0a\xe5\x85\x7d\
-\xeb\xdc\xd7\xed\x5d\x4f\x58\x2f\x59\xdf\xb5\x61\xfa\x86\x9d\x1b\
-\x3e\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8\x28\xdc\x78\xe5\
-\x1b\x87\x6f\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9\x64\xcf\x66\
-\xd2\x66\xe9\xe6\xde\x2d\x9e\x5b\x0e\x96\xaa\x97\xe6\x97\x0e\x6e\
-\x0d\xd9\xda\xb4\x0d\xdf\x56\xb4\xed\xf5\xf6\x45\xdb\x2f\x97\xcd\
-\x28\xdb\xbb\x83\xb6\x43\xb9\xa3\xbf\x3c\xb8\xbc\x65\xa7\xc9\xce\
-\xcd\x3b\x3f\x54\xa4\x54\xf4\x54\xfa\x54\x36\xee\xd2\xdd\xb5\x61\
-\xd7\xf8\x6e\xd1\xee\x1b\x7b\xbc\xf6\x34\xec\xd5\xdb\x5b\xbc\xf7\
-\xfd\x3e\xc9\xbe\xdb\x55\x01\x55\x4d\xd5\x66\xd5\x65\xfb\x49\xfb\
-\xb3\xf7\x3f\xae\x89\xaa\xe9\xf8\x96\xfb\x6d\x5d\xad\x4e\x6d\x71\
-\xed\xc7\x03\xd2\x03\xfd\x07\x23\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2\
-\x3d\x54\x52\x8f\xd6\x2b\xeb\x47\x0e\xc7\x1f\xbe\xfe\x9d\xef\x77\
-\x2d\x0d\x36\x0d\x55\x8d\x9c\xc6\xe2\x23\x70\x44\x79\xe4\xe9\xf7\
-\x09\xdf\xf7\x1e\x0d\x3a\xda\x76\x8c\x7b\xac\xe1\x07\xd3\x1f\x76\
-\x1d\x67\x1d\x2f\x6a\x42\x9a\xf2\x9a\x46\x9b\x53\x9a\xfb\x5b\x62\
-\x5b\xba\x4f\xcc\x3e\xd1\xd6\xea\xde\x7a\xfc\x47\xdb\x1f\x0f\x9c\
-\x34\x3c\x59\x79\x4a\xf3\x54\xc9\x69\xda\xe9\x82\xd3\x93\x67\xf2\
-\xcf\x8c\x9d\x95\x9d\x7d\x7e\x2e\xf9\xdc\x60\xdb\xa2\xb6\x7b\xe7\
-\x63\xce\xdf\x6a\x0f\x6f\xef\xba\x10\x74\xe1\xd2\x45\xff\x8b\xe7\
-\x3b\xbc\x3b\xce\x5c\xf2\xb8\x74\xf2\xb2\xdb\xe5\x13\x57\xb8\x57\
-\x9a\xaf\x3a\x5f\x6d\xea\x74\xea\x3c\xfe\x93\xd3\x4f\xc7\xbb\x9c\
-\xbb\x9a\xae\xb9\x5c\x6b\xb9\xee\x7a\xbd\xb5\x7b\x66\xf7\xe9\x1b\
-\x9e\x37\xce\xdd\xf4\xbd\x79\xf1\x16\xff\xd6\xd5\x9e\x39\x3d\xdd\
-\xbd\xf3\x7a\x6f\xf7\xc5\xf7\xf5\xdf\x16\xdd\x7e\x72\x27\xfd\xce\
-\xcb\xbb\xd9\x77\x27\xee\xad\xbc\x4f\xbc\x5f\xf4\x40\xed\x41\xd9\
-\x43\xdd\x87\xd5\x3f\x5b\xfe\xdc\xd8\xef\xdc\x7f\x6a\xc0\x77\xa0\
-\xf3\xd1\xdc\x47\xf7\x06\x85\x83\xcf\xfe\x91\xf5\x8f\x0f\x43\x05\
-\x8f\x99\x8f\xcb\x86\x0d\x86\xeb\x9e\x38\x3e\x39\x39\xe2\x3f\x72\
-\xfd\xe9\xfc\xa7\x43\xcf\x64\xcf\x26\x9e\x17\xfe\xa2\xfe\xcb\xae\
-\x17\x16\x2f\x7e\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\
-\x93\xbf\x6d\x7c\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\
-\xbe\xc9\x78\x33\x31\x5e\xf4\x56\xfb\xed\xc1\x77\xdc\x77\x1d\xef\
-\xa3\xdf\x0f\x4f\xe4\x7c\x20\x7f\x28\xff\x68\xf9\xb1\xf5\x53\xd0\
-\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfc\x63\x33\x2d\xdb\
-\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x7a\x25\x00\x00\x80\x83\
-\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00\x75\x30\x00\x00\xea\x60\
-\x00\x00\x3a\x98\x00\x00\x17\x6f\x92\x5f\xc5\x46\x00\x00\x0a\x95\
-\x49\x44\x41\x54\x78\xda\x62\xfa\xff\xff\x3f\x03\x3a\x66\x62\x60\
-\x60\x60\x28\xdf\xa1\xf5\xbf\x76\xb7\xc9\x7f\x06\x28\x60\x62\x60\
-\x60\x60\xd0\x95\x70\x67\xf8\xf5\xf7\x1b\x03\x8a\xa0\xc9\xca\x45\
-\x0c\x33\xba\xb2\x19\x0a\xe6\x14\xfc\x87\x0b\x6a\xb4\xbf\x65\xfc\
-\xb8\x2f\x9b\xf1\xf5\xc7\xd7\x0c\x0c\x0c\x0c\x0c\x00\x00\x00\x00\
-\xff\xff\x62\xc2\xb0\xa4\x74\xbb\xda\xff\x3f\xff\x7e\xfe\x9f\x7c\
-\x3c\x0c\xa2\x8d\x91\x91\xa5\xe8\xe4\xe3\xd5\x0c\x35\xd5\xf6\x5f\
-\x19\x18\x18\x18\x98\x92\x0e\xbe\xec\xb3\x89\xfc\xc3\xc8\xc0\xc0\
-\xc0\x5d\x30\xa7\xe0\x3f\x93\x46\xfb\x5b\xc6\xff\xc7\x12\x18\x60\
-\x06\x03\x00\x00\x00\xff\xff\x62\xfa\xff\xff\x3f\x43\xe9\x76\x8d\
-\xa4\xb6\x03\x4e\xff\x0b\xb7\x28\xfe\x5f\x7d\xb9\xe6\xff\xaf\xbf\
-\x3f\x4e\x60\xf8\x86\x91\x81\x71\x92\xbe\xa4\x17\x83\xba\xa8\x2d\
-\xc3\xf1\x47\xcb\x18\x78\x6d\x96\xf8\x30\x20\x01\x26\x06\x06\x06\
-\x86\xc4\x83\x2f\x2f\xef\xbb\x37\x7b\xc1\xed\x37\xc7\x18\x3e\xbf\
-\x97\x64\x64\xe7\xf8\xf1\x1a\x43\x91\x46\xfb\x5b\xcb\x1e\x8f\x1b\
-\x89\x3d\x5e\xb7\x19\x67\x45\x1f\x61\xf8\xb8\x2f\x9b\xf1\xd5\xeb\
-\xd7\xff\x5f\xbd\x7e\xfd\x9f\x81\x81\x81\x01\x00\x00\x00\xff\xff\
-\x62\xc2\x16\xa2\x28\xee\x29\xdf\xa1\xc5\xb0\xfc\x62\xe9\xff\xf2\
-\x1d\x5a\xff\x1b\xf6\x5a\xfc\xff\xfe\xfb\xd3\xff\x9f\x7f\xbe\x20\
-\xac\x61\x61\x62\x67\x38\xff\x7c\x33\x43\xb0\x4e\x23\xc3\x8b\xcf\
-\xb7\x19\xe6\x9d\x4d\x67\xa8\xdc\xa9\x87\x50\xf0\xe7\xdf\x0f\x06\
-\x06\x06\x46\x06\x3e\x76\x71\x06\x7e\x0e\x71\x86\x47\x9f\x8f\xa6\
-\xcd\xed\x2d\xe6\x86\x2b\xf8\xc5\xcc\xc4\xf0\xe7\xef\x4f\x06\x45\
-\x41\x13\x86\x1f\x7f\x3e\x33\x3c\xb8\xa9\x3b\x9b\x81\x81\x01\x6e\
-\x07\x53\xfa\xbe\x17\x5c\x8e\x77\x7e\x31\x7e\xfb\xfd\x81\x81\x83\
-\x85\xf7\xda\xb6\x35\x3e\x69\xe8\x5e\xf5\x51\x7d\xf1\xfd\xff\x97\
-\x26\x05\x89\x19\x5d\xd9\x4a\x4c\x4c\xff\x66\xfa\xfa\x1c\x67\x28\
-\x9e\x57\xfc\x3f\xa6\x2f\xe6\x3f\x93\x46\xfb\xdb\x55\x1a\xed\x6f\
-\x19\x65\xdb\x7f\xbd\xfc\xb8\x2f\x9b\xf3\xe3\xbe\x6c\x46\x6e\x0e\
-\x1e\x86\x72\xdf\x0a\x06\x6e\x0e\x1e\x48\x60\xa1\x83\x2f\xdf\x3f\
-\x33\x14\x2e\x2a\x60\xf8\xf2\xfd\x33\x03\x80\x91\xfa\x07\x69\x23\
-\x0c\xc3\x00\xfe\x7c\x26\x27\x26\x1a\x8d\x29\x96\x46\x23\x76\xd0\
-\x34\x69\xb1\x81\x62\x41\x4a\x41\x17\x0b\x22\x38\xa4\x83\x8b\x9b\
-\xba\x18\x23\x84\x84\x6b\x91\x76\x28\x1a\x52\x8a\x8a\xd2\x16\x9d\
-\x3a\x08\x59\x8a\x8a\x94\xe8\x21\x6a\x88\x1d\x1c\x1c\x34\x5a\xfc\
-\x03\x1a\x44\x10\xce\x82\xf1\x3c\x8f\x6b\x4c\x72\x77\x9f\x83\x38\
-\x08\x1e\xf4\x9d\xde\xe9\xc7\x33\x3c\xef\x5b\x40\x29\x05\xcb\xb9\
-\xf1\x69\xe5\x15\xfc\xbf\x2a\x4b\x58\xce\xed\x65\x39\xf7\x20\xcb\
-\x3d\xfd\x3c\xb0\xe8\xe9\x65\x39\x57\x7d\xf7\xac\x85\x50\x4a\xa1\
-\x69\x0a\x74\xab\x0a\x00\x72\x4e\xd0\x4c\x4c\x99\x04\x90\x19\x9b\
-\xc9\xf1\x41\xd5\x72\xef\xc2\x6f\x92\xdf\x0b\x0d\xe6\xed\x62\xa6\
-\x5c\x0b\x2e\xd4\xd2\x10\xf7\xe4\xbe\x50\x37\x08\xa5\x2a\x18\x43\
-\x11\x6d\xac\xee\x40\x5e\xfd\x87\x17\x95\xed\xa8\xb6\x3e\x47\x6c\
-\xff\x0b\x32\x8a\x04\x42\x88\x8c\x02\x91\x94\xca\xdd\xfa\x48\x83\
-\xe3\x2d\xdc\x15\xcd\x27\x7f\x4e\x17\x91\xd7\x72\x68\xa9\xeb\xc3\
-\xc1\xd9\x1a\xa4\xec\x19\x6a\x6d\x8d\xb0\x99\xab\x9e\x4d\x86\x07\
-\xc7\x47\x27\x2c\x09\x5d\xe4\xe5\xd4\x24\x2c\xbf\x7f\xd6\x48\xca\
-\xc5\x47\x33\x63\x45\x26\x7f\x89\xd2\xa2\x0a\x24\xf9\x18\x8e\xc5\
-\xf5\xa5\x89\xb1\xf6\x63\x23\xa3\xf6\x03\x68\xd2\x45\xb2\x46\xd2\
-\xe6\xe4\x33\xb4\x2b\xf1\xf7\x75\x5b\xf2\x9c\xec\x1c\x4d\x93\xf2\
-\xe2\x07\x64\x39\xd6\x42\xbe\x0e\x05\x5a\x65\xa9\xe4\xf6\xb4\xb7\
-\x74\x11\x00\xf3\x00\x18\x00\x81\x87\x62\x0e\x8f\xa6\xfc\x78\x3f\
-\xd0\x89\xc3\x5d\xa7\xd7\x60\x54\x52\x00\x54\x00\xdf\x7a\x3a\x8f\
-\x3c\xc3\x73\x23\xf4\x5c\x10\xe8\xf0\xdc\x08\x0d\xfd\x08\xdd\xf9\
-\x04\x70\x45\xd2\x8a\x2b\x92\xde\x73\x45\xd2\x70\x0c\xc9\x50\x57\
-\xbb\x20\xc6\x7d\xb3\x62\xdc\xf7\x58\x8c\xfb\x8c\x62\xdc\xe7\xe7\
-\x05\x1e\x9b\xa9\x0d\x64\xaf\xae\xb0\x99\xda\x00\x2f\xf0\x77\x92\
-\xfc\xd7\x44\x83\x51\x12\x0d\x46\x89\xdd\x6e\x27\xb7\x3b\x00\x5c\
-\x53\x52\x6e\x21\x4d\xc6\x61\x18\xff\xfd\xbf\xa9\x13\xc3\x9a\xc7\
-\x0d\x52\xd3\x28\x0f\x95\x9a\x74\x20\xb5\x2e\x23\xf2\x00\x51\x61\
-\x20\xb6\x8a\xea\x42\xb4\x5a\x61\x59\x41\x65\x18\x49\x91\x22\x11\
-\x41\x60\x41\x9a\x90\x84\xbb\x30\x48\x0d\x59\x84\xa6\x61\x05\x91\
-\x59\xd0\x81\x3c\xa4\x96\xb9\x60\x6d\x6e\x73\xf3\xfb\xfe\xdd\x78\
-\x11\xc1\x2c\x2f\x9e\xbb\x87\xdf\xc5\xfb\x3e\xcf\xf3\xcf\x56\xfe\
-\x8f\x14\x80\x53\xed\xa9\x58\x07\xab\x38\xd9\x9e\x92\x5e\xd9\xb1\
-\xea\x44\x65\x47\xda\xd5\xae\x4f\x37\xcf\x9f\xea\x48\x2b\xac\x78\
-\xb4\x32\xea\x5a\x77\x1e\x52\x6a\x48\xa9\x06\xce\x89\x10\x0a\x9f\
-\x7f\xf6\xcb\x9c\x84\xe2\x37\x3e\xd5\x5d\x0b\xe2\xa4\x2a\x67\x2f\
-\x0a\x44\x5b\x79\x76\xcb\xd4\xd1\x9c\x56\xe9\xd7\xbc\x46\x9f\xea\
-\x61\xbe\xef\x64\x4d\x4d\x0f\xd1\x33\xdc\x44\x51\x7a\x0d\x7e\xd5\
-\x4b\x86\x69\x1b\x85\xa9\xa7\xa9\xed\x29\xe4\x4c\xe7\x1a\xce\x74\
-\x66\x58\xcf\x3e\x5e\x1b\x18\x12\xa4\x84\x84\xfa\x55\x0f\x41\x4a\
-\x08\xd6\xc1\x0b\xac\x36\x6e\xe5\xd9\xf0\x3d\x5a\x07\x2f\xb0\xcc\
-\x90\xc9\x8a\xa8\x6c\xc2\x82\x0d\x9f\x03\x1d\x5c\x01\xf0\xa9\x1e\
-\xd7\xf2\xc8\x8d\x24\x18\x32\x99\x99\x75\x73\x70\xfd\x2d\x04\x0a\
-\xa6\xf0\x95\x8c\xfd\x7a\xc7\x07\x7b\x77\x6e\xd8\x6c\x8e\x79\xb1\
-\x7b\x7f\x60\x88\x22\x14\xe7\xa8\x63\x80\x8f\x53\xbd\x24\x47\x6f\
-\x46\x93\x2a\x4f\xbf\xdc\xc6\x3e\x3d\x82\x40\x61\x72\x74\x45\xef\
-\xe5\x2b\x69\x27\xea\x6e\x46\x04\x86\xac\x5b\xba\xc3\x9e\x12\xbd\
-\x19\x21\x74\xa4\xc4\x6c\xa1\xe1\xe5\x21\x16\x85\x44\x90\x9d\x50\
-\x4c\x6c\x78\xd2\x74\xff\x93\x6d\x28\x8a\x56\x0b\xc4\x06\x84\xf4\
-\x7d\x6b\x73\x0e\x4e\xda\xd8\x10\xb7\x93\xde\x91\x66\xbc\xfe\x5f\
-\x98\xc2\x93\x79\x3e\x7a\x9f\xe9\xd9\xe1\xa6\xb1\xaf\x86\xc4\x39\
-\xff\xee\x80\x90\x63\x9d\xe3\x10\xac\x17\xaf\xc7\x1f\x92\x97\x52\
-\x81\x39\xeb\x06\x5f\x1d\x6f\x01\x70\xbb\xc3\x4a\x15\x9d\x56\x35\
-\xe7\x4f\x08\x08\xf1\x06\x2b\x47\xca\x1f\x4f\x44\x6a\xba\xa0\xd0\
-\xd6\x81\x73\x38\x7d\x3f\x10\x42\x41\x1f\x3a\xb3\xf1\x4e\xfd\x61\
-\x74\x3a\x75\xdf\x9c\xff\xfb\x7c\x39\xd9\x35\x13\x24\xec\xa5\x5d\
-\x13\x7a\xe3\xf8\xa4\x88\x5f\x92\x21\x46\xbe\x18\xc5\xf5\x4b\x96\
-\x17\x9a\xa6\x34\xff\xe1\x6f\x9b\x0f\x12\x0a\xe0\xd7\x09\xc7\xf6\
-\x8f\xb2\xb7\xde\xbc\x9e\xf6\x07\x45\x77\xa5\xa6\x48\xa0\x18\xa0\
-\xb0\xa0\x8f\xbd\x7b\xde\x7f\xb2\x34\x58\xa4\xa5\xc1\x22\xcb\x6f\
-\x95\xcb\x92\xba\x12\xf9\x27\x64\x13\x90\x04\xc4\x80\xcc\x79\x35\
-\x93\x01\xc8\x03\x80\x15\xf0\x01\x93\x26\x83\x89\x44\x63\x12\x71\
-\xd1\xf1\xc4\x45\xc7\x93\x68\x4c\xc2\x64\x30\xf1\xf7\x9e\x0c\xa5\
-\xd6\xd8\xa7\x52\x6b\xec\x34\xb5\xdc\xc1\x61\x2b\xd3\x1c\xb6\xb2\
-\x5d\x0e\x5b\x99\xde\x61\x2b\x33\x3a\xbd\x2e\x0a\x32\xf3\x31\xe7\
-\x9a\x31\xe7\x9a\x29\xc8\xcc\xc7\xe9\x75\x2d\x6c\x4f\x5c\x1e\x27\
-\xd5\xd6\x6a\x8e\x37\x5a\x38\xde\x68\xa1\xda\x5a\x8d\xcb\xe3\x5c\
-\xf8\x28\xcd\xdb\x9d\x85\xac\xda\xdf\x02\xf8\xcd\x7a\xb9\xc6\xc4\
-\x51\x46\x61\xf8\x9d\xd9\x9d\xd9\x4b\x61\xcb\xdd\x52\x96\x22\x97\
-\x05\xc1\x8a\xa1\x2d\x6c\x4d\x05\x0b\x05\x0b\x06\x94\x04\x41\xdb\
-\xa4\xda\xc4\x6a\xdb\xb0\x82\x0d\x54\x2c\x44\x29\xb1\x11\xa5\xd6\
-\x46\x4b\x7f\x78\x69\x09\x12\xa2\x41\xc4\xc6\x00\xe5\xba\xdc\x2c\
-\xb7\x02\xb5\x85\x0a\x85\x42\x29\x72\xdd\x05\xba\xbb\xb0\x37\x76\
-\xd9\xf1\x87\x8c\x11\x52\x4d\x16\xf8\x26\xe7\xc7\xcc\x9c\xbc\x79\
-\xe6\x9b\x2f\xe7\xbc\x67\x53\x2a\xdb\xa6\x55\xc7\x15\xe7\x88\xf7\
-\xaf\x3f\x85\xec\x3a\x29\xaa\x87\x2e\xed\x3d\xd7\x10\x7a\x29\xad\
-\xd2\xbb\x39\xbd\x52\x32\x92\x51\x15\xa0\xce\xa8\x0a\x30\x65\x54\
-\x05\x58\x4e\x5f\xf7\xb3\xd4\x0c\x7d\x65\xc8\xae\x93\xce\xa5\x57\
-\x4a\x06\x53\xcb\x77\x34\x9d\xaa\xf0\x2a\xc8\xa8\xf2\x4f\x2b\xba\
-\x95\xfa\x3c\x7b\xe4\x36\xb4\xad\x04\x41\xda\x18\xcc\x0b\xc3\x35\
-\x43\x5f\xb6\xcd\xe9\xfe\x94\xd9\x0b\xc4\xa1\xd1\xbe\xa7\x3c\x3d\
-\xec\x82\x44\x4b\xcb\x3a\x2e\x00\xc2\xc2\x98\x09\x8a\xc3\xe7\x05\
-\xba\x46\x3b\x7c\x18\xd1\x22\xc9\x8b\x19\x08\x3b\x14\xf8\xd9\x51\
-\x7f\x97\x88\xcf\x67\x16\xef\xb7\x7c\xda\x14\xa5\xcf\x6b\x8e\xce\
-\xcd\x6d\x8a\x44\x6e\x53\xa4\xf5\x20\xcc\xdf\x57\x10\x00\x2f\x2e\
-\x49\x83\xe6\x08\xb1\x60\x54\xa2\xe2\xde\x79\x58\x18\x13\x12\x9e\
-\xce\x81\xc6\x30\x83\xd0\x27\x8f\x22\xdc\xeb\x1d\xe8\x97\xd4\xc8\
-\xaa\x09\x42\x66\x75\x20\x4a\xfa\xb2\x70\x67\xba\x0a\x93\x9a\x7e\
-\x28\xb5\x23\x98\xd5\x8e\xc6\xa8\xf4\x93\x84\x4a\x3f\x69\x3d\x48\
-\x88\xf8\x55\x48\xc5\x89\xda\x60\x71\x02\x7c\x1c\xf7\x82\x22\x79\
-\x30\x2d\x1b\x40\x73\x04\x18\x9a\x6b\xc3\xd2\xb2\x01\xf9\xaf\x4c\
-\xc3\xdb\x21\x04\x27\xaf\x39\x61\x46\x3b\x8c\x83\x92\x14\x44\x78\
-\x1f\x87\x54\x9c\x88\x20\xd7\x58\x04\xba\x46\xab\x82\xc5\x09\x65\
-\x21\x1e\xb1\x6f\x79\x39\xfb\x33\x3e\x2e\x3b\xad\x07\xb9\x39\xfe\
-\x33\x3a\xc7\x4b\x75\x9d\xe3\xa5\xa6\x7e\x45\x23\x8c\xcb\x3a\x48\
-\xdd\x93\xb0\xf3\x89\x28\x18\xcd\x5a\xf0\x29\x1b\xcc\xeb\xc6\xa1\
-\xd4\x8e\x62\xb7\x38\x1e\x63\xaa\xdb\x68\x7a\x70\x15\xcd\x0f\x0a\
-\xd0\x35\xf1\x0b\xee\x2a\x6a\x0a\xef\xcd\xca\xed\x2f\x17\xcf\x25\
-\x1c\x93\x79\x76\xa7\xa6\x44\x22\x25\x65\xbf\xf5\x20\x04\x41\x82\
-\x20\xc8\x79\x30\x8c\x86\x7d\xd6\x35\x51\x86\xa1\xd9\x1b\x38\x29\
-\x2d\x46\xb0\x5b\x02\xc6\x54\x77\x70\xed\x8f\x8f\x31\xa8\xfc\x0d\
-\x24\x41\x42\x40\x6d\x85\x9b\x28\x00\xbe\x4e\xfb\xb0\x6b\xc7\x81\
-\x82\xdb\x8d\x47\xd0\xd1\xbc\x27\x9e\x01\x18\x1e\xcf\x22\xa3\x69\
-\x66\xbd\x35\x80\x51\x72\x48\x6a\xc2\xd5\xd6\x0f\x52\xf7\x24\xf8\
-\x39\x85\x61\x5e\x3f\x8e\xd6\xb1\x62\x50\x1c\x3e\x6a\xef\xe7\x43\
-\xc4\x77\x46\x9c\xff\x07\xf0\x77\x0e\x87\xce\xa4\xc2\xe8\xa3\x1e\
-\x0c\xce\x37\xf4\x35\xf6\xb6\xb5\x74\x74\x0b\xc1\xe7\x21\x73\x45\
-\xec\x23\x00\xe1\x56\x83\x78\xce\xe8\xe0\xae\xd4\x33\x16\x66\xf9\
-\x59\x85\xfe\xe1\xb1\x9b\xe3\xa5\xe8\x9d\xa9\x46\x94\x44\x06\x7b\
-\x81\x1b\x14\xda\x11\xbc\xec\x9f\x89\xc0\x6d\x31\x28\xe9\xcd\xc4\
-\xf0\x7c\x27\xb8\x24\x0d\x8a\xc3\x07\x8f\x66\xde\xeb\xed\xda\x6d\
-\xd1\x2e\xda\xbe\x4e\x90\x96\xe0\x15\x49\x67\x00\xfb\xad\x06\x79\
-\xa1\x5f\xcd\x39\x70\x57\xed\x78\xa2\x6e\x5a\x14\x36\xa0\xb9\x62\
-\x26\x49\x82\xa6\x44\x45\xf2\xe1\xaf\x61\x30\x2d\xc0\x65\x8b\x17\
-\x4c\xcb\x7a\xdc\x78\x58\x04\x21\x65\x07\x80\x01\x80\x59\x1e\xdf\
-\xf8\xcc\xef\x1d\xbb\xea\xbb\x5b\xf7\x38\xf0\x78\xc6\x0b\x6b\xf4\
-\x39\xeb\xf9\x35\x3b\x00\x64\x1b\x29\x42\x2d\x99\xd6\x37\xca\x6a\
-\xa7\x6c\x43\x07\xd4\x6f\x50\xb4\x2d\xd9\xae\x28\x7f\xb1\x7d\xa2\
-\xf4\x72\xe0\xb6\xe8\x1f\x9c\x84\x1e\xf9\x24\x57\x97\xc4\x13\x18\
-\x6d\xe6\x94\x8e\xce\xdf\x7d\x71\xbc\xaf\xbe\x22\xd2\x9e\xa2\x4d\
-\x1d\x00\xb6\xff\x4b\x4f\x0d\xa0\x75\x3d\x20\x87\x01\x24\xb1\x1b\
-\x64\xe4\x12\x1a\xdf\x69\xfd\xad\x13\x75\xd3\xfb\xd2\xeb\x54\xb5\
-\xdb\x8b\x73\x64\x83\x4d\x85\x87\x7f\x2d\x8b\x7f\xf7\xe2\xd9\xd3\
-\x3f\x9d\x3f\x73\x46\x58\x72\xe5\x50\xa4\x76\x71\x4b\x03\x97\x6b\
-\x9e\x07\xe0\xc3\x0a\xc5\xc5\xb6\x21\x2e\xb6\x6d\xeb\x91\xd7\xfa\
-\x2b\xd8\x86\x9d\x76\x35\x8d\x59\xdb\xbc\xd9\x06\xbe\x16\xe4\x13\
-\x00\x2f\x01\x68\x07\x60\x00\x60\x06\xe0\x6e\xe6\x10\x59\x66\x9a\
-\x8a\x20\x35\x23\xb8\xf8\x4d\x3d\x7a\x7a\xed\xc1\xa3\xf1\x2d\xcd\
-\x37\x2a\x08\x92\xa9\x7d\xdc\x39\x10\x09\x45\x10\x09\x45\xab\x9a\
-\x7e\xf2\x41\xd9\x2a\x03\xc0\xe6\x3c\x0e\x84\x01\xd0\x03\xe0\x39\
-\x00\x82\x95\x69\xc5\x09\x40\x0c\x00\x39\x00\xe8\x2d\x14\x9b\xfb\
-\x36\x00\x02\x80\x18\x40\x22\x80\xb3\x2b\x1f\xf2\x26\x00\x27\x21\
-\x2d\x84\x90\x16\xae\x82\xb3\x13\xda\xad\xba\x5f\x9b\xf3\x0f\xc8\
-\x8a\x2b\xf9\xcf\x10\x9f\xd3\xa2\xf0\xc7\x02\x76\xf2\x61\x63\x42\
-\x2d\x4f\x2e\x55\xcb\x93\x73\xd4\xf2\xe4\x2c\xb5\x3c\xf9\x7b\xb5\
-\x3c\x79\x6e\xea\xd1\x14\xd8\x69\x88\x0d\x76\x2a\x62\x83\xcd\xb1\
-\xda\x4b\x6c\x74\x29\x34\x8a\xcd\x31\x35\x1b\x5d\x79\xe5\x79\xff\
-\xfb\xfe\xaf\x01\x00\x3d\xb9\x4e\x56\xa9\x10\xde\xd1\x00\x00\x00\
-\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x15\xd7\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x22\x00\x00\x00\x23\x08\x06\x00\x00\x01\x86\x1c\xe8\xf1\
-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x2e\x23\x00\x00\x2e\x23\
-\x01\x78\xa5\x3f\x76\x00\x00\x0a\x4f\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\x78\xda\x9d\x53\x67\x54\x53\xe9\x16\x3d\xf7\xde\
-\xf4\x42\x4b\x88\x80\x94\x4b\x6f\x52\x15\x08\x20\x52\x42\x8b\x80\
-\x14\x91\x26\x2a\x21\x09\x10\x4a\x88\x21\xa1\xd9\x15\x51\xc1\x11\
-\x45\x45\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15\x51\x2c\x0c\
-\x8a\x0a\xd8\x07\xe4\x21\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1\x7b\
-\xa3\x6b\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7\x3e\xe7\xac\xf3\x9d\xb3\
-\xcf\x07\xc0\x08\x0c\x96\x48\x33\x51\x35\x80\x0c\xa9\x42\x1e\x11\
-\xe0\x83\xc7\xc4\xc6\xe1\xe4\x2e\x40\x81\x0a\x24\x70\x00\x10\x08\
-\xb3\x64\x21\x73\xfd\x23\x01\x00\xf8\x7e\x3c\x3c\x2b\x22\xc0\x07\
-\xbe\x00\x01\x78\xd3\x0b\x08\x00\xc0\x4d\x9b\xc0\x30\x1c\x87\xff\
-\x0f\xea\x42\x99\x5c\x01\x80\x84\x01\xc0\x74\x91\x38\x4b\x08\x80\
-\x14\x00\x40\x7a\x8e\x42\xa6\x00\x40\x46\x01\x80\x9d\x98\x26\x53\
-\x00\xa0\x04\x00\x60\xcb\x63\x62\xe3\x00\x50\x2d\x00\x60\x27\x7f\
-\xe6\xd3\x00\x80\x9d\xf8\x99\x7b\x01\x00\x5b\x94\x21\x15\x01\xa0\
-\x91\x00\x20\x13\x65\x88\x44\x00\x68\x3b\x00\xac\xcf\x56\x8a\x45\
-\x00\x58\x30\x00\x14\x66\x4b\xc4\x39\x00\xd8\x2d\x00\x30\x49\x57\
-\x66\x48\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x00\x30\
-\x51\x88\x85\x29\x00\x04\x7b\x00\x60\xc8\x23\x23\x78\x00\x84\x99\
-\x00\x14\x46\xf2\x57\x3c\xf1\x2b\xae\x10\xe7\x2a\x00\x00\x78\x99\
-\xb2\x3c\xb9\x24\x39\x45\x81\x5b\x08\x2d\x71\x07\x57\x57\x2e\x1e\
-\x28\xce\x49\x17\x2b\x14\x36\x61\x02\x61\x9a\x40\x2e\xc2\x79\x99\
-\x19\x32\x81\x34\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\
-\xf3\xfd\x78\xce\x0e\xae\xce\xce\x36\x8e\xb6\x0e\x5f\x2d\xea\xbf\
-\x06\xff\x22\x62\x62\xe3\xfe\xe5\xcf\xab\x70\x40\x00\x00\xe1\x74\
-\x7e\xd1\xfe\x2c\x2f\xb3\x1a\x80\x3b\x06\x80\x6d\xfe\xa2\x25\xee\
-\x04\x68\x5e\x0b\xa0\x75\xf7\x8b\x66\xb2\x0f\x40\xb5\x00\xa0\xe9\
-\xda\x57\xf3\x70\xf8\x7e\x3c\x3c\x45\xa1\x90\xb9\xd9\xd9\xe5\xe4\
-\xe4\xd8\x4a\xc4\x42\x5b\x61\xca\x57\x7d\xfe\x67\xc2\x5f\xc0\x57\
-\xfd\x6c\xf9\x7e\x3c\xfc\xf7\xf5\xe0\xbe\xe2\x24\x81\x32\x5d\x81\
-\x47\x04\xf8\xe0\xc2\xcc\xf4\x4c\xa5\x1c\xcf\x92\x09\x84\x62\xdc\
-\xe6\x8f\x47\xfc\xb7\x0b\xff\xfc\x1d\xd3\x22\xc4\x49\x62\xb9\x58\
-\x2a\x14\xe3\x51\x12\x71\x8e\x44\x9a\x8c\xf3\x32\xa5\x22\x89\x42\
-\x92\x29\xc5\x25\xd2\xff\x64\xe2\xdf\x2c\xfb\x03\x3e\xdf\x35\x00\
-\xb0\x6a\x3e\x01\x7b\x91\x2d\xa8\x5d\x63\x03\xf6\x4b\x27\x10\x58\
-\x74\xc0\xe2\xf7\x00\x00\xf2\xbb\x6f\xc1\xd4\x28\x08\x03\x80\x68\
-\x83\xe1\xcf\x77\xff\xef\x3f\xfd\x47\xa0\x25\x00\x80\x66\x49\x92\
-\x71\x00\x00\x5e\x44\x24\x2e\x54\xca\xb3\x3f\xc7\x08\x00\x00\x44\
-\xa0\x81\x2a\xb0\x41\x1b\xf4\xc1\x18\x2c\xc0\x06\x1c\xc1\x05\xdc\
-\xc1\x0b\xfc\x60\x36\x84\x42\x24\xc4\xc2\x42\x10\x42\x0a\x64\x80\
-\x1c\x72\x60\x29\xac\x82\x42\x28\x86\xcd\xb0\x1d\x2a\x60\x2f\xd4\
-\x40\x1d\x34\xc0\x51\x68\x86\x93\x70\x0e\x2e\xc2\x55\xb8\x0e\x3d\
-\x70\x0f\xfa\x61\x08\x9e\xc1\x28\xbc\x81\x09\x04\x41\xc8\x08\x13\
-\x61\x21\xda\x88\x01\x62\x8a\x58\x23\x8e\x08\x17\x99\x85\xf8\x21\
-\xc1\x48\x04\x12\x8b\x24\x20\xc9\x88\x14\x51\x22\x4b\x91\x35\x48\
-\x31\x52\x8a\x54\x20\x55\x48\x1d\xf2\x3d\x72\x02\x39\x87\x5c\x46\
-\xba\x91\x3b\xc8\x00\x32\x82\xfc\x86\xbc\x47\x31\x94\x81\xb2\x51\
-\x3d\xd4\x0c\xb5\x43\xb9\xa8\x37\x1a\x84\x46\xa2\x0b\xd0\x64\x74\
-\x31\x9a\x8f\x16\xa0\x9b\xd0\x72\xb4\x1a\x3d\x8c\x36\xa1\xe7\xd0\
-\xab\x68\x0f\xda\x8f\x3e\x43\xc7\x30\xc0\xe8\x18\x07\x33\xc4\x6c\
-\x30\x2e\xc6\xc3\x42\xb1\x38\x2c\x09\x93\x63\xcb\xb1\x22\xac\x0c\
-\xab\xc6\x1a\xb0\x56\xac\x03\xbb\x89\xf5\x63\xcf\xb1\x77\x04\x12\
-\x81\x45\xc0\x09\x36\x04\x77\x42\x20\x61\x1e\x41\x48\x58\x4c\x58\
-\x4e\xd8\x48\xa8\x20\x1c\x24\x34\x11\xda\x09\x37\x09\x03\x84\x51\
-\xc2\x27\x22\x93\xa8\x4b\xb4\x26\xba\x11\xf9\xc4\x18\x62\x32\x31\
-\x87\x58\x48\x2c\x23\xd6\x12\x8f\x13\x2f\x10\x7b\x88\x43\xc4\x37\
-\x24\x12\x89\x43\x32\x27\xb9\x90\x02\x49\xb1\xa4\x54\xd2\x12\xd2\
-\x46\xd2\x6e\x52\x23\xe9\x2c\xa9\x9b\x34\x48\x1a\x23\x93\xc9\xda\
-\x64\x6b\xb2\x07\x39\x94\x2c\x20\x2b\xc8\x85\xe4\x9d\xe4\xc3\xe4\
-\x33\xe4\x1b\xe4\x21\xf2\x5b\x0a\x9d\x62\x40\x71\xa4\xf8\x53\xe2\
-\x28\x52\xca\x6a\x4a\x19\xe5\x10\xe5\x34\xe5\x06\x65\x98\x32\x41\
-\x55\xa3\x9a\x52\xdd\xa8\xa1\x54\x11\x35\x8f\x5a\x42\xad\xa1\xb6\
-\x52\xaf\x51\x87\xa8\x13\x34\x75\x9a\x39\xcd\x83\x16\x49\x4b\xa5\
-\xad\xa2\x95\xd3\x1a\x68\x17\x68\xf7\x69\xaf\xe8\x74\xba\x11\xdd\
-\x95\x1e\x4e\x97\xd0\x57\xd2\xcb\xe9\x47\xe8\x97\xe8\x03\xf4\x77\
-\x0c\x0d\x86\x15\x83\xc7\x88\x67\x28\x19\x9b\x18\x07\x18\x67\x19\
-\x77\x18\xaf\x98\x4c\xa6\x19\xd3\x8b\x19\xc7\x54\x30\x37\x31\xeb\
-\x98\xe7\x99\x0f\x99\x6f\x55\x58\x2a\xb6\x2a\x7c\x15\x91\xca\x0a\
-\x95\x4a\x95\x26\x95\x1b\x2a\x2f\x54\xa9\xaa\xa6\xaa\xde\xaa\x0b\
-\x55\xf3\x55\xcb\x54\x8f\xa9\x5e\x53\x7d\xae\x46\x55\x33\x53\xe3\
-\xa9\x09\xd4\x96\xab\x55\xaa\x9d\x50\xeb\x53\x1b\x53\x67\xa9\x3b\
-\xa8\x87\xaa\x67\xa8\x6f\x54\x3f\xa4\x7e\x59\xfd\x89\x06\x59\xc3\
-\x4c\xc3\x4f\x43\xa4\x51\xa0\xb1\x5f\xe3\xbc\xc6\x20\x0b\x63\x19\
-\xb3\x78\x2c\x21\x6b\x0d\xab\x86\x75\x81\x35\xc4\x26\xb1\xcd\xd9\
-\x7c\x76\x2a\xbb\x98\xfd\x1d\xbb\x8b\x3d\xaa\xa9\xa1\x39\x43\x33\
-\x4a\x33\x57\xb3\x52\xf3\x94\x66\x3f\x07\xe3\x98\x71\xf8\x9c\x74\
-\x4e\x09\xe7\x28\xa7\x97\xf3\x7e\x8a\xde\x14\xef\x29\xe2\x29\x1b\
-\xa6\x34\x4c\xb9\x31\x65\x5c\x6b\xaa\x96\x97\x96\x58\xab\x48\xab\
-\x51\xab\x47\xeb\xbd\x36\xae\xed\xa7\x9d\xa6\xbd\x45\xbb\x59\xfb\
-\x81\x0e\x41\xc7\x4a\x27\x5c\x27\x47\x67\x8f\xce\x05\x9d\xe7\x53\
-\xd9\x53\xdd\xa7\x0a\xa7\x16\x4d\x3d\x3a\xf5\xae\x2e\xaa\x6b\xa5\
-\x1b\xa1\xbb\x44\x77\xbf\x6e\xa7\xee\x98\x9e\xbe\x5e\x80\x9e\x4c\
-\x6f\xa7\xde\x79\xbd\xe7\xfa\x1c\x7d\x2f\xfd\x54\xfd\x6d\xfa\xa7\
-\xf5\x47\x0c\x58\x06\xb3\x0c\x24\x06\xdb\x0c\xce\x18\x3c\xc5\x35\
-\x71\x6f\x3c\x1d\x2f\xc7\xdb\xf1\x51\x43\x5d\xc3\x40\x43\xa5\x61\
-\x95\x61\x97\xe1\x84\x91\xb9\xd1\x3c\xa3\xd5\x46\x8d\x46\x0f\x8c\
-\x69\xc6\x5c\xe3\x24\xe3\x6d\xc6\x6d\xc6\xa3\x26\x06\x26\x21\x26\
-\x4b\x4d\xea\x4d\xee\x9a\x52\x4d\xb9\xa6\x29\xa6\x3b\x4c\x3b\x4c\
-\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x99\x35\x9b\x3d\x31\xd7\x32\xe7\x9b\
-\xe7\x9b\xd7\x9b\xdf\xb7\x60\x5a\x78\x5a\x2c\xb6\xa8\xb6\xb8\x65\
-\x49\xb2\xe4\x5a\xa6\x59\xee\xb6\xbc\x6e\x85\x5a\x39\x59\xa5\x58\
-\x55\x5a\x5d\xb3\x46\xad\x9d\xad\x25\xd6\xbb\xad\xbb\xa7\x11\xa7\
-\xb9\x4e\x93\x4e\xab\x9e\xd6\x67\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\
-\x19\xb0\xe5\xd8\x06\xdb\xae\xb6\x6d\xb6\x7d\x61\x67\x62\x17\x67\
-\xb7\xc5\xae\xc3\xee\x93\xbd\x93\x7d\xba\x7d\x8d\xfd\x3d\x07\x0d\
-\x87\xd9\x0e\xab\x1d\x5a\x1d\x7e\x73\xb4\x72\x14\x3a\x56\x3a\xde\
-\x9a\xce\x9c\xee\x3f\x7d\xc5\xf4\x96\xe9\x2f\x67\x58\xcf\x10\xcf\
-\xd8\x33\xe3\xb6\x13\xcb\x29\xc4\x69\x9d\x53\x9b\xd3\x47\x67\x17\
-\x67\xb9\x73\x83\xf3\x88\x8b\x89\x4b\x82\xcb\x2e\x97\x3e\x2e\x9b\
-\x1b\xc6\xdd\xc8\xbd\xe4\x4a\x74\xf5\x71\x5d\xe1\x7a\xd2\xf5\x9d\
-\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee\x36\xee\x69\xee\x87\xdc\x9f\
-\xcc\x34\x9f\x29\x9e\x59\x33\x73\xd0\xc3\xc8\x43\xe0\x51\xe5\xd1\
-\x3f\x0b\x9f\x95\x30\x6b\xdf\xac\x7e\x4f\x43\x4f\x81\x67\xb5\xe7\
-\x23\x2f\x63\x2f\x91\x57\xad\xd7\xb0\xb7\xa5\x77\xaa\xf7\x61\xef\
-\x17\x3e\xf6\x3e\x72\x9f\xe3\x3e\xe3\x3c\x37\xde\x32\xde\x59\x5f\
-\xcc\x37\xc0\xb7\xc8\xb7\xcb\x4f\xc3\x6f\x9e\x5f\x85\xdf\x43\x7f\
-\x23\xff\x64\xff\x7a\xff\xd1\x00\xa7\x80\x25\x01\x67\x03\x89\x81\
-\x41\x81\x5b\x02\xfb\xf8\x7a\x7c\x21\xbf\x8e\x3f\x3a\xdb\x65\xf6\
-\xb2\xd9\xed\x41\x8c\xa0\xb9\x41\x15\x41\x8f\x82\xad\x82\xe5\xc1\
-\xad\x21\x68\xc8\xec\x90\xad\x21\xf7\xe7\x98\xce\x91\xce\x69\x0e\
-\x85\x50\x7e\xe8\xd6\xd0\x07\x61\xe6\x61\x8b\xc3\x7e\x0c\x27\x85\
-\x87\x85\x57\x86\x3f\x8e\x70\x88\x58\x1a\xd1\x31\x97\x35\x77\xd1\
-\xdc\x43\x73\xdf\x44\xfa\x44\x96\x44\xde\x9b\x67\x31\x4f\x39\xaf\
-\x2d\x4a\x35\x2a\x3e\xaa\x2e\x6a\x3c\xda\x37\xba\x34\xba\x3f\xc6\
-\x2e\x66\x59\xcc\xd5\x58\x9d\x58\x49\x6c\x4b\x1c\x39\x2e\x2a\xae\
-\x36\x6e\x6c\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3\x7b\x17\
-\x98\x2f\xc8\x5d\x70\x79\xa1\xce\xc2\xf4\x85\xa7\x16\xa9\x2e\x12\
-\x2c\x3a\x96\x40\x4c\x88\x4e\x38\x94\xf0\x41\x10\x2a\xa8\x16\x8c\
-\x25\xf2\x13\x77\x25\x8e\x0a\x79\xc2\x1d\xc2\x67\x22\x2f\xd1\x36\
-\xd1\x88\xd8\x43\x5c\x2a\x1e\x4e\xf2\x48\x2a\x4d\x7a\x92\xec\x91\
-\xbc\x35\x79\x24\xc5\x33\xa5\x2c\xe5\xb9\x84\x27\xa9\x90\xbc\x4c\
-\x0d\x4c\xdd\x9b\x3a\x9e\x16\x9a\x76\x20\x6d\x32\x3d\x3a\xbd\x31\
-\x83\x92\x91\x90\x71\x42\xaa\x21\x4d\x93\xb6\x67\xea\x67\xe6\x66\
-\x76\xcb\xac\x65\x85\xb2\xfe\xc5\x6e\x8b\xb7\x2f\x1e\x95\x07\xc9\
-\x6b\xb3\x90\xac\x05\x59\x2d\x0a\xb6\x42\xa6\xe8\x54\x5a\x28\xd7\
-\x2a\x07\xb2\x67\x65\x57\x66\xbf\xcd\x89\xca\x39\x96\xab\x9e\x2b\
-\xcd\xed\xcc\xb3\xca\xdb\x90\x37\x9c\xef\x9f\xff\xed\x12\xc2\x12\
-\xe1\x92\xb6\xa5\x86\x4b\x57\x2d\x1d\x58\xe6\xbd\xac\x6a\x39\xb2\
-\x3c\x71\x79\xdb\x0a\xe3\x15\x05\x2b\x86\x56\x06\xac\x3c\xb8\x8a\
-\xb6\x2a\x6d\xd5\x4f\xab\xed\x57\x97\xae\x7e\xbd\x26\x7a\x4d\x6b\
-\x81\x5e\xc1\xca\x82\xc1\xb5\x01\x6b\xeb\x0b\x55\x0a\xe5\x85\x7d\
-\xeb\xdc\xd7\xed\x5d\x4f\x58\x2f\x59\xdf\xb5\x61\xfa\x86\x9d\x1b\
-\x3e\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8\x28\xdc\x78\xe5\
-\x1b\x87\x6f\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9\x64\xcf\x66\
-\xd2\x66\xe9\xe6\xde\x2d\x9e\x5b\x0e\x96\xaa\x97\xe6\x97\x0e\x6e\
-\x0d\xd9\xda\xb4\x0d\xdf\x56\xb4\xed\xf5\xf6\x45\xdb\x2f\x97\xcd\
-\x28\xdb\xbb\x83\xb6\x43\xb9\xa3\xbf\x3c\xb8\xbc\x65\xa7\xc9\xce\
-\xcd\x3b\x3f\x54\xa4\x54\xf4\x54\xfa\x54\x36\xee\xd2\xdd\xb5\x61\
-\xd7\xf8\x6e\xd1\xee\x1b\x7b\xbc\xf6\x34\xec\xd5\xdb\x5b\xbc\xf7\
-\xfd\x3e\xc9\xbe\xdb\x55\x01\x55\x4d\xd5\x66\xd5\x65\xfb\x49\xfb\
-\xb3\xf7\x3f\xae\x89\xaa\xe9\xf8\x96\xfb\x6d\x5d\xad\x4e\x6d\x71\
-\xed\xc7\x03\xd2\x03\xfd\x07\x23\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2\
-\x3d\x54\x52\x8f\xd6\x2b\xeb\x47\x0e\xc7\x1f\xbe\xfe\x9d\xef\x77\
-\x2d\x0d\x36\x0d\x55\x8d\x9c\xc6\xe2\x23\x70\x44\x79\xe4\xe9\xf7\
-\x09\xdf\xf7\x1e\x0d\x3a\xda\x76\x8c\x7b\xac\xe1\x07\xd3\x1f\x76\
-\x1d\x67\x1d\x2f\x6a\x42\x9a\xf2\x9a\x46\x9b\x53\x9a\xfb\x5b\x62\
-\x5b\xba\x4f\xcc\x3e\xd1\xd6\xea\xde\x7a\xfc\x47\xdb\x1f\x0f\x9c\
-\x34\x3c\x59\x79\x4a\xf3\x54\xc9\x69\xda\xe9\x82\xd3\x93\x67\xf2\
-\xcf\x8c\x9d\x95\x9d\x7d\x7e\x2e\xf9\xdc\x60\xdb\xa2\xb6\x7b\xe7\
-\x63\xce\xdf\x6a\x0f\x6f\xef\xba\x10\x74\xe1\xd2\x45\xff\x8b\xe7\
-\x3b\xbc\x3b\xce\x5c\xf2\xb8\x74\xf2\xb2\xdb\xe5\x13\x57\xb8\x57\
-\x9a\xaf\x3a\x5f\x6d\xea\x74\xea\x3c\xfe\x93\xd3\x4f\xc7\xbb\x9c\
-\xbb\x9a\xae\xb9\x5c\x6b\xb9\xee\x7a\xbd\xb5\x7b\x66\xf7\xe9\x1b\
-\x9e\x37\xce\xdd\xf4\xbd\x79\xf1\x16\xff\xd6\xd5\x9e\x39\x3d\xdd\
-\xbd\xf3\x7a\x6f\xf7\xc5\xf7\xf5\xdf\x16\xdd\x7e\x72\x27\xfd\xce\
-\xcb\xbb\xd9\x77\x27\xee\xad\xbc\x4f\xbc\x5f\xf4\x40\xed\x41\xd9\
-\x43\xdd\x87\xd5\x3f\x5b\xfe\xdc\xd8\xef\xdc\x7f\x6a\xc0\x77\xa0\
-\xf3\xd1\xdc\x47\xf7\x06\x85\x83\xcf\xfe\x91\xf5\x8f\x0f\x43\x05\
-\x8f\x99\x8f\xcb\x86\x0d\x86\xeb\x9e\x38\x3e\x39\x39\xe2\x3f\x72\
-\xfd\xe9\xfc\xa7\x43\xcf\x64\xcf\x26\x9e\x17\xfe\xa2\xfe\xcb\xae\
-\x17\x16\x2f\x7e\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\
-\x93\xbf\x6d\x7c\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\
-\xbe\xc9\x78\x33\x31\x5e\xf4\x56\xfb\xed\xc1\x77\xdc\x77\x1d\xef\
-\xa3\xdf\x0f\x4f\xe4\x7c\x20\x7f\x28\xff\x68\xf9\xb1\xf5\x53\xd0\
-\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfc\x63\x33\x2d\xdb\
-\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x7a\x25\x00\x00\x80\x83\
-\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00\x75\x30\x00\x00\xea\x60\
-\x00\x00\x3a\x98\x00\x00\x17\x6f\x92\x5f\xc5\x46\x00\x00\x0b\x02\
-\x49\x44\x41\x54\x78\xda\x62\xfa\xff\xff\x3f\x03\x3a\x66\x62\x60\
-\x60\x60\x28\xdf\xa1\xf5\xbf\x76\xb7\xc9\x7f\x06\x28\x60\x62\x60\
-\x60\x60\xd0\x95\x70\x67\xf8\xf5\xf7\x1b\x03\x8a\xa0\xc9\xca\x45\
-\x0c\x33\xba\xb2\x19\xae\xed\xf5\xfd\x0f\x17\xd4\x68\x7f\xcb\xf8\
-\x71\x5f\x36\xe3\xfb\x27\x5b\x18\x18\x18\x18\x18\x00\x00\x00\x00\
-\xff\xff\x62\xc2\xb0\xa4\x74\xbb\xda\xff\x3f\xff\x7e\xfe\x9f\x7c\
-\x3c\x0c\xa2\x8d\x91\x91\xa5\xe8\xe4\xe3\xd5\x0c\x35\xd5\xf6\x5f\
-\x19\x18\x18\x18\x98\x92\x0e\xbe\xec\xb3\x89\xfc\xc3\xc8\xc0\xc0\
-\xc0\x7d\x6d\xaf\xef\x7f\x26\x8d\xf6\xb7\x8c\xff\x8f\x25\x30\xc0\
-\x0c\x06\x00\x00\x00\xff\xff\x62\xfa\xff\xff\x3f\x43\xe9\x76\x8d\
-\xa4\xb6\x03\x4e\xff\x0b\xb7\x28\xfe\x5f\x7d\xb9\xe6\xff\xaf\xbf\
-\x3f\x4e\x60\xf8\x86\x91\x81\x71\x92\xbe\xa4\x17\x83\xba\xa8\x2d\
-\xc3\xf1\x47\xcb\x18\x78\x6d\x96\xf8\x30\x20\x01\x26\x06\x06\x06\
-\x86\xc4\x83\x2f\x2f\xef\xbb\x37\x7b\xc1\xed\x37\xc7\x18\x3e\xbf\
-\x97\x64\x64\xe7\xf8\xf1\x1a\x43\x91\x46\xfb\x5b\xcb\x1e\x8f\x1b\
-\x89\x3d\x5e\xb7\x19\x67\x45\x1f\x61\xf8\xb8\x2f\x9b\xf1\xf7\xdf\
-\x1f\xff\x7f\xff\xfd\xf1\x9f\x81\x81\x81\x01\x00\x00\x00\xff\xff\
-\x62\xc2\x16\xa2\x28\xee\x29\xdf\xa1\xc5\xb0\xfc\x62\xe9\xff\xf2\
-\x1d\x5a\xff\x1b\xf6\x5a\xfc\xff\xfe\xfb\xd3\xff\x9f\x7f\xbe\x20\
-\xac\x61\x61\x62\x67\x38\xff\x7c\x33\x43\xb0\x4e\x23\xc3\x8b\xcf\
-\xb7\x19\xe6\x9d\x4d\x67\xa8\xdc\xa9\x87\x50\xf0\xe7\xdf\x0f\x06\
-\x06\x06\x46\x06\x3e\x76\x71\x06\x7e\x0e\x71\x86\x47\x9f\x8f\xa6\
-\xcd\xed\x2d\xe6\x86\x2b\xf8\xc5\xcc\xc4\xf0\xe7\xef\x4f\x06\x45\
-\x41\x13\x86\x1f\x7f\x3e\x33\x3c\xb8\xa9\x3b\x9b\x81\x81\x01\x6e\
-\x07\x53\xfa\xbe\x17\x5c\x8e\x77\x7e\x31\x7e\xfb\xfd\x81\x81\x83\
-\x85\xf7\xda\xb6\x35\x3e\x69\xe8\x5e\xf5\x51\x7d\xf1\xfd\xff\x97\
-\x26\x05\x89\x19\x5d\xd9\x4a\x4c\x4c\xff\x66\x1e\xa9\x58\xc7\xf0\
-\x97\x81\xe1\xff\xe5\x5d\xce\xff\x99\x34\xda\xdf\xae\xd2\x68\x7f\
-\xcb\x28\xdb\xfe\xeb\xe5\xc7\x7d\xd9\x9c\x1f\xf7\x65\x33\x7e\x7a\
-\xbe\x9f\xe1\xe5\xad\x59\x0c\x9f\x9e\xef\x87\x04\x16\x3a\xf8\xcf\
-\xf0\x9f\xe1\xfe\xf1\x74\x86\xff\x0c\xff\x19\x00\x8c\x93\x4f\x48\
-\x53\x71\x00\xc7\x3f\x3f\xb7\x97\x3a\x9d\xcd\x17\x46\xe8\xa4\x0e\
-\x66\x5b\x51\x41\x94\x68\x06\x75\xc8\x28\x44\x0f\x76\xe8\x32\xd9\
-\x41\x4f\xcd\x05\x52\xbc\x42\xea\x10\x2a\x8b\x0e\x51\x54\xe8\x55\
-\xbd\x45\x79\x88\xd9\x43\x56\xc3\xa2\x3a\xec\x34\x8a\xfe\x40\x45\
-\x08\xc1\x0a\x5c\xf5\x7a\xbc\x1e\xdb\xde\x7b\xbf\x0e\x11\x15\x34\
-\xe8\x0b\xdf\xeb\x87\xcf\xe1\xfb\xad\x91\x52\xa2\xe9\x51\x2e\x3e\
-\xd8\x4f\xf2\x6e\x6b\xa3\xa6\x47\x87\x34\x3d\x3a\xa9\xe9\xdb\x2f\
-\x4d\x2c\xef\x3e\xa9\xe9\x91\x9d\xa3\x8b\x41\x21\xa5\xc4\xf3\x1c\
-\xaa\x4e\x15\xc0\x2a\x7f\xf1\xea\x95\xf5\x26\x88\x3b\x6a\x7d\xf8\
-\xbc\xeb\x95\xcf\x4e\x1f\xc9\xdf\x5c\xe7\x0b\x3c\x6b\x50\x9a\xbd\
-\xd3\xf7\x3a\xe4\x19\x7d\xdb\xbf\xa4\x7e\x42\xa4\x74\x51\x7c\x75\
-\xb2\xbb\xfd\x04\x15\xf7\x3b\x7b\x5a\x07\x69\x0f\xed\x22\xfd\xfa\
-\x32\xb6\x63\x22\x84\xb0\xa8\x31\x44\x93\x35\x5a\x1d\xb2\x37\x7c\
-\x9c\x68\xcb\xa1\x0f\xcf\x3f\x2e\x53\xf1\xca\xf4\x6d\x1d\xe3\xcd\
-\xda\x53\xcc\xd2\x1a\x1d\x6a\x37\x6a\xa0\x6d\xc7\xec\xf4\xe4\xb5\
-\x2b\x33\xc1\x95\xaa\x90\x7d\xf3\xb3\x04\x1f\xdd\xda\x6c\x3a\x5f\
-\x2f\x04\x94\x10\x76\xe5\x1b\x4d\x75\x2d\xe4\x0b\x69\x56\x8d\x5c\
-\x66\xe6\xea\xe0\xaa\x5f\x71\x4f\x01\x07\xab\x42\x4a\x7e\xd1\xdf\
-\x59\xb0\xe5\xc8\xca\xa7\x03\xfd\xf9\xcf\xe2\xc5\xfb\xdb\xa2\xb9\
-\x61\x83\xb8\x9f\xee\x13\xd7\xa7\xc6\x8f\x59\x66\xa3\x04\x58\x8a\
-\x8f\xf1\x64\x4e\xc8\x5f\x7d\x3c\x27\x7e\x9f\x18\x58\x02\x14\x60\
-\x7c\xa3\x51\x66\xd3\x7c\x92\x73\x13\x31\xde\xbe\xec\x1c\xf2\xf9\
-\x9d\x77\x80\x0b\xdc\x50\xc3\x03\x74\x0d\x97\x88\x1c\xd6\xe9\x1a\
-\x2e\xa1\x86\x07\xfe\x3a\x0c\x91\x54\xd1\x89\xa4\x8a\xaf\x22\xa9\
-\x22\xe1\x29\x0b\xf7\xe1\x08\x46\x36\xb1\x68\x64\x13\x5b\x8c\x6c\
-\xc2\x6f\x64\x13\x49\xa3\x90\x21\xb7\x50\x4b\xa8\xed\x28\xb9\x85\
-\x5a\x8c\x42\x86\x3f\x4d\xfe\x2b\x3d\x31\x5b\xf4\xc6\xa5\xf0\x81\
-\xe8\x8d\x4b\xd1\x13\xb3\x05\xc0\x0f\xce\xca\x2c\x24\xca\x30\x0a\
-\xc3\xcf\xf7\x8d\x1b\x86\xa6\x96\x8e\x90\xda\x82\xe9\x58\xa9\x49\
-\x26\xa9\x85\x57\x11\x45\x03\x51\xe1\x85\x90\x26\xd5\x85\x68\x0b\
-\xe2\x92\x41\x65\x10\x49\x91\x11\x11\x42\x50\x41\x98\x4c\x11\x7a\
-\x51\xe0\x46\x4c\x44\x6a\x51\x86\x51\xd9\x45\x25\xe6\x92\x95\xcd\
-\x08\x93\xcd\xa8\x33\xfe\xff\xd7\x45\x12\x5a\xfc\x25\x1d\x78\xef\
-\xde\xf3\x70\x38\x9c\xe5\x9f\x5b\x39\x1f\x49\x80\x8a\x16\x0b\x4d\
-\xbd\xd5\x94\xb7\x24\x26\x57\xb6\xae\x2a\xad\x6c\x4d\x3a\x77\xff\
-\x7d\xdd\x89\x8a\xd6\x24\x6b\x59\xf3\xca\x45\xe7\x1f\x6d\x43\x29\
-\x1d\xa5\x34\xe3\x39\x11\x42\xd2\x37\xf6\x54\x65\xc5\xe5\xbd\xf4\
-\x6a\x9e\x5a\x10\xe5\x9a\x9a\x3e\x25\x10\x77\x4b\x32\x6f\x3b\x0e\
-\x65\x35\x2a\x9f\x3e\x69\xf6\x6a\x13\xc6\x10\x20\xcd\xe1\xfe\x40\
-\xc7\x40\x3d\xb9\xc9\x35\xf8\xb4\x49\x52\xa2\xb7\x60\xb5\x1c\xa5\
-\xb6\xc3\x4a\x55\xdb\x1a\xaa\xda\x52\x9a\x8e\xb5\xaf\x35\x86\xf8\
-\xc9\x80\x20\x9f\x36\x81\x9f\x0c\xa0\xa9\xf7\x24\xab\xcd\x9b\xe9\
-\x1c\xb8\x49\x63\xef\x49\x96\x86\xa5\x12\xbf\x28\x93\x60\xff\xb0\
-\x3e\xa3\x86\x4b\x00\xaf\x36\xf1\x7d\x45\x44\x06\x71\x61\xa9\x4c\
-\x4d\x7b\xd8\x97\x7e\x05\x81\x24\x3a\x64\x25\x1f\xbf\xbd\xe1\xad\
-\xf3\x51\x76\xf0\x74\x56\x7e\xa8\x67\xaf\x31\x44\x0a\x39\x3e\xe4\
-\x7a\xc5\x3b\x47\x17\x09\x8b\x37\xa2\x2b\x8d\x87\xfd\xd7\x70\xba\
-\x07\x11\x48\x46\x87\xe2\xbb\xce\x9c\x4d\x2a\xbd\x50\x17\x6e\x0c\
-\x59\xb7\x64\x87\x33\x71\xf1\x46\x84\x30\x91\x18\xb9\x89\xab\xdd\
-\xfb\x59\x10\x10\x4e\x66\x5c\x1e\x51\x21\xcb\xdd\x4f\x1f\x6c\x41\
-\x4a\xbd\x16\x88\x32\x84\x3c\xfe\x7c\x77\xbc\x77\xd4\xce\xfa\x98\
-\x9d\x74\x0d\x36\x30\xe9\xfb\x46\x74\x48\x02\x4f\x86\x6e\xe1\x9e\
-\x1e\xa8\xff\x38\x1c\xb6\x6c\xc6\xbf\xdb\x10\x72\xb8\x6d\x04\xfc\
-\x03\xc5\x8b\x91\x7b\x6c\x4b\x2c\x23\x3f\xed\x32\xc3\xae\xd7\x00\
-\x78\x3c\xc1\x45\xd2\xa4\x57\xcf\xf8\xe3\x0c\x21\x93\xfe\xf2\x60\
-\x49\xfb\xa7\x08\xdd\xe4\x17\xd4\xf8\xea\x38\xe3\xde\xaf\x08\x21\
-\x09\x0c\x9a\xca\xb8\x7e\xf1\x00\x26\x93\x56\x30\xe3\xff\xf2\xb7\
-\x39\xd9\x35\xe5\x27\x9c\x45\xf7\x3f\x05\x9a\x47\x46\x45\xec\xc2\
-\x14\x31\xd8\x6f\x16\x97\x4e\x1f\x79\xa6\xeb\xb2\x01\xa0\xb9\xb0\
-\x84\xe6\x82\x92\x0b\xb3\x4f\x41\x67\xfd\xdc\x53\x10\x04\xe0\x33\
-\x09\xd7\xd6\x77\xaa\xeb\x62\x7e\x3a\x2d\x77\x72\x6f\x28\x5d\x2a\
-\x20\x0f\x00\x1d\xc2\x63\xad\x84\xc7\x6c\xff\xa9\x58\x2b\xe8\x73\
-\x2b\xd9\x00\x2c\x07\x22\x41\x65\x3d\x9f\x4a\x01\x54\x21\xd0\x04\
-\x78\x81\x51\x80\x50\x73\x0e\xf1\x39\x36\xe2\x73\x6c\x84\x9a\x73\
-\xfe\x78\xc0\x58\x6a\x9c\x1f\x2c\x35\x4e\x87\xa5\xc6\x49\xfd\xed\
-\xeb\xb8\xec\xc5\xba\xcb\x5e\xbc\xcb\x65\x2f\x0e\x74\xd9\x8b\xcd\
-\x00\xee\xb1\x1e\x94\xee\x43\xe9\x3e\xdc\x63\x3d\x7f\xf4\x64\x5e\
-\xe1\xe8\xb7\xd1\x6d\x8b\xa0\xdb\x16\x81\xa3\xdf\xf6\x1f\x10\x09\
-\x28\x7d\xd6\x0b\xd4\x7f\x65\xcf\x1b\x92\xbd\x47\x89\xec\x82\xdf\
-\xb4\x47\x09\x80\x1f\xb4\x98\x6b\x50\x94\x55\x18\xc7\x7f\xef\x2e\
-\x7b\x01\x05\x41\xc1\x44\x16\x49\x2e\x12\x68\x28\x08\x62\xa3\x78\
-\x41\x48\x68\xb4\x9c\x21\x31\x9c\x29\x9c\x49\x53\x07\xc2\x48\x89\
-\x84\x31\x71\x72\x32\xb5\x72\x4c\xfd\xd0\xc5\xc8\x1c\x86\xc6\xc8\
-\xb4\x40\xee\x08\x98\x0a\x78\x4b\xc0\x50\x56\x50\x14\x94\x3b\xbb\
-\xe8\xee\xb2\xb0\xbb\x6f\x1f\x62\x1d\xd3\x6c\x06\xc7\xce\x99\xe7\
-\xcb\x3b\xe7\xfc\xdf\xdf\x79\xce\x33\xcf\x3c\xcf\x79\x26\x99\xed\
-\x99\x65\xc7\xe1\xca\x91\x0f\xf2\x5f\x60\x6b\x49\x28\x85\xea\x7d\
-\xb3\xb7\x9f\x0c\xdb\xb7\xf1\x84\x57\xe5\xa6\x13\x3e\xcd\xa9\x05\
-\xfe\xda\xd4\x02\xff\xa1\xd4\x02\x7f\x4b\x4a\xbe\xaf\xa5\x48\xfd\
-\xe5\xc0\xd6\x92\xd0\x9e\x4d\x27\x7c\x1a\x37\xe4\x4e\xaa\x48\xce\
-\xf3\xcc\x4c\x2d\xf0\xdb\x78\xf8\xd2\x86\xb9\xd6\x90\x1b\xe9\xf8\
-\x87\x5b\x05\x41\x32\x7a\xc0\x74\xaf\xa9\x48\xbd\xf7\x6c\x8f\xfe\
-\x76\xa2\x93\xad\x2a\x2c\x6a\x4a\xf2\x64\x0f\xc7\x40\x87\x41\xb3\
-\xde\x06\x10\x2c\xa2\x49\x90\x49\x95\x8a\x00\xd7\xa8\xb1\x5b\xc2\
-\x4f\xf9\xec\x8a\xbe\x3a\x2f\x2e\x60\xe7\x2a\xbf\xf1\xe1\x9f\x75\
-\xdc\xbf\x7e\xea\xd3\x8a\x48\xc3\xae\xca\xa8\x1d\x3b\x2a\x22\xd8\
-\x51\x11\x31\x72\x10\xf1\xef\x19\x08\x78\xda\x48\xe4\xc8\xa5\x76\
-\xdc\x33\x76\x91\x77\x6d\x37\x16\x71\x88\x98\xa9\xdb\xe8\x1f\xe8\
-\x20\xec\xf9\x55\x2c\xf4\x7c\x07\xc3\xa0\x96\xf4\xa2\x40\xd2\x0a\
-\x03\x38\x52\x9f\x4e\x6d\x7b\x01\x77\xfa\x1b\xe8\xd2\x35\xd3\xad\
-\xbb\x19\xad\x31\xdc\x11\x34\x86\x3b\x23\x07\x99\xa5\x7a\x9d\x50\
-\xd5\x72\x5d\x88\x2a\x06\xef\x71\xb3\x91\x49\x14\x0c\x99\x07\x90\
-\x4b\x6d\x51\xf7\x9c\x65\xd0\x3c\xc0\xfe\xd7\xda\xf1\x1a\x3b\x8b\
-\xf5\xc7\x9c\xe9\xd0\x35\xb1\xd8\x27\x89\x70\xaf\xb5\x84\xaa\x96\
-\x13\xe8\xba\x84\x00\xd7\x28\x4d\x88\x2a\xe6\xe8\x2c\x8f\x25\x6f\
-\x7b\xba\xf8\x89\xde\xe3\xa7\x8d\x1c\xe4\x5c\xeb\xcf\xd4\xb4\xe6\
-\xe8\x6b\x5a\x73\x86\x1a\x3a\xcb\x31\x9a\xf5\x84\xba\xc7\x32\xed\
-\xb9\x48\x8c\x26\x1d\x4a\xd9\x68\x7a\xf5\xad\x74\xe9\x6e\x32\x53\
-\xb5\x8c\x5b\x9a\xcb\x54\xdc\xf8\x8e\xca\x1b\x99\x9c\x6f\xfb\x85\
-\x2b\x9d\x45\x87\xae\x75\x97\x39\x1d\xc8\xea\x89\x59\x9d\x38\xf9\
-\xc2\x86\xa4\x08\x92\x92\x16\x8c\x1c\x44\x10\x24\x08\x82\xa4\x17\
-\x51\xec\xb7\x7e\x3b\xdf\x76\x14\x75\xf7\x69\xd6\x87\x66\x11\xe2\
-\x16\xc3\x2d\x4d\x2d\xc7\xfe\xfc\x98\xc6\xae\xdf\x91\x08\x12\x6c\
-\x65\x63\x70\x73\xf0\x67\x8a\xf3\x1c\x82\x26\x2d\xca\xbc\x5c\xfe\
-\x26\xd5\x95\xc1\xcb\x44\x10\x15\x0a\x4b\xa2\x5c\x2e\x3e\x5d\xb0\
-\x82\xd8\x25\x95\xc8\xda\x5c\xed\x7d\x09\x75\x8f\xc5\xd7\x79\x1e\
-\xbd\x86\x56\xce\xdc\xca\x42\x26\x55\x52\x7c\x7d\x3f\x0e\x4a\x17\
-\x96\xfa\x7d\x88\x9f\xcb\x42\xf4\x43\x1a\x6e\xf6\x5d\xa4\xb1\xf7\
-\x64\x7d\x79\xdd\xd9\x53\xd5\x17\xec\x50\x2a\x48\x1b\x16\xfb\x08\
-\x58\x38\x62\x90\xc9\x1d\x7a\xdc\xbb\x0c\xa2\x45\x34\x4f\xef\x34\
-\xb4\xac\x3e\xd7\x9a\x43\x5d\x47\x21\x91\x3e\x89\x38\xd9\xba\xd1\
-\xa9\x6b\xe6\x55\xbf\x34\x02\x26\x44\x73\xa4\x2e\x8d\xa6\xde\x1a\
-\x6c\x24\x72\x64\x52\x25\x0a\xb9\xf8\x5e\xdd\xf9\x99\x16\xdd\x7d\
-\xfb\x37\x04\x89\x25\x64\x58\xd2\x05\x58\x30\x62\x90\xf9\x0d\x5a\
-\xe9\xa2\x2b\xda\x71\xeb\x4a\xda\x1d\xe6\x5d\xed\x3f\x68\x92\x48\
-\x04\xb9\xcc\xe1\x70\x59\xd3\x57\x0c\x0c\xdd\x63\xfc\x28\x4f\x86\
-\xcc\x06\x4e\xb7\x1c\xc6\x4e\xe6\x08\x88\x00\xdd\x0a\xa5\xf1\xc5\
-\x3f\xaa\x83\x4a\x2f\x9c\x09\x1e\xab\x50\x18\x3f\x7f\x44\x5f\xfa\
-\x34\x57\x33\x09\xd8\x6a\x94\x09\x5a\x9f\x76\x43\x79\x62\xf1\x5d\
-\xfb\xb0\xab\xda\xb7\x64\x72\x7b\x49\x55\x67\xee\xcb\x55\x6d\x39\
-\x07\x02\x26\x44\x65\x3b\xdb\x79\xec\x97\xd8\xe8\x63\x15\xb6\xc6\
-\xd1\x3d\x5d\xe3\x5c\xbe\xfd\x62\x6d\x7d\x69\x5e\x84\x93\x4c\x3e\
-\x54\x0d\x4c\x7c\x48\x4f\x0b\x9c\x79\x1a\x90\x95\x40\xac\xd5\x41\
-\x46\x1b\xa1\x7f\x4a\xbb\xe1\xd2\xba\x92\xf6\x39\x9b\x4a\x34\xc5\
-\x13\xb3\xb6\x25\x36\x56\x1c\x5a\xf9\xeb\xd1\x65\xef\xee\xc9\x48\
-\xf9\x69\xf7\xe6\xcd\x76\x47\x0e\xc6\x45\xe8\xee\x8f\x3a\x69\x63\
-\x63\xea\x05\xbc\xad\x42\x79\xf1\x89\x14\xae\x49\x1f\x53\xf9\xfe\
-\xf7\x79\xb5\xf9\x61\x62\x7d\x51\xa4\x68\x06\xb1\xbe\x28\x52\xac\
-\xcd\x0f\x13\x2f\xe7\x86\x88\x55\xd9\x8e\x0f\x1a\x82\x47\x41\x3e\
-\x01\x5e\x01\xaa\x80\x01\xc0\x04\xb8\x9b\xa4\x42\xba\x49\x2e\x0b\
-\x97\xf4\x37\xb3\xe7\xeb\x52\x2e\xd6\x39\xa1\x90\xf3\x8d\x5c\x69\
-\xec\x14\x24\x62\xf1\xbf\xc5\x81\x00\x78\x04\xed\xc4\x7b\x7e\x36\
-\x8e\x6e\x8b\x51\x4d\xdf\x02\x80\x6a\xfa\x16\x1c\xdd\x16\xe3\x3d\
-\x3f\x1b\x8f\xa0\x9d\x08\x4f\xf0\x88\x08\x5c\x04\x5e\x02\x6c\x87\
-\xbb\x15\x67\x20\x1a\x28\x03\x30\x58\x64\xd6\xb5\x6b\x86\xff\xa7\
-\x02\x96\x03\x19\xc3\x07\x89\x1f\xde\x43\x5f\x6b\x2e\x2d\x35\xc9\
-\xb8\x4e\x4d\xc1\x6c\xd2\x73\xad\x74\x29\x66\x93\x1e\xd7\xa9\x29\
-\xb4\xd4\x24\x63\x7d\xce\x78\x0c\x64\xb8\x2a\x79\xa2\xa9\xb6\xeb\
-\x38\xf4\x63\xa6\xb5\xf3\xb1\x5a\x9b\xb6\x2c\x21\x47\x5b\x96\xb0\
-\x4d\x5b\x96\x90\xae\x2d\x4b\xf8\x41\x5b\x96\xd0\x03\xa0\xb4\xf7\
-\x42\x35\x23\x03\x75\xc5\x0a\xcc\x83\x1a\x7c\x17\xfd\x86\x79\x50\
-\x83\xba\x62\x05\xaa\x19\x19\x28\xed\xbd\xfe\x2b\x8f\x3c\x9b\x21\
-\x02\x77\x1b\xf6\x52\x97\x1b\x4c\xdf\xed\xe3\xa8\x2b\xe3\x00\x50\
-\x57\xc6\xd1\x77\xfb\x38\x75\xb9\xc1\xdc\x6d\xd8\x8b\xf8\x7f\x83\
-\xcc\x8d\x7f\xbc\x00\xb2\xb6\x78\x0f\xdb\xdc\x78\xf1\x41\x98\xfc\
-\x35\x00\xe1\xfe\x7a\x92\x1d\x0a\xb2\xf0\x00\x00\x00\x00\x49\x45\
-\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x08\xb7\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
-\x00\x00\x08\x6e\x49\x44\x41\x54\x58\x85\xc5\x97\x7b\x70\x55\xd5\
-\x15\xc6\x7f\x7b\x9f\x73\x6e\x6e\x6e\xde\xb9\x97\x20\x84\x47\x5e\
-\x04\x12\x02\x11\x05\x05\x22\x05\x44\x0a\xa2\x28\xd6\xe2\x4c\xa7\
-\x75\xa8\x76\xac\xa3\x33\x3a\x63\x67\xb4\xd3\x87\x6d\x1c\x2b\x7d\
-\x4d\xff\x68\xcb\xd8\x56\x1d\x29\x76\xaa\x45\xc6\xe7\x0c\xa1\xa9\
-\xa0\x11\x5a\x01\x8d\x41\x1e\x01\xcc\x83\x24\x4a\x42\x42\x72\xf3\
-\xbc\xaf\xdc\xdc\xb3\x77\xff\x38\xe7\xde\x24\xd5\x19\x69\xa7\x33\
-\xee\x99\x35\xe7\xdc\x39\x77\xaf\xf5\x9d\x6f\x7d\x6b\xad\xb3\xe1\
-\x4b\x5e\xe2\x4a\xff\xb8\x6e\x5d\xad\xd9\x91\x61\xad\x11\x88\xed\
-\x02\xb1\x46\x43\x00\xc8\x71\x1f\x8f\x08\x18\x10\xe8\x23\x36\x7a\
-\x5f\x71\x78\xe2\x48\x43\x43\x6d\xe2\xff\x02\xa0\x68\x5b\x6d\xae\
-\x18\x4f\xfb\x31\x82\xfb\xca\xe6\xcd\xe0\xc6\x15\xa5\x59\x2b\xaa\
-\xe6\x8a\xab\x02\x59\xf8\xb3\xd3\x01\x18\x1c\x8d\xd2\x1b\x1c\xa3\
-\xb1\xf9\xa2\x3e\xf4\x41\xfb\x58\x6b\xe7\x65\xd0\x3c\xab\xd3\xc6\
-\x7f\xd6\xf9\x7a\xed\xf0\xff\x0c\xa0\x68\xf3\xce\x87\xa5\x21\x9e\
-\xdc\x5c\xb3\x28\xfd\xfe\xaf\xaf\xb4\xca\xe7\x05\xae\x88\xb3\xb6\
-\x4f\x83\x3c\xf3\xca\xf1\x89\xfd\x87\xcf\x46\x95\x96\x8f\x77\xd6\
-\x7d\xff\x77\xff\x15\x80\xa2\x75\xb5\x5e\xed\xf3\xfe\x75\x71\xe9\
-\xcc\x4d\x4f\x3e\xf8\xd5\x8c\xca\xe2\x02\x10\x8e\xe3\x7f\x9d\xfc\
-\x84\x13\x1f\x5f\x22\x38\x1a\x61\x70\x24\x86\x10\x10\xc8\x4d\xc7\
-\x9f\x93\xc1\xb2\xf2\x59\xac\x5e\x3a\x97\x92\x39\xf9\x00\x7c\xdc\
-\xd9\xcf\xe3\x4f\xbf\x15\x3e\xdd\xd6\x5b\x4f\x38\xfa\xcd\xce\x86\
-\xda\xd8\x17\x02\x58\xbc\xbd\xd6\x13\x0e\xa7\xbd\xbf\x6d\x7d\x55\
-\xc5\x4f\xee\xdf\xe0\x49\xf7\x58\xb4\x7e\x1a\xe4\xb9\x37\x1a\x69\
-\x3c\xdb\x8d\x34\x24\x86\x94\x08\x21\x90\x52\x20\x10\x29\x2f\x5a\
-\x6b\xb4\xd6\x2c\xaf\x28\x64\xc7\x2d\x57\x53\x3a\x27\x9f\x58\x3c\
-\xc1\x53\xcf\xbe\x1d\x7f\xe5\xd0\xe9\x73\x3e\x5f\xec\xba\xe6\x7d\
-\xb5\xf1\xa9\xf1\x8c\xe9\xe1\xb5\xc8\x2c\x3e\xf6\xea\xb6\x1b\xab\
-\x56\xee\x7c\x68\x53\x9a\x65\x1a\xbc\xde\x70\x96\x27\x9e\x7b\x9b\
-\x4b\x03\x21\x4c\xd3\xc0\x9a\x62\xa6\x61\x60\x9a\x06\x86\x29\x31\
-\x0c\x89\x69\x18\x48\x43\x72\x29\x18\xe2\xad\xe3\xed\x64\xf9\xd2\
-\xa8\x2c\x9e\xc1\x8d\x2b\x4a\x8d\xbe\xa1\x70\xde\xc9\x96\x81\x6b\
-\x86\x5b\x0e\xee\x85\x27\x3e\x1f\x40\xf1\x16\xef\xa3\xab\xae\x2e\
-\xba\xf7\x37\x8f\xdc\x92\x6e\x18\x92\xdf\xef\x3d\xca\x9e\xfd\x1f\
-\x61\x18\x06\xa6\x69\x62\x59\x6e\x70\xcb\xf9\x6d\x9a\xc6\xa4\x49\
-\x03\xc3\x65\xc7\x30\x24\x00\x8d\xe7\x7b\x08\x45\xe2\x5c\x5b\x31\
-\x9b\x35\xcb\x8a\xcd\x33\xed\x7d\x73\x43\xd9\xfb\xe3\x43\x2d\x07\
-\xdf\xfb\x4c\x0a\x0a\xef\xd8\xe9\xcf\xd4\x56\xcb\x9b\xbf\xfd\x76\
-\xfe\xbc\x99\xb9\xbc\x54\x7f\x92\xe7\xde\xf8\x10\xd3\x32\xa7\xbc\
-\xad\x64\x69\xd9\x0c\x96\x94\x14\x50\x51\x14\xa0\x20\xcf\x47\x6e\
-\x56\x3a\xe3\xf1\x04\x7d\x83\x61\x9a\x5a\xfa\xa8\x3f\xde\x41\x28\
-\x1a\xc7\x56\x0a\xdb\x56\x24\x6c\xc5\xdd\x9b\x97\x72\xe7\xfa\x0a\
-\x2e\x5e\x1e\x65\xeb\xc3\xbb\x07\x47\x89\x97\x77\xbf\xf6\xc3\xe0\
-\x34\x06\xfc\xa5\x37\xed\xba\xe7\xf6\xe5\xd7\xdf\xbc\x7a\xa1\x3c\
-\x73\xa1\x8f\x9f\xef\x39\x8c\x69\x18\x58\x2e\x00\xcb\x72\xee\x7f\
-\xfd\xc0\x57\x58\x34\xdf\xcf\x8c\x5c\x1f\x3e\xaf\x07\xc3\x90\xa4\
-\x79\x4c\xf2\xb2\xbc\x2c\x9a\x9f\xcf\xaa\xaa\xd9\x9c\x6a\xef\x27\
-\x16\xb7\x1d\x9d\x00\xa7\xda\xfb\xa8\x2e\x9b\x49\x49\x61\x1e\x13\
-\xb6\xf2\x9c\x38\xdd\x5d\x30\xd4\x72\xf0\x4d\x00\x09\xb0\x78\x5d\
-\x6d\xa6\x65\xca\xbb\xee\xb9\x6d\x85\xa1\xd1\x3c\xbd\xef\x38\x52\
-\xc8\x69\x14\x3b\x40\x4c\x84\x10\x08\xe1\x10\x17\x4f\x28\xe2\x09\
-\x85\x94\x12\xe9\x0a\x33\x3f\xcb\xcb\xf6\xf5\x0b\xb1\x2c\x13\x8f\
-\x65\x62\x59\x26\x86\x34\xd8\xbd\xff\x23\x34\x70\xf7\x96\x6b\x0c\
-\xd3\x34\xee\x5a\xbc\xae\x36\x13\xc0\x04\x88\xf8\xbc\x5b\xd6\x5e\
-\x5d\x2c\xf3\xb3\xd3\x39\xd5\xd6\x4b\xcb\x27\x41\x3c\x1e\x73\x8a\
-\xe8\xdc\x34\x98\x06\x09\x5b\x71\xfc\x7c\x3f\xef\x35\xf7\xd2\x3b\
-\x14\xc1\x10\x82\x0d\xcb\xe7\x73\x7b\x4d\x69\x0a\x5c\xe5\x7c\x3f\
-\x1e\xcb\x24\x21\x6d\x5c\xac\x74\x74\x0f\x73\xae\x73\x80\xca\xa2\
-\x00\x6b\xaf\x2d\x91\x07\x8f\xb6\x6e\x01\x5e\x96\x8e\xf6\xf5\x8e\
-\x9b\xae\x5b\xe0\x43\xc0\x91\x8f\xba\x1c\x31\x19\x4e\xde\x0d\x37\
-\xf7\x49\x30\xbf\x78\xe9\x04\xaf\xfd\xf3\x02\x03\xa3\xe3\xa4\x79\
-\x2c\x2c\x8f\xc5\xd9\xae\x41\xb4\xd6\x29\x31\x4b\x49\x8a\xb1\xa9\
-\x2c\xbe\xdf\xdc\x0d\xc0\xc6\x95\xe5\x3e\x21\xc5\x8e\x14\x03\x68\
-\x96\x55\x95\xcd\x04\xa0\xf5\x93\xe0\x34\x35\x9b\xc6\x64\x2a\x2c\
-\xd3\x24\x34\x6e\x63\x59\xa6\x0b\x4e\x22\xa5\x60\xcd\x92\xc2\x54\
-\x0f\xd0\x5a\x73\xb1\x3f\x8c\x65\x19\xae\x6b\x8d\xd6\xa0\x94\xe6\
-\xc2\xa5\x21\x00\x2a\x4b\x0a\xd0\x5a\x2f\x9b\x04\x20\xf0\x17\xe4\
-\x67\x02\x4e\x5f\x97\x6e\xf0\xa9\xe6\x00\x91\x93\x3d\xc0\xb5\x9a\
-\xc5\x57\xb1\xaa\x72\x66\x2a\xb8\xad\x14\xef\x9e\xee\xc3\x32\x0d\
-\xd0\x4e\x73\x52\x4a\x63\x18\x92\x91\xd0\x38\x08\xc1\x8c\xdc\x0c\
-\x34\xda\x3f\x95\x01\xf2\xdc\xc1\x32\x16\x89\xbb\xa2\x12\x93\x40\
-\xa4\x93\x12\xc3\x6d\x3c\xc9\xd2\x5c\xbb\x74\x16\x6b\x16\x4f\x09\
-\x6e\xdb\x1c\x68\xec\xa6\x67\x30\x8a\x69\x18\x4e\x60\x25\x31\x6c\
-\xc7\x4f\x24\xe6\x0c\xc8\x9c\xcc\xb4\x54\xfd\xcb\x64\x37\x18\x1a\
-\x8d\xba\x0f\xbd\x48\x21\xa6\x9b\x94\x18\x52\x4c\x63\xa3\xba\x38\
-\x9f\xd5\x8b\x02\x28\xa5\x50\x4a\x61\xdb\x36\x75\x1f\x5e\xe2\xe3\
-\xee\x31\xb7\x3b\x4e\x6f\x4c\x52\x0a\xb2\x33\xbd\x00\x8c\x84\xc7\
-\x53\x2d\x48\x02\x08\x4d\xb0\x7f\x28\x0c\x40\x20\xcf\x87\x10\x38\
-\x8a\x96\x8e\x49\x29\x10\x2e\x2b\x49\x87\xd7\x2f\xf4\xa7\x82\x2b\
-\xa5\x38\xd6\x32\x44\x57\x7f\xd4\x65\xca\x01\x9c\x64\x52\xb8\x2f\
-\x92\x9f\xed\x00\x08\x0e\x47\x10\x10\x9c\x04\x20\xe4\x89\xe6\x0b\
-\x97\x01\x58\x38\x2f\xe0\xd4\xb9\x10\x08\x40\x20\xdc\xf2\x22\x55\
-\x66\x52\x08\xb2\xd3\x8d\x14\xf5\x4a\x29\xda\xfa\x22\x29\x86\xa4\
-\x10\x08\x91\xbc\x3a\x7b\x11\x82\x92\xd9\x79\x00\x9c\xeb\xec\x47\
-\x48\x79\x22\xa5\x01\xad\xf5\x9e\x43\xc7\xdb\xd6\xdd\xb1\xbe\xd2\
-\x57\xb3\x74\x2e\x07\x8e\xb6\x4d\xf6\x68\x91\xbc\x4c\x19\x9c\x42\
-\xf0\x87\xfa\x0e\xd2\x3c\x16\x1e\x8f\x85\xc7\x63\xa2\x34\xa9\x06\
-\xe5\xe2\x9f\xb2\x9c\xdd\xcb\x17\xcd\x02\xe0\xad\x63\xad\x11\x65\
-\xab\x3d\x29\x00\xbe\x48\xac\xee\x48\xd3\x05\x35\x3c\x16\xa3\xb2\
-\xa4\x80\x05\xf3\xfc\x74\xf5\x8e\x90\x14\x68\xf2\x4d\xd1\xc9\xb2\
-\xd2\xec\x58\x3b\x27\x35\x92\x01\x5e\x3e\xd6\x8f\x52\xca\x61\x24\
-\xb9\x07\x8d\x76\x9d\x14\xcd\xca\x61\xc1\x9c\x7c\x46\x43\xe3\xbc\
-\xf3\x7e\xab\xf2\x45\x62\x75\xa9\x14\x34\x37\xd4\x86\x12\x09\xb5\
-\xf7\x2f\x75\x4d\xb6\x00\xee\xbd\x75\x19\x42\x08\xd7\x99\x53\xc7\
-\xc9\x7b\xa5\x34\xca\x56\x58\x06\x58\x06\x98\xd2\xb1\xf8\x44\x82\
-\x89\x84\x4d\xc2\x56\x28\x5b\x39\xff\x53\x1a\xad\x1c\xe0\x77\xad\
-\xaf\x00\x01\x7f\xfb\xc7\x49\xdb\xb6\xd5\xde\xe6\x86\xda\xd0\x64\
-\x15\x00\xf1\x84\xf5\xd8\xee\xd7\x3e\x18\xee\xee\x1f\x63\xd1\x7c\
-\x3f\xdf\xd8\x58\xe5\x04\x57\x4e\x8e\xed\xe4\xd5\x9d\x70\x53\x05\
-\xa8\x94\x22\x3e\x31\xc1\xc4\x84\x4d\x22\x61\x93\xb0\x6d\x6c\xdb\
-\x4e\x3d\xdb\x5a\x53\x46\x69\x61\x2e\x7d\xc1\x10\x7f\xda\x77\x6c\
-\x38\x16\xb7\x1e\x4b\xc6\x4d\x4d\xc3\xd1\xf6\xfa\x68\x4e\xd9\x06\
-\xdd\xd1\x33\x5c\xb3\xb9\xa6\xdc\xaa\x2c\x0a\x10\x8e\x4d\xd0\xde\
-\x3d\xe4\x28\x5a\x48\xa7\x22\x84\x93\xd1\x6b\x4a\x73\xb1\xb5\x26\
-\x61\x3b\xa0\x3e\x68\x1b\x26\x61\x2b\x07\x80\xcb\xc4\x44\xc2\xe6\
-\x86\x25\x85\x6c\x5d\x5d\x4a\xc2\x56\xfc\x60\x57\x7d\xa4\xad\xab\
-\xff\xa9\xae\x03\x8f\x1e\xfa\x0f\x89\x25\x97\x16\xa5\xb7\xfe\xea\
-\xf5\xed\x9b\xaa\x37\xfd\xf4\xbb\x1b\xd2\x84\x10\x1c\x6a\xec\x60\
-\xef\xa1\x73\x48\x29\xdd\xe9\x96\xfc\x18\x71\x9b\x93\x5b\x66\x5a\
-\x83\xd2\x0e\xfd\x09\x37\x05\xb7\xad\x2e\xe1\x86\x25\x85\x68\x60\
-\xe7\xf3\x0d\xe3\x2f\xd6\x35\xd5\xb7\xbd\xf9\xe8\x36\x10\xfa\x33\
-\x0c\x38\xeb\x09\x66\x57\xdf\xf0\xea\xc9\xf3\x03\x5b\x07\x46\xa2\
-\x81\x55\x4b\xe7\x19\x0b\xe6\xfa\xa9\x2e\x2b\x20\x38\x1a\xa5\x6f\
-\x28\xe2\x40\x76\xb7\x27\xf3\x3c\xf5\xe3\x23\x61\xdb\x2c\x28\xcc\
-\xe5\x5b\x1b\x2b\xa8\x2a\x0e\x30\x3e\x61\xf3\xcb\x17\x0e\xc7\x5f\
-\xac\x6b\x3a\x93\x96\x16\xd9\xdc\x7f\x76\xbd\x3d\xbd\x3e\x3e\x67\
-\xcd\x59\xf5\x48\xba\x95\x1f\x78\xa9\xba\x7c\xce\xc6\xa7\x1e\xba\
-\xd9\x57\xea\x7e\xe5\x5e\xbc\x3c\xca\xa9\xf6\x7e\x5a\xbb\x87\x18\
-\x0b\x4f\x30\x16\x8b\x23\x85\x20\x27\xd3\x4b\x8e\x2f\x8d\xb2\xc2\
-\x5c\xaa\x8a\xfd\xcc\x0e\x38\x73\xa5\xe3\xd2\x30\x3f\xda\xf5\xf7\
-\x68\x53\xf3\x85\x77\x7b\x8f\xbd\x70\x5f\x74\xb0\x2d\x08\x44\xbf\
-\x10\x00\xe0\x03\xb2\x0b\xd7\x7e\xef\x41\x6f\x76\xe0\x91\x3b\x37\
-\x2c\xf3\x7e\xe7\x6b\x2b\xcc\xf9\x57\xe5\x5e\xd1\x51\xea\xd3\xcb\
-\xa3\x3c\xff\x46\x63\xe2\xe5\x03\x1f\x8e\x47\x83\x5d\xcf\x74\x1f\
-\xfd\xe3\x6e\x60\xcc\xb5\x21\x40\x7d\x11\x80\x34\x20\x0b\xc8\x4a\
-\x2f\x28\x9d\xed\xaf\xdc\xf6\x80\x95\xe1\xdf\x56\x55\x3a\x4b\x6c\
-\x5e\x53\x99\x7e\x6d\x45\xa1\x98\x91\xe7\x23\x27\xc3\x0b\x02\x46\
-\x43\xe3\x0c\x8c\x44\x68\x3a\xdf\xa3\xeb\x0e\x37\xc7\xce\xb4\xf6\
-\xe8\xd8\x58\x4f\x7d\xf0\xd4\xab\x7f\x1e\x1f\xee\xe9\x75\x03\x87\
-\x80\x41\x20\x7c\x25\x0c\x80\x53\xa2\x19\x40\x36\x90\x61\x59\xbe\
-\xac\xec\xf2\x8d\x2b\x7d\x05\x0b\x36\x5a\xe9\xd9\xd5\x60\xe4\x68\
-\x21\x7d\x8e\x13\x15\x45\xdb\xa3\xf1\xf0\xd0\x99\x48\xdf\xf9\x77\
-\x46\xdb\xde\x69\x4a\x24\x62\x21\x1c\xba\x43\xc0\xb0\x0b\xe2\x33\
-\xe7\xc5\x2b\x3d\x9c\x1a\x80\x05\x78\x5d\x76\xbc\x38\x5d\xd4\x72\
-\x81\x2a\xc0\x06\xe2\xae\xc5\x80\x71\xf7\xfe\x8a\x0e\xa9\x5f\xda\
-\xfa\x37\x3d\x87\xb9\xea\xf9\xa4\xbb\x03\x00\x00\x00\x00\x49\x45\
-\x4e\x44\xae\x42\x60\x82\
-"
-
-qt_resource_name = b"\
-\x00\x07\
-\x07\x3b\xe0\xb3\
-\x00\x70\
-\x00\x6c\x00\x75\x00\x67\x00\x69\x00\x6e\x00\x73\
-\x00\x05\
-\x00\x49\xc3\x81\
-\x00\x43\
-\x00\x65\x00\x6e\x00\x52\x00\x61\
-\x00\x0e\
-\x09\x71\xe2\xe7\
-\x00\x70\
-\x00\x61\x00\x67\x00\x65\x00\x5f\x00\x61\x00\x6a\x00\x6f\x00\x75\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x0c\
-\x0a\x09\xe1\x87\
-\x00\x70\
-\x00\x61\x00\x67\x00\x65\x00\x5f\x00\x6e\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x08\
-\x0c\x33\x5a\x87\
-\x00\x68\
-\x00\x65\x00\x6c\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\
-"
-
-qt_resource_struct_v1 = b"\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
-\x00\x00\x00\x14\x00\x02\x00\x00\x00\x03\x00\x00\x00\x03\
-\x00\x00\x00\x24\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x00\x46\x00\x00\x00\x00\x00\x01\x00\x00\x15\x6e\
-\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x49\
-"
-
-qt_resource_struct_v2 = b"\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
-\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
-\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x14\x00\x02\x00\x00\x00\x03\x00\x00\x00\x03\
-\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x24\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x48\x3f\x38\x20\x60\
-\x00\x00\x00\x46\x00\x00\x00\x00\x00\x01\x00\x00\x15\x6e\
-\x00\x00\x01\x48\x3f\x38\x20\x60\
-\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x49\
-\x00\x00\x01\x48\x3f\x38\x20\x60\
-"
-
-qt_version = [int(v) for v in QtCore.qVersion().split('.')]
-if qt_version < [5, 8, 0]:
- rcc_version = 1
- qt_resource_struct = qt_resource_struct_v1
-else:
- rcc_version = 2
- qt_resource_struct = qt_resource_struct_v2
-
-def qInitResources():
- QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-def qCleanupResources():
- QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-qInitResources()
diff --git a/CenRa_POSTGIS/resources_rc.py.bak b/CenRa_POSTGIS/resources_rc.py.bak
deleted file mode 100644
index 1498204..0000000
--- a/CenRa_POSTGIS/resources_rc.py.bak
+++ /dev/null
@@ -1,892 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Resource object code
-#
-# Created: ven. 29. août 14:43:36 2014
-# by: The Resource Compiler for PyQt (Qt v4.8.4)
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore
-
-qt_resource_data = "\
-\x00\x00\x15\x6a\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x22\x00\x00\x00\x23\x08\x06\x00\x00\x01\x86\x1c\xe8\xf1\
-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x2e\x23\x00\x00\x2e\x23\
-\x01\x78\xa5\x3f\x76\x00\x00\x0a\x4f\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\x78\xda\x9d\x53\x67\x54\x53\xe9\x16\x3d\xf7\xde\
-\xf4\x42\x4b\x88\x80\x94\x4b\x6f\x52\x15\x08\x20\x52\x42\x8b\x80\
-\x14\x91\x26\x2a\x21\x09\x10\x4a\x88\x21\xa1\xd9\x15\x51\xc1\x11\
-\x45\x45\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15\x51\x2c\x0c\
-\x8a\x0a\xd8\x07\xe4\x21\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1\x7b\
-\xa3\x6b\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7\x3e\xe7\xac\xf3\x9d\xb3\
-\xcf\x07\xc0\x08\x0c\x96\x48\x33\x51\x35\x80\x0c\xa9\x42\x1e\x11\
-\xe0\x83\xc7\xc4\xc6\xe1\xe4\x2e\x40\x81\x0a\x24\x70\x00\x10\x08\
-\xb3\x64\x21\x73\xfd\x23\x01\x00\xf8\x7e\x3c\x3c\x2b\x22\xc0\x07\
-\xbe\x00\x01\x78\xd3\x0b\x08\x00\xc0\x4d\x9b\xc0\x30\x1c\x87\xff\
-\x0f\xea\x42\x99\x5c\x01\x80\x84\x01\xc0\x74\x91\x38\x4b\x08\x80\
-\x14\x00\x40\x7a\x8e\x42\xa6\x00\x40\x46\x01\x80\x9d\x98\x26\x53\
-\x00\xa0\x04\x00\x60\xcb\x63\x62\xe3\x00\x50\x2d\x00\x60\x27\x7f\
-\xe6\xd3\x00\x80\x9d\xf8\x99\x7b\x01\x00\x5b\x94\x21\x15\x01\xa0\
-\x91\x00\x20\x13\x65\x88\x44\x00\x68\x3b\x00\xac\xcf\x56\x8a\x45\
-\x00\x58\x30\x00\x14\x66\x4b\xc4\x39\x00\xd8\x2d\x00\x30\x49\x57\
-\x66\x48\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x00\x30\
-\x51\x88\x85\x29\x00\x04\x7b\x00\x60\xc8\x23\x23\x78\x00\x84\x99\
-\x00\x14\x46\xf2\x57\x3c\xf1\x2b\xae\x10\xe7\x2a\x00\x00\x78\x99\
-\xb2\x3c\xb9\x24\x39\x45\x81\x5b\x08\x2d\x71\x07\x57\x57\x2e\x1e\
-\x28\xce\x49\x17\x2b\x14\x36\x61\x02\x61\x9a\x40\x2e\xc2\x79\x99\
-\x19\x32\x81\x34\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\
-\xf3\xfd\x78\xce\x0e\xae\xce\xce\x36\x8e\xb6\x0e\x5f\x2d\xea\xbf\
-\x06\xff\x22\x62\x62\xe3\xfe\xe5\xcf\xab\x70\x40\x00\x00\xe1\x74\
-\x7e\xd1\xfe\x2c\x2f\xb3\x1a\x80\x3b\x06\x80\x6d\xfe\xa2\x25\xee\
-\x04\x68\x5e\x0b\xa0\x75\xf7\x8b\x66\xb2\x0f\x40\xb5\x00\xa0\xe9\
-\xda\x57\xf3\x70\xf8\x7e\x3c\x3c\x45\xa1\x90\xb9\xd9\xd9\xe5\xe4\
-\xe4\xd8\x4a\xc4\x42\x5b\x61\xca\x57\x7d\xfe\x67\xc2\x5f\xc0\x57\
-\xfd\x6c\xf9\x7e\x3c\xfc\xf7\xf5\xe0\xbe\xe2\x24\x81\x32\x5d\x81\
-\x47\x04\xf8\xe0\xc2\xcc\xf4\x4c\xa5\x1c\xcf\x92\x09\x84\x62\xdc\
-\xe6\x8f\x47\xfc\xb7\x0b\xff\xfc\x1d\xd3\x22\xc4\x49\x62\xb9\x58\
-\x2a\x14\xe3\x51\x12\x71\x8e\x44\x9a\x8c\xf3\x32\xa5\x22\x89\x42\
-\x92\x29\xc5\x25\xd2\xff\x64\xe2\xdf\x2c\xfb\x03\x3e\xdf\x35\x00\
-\xb0\x6a\x3e\x01\x7b\x91\x2d\xa8\x5d\x63\x03\xf6\x4b\x27\x10\x58\
-\x74\xc0\xe2\xf7\x00\x00\xf2\xbb\x6f\xc1\xd4\x28\x08\x03\x80\x68\
-\x83\xe1\xcf\x77\xff\xef\x3f\xfd\x47\xa0\x25\x00\x80\x66\x49\x92\
-\x71\x00\x00\x5e\x44\x24\x2e\x54\xca\xb3\x3f\xc7\x08\x00\x00\x44\
-\xa0\x81\x2a\xb0\x41\x1b\xf4\xc1\x18\x2c\xc0\x06\x1c\xc1\x05\xdc\
-\xc1\x0b\xfc\x60\x36\x84\x42\x24\xc4\xc2\x42\x10\x42\x0a\x64\x80\
-\x1c\x72\x60\x29\xac\x82\x42\x28\x86\xcd\xb0\x1d\x2a\x60\x2f\xd4\
-\x40\x1d\x34\xc0\x51\x68\x86\x93\x70\x0e\x2e\xc2\x55\xb8\x0e\x3d\
-\x70\x0f\xfa\x61\x08\x9e\xc1\x28\xbc\x81\x09\x04\x41\xc8\x08\x13\
-\x61\x21\xda\x88\x01\x62\x8a\x58\x23\x8e\x08\x17\x99\x85\xf8\x21\
-\xc1\x48\x04\x12\x8b\x24\x20\xc9\x88\x14\x51\x22\x4b\x91\x35\x48\
-\x31\x52\x8a\x54\x20\x55\x48\x1d\xf2\x3d\x72\x02\x39\x87\x5c\x46\
-\xba\x91\x3b\xc8\x00\x32\x82\xfc\x86\xbc\x47\x31\x94\x81\xb2\x51\
-\x3d\xd4\x0c\xb5\x43\xb9\xa8\x37\x1a\x84\x46\xa2\x0b\xd0\x64\x74\
-\x31\x9a\x8f\x16\xa0\x9b\xd0\x72\xb4\x1a\x3d\x8c\x36\xa1\xe7\xd0\
-\xab\x68\x0f\xda\x8f\x3e\x43\xc7\x30\xc0\xe8\x18\x07\x33\xc4\x6c\
-\x30\x2e\xc6\xc3\x42\xb1\x38\x2c\x09\x93\x63\xcb\xb1\x22\xac\x0c\
-\xab\xc6\x1a\xb0\x56\xac\x03\xbb\x89\xf5\x63\xcf\xb1\x77\x04\x12\
-\x81\x45\xc0\x09\x36\x04\x77\x42\x20\x61\x1e\x41\x48\x58\x4c\x58\
-\x4e\xd8\x48\xa8\x20\x1c\x24\x34\x11\xda\x09\x37\x09\x03\x84\x51\
-\xc2\x27\x22\x93\xa8\x4b\xb4\x26\xba\x11\xf9\xc4\x18\x62\x32\x31\
-\x87\x58\x48\x2c\x23\xd6\x12\x8f\x13\x2f\x10\x7b\x88\x43\xc4\x37\
-\x24\x12\x89\x43\x32\x27\xb9\x90\x02\x49\xb1\xa4\x54\xd2\x12\xd2\
-\x46\xd2\x6e\x52\x23\xe9\x2c\xa9\x9b\x34\x48\x1a\x23\x93\xc9\xda\
-\x64\x6b\xb2\x07\x39\x94\x2c\x20\x2b\xc8\x85\xe4\x9d\xe4\xc3\xe4\
-\x33\xe4\x1b\xe4\x21\xf2\x5b\x0a\x9d\x62\x40\x71\xa4\xf8\x53\xe2\
-\x28\x52\xca\x6a\x4a\x19\xe5\x10\xe5\x34\xe5\x06\x65\x98\x32\x41\
-\x55\xa3\x9a\x52\xdd\xa8\xa1\x54\x11\x35\x8f\x5a\x42\xad\xa1\xb6\
-\x52\xaf\x51\x87\xa8\x13\x34\x75\x9a\x39\xcd\x83\x16\x49\x4b\xa5\
-\xad\xa2\x95\xd3\x1a\x68\x17\x68\xf7\x69\xaf\xe8\x74\xba\x11\xdd\
-\x95\x1e\x4e\x97\xd0\x57\xd2\xcb\xe9\x47\xe8\x97\xe8\x03\xf4\x77\
-\x0c\x0d\x86\x15\x83\xc7\x88\x67\x28\x19\x9b\x18\x07\x18\x67\x19\
-\x77\x18\xaf\x98\x4c\xa6\x19\xd3\x8b\x19\xc7\x54\x30\x37\x31\xeb\
-\x98\xe7\x99\x0f\x99\x6f\x55\x58\x2a\xb6\x2a\x7c\x15\x91\xca\x0a\
-\x95\x4a\x95\x26\x95\x1b\x2a\x2f\x54\xa9\xaa\xa6\xaa\xde\xaa\x0b\
-\x55\xf3\x55\xcb\x54\x8f\xa9\x5e\x53\x7d\xae\x46\x55\x33\x53\xe3\
-\xa9\x09\xd4\x96\xab\x55\xaa\x9d\x50\xeb\x53\x1b\x53\x67\xa9\x3b\
-\xa8\x87\xaa\x67\xa8\x6f\x54\x3f\xa4\x7e\x59\xfd\x89\x06\x59\xc3\
-\x4c\xc3\x4f\x43\xa4\x51\xa0\xb1\x5f\xe3\xbc\xc6\x20\x0b\x63\x19\
-\xb3\x78\x2c\x21\x6b\x0d\xab\x86\x75\x81\x35\xc4\x26\xb1\xcd\xd9\
-\x7c\x76\x2a\xbb\x98\xfd\x1d\xbb\x8b\x3d\xaa\xa9\xa1\x39\x43\x33\
-\x4a\x33\x57\xb3\x52\xf3\x94\x66\x3f\x07\xe3\x98\x71\xf8\x9c\x74\
-\x4e\x09\xe7\x28\xa7\x97\xf3\x7e\x8a\xde\x14\xef\x29\xe2\x29\x1b\
-\xa6\x34\x4c\xb9\x31\x65\x5c\x6b\xaa\x96\x97\x96\x58\xab\x48\xab\
-\x51\xab\x47\xeb\xbd\x36\xae\xed\xa7\x9d\xa6\xbd\x45\xbb\x59\xfb\
-\x81\x0e\x41\xc7\x4a\x27\x5c\x27\x47\x67\x8f\xce\x05\x9d\xe7\x53\
-\xd9\x53\xdd\xa7\x0a\xa7\x16\x4d\x3d\x3a\xf5\xae\x2e\xaa\x6b\xa5\
-\x1b\xa1\xbb\x44\x77\xbf\x6e\xa7\xee\x98\x9e\xbe\x5e\x80\x9e\x4c\
-\x6f\xa7\xde\x79\xbd\xe7\xfa\x1c\x7d\x2f\xfd\x54\xfd\x6d\xfa\xa7\
-\xf5\x47\x0c\x58\x06\xb3\x0c\x24\x06\xdb\x0c\xce\x18\x3c\xc5\x35\
-\x71\x6f\x3c\x1d\x2f\xc7\xdb\xf1\x51\x43\x5d\xc3\x40\x43\xa5\x61\
-\x95\x61\x97\xe1\x84\x91\xb9\xd1\x3c\xa3\xd5\x46\x8d\x46\x0f\x8c\
-\x69\xc6\x5c\xe3\x24\xe3\x6d\xc6\x6d\xc6\xa3\x26\x06\x26\x21\x26\
-\x4b\x4d\xea\x4d\xee\x9a\x52\x4d\xb9\xa6\x29\xa6\x3b\x4c\x3b\x4c\
-\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x99\x35\x9b\x3d\x31\xd7\x32\xe7\x9b\
-\xe7\x9b\xd7\x9b\xdf\xb7\x60\x5a\x78\x5a\x2c\xb6\xa8\xb6\xb8\x65\
-\x49\xb2\xe4\x5a\xa6\x59\xee\xb6\xbc\x6e\x85\x5a\x39\x59\xa5\x58\
-\x55\x5a\x5d\xb3\x46\xad\x9d\xad\x25\xd6\xbb\xad\xbb\xa7\x11\xa7\
-\xb9\x4e\x93\x4e\xab\x9e\xd6\x67\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\
-\x19\xb0\xe5\xd8\x06\xdb\xae\xb6\x6d\xb6\x7d\x61\x67\x62\x17\x67\
-\xb7\xc5\xae\xc3\xee\x93\xbd\x93\x7d\xba\x7d\x8d\xfd\x3d\x07\x0d\
-\x87\xd9\x0e\xab\x1d\x5a\x1d\x7e\x73\xb4\x72\x14\x3a\x56\x3a\xde\
-\x9a\xce\x9c\xee\x3f\x7d\xc5\xf4\x96\xe9\x2f\x67\x58\xcf\x10\xcf\
-\xd8\x33\xe3\xb6\x13\xcb\x29\xc4\x69\x9d\x53\x9b\xd3\x47\x67\x17\
-\x67\xb9\x73\x83\xf3\x88\x8b\x89\x4b\x82\xcb\x2e\x97\x3e\x2e\x9b\
-\x1b\xc6\xdd\xc8\xbd\xe4\x4a\x74\xf5\x71\x5d\xe1\x7a\xd2\xf5\x9d\
-\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee\x36\xee\x69\xee\x87\xdc\x9f\
-\xcc\x34\x9f\x29\x9e\x59\x33\x73\xd0\xc3\xc8\x43\xe0\x51\xe5\xd1\
-\x3f\x0b\x9f\x95\x30\x6b\xdf\xac\x7e\x4f\x43\x4f\x81\x67\xb5\xe7\
-\x23\x2f\x63\x2f\x91\x57\xad\xd7\xb0\xb7\xa5\x77\xaa\xf7\x61\xef\
-\x17\x3e\xf6\x3e\x72\x9f\xe3\x3e\xe3\x3c\x37\xde\x32\xde\x59\x5f\
-\xcc\x37\xc0\xb7\xc8\xb7\xcb\x4f\xc3\x6f\x9e\x5f\x85\xdf\x43\x7f\
-\x23\xff\x64\xff\x7a\xff\xd1\x00\xa7\x80\x25\x01\x67\x03\x89\x81\
-\x41\x81\x5b\x02\xfb\xf8\x7a\x7c\x21\xbf\x8e\x3f\x3a\xdb\x65\xf6\
-\xb2\xd9\xed\x41\x8c\xa0\xb9\x41\x15\x41\x8f\x82\xad\x82\xe5\xc1\
-\xad\x21\x68\xc8\xec\x90\xad\x21\xf7\xe7\x98\xce\x91\xce\x69\x0e\
-\x85\x50\x7e\xe8\xd6\xd0\x07\x61\xe6\x61\x8b\xc3\x7e\x0c\x27\x85\
-\x87\x85\x57\x86\x3f\x8e\x70\x88\x58\x1a\xd1\x31\x97\x35\x77\xd1\
-\xdc\x43\x73\xdf\x44\xfa\x44\x96\x44\xde\x9b\x67\x31\x4f\x39\xaf\
-\x2d\x4a\x35\x2a\x3e\xaa\x2e\x6a\x3c\xda\x37\xba\x34\xba\x3f\xc6\
-\x2e\x66\x59\xcc\xd5\x58\x9d\x58\x49\x6c\x4b\x1c\x39\x2e\x2a\xae\
-\x36\x6e\x6c\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3\x7b\x17\
-\x98\x2f\xc8\x5d\x70\x79\xa1\xce\xc2\xf4\x85\xa7\x16\xa9\x2e\x12\
-\x2c\x3a\x96\x40\x4c\x88\x4e\x38\x94\xf0\x41\x10\x2a\xa8\x16\x8c\
-\x25\xf2\x13\x77\x25\x8e\x0a\x79\xc2\x1d\xc2\x67\x22\x2f\xd1\x36\
-\xd1\x88\xd8\x43\x5c\x2a\x1e\x4e\xf2\x48\x2a\x4d\x7a\x92\xec\x91\
-\xbc\x35\x79\x24\xc5\x33\xa5\x2c\xe5\xb9\x84\x27\xa9\x90\xbc\x4c\
-\x0d\x4c\xdd\x9b\x3a\x9e\x16\x9a\x76\x20\x6d\x32\x3d\x3a\xbd\x31\
-\x83\x92\x91\x90\x71\x42\xaa\x21\x4d\x93\xb6\x67\xea\x67\xe6\x66\
-\x76\xcb\xac\x65\x85\xb2\xfe\xc5\x6e\x8b\xb7\x2f\x1e\x95\x07\xc9\
-\x6b\xb3\x90\xac\x05\x59\x2d\x0a\xb6\x42\xa6\xe8\x54\x5a\x28\xd7\
-\x2a\x07\xb2\x67\x65\x57\x66\xbf\xcd\x89\xca\x39\x96\xab\x9e\x2b\
-\xcd\xed\xcc\xb3\xca\xdb\x90\x37\x9c\xef\x9f\xff\xed\x12\xc2\x12\
-\xe1\x92\xb6\xa5\x86\x4b\x57\x2d\x1d\x58\xe6\xbd\xac\x6a\x39\xb2\
-\x3c\x71\x79\xdb\x0a\xe3\x15\x05\x2b\x86\x56\x06\xac\x3c\xb8\x8a\
-\xb6\x2a\x6d\xd5\x4f\xab\xed\x57\x97\xae\x7e\xbd\x26\x7a\x4d\x6b\
-\x81\x5e\xc1\xca\x82\xc1\xb5\x01\x6b\xeb\x0b\x55\x0a\xe5\x85\x7d\
-\xeb\xdc\xd7\xed\x5d\x4f\x58\x2f\x59\xdf\xb5\x61\xfa\x86\x9d\x1b\
-\x3e\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8\x28\xdc\x78\xe5\
-\x1b\x87\x6f\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9\x64\xcf\x66\
-\xd2\x66\xe9\xe6\xde\x2d\x9e\x5b\x0e\x96\xaa\x97\xe6\x97\x0e\x6e\
-\x0d\xd9\xda\xb4\x0d\xdf\x56\xb4\xed\xf5\xf6\x45\xdb\x2f\x97\xcd\
-\x28\xdb\xbb\x83\xb6\x43\xb9\xa3\xbf\x3c\xb8\xbc\x65\xa7\xc9\xce\
-\xcd\x3b\x3f\x54\xa4\x54\xf4\x54\xfa\x54\x36\xee\xd2\xdd\xb5\x61\
-\xd7\xf8\x6e\xd1\xee\x1b\x7b\xbc\xf6\x34\xec\xd5\xdb\x5b\xbc\xf7\
-\xfd\x3e\xc9\xbe\xdb\x55\x01\x55\x4d\xd5\x66\xd5\x65\xfb\x49\xfb\
-\xb3\xf7\x3f\xae\x89\xaa\xe9\xf8\x96\xfb\x6d\x5d\xad\x4e\x6d\x71\
-\xed\xc7\x03\xd2\x03\xfd\x07\x23\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2\
-\x3d\x54\x52\x8f\xd6\x2b\xeb\x47\x0e\xc7\x1f\xbe\xfe\x9d\xef\x77\
-\x2d\x0d\x36\x0d\x55\x8d\x9c\xc6\xe2\x23\x70\x44\x79\xe4\xe9\xf7\
-\x09\xdf\xf7\x1e\x0d\x3a\xda\x76\x8c\x7b\xac\xe1\x07\xd3\x1f\x76\
-\x1d\x67\x1d\x2f\x6a\x42\x9a\xf2\x9a\x46\x9b\x53\x9a\xfb\x5b\x62\
-\x5b\xba\x4f\xcc\x3e\xd1\xd6\xea\xde\x7a\xfc\x47\xdb\x1f\x0f\x9c\
-\x34\x3c\x59\x79\x4a\xf3\x54\xc9\x69\xda\xe9\x82\xd3\x93\x67\xf2\
-\xcf\x8c\x9d\x95\x9d\x7d\x7e\x2e\xf9\xdc\x60\xdb\xa2\xb6\x7b\xe7\
-\x63\xce\xdf\x6a\x0f\x6f\xef\xba\x10\x74\xe1\xd2\x45\xff\x8b\xe7\
-\x3b\xbc\x3b\xce\x5c\xf2\xb8\x74\xf2\xb2\xdb\xe5\x13\x57\xb8\x57\
-\x9a\xaf\x3a\x5f\x6d\xea\x74\xea\x3c\xfe\x93\xd3\x4f\xc7\xbb\x9c\
-\xbb\x9a\xae\xb9\x5c\x6b\xb9\xee\x7a\xbd\xb5\x7b\x66\xf7\xe9\x1b\
-\x9e\x37\xce\xdd\xf4\xbd\x79\xf1\x16\xff\xd6\xd5\x9e\x39\x3d\xdd\
-\xbd\xf3\x7a\x6f\xf7\xc5\xf7\xf5\xdf\x16\xdd\x7e\x72\x27\xfd\xce\
-\xcb\xbb\xd9\x77\x27\xee\xad\xbc\x4f\xbc\x5f\xf4\x40\xed\x41\xd9\
-\x43\xdd\x87\xd5\x3f\x5b\xfe\xdc\xd8\xef\xdc\x7f\x6a\xc0\x77\xa0\
-\xf3\xd1\xdc\x47\xf7\x06\x85\x83\xcf\xfe\x91\xf5\x8f\x0f\x43\x05\
-\x8f\x99\x8f\xcb\x86\x0d\x86\xeb\x9e\x38\x3e\x39\x39\xe2\x3f\x72\
-\xfd\xe9\xfc\xa7\x43\xcf\x64\xcf\x26\x9e\x17\xfe\xa2\xfe\xcb\xae\
-\x17\x16\x2f\x7e\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\
-\x93\xbf\x6d\x7c\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\
-\xbe\xc9\x78\x33\x31\x5e\xf4\x56\xfb\xed\xc1\x77\xdc\x77\x1d\xef\
-\xa3\xdf\x0f\x4f\xe4\x7c\x20\x7f\x28\xff\x68\xf9\xb1\xf5\x53\xd0\
-\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfc\x63\x33\x2d\xdb\
-\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x7a\x25\x00\x00\x80\x83\
-\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00\x75\x30\x00\x00\xea\x60\
-\x00\x00\x3a\x98\x00\x00\x17\x6f\x92\x5f\xc5\x46\x00\x00\x0a\x95\
-\x49\x44\x41\x54\x78\xda\x62\xfa\xff\xff\x3f\x03\x3a\x66\x62\x60\
-\x60\x60\x28\xdf\xa1\xf5\xbf\x76\xb7\xc9\x7f\x06\x28\x60\x62\x60\
-\x60\x60\xd0\x95\x70\x67\xf8\xf5\xf7\x1b\x03\x8a\xa0\xc9\xca\x45\
-\x0c\x33\xba\xb2\x19\x0a\xe6\x14\xfc\x87\x0b\x6a\xb4\xbf\x65\xfc\
-\xb8\x2f\x9b\xf1\xf5\xc7\xd7\x0c\x0c\x0c\x0c\x0c\x00\x00\x00\x00\
-\xff\xff\x62\xc2\xb0\xa4\x74\xbb\xda\xff\x3f\xff\x7e\xfe\x9f\x7c\
-\x3c\x0c\xa2\x8d\x91\x91\xa5\xe8\xe4\xe3\xd5\x0c\x35\xd5\xf6\x5f\
-\x19\x18\x18\x18\x98\x92\x0e\xbe\xec\xb3\x89\xfc\xc3\xc8\xc0\xc0\
-\xc0\x5d\x30\xa7\xe0\x3f\x93\x46\xfb\x5b\xc6\xff\xc7\x12\x18\x60\
-\x06\x03\x00\x00\x00\xff\xff\x62\xfa\xff\xff\x3f\x43\xe9\x76\x8d\
-\xa4\xb6\x03\x4e\xff\x0b\xb7\x28\xfe\x5f\x7d\xb9\xe6\xff\xaf\xbf\
-\x3f\x4e\x60\xf8\x86\x91\x81\x71\x92\xbe\xa4\x17\x83\xba\xa8\x2d\
-\xc3\xf1\x47\xcb\x18\x78\x6d\x96\xf8\x30\x20\x01\x26\x06\x06\x06\
-\x86\xc4\x83\x2f\x2f\xef\xbb\x37\x7b\xc1\xed\x37\xc7\x18\x3e\xbf\
-\x97\x64\x64\xe7\xf8\xf1\x1a\x43\x91\x46\xfb\x5b\xcb\x1e\x8f\x1b\
-\x89\x3d\x5e\xb7\x19\x67\x45\x1f\x61\xf8\xb8\x2f\x9b\xf1\xd5\xeb\
-\xd7\xff\x5f\xbd\x7e\xfd\x9f\x81\x81\x81\x01\x00\x00\x00\xff\xff\
-\x62\xc2\x16\xa2\x28\xee\x29\xdf\xa1\xc5\xb0\xfc\x62\xe9\xff\xf2\
-\x1d\x5a\xff\x1b\xf6\x5a\xfc\xff\xfe\xfb\xd3\xff\x9f\x7f\xbe\x20\
-\xac\x61\x61\x62\x67\x38\xff\x7c\x33\x43\xb0\x4e\x23\xc3\x8b\xcf\
-\xb7\x19\xe6\x9d\x4d\x67\xa8\xdc\xa9\x87\x50\xf0\xe7\xdf\x0f\x06\
-\x06\x06\x46\x06\x3e\x76\x71\x06\x7e\x0e\x71\x86\x47\x9f\x8f\xa6\
-\xcd\xed\x2d\xe6\x86\x2b\xf8\xc5\xcc\xc4\xf0\xe7\xef\x4f\x06\x45\
-\x41\x13\x86\x1f\x7f\x3e\x33\x3c\xb8\xa9\x3b\x9b\x81\x81\x01\x6e\
-\x07\x53\xfa\xbe\x17\x5c\x8e\x77\x7e\x31\x7e\xfb\xfd\x81\x81\x83\
-\x85\xf7\xda\xb6\x35\x3e\x69\xe8\x5e\xf5\x51\x7d\xf1\xfd\xff\x97\
-\x26\x05\x89\x19\x5d\xd9\x4a\x4c\x4c\xff\x66\xfa\xfa\x1c\x67\x28\
-\x9e\x57\xfc\x3f\xa6\x2f\xe6\x3f\x93\x46\xfb\xdb\x55\x1a\xed\x6f\
-\x19\x65\xdb\x7f\xbd\xfc\xb8\x2f\x9b\xf3\xe3\xbe\x6c\x46\x6e\x0e\
-\x1e\x86\x72\xdf\x0a\x06\x6e\x0e\x1e\x48\x60\xa1\x83\x2f\xdf\x3f\
-\x33\x14\x2e\x2a\x60\xf8\xf2\xfd\x33\x03\x80\x91\xfa\x07\x69\x23\
-\x0c\xc3\x00\xfe\x7c\x26\x27\x26\x1a\x8d\x29\x96\x46\x23\x76\xd0\
-\x34\x69\xb1\x81\x62\x41\x4a\x41\x17\x0b\x22\x38\xa4\x83\x8b\x9b\
-\xba\x18\x23\x84\x84\x6b\x91\x76\x28\x1a\x52\x8a\x8a\xd2\x16\x9d\
-\x3a\x08\x59\x8a\x8a\x94\xe8\x21\x6a\x88\x1d\x1c\x1c\x34\x5a\xfc\
-\x03\x1a\x44\x10\xce\x82\xf1\x3c\x8f\x6b\x4c\x72\x77\x9f\x83\x38\
-\x08\x1e\xf4\x9d\xde\xe9\xc7\x33\x3c\xef\x5b\x40\x29\x05\xcb\xb9\
-\xf1\x69\xe5\x15\xfc\xbf\x2a\x4b\x58\xce\xed\x65\x39\xf7\x20\xcb\
-\x3d\xfd\x3c\xb0\xe8\xe9\x65\x39\x57\x7d\xf7\xac\x85\x50\x4a\xa1\
-\x69\x0a\x74\xab\x0a\x00\x72\x4e\xd0\x4c\x4c\x99\x04\x90\x19\x9b\
-\xc9\xf1\x41\xd5\x72\xef\xc2\x6f\x92\xdf\x0b\x0d\xe6\xed\x62\xa6\
-\x5c\x0b\x2e\xd4\xd2\x10\xf7\xe4\xbe\x50\x37\x08\xa5\x2a\x18\x43\
-\x11\x6d\xac\xee\x40\x5e\xfd\x87\x17\x95\xed\xa8\xb6\x3e\x47\x6c\
-\xff\x0b\x32\x8a\x04\x42\x88\x8c\x02\x91\x94\xca\xdd\xfa\x48\x83\
-\xe3\x2d\xdc\x15\xcd\x27\x7f\x4e\x17\x91\xd7\x72\x68\xa9\xeb\xc3\
-\xc1\xd9\x1a\xa4\xec\x19\x6a\x6d\x8d\xb0\x99\xab\x9e\x4d\x86\x07\
-\xc7\x47\x27\x2c\x09\x5d\xe4\xe5\xd4\x24\x2c\xbf\x7f\xd6\x48\xca\
-\xc5\x47\x33\x63\x45\x26\x7f\x89\xd2\xa2\x0a\x24\xf9\x18\x8e\xc5\
-\xf5\xa5\x89\xb1\xf6\x63\x23\xa3\xf6\x03\x68\xd2\x45\xb2\x46\xd2\
-\xe6\xe4\x33\xb4\x2b\xf1\xf7\x75\x5b\xf2\x9c\xec\x1c\x4d\x93\xf2\
-\xe2\x07\x64\x39\xd6\x42\xbe\x0e\x05\x5a\x65\xa9\xe4\xf6\xb4\xb7\
-\x74\x11\x00\xf3\x00\x18\x00\x81\x87\x62\x0e\x8f\xa6\xfc\x78\x3f\
-\xd0\x89\xc3\x5d\xa7\xd7\x60\x54\x52\x00\x54\x00\xdf\x7a\x3a\x8f\
-\x3c\xc3\x73\x23\xf4\x5c\x10\xe8\xf0\xdc\x08\x0d\xfd\x08\xdd\xf9\
-\x04\x70\x45\xd2\x8a\x2b\x92\xde\x73\x45\xd2\x70\x0c\xc9\x50\x57\
-\xbb\x20\xc6\x7d\xb3\x62\xdc\xf7\x58\x8c\xfb\x8c\x62\xdc\xe7\xe7\
-\x05\x1e\x9b\xa9\x0d\x64\xaf\xae\xb0\x99\xda\x00\x2f\xf0\x77\x92\
-\xfc\xd7\x44\x83\x51\x12\x0d\x46\x89\xdd\x6e\x27\xb7\x3b\x00\x5c\
-\x53\x52\x6e\x21\x4d\xc6\x61\x18\xff\xfd\xbf\xa9\x13\xc3\x9a\xc7\
-\x0d\x52\xd3\x28\x0f\x95\x9a\x74\x20\xb5\x2e\x23\xf2\x00\x51\x61\
-\x20\xb6\x8a\xea\x42\xb4\x5a\x61\x59\x41\x65\x18\x49\x91\x22\x11\
-\x41\x60\x41\x9a\x90\x84\xbb\x30\x48\x0d\x59\x84\xa6\x61\x05\x91\
-\x59\xd0\x81\x3c\xa4\x96\xb9\x60\x6d\x6e\x73\xf3\xfb\xfe\xdd\x78\
-\x11\xc1\x2c\x2f\x9e\xbb\x87\xdf\xc5\xfb\x3e\xcf\xf3\xcf\x56\xfe\
-\x8f\x14\x80\x53\xed\xa9\x58\x07\xab\x38\xd9\x9e\x92\x5e\xd9\xb1\
-\xea\x44\x65\x47\xda\xd5\xae\x4f\x37\xcf\x9f\xea\x48\x2b\xac\x78\
-\xb4\x32\xea\x5a\x77\x1e\x52\x6a\x48\xa9\x06\xce\x89\x10\x0a\x9f\
-\x7f\xf6\xcb\x9c\x84\xe2\x37\x3e\xd5\x5d\x0b\xe2\xa4\x2a\x67\x2f\
-\x0a\x44\x5b\x79\x76\xcb\xd4\xd1\x9c\x56\xe9\xd7\xbc\x46\x9f\xea\
-\x61\xbe\xef\x64\x4d\x4d\x0f\xd1\x33\xdc\x44\x51\x7a\x0d\x7e\xd5\
-\x4b\x86\x69\x1b\x85\xa9\xa7\xa9\xed\x29\xe4\x4c\xe7\x1a\xce\x74\
-\x66\x58\xcf\x3e\x5e\x1b\x18\x12\xa4\x84\x84\xfa\x55\x0f\x41\x4a\
-\x08\xd6\xc1\x0b\xac\x36\x6e\xe5\xd9\xf0\x3d\x5a\x07\x2f\xb0\xcc\
-\x90\xc9\x8a\xa8\x6c\xc2\x82\x0d\x9f\x03\x1d\x5c\x01\xf0\xa9\x1e\
-\xd7\xf2\xc8\x8d\x24\x18\x32\x99\x99\x75\x73\x70\xfd\x2d\x04\x0a\
-\xa6\xf0\x95\x8c\xfd\x7a\xc7\x07\x7b\x77\x6e\xd8\x6c\x8e\x79\xb1\
-\x7b\x7f\x60\x88\x22\x14\xe7\xa8\x63\x80\x8f\x53\xbd\x24\x47\x6f\
-\x46\x93\x2a\x4f\xbf\xdc\xc6\x3e\x3d\x82\x40\x61\x72\x74\x45\xef\
-\xe5\x2b\x69\x27\xea\x6e\x46\x04\x86\xac\x5b\xba\xc3\x9e\x12\xbd\
-\x19\x21\x74\xa4\xc4\x6c\xa1\xe1\xe5\x21\x16\x85\x44\x90\x9d\x50\
-\x4c\x6c\x78\xd2\x74\xff\x93\x6d\x28\x8a\x56\x0b\xc4\x06\x84\xf4\
-\x7d\x6b\x73\x0e\x4e\xda\xd8\x10\xb7\x93\xde\x91\x66\xbc\xfe\x5f\
-\x98\xc2\x93\x79\x3e\x7a\x9f\xe9\xd9\xe1\xa6\xb1\xaf\x86\xc4\x39\
-\xff\xee\x80\x90\x63\x9d\xe3\x10\xac\x17\xaf\xc7\x1f\x92\x97\x52\
-\x81\x39\xeb\x06\x5f\x1d\x6f\x01\x70\xbb\xc3\x4a\x15\x9d\x56\x35\
-\xe7\x4f\x08\x08\xf1\x06\x2b\x47\xca\x1f\x4f\x44\x6a\xba\xa0\xd0\
-\xd6\x81\x73\x38\x7d\x3f\x10\x42\x41\x1f\x3a\xb3\xf1\x4e\xfd\x61\
-\x74\x3a\x75\xdf\x9c\xff\xfb\x7c\x39\xd9\x35\x13\x24\xec\xa5\x5d\
-\x13\x7a\xe3\xf8\xa4\x88\x5f\x92\x21\x46\xbe\x18\xc5\xf5\x4b\x96\
-\x17\x9a\xa6\x34\xff\xe1\x6f\x9b\x0f\x12\x0a\xe0\xd7\x09\xc7\xf6\
-\x8f\xb2\xb7\xde\xbc\x9e\xf6\x07\x45\x77\xa5\xa6\x48\xa0\x18\xa0\
-\xb0\xa0\x8f\xbd\x7b\xde\x7f\xb2\x34\x58\xa4\xa5\xc1\x22\xcb\x6f\
-\x95\xcb\x92\xba\x12\xf9\x27\x64\x13\x90\x04\xc4\x80\xcc\x79\x35\
-\x93\x01\xc8\x03\x80\x15\xf0\x01\x93\x26\x83\x89\x44\x63\x12\x71\
-\xd1\xf1\xc4\x45\xc7\x93\x68\x4c\xc2\x64\x30\xf1\xf7\x9e\x0c\xa5\
-\xd6\xd8\xa7\x52\x6b\xec\x34\xb5\xdc\xc1\x61\x2b\xd3\x1c\xb6\xb2\
-\x5d\x0e\x5b\x99\xde\x61\x2b\x33\x3a\xbd\x2e\x0a\x32\xf3\x31\xe7\
-\x9a\x31\xe7\x9a\x29\xc8\xcc\xc7\xe9\x75\x2d\x6c\x4f\x5c\x1e\x27\
-\xd5\xd6\x6a\x8e\x37\x5a\x38\xde\x68\xa1\xda\x5a\x8d\xcb\xe3\x5c\
-\xf8\x28\xcd\xdb\x9d\x85\xac\xda\xdf\x02\xf8\xcd\x7a\xb9\xc6\xc4\
-\x51\x46\x61\xf8\x9d\xd9\x9d\xd9\x4b\x61\xcb\xdd\x52\x96\x22\x97\
-\x05\xc1\x8a\xa1\x2d\x6c\x4d\x05\x0b\x05\x0b\x06\x94\x04\x41\xdb\
-\xa4\xda\xc4\x6a\xdb\xb0\x82\x0d\x54\x2c\x44\x29\xb1\x11\xa5\xd6\
-\x46\x4b\x7f\x78\x69\x09\x12\xa2\x41\xc4\xc6\x00\xe5\xba\xdc\x2c\
-\xb7\x02\xb5\x85\x0a\x85\x42\x29\x72\xdd\x05\xba\xbb\xb0\x37\x76\
-\xd9\xf1\x87\x8c\x11\x52\x4d\x16\xf8\x26\xe7\xc7\xcc\x9c\xbc\x79\
-\xe6\x9b\x2f\xe7\xbc\x67\x53\x2a\xdb\xa6\x55\xc7\x15\xe7\x88\xf7\
-\xaf\x3f\x85\xec\x3a\x29\xaa\x87\x2e\xed\x3d\xd7\x10\x7a\x29\xad\
-\xd2\xbb\x39\xbd\x52\x32\x92\x51\x15\xa0\xce\xa8\x0a\x30\x65\x54\
-\x05\x58\x4e\x5f\xf7\xb3\xd4\x0c\x7d\x65\xc8\xae\x93\xce\xa5\x57\
-\x4a\x06\x53\xcb\x77\x34\x9d\xaa\xf0\x2a\xc8\xa8\xf2\x4f\x2b\xba\
-\x95\xfa\x3c\x7b\xe4\x36\xb4\xad\x04\x41\xda\x18\xcc\x0b\xc3\x35\
-\x43\x5f\xb6\xcd\xe9\xfe\x94\xd9\x0b\xc4\xa1\xd1\xbe\xa7\x3c\x3d\
-\xec\x82\x44\x4b\xcb\x3a\x2e\x00\xc2\xc2\x98\x09\x8a\xc3\xe7\x05\
-\xba\x46\x3b\x7c\x18\xd1\x22\xc9\x8b\x19\x08\x3b\x14\xf8\xd9\x51\
-\x7f\x97\x88\xcf\x67\x16\xef\xb7\x7c\xda\x14\xa5\xcf\x6b\x8e\xce\
-\xcd\x6d\x8a\x44\x6e\x53\xa4\xf5\x20\xcc\xdf\x57\x10\x00\x2f\x2e\
-\x49\x83\xe6\x08\xb1\x60\x54\xa2\xe2\xde\x79\x58\x18\x13\x12\x9e\
-\xce\x81\xc6\x30\x83\xd0\x27\x8f\x22\xdc\xeb\x1d\xe8\x97\xd4\xc8\
-\xaa\x09\x42\x66\x75\x20\x4a\xfa\xb2\x70\x67\xba\x0a\x93\x9a\x7e\
-\x28\xb5\x23\x98\xd5\x8e\xc6\xa8\xf4\x93\x84\x4a\x3f\x69\x3d\x48\
-\x88\xf8\x55\x48\xc5\x89\xda\x60\x71\x02\x7c\x1c\xf7\x82\x22\x79\
-\x30\x2d\x1b\x40\x73\x04\x18\x9a\x6b\xc3\xd2\xb2\x01\xf9\xaf\x4c\
-\xc3\xdb\x21\x04\x27\xaf\x39\x61\x46\x3b\x8c\x83\x92\x14\x44\x78\
-\x1f\x87\x54\x9c\x88\x20\xd7\x58\x04\xba\x46\xab\x82\xc5\x09\x65\
-\x21\x1e\xb1\x6f\x79\x39\xfb\x33\x3e\x2e\x3b\xad\x07\xb9\x39\xfe\
-\x33\x3a\xc7\x4b\x75\x9d\xe3\xa5\xa6\x7e\x45\x23\x8c\xcb\x3a\x48\
-\xdd\x93\xb0\xf3\x89\x28\x18\xcd\x5a\xf0\x29\x1b\xcc\xeb\xc6\xa1\
-\xd4\x8e\x62\xb7\x38\x1e\x63\xaa\xdb\x68\x7a\x70\x15\xcd\x0f\x0a\
-\xd0\x35\xf1\x0b\xee\x2a\x6a\x0a\xef\xcd\xca\xed\x2f\x17\xcf\x25\
-\x1c\x93\x79\x76\xa7\xa6\x44\x22\x25\x65\xbf\xf5\x20\x04\x41\x82\
-\x20\xc8\x79\x30\x8c\x86\x7d\xd6\x35\x51\x86\xa1\xd9\x1b\x38\x29\
-\x2d\x46\xb0\x5b\x02\xc6\x54\x77\x70\xed\x8f\x8f\x31\xa8\xfc\x0d\
-\x24\x41\x42\x40\x6d\x85\x9b\x28\x00\xbe\x4e\xfb\xb0\x6b\xc7\x81\
-\x82\xdb\x8d\x47\xd0\xd1\xbc\x27\x9e\x01\x18\x1e\xcf\x22\xa3\x69\
-\x66\xbd\x35\x80\x51\x72\x48\x6a\xc2\xd5\xd6\x0f\x52\xf7\x24\xf8\
-\x39\x85\x61\x5e\x3f\x8e\xd6\xb1\x62\x50\x1c\x3e\x6a\xef\xe7\x43\
-\xc4\x77\x46\x9c\xff\x07\xf0\x77\x0e\x87\xce\xa4\xc2\xe8\xa3\x1e\
-\x0c\xce\x37\xf4\x35\xf6\xb6\xb5\x74\x74\x0b\xc1\xe7\x21\x73\x45\
-\xec\x23\x00\xe1\x56\x83\x78\xce\xe8\xe0\xae\xd4\x33\x16\x66\xf9\
-\x59\x85\xfe\xe1\xb1\x9b\xe3\xa5\xe8\x9d\xa9\x46\x94\x44\x06\x7b\
-\x81\x1b\x14\xda\x11\xbc\xec\x9f\x89\xc0\x6d\x31\x28\xe9\xcd\xc4\
-\xf0\x7c\x27\xb8\x24\x0d\x8a\xc3\x07\x8f\x66\xde\xeb\xed\xda\x6d\
-\xd1\x2e\xda\xbe\x4e\x90\x96\xe0\x15\x49\x67\x00\xfb\xad\x06\x79\
-\xa1\x5f\xcd\x39\x70\x57\xed\x78\xa2\x6e\x5a\x14\x36\xa0\xb9\x62\
-\x26\x49\x82\xa6\x44\x45\xf2\xe1\xaf\x61\x30\x2d\xc0\x65\x8b\x17\
-\x4c\xcb\x7a\xdc\x78\x58\x04\x21\x65\x07\x80\x01\x80\x59\x1e\xdf\
-\xf8\xcc\xef\x1d\xbb\xea\xbb\x5b\xf7\x38\xf0\x78\xc6\x0b\x6b\xf4\
-\x39\xeb\xf9\x35\x3b\x00\x64\x1b\x29\x42\x2d\x99\xd6\x37\xca\x6a\
-\xa7\x6c\x43\x07\xd4\x6f\x50\xb4\x2d\xd9\xae\x28\x7f\xb1\x7d\xa2\
-\xf4\x72\xe0\xb6\xe8\x1f\x9c\x84\x1e\xf9\x24\x57\x97\xc4\x13\x18\
-\x6d\xe6\x94\x8e\xce\xdf\x7d\x71\xbc\xaf\xbe\x22\xd2\x9e\xa2\x4d\
-\x1d\x00\xb6\xff\x4b\x4f\x0d\xa0\x75\x3d\x20\x87\x01\x24\xb1\x1b\
-\x64\xe4\x12\x1a\xdf\x69\xfd\xad\x13\x75\xd3\xfb\xd2\xeb\x54\xb5\
-\xdb\x8b\x73\x64\x83\x4d\x85\x87\x7f\x2d\x8b\x7f\xf7\xe2\xd9\xd3\
-\x3f\x9d\x3f\x73\x46\x58\x72\xe5\x50\xa4\x76\x71\x4b\x03\x97\x6b\
-\x9e\x07\xe0\xc3\x0a\xc5\xc5\xb6\x21\x2e\xb6\x6d\xeb\x91\xd7\xfa\
-\x2b\xd8\x86\x9d\x76\x35\x8d\x59\xdb\xbc\xd9\x06\xbe\x16\xe4\x13\
-\x00\x2f\x01\x68\x07\x60\x00\x60\x06\xe0\x6e\xe6\x10\x59\x66\x9a\
-\x8a\x20\x35\x23\xb8\xf8\x4d\x3d\x7a\x7a\xed\xc1\xa3\xf1\x2d\xcd\
-\x37\x2a\x08\x92\xa9\x7d\xdc\x39\x10\x09\x45\x10\x09\x45\xab\x9a\
-\x7e\xf2\x41\xd9\x2a\x03\xc0\xe6\x3c\x0e\x84\x01\xd0\x03\xe0\x39\
-\x00\x82\x95\x69\xc5\x09\x40\x0c\x00\x39\x00\xe8\x2d\x14\x9b\xfb\
-\x36\x00\x02\x80\x18\x40\x22\x80\xb3\x2b\x1f\xf2\x26\x00\x27\x21\
-\x2d\x84\x90\x16\xae\x82\xb3\x13\xda\xad\xba\x5f\x9b\xf3\x0f\xc8\
-\x8a\x2b\xf9\xcf\x10\x9f\xd3\xa2\xf0\xc7\x02\x76\xf2\x61\x63\x42\
-\x2d\x4f\x2e\x55\xcb\x93\x73\xd4\xf2\xe4\x2c\xb5\x3c\xf9\x7b\xb5\
-\x3c\x79\x6e\xea\xd1\x14\xd8\x69\x88\x0d\x76\x2a\x62\x83\xcd\xb1\
-\xda\x4b\x6c\x74\x29\x34\x8a\xcd\x31\x35\x1b\x5d\x79\xe5\x79\xff\
-\xfb\xfe\xaf\x01\x00\x3d\xb9\x4e\x56\xa9\x10\xde\xd1\x00\x00\x00\
-\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x15\xd7\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x22\x00\x00\x00\x23\x08\x06\x00\x00\x01\x86\x1c\xe8\xf1\
-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x2e\x23\x00\x00\x2e\x23\
-\x01\x78\xa5\x3f\x76\x00\x00\x0a\x4f\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\x78\xda\x9d\x53\x67\x54\x53\xe9\x16\x3d\xf7\xde\
-\xf4\x42\x4b\x88\x80\x94\x4b\x6f\x52\x15\x08\x20\x52\x42\x8b\x80\
-\x14\x91\x26\x2a\x21\x09\x10\x4a\x88\x21\xa1\xd9\x15\x51\xc1\x11\
-\x45\x45\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15\x51\x2c\x0c\
-\x8a\x0a\xd8\x07\xe4\x21\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1\x7b\
-\xa3\x6b\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7\x3e\xe7\xac\xf3\x9d\xb3\
-\xcf\x07\xc0\x08\x0c\x96\x48\x33\x51\x35\x80\x0c\xa9\x42\x1e\x11\
-\xe0\x83\xc7\xc4\xc6\xe1\xe4\x2e\x40\x81\x0a\x24\x70\x00\x10\x08\
-\xb3\x64\x21\x73\xfd\x23\x01\x00\xf8\x7e\x3c\x3c\x2b\x22\xc0\x07\
-\xbe\x00\x01\x78\xd3\x0b\x08\x00\xc0\x4d\x9b\xc0\x30\x1c\x87\xff\
-\x0f\xea\x42\x99\x5c\x01\x80\x84\x01\xc0\x74\x91\x38\x4b\x08\x80\
-\x14\x00\x40\x7a\x8e\x42\xa6\x00\x40\x46\x01\x80\x9d\x98\x26\x53\
-\x00\xa0\x04\x00\x60\xcb\x63\x62\xe3\x00\x50\x2d\x00\x60\x27\x7f\
-\xe6\xd3\x00\x80\x9d\xf8\x99\x7b\x01\x00\x5b\x94\x21\x15\x01\xa0\
-\x91\x00\x20\x13\x65\x88\x44\x00\x68\x3b\x00\xac\xcf\x56\x8a\x45\
-\x00\x58\x30\x00\x14\x66\x4b\xc4\x39\x00\xd8\x2d\x00\x30\x49\x57\
-\x66\x48\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x00\x30\
-\x51\x88\x85\x29\x00\x04\x7b\x00\x60\xc8\x23\x23\x78\x00\x84\x99\
-\x00\x14\x46\xf2\x57\x3c\xf1\x2b\xae\x10\xe7\x2a\x00\x00\x78\x99\
-\xb2\x3c\xb9\x24\x39\x45\x81\x5b\x08\x2d\x71\x07\x57\x57\x2e\x1e\
-\x28\xce\x49\x17\x2b\x14\x36\x61\x02\x61\x9a\x40\x2e\xc2\x79\x99\
-\x19\x32\x81\x34\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\
-\xf3\xfd\x78\xce\x0e\xae\xce\xce\x36\x8e\xb6\x0e\x5f\x2d\xea\xbf\
-\x06\xff\x22\x62\x62\xe3\xfe\xe5\xcf\xab\x70\x40\x00\x00\xe1\x74\
-\x7e\xd1\xfe\x2c\x2f\xb3\x1a\x80\x3b\x06\x80\x6d\xfe\xa2\x25\xee\
-\x04\x68\x5e\x0b\xa0\x75\xf7\x8b\x66\xb2\x0f\x40\xb5\x00\xa0\xe9\
-\xda\x57\xf3\x70\xf8\x7e\x3c\x3c\x45\xa1\x90\xb9\xd9\xd9\xe5\xe4\
-\xe4\xd8\x4a\xc4\x42\x5b\x61\xca\x57\x7d\xfe\x67\xc2\x5f\xc0\x57\
-\xfd\x6c\xf9\x7e\x3c\xfc\xf7\xf5\xe0\xbe\xe2\x24\x81\x32\x5d\x81\
-\x47\x04\xf8\xe0\xc2\xcc\xf4\x4c\xa5\x1c\xcf\x92\x09\x84\x62\xdc\
-\xe6\x8f\x47\xfc\xb7\x0b\xff\xfc\x1d\xd3\x22\xc4\x49\x62\xb9\x58\
-\x2a\x14\xe3\x51\x12\x71\x8e\x44\x9a\x8c\xf3\x32\xa5\x22\x89\x42\
-\x92\x29\xc5\x25\xd2\xff\x64\xe2\xdf\x2c\xfb\x03\x3e\xdf\x35\x00\
-\xb0\x6a\x3e\x01\x7b\x91\x2d\xa8\x5d\x63\x03\xf6\x4b\x27\x10\x58\
-\x74\xc0\xe2\xf7\x00\x00\xf2\xbb\x6f\xc1\xd4\x28\x08\x03\x80\x68\
-\x83\xe1\xcf\x77\xff\xef\x3f\xfd\x47\xa0\x25\x00\x80\x66\x49\x92\
-\x71\x00\x00\x5e\x44\x24\x2e\x54\xca\xb3\x3f\xc7\x08\x00\x00\x44\
-\xa0\x81\x2a\xb0\x41\x1b\xf4\xc1\x18\x2c\xc0\x06\x1c\xc1\x05\xdc\
-\xc1\x0b\xfc\x60\x36\x84\x42\x24\xc4\xc2\x42\x10\x42\x0a\x64\x80\
-\x1c\x72\x60\x29\xac\x82\x42\x28\x86\xcd\xb0\x1d\x2a\x60\x2f\xd4\
-\x40\x1d\x34\xc0\x51\x68\x86\x93\x70\x0e\x2e\xc2\x55\xb8\x0e\x3d\
-\x70\x0f\xfa\x61\x08\x9e\xc1\x28\xbc\x81\x09\x04\x41\xc8\x08\x13\
-\x61\x21\xda\x88\x01\x62\x8a\x58\x23\x8e\x08\x17\x99\x85\xf8\x21\
-\xc1\x48\x04\x12\x8b\x24\x20\xc9\x88\x14\x51\x22\x4b\x91\x35\x48\
-\x31\x52\x8a\x54\x20\x55\x48\x1d\xf2\x3d\x72\x02\x39\x87\x5c\x46\
-\xba\x91\x3b\xc8\x00\x32\x82\xfc\x86\xbc\x47\x31\x94\x81\xb2\x51\
-\x3d\xd4\x0c\xb5\x43\xb9\xa8\x37\x1a\x84\x46\xa2\x0b\xd0\x64\x74\
-\x31\x9a\x8f\x16\xa0\x9b\xd0\x72\xb4\x1a\x3d\x8c\x36\xa1\xe7\xd0\
-\xab\x68\x0f\xda\x8f\x3e\x43\xc7\x30\xc0\xe8\x18\x07\x33\xc4\x6c\
-\x30\x2e\xc6\xc3\x42\xb1\x38\x2c\x09\x93\x63\xcb\xb1\x22\xac\x0c\
-\xab\xc6\x1a\xb0\x56\xac\x03\xbb\x89\xf5\x63\xcf\xb1\x77\x04\x12\
-\x81\x45\xc0\x09\x36\x04\x77\x42\x20\x61\x1e\x41\x48\x58\x4c\x58\
-\x4e\xd8\x48\xa8\x20\x1c\x24\x34\x11\xda\x09\x37\x09\x03\x84\x51\
-\xc2\x27\x22\x93\xa8\x4b\xb4\x26\xba\x11\xf9\xc4\x18\x62\x32\x31\
-\x87\x58\x48\x2c\x23\xd6\x12\x8f\x13\x2f\x10\x7b\x88\x43\xc4\x37\
-\x24\x12\x89\x43\x32\x27\xb9\x90\x02\x49\xb1\xa4\x54\xd2\x12\xd2\
-\x46\xd2\x6e\x52\x23\xe9\x2c\xa9\x9b\x34\x48\x1a\x23\x93\xc9\xda\
-\x64\x6b\xb2\x07\x39\x94\x2c\x20\x2b\xc8\x85\xe4\x9d\xe4\xc3\xe4\
-\x33\xe4\x1b\xe4\x21\xf2\x5b\x0a\x9d\x62\x40\x71\xa4\xf8\x53\xe2\
-\x28\x52\xca\x6a\x4a\x19\xe5\x10\xe5\x34\xe5\x06\x65\x98\x32\x41\
-\x55\xa3\x9a\x52\xdd\xa8\xa1\x54\x11\x35\x8f\x5a\x42\xad\xa1\xb6\
-\x52\xaf\x51\x87\xa8\x13\x34\x75\x9a\x39\xcd\x83\x16\x49\x4b\xa5\
-\xad\xa2\x95\xd3\x1a\x68\x17\x68\xf7\x69\xaf\xe8\x74\xba\x11\xdd\
-\x95\x1e\x4e\x97\xd0\x57\xd2\xcb\xe9\x47\xe8\x97\xe8\x03\xf4\x77\
-\x0c\x0d\x86\x15\x83\xc7\x88\x67\x28\x19\x9b\x18\x07\x18\x67\x19\
-\x77\x18\xaf\x98\x4c\xa6\x19\xd3\x8b\x19\xc7\x54\x30\x37\x31\xeb\
-\x98\xe7\x99\x0f\x99\x6f\x55\x58\x2a\xb6\x2a\x7c\x15\x91\xca\x0a\
-\x95\x4a\x95\x26\x95\x1b\x2a\x2f\x54\xa9\xaa\xa6\xaa\xde\xaa\x0b\
-\x55\xf3\x55\xcb\x54\x8f\xa9\x5e\x53\x7d\xae\x46\x55\x33\x53\xe3\
-\xa9\x09\xd4\x96\xab\x55\xaa\x9d\x50\xeb\x53\x1b\x53\x67\xa9\x3b\
-\xa8\x87\xaa\x67\xa8\x6f\x54\x3f\xa4\x7e\x59\xfd\x89\x06\x59\xc3\
-\x4c\xc3\x4f\x43\xa4\x51\xa0\xb1\x5f\xe3\xbc\xc6\x20\x0b\x63\x19\
-\xb3\x78\x2c\x21\x6b\x0d\xab\x86\x75\x81\x35\xc4\x26\xb1\xcd\xd9\
-\x7c\x76\x2a\xbb\x98\xfd\x1d\xbb\x8b\x3d\xaa\xa9\xa1\x39\x43\x33\
-\x4a\x33\x57\xb3\x52\xf3\x94\x66\x3f\x07\xe3\x98\x71\xf8\x9c\x74\
-\x4e\x09\xe7\x28\xa7\x97\xf3\x7e\x8a\xde\x14\xef\x29\xe2\x29\x1b\
-\xa6\x34\x4c\xb9\x31\x65\x5c\x6b\xaa\x96\x97\x96\x58\xab\x48\xab\
-\x51\xab\x47\xeb\xbd\x36\xae\xed\xa7\x9d\xa6\xbd\x45\xbb\x59\xfb\
-\x81\x0e\x41\xc7\x4a\x27\x5c\x27\x47\x67\x8f\xce\x05\x9d\xe7\x53\
-\xd9\x53\xdd\xa7\x0a\xa7\x16\x4d\x3d\x3a\xf5\xae\x2e\xaa\x6b\xa5\
-\x1b\xa1\xbb\x44\x77\xbf\x6e\xa7\xee\x98\x9e\xbe\x5e\x80\x9e\x4c\
-\x6f\xa7\xde\x79\xbd\xe7\xfa\x1c\x7d\x2f\xfd\x54\xfd\x6d\xfa\xa7\
-\xf5\x47\x0c\x58\x06\xb3\x0c\x24\x06\xdb\x0c\xce\x18\x3c\xc5\x35\
-\x71\x6f\x3c\x1d\x2f\xc7\xdb\xf1\x51\x43\x5d\xc3\x40\x43\xa5\x61\
-\x95\x61\x97\xe1\x84\x91\xb9\xd1\x3c\xa3\xd5\x46\x8d\x46\x0f\x8c\
-\x69\xc6\x5c\xe3\x24\xe3\x6d\xc6\x6d\xc6\xa3\x26\x06\x26\x21\x26\
-\x4b\x4d\xea\x4d\xee\x9a\x52\x4d\xb9\xa6\x29\xa6\x3b\x4c\x3b\x4c\
-\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x99\x35\x9b\x3d\x31\xd7\x32\xe7\x9b\
-\xe7\x9b\xd7\x9b\xdf\xb7\x60\x5a\x78\x5a\x2c\xb6\xa8\xb6\xb8\x65\
-\x49\xb2\xe4\x5a\xa6\x59\xee\xb6\xbc\x6e\x85\x5a\x39\x59\xa5\x58\
-\x55\x5a\x5d\xb3\x46\xad\x9d\xad\x25\xd6\xbb\xad\xbb\xa7\x11\xa7\
-\xb9\x4e\x93\x4e\xab\x9e\xd6\x67\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\
-\x19\xb0\xe5\xd8\x06\xdb\xae\xb6\x6d\xb6\x7d\x61\x67\x62\x17\x67\
-\xb7\xc5\xae\xc3\xee\x93\xbd\x93\x7d\xba\x7d\x8d\xfd\x3d\x07\x0d\
-\x87\xd9\x0e\xab\x1d\x5a\x1d\x7e\x73\xb4\x72\x14\x3a\x56\x3a\xde\
-\x9a\xce\x9c\xee\x3f\x7d\xc5\xf4\x96\xe9\x2f\x67\x58\xcf\x10\xcf\
-\xd8\x33\xe3\xb6\x13\xcb\x29\xc4\x69\x9d\x53\x9b\xd3\x47\x67\x17\
-\x67\xb9\x73\x83\xf3\x88\x8b\x89\x4b\x82\xcb\x2e\x97\x3e\x2e\x9b\
-\x1b\xc6\xdd\xc8\xbd\xe4\x4a\x74\xf5\x71\x5d\xe1\x7a\xd2\xf5\x9d\
-\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee\x36\xee\x69\xee\x87\xdc\x9f\
-\xcc\x34\x9f\x29\x9e\x59\x33\x73\xd0\xc3\xc8\x43\xe0\x51\xe5\xd1\
-\x3f\x0b\x9f\x95\x30\x6b\xdf\xac\x7e\x4f\x43\x4f\x81\x67\xb5\xe7\
-\x23\x2f\x63\x2f\x91\x57\xad\xd7\xb0\xb7\xa5\x77\xaa\xf7\x61\xef\
-\x17\x3e\xf6\x3e\x72\x9f\xe3\x3e\xe3\x3c\x37\xde\x32\xde\x59\x5f\
-\xcc\x37\xc0\xb7\xc8\xb7\xcb\x4f\xc3\x6f\x9e\x5f\x85\xdf\x43\x7f\
-\x23\xff\x64\xff\x7a\xff\xd1\x00\xa7\x80\x25\x01\x67\x03\x89\x81\
-\x41\x81\x5b\x02\xfb\xf8\x7a\x7c\x21\xbf\x8e\x3f\x3a\xdb\x65\xf6\
-\xb2\xd9\xed\x41\x8c\xa0\xb9\x41\x15\x41\x8f\x82\xad\x82\xe5\xc1\
-\xad\x21\x68\xc8\xec\x90\xad\x21\xf7\xe7\x98\xce\x91\xce\x69\x0e\
-\x85\x50\x7e\xe8\xd6\xd0\x07\x61\xe6\x61\x8b\xc3\x7e\x0c\x27\x85\
-\x87\x85\x57\x86\x3f\x8e\x70\x88\x58\x1a\xd1\x31\x97\x35\x77\xd1\
-\xdc\x43\x73\xdf\x44\xfa\x44\x96\x44\xde\x9b\x67\x31\x4f\x39\xaf\
-\x2d\x4a\x35\x2a\x3e\xaa\x2e\x6a\x3c\xda\x37\xba\x34\xba\x3f\xc6\
-\x2e\x66\x59\xcc\xd5\x58\x9d\x58\x49\x6c\x4b\x1c\x39\x2e\x2a\xae\
-\x36\x6e\x6c\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3\x7b\x17\
-\x98\x2f\xc8\x5d\x70\x79\xa1\xce\xc2\xf4\x85\xa7\x16\xa9\x2e\x12\
-\x2c\x3a\x96\x40\x4c\x88\x4e\x38\x94\xf0\x41\x10\x2a\xa8\x16\x8c\
-\x25\xf2\x13\x77\x25\x8e\x0a\x79\xc2\x1d\xc2\x67\x22\x2f\xd1\x36\
-\xd1\x88\xd8\x43\x5c\x2a\x1e\x4e\xf2\x48\x2a\x4d\x7a\x92\xec\x91\
-\xbc\x35\x79\x24\xc5\x33\xa5\x2c\xe5\xb9\x84\x27\xa9\x90\xbc\x4c\
-\x0d\x4c\xdd\x9b\x3a\x9e\x16\x9a\x76\x20\x6d\x32\x3d\x3a\xbd\x31\
-\x83\x92\x91\x90\x71\x42\xaa\x21\x4d\x93\xb6\x67\xea\x67\xe6\x66\
-\x76\xcb\xac\x65\x85\xb2\xfe\xc5\x6e\x8b\xb7\x2f\x1e\x95\x07\xc9\
-\x6b\xb3\x90\xac\x05\x59\x2d\x0a\xb6\x42\xa6\xe8\x54\x5a\x28\xd7\
-\x2a\x07\xb2\x67\x65\x57\x66\xbf\xcd\x89\xca\x39\x96\xab\x9e\x2b\
-\xcd\xed\xcc\xb3\xca\xdb\x90\x37\x9c\xef\x9f\xff\xed\x12\xc2\x12\
-\xe1\x92\xb6\xa5\x86\x4b\x57\x2d\x1d\x58\xe6\xbd\xac\x6a\x39\xb2\
-\x3c\x71\x79\xdb\x0a\xe3\x15\x05\x2b\x86\x56\x06\xac\x3c\xb8\x8a\
-\xb6\x2a\x6d\xd5\x4f\xab\xed\x57\x97\xae\x7e\xbd\x26\x7a\x4d\x6b\
-\x81\x5e\xc1\xca\x82\xc1\xb5\x01\x6b\xeb\x0b\x55\x0a\xe5\x85\x7d\
-\xeb\xdc\xd7\xed\x5d\x4f\x58\x2f\x59\xdf\xb5\x61\xfa\x86\x9d\x1b\
-\x3e\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8\x28\xdc\x78\xe5\
-\x1b\x87\x6f\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9\x64\xcf\x66\
-\xd2\x66\xe9\xe6\xde\x2d\x9e\x5b\x0e\x96\xaa\x97\xe6\x97\x0e\x6e\
-\x0d\xd9\xda\xb4\x0d\xdf\x56\xb4\xed\xf5\xf6\x45\xdb\x2f\x97\xcd\
-\x28\xdb\xbb\x83\xb6\x43\xb9\xa3\xbf\x3c\xb8\xbc\x65\xa7\xc9\xce\
-\xcd\x3b\x3f\x54\xa4\x54\xf4\x54\xfa\x54\x36\xee\xd2\xdd\xb5\x61\
-\xd7\xf8\x6e\xd1\xee\x1b\x7b\xbc\xf6\x34\xec\xd5\xdb\x5b\xbc\xf7\
-\xfd\x3e\xc9\xbe\xdb\x55\x01\x55\x4d\xd5\x66\xd5\x65\xfb\x49\xfb\
-\xb3\xf7\x3f\xae\x89\xaa\xe9\xf8\x96\xfb\x6d\x5d\xad\x4e\x6d\x71\
-\xed\xc7\x03\xd2\x03\xfd\x07\x23\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2\
-\x3d\x54\x52\x8f\xd6\x2b\xeb\x47\x0e\xc7\x1f\xbe\xfe\x9d\xef\x77\
-\x2d\x0d\x36\x0d\x55\x8d\x9c\xc6\xe2\x23\x70\x44\x79\xe4\xe9\xf7\
-\x09\xdf\xf7\x1e\x0d\x3a\xda\x76\x8c\x7b\xac\xe1\x07\xd3\x1f\x76\
-\x1d\x67\x1d\x2f\x6a\x42\x9a\xf2\x9a\x46\x9b\x53\x9a\xfb\x5b\x62\
-\x5b\xba\x4f\xcc\x3e\xd1\xd6\xea\xde\x7a\xfc\x47\xdb\x1f\x0f\x9c\
-\x34\x3c\x59\x79\x4a\xf3\x54\xc9\x69\xda\xe9\x82\xd3\x93\x67\xf2\
-\xcf\x8c\x9d\x95\x9d\x7d\x7e\x2e\xf9\xdc\x60\xdb\xa2\xb6\x7b\xe7\
-\x63\xce\xdf\x6a\x0f\x6f\xef\xba\x10\x74\xe1\xd2\x45\xff\x8b\xe7\
-\x3b\xbc\x3b\xce\x5c\xf2\xb8\x74\xf2\xb2\xdb\xe5\x13\x57\xb8\x57\
-\x9a\xaf\x3a\x5f\x6d\xea\x74\xea\x3c\xfe\x93\xd3\x4f\xc7\xbb\x9c\
-\xbb\x9a\xae\xb9\x5c\x6b\xb9\xee\x7a\xbd\xb5\x7b\x66\xf7\xe9\x1b\
-\x9e\x37\xce\xdd\xf4\xbd\x79\xf1\x16\xff\xd6\xd5\x9e\x39\x3d\xdd\
-\xbd\xf3\x7a\x6f\xf7\xc5\xf7\xf5\xdf\x16\xdd\x7e\x72\x27\xfd\xce\
-\xcb\xbb\xd9\x77\x27\xee\xad\xbc\x4f\xbc\x5f\xf4\x40\xed\x41\xd9\
-\x43\xdd\x87\xd5\x3f\x5b\xfe\xdc\xd8\xef\xdc\x7f\x6a\xc0\x77\xa0\
-\xf3\xd1\xdc\x47\xf7\x06\x85\x83\xcf\xfe\x91\xf5\x8f\x0f\x43\x05\
-\x8f\x99\x8f\xcb\x86\x0d\x86\xeb\x9e\x38\x3e\x39\x39\xe2\x3f\x72\
-\xfd\xe9\xfc\xa7\x43\xcf\x64\xcf\x26\x9e\x17\xfe\xa2\xfe\xcb\xae\
-\x17\x16\x2f\x7e\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\
-\x93\xbf\x6d\x7c\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\
-\xbe\xc9\x78\x33\x31\x5e\xf4\x56\xfb\xed\xc1\x77\xdc\x77\x1d\xef\
-\xa3\xdf\x0f\x4f\xe4\x7c\x20\x7f\x28\xff\x68\xf9\xb1\xf5\x53\xd0\
-\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfc\x63\x33\x2d\xdb\
-\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x7a\x25\x00\x00\x80\x83\
-\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00\x75\x30\x00\x00\xea\x60\
-\x00\x00\x3a\x98\x00\x00\x17\x6f\x92\x5f\xc5\x46\x00\x00\x0b\x02\
-\x49\x44\x41\x54\x78\xda\x62\xfa\xff\xff\x3f\x03\x3a\x66\x62\x60\
-\x60\x60\x28\xdf\xa1\xf5\xbf\x76\xb7\xc9\x7f\x06\x28\x60\x62\x60\
-\x60\x60\xd0\x95\x70\x67\xf8\xf5\xf7\x1b\x03\x8a\xa0\xc9\xca\x45\
-\x0c\x33\xba\xb2\x19\xae\xed\xf5\xfd\x0f\x17\xd4\x68\x7f\xcb\xf8\
-\x71\x5f\x36\xe3\xfb\x27\x5b\x18\x18\x18\x18\x18\x00\x00\x00\x00\
-\xff\xff\x62\xc2\xb0\xa4\x74\xbb\xda\xff\x3f\xff\x7e\xfe\x9f\x7c\
-\x3c\x0c\xa2\x8d\x91\x91\xa5\xe8\xe4\xe3\xd5\x0c\x35\xd5\xf6\x5f\
-\x19\x18\x18\x18\x98\x92\x0e\xbe\xec\xb3\x89\xfc\xc3\xc8\xc0\xc0\
-\xc0\x7d\x6d\xaf\xef\x7f\x26\x8d\xf6\xb7\x8c\xff\x8f\x25\x30\xc0\
-\x0c\x06\x00\x00\x00\xff\xff\x62\xfa\xff\xff\x3f\x43\xe9\x76\x8d\
-\xa4\xb6\x03\x4e\xff\x0b\xb7\x28\xfe\x5f\x7d\xb9\xe6\xff\xaf\xbf\
-\x3f\x4e\x60\xf8\x86\x91\x81\x71\x92\xbe\xa4\x17\x83\xba\xa8\x2d\
-\xc3\xf1\x47\xcb\x18\x78\x6d\x96\xf8\x30\x20\x01\x26\x06\x06\x06\
-\x86\xc4\x83\x2f\x2f\xef\xbb\x37\x7b\xc1\xed\x37\xc7\x18\x3e\xbf\
-\x97\x64\x64\xe7\xf8\xf1\x1a\x43\x91\x46\xfb\x5b\xcb\x1e\x8f\x1b\
-\x89\x3d\x5e\xb7\x19\x67\x45\x1f\x61\xf8\xb8\x2f\x9b\xf1\xf7\xdf\
-\x1f\xff\x7f\xff\xfd\xf1\x9f\x81\x81\x81\x01\x00\x00\x00\xff\xff\
-\x62\xc2\x16\xa2\x28\xee\x29\xdf\xa1\xc5\xb0\xfc\x62\xe9\xff\xf2\
-\x1d\x5a\xff\x1b\xf6\x5a\xfc\xff\xfe\xfb\xd3\xff\x9f\x7f\xbe\x20\
-\xac\x61\x61\x62\x67\x38\xff\x7c\x33\x43\xb0\x4e\x23\xc3\x8b\xcf\
-\xb7\x19\xe6\x9d\x4d\x67\xa8\xdc\xa9\x87\x50\xf0\xe7\xdf\x0f\x06\
-\x06\x06\x46\x06\x3e\x76\x71\x06\x7e\x0e\x71\x86\x47\x9f\x8f\xa6\
-\xcd\xed\x2d\xe6\x86\x2b\xf8\xc5\xcc\xc4\xf0\xe7\xef\x4f\x06\x45\
-\x41\x13\x86\x1f\x7f\x3e\x33\x3c\xb8\xa9\x3b\x9b\x81\x81\x01\x6e\
-\x07\x53\xfa\xbe\x17\x5c\x8e\x77\x7e\x31\x7e\xfb\xfd\x81\x81\x83\
-\x85\xf7\xda\xb6\x35\x3e\x69\xe8\x5e\xf5\x51\x7d\xf1\xfd\xff\x97\
-\x26\x05\x89\x19\x5d\xd9\x4a\x4c\x4c\xff\x66\x1e\xa9\x58\xc7\xf0\
-\x97\x81\xe1\xff\xe5\x5d\xce\xff\x99\x34\xda\xdf\xae\xd2\x68\x7f\
-\xcb\x28\xdb\xfe\xeb\xe5\xc7\x7d\xd9\x9c\x1f\xf7\x65\x33\x7e\x7a\
-\xbe\x9f\xe1\xe5\xad\x59\x0c\x9f\x9e\xef\x87\x04\x16\x3a\xf8\xcf\
-\xf0\x9f\xe1\xfe\xf1\x74\x86\xff\x0c\xff\x19\x00\x8c\x93\x4f\x48\
-\x53\x71\x00\xc7\x3f\x3f\xb7\x97\x3a\x9d\xcd\x17\x46\xe8\xa4\x0e\
-\x66\x5b\x51\x41\x94\x68\x06\x75\xc8\x28\x44\x0f\x76\xe8\x32\xd9\
-\x41\x4f\xcd\x05\x52\xbc\x42\xea\x10\x2a\x8b\x0e\x51\x54\xe8\x55\
-\xbd\x45\x79\x88\xd9\x43\x56\xc3\xa2\x3a\xec\x34\x8a\xfe\x40\x45\
-\x08\xc1\x0a\x5c\xf5\x7a\xbc\x1e\xdb\xde\x7b\xbf\x0e\x11\x15\x34\
-\xe8\x0b\xdf\xeb\x87\xcf\xe1\xfb\xad\x91\x52\xa2\xe9\x51\x2e\x3e\
-\xd8\x4f\xf2\x6e\x6b\xa3\xa6\x47\x87\x34\x3d\x3a\xa9\xe9\xdb\x2f\
-\x4d\x2c\xef\x3e\xa9\xe9\x91\x9d\xa3\x8b\x41\x21\xa5\xc4\xf3\x1c\
-\xaa\x4e\x15\xc0\x2a\x7f\xf1\xea\x95\xf5\x26\x88\x3b\x6a\x7d\xf8\
-\xbc\xeb\x95\xcf\x4e\x1f\xc9\xdf\x5c\xe7\x0b\x3c\x6b\x50\x9a\xbd\
-\xd3\xf7\x3a\xe4\x19\x7d\xdb\xbf\xa4\x7e\x42\xa4\x74\x51\x7c\x75\
-\xb2\xbb\xfd\x04\x15\xf7\x3b\x7b\x5a\x07\x69\x0f\xed\x22\xfd\xfa\
-\x32\xb6\x63\x22\x84\xb0\xa8\x31\x44\x93\x35\x5a\x1d\xb2\x37\x7c\
-\x9c\x68\xcb\xa1\x0f\xcf\x3f\x2e\x53\xf1\xca\xf4\x6d\x1d\xe3\xcd\
-\xda\x53\xcc\xd2\x1a\x1d\x6a\x37\x6a\xa0\x6d\xc7\xec\xf4\xe4\xb5\
-\x2b\x33\xc1\x95\xaa\x90\x7d\xf3\xb3\x04\x1f\xdd\xda\x6c\x3a\x5f\
-\x2f\x04\x94\x10\x76\xe5\x1b\x4d\x75\x2d\xe4\x0b\x69\x56\x8d\x5c\
-\x66\xe6\xea\xe0\xaa\x5f\x71\x4f\x01\x07\xab\x42\x4a\x7e\xd1\xdf\
-\x59\xb0\xe5\xc8\xca\xa7\x03\xfd\xf9\xcf\xe2\xc5\xfb\xdb\xa2\xb9\
-\x61\x83\xb8\x9f\xee\x13\xd7\xa7\xc6\x8f\x59\x66\xa3\x04\x58\x8a\
-\x8f\xf1\x64\x4e\xc8\x5f\x7d\x3c\x27\x7e\x9f\x18\x58\x02\x14\x60\
-\x7c\xa3\x51\x66\xd3\x7c\x92\x73\x13\x31\xde\xbe\xec\x1c\xf2\xf9\
-\x9d\x77\x80\x0b\xdc\x50\xc3\x03\x74\x0d\x97\x88\x1c\xd6\xe9\x1a\
-\x2e\xa1\x86\x07\xfe\x3a\x0c\x91\x54\xd1\x89\xa4\x8a\xaf\x22\xa9\
-\x22\xe1\x29\x0b\xf7\xe1\x08\x46\x36\xb1\x68\x64\x13\x5b\x8c\x6c\
-\xc2\x6f\x64\x13\x49\xa3\x90\x21\xb7\x50\x4b\xa8\xed\x28\xb9\x85\
-\x5a\x8c\x42\x86\x3f\x4d\xfe\x2b\x3d\x31\x5b\xf4\xc6\xa5\xf0\x81\
-\xe8\x8d\x4b\xd1\x13\xb3\x05\xc0\x0f\xce\xca\x2c\x24\xca\x30\x0a\
-\xc3\xcf\xf7\x8d\x1b\x86\xa6\x96\x8e\x90\xda\x82\xe9\x58\xa9\x49\
-\x26\xa9\x85\x57\x11\x45\x03\x51\xe1\x85\x90\x26\xd5\x85\x68\x0b\
-\xe2\x92\x41\x65\x10\x49\x91\x11\x11\x42\x50\x41\x98\x4c\x11\x7a\
-\x51\xe0\x46\x4c\x44\x6a\x51\x86\x51\xd9\x45\x25\xe6\x92\x95\xcd\
-\x08\x93\xcd\xa8\x33\xfe\xff\xd7\x45\x12\x5a\xfc\x25\x1d\x78\xef\
-\xde\xf3\x70\x38\x9c\xe5\x9f\x5b\x39\x1f\x49\x80\x8a\x16\x0b\x4d\
-\xbd\xd5\x94\xb7\x24\x26\x57\xb6\xae\x2a\xad\x6c\x4d\x3a\x77\xff\
-\x7d\xdd\x89\x8a\xd6\x24\x6b\x59\xf3\xca\x45\xe7\x1f\x6d\x43\x29\
-\x1d\xa5\x34\xe3\x39\x11\x42\xd2\x37\xf6\x54\x65\xc5\xe5\xbd\xf4\
-\x6a\x9e\x5a\x10\xe5\x9a\x9a\x3e\x25\x10\x77\x4b\x32\x6f\x3b\x0e\
-\x65\x35\x2a\x9f\x3e\x69\xf6\x6a\x13\xc6\x10\x20\xcd\xe1\xfe\x40\
-\xc7\x40\x3d\xb9\xc9\x35\xf8\xb4\x49\x52\xa2\xb7\x60\xb5\x1c\xa5\
-\xb6\xc3\x4a\x55\xdb\x1a\xaa\xda\x52\x9a\x8e\xb5\xaf\x35\x86\xf8\
-\xc9\x80\x20\x9f\x36\x81\x9f\x0c\xa0\xa9\xf7\x24\xab\xcd\x9b\xe9\
-\x1c\xb8\x49\x63\xef\x49\x96\x86\xa5\x12\xbf\x28\x93\x60\xff\xb0\
-\x3e\xa3\x86\x4b\x00\xaf\x36\xf1\x7d\x45\x44\x06\x71\x61\xa9\x4c\
-\x4d\x7b\xd8\x97\x7e\x05\x81\x24\x3a\x64\x25\x1f\xbf\xbd\xe1\xad\
-\xf3\x51\x76\xf0\x74\x56\x7e\xa8\x67\xaf\x31\x44\x0a\x39\x3e\xe4\
-\x7a\xc5\x3b\x47\x17\x09\x8b\x37\xa2\x2b\x8d\x87\xfd\xd7\x70\xba\
-\x07\x11\x48\x46\x87\xe2\xbb\xce\x9c\x4d\x2a\xbd\x50\x17\x6e\x0c\
-\x59\xb7\x64\x87\x33\x71\xf1\x46\x84\x30\x91\x18\xb9\x89\xab\xdd\
-\xfb\x59\x10\x10\x4e\x66\x5c\x1e\x51\x21\xcb\xdd\x4f\x1f\x6c\x41\
-\x4a\xbd\x16\x88\x32\x84\x3c\xfe\x7c\x77\xbc\x77\xd4\xce\xfa\x98\
-\x9d\x74\x0d\x36\x30\xe9\xfb\x46\x74\x48\x02\x4f\x86\x6e\xe1\x9e\
-\x1e\xa8\xff\x38\x1c\xb6\x6c\xc6\xbf\xdb\x10\x72\xb8\x6d\x04\xfc\
-\x03\xc5\x8b\x91\x7b\x6c\x4b\x2c\x23\x3f\xed\x32\xc3\xae\xd7\x00\
-\x78\x3c\xc1\x45\xd2\xa4\x57\xcf\xf8\xe3\x0c\x21\x93\xfe\xf2\x60\
-\x49\xfb\xa7\x08\xdd\xe4\x17\xd4\xf8\xea\x38\xe3\xde\xaf\x08\x21\
-\x09\x0c\x9a\xca\xb8\x7e\xf1\x00\x26\x93\x56\x30\xe3\xff\xf2\xb7\
-\x39\xd9\x35\xe5\x27\x9c\x45\xf7\x3f\x05\x9a\x47\x46\x45\xec\xc2\
-\x14\x31\xd8\x6f\x16\x97\x4e\x1f\x79\xa6\xeb\xb2\x01\xa0\xb9\xb0\
-\x84\xe6\x82\x92\x0b\xb3\x4f\x41\x67\xfd\xdc\x53\x10\x04\xe0\x33\
-\x09\xd7\xd6\x77\xaa\xeb\x62\x7e\x3a\x2d\x77\x72\x6f\x28\x5d\x2a\
-\x20\x0f\x00\x1d\xc2\x63\xad\x84\xc7\x6c\xff\xa9\x58\x2b\xe8\x73\
-\x2b\xd9\x00\x2c\x07\x22\x41\x65\x3d\x9f\x4a\x01\x54\x21\xd0\x04\
-\x78\x81\x51\x80\x50\x73\x0e\xf1\x39\x36\xe2\x73\x6c\x84\x9a\x73\
-\xfe\x78\xc0\x58\x6a\x9c\x1f\x2c\x35\x4e\x87\xa5\xc6\x49\xfd\xed\
-\xeb\xb8\xec\xc5\xba\xcb\x5e\xbc\xcb\x65\x2f\x0e\x74\xd9\x8b\xcd\
-\x00\xee\xb1\x1e\x94\xee\x43\xe9\x3e\xdc\x63\x3d\x7f\xf4\x64\x5e\
-\xe1\xe8\xb7\xd1\x6d\x8b\xa0\xdb\x16\x81\xa3\xdf\xf6\x1f\x10\x09\
-\x28\x7d\xd6\x0b\xd4\x7f\x65\xcf\x1b\x92\xbd\x47\x89\xec\x82\xdf\
-\xb4\x47\x09\x80\x1f\xb4\x98\x6b\x50\x94\x55\x18\xc7\x7f\xef\x2e\
-\x7b\x01\x05\x41\xc1\x44\x16\x49\x2e\x12\x68\x28\x08\x62\xa3\x78\
-\x41\x48\x68\xb4\x9c\x21\x31\x9c\x29\x9c\x49\x53\x07\xc2\x48\x89\
-\x84\x31\x71\x72\x32\xb5\x72\x4c\xfd\xd0\xc5\xc8\x1c\x86\xc6\xc8\
-\xb4\x40\xee\x08\x98\x0a\x78\x4b\xc0\x50\x56\x50\x14\x94\x3b\xbb\
-\xe8\xee\xb2\xb0\xbb\x6f\x1f\x62\x1d\xd3\x6c\x06\xc7\xce\x99\xe7\
-\xcb\x3b\xe7\xfc\xdf\xdf\x79\xce\x33\xcf\x3c\xcf\x79\x26\x99\xed\
-\x99\x65\xc7\xe1\xca\x91\x0f\xf2\x5f\x60\x6b\x49\x28\x85\xea\x7d\
-\xb3\xb7\x9f\x0c\xdb\xb7\xf1\x84\x57\xe5\xa6\x13\x3e\xcd\xa9\x05\
-\xfe\xda\xd4\x02\xff\xa1\xd4\x02\x7f\x4b\x4a\xbe\xaf\xa5\x48\xfd\
-\xe5\xc0\xd6\x92\xd0\x9e\x4d\x27\x7c\x1a\x37\xe4\x4e\xaa\x48\xce\
-\xf3\xcc\x4c\x2d\xf0\xdb\x78\xf8\xd2\x86\xb9\xd6\x90\x1b\xe9\xf8\
-\x87\x5b\x05\x41\x32\x7a\xc0\x74\xaf\xa9\x48\xbd\xf7\x6c\x8f\xfe\
-\x76\xa2\x93\xad\x2a\x2c\x6a\x4a\xf2\x64\x0f\xc7\x40\x87\x41\xb3\
-\xde\x06\x10\x2c\xa2\x49\x90\x49\x95\x8a\x00\xd7\xa8\xb1\x5b\xc2\
-\x4f\xf9\xec\x8a\xbe\x3a\x2f\x2e\x60\xe7\x2a\xbf\xf1\xe1\x9f\x75\
-\xdc\xbf\x7e\xea\xd3\x8a\x48\xc3\xae\xca\xa8\x1d\x3b\x2a\x22\xd8\
-\x51\x11\x31\x72\x10\xf1\xef\x19\x08\x78\xda\x48\xe4\xc8\xa5\x76\
-\xdc\x33\x76\x91\x77\x6d\x37\x16\x71\x88\x98\xa9\xdb\xe8\x1f\xe8\
-\x20\xec\xf9\x55\x2c\xf4\x7c\x07\xc3\xa0\x96\xf4\xa2\x40\xd2\x0a\
-\x03\x38\x52\x9f\x4e\x6d\x7b\x01\x77\xfa\x1b\xe8\xd2\x35\xd3\xad\
-\xbb\x19\xad\x31\xdc\x11\x34\x86\x3b\x23\x07\x99\xa5\x7a\x9d\x50\
-\xd5\x72\x5d\x88\x2a\x06\xef\x71\xb3\x91\x49\x14\x0c\x99\x07\x90\
-\x4b\x6d\x51\xf7\x9c\x65\xd0\x3c\xc0\xfe\xd7\xda\xf1\x1a\x3b\x8b\
-\xf5\xc7\x9c\xe9\xd0\x35\xb1\xd8\x27\x89\x70\xaf\xb5\x84\xaa\x96\
-\x13\xe8\xba\x84\x00\xd7\x28\x4d\x88\x2a\xe6\xe8\x2c\x8f\x25\x6f\
-\x7b\xba\xf8\x89\xde\xe3\xa7\x8d\x1c\xe4\x5c\xeb\xcf\xd4\xb4\xe6\
-\xe8\x6b\x5a\x73\x86\x1a\x3a\xcb\x31\x9a\xf5\x84\xba\xc7\x32\xed\
-\xb9\x48\x8c\x26\x1d\x4a\xd9\x68\x7a\xf5\xad\x74\xe9\x6e\x32\x53\
-\xb5\x8c\x5b\x9a\xcb\x54\xdc\xf8\x8e\xca\x1b\x99\x9c\x6f\xfb\x85\
-\x2b\x9d\x45\x87\xae\x75\x97\x39\x1d\xc8\xea\x89\x59\x9d\x38\xf9\
-\xc2\x86\xa4\x08\x92\x92\x16\x8c\x1c\x44\x10\x24\x08\x82\xa4\x17\
-\x51\xec\xb7\x7e\x3b\xdf\x76\x14\x75\xf7\x69\xd6\x87\x66\x11\xe2\
-\x16\xc3\x2d\x4d\x2d\xc7\xfe\xfc\x98\xc6\xae\xdf\x91\x08\x12\x6c\
-\x65\x63\x70\x73\xf0\x67\x8a\xf3\x1c\x82\x26\x2d\xca\xbc\x5c\xfe\
-\x26\xd5\x95\xc1\xcb\x44\x10\x15\x0a\x4b\xa2\x5c\x2e\x3e\x5d\xb0\
-\x82\xd8\x25\x95\xc8\xda\x5c\xed\x7d\x09\x75\x8f\xc5\xd7\x79\x1e\
-\xbd\x86\x56\xce\xdc\xca\x42\x26\x55\x52\x7c\x7d\x3f\x0e\x4a\x17\
-\x96\xfa\x7d\x88\x9f\xcb\x42\xf4\x43\x1a\x6e\xf6\x5d\xa4\xb1\xf7\
-\x64\x7d\x79\xdd\xd9\x53\xd5\x17\xec\x50\x2a\x48\x1b\x16\xfb\x08\
-\x58\x38\x62\x90\xc9\x1d\x7a\xdc\xbb\x0c\xa2\x45\x34\x4f\xef\x34\
-\xb4\xac\x3e\xd7\x9a\x43\x5d\x47\x21\x91\x3e\x89\x38\xd9\xba\xd1\
-\xa9\x6b\xe6\x55\xbf\x34\x02\x26\x44\x73\xa4\x2e\x8d\xa6\xde\x1a\
-\x6c\x24\x72\x64\x52\x25\x0a\xb9\xf8\x5e\xdd\xf9\x99\x16\xdd\x7d\
-\xfb\x37\x04\x89\x25\x64\x58\xd2\x05\x58\x30\x62\x90\xf9\x0d\x5a\
-\xe9\xa2\x2b\xda\x71\xeb\x4a\xda\x1d\xe6\x5d\xed\x3f\x68\x92\x48\
-\x04\xb9\xcc\xe1\x70\x59\xd3\x57\x0c\x0c\xdd\x63\xfc\x28\x4f\x86\
-\xcc\x06\x4e\xb7\x1c\xc6\x4e\xe6\x08\x88\x00\xdd\x0a\xa5\xf1\xc5\
-\x3f\xaa\x83\x4a\x2f\x9c\x09\x1e\xab\x50\x18\x3f\x7f\x44\x5f\xfa\
-\x34\x57\x33\x09\xd8\x6a\x94\x09\x5a\x9f\x76\x43\x79\x62\xf1\x5d\
-\xfb\xb0\xab\xda\xb7\x64\x72\x7b\x49\x55\x67\xee\xcb\x55\x6d\x39\
-\x07\x02\x26\x44\x65\x3b\xdb\x79\xec\x97\xd8\xe8\x63\x15\xb6\xc6\
-\xd1\x3d\x5d\xe3\x5c\xbe\xfd\x62\x6d\x7d\x69\x5e\x84\x93\x4c\x3e\
-\x54\x0d\x4c\x7c\x48\x4f\x0b\x9c\x79\x1a\x90\x95\x40\xac\xd5\x41\
-\x46\x1b\xa1\x7f\x4a\xbb\xe1\xd2\xba\x92\xf6\x39\x9b\x4a\x34\xc5\
-\x13\xb3\xb6\x25\x36\x56\x1c\x5a\xf9\xeb\xd1\x65\xef\xee\xc9\x48\
-\xf9\x69\xf7\xe6\xcd\x76\x47\x0e\xc6\x45\xe8\xee\x8f\x3a\x69\x63\
-\x63\xea\x05\xbc\xad\x42\x79\xf1\x89\x14\xae\x49\x1f\x53\xf9\xfe\
-\xf7\x79\xb5\xf9\x61\x62\x7d\x51\xa4\x68\x06\xb1\xbe\x28\x52\xac\
-\xcd\x0f\x13\x2f\xe7\x86\x88\x55\xd9\x8e\x0f\x1a\x82\x47\x41\x3e\
-\x01\x5e\x01\xaa\x80\x01\xc0\x04\xb8\x9b\xa4\x42\xba\x49\x2e\x0b\
-\x97\xf4\x37\xb3\xe7\xeb\x52\x2e\xd6\x39\xa1\x90\xf3\x8d\x5c\x69\
-\xec\x14\x24\x62\xf1\xbf\xc5\x81\x00\x78\x04\xed\xc4\x7b\x7e\x36\
-\x8e\x6e\x8b\x51\x4d\xdf\x02\x80\x6a\xfa\x16\x1c\xdd\x16\xe3\x3d\
-\x3f\x1b\x8f\xa0\x9d\x08\x4f\xf0\x88\x08\x5c\x04\x5e\x02\x6c\x87\
-\xbb\x15\x67\x20\x1a\x28\x03\x30\x58\x64\xd6\xb5\x6b\x86\xff\xa7\
-\x02\x96\x03\x19\xc3\x07\x89\x1f\xde\x43\x5f\x6b\x2e\x2d\x35\xc9\
-\xb8\x4e\x4d\xc1\x6c\xd2\x73\xad\x74\x29\x66\x93\x1e\xd7\xa9\x29\
-\xb4\xd4\x24\x63\x7d\xce\x78\x0c\x64\xb8\x2a\x79\xa2\xa9\xb6\xeb\
-\x38\xf4\x63\xa6\xb5\xf3\xb1\x5a\x9b\xb6\x2c\x21\x47\x5b\x96\xb0\
-\x4d\x5b\x96\x90\xae\x2d\x4b\xf8\x41\x5b\x96\xd0\x03\xa0\xb4\xf7\
-\x42\x35\x23\x03\x75\xc5\x0a\xcc\x83\x1a\x7c\x17\xfd\x86\x79\x50\
-\x83\xba\x62\x05\xaa\x19\x19\x28\xed\xbd\xfe\x2b\x8f\x3c\x9b\x21\
-\x02\x77\x1b\xf6\x52\x97\x1b\x4c\xdf\xed\xe3\xa8\x2b\xe3\x00\x50\
-\x57\xc6\xd1\x77\xfb\x38\x75\xb9\xc1\xdc\x6d\xd8\x8b\xf8\x7f\x83\
-\xcc\x8d\x7f\xbc\x00\xb2\xb6\x78\x0f\xdb\xdc\x78\xf1\x41\x98\xfc\
-\x35\x00\xe1\xfe\x7a\x92\x1d\x0a\xb2\xf0\x00\x00\x00\x00\x49\x45\
-\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x08\xb7\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
-\x00\x00\x08\x6e\x49\x44\x41\x54\x58\x85\xc5\x97\x7b\x70\x55\xd5\
-\x15\xc6\x7f\x7b\x9f\x73\x6e\x6e\x6e\xde\xb9\x97\x20\x84\x47\x5e\
-\x04\x12\x02\x11\x05\x05\x22\x05\x44\x0a\xa2\x28\xd6\xe2\x4c\xa7\
-\x75\xa8\x76\xac\xa3\x33\x3a\x63\x67\xb4\xd3\x87\x6d\x1c\x2b\x7d\
-\x4d\xff\x68\xcb\xd8\x56\x1d\x29\x76\xaa\x45\xc6\xe7\x0c\xa1\xa9\
-\xa0\x11\x5a\x01\x8d\x41\x1e\x01\xcc\x83\x24\x4a\x42\x42\x72\xf3\
-\xbc\xaf\xdc\xdc\xb3\x77\xff\x38\xe7\xde\x24\xd5\x19\x69\xa7\x33\
-\xee\x99\x35\xe7\xdc\x39\x77\xaf\xf5\x9d\x6f\x7d\x6b\xad\xb3\xe1\
-\x4b\x5e\xe2\x4a\xff\xb8\x6e\x5d\xad\xd9\x91\x61\xad\x11\x88\xed\
-\x02\xb1\x46\x43\x00\xc8\x71\x1f\x8f\x08\x18\x10\xe8\x23\x36\x7a\
-\x5f\x71\x78\xe2\x48\x43\x43\x6d\xe2\xff\x02\xa0\x68\x5b\x6d\xae\
-\x18\x4f\xfb\x31\x82\xfb\xca\xe6\xcd\xe0\xc6\x15\xa5\x59\x2b\xaa\
-\xe6\x8a\xab\x02\x59\xf8\xb3\xd3\x01\x18\x1c\x8d\xd2\x1b\x1c\xa3\
-\xb1\xf9\xa2\x3e\xf4\x41\xfb\x58\x6b\xe7\x65\xd0\x3c\xab\xd3\xc6\
-\x7f\xd6\xf9\x7a\xed\xf0\xff\x0c\xa0\x68\xf3\xce\x87\xa5\x21\x9e\
-\xdc\x5c\xb3\x28\xfd\xfe\xaf\xaf\xb4\xca\xe7\x05\xae\x88\xb3\xb6\
-\x4f\x83\x3c\xf3\xca\xf1\x89\xfd\x87\xcf\x46\x95\x96\x8f\x77\xd6\
-\x7d\xff\x77\xff\x15\x80\xa2\x75\xb5\x5e\xed\xf3\xfe\x75\x71\xe9\
-\xcc\x4d\x4f\x3e\xf8\xd5\x8c\xca\xe2\x02\x10\x8e\xe3\x7f\x9d\xfc\
-\x84\x13\x1f\x5f\x22\x38\x1a\x61\x70\x24\x86\x10\x10\xc8\x4d\xc7\
-\x9f\x93\xc1\xb2\xf2\x59\xac\x5e\x3a\x97\x92\x39\xf9\x00\x7c\xdc\
-\xd9\xcf\xe3\x4f\xbf\x15\x3e\xdd\xd6\x5b\x4f\x38\xfa\xcd\xce\x86\
-\xda\xd8\x17\x02\x58\xbc\xbd\xd6\x13\x0e\xa7\xbd\xbf\x6d\x7d\x55\
-\xc5\x4f\xee\xdf\xe0\x49\xf7\x58\xb4\x7e\x1a\xe4\xb9\x37\x1a\x69\
-\x3c\xdb\x8d\x34\x24\x86\x94\x08\x21\x90\x52\x20\x10\x29\x2f\x5a\
-\x6b\xb4\xd6\x2c\xaf\x28\x64\xc7\x2d\x57\x53\x3a\x27\x9f\x58\x3c\
-\xc1\x53\xcf\xbe\x1d\x7f\xe5\xd0\xe9\x73\x3e\x5f\xec\xba\xe6\x7d\
-\xb5\xf1\xa9\xf1\x8c\xe9\xe1\xb5\xc8\x2c\x3e\xf6\xea\xb6\x1b\xab\
-\x56\xee\x7c\x68\x53\x9a\x65\x1a\xbc\xde\x70\x96\x27\x9e\x7b\x9b\
-\x4b\x03\x21\x4c\xd3\xc0\x9a\x62\xa6\x61\x60\x9a\x06\x86\x29\x31\
-\x0c\x89\x69\x18\x48\x43\x72\x29\x18\xe2\xad\xe3\xed\x64\xf9\xd2\
-\xa8\x2c\x9e\xc1\x8d\x2b\x4a\x8d\xbe\xa1\x70\xde\xc9\x96\x81\x6b\
-\x86\x5b\x0e\xee\x85\x27\x3e\x1f\x40\xf1\x16\xef\xa3\xab\xae\x2e\
-\xba\xf7\x37\x8f\xdc\x92\x6e\x18\x92\xdf\xef\x3d\xca\x9e\xfd\x1f\
-\x61\x18\x06\xa6\x69\x62\x59\x6e\x70\xcb\xf9\x6d\x9a\xc6\xa4\x49\
-\x03\xc3\x65\xc7\x30\x24\x00\x8d\xe7\x7b\x08\x45\xe2\x5c\x5b\x31\
-\x9b\x35\xcb\x8a\xcd\x33\xed\x7d\x73\x43\xd9\xfb\xe3\x43\x2d\x07\
-\xdf\xfb\x4c\x0a\x0a\xef\xd8\xe9\xcf\xd4\x56\xcb\x9b\xbf\xfd\x76\
-\xfe\xbc\x99\xb9\xbc\x54\x7f\x92\xe7\xde\xf8\x10\xd3\x32\xa7\xbc\
-\xad\x64\x69\xd9\x0c\x96\x94\x14\x50\x51\x14\xa0\x20\xcf\x47\x6e\
-\x56\x3a\xe3\xf1\x04\x7d\x83\x61\x9a\x5a\xfa\xa8\x3f\xde\x41\x28\
-\x1a\xc7\x56\x0a\xdb\x56\x24\x6c\xc5\xdd\x9b\x97\x72\xe7\xfa\x0a\
-\x2e\x5e\x1e\x65\xeb\xc3\xbb\x07\x47\x89\x97\x77\xbf\xf6\xc3\xe0\
-\x34\x06\xfc\xa5\x37\xed\xba\xe7\xf6\xe5\xd7\xdf\xbc\x7a\xa1\x3c\
-\x73\xa1\x8f\x9f\xef\x39\x8c\x69\x18\x58\x2e\x00\xcb\x72\xee\x7f\
-\xfd\xc0\x57\x58\x34\xdf\xcf\x8c\x5c\x1f\x3e\xaf\x07\xc3\x90\xa4\
-\x79\x4c\xf2\xb2\xbc\x2c\x9a\x9f\xcf\xaa\xaa\xd9\x9c\x6a\xef\x27\
-\x16\xb7\x1d\x9d\x00\xa7\xda\xfb\xa8\x2e\x9b\x49\x49\x61\x1e\x13\
-\xb6\xf2\x9c\x38\xdd\x5d\x30\xd4\x72\xf0\x4d\x00\x09\xb0\x78\x5d\
-\x6d\xa6\x65\xca\xbb\xee\xb9\x6d\x85\xa1\xd1\x3c\xbd\xef\x38\x52\
-\xc8\x69\x14\x3b\x40\x4c\x84\x10\x08\xe1\x10\x17\x4f\x28\xe2\x09\
-\x85\x94\x12\xe9\x0a\x33\x3f\xcb\xcb\xf6\xf5\x0b\xb1\x2c\x13\x8f\
-\x65\x62\x59\x26\x86\x34\xd8\xbd\xff\x23\x34\x70\xf7\x96\x6b\x0c\
-\xd3\x34\xee\x5a\xbc\xae\x36\x13\xc0\x04\x88\xf8\xbc\x5b\xd6\x5e\
-\x5d\x2c\xf3\xb3\xd3\x39\xd5\xd6\x4b\xcb\x27\x41\x3c\x1e\x73\x8a\
-\xe8\xdc\x34\x98\x06\x09\x5b\x71\xfc\x7c\x3f\xef\x35\xf7\xd2\x3b\
-\x14\xc1\x10\x82\x0d\xcb\xe7\x73\x7b\x4d\x69\x0a\x5c\xe5\x7c\x3f\
-\x1e\xcb\x24\x21\x6d\x5c\xac\x74\x74\x0f\x73\xae\x73\x80\xca\xa2\
-\x00\x6b\xaf\x2d\x91\x07\x8f\xb6\x6e\x01\x5e\x96\x8e\xf6\xf5\x8e\
-\x9b\xae\x5b\xe0\x43\xc0\x91\x8f\xba\x1c\x31\x19\x4e\xde\x0d\x37\
-\xf7\x49\x30\xbf\x78\xe9\x04\xaf\xfd\xf3\x02\x03\xa3\xe3\xa4\x79\
-\x2c\x2c\x8f\xc5\xd9\xae\x41\xb4\xd6\x29\x31\x4b\x49\x8a\xb1\xa9\
-\x2c\xbe\xdf\xdc\x0d\xc0\xc6\x95\xe5\x3e\x21\xc5\x8e\x14\x03\x68\
-\x96\x55\x95\xcd\x04\xa0\xf5\x93\xe0\x34\x35\x9b\xc6\x64\x2a\x2c\
-\xd3\x24\x34\x6e\x63\x59\xa6\x0b\x4e\x22\xa5\x60\xcd\x92\xc2\x54\
-\x0f\xd0\x5a\x73\xb1\x3f\x8c\x65\x19\xae\x6b\x8d\xd6\xa0\x94\xe6\
-\xc2\xa5\x21\x00\x2a\x4b\x0a\xd0\x5a\x2f\x9b\x04\x20\xf0\x17\xe4\
-\x67\x02\x4e\x5f\x97\x6e\xf0\xa9\xe6\x00\x91\x93\x3d\xc0\xb5\x9a\
-\xc5\x57\xb1\xaa\x72\x66\x2a\xb8\xad\x14\xef\x9e\xee\xc3\x32\x0d\
-\xd0\x4e\x73\x52\x4a\x63\x18\x92\x91\xd0\x38\x08\xc1\x8c\xdc\x0c\
-\x34\xda\x3f\x95\x01\xf2\xdc\xc1\x32\x16\x89\xbb\xa2\x12\x93\x40\
-\xa4\x93\x12\xc3\x6d\x3c\xc9\xd2\x5c\xbb\x74\x16\x6b\x16\x4f\x09\
-\x6e\xdb\x1c\x68\xec\xa6\x67\x30\x8a\x69\x18\x4e\x60\x25\x31\x6c\
-\xc7\x4f\x24\xe6\x0c\xc8\x9c\xcc\xb4\x54\xfd\xcb\x64\x37\x18\x1a\
-\x8d\xba\x0f\xbd\x48\x21\xa6\x9b\x94\x18\x52\x4c\x63\xa3\xba\x38\
-\x9f\xd5\x8b\x02\x28\xa5\x50\x4a\x61\xdb\x36\x75\x1f\x5e\xe2\xe3\
-\xee\x31\xb7\x3b\x4e\x6f\x4c\x52\x0a\xb2\x33\xbd\x00\x8c\x84\xc7\
-\x53\x2d\x48\x02\x08\x4d\xb0\x7f\x28\x0c\x40\x20\xcf\x87\x10\x38\
-\x8a\x96\x8e\x49\x29\x10\x2e\x2b\x49\x87\xd7\x2f\xf4\xa7\x82\x2b\
-\xa5\x38\xd6\x32\x44\x57\x7f\xd4\x65\xca\x01\x9c\x64\x52\xb8\x2f\
-\x92\x9f\xed\x00\x08\x0e\x47\x10\x10\x9c\x04\x20\xe4\x89\xe6\x0b\
-\x97\x01\x58\x38\x2f\xe0\xd4\xb9\x10\x08\x40\x20\xdc\xf2\x22\x55\
-\x66\x52\x08\xb2\xd3\x8d\x14\xf5\x4a\x29\xda\xfa\x22\x29\x86\xa4\
-\x10\x08\x91\xbc\x3a\x7b\x11\x82\x92\xd9\x79\x00\x9c\xeb\xec\x47\
-\x48\x79\x22\xa5\x01\xad\xf5\x9e\x43\xc7\xdb\xd6\xdd\xb1\xbe\xd2\
-\x57\xb3\x74\x2e\x07\x8e\xb6\x4d\xf6\x68\x91\xbc\x4c\x19\x9c\x42\
-\xf0\x87\xfa\x0e\xd2\x3c\x16\x1e\x8f\x85\xc7\x63\xa2\x34\xa9\x06\
-\xe5\xe2\x9f\xb2\x9c\xdd\xcb\x17\xcd\x02\xe0\xad\x63\xad\x11\x65\
-\xab\x3d\x29\x00\xbe\x48\xac\xee\x48\xd3\x05\x35\x3c\x16\xa3\xb2\
-\xa4\x80\x05\xf3\xfc\x74\xf5\x8e\x90\x14\x68\xf2\x4d\xd1\xc9\xb2\
-\xd2\xec\x58\x3b\x27\x35\x92\x01\x5e\x3e\xd6\x8f\x52\xca\x61\x24\
-\xb9\x07\x8d\x76\x9d\x14\xcd\xca\x61\xc1\x9c\x7c\x46\x43\xe3\xbc\
-\xf3\x7e\xab\xf2\x45\x62\x75\xa9\x14\x34\x37\xd4\x86\x12\x09\xb5\
-\xf7\x2f\x75\x4d\xb6\x00\xee\xbd\x75\x19\x42\x08\xd7\x99\x53\xc7\
-\xc9\x7b\xa5\x34\xca\x56\x58\x06\x58\x06\x98\xd2\xb1\xf8\x44\x82\
-\x89\x84\x4d\xc2\x56\x28\x5b\x39\xff\x53\x1a\xad\x1c\xe0\x77\xad\
-\xaf\x00\x01\x7f\xfb\xc7\x49\xdb\xb6\xd5\xde\xe6\x86\xda\xd0\x64\
-\x15\x00\xf1\x84\xf5\xd8\xee\xd7\x3e\x18\xee\xee\x1f\x63\xd1\x7c\
-\x3f\xdf\xd8\x58\xe5\x04\x57\x4e\x8e\xed\xe4\xd5\x9d\x70\x53\x05\
-\xa8\x94\x22\x3e\x31\xc1\xc4\x84\x4d\x22\x61\x93\xb0\x6d\x6c\xdb\
-\x4e\x3d\xdb\x5a\x53\x46\x69\x61\x2e\x7d\xc1\x10\x7f\xda\x77\x6c\
-\x38\x16\xb7\x1e\x4b\xc6\x4d\x4d\xc3\xd1\xf6\xfa\x68\x4e\xd9\x06\
-\xdd\xd1\x33\x5c\xb3\xb9\xa6\xdc\xaa\x2c\x0a\x10\x8e\x4d\xd0\xde\
-\x3d\xe4\x28\x5a\x48\xa7\x22\x84\x93\xd1\x6b\x4a\x73\xb1\xb5\x26\
-\x61\x3b\xa0\x3e\x68\x1b\x26\x61\x2b\x07\x80\xcb\xc4\x44\xc2\xe6\
-\x86\x25\x85\x6c\x5d\x5d\x4a\xc2\x56\xfc\x60\x57\x7d\xa4\xad\xab\
-\xff\xa9\xae\x03\x8f\x1e\xfa\x0f\x89\x25\x97\x16\xa5\xb7\xfe\xea\
-\xf5\xed\x9b\xaa\x37\xfd\xf4\xbb\x1b\xd2\x84\x10\x1c\x6a\xec\x60\
-\xef\xa1\x73\x48\x29\xdd\xe9\x96\xfc\x18\x71\x9b\x93\x5b\x66\x5a\
-\x83\xd2\x0e\xfd\x09\x37\x05\xb7\xad\x2e\xe1\x86\x25\x85\x68\x60\
-\xe7\xf3\x0d\xe3\x2f\xd6\x35\xd5\xb7\xbd\xf9\xe8\x36\x10\xfa\x33\
-\x0c\x38\xeb\x09\x66\x57\xdf\xf0\xea\xc9\xf3\x03\x5b\x07\x46\xa2\
-\x81\x55\x4b\xe7\x19\x0b\xe6\xfa\xa9\x2e\x2b\x20\x38\x1a\xa5\x6f\
-\x28\xe2\x40\x76\xb7\x27\xf3\x3c\xf5\xe3\x23\x61\xdb\x2c\x28\xcc\
-\xe5\x5b\x1b\x2b\xa8\x2a\x0e\x30\x3e\x61\xf3\xcb\x17\x0e\xc7\x5f\
-\xac\x6b\x3a\x93\x96\x16\xd9\xdc\x7f\x76\xbd\x3d\xbd\x3e\x3e\x67\
-\xcd\x59\xf5\x48\xba\x95\x1f\x78\xa9\xba\x7c\xce\xc6\xa7\x1e\xba\
-\xd9\x57\xea\x7e\xe5\x5e\xbc\x3c\xca\xa9\xf6\x7e\x5a\xbb\x87\x18\
-\x0b\x4f\x30\x16\x8b\x23\x85\x20\x27\xd3\x4b\x8e\x2f\x8d\xb2\xc2\
-\x5c\xaa\x8a\xfd\xcc\x0e\x38\x73\xa5\xe3\xd2\x30\x3f\xda\xf5\xf7\
-\x68\x53\xf3\x85\x77\x7b\x8f\xbd\x70\x5f\x74\xb0\x2d\x08\x44\xbf\
-\x10\x00\xe0\x03\xb2\x0b\xd7\x7e\xef\x41\x6f\x76\xe0\x91\x3b\x37\
-\x2c\xf3\x7e\xe7\x6b\x2b\xcc\xf9\x57\xe5\x5e\xd1\x51\xea\xd3\xcb\
-\xa3\x3c\xff\x46\x63\xe2\xe5\x03\x1f\x8e\x47\x83\x5d\xcf\x74\x1f\
-\xfd\xe3\x6e\x60\xcc\xb5\x21\x40\x7d\x11\x80\x34\x20\x0b\xc8\x4a\
-\x2f\x28\x9d\xed\xaf\xdc\xf6\x80\x95\xe1\xdf\x56\x55\x3a\x4b\x6c\
-\x5e\x53\x99\x7e\x6d\x45\xa1\x98\x91\xe7\x23\x27\xc3\x0b\x02\x46\
-\x43\xe3\x0c\x8c\x44\x68\x3a\xdf\xa3\xeb\x0e\x37\xc7\xce\xb4\xf6\
-\xe8\xd8\x58\x4f\x7d\xf0\xd4\xab\x7f\x1e\x1f\xee\xe9\x75\x03\x87\
-\x80\x41\x20\x7c\x25\x0c\x80\x53\xa2\x19\x40\x36\x90\x61\x59\xbe\
-\xac\xec\xf2\x8d\x2b\x7d\x05\x0b\x36\x5a\xe9\xd9\xd5\x60\xe4\x68\
-\x21\x7d\x8e\x13\x15\x45\xdb\xa3\xf1\xf0\xd0\x99\x48\xdf\xf9\x77\
-\x46\xdb\xde\x69\x4a\x24\x62\x21\x1c\xba\x43\xc0\xb0\x0b\xe2\x33\
-\xe7\xc5\x2b\x3d\x9c\x1a\x80\x05\x78\x5d\x76\xbc\x38\x5d\xd4\x72\
-\x81\x2a\xc0\x06\xe2\xae\xc5\x80\x71\xf7\xfe\x8a\x0e\xa9\x5f\xda\
-\xfa\x37\x3d\x87\xb9\xea\xf9\xa4\xbb\x03\x00\x00\x00\x00\x49\x45\
-\x4e\x44\xae\x42\x60\x82\
-"
-
-qt_resource_name = "\
-\x00\x07\
-\x07\x3b\xe0\xb3\
-\x00\x70\
-\x00\x6c\x00\x75\x00\x67\x00\x69\x00\x6e\x00\x73\
-\x00\x05\
-\x00\x49\xc3\x81\
-\x00\x43\
-\x00\x65\x00\x6e\x00\x52\x00\x61\
-\x00\x0e\
-\x09\x71\xe2\xe7\
-\x00\x70\
-\x00\x61\x00\x67\x00\x65\x00\x5f\x00\x61\x00\x6a\x00\x6f\x00\x75\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x0c\
-\x0a\x09\xe1\x87\
-\x00\x70\
-\x00\x61\x00\x67\x00\x65\x00\x5f\x00\x6e\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x08\
-\x0c\x33\x5a\x87\
-\x00\x68\
-\x00\x65\x00\x6c\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\
-"
-
-qt_resource_struct = "\
-\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\x03\x00\x00\x00\x03\
-\x00\x00\x00\x24\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x00\x46\x00\x00\x00\x00\x00\x01\x00\x00\x15\x6e\
-\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x49\
-"
-
-def qInitResources():
- QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-def qCleanupResources():
- QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-qInitResources()
diff --git a/CenRa_POSTGIS/resources_rc.qrc b/CenRa_POSTGIS/resources_rc.qrc
deleted file mode 100644
index 0ce3660..0000000
--- a/CenRa_POSTGIS/resources_rc.qrc
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- help.png
-
-
- page_ajout.png
-
-
- page_new.png
-
-
diff --git a/CenRa_POSTGIS/table_postgisdialog.py b/CenRa_POSTGIS/table_postgisdialog.py
deleted file mode 100644
index 5632f42..0000000
--- a/CenRa_POSTGIS/table_postgisdialog.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-/***************************************************************************
- table_postgisDialog
- A QGIS plugin
- table_postgis
- -------------------
- begin : 2013-10-15
- copyright : (C) 2013 by gcostes
- email : sfdg
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-"""
-
-from qgis.PyQt import QtCore, QtGui
-from qgis.PyQt.QtWidgets import QDialog
-from .ui_table_postgis import Ui_table_postgis
-# create the dialog for zoom to point
-
-
-class table_postgisDialog(QDialog):
- def __init__(self):
- QDialog.__init__(self)
- # Set up the user interface from Designer.
- self.ui = Ui_table_postgis()
- self.ui.setupUi(self)
diff --git a/CenRa_POSTGIS/table_postgisdialog.py.bak b/CenRa_POSTGIS/table_postgisdialog.py.bak
deleted file mode 100644
index 0355f30..0000000
--- a/CenRa_POSTGIS/table_postgisdialog.py.bak
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-/***************************************************************************
- table_postgisDialog
- A QGIS plugin
- table_postgis
- -------------------
- begin : 2013-10-15
- copyright : (C) 2013 by gcostes
- email : sfdg
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-"""
-
-from PyQt4 import QtCore, QtGui
-from ui_table_postgis import Ui_table_postgis
-# create the dialog for zoom to point
-
-
-class table_postgisDialog(QtGui.QDialog):
- def __init__(self):
- QtGui.QDialog.__init__(self)
- # Set up the user interface from Designer.
- self.ui = Ui_table_postgis()
- self.ui.setupUi(self)
diff --git a/CenRa_POSTGIS/tools/icons/CEN_RA.png b/CenRa_POSTGIS/tools/icons/CEN_RA.png
new file mode 100644
index 0000000..95ead1c
Binary files /dev/null and b/CenRa_POSTGIS/tools/icons/CEN_RA.png differ
diff --git a/CenRa_POSTGIS/help.png b/CenRa_POSTGIS/tools/icons/help.png
similarity index 100%
rename from CenRa_POSTGIS/help.png
rename to CenRa_POSTGIS/tools/icons/help.png
diff --git a/CenRa_POSTGIS/tools/icons/icon.png b/CenRa_POSTGIS/tools/icons/icon.png
new file mode 100644
index 0000000..d53a910
Binary files /dev/null and b/CenRa_POSTGIS/tools/icons/icon.png differ
diff --git a/CenRa_POSTGIS/page_ajout.png b/CenRa_POSTGIS/tools/icons/page_ajout.png
similarity index 100%
rename from CenRa_POSTGIS/page_ajout.png
rename to CenRa_POSTGIS/tools/icons/page_ajout.png
diff --git a/CenRa_POSTGIS/page_new.png b/CenRa_POSTGIS/tools/icons/page_new.png
similarity index 100%
rename from CenRa_POSTGIS/page_new.png
rename to CenRa_POSTGIS/tools/icons/page_new.png
diff --git a/CenRa_POSTGIS/tools/resources.py b/CenRa_POSTGIS/tools/resources.py
index f862488..c00c6a0 100644
--- a/CenRa_POSTGIS/tools/resources.py
+++ b/CenRa_POSTGIS/tools/resources.py
@@ -89,7 +89,7 @@ def resources_path(*args):
:return: Absolute path to the resources folder.
:rtype: str
"""
- path = abspath(abspath(join(plugin_path(), "CenRa_Metabase\\resources")))
+ path = abspath(abspath(join(plugin_path(), "CenRa_POSTGIS\\tools")))
for item in args:
path = abspath(join(path, item))
return path
diff --git a/CenRa_POSTGIS/tools/ui/CenRa_IssuesSend.ui b/CenRa_POSTGIS/tools/ui/CenRa_IssuesSend.ui
new file mode 100644
index 0000000..14d923e
--- /dev/null
+++ b/CenRa_POSTGIS/tools/ui/CenRa_IssuesSend.ui
@@ -0,0 +1,332 @@
+
+
+ CenRa_IssuesSend
+
+
+
+ 0
+ 0
+ 810
+ 587
+
+
+
+ CEN-RA Metabase
+
+
+
+ icon.svgicon.svg
+
+
+
+
+ 0
+ 550
+ 811
+ 31
+
+
+
+ -
+
+
+ Annuler
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Envoyer
+
+
+
+
+
+
+
+
+ 10
+ 10
+ 791
+ 531
+
+
+
+ Issues
+
+
+
+
+ 240
+ 40
+ 321
+ 41
+
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 10
+ 101
+ 571
+ 421
+
+
+
+
+
+
+ 589
+ 100
+ 191
+ 431
+
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
+
+
+ 9
+ 9
+ 341
+ 411
+
+
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Bug
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Aide
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Question
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Amélioration
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Autre
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
+
+ 250
+ 20
+ 51
+ 21
+
+
+
+
+ Arial
+ 14
+
+
+
+ Titre:
+
+
+
+
+
+ 20
+ 70
+ 91
+ 31
+
+
+
+
+ Arial
+ 12
+
+
+
+ Messages:
+
+
+
+
+
+ 600
+ 70
+ 91
+ 31
+
+
+
+
+ Arial
+ 12
+
+
+
+ Sujet:
+
+
+
+
+
+ ok_button
+ annuler_button
+
+
+
+
diff --git a/CenRa_POSTGIS/ui_table_postgis.ui b/CenRa_POSTGIS/tools/ui/CenRa_PostgisTable_base.ui
similarity index 100%
rename from CenRa_POSTGIS/ui_table_postgis.ui
rename to CenRa_POSTGIS/tools/ui/CenRa_PostgisTable_base.ui
diff --git a/CenRa_POSTGIS/ui_cenra.ui b/CenRa_POSTGIS/tools/ui/CenRa_Postgis_base.ui
similarity index 100%
rename from CenRa_POSTGIS/ui_cenra.ui
rename to CenRa_POSTGIS/tools/ui/CenRa_Postgis_base.ui
diff --git a/CenRa_POSTGIS/forms/postgis_about_form.ui b/CenRa_POSTGIS/tools/ui/CenRa_about_form.ui
similarity index 98%
rename from CenRa_POSTGIS/forms/postgis_about_form.ui
rename to CenRa_POSTGIS/tools/ui/CenRa_about_form.ui
index 2a03633..3e3608f 100644
--- a/CenRa_POSTGIS/forms/postgis_about_form.ui
+++ b/CenRa_POSTGIS/tools/ui/CenRa_about_form.ui
@@ -11,7 +11,7 @@
- POSTGIS
+ Metabase
diff --git a/CenRa_POSTGIS/ui_cenra.py b/CenRa_POSTGIS/ui_cenra.py
deleted file mode 100644
index ccefc75..0000000
--- a/CenRa_POSTGIS/ui_cenra.py
+++ /dev/null
@@ -1,350 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'ui_cenra.ui'
-#
-# Created: Fri Aug 29 15:27:40 2014
-# by: PyQt4 UI code generator 4.9.6
-#
-# WARNING! All changes made in this file will be lost!
-
-from builtins import object
-from qgis.PyQt import QtCore, QtGui
-from qgis.PyQt.QtWidgets import *
-try:
- _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
- def _fromUtf8(s):
- return s
-
-try:
- _encoding = QApplication.UnicodeUTF8
- def _translate(context, text, disambig):
- return QApplication.translate(context, text, disambig, _encoding)
-except AttributeError:
- def _translate(context, text, disambig):
- return QApplication.translate(context, text, disambig)
-
-class Ui_cenra(object):
- def setupUi(self, cenra):
- cenra.setObjectName(_fromUtf8("cenra"))
- cenra.resize(533, 565)
- self.buttonBox = QDialogButtonBox(cenra)
- self.buttonBox.setGeometry(QtCore.QRect(350, 530, 171, 32))
- self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
- self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok)
- self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
- self.Titre = QLabel(cenra)
- self.Titre.setGeometry(QtCore.QRect(40, 10, 441, 31))
- font = QtGui.QFont()
- font.setPointSize(14)
- font.setBold(True)
- font.setWeight(75)
- self.Titre.setFont(font)
- self.Titre.setObjectName(_fromUtf8("Titre"))
- self.groupBox = QGroupBox(cenra)
- self.groupBox.setGeometry(QtCore.QRect(10, 50, 511, 121))
- font = QtGui.QFont()
- font.setBold(True)
- font.setWeight(75)
- self.groupBox.setFont(font)
- self.groupBox.setAlignment(QtCore.Qt.AlignCenter)
- self.groupBox.setObjectName(_fromUtf8("groupBox"))
- self.horizontalLayoutWidget = QWidget(self.groupBox)
- self.horizontalLayoutWidget.setGeometry(QtCore.QRect(20, 20, 126, 31))
- self.horizontalLayoutWidget.setObjectName(_fromUtf8("horizontalLayoutWidget"))
- self.horizontalLayout = QHBoxLayout(self.horizontalLayoutWidget)
- self.horizontalLayout.setMargin(0)
- self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
- self.label_dept = QLabel(self.horizontalLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_dept.setFont(font)
- self.label_dept.setObjectName(_fromUtf8("label_dept"))
- self.horizontalLayout.addWidget(self.label_dept)
- self.dept = QComboBox(self.horizontalLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.dept.setFont(font)
- self.dept.setObjectName(_fromUtf8("dept"))
- self.dept.addItem(_fromUtf8(""))
- self.dept.setItemText(0, _fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.horizontalLayout.addWidget(self.dept)
- self.horizontalLayoutWidget_2 = QWidget(self.groupBox)
- self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(20, 50, 481, 31))
- self.horizontalLayoutWidget_2.setObjectName(_fromUtf8("horizontalLayoutWidget_2"))
- self.horizontalLayout_2 = QHBoxLayout(self.horizontalLayoutWidget_2)
- self.horizontalLayout_2.setMargin(0)
- self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
- self.label_nom = QLabel(self.horizontalLayoutWidget_2)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_nom.setFont(font)
- self.label_nom.setObjectName(_fromUtf8("label_nom"))
- self.horizontalLayout_2.addWidget(self.label_nom)
- self.nom = QLineEdit(self.horizontalLayoutWidget_2)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.nom.setFont(font)
- self.nom.setObjectName(_fromUtf8("nom"))
- self.horizontalLayout_2.addWidget(self.nom)
- self.horizontalLayoutWidget_3 = QWidget(self.groupBox)
- self.horizontalLayoutWidget_3.setGeometry(QtCore.QRect(20, 80, 479, 31))
- self.horizontalLayoutWidget_3.setObjectName(_fromUtf8("horizontalLayoutWidget_3"))
- self.horizontalLayout_3 = QHBoxLayout(self.horizontalLayoutWidget_3)
- self.horizontalLayout_3.setMargin(0)
- self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3"))
- self.label_2 = QLabel(self.horizontalLayoutWidget_3)
- self.label_2.setObjectName(_fromUtf8("label_2"))
- self.horizontalLayout_3.addWidget(self.label_2)
- self.label = QLabel(self.horizontalLayoutWidget_3)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label.setFont(font)
- self.label.setObjectName(_fromUtf8("label"))
- self.horizontalLayout_3.addWidget(self.label)
- self.horizontalLayoutWidget_6 = QWidget(self.groupBox)
- self.horizontalLayoutWidget_6.setGeometry(QtCore.QRect(339, 20, 161, 31))
- self.horizontalLayoutWidget_6.setObjectName(_fromUtf8("horizontalLayoutWidget_6"))
- self.horizontalLayout_6 = QHBoxLayout(self.horizontalLayoutWidget_6)
- self.horizontalLayout_6.setMargin(0)
- self.horizontalLayout_6.setObjectName(_fromUtf8("horizontalLayout_6"))
- self.at = QCheckBox(self.horizontalLayoutWidget_6)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.at.setFont(font)
- self.at.setObjectName(_fromUtf8("at"))
- self.horizontalLayout_6.addWidget(self.at)
- self.groupBox_2 = QGroupBox(cenra)
- self.groupBox_2.setGeometry(QtCore.QRect(10, 190, 511, 241))
- font = QtGui.QFont()
- font.setBold(True)
- font.setWeight(75)
- self.groupBox_2.setFont(font)
- self.groupBox_2.setAlignment(QtCore.Qt.AlignCenter)
- self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
- self.gridLayoutWidget = QWidget(self.groupBox_2)
- self.gridLayoutWidget.setGeometry(QtCore.QRect(20, 30, 162, 141))
- self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
- self.gridLayout = QGridLayout(self.gridLayoutWidget)
- self.gridLayout.setMargin(0)
- self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
- self.couche_habitat = QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_habitat.setFont(font)
- self.couche_habitat.setObjectName(_fromUtf8("couche_habitat"))
- self.gridLayout.addWidget(self.couche_habitat, 1, 0, 1, 1)
- self.couche_contour = QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_contour.setFont(font)
- self.couche_contour.setObjectName(_fromUtf8("couche_contour"))
- self.gridLayout.addWidget(self.couche_contour, 0, 0, 1, 1)
- self.annee_4 = QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_4.setFont(font)
- self.annee_4.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_4.setObjectName(_fromUtf8("annee_4"))
- self.gridLayout.addWidget(self.annee_4, 4, 1, 1, 1)
- self.couche_travaux_prevus = QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_travaux_prevus.setFont(font)
- self.couche_travaux_prevus.setObjectName(_fromUtf8("couche_travaux_prevus"))
- self.gridLayout.addWidget(self.couche_travaux_prevus, 3, 0, 1, 1)
- self.annee_5 = QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_5.setFont(font)
- self.annee_5.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_5.setObjectName(_fromUtf8("annee_5"))
- self.gridLayout.addWidget(self.annee_5, 3, 1, 1, 1)
- self.couche_vierge = QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge.setFont(font)
- self.couche_vierge.setObjectName(_fromUtf8("couche_vierge"))
- self.gridLayout.addWidget(self.couche_vierge, 4, 0, 1, 1)
- self.annee_1 = QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_1.setFont(font)
- self.annee_1.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_1.setObjectName(_fromUtf8("annee_1"))
- self.gridLayout.addWidget(self.annee_1, 0, 1, 1, 1)
- self.annee_2 = QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_2.setFont(font)
- self.annee_2.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_2.setObjectName(_fromUtf8("annee_2"))
- self.gridLayout.addWidget(self.annee_2, 1, 1, 1, 1)
- self.horizontalLayoutWidget_4 = QWidget(self.groupBox_2)
- self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(50, 170, 451, 31))
- self.horizontalLayoutWidget_4.setObjectName(_fromUtf8("horizontalLayoutWidget_4"))
- self.horizontalLayout_4 = QHBoxLayout(self.horizontalLayoutWidget_4)
- self.horizontalLayout_4.setMargin(0)
- self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
- self.label_nom_couche_vierge = QLabel(self.horizontalLayoutWidget_4)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_nom_couche_vierge.setFont(font)
- self.label_nom_couche_vierge.setObjectName(_fromUtf8("label_nom_couche_vierge"))
- self.horizontalLayout_4.addWidget(self.label_nom_couche_vierge)
- self.nom_couche_vierge = QLineEdit(self.horizontalLayoutWidget_4)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.nom_couche_vierge.setFont(font)
- self.nom_couche_vierge.setObjectName(_fromUtf8("nom_couche_vierge"))
- self.horizontalLayout_4.addWidget(self.nom_couche_vierge)
- self.horizontalLayoutWidget_5 = QWidget(self.groupBox_2)
- self.horizontalLayoutWidget_5.setGeometry(QtCore.QRect(50, 200, 341, 31))
- self.horizontalLayoutWidget_5.setObjectName(_fromUtf8("horizontalLayoutWidget_5"))
- self.horizontalLayout_5 = QHBoxLayout(self.horizontalLayoutWidget_5)
- self.horizontalLayout_5.setMargin(0)
- self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5"))
- self.label_geom_couche_vierge = QLabel(self.horizontalLayoutWidget_5)
- self.label_geom_couche_vierge.setMinimumSize(QtCore.QSize(152, 0))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_geom_couche_vierge.setFont(font)
- self.label_geom_couche_vierge.setObjectName(_fromUtf8("label_geom_couche_vierge"))
- self.horizontalLayout_5.addWidget(self.label_geom_couche_vierge)
- self.couche_vierge_point = QRadioButton(self.horizontalLayoutWidget_5)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge_point.setFont(font)
- self.couche_vierge_point.setObjectName(_fromUtf8("couche_vierge_point"))
- self.horizontalLayout_5.addWidget(self.couche_vierge_point)
- self.couche_vierge_ligne = QRadioButton(self.horizontalLayoutWidget_5)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge_ligne.setFont(font)
- self.couche_vierge_ligne.setObjectName(_fromUtf8("couche_vierge_ligne"))
- self.horizontalLayout_5.addWidget(self.couche_vierge_ligne)
- self.couche_vierge_polygone = QRadioButton(self.horizontalLayoutWidget_5)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge_polygone.setFont(font)
- self.couche_vierge_polygone.setObjectName(_fromUtf8("couche_vierge_polygone"))
- self.horizontalLayout_5.addWidget(self.couche_vierge_polygone)
- self.label_3 = QLabel(self.groupBox_2)
- self.label_3.setGeometry(QtCore.QRect(320, 60, 60, 29))
- self.label_3.setObjectName(_fromUtf8("label_3"))
- self.label_4 = QLabel(self.groupBox_2)
- self.label_4.setGeometry(QtCore.QRect(240, 90, 221, 16))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_4.setFont(font)
- self.label_4.setObjectName(_fromUtf8("label_4"))
- self.label_5 = QLabel(self.groupBox_2)
- self.label_5.setGeometry(QtCore.QRect(240, 110, 221, 16))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_5.setFont(font)
- self.label_5.setAlignment(QtCore.Qt.AlignCenter)
- self.label_5.setObjectName(_fromUtf8("label_5"))
- self.groupBox_3 = QGroupBox(cenra)
- self.groupBox_3.setGeometry(QtCore.QRect(10, 440, 511, 81))
- font = QtGui.QFont()
- font.setBold(True)
- font.setItalic(True)
- font.setWeight(75)
- self.groupBox_3.setFont(font)
- self.groupBox_3.setAlignment(QtCore.Qt.AlignCenter)
- self.groupBox_3.setObjectName(_fromUtf8("groupBox_3"))
- self.label_6 = QLabel(self.groupBox_3)
- self.label_6.setGeometry(QtCore.QRect(20, 20, 471, 16))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_6.setFont(font)
- self.label_6.setObjectName(_fromUtf8("label_6"))
- self.label_7 = QLabel(self.groupBox_3)
- self.label_7.setGeometry(QtCore.QRect(120, 50, 141, 16))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_7.setFont(font)
- self.label_7.setObjectName(_fromUtf8("label_7"))
- self.label_8 = QLabel(self.groupBox_3)
- self.label_8.setGeometry(QtCore.QRect(270, 40, 41, 41))
- self.label_8.setText(_fromUtf8(""))
- self.label_8.setTextFormat(QtCore.Qt.PlainText)
- self.label_8.setPixmap(QtGui.QPixmap(_fromUtf8("page_ajout.png")))
- self.label_8.setObjectName(_fromUtf8("label_8"))
-
- self.retranslateUi(cenra)
- #QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), cenra.accept)
- self.buttonBox.accepted.connect(cenra.accept)
- #QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), cenra.reject)
- self.buttonBox.rejected.connect(cenra.reject)
- QtCore.QMetaObject.connectSlotsByName(cenra)
-
- def retranslateUi(self, cenra):
- cenra.setWindowTitle(_translate("cenra", "Nouveau Projet Cartographique", None))
- self.Titre.setText(_translate("cenra", "Création d\'un nouveau dossier cartographique", None))
- self.groupBox.setTitle(_translate("cenra", "Généralités", None))
- self.label_dept.setText(_translate("cenra", "Département :", None))
- self.dept.setItemText(1, _translate("cenra", "00", None))
- self.dept.setItemText(2, _translate("cenra", "01", None))
- self.dept.setItemText(3, _translate("cenra", "07", None))
- self.dept.setItemText(4, _translate("cenra", "26", None))
- self.dept.setItemText(5, _translate("cenra", "42", None))
- self.dept.setItemText(6, _translate("cenra", "69", None))
- self.dept.setItemText(7, _translate("cenra", "form", None))
- self.label_nom.setText(_translate("cenra", "Code analytique et Nom du site :", None))
- self.label_2.setText(_translate("cenra", "Attention :", None))
- self.label.setText(_translate("cenra", "Le code analytique ne doit comporter ni caractères spéciaux, ni espaces, ni majuscules", None))
- self.at.setText(_translate("cenra", "Animation Territoriale", None))
- self.groupBox_2.setTitle(_translate("cenra", "Liste des couches à ajouter lors de la création", None))
- self.couche_habitat.setText(_translate("cenra", "Habitat", None))
- self.couche_contour.setText(_translate("cenra", "Contour", None))
- self.annee_4.setText(_translate("cenra", "aaaa", None))
- self.couche_travaux_prevus.setText(_translate("cenra", "Travaux Prévus", None))
- self.annee_5.setText(_translate("cenra", "aaaa", None))
- self.couche_vierge.setText(_translate("cenra", "Vierge", None))
- self.annee_1.setText(_translate("cenra", "aaaa", None))
- self.annee_2.setText(_translate("cenra", "aaaa", None))
- self.label_nom_couche_vierge.setText(_translate("cenra", "- Nom de la couche vierge :", None))
- self.label_geom_couche_vierge.setText(_translate("cenra", "- Geométrie de la couche vierge :", None))
- self.couche_vierge_point.setText(_translate("cenra", "Point", None))
- self.couche_vierge_ligne.setText(_translate("cenra", "Ligne", None))
- self.couche_vierge_polygone.setText(_translate("cenra", "Polygone", None))
- self.label_3.setText(_translate("cenra", "Attention :", None))
- self.label_4.setText(_translate("cenra", "Le nom de la couche vierge ne doit comporter", None))
- self.label_5.setText(_translate("cenra", "ni caractères spéciaux, ni espaces", None))
- self.groupBox_3.setTitle(_translate("cenra", "Note", None))
- self.label_6.setText(_translate("cenra", "Vous pourez à tous moment ajouter de nouvelles couches à votre dossier, à l\'aide de l\'outil :", None))
- self.label_7.setText(_translate("cenra", "Ajout de nouvelles couches", None))
-
diff --git a/CenRa_POSTGIS/ui_cenra.py.bak b/CenRa_POSTGIS/ui_cenra.py.bak
deleted file mode 100644
index 89b0929..0000000
--- a/CenRa_POSTGIS/ui_cenra.py.bak
+++ /dev/null
@@ -1,345 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'ui_cenra.ui'
-#
-# Created: Fri Aug 29 15:27:40 2014
-# by: PyQt4 UI code generator 4.9.6
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-try:
- _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
- def _fromUtf8(s):
- return s
-
-try:
- _encoding = QtGui.QApplication.UnicodeUTF8
- def _translate(context, text, disambig):
- return QtGui.QApplication.translate(context, text, disambig, _encoding)
-except AttributeError:
- def _translate(context, text, disambig):
- return QtGui.QApplication.translate(context, text, disambig)
-
-class Ui_cenra(object):
- def setupUi(self, cenra):
- cenra.setObjectName(_fromUtf8("cenra"))
- cenra.resize(533, 565)
- self.buttonBox = QtGui.QDialogButtonBox(cenra)
- self.buttonBox.setGeometry(QtCore.QRect(350, 530, 171, 32))
- self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
- self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
- self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
- self.Titre = QtGui.QLabel(cenra)
- self.Titre.setGeometry(QtCore.QRect(40, 10, 441, 31))
- font = QtGui.QFont()
- font.setPointSize(14)
- font.setBold(True)
- font.setWeight(75)
- self.Titre.setFont(font)
- self.Titre.setObjectName(_fromUtf8("Titre"))
- self.groupBox = QtGui.QGroupBox(cenra)
- self.groupBox.setGeometry(QtCore.QRect(10, 50, 511, 121))
- font = QtGui.QFont()
- font.setBold(True)
- font.setWeight(75)
- self.groupBox.setFont(font)
- self.groupBox.setAlignment(QtCore.Qt.AlignCenter)
- self.groupBox.setObjectName(_fromUtf8("groupBox"))
- self.horizontalLayoutWidget = QtGui.QWidget(self.groupBox)
- self.horizontalLayoutWidget.setGeometry(QtCore.QRect(20, 20, 126, 31))
- self.horizontalLayoutWidget.setObjectName(_fromUtf8("horizontalLayoutWidget"))
- self.horizontalLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget)
- self.horizontalLayout.setMargin(0)
- self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
- self.label_dept = QtGui.QLabel(self.horizontalLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_dept.setFont(font)
- self.label_dept.setObjectName(_fromUtf8("label_dept"))
- self.horizontalLayout.addWidget(self.label_dept)
- self.dept = QtGui.QComboBox(self.horizontalLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.dept.setFont(font)
- self.dept.setObjectName(_fromUtf8("dept"))
- self.dept.addItem(_fromUtf8(""))
- self.dept.setItemText(0, _fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.dept.addItem(_fromUtf8(""))
- self.horizontalLayout.addWidget(self.dept)
- self.horizontalLayoutWidget_2 = QtGui.QWidget(self.groupBox)
- self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(20, 50, 481, 31))
- self.horizontalLayoutWidget_2.setObjectName(_fromUtf8("horizontalLayoutWidget_2"))
- self.horizontalLayout_2 = QtGui.QHBoxLayout(self.horizontalLayoutWidget_2)
- self.horizontalLayout_2.setMargin(0)
- self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
- self.label_nom = QtGui.QLabel(self.horizontalLayoutWidget_2)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_nom.setFont(font)
- self.label_nom.setObjectName(_fromUtf8("label_nom"))
- self.horizontalLayout_2.addWidget(self.label_nom)
- self.nom = QtGui.QLineEdit(self.horizontalLayoutWidget_2)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.nom.setFont(font)
- self.nom.setObjectName(_fromUtf8("nom"))
- self.horizontalLayout_2.addWidget(self.nom)
- self.horizontalLayoutWidget_3 = QtGui.QWidget(self.groupBox)
- self.horizontalLayoutWidget_3.setGeometry(QtCore.QRect(20, 80, 479, 31))
- self.horizontalLayoutWidget_3.setObjectName(_fromUtf8("horizontalLayoutWidget_3"))
- self.horizontalLayout_3 = QtGui.QHBoxLayout(self.horizontalLayoutWidget_3)
- self.horizontalLayout_3.setMargin(0)
- self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3"))
- self.label_2 = QtGui.QLabel(self.horizontalLayoutWidget_3)
- self.label_2.setObjectName(_fromUtf8("label_2"))
- self.horizontalLayout_3.addWidget(self.label_2)
- self.label = QtGui.QLabel(self.horizontalLayoutWidget_3)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label.setFont(font)
- self.label.setObjectName(_fromUtf8("label"))
- self.horizontalLayout_3.addWidget(self.label)
- self.horizontalLayoutWidget_6 = QtGui.QWidget(self.groupBox)
- self.horizontalLayoutWidget_6.setGeometry(QtCore.QRect(339, 20, 161, 31))
- self.horizontalLayoutWidget_6.setObjectName(_fromUtf8("horizontalLayoutWidget_6"))
- self.horizontalLayout_6 = QtGui.QHBoxLayout(self.horizontalLayoutWidget_6)
- self.horizontalLayout_6.setMargin(0)
- self.horizontalLayout_6.setObjectName(_fromUtf8("horizontalLayout_6"))
- self.at = QtGui.QCheckBox(self.horizontalLayoutWidget_6)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.at.setFont(font)
- self.at.setObjectName(_fromUtf8("at"))
- self.horizontalLayout_6.addWidget(self.at)
- self.groupBox_2 = QtGui.QGroupBox(cenra)
- self.groupBox_2.setGeometry(QtCore.QRect(10, 190, 511, 241))
- font = QtGui.QFont()
- font.setBold(True)
- font.setWeight(75)
- self.groupBox_2.setFont(font)
- self.groupBox_2.setAlignment(QtCore.Qt.AlignCenter)
- self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
- self.gridLayoutWidget = QtGui.QWidget(self.groupBox_2)
- self.gridLayoutWidget.setGeometry(QtCore.QRect(20, 30, 162, 141))
- self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
- self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget)
- self.gridLayout.setMargin(0)
- self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
- self.couche_habitat = QtGui.QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_habitat.setFont(font)
- self.couche_habitat.setObjectName(_fromUtf8("couche_habitat"))
- self.gridLayout.addWidget(self.couche_habitat, 1, 0, 1, 1)
- self.couche_contour = QtGui.QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_contour.setFont(font)
- self.couche_contour.setObjectName(_fromUtf8("couche_contour"))
- self.gridLayout.addWidget(self.couche_contour, 0, 0, 1, 1)
- self.annee_4 = QtGui.QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_4.setFont(font)
- self.annee_4.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_4.setObjectName(_fromUtf8("annee_4"))
- self.gridLayout.addWidget(self.annee_4, 4, 1, 1, 1)
- self.couche_travaux_prevus = QtGui.QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_travaux_prevus.setFont(font)
- self.couche_travaux_prevus.setObjectName(_fromUtf8("couche_travaux_prevus"))
- self.gridLayout.addWidget(self.couche_travaux_prevus, 3, 0, 1, 1)
- self.annee_5 = QtGui.QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_5.setFont(font)
- self.annee_5.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_5.setObjectName(_fromUtf8("annee_5"))
- self.gridLayout.addWidget(self.annee_5, 3, 1, 1, 1)
- self.couche_vierge = QtGui.QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge.setFont(font)
- self.couche_vierge.setObjectName(_fromUtf8("couche_vierge"))
- self.gridLayout.addWidget(self.couche_vierge, 4, 0, 1, 1)
- self.annee_1 = QtGui.QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_1.setFont(font)
- self.annee_1.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_1.setObjectName(_fromUtf8("annee_1"))
- self.gridLayout.addWidget(self.annee_1, 0, 1, 1, 1)
- self.annee_2 = QtGui.QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_2.setFont(font)
- self.annee_2.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_2.setObjectName(_fromUtf8("annee_2"))
- self.gridLayout.addWidget(self.annee_2, 1, 1, 1, 1)
- self.horizontalLayoutWidget_4 = QtGui.QWidget(self.groupBox_2)
- self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(50, 170, 451, 31))
- self.horizontalLayoutWidget_4.setObjectName(_fromUtf8("horizontalLayoutWidget_4"))
- self.horizontalLayout_4 = QtGui.QHBoxLayout(self.horizontalLayoutWidget_4)
- self.horizontalLayout_4.setMargin(0)
- self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
- self.label_nom_couche_vierge = QtGui.QLabel(self.horizontalLayoutWidget_4)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_nom_couche_vierge.setFont(font)
- self.label_nom_couche_vierge.setObjectName(_fromUtf8("label_nom_couche_vierge"))
- self.horizontalLayout_4.addWidget(self.label_nom_couche_vierge)
- self.nom_couche_vierge = QtGui.QLineEdit(self.horizontalLayoutWidget_4)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.nom_couche_vierge.setFont(font)
- self.nom_couche_vierge.setObjectName(_fromUtf8("nom_couche_vierge"))
- self.horizontalLayout_4.addWidget(self.nom_couche_vierge)
- self.horizontalLayoutWidget_5 = QtGui.QWidget(self.groupBox_2)
- self.horizontalLayoutWidget_5.setGeometry(QtCore.QRect(50, 200, 341, 31))
- self.horizontalLayoutWidget_5.setObjectName(_fromUtf8("horizontalLayoutWidget_5"))
- self.horizontalLayout_5 = QtGui.QHBoxLayout(self.horizontalLayoutWidget_5)
- self.horizontalLayout_5.setMargin(0)
- self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5"))
- self.label_geom_couche_vierge = QtGui.QLabel(self.horizontalLayoutWidget_5)
- self.label_geom_couche_vierge.setMinimumSize(QtCore.QSize(152, 0))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_geom_couche_vierge.setFont(font)
- self.label_geom_couche_vierge.setObjectName(_fromUtf8("label_geom_couche_vierge"))
- self.horizontalLayout_5.addWidget(self.label_geom_couche_vierge)
- self.couche_vierge_point = QtGui.QRadioButton(self.horizontalLayoutWidget_5)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge_point.setFont(font)
- self.couche_vierge_point.setObjectName(_fromUtf8("couche_vierge_point"))
- self.horizontalLayout_5.addWidget(self.couche_vierge_point)
- self.couche_vierge_ligne = QtGui.QRadioButton(self.horizontalLayoutWidget_5)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge_ligne.setFont(font)
- self.couche_vierge_ligne.setObjectName(_fromUtf8("couche_vierge_ligne"))
- self.horizontalLayout_5.addWidget(self.couche_vierge_ligne)
- self.couche_vierge_polygone = QtGui.QRadioButton(self.horizontalLayoutWidget_5)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge_polygone.setFont(font)
- self.couche_vierge_polygone.setObjectName(_fromUtf8("couche_vierge_polygone"))
- self.horizontalLayout_5.addWidget(self.couche_vierge_polygone)
- self.label_3 = QtGui.QLabel(self.groupBox_2)
- self.label_3.setGeometry(QtCore.QRect(320, 60, 60, 29))
- self.label_3.setObjectName(_fromUtf8("label_3"))
- self.label_4 = QtGui.QLabel(self.groupBox_2)
- self.label_4.setGeometry(QtCore.QRect(240, 90, 221, 16))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_4.setFont(font)
- self.label_4.setObjectName(_fromUtf8("label_4"))
- self.label_5 = QtGui.QLabel(self.groupBox_2)
- self.label_5.setGeometry(QtCore.QRect(240, 110, 221, 16))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_5.setFont(font)
- self.label_5.setAlignment(QtCore.Qt.AlignCenter)
- self.label_5.setObjectName(_fromUtf8("label_5"))
- self.groupBox_3 = QtGui.QGroupBox(cenra)
- self.groupBox_3.setGeometry(QtCore.QRect(10, 440, 511, 81))
- font = QtGui.QFont()
- font.setBold(True)
- font.setItalic(True)
- font.setWeight(75)
- self.groupBox_3.setFont(font)
- self.groupBox_3.setAlignment(QtCore.Qt.AlignCenter)
- self.groupBox_3.setObjectName(_fromUtf8("groupBox_3"))
- self.label_6 = QtGui.QLabel(self.groupBox_3)
- self.label_6.setGeometry(QtCore.QRect(20, 20, 471, 16))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_6.setFont(font)
- self.label_6.setObjectName(_fromUtf8("label_6"))
- self.label_7 = QtGui.QLabel(self.groupBox_3)
- self.label_7.setGeometry(QtCore.QRect(120, 50, 141, 16))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_7.setFont(font)
- self.label_7.setObjectName(_fromUtf8("label_7"))
- self.label_8 = QtGui.QLabel(self.groupBox_3)
- self.label_8.setGeometry(QtCore.QRect(270, 40, 41, 41))
- self.label_8.setText(_fromUtf8(""))
- self.label_8.setTextFormat(QtCore.Qt.PlainText)
- self.label_8.setPixmap(QtGui.QPixmap(_fromUtf8("page_ajout.png")))
- self.label_8.setObjectName(_fromUtf8("label_8"))
-
- self.retranslateUi(cenra)
- QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), cenra.accept)
- QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), cenra.reject)
- QtCore.QMetaObject.connectSlotsByName(cenra)
-
- def retranslateUi(self, cenra):
- cenra.setWindowTitle(_translate("cenra", "Nouveau Projet Cartographique", None))
- self.Titre.setText(_translate("cenra", "Création d\'un nouveau dossier cartographique", None))
- self.groupBox.setTitle(_translate("cenra", "Généralités", None))
- self.label_dept.setText(_translate("cenra", "Département :", None))
- self.dept.setItemText(1, _translate("cenra", "01", None))
- self.dept.setItemText(2, _translate("cenra", "07", None))
- self.dept.setItemText(3, _translate("cenra", "26", None))
- self.dept.setItemText(4, _translate("cenra", "42", None))
- self.dept.setItemText(5, _translate("cenra", "69", None))
- self.dept.setItemText(6, _translate("cenra", "form", None))
- self.label_nom.setText(_translate("cenra", "Nom du dossier :", None))
- self.label_2.setText(_translate("cenra", "Attention :", None))
- self.label.setText(_translate("cenra", "Le nom du dossier ne doit comporter ni caractères spéciaux, ni espaces, ni majuscules", None))
- self.at.setText(_translate("cenra", "Animation Territoriale", None))
- self.groupBox_2.setTitle(_translate("cenra", "Liste des couches à ajouter lors de la création", None))
- self.couche_habitat.setText(_translate("cenra", "Habitat", None))
- self.couche_contour.setText(_translate("cenra", "Contour", None))
- self.annee_4.setText(_translate("cenra", "aaaa", None))
- self.couche_travaux_prevus.setText(_translate("cenra", "Travaux Prévus", None))
- self.annee_5.setText(_translate("cenra", "aaaa", None))
- self.couche_vierge.setText(_translate("cenra", "Vierge", None))
- self.annee_1.setText(_translate("cenra", "aaaa", None))
- self.annee_2.setText(_translate("cenra", "aaaa", None))
- self.label_nom_couche_vierge.setText(_translate("cenra", "- Nom de la couche vierge :", None))
- self.label_geom_couche_vierge.setText(_translate("cenra", "- Geométrie de la couche vierge :", None))
- self.couche_vierge_point.setText(_translate("cenra", "Point", None))
- self.couche_vierge_ligne.setText(_translate("cenra", "Ligne", None))
- self.couche_vierge_polygone.setText(_translate("cenra", "Polygone", None))
- self.label_3.setText(_translate("cenra", "Attention :", None))
- self.label_4.setText(_translate("cenra", "Le nom de la couche vierge ne doit comporter", None))
- self.label_5.setText(_translate("cenra", "ni caractères spéciaux, ni espaces", None))
- self.groupBox_3.setTitle(_translate("cenra", "Note", None))
- self.label_6.setText(_translate("cenra", "Vous pourez à tous moment ajouter de nouvelles couches à votre dossier, à l\'aide de l\'outil :", None))
- self.label_7.setText(_translate("cenra", "Ajout de nouvelles couches", None))
-
diff --git a/CenRa_POSTGIS/ui_table_postgis.py b/CenRa_POSTGIS/ui_table_postgis.py
deleted file mode 100644
index 811244f..0000000
--- a/CenRa_POSTGIS/ui_table_postgis.py
+++ /dev/null
@@ -1,234 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'ui_table_postgis.ui'
-#
-# Created: Thu Mar 27 16:17:32 2014
-# by: PyQt4 UI code generator 4.9.6
-#
-# WARNING! All changes made in this file will be lost!
-
-from builtins import object
-from qgis.PyQt import QtCore, QtGui
-from qgis.PyQt.QtWidgets import *
-
-try:
- _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
- def _fromUtf8(s):
- return s
-
-try:
- _encoding = QApplication.UnicodeUTF8
- def _translate(context, text, disambig):
- return QApplication.translate(context, text, disambig, _encoding)
-except AttributeError:
- def _translate(context, text, disambig):
- return QApplication.translate(context, text, disambig)
-
-class Ui_table_postgis(object):
- def setupUi(self, table_postgis):
- table_postgis.setObjectName(_fromUtf8("table_postgis"))
- table_postgis.resize(532, 364)
- self.buttonBox = QDialogButtonBox(table_postgis)
- self.buttonBox.setGeometry(QtCore.QRect(360, 330, 161, 32))
- self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
- self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok)
- self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
- self.Titre = QLabel(table_postgis)
- self.Titre.setGeometry(QtCore.QRect(170, 0, 171, 31))
- font = QtGui.QFont()
- font.setPointSize(14)
- font.setBold(True)
- font.setWeight(75)
- self.Titre.setFont(font)
- self.Titre.setObjectName(_fromUtf8("Titre"))
- self.groupBox_2 = QGroupBox(table_postgis)
- self.groupBox_2.setGeometry(QtCore.QRect(10, 80, 511, 241))
- font = QtGui.QFont()
- font.setBold(True)
- font.setWeight(75)
- self.groupBox_2.setFont(font)
- self.groupBox_2.setAlignment(QtCore.Qt.AlignCenter)
- self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
- self.gridLayoutWidget = QWidget(self.groupBox_2)
- self.gridLayoutWidget.setGeometry(QtCore.QRect(20, 30, 162, 141))
- self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
- self.gridLayout = QGridLayout(self.gridLayoutWidget)
- self.gridLayout.setMargin(0)
- self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
- self.couche_habitat = QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_habitat.setFont(font)
- self.couche_habitat.setObjectName(_fromUtf8("couche_habitat"))
- self.gridLayout.addWidget(self.couche_habitat, 1, 0, 1, 1)
- self.couche_contour = QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_contour.setFont(font)
- self.couche_contour.setObjectName(_fromUtf8("couche_contour"))
- self.gridLayout.addWidget(self.couche_contour, 0, 0, 1, 1)
- self.annee_4 = QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_4.setFont(font)
- self.annee_4.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_4.setObjectName(_fromUtf8("annee_4"))
- self.gridLayout.addWidget(self.annee_4, 4, 1, 1, 1)
- self.couche_travaux_prevus = QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_travaux_prevus.setFont(font)
- self.couche_travaux_prevus.setObjectName(_fromUtf8("couche_travaux_prevus"))
- self.gridLayout.addWidget(self.couche_travaux_prevus, 3, 0, 1, 1)
- self.annee_5 = QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_5.setFont(font)
- self.annee_5.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_5.setObjectName(_fromUtf8("annee_5"))
- self.gridLayout.addWidget(self.annee_5, 3, 1, 1, 1)
- self.couche_vierge = QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge.setFont(font)
- self.couche_vierge.setObjectName(_fromUtf8("couche_vierge"))
- self.gridLayout.addWidget(self.couche_vierge, 4, 0, 1, 1)
- self.annee_1 = QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_1.setFont(font)
- self.annee_1.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_1.setObjectName(_fromUtf8("annee_1"))
- self.gridLayout.addWidget(self.annee_1, 0, 1, 1, 1)
- self.annee_2 = QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_2.setFont(font)
- self.annee_2.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_2.setObjectName(_fromUtf8("annee_2"))
- self.gridLayout.addWidget(self.annee_2, 1, 1, 1, 1)
- self.horizontalLayoutWidget_4 = QWidget(self.groupBox_2)
- self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(50, 170, 451, 31))
- self.horizontalLayoutWidget_4.setObjectName(_fromUtf8("horizontalLayoutWidget_4"))
- self.horizontalLayout_4 = QHBoxLayout(self.horizontalLayoutWidget_4)
- self.horizontalLayout_4.setMargin(0)
- self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
- self.label_nom_couche_vierge = QLabel(self.horizontalLayoutWidget_4)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_nom_couche_vierge.setFont(font)
- self.label_nom_couche_vierge.setObjectName(_fromUtf8("label_nom_couche_vierge"))
- self.horizontalLayout_4.addWidget(self.label_nom_couche_vierge)
- self.nom_couche_vierge = QLineEdit(self.horizontalLayoutWidget_4)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.nom_couche_vierge.setFont(font)
- self.nom_couche_vierge.setObjectName(_fromUtf8("nom_couche_vierge"))
- self.horizontalLayout_4.addWidget(self.nom_couche_vierge)
- self.horizontalLayoutWidget_5 = QWidget(self.groupBox_2)
- self.horizontalLayoutWidget_5.setGeometry(QtCore.QRect(50, 200, 341, 31))
- self.horizontalLayoutWidget_5.setObjectName(_fromUtf8("horizontalLayoutWidget_5"))
- self.horizontalLayout_5 = QHBoxLayout(self.horizontalLayoutWidget_5)
- self.horizontalLayout_5.setMargin(0)
- self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5"))
- self.label_geom_couche_vierge = QLabel(self.horizontalLayoutWidget_5)
- self.label_geom_couche_vierge.setMinimumSize(QtCore.QSize(152, 0))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_geom_couche_vierge.setFont(font)
- self.label_geom_couche_vierge.setObjectName(_fromUtf8("label_geom_couche_vierge"))
- self.horizontalLayout_5.addWidget(self.label_geom_couche_vierge)
- self.couche_vierge_point = QRadioButton(self.horizontalLayoutWidget_5)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge_point.setFont(font)
- self.couche_vierge_point.setObjectName(_fromUtf8("couche_vierge_point"))
- self.horizontalLayout_5.addWidget(self.couche_vierge_point)
- self.couche_vierge_ligne = QRadioButton(self.horizontalLayoutWidget_5)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge_ligne.setFont(font)
- self.couche_vierge_ligne.setObjectName(_fromUtf8("couche_vierge_ligne"))
- self.horizontalLayout_5.addWidget(self.couche_vierge_ligne)
- self.couche_vierge_polygone = QRadioButton(self.horizontalLayoutWidget_5)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge_polygone.setFont(font)
- self.couche_vierge_polygone.setObjectName(_fromUtf8("couche_vierge_polygone"))
- self.horizontalLayout_5.addWidget(self.couche_vierge_polygone)
- self.label_3 = QLabel(self.groupBox_2)
- self.label_3.setGeometry(QtCore.QRect(320, 60, 60, 29))
- self.label_3.setObjectName(_fromUtf8("label_3"))
- self.label_4 = QLabel(self.groupBox_2)
- self.label_4.setGeometry(QtCore.QRect(240, 90, 221, 16))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_4.setFont(font)
- self.label_4.setObjectName(_fromUtf8("label_4"))
- self.label_5 = QLabel(self.groupBox_2)
- self.label_5.setGeometry(QtCore.QRect(240, 110, 221, 16))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_5.setFont(font)
- self.label_5.setAlignment(QtCore.Qt.AlignCenter)
- self.label_5.setObjectName(_fromUtf8("label_5"))
- self.horizontalLayoutWidget = QWidget(table_postgis)
- self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 40, 511, 31))
- self.horizontalLayoutWidget.setObjectName(_fromUtf8("horizontalLayoutWidget"))
- self.horizontalLayout = QHBoxLayout(self.horizontalLayoutWidget)
- self.horizontalLayout.setMargin(0)
- self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
- self.schema_label = QLabel(self.horizontalLayoutWidget)
- self.schema_label.setMaximumSize(QtCore.QSize(85, 16777215))
- self.schema_label.setObjectName(_fromUtf8("schema_label"))
- self.horizontalLayout.addWidget(self.schema_label)
- self.schema = QComboBox(self.horizontalLayoutWidget)
- self.schema.setObjectName(_fromUtf8("schema"))
- self.horizontalLayout.addWidget(self.schema)
-
- self.retranslateUi(table_postgis)
- #QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), table_postgis.accept)
- self.buttonBox.accepted.connect(table_postgis.accept)
- #QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), table_postgis.reject)
- self.buttonBox.rejected.connect(table_postgis.reject)
- QtCore.QMetaObject.connectSlotsByName(table_postgis)
-
- def retranslateUi(self, table_postgis):
- table_postgis.setWindowTitle(_translate("table_postgis", "Ajout d\'une table", None))
- self.Titre.setText(_translate("table_postgis", "Création de table", None))
- self.groupBox_2.setTitle(_translate("table_postgis", "Liste des couches à ajouter dans le projet", None))
- self.couche_habitat.setText(_translate("table_postgis", "Habitat", None))
- self.couche_contour.setText(_translate("table_postgis", "Contour", None))
- self.annee_4.setText(_translate("table_postgis", "aaaa", None))
- self.couche_travaux_prevus.setText(_translate("table_postgis", "Travaux Prévus", None))
- self.annee_5.setText(_translate("table_postgis", "aaaa", None))
- self.couche_vierge.setText(_translate("table_postgis", "Vierge", None))
- self.annee_1.setText(_translate("table_postgis", "aaaa", None))
- self.annee_2.setText(_translate("table_postgis", "aaaa", None))
- self.label_nom_couche_vierge.setText(_translate("table_postgis", "- Nom de la couche vierge :", None))
- self.label_geom_couche_vierge.setText(_translate("table_postgis", "- Geométrie de la couche vierge :", None))
- self.couche_vierge_point.setText(_translate("table_postgis", "Point", None))
- self.couche_vierge_ligne.setText(_translate("table_postgis", "Ligne", None))
- self.couche_vierge_polygone.setText(_translate("table_postgis", "Polygone", None))
- self.label_3.setText(_translate("table_postgis", "Attention :", None))
- self.label_4.setText(_translate("table_postgis", "Le nom de la couche vierge ne doit comporter", None))
- self.label_5.setText(_translate("table_postgis", "ni caractères spéciaux, ni espaces", None))
- self.schema_label.setText(_translate("table_postgis", "Code analytique :", None))
-
diff --git a/CenRa_POSTGIS/ui_table_postgis.py.bak b/CenRa_POSTGIS/ui_table_postgis.py.bak
deleted file mode 100644
index e859f18..0000000
--- a/CenRa_POSTGIS/ui_table_postgis.py.bak
+++ /dev/null
@@ -1,230 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'ui_table_postgis.ui'
-#
-# Created: Thu Mar 27 16:17:32 2014
-# by: PyQt4 UI code generator 4.9.6
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-try:
- _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
- def _fromUtf8(s):
- return s
-
-try:
- _encoding = QtGui.QApplication.UnicodeUTF8
- def _translate(context, text, disambig):
- return QtGui.QApplication.translate(context, text, disambig, _encoding)
-except AttributeError:
- def _translate(context, text, disambig):
- return QtGui.QApplication.translate(context, text, disambig)
-
-class Ui_table_postgis(object):
- def setupUi(self, table_postgis):
- table_postgis.setObjectName(_fromUtf8("table_postgis"))
- table_postgis.resize(532, 364)
- self.buttonBox = QtGui.QDialogButtonBox(table_postgis)
- self.buttonBox.setGeometry(QtCore.QRect(360, 330, 161, 32))
- self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
- self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
- self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
- self.Titre = QtGui.QLabel(table_postgis)
- self.Titre.setGeometry(QtCore.QRect(170, 0, 171, 31))
- font = QtGui.QFont()
- font.setPointSize(14)
- font.setBold(True)
- font.setWeight(75)
- self.Titre.setFont(font)
- self.Titre.setObjectName(_fromUtf8("Titre"))
- self.groupBox_2 = QtGui.QGroupBox(table_postgis)
- self.groupBox_2.setGeometry(QtCore.QRect(10, 80, 511, 241))
- font = QtGui.QFont()
- font.setBold(True)
- font.setWeight(75)
- self.groupBox_2.setFont(font)
- self.groupBox_2.setAlignment(QtCore.Qt.AlignCenter)
- self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
- self.gridLayoutWidget = QtGui.QWidget(self.groupBox_2)
- self.gridLayoutWidget.setGeometry(QtCore.QRect(20, 30, 162, 141))
- self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
- self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget)
- self.gridLayout.setMargin(0)
- self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
- self.couche_habitat = QtGui.QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_habitat.setFont(font)
- self.couche_habitat.setObjectName(_fromUtf8("couche_habitat"))
- self.gridLayout.addWidget(self.couche_habitat, 1, 0, 1, 1)
- self.couche_contour = QtGui.QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_contour.setFont(font)
- self.couche_contour.setObjectName(_fromUtf8("couche_contour"))
- self.gridLayout.addWidget(self.couche_contour, 0, 0, 1, 1)
- self.annee_4 = QtGui.QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_4.setFont(font)
- self.annee_4.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_4.setObjectName(_fromUtf8("annee_4"))
- self.gridLayout.addWidget(self.annee_4, 4, 1, 1, 1)
- self.couche_travaux_prevus = QtGui.QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_travaux_prevus.setFont(font)
- self.couche_travaux_prevus.setObjectName(_fromUtf8("couche_travaux_prevus"))
- self.gridLayout.addWidget(self.couche_travaux_prevus, 3, 0, 1, 1)
- self.annee_5 = QtGui.QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_5.setFont(font)
- self.annee_5.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_5.setObjectName(_fromUtf8("annee_5"))
- self.gridLayout.addWidget(self.annee_5, 3, 1, 1, 1)
- self.couche_vierge = QtGui.QCheckBox(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge.setFont(font)
- self.couche_vierge.setObjectName(_fromUtf8("couche_vierge"))
- self.gridLayout.addWidget(self.couche_vierge, 4, 0, 1, 1)
- self.annee_1 = QtGui.QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_1.setFont(font)
- self.annee_1.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_1.setObjectName(_fromUtf8("annee_1"))
- self.gridLayout.addWidget(self.annee_1, 0, 1, 1, 1)
- self.annee_2 = QtGui.QLineEdit(self.gridLayoutWidget)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.annee_2.setFont(font)
- self.annee_2.setAlignment(QtCore.Qt.AlignCenter)
- self.annee_2.setObjectName(_fromUtf8("annee_2"))
- self.gridLayout.addWidget(self.annee_2, 1, 1, 1, 1)
- self.horizontalLayoutWidget_4 = QtGui.QWidget(self.groupBox_2)
- self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(50, 170, 451, 31))
- self.horizontalLayoutWidget_4.setObjectName(_fromUtf8("horizontalLayoutWidget_4"))
- self.horizontalLayout_4 = QtGui.QHBoxLayout(self.horizontalLayoutWidget_4)
- self.horizontalLayout_4.setMargin(0)
- self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
- self.label_nom_couche_vierge = QtGui.QLabel(self.horizontalLayoutWidget_4)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_nom_couche_vierge.setFont(font)
- self.label_nom_couche_vierge.setObjectName(_fromUtf8("label_nom_couche_vierge"))
- self.horizontalLayout_4.addWidget(self.label_nom_couche_vierge)
- self.nom_couche_vierge = QtGui.QLineEdit(self.horizontalLayoutWidget_4)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.nom_couche_vierge.setFont(font)
- self.nom_couche_vierge.setObjectName(_fromUtf8("nom_couche_vierge"))
- self.horizontalLayout_4.addWidget(self.nom_couche_vierge)
- self.horizontalLayoutWidget_5 = QtGui.QWidget(self.groupBox_2)
- self.horizontalLayoutWidget_5.setGeometry(QtCore.QRect(50, 200, 341, 31))
- self.horizontalLayoutWidget_5.setObjectName(_fromUtf8("horizontalLayoutWidget_5"))
- self.horizontalLayout_5 = QtGui.QHBoxLayout(self.horizontalLayoutWidget_5)
- self.horizontalLayout_5.setMargin(0)
- self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5"))
- self.label_geom_couche_vierge = QtGui.QLabel(self.horizontalLayoutWidget_5)
- self.label_geom_couche_vierge.setMinimumSize(QtCore.QSize(152, 0))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_geom_couche_vierge.setFont(font)
- self.label_geom_couche_vierge.setObjectName(_fromUtf8("label_geom_couche_vierge"))
- self.horizontalLayout_5.addWidget(self.label_geom_couche_vierge)
- self.couche_vierge_point = QtGui.QRadioButton(self.horizontalLayoutWidget_5)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge_point.setFont(font)
- self.couche_vierge_point.setObjectName(_fromUtf8("couche_vierge_point"))
- self.horizontalLayout_5.addWidget(self.couche_vierge_point)
- self.couche_vierge_ligne = QtGui.QRadioButton(self.horizontalLayoutWidget_5)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge_ligne.setFont(font)
- self.couche_vierge_ligne.setObjectName(_fromUtf8("couche_vierge_ligne"))
- self.horizontalLayout_5.addWidget(self.couche_vierge_ligne)
- self.couche_vierge_polygone = QtGui.QRadioButton(self.horizontalLayoutWidget_5)
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.couche_vierge_polygone.setFont(font)
- self.couche_vierge_polygone.setObjectName(_fromUtf8("couche_vierge_polygone"))
- self.horizontalLayout_5.addWidget(self.couche_vierge_polygone)
- self.label_3 = QtGui.QLabel(self.groupBox_2)
- self.label_3.setGeometry(QtCore.QRect(320, 60, 60, 29))
- self.label_3.setObjectName(_fromUtf8("label_3"))
- self.label_4 = QtGui.QLabel(self.groupBox_2)
- self.label_4.setGeometry(QtCore.QRect(240, 90, 221, 16))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_4.setFont(font)
- self.label_4.setObjectName(_fromUtf8("label_4"))
- self.label_5 = QtGui.QLabel(self.groupBox_2)
- self.label_5.setGeometry(QtCore.QRect(240, 110, 221, 16))
- font = QtGui.QFont()
- font.setBold(False)
- font.setWeight(50)
- self.label_5.setFont(font)
- self.label_5.setAlignment(QtCore.Qt.AlignCenter)
- self.label_5.setObjectName(_fromUtf8("label_5"))
- self.horizontalLayoutWidget = QtGui.QWidget(table_postgis)
- self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 40, 511, 31))
- self.horizontalLayoutWidget.setObjectName(_fromUtf8("horizontalLayoutWidget"))
- self.horizontalLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget)
- self.horizontalLayout.setMargin(0)
- self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
- self.schema_label = QtGui.QLabel(self.horizontalLayoutWidget)
- self.schema_label.setMaximumSize(QtCore.QSize(75, 16777215))
- self.schema_label.setObjectName(_fromUtf8("schema_label"))
- self.horizontalLayout.addWidget(self.schema_label)
- self.schema = QtGui.QComboBox(self.horizontalLayoutWidget)
- self.schema.setObjectName(_fromUtf8("schema"))
- self.horizontalLayout.addWidget(self.schema)
-
- self.retranslateUi(table_postgis)
- QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), table_postgis.accept)
- QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), table_postgis.reject)
- QtCore.QMetaObject.connectSlotsByName(table_postgis)
-
- def retranslateUi(self, table_postgis):
- table_postgis.setWindowTitle(_translate("table_postgis", "Ajout d\'une table", None))
- self.Titre.setText(_translate("table_postgis", "Création de table", None))
- self.groupBox_2.setTitle(_translate("table_postgis", "Liste des couches à ajouter dans le projet", None))
- self.couche_habitat.setText(_translate("table_postgis", "Habitat", None))
- self.couche_contour.setText(_translate("table_postgis", "Contour", None))
- self.annee_4.setText(_translate("table_postgis", "aaaa", None))
- self.couche_travaux_prevus.setText(_translate("table_postgis", "Travaux Prévus", None))
- self.annee_5.setText(_translate("table_postgis", "aaaa", None))
- self.couche_vierge.setText(_translate("table_postgis", "Vierge", None))
- self.annee_1.setText(_translate("table_postgis", "aaaa", None))
- self.annee_2.setText(_translate("table_postgis", "aaaa", None))
- self.label_nom_couche_vierge.setText(_translate("table_postgis", "- Nom de la couche vierge :", None))
- self.label_geom_couche_vierge.setText(_translate("table_postgis", "- Geométrie de la couche vierge :", None))
- self.couche_vierge_point.setText(_translate("table_postgis", "Point", None))
- self.couche_vierge_ligne.setText(_translate("table_postgis", "Ligne", None))
- self.couche_vierge_polygone.setText(_translate("table_postgis", "Polygone", None))
- self.label_3.setText(_translate("table_postgis", "Attention :", None))
- self.label_4.setText(_translate("table_postgis", "Le nom de la couche vierge ne doit comporter", None))
- self.label_5.setText(_translate("table_postgis", "ni caractères spéciaux, ni espaces", None))
- self.schema_label.setText(_translate("table_postgis", "Nom du projet :", None))
-